kmail Library API Documentation

kmfolderseldlg.cpp

00001 // kmfolderseldlg.cpp 00002 00003 #include <config.h> 00004 #include "kmfolderseldlg.h" 00005 #include "kmfoldertree.h" 00006 #include "kmmainwidget.h" 00007 00008 #include <kdebug.h> 00009 #include <qvbox.h> 00010 00011 #include <assert.h> 00012 00013 namespace KMail { 00014 00015 class FolderItem : public KListViewItem 00016 { 00017 public: 00018 FolderItem( QListView * listView ); 00019 FolderItem( QListView * listView, QListViewItem * afterListViewItem ); 00020 FolderItem( QListViewItem * listViewItem ); 00021 FolderItem( QListViewItem * listViewItem, QListViewItem * afterListViewItem ); 00022 00023 void setFolder( KMFolder * folder ) { mFolder = folder; }; 00024 const KMFolder * folder() { return mFolder; }; 00025 00026 private: 00027 KMFolder * mFolder; 00028 }; 00029 00030 //----------------------------------------------------------------------------- 00031 FolderItem::FolderItem( QListView * listView ) 00032 : KListViewItem( listView ), 00033 mFolder( 0 ) 00034 {} 00035 00036 //----------------------------------------------------------------------------- 00037 FolderItem::FolderItem( QListView * listView, QListViewItem * afterListViewItem ) 00038 : KListViewItem( listView, afterListViewItem ), 00039 mFolder( 0 ) 00040 {} 00041 00042 //----------------------------------------------------------------------------- 00043 FolderItem::FolderItem( QListViewItem * listViewItem ) 00044 : KListViewItem( listViewItem ), 00045 mFolder( 0 ) 00046 {} 00047 00048 //----------------------------------------------------------------------------- 00049 FolderItem::FolderItem( QListViewItem * listViewItem, QListViewItem * afterListViewItem ) 00050 : KListViewItem( listViewItem, afterListViewItem ), 00051 mFolder( 0 ) 00052 {} 00053 00054 00055 //----------------------------------------------------------------------------- 00056 SimpleFolderTree::SimpleFolderTree( QWidget * parent, 00057 KMFolderTree * folderTree, QString & preSelection ) 00058 : KListView( parent ) 00059 { 00060 assert( folderTree ); 00061 00062 int columnIdx = addColumn( i18n( "Folder" ) ); 00063 setRootIsDecorated( true ); 00064 setSorting( -1 ); 00065 00066 FolderItem * lastItem = 0; 00067 FolderItem * lastTopItem = 0; 00068 FolderItem * selectedItem = 0; 00069 int lastDepth = 0; 00070 00071 for ( QListViewItemIterator it( folderTree ) ; it.current() ; ++it ) { 00072 KMFolderTreeItem * fti = static_cast<KMFolderTreeItem *>( it.current() ); 00073 00074 if ( !fti || fti->protocol() == KFolderTreeItem::Search ) 00075 continue; 00076 00077 int depth = fti->depth();// - 1; 00078 //kdDebug( 5006 ) << "LastDepth=" << lastDepth << "\tdepth=" << depth 00079 // << "\tname=" << fti->text( 0 ) << endl; 00080 FolderItem * item = 0; 00081 if ( depth <= 0 ) { 00082 // top level - first top level item or after last existing top level item 00083 if ( lastTopItem ) 00084 item = new FolderItem( this, lastTopItem ); 00085 else 00086 item = new FolderItem( this ); 00087 lastTopItem = item; 00088 depth = 0; 00089 } 00090 else { 00091 if ( depth > lastDepth ) { 00092 // next lower level - parent node will get opened 00093 item = new FolderItem( lastItem ); 00094 lastItem->setOpen( true ); 00095 } 00096 else { 00097 if ( depth == lastDepth ) 00098 // same level - behind previous item 00099 item = new FolderItem( lastItem->parent(), lastItem ); 00100 else if ( depth < lastDepth ) { 00101 // above previous level - might be more than one level difference 00102 // but highest possibility is top level 00103 while ( ( depth <= --lastDepth ) && lastItem->parent() ) { 00104 lastItem = static_cast<FolderItem *>( lastItem->parent() ); 00105 } 00106 if ( lastItem->parent() ) 00107 item = new FolderItem( lastItem->parent(), lastItem ); 00108 else { 00109 // chain somehow broken - what does cause this ??? 00110 kdDebug( 5006 ) << "You shouldn't get here: depth=" << depth 00111 << "folder name=" << fti->text( 0 ) << endl; 00112 item = new FolderItem( this ); 00113 lastTopItem = item; 00114 } 00115 } 00116 } 00117 } 00118 00119 item->setText( columnIdx, fti->text( 0 ) ); 00120 // Make items without folders and top level items unselectable 00121 // (i.e. root item Local Folders and IMAP accounts) 00122 if ( !fti->folder() || depth == 0 ) 00123 item->setSelectable( false ); 00124 else { 00125 item->setFolder( fti->folder() ); 00126 if ( !preSelection.isNull() && preSelection == item->folder()->idString() ) 00127 selectedItem = item; 00128 } 00129 lastItem = item; 00130 lastDepth = depth; 00131 } 00132 00133 if ( selectedItem ) { 00134 setSelected( selectedItem, true ); 00135 ensureItemVisible( selectedItem ); 00136 } 00137 } 00138 00139 //----------------------------------------------------------------------------- 00140 const KMFolder * SimpleFolderTree::folder() const 00141 { 00142 QListViewItem * item = currentItem(); 00143 if( item ) { 00144 const KMFolder * folder = static_cast<FolderItem *>( item )->folder(); 00145 if( folder ) return folder; 00146 } 00147 return 0; 00148 } 00149 00150 } // namespace KMail 00151 00152 00153 //----------------------------------------------------------------------------- 00154 QString KMFolderSelDlg::oldSelection; 00155 00156 //----------------------------------------------------------------------------- 00157 KMFolderSelDlg::KMFolderSelDlg( KMMainWidget * parent, const QString& caption ) 00158 : KDialogBase( parent, "folder dialog", true, caption, 00159 Ok|Cancel, Ok, true ) // mainwin as parent, modal 00160 { 00161 KMFolderTree * ft = parent->folderTree(); 00162 assert( ft ); 00163 00164 mTreeView = new KMail::SimpleFolderTree( makeVBoxMainWidget(), ft, oldSelection ); 00165 mTreeView->setFocus(); 00166 connect( mTreeView, SIGNAL( doubleClicked( QListViewItem*, const QPoint&, int ) ), 00167 this, SLOT( slotSelect() ) ); 00168 00169 resize(220, 300); 00170 } 00171 00172 00173 //----------------------------------------------------------------------------- 00174 KMFolderSelDlg::~KMFolderSelDlg() 00175 { 00176 const KMFolder * cur = folder(); 00177 if( cur ) 00178 oldSelection = cur->idString(); 00179 } 00180 00181 00182 //----------------------------------------------------------------------------- 00183 KMFolder * KMFolderSelDlg::folder( void ) 00184 { 00185 return ( KMFolder * ) mTreeView->folder(); 00186 } 00187 00188 //----------------------------------------------------------------------------- 00189 void KMFolderSelDlg::slotSelect() 00190 { 00191 accept(); 00192 } 00193 00194 00195 //----------------------------------------------------------------------------- 00196 #include "kmfolderseldlg.moc"
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:01 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003