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 void slotNoContentChanged();
00092 void updateCount();
00093
00094 protected:
00095 void init();
00096 KMFolder* mFolder;
00098 virtual bool useTopLevelIcon() const { return depth() == 0; }
00100 virtual int iconSize() const { return 16; }
00101
00102 private:
00103 bool mNeedsRepaint;
00104 };
00105
00106
00107
00108 class KMFolderTree : public KMail::FolderTreeBase
00109 {
00110 Q_OBJECT
00111
00112 public:
00113 KMFolderTree( KMMainWidget *mainWidget, QWidget *parent=0,
00114 const char *name=0 );
00115
00117 void writeConfig();
00118
00120 virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00121
00123 void createFolderList( QStringList *str,
00124 QValueList<QGuardedPtr<KMFolder> > *folders,
00125 bool localFolders=true,
00126 bool imapFolders=true,
00127 bool dimapFolders=true,
00128 bool searchFolders=false,
00129 bool includeNoContent=true,
00130 bool includeNoChildren=true );
00131
00133 virtual void readConfig(void);
00134
00136 void cleanupConfigFile();
00137
00139 void nextUnreadFolder(bool confirm);
00140
00142 bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00143
00144 KMFolder *currentFolder() const;
00145
00146 QValueList<QGuardedPtr<KMFolder> > selectedFolders();
00147
00148 enum ColumnMode {unread=15, total=16, foldersize=17};
00149
00151 void toggleColumn(int column, bool openFolders = false);
00152
00155 virtual void updatePopup() const;
00156
00158 void showFolder( KMFolder* );
00159
00161 enum MenuAction {
00162 CopyMessage,
00163 MoveMessage,
00164 CopyFolder,
00165 MoveFolder
00166 };
00167
00169 void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00170 QPopupMenu *menu, QListViewItem *start = 0 );
00171
00172 signals:
00174 void folderSelected(KMFolder*);
00175
00177 void folderSelectedUnread( KMFolder * );
00178
00180 void syncStateChanged();
00181
00183 void columnsChanged();
00184
00186 void iconChanged( KMFolderTreeItem * );
00187
00189 void nameChanged( KMFolderTreeItem * );
00190
00191 public slots:
00193 virtual void reload(bool openFolders = false);
00194
00196 void nextUnreadFolder();
00197
00199 void prevUnreadFolder();
00200
00202 void incCurrentFolder();
00203
00205 void decCurrentFolder();
00206
00208 void selectCurrentFolder();
00209
00211 void delayedUpdate();
00212
00214 void slotAccountRemoved(KMAccount*);
00215
00217 void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00218
00224 void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00225
00227 void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00228
00230 void copyFolder();
00231
00233 void cutFolder();
00234
00236 void pasteFolder();
00237
00239 void delayedReload();
00240
00241 protected slots:
00242
00244 void doFolderListChanged();
00245
00247 void slotFolderRemoved(KMFolder *);
00248
00250 void slotFolderMoveOrCopyOperationFinished();
00251
00253 void refresh();
00254
00256 void openFolder();
00257
00259 void slotFolderExpanded( QListViewItem * item );
00260
00262 void slotFolderCollapsed( QListViewItem * item );
00263
00265 void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00266
00268 void slotUpdateCountsDelayed(KMFolder * folder);
00269 void slotUpdateCountTimeout();
00270 void slotUpdateOneCount();
00271
00273 void slotToggleUnreadColumn();
00274 void slotToggleTotalColumn();
00275 void slotToggleSizeColumn();
00276
00277 void slotContextMenuRequested( QListViewItem *, const QPoint & );
00278
00280 void slotCheckMail();
00281
00282 void slotNewMessageToMailingList();
00283
00285 virtual void moveSelectedToFolder( int menuId );
00287 virtual void copySelectedToFolder( int menuId );
00288
00290 void updateCopyActions();
00291
00292 void slotSyncStateChanged();
00293
00294 protected:
00295 virtual void contentsMousePressEvent( QMouseEvent *e );
00296 virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00297
00299 virtual void updateUnreadAll( );
00300
00301 virtual void resizeEvent(QResizeEvent*);
00302
00304 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00305 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00306
00307 QTimer mUpdateTimer;
00308
00310 void contentsDragEnterEvent( QDragEnterEvent *e );
00311 void contentsDragMoveEvent( QDragMoveEvent *e );
00312 void contentsDragLeaveEvent( QDragLeaveEvent *e );
00313 void contentsDropEvent( QDropEvent *e );
00314 virtual QDragObject* dragObject();
00315
00317 QListViewItem *oldCurrent, *oldSelected;
00318 QListViewItem *dropItem;
00319 KMFolderTreeItem *mLastItem;
00320 QTimer autoopen_timer;
00321
00322
00323 bool eventFilter(QObject*, QEvent*);
00324
00326 void prepareItem( KMFolderTreeItem* );
00327
00329 void connectSignals();
00330
00332 void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00333
00334 private slots:
00335 void slotAddToFavorites();
00336 void slotUnhideLocalInbox();
00337
00338 private:
00340 QListViewItemIterator mUpdateIterator;
00341
00343 KPopupMenu* mPopup;
00344 int mUnreadPop;
00345 int mTotalPop;
00346 int mSizePop;
00347
00348 bool mReloading;
00349 QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00350 bool mCutFolder;
00351
00352 QTimer *mUpdateCountTimer;
00353 QMap<QString,KMFolder*> mFolderToUpdateCount;
00354
00356 KMMenuToFolder mMenuToFolder;
00357 };
00358
00359 #endif