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