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
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
00096
00097
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 }