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 DecCopyMessage
00167 };
00168
00170 void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00171 QPopupMenu *menu, QListViewItem *start = 0 );
00172
00173 signals:
00175 void folderSelected(KMFolder*);
00176
00178 void folderSelectedUnread( KMFolder * );
00179
00181 void syncStateChanged();
00182
00184 void columnsChanged();
00185
00187 void iconChanged( KMFolderTreeItem * );
00188
00190 void nameChanged( KMFolderTreeItem * );
00191
00192 public slots:
00194 virtual void reload(bool openFolders = false);
00195
00197 void nextUnreadFolder();
00198
00200 void prevUnreadFolder();
00201
00203 void incCurrentFolder();
00204
00206 void decCurrentFolder();
00207
00209 void selectCurrentFolder();
00210
00212 void delayedUpdate();
00213
00215 void slotAccountRemoved(KMAccount*);
00216
00218 void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00219
00225 void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00226
00228 void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00229
00231 void copyFolder();
00232
00234 void cutFolder();
00235
00237 void pasteFolder();
00238
00240 void delayedReload();
00241
00242 protected slots:
00243
00245 void doFolderListChanged();
00246
00248 void slotFolderRemoved(KMFolder *);
00249
00251 void slotFolderMoveOrCopyOperationFinished();
00252
00254 void refresh();
00255
00257 void openFolder();
00258
00260 void slotFolderExpanded( QListViewItem * item );
00261
00263 void slotFolderCollapsed( QListViewItem * item );
00264
00266 void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00267
00269 void slotUpdateCountsDelayed(KMFolder * folder);
00270 void slotUpdateCountTimeout();
00271 void slotUpdateOneCount();
00272
00274 void slotToggleUnreadColumn();
00275 void slotToggleTotalColumn();
00276 void slotToggleSizeColumn();
00277
00278 void slotContextMenuRequested( QListViewItem *, const QPoint & );
00279
00281 void slotCheckMail();
00282
00283 void slotNewMessageToMailingList();
00284
00286 virtual void moveSelectedToFolder( int menuId );
00288 virtual void copySelectedToFolder( int menuId );
00289
00291 void updateCopyActions();
00292
00293 void slotSyncStateChanged();
00294
00295 protected:
00296 virtual void contentsMousePressEvent( QMouseEvent *e );
00297 virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00298
00300 virtual void updateUnreadAll( );
00301
00302 virtual void resizeEvent(QResizeEvent*);
00303
00305 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00306 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00307
00308 QTimer mUpdateTimer;
00309
00311 void contentsDragEnterEvent( QDragEnterEvent *e );
00312 void contentsDragMoveEvent( QDragMoveEvent *e );
00313 void contentsDragLeaveEvent( QDragLeaveEvent *e );
00314 void contentsDropEvent( QDropEvent *e );
00315 virtual QDragObject* dragObject();
00316
00318 QListViewItem *oldCurrent, *oldSelected;
00319 QListViewItem *dropItem;
00320 KMFolderTreeItem *mLastItem;
00321 QTimer autoopen_timer;
00322
00323
00324 bool eventFilter(QObject*, QEvent*);
00325
00327 void prepareItem( KMFolderTreeItem* );
00328
00330 void connectSignals();
00331
00333 void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00334
00335 private slots:
00336 void slotAddToFavorites();
00337 void slotUnhideLocalInbox();
00338
00339 private:
00341 QListViewItemIterator mUpdateIterator;
00342
00344 KPopupMenu* mPopup;
00345 int mUnreadPop;
00346 int mTotalPop;
00347 int mSizePop;
00348
00349 bool mReloading;
00350 QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00351 bool mCutFolder;
00352
00353 QTimer *mUpdateCountTimer;
00354 QMap<QString,KMFolder*> mFolderToUpdateCount;
00355
00357 KMMenuToFolder mMenuToFolder;
00358 };
00359
00360 #endif