00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __KMFOLDERTREE
00019 #define __KMFOLDERTREE
00020
00021 #include "foldertreebase.h"
00022
00023 #include <klocale.h>
00024 #include <kdepimmacros.h>
00025
00026 #include <qguardedptr.h>
00027 #include <qwidget.h>
00028 #include <qtimer.h>
00029 #include <qheader.h>
00030
00031 class QDropEvent;
00032 class QPixmap;
00033 class QPainter;
00034 class QPopupMenu;
00035 class KPopupMenu;
00036 class KMFolder;
00037 class KMFolderDir;
00038 class KMFolderImap;
00039 class KMFolderTree;
00040 class KMAccount;
00041
00042 typedef QMap<int,KMFolder*> KMMenuToFolder;
00043 template <typename T> class QGuardedPtr;
00044
00045 class KDE_EXPORT KMFolderTreeItem : public QObject, public KFolderTreeItem
00046 {
00047 Q_OBJECT
00048 public:
00050 KMFolderTreeItem( KFolderTree *parent, const QString & name,
00051 KFolderTreeItem::Protocol protocol=KFolderTreeItem::NONE );
00052
00054 KMFolderTreeItem( KFolderTree *parent, const QString & name,
00055 KMFolder* folder );
00056
00058 KMFolderTreeItem( KFolderTreeItem* parent, const QString & name,
00059 KMFolder* folder );
00060 virtual ~KMFolderTreeItem();
00061
00062 QPixmap normalIcon( int size ) const;
00063 QPixmap unreadIcon( int size ) const;
00064
00065 void setNeedsRepaint( bool value ) { mNeedsRepaint = value; }
00066 bool needsRepaint() const { return mNeedsRepaint; }
00067
00069 KMFolder* folder() const { return mFolder; }
00070 QListViewItem* parent() const { return KFolderTreeItem::parent(); }
00071
00074 void adjustUnreadCount( int newUnreadCount );
00075
00077 virtual bool acceptDrag(QDropEvent* e) const;
00078
00079 signals:
00081 void iconChanged( KMFolderTreeItem * );
00083 void nameChanged( KMFolderTreeItem * );
00084
00085 public slots:
00086 void properties();
00087 void assignShortcut();
00088 void slotShowExpiryProperties();
00089 void slotIconsChanged();
00090 void slotNameChanged();
00091
00092 protected:
00093 void init();
00094 KMFolder* mFolder;
00096 virtual bool useTopLevelIcon() const { return depth() == 0; }
00098 virtual int iconSize() const { return 16; }
00099
00100 private:
00101 bool mNeedsRepaint;
00102 };
00103
00104
00105
00106 class KMFolderTree : public KMail::FolderTreeBase
00107 {
00108 Q_OBJECT
00109
00110 public:
00111 KMFolderTree( KMMainWidget *mainWidget, QWidget *parent=0,
00112 const char *name=0 );
00113
00115 void writeConfig();
00116
00118 virtual void reload(bool openFolders = false);
00119
00121 virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00122
00124 virtual QListViewItem* indexOfFolder( const KMFolder* folder ) const
00125 {
00126 if ( mFolderToItem.contains( folder ) )
00127 return mFolderToItem[ folder ];
00128 else
00129 return 0;
00130 }
00131
00133 void createFolderList( QStringList *str,
00134 QValueList<QGuardedPtr<KMFolder> > *folders,
00135 bool localFolders=true,
00136 bool imapFolders=true,
00137 bool dimapFolders=true,
00138 bool searchFolders=false,
00139 bool includeNoContent=true,
00140 bool includeNoChildren=true );
00141
00143 virtual void readConfig(void);
00144
00146 void cleanupConfigFile();
00147
00149 void nextUnreadFolder(bool confirm);
00150
00152 bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00153
00154 KMFolder *currentFolder() const;
00155
00156 QValueList<QGuardedPtr<KMFolder> > selectedFolders();
00157
00158 enum ColumnMode {unread=15, total=16, foldersize=17};
00159
00161 void toggleColumn(int column, bool openFolders = false);
00162
00165 virtual void updatePopup() const;
00166
00168 void showFolder( KMFolder* );
00169
00170 void insertIntoFolderToItemMap( const KMFolder *folder, KMFolderTreeItem* item )
00171 {
00172 mFolderToItem.insert( folder, item );
00173 }
00174
00175 void removeFromFolderToItemMap( const KMFolder *folder )
00176 {
00177 mFolderToItem.remove( folder );
00178 }
00179
00181 enum MenuAction {
00182 CopyMessage,
00183 MoveMessage,
00184 CopyFolder,
00185 MoveFolder
00186 };
00187
00189 void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00190 QPopupMenu *menu, QListViewItem *start = 0 );
00191
00192 signals:
00194 void folderSelected(KMFolder*);
00195
00197 void folderSelectedUnread( KMFolder * );
00198
00200 void columnsChanged();
00201
00203 void iconChanged( KMFolderTreeItem * );
00204
00206 void nameChanged( KMFolderTreeItem * );
00207
00208 public slots:
00210 void nextUnreadFolder();
00211
00213 void prevUnreadFolder();
00214
00216 void incCurrentFolder();
00217
00219 void decCurrentFolder();
00220
00222 void selectCurrentFolder();
00223
00225 void delayedUpdate();
00226
00228 void slotAccountRemoved(KMAccount*);
00229
00231 void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00232
00238 void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00239
00241 void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00242
00244 void copyFolder();
00245
00247 void cutFolder();
00248
00250 void pasteFolder();
00251
00252 protected slots:
00253
00255 void doFolderListChanged();
00256
00258 void slotFolderRemoved(KMFolder *);
00259
00261 void slotFolderMoveOrCopyOperationFinished();
00262
00264 void refresh();
00265
00267 void openFolder();
00268
00270 void slotFolderExpanded( QListViewItem * item );
00271
00273 void slotFolderCollapsed( QListViewItem * item );
00274
00276 void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00277
00279 void slotUpdateCounts(KMFolder * folder);
00280 void slotUpdateCounts(KMFolderImap * folder, bool success = true);
00282 void slotUpdateCountsDelayed(KMFolder * folder);
00283 void slotUpdateCountTimeout();
00284 void slotUpdateOneCount();
00285
00287 void slotToggleUnreadColumn();
00288 void slotToggleTotalColumn();
00289 void slotToggleSizeColumn();
00290
00291 void slotContextMenuRequested( QListViewItem *, const QPoint & );
00292
00294 void slotCheckMail();
00295
00296 void slotNewMessageToMailingList();
00297
00299 virtual void moveSelectedToFolder( int menuId );
00301 virtual void copySelectedToFolder( int menuId );
00302
00304 void updateCopyActions();
00305
00306 protected:
00307 virtual void contentsMousePressEvent( QMouseEvent *e );
00308 virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00309
00311 virtual void updateUnreadAll( );
00312
00313 virtual void resizeEvent(QResizeEvent*);
00314
00316 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00317 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00318
00319 QTimer mUpdateTimer;
00320
00322 void contentsDragEnterEvent( QDragEnterEvent *e );
00323 void contentsDragMoveEvent( QDragMoveEvent *e );
00324 void contentsDragLeaveEvent( QDragLeaveEvent *e );
00325 void contentsDropEvent( QDropEvent *e );
00326 virtual QDragObject* dragObject();
00327
00329 QListViewItem *oldCurrent, *oldSelected;
00330 QListViewItem *dropItem;
00331 KMFolderTreeItem *mLastItem;
00332 QTimer autoopen_timer;
00333
00334
00335 bool eventFilter(QObject*, QEvent*);
00336
00338 void prepareItem( KMFolderTreeItem* );
00339
00341 void connectSignals();
00342
00344 void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00345
00346 private slots:
00347 void slotAddToFavorites();
00348 void slotUnhideLocalInbox();
00349
00350 private:
00352 QListViewItemIterator mUpdateIterator;
00353
00355 KPopupMenu* mPopup;
00356 int mUnreadPop;
00357 int mTotalPop;
00358 int mSizePop;
00359
00360 bool mReloading;
00361 QMap<const KMFolder*, KMFolderTreeItem*> mFolderToItem;
00362 QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00363 bool mCutFolder;
00364
00365 QTimer *mUpdateCountTimer;
00366 QMap<QString,KMFolder*> mFolderToUpdateCount;
00367
00369 KMMenuToFolder mMenuToFolder;
00370 };
00371
00372 #endif