kmfolderseldlg.cpp
00001
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();
00078
00079
00080 FolderItem * item = 0;
00081 if ( depth <= 0 ) {
00082
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
00093 item = new FolderItem( lastItem );
00094 lastItem->setOpen( true );
00095 }
00096 else {
00097 if ( depth == lastDepth )
00098
00099 item = new FolderItem( lastItem->parent(), lastItem );
00100 else if ( depth < lastDepth ) {
00101
00102
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
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
00121
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 }
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 )
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"
This file is part of the documentation for kmail Library Version 3.2.2.