VocabTreeView.cpp

Go to the documentation of this file.
00001 #include "VocabTreeView.h"
00002 
00003 VocabTreeView::VocabTreeView( Controller& controller, QWidget *parent = 0, const char* name = 0 )
00004     : SmartListView( parent, name ), dirty( false ), controller( controller ) {
00005 }
00006 
00007 VocabTreeView::~VocabTreeView() {
00008 }
00009 
00010 VocabTreeItem* VocabTreeView::currentItem() const {
00011     return( (VocabTreeItem*)QListView::currentItem() );
00012 }
00013 
00014 FolderTreeItem* VocabTreeView::addFolder( Folder* folder = NULL, QMap<int,Vocabulary>* vocabularies = NULL ) {
00015     FolderTreeItem* newFolderItem = NULL;
00016     if( folder )
00017         setUpdatesEnabled( false );
00018     TreeItem* selectedItem = (TreeItem*)currentItem();
00019     if( selectedItem && selectedItem->isFolder() ) {
00020         FolderTreeItem* folderItem = (FolderTreeItem*)selectedItem;
00021         newFolderItem = addFolder( folderItem, folder, vocabularies );
00022     }
00023     if( folder )
00024         setUpdatesEnabled( true );
00025     return( newFolderItem );
00026 }
00027 
00028 FolderTreeItem* VocabTreeView::addFolder( FolderTreeItem* parentFolderItem, Folder* folder = NULL, QMap<int,Vocabulary>* vocabularies = NULL ) {
00029     Folder* parentFolder = parentFolderItem->getFolder();
00030     Folder* newFolder = controller.addFolder( parentFolder, folder );    
00031     if( !newFolder )
00032         return( NULL );
00033     FolderTreeItem* newFolderItem = new FolderTreeItem( parentFolderItem, newFolder, controller.getPreferences() );
00034     newFolderItem->setOpen( false );
00035     newFolderItem->setOn( !folder );
00036     parentFolderItem->setOpen( !folder );
00037     if( folder ) {
00038         for( Base* folderChild = folder->first(); folderChild; folderChild = folder->next() ) {
00039             if( strcmp( folderChild->className(), "Folder" ) == 0 ) {
00040                 Folder* childFolder = (Folder*)folderChild;
00041                 addFolder( newFolderItem, childFolder, vocabularies );
00042             }
00043             else if( strcmp( folderChild->className(), "Vocabulary" ) == 0 ) {
00044                 Vocabulary* childVocab = (Vocabulary*)folderChild;
00045                 // childVocab contains only a reference to a vocabulary.  The actual data is found in the map.
00046                 if( vocabularies && vocabularies->contains( childVocab->getId() ) ) {
00047                     Vocabulary& actualVocab = (*vocabularies)[ childVocab->getId() ];
00048                     addVocab( newFolderItem, &actualVocab );
00049                 }
00050             }
00051         }
00052     }
00053     return( newFolderItem );
00054 }
00055 
00056 VocabTreeItem* VocabTreeView::addVocab( Vocabulary* vocab = NULL ) {
00057     VocabTreeItem* newVocabItem = NULL;
00058     if( vocab )
00059         setUpdatesEnabled( false );
00060     TreeItem* selectedItem = (TreeItem*)currentItem();
00061     if( selectedItem && selectedItem->isFolder() ) {
00062         FolderTreeItem* folderItem = (FolderTreeItem*)selectedItem;
00063         newVocabItem = addVocab( folderItem, vocab );
00064     }
00065     if( vocab )
00066         setUpdatesEnabled( true );
00067     return( newVocabItem );
00068 }
00069 
00070 VocabTreeItem* VocabTreeView::addVocab( FolderTreeItem* parentFolderItem, Vocabulary* vocab = NULL ) {
00071     Folder* parentFolder = parentFolderItem->getFolder();
00072     Vocabulary* newVocab = controller.addVocabulary( parentFolder, vocab );
00073     if( !newVocab )
00074         return( NULL );
00075 
00076     VocabTreeItem* newVocabItem = new VocabTreeItem( parentFolderItem, newVocab );
00077     newVocabItem->setOpen( false );
00078     newVocabItem->setOn( !vocab );
00079     parentFolderItem->setOpen( true );
00080     return( newVocabItem );
00081 }
00082 
00083 void VocabTreeView::removeItem() {
00084     if( currentItem() ) {
00085         QListViewItem* itemToSelect = currentItem()->itemAbove();
00086         delete( currentItem() );
00087         setSelected( itemToSelect, true );
00088     }
00089 }
00090 
00091 VocabTreeItem* VocabTreeView::getVocabTreeItem( int id ) {
00092     return( getVocabTreeItemRec( (TreeItem*)firstChild(), id ) );
00093 }
00094 
00095 //Vocabulary* VocabTreeView::getVocabulary( int id ) {
00096 //    VocabTreeItem* vocabTreeItem = getVocabTreeItemRec( (TreeItem*)firstChild(), id );
00097 //    return( vocabTreeItem ? vocabTreeItem->getVocabulary() : NULL );
00098 //}
00099 
00100 VocabTreeItem* VocabTreeView::getVocabTreeItemRec( TreeItem* item, int id ) {
00101     if( item ) {
00102         if( item->isFolder() ) {
00103             TreeItem* child = (TreeItem*)item->firstChild();
00104             while( child ) {
00105                 VocabTreeItem* vocabTreeItem = getVocabTreeItemRec( child, id );
00106                 if( vocabTreeItem )
00107                     return( vocabTreeItem );
00108                 child = (TreeItem*)child->nextSibling();
00109             }
00110         }
00111         else {
00112             VocabTreeItem* vocabTreeItem = (VocabTreeItem*)item;
00113             Vocabulary* vocab = vocabTreeItem->getVocabulary();
00114             return( vocab->getId() == id ? vocabTreeItem : NULL );
00115         }
00116     }
00117     return( NULL );
00118 }
00119 
00120 IdList VocabTreeView::getAllChildrenVocab( TreeItem* item ) const {
00121     IdList vocabList;
00122     getAllChildrenVocabRec( item, vocabList );
00123     return( vocabList );
00124 }
00125 
00126 void VocabTreeView::getAllChildrenVocabRec( TreeItem* item, IdList& vocabList ) const {
00127     if( item->isFolder() ) {
00128         TreeItem* child = (TreeItem*)item->firstChild();
00129         while( child ) {
00130             getAllChildrenVocabRec( child, vocabList );
00131             child = (TreeItem*)child->nextSibling();
00132         }
00133     }
00134     else {
00135         VocabTreeItem* vocabItem = (VocabTreeItem*)item;
00136         Vocabulary* vocab = vocabItem->getVocabulary();
00137         vocabList.append( vocab->getId() );
00138     }
00139 }
00140 
00141 Folder* VocabTreeView::getRootFolder() const {
00142     FolderTreeItem* rootFolderItem = (FolderTreeItem*)firstChild();
00143     return( rootFolderItem->getFolder() );
00144 }
00145 
00146 int VocabTreeView::getMaxFolderId() const {
00147     return( getRootFolder()->getMaxId() );
00148 }
00149 
00150 int VocabTreeView::getMaxVocabId() const {
00151     return( getRootFolder()->getMaxVocabId() );
00152 }

Generated on Sun Mar 1 17:30:47 2009 for toMOTko by  doxygen 1.5.6