#include "DepotTree.h"
#include "Depot.h"
#include "DirEntry.h"
#include "ImageManager.h"
#include "Iupdateable.h"
#include "P4Client.h"
#include <qheader.h>
#include <qstringlist.h>
DepotTree::DepotTree( QWidget* parent, const char* name ) :
QListView( parent, name )
{
setRootIsDecorated( true );
setSorting( 0, false );
addColumn( "" );
header()->hide();
QObject::connect( this, SIGNAL(expanded(QListViewItem*)),
this, SLOT(slotExpanded(QListViewItem*)) );
}
void DepotTree::updateDepotEntry( QListViewItem* item )
{
// update node here.
QString s = item->text(0).mid( 2 );
Perforce::Depot* d = Perforce::Depot::getDepot( s );
QListViewItem* i = item->firstChild();
// remove dummy...
item->takeItem( i );
if (d != NULL) {
// get dirs
// Perforce::DirEntryList lst = d->getDirEntries();
appendDirEntries( item, d->getDirEntries() );
// get files.
Perforce::FileEntryList lst2 =
Perforce::FileEntry::getFileEntries( item->text(0) );
appendFileEntries( item, lst2 );
}
}
void DepotTree::appendDirEntries( QListViewItem* item,
Perforce::DirEntryList lst )
{
for (Perforce::DirEntry* d = lst.first(); d != NULL; d = lst.next()) {
ASSERT( d != NULL );
QListViewItem* i = new QListViewItem( item, d->getName() );
i->setPixmap( 0,
ImageManager::getInstance()->getPixmap("folder_grey.png")
);
QListViewItem* dummy = new QListViewItem( i, d->getFullPath() );
}
}
void DepotTree::appendFileEntries( QListViewItem* item,
Perforce::FileEntryList lst )
{
for (Perforce::FileEntry* f = lst.first(); f != NULL; f = lst.next()) {
ASSERT( f != NULL );
if (f != NULL) {
QListViewItem* i = new QListViewItem( item, f->getGuiLabel() );
int pos = f->getDepotFile().findRev( '.' );
QString ext = f->getDepotFile().mid( pos );
i->setPixmap( 0, Perforce::FileEntry::getPixmapForFileType(ext) );
}
}
}
void DepotTree::updateDirEntry( QListViewItem* item )
{
QListViewItem* i = item->firstChild();
// qDebug( "Dir Entry: %s", i->text(0).latin1() );
item->removeItem( i );
QStringList lst = QStringList::split( "/", i->text(0) );
QString name = lst.first();
Perforce::Depot* depot = Perforce::Depot::getDepot( name );
ASSERT( depot != NULL );
Perforce::DirEntry* dir = depot->getDirEntry( i->text(0) );
if (dir != NULL) {
appendDirEntries( item, dir->getDirs() );
appendFileEntries( item, dir->getFiles() );
}
}
void DepotTree::slotExpanded( QListViewItem* item )
{
// qDebug( "void DepotTree::slotExpanded( QListViewItem* item )" );
if (item == NULL) {
return;
}
QListViewItem* i = item->firstChild();
if (i == NULL) {
return;
}
if (i->text(0) == "depot-dummy") {
updateDepotEntry( item );
}
else if (i->text(0).startsWith("//")) {
if (item->text(0) == "java") {
qDebug( "break!" );
}
updateDirEntry( item );
}
}
void DepotTree::refresh()
{
// qDebug( "DepotTree::refresh()" );
clear();
QListViewItem* item;
QListViewItem* dummy;
Perforce::DepotList lst = Perforce::Depot::getDepots( true );
for (Perforce::Depot* d = lst.first(); d != NULL; d = lst.next()) {
ASSERT( d != NULL );
QString s = d->getName();
item = new QListViewItem( this, "//" + s );
item->setPixmap( 0, ImageManager::getInstance()->getPixmap("depot.png") );
// add dummy.
dummy = new QListViewItem( item, "depot-dummy" );
}
}