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 columnsChanged();
00181
00183 void iconChanged( KMFolderTreeItem * );
00184
00186 void nameChanged( KMFolderTreeItem * );
00187
00188 public slots:
00190 virtual void reload(bool openFolders = false);
00191
00193 void nextUnreadFolder();
00194
00196 void prevUnreadFolder();
00197
00199 void incCurrentFolder();
00200
00202 void decCurrentFolder();
00203
00205 void selectCurrentFolder();
00206
00208 void delayedUpdate();
00209
00211 void slotAccountRemoved(KMAccount*);
00212
00214 void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00215
00221 void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00222
00224 void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00225
00227 void copyFolder();
00228
00230 void cutFolder();
00231
00233 void pasteFolder();
00234
00236 void delayedReload();
00237
00238 protected slots:
00239
00241 void doFolderListChanged();
00242
00244 void slotFolderRemoved(KMFolder *);
00245
00247 void slotFolderMoveOrCopyOperationFinished();
00248
00250 void refresh();
00251
00253 void openFolder();
00254
00256 void slotFolderExpanded( QListViewItem * item );
00257
00259 void slotFolderCollapsed( QListViewItem * item );
00260
00262 void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00263
00265 void slotUpdateCountsDelayed(KMFolder * folder);
00266 void slotUpdateCountTimeout();
00267 void slotUpdateOneCount();
00268
00270 void slotToggleUnreadColumn();
00271 void slotToggleTotalColumn();
00272 void slotToggleSizeColumn();
00273
00274 void slotContextMenuRequested( QListViewItem *, const QPoint & );
00275
00277 void slotCheckMail();
00278
00279 void slotNewMessageToMailingList();
00280
00282 virtual void moveSelectedToFolder( int menuId );
00284 virtual void copySelectedToFolder( int menuId );
00285
00287 void updateCopyActions();
00288
00289 protected:
00290 virtual void contentsMousePressEvent( QMouseEvent *e );
00291 virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00292
00294 virtual void updateUnreadAll( );
00295
00296 virtual void resizeEvent(QResizeEvent*);
00297
00299 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00300 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00301
00302 QTimer mUpdateTimer;
00303
00305 void contentsDragEnterEvent( QDragEnterEvent *e );
00306 void contentsDragMoveEvent( QDragMoveEvent *e );
00307 void contentsDragLeaveEvent( QDragLeaveEvent *e );
00308 void contentsDropEvent( QDropEvent *e );
00309 virtual QDragObject* dragObject();
00310
00312 QListViewItem *oldCurrent, *oldSelected;
00313 QListViewItem *dropItem;
00314 KMFolderTreeItem *mLastItem;
00315 QTimer autoopen_timer;
00316
00317
00318 bool eventFilter(QObject*, QEvent*);
00319
00321 void prepareItem( KMFolderTreeItem* );
00322
00324 void connectSignals();
00325
00327 void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00328
00329 private slots:
00330 void slotAddToFavorites();
00331 void slotUnhideLocalInbox();
00332
00333 private:
00335 QListViewItemIterator mUpdateIterator;
00336
00338 KPopupMenu* mPopup;
00339 int mUnreadPop;
00340 int mTotalPop;
00341 int mSizePop;
00342
00343 bool mReloading;
00344 QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00345 bool mCutFolder;
00346
00347 QTimer *mUpdateCountTimer;
00348 QMap<QString,KMFolder*> mFolderToUpdateCount;
00349
00351 KMMenuToFolder mMenuToFolder;
00352 };
00353
00354 #endif