kmail
kmfoldertree.h
Go to the documentation of this file.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 "kmail_export.h"
00022 #include "foldertreebase.h"
00023
00024 #include <klocale.h>
00025
00026 #include <QWidget>
00027 #include <QTimer>
00028 #include <q3header.h>
00029 #include <QPixmap>
00030 #include <QDragLeaveEvent>
00031 #include <QEvent>
00032 #include <QDragMoveEvent>
00033 #include <QDropEvent>
00034 #include <QList>
00035 #include <QResizeEvent>
00036 #include <QDragEnterEvent>
00037 #include <QMouseEvent>
00038 #include <Q3DragObject>
00039 #include <QPointer>
00040
00041 class QDropEvent;
00042 class QPixmap;
00043 class QMenu;
00044 class KMenu;
00045 class KMFolder;
00046 class KMFolderDir;
00047 class KMFolderImap;
00048 class KMFolderTree;
00049 class KMAccount;
00050
00051 typedef QMap<QAction*,KMFolder*> KMMenuToFolder;
00052 template <typename T> class QPointer;
00053
00054 using KPIM::KFolderTree;
00055 using KPIM::KFolderTreeItem;
00056
00057 class KMAIL_EXPORT KMFolderTreeItem : public QObject, public KFolderTreeItem
00058 {
00059 Q_OBJECT
00060 public:
00062 KMFolderTreeItem( KFolderTree *parent, const QString & name,
00063 KFolderTreeItem::Protocol protocol=KFolderTreeItem::NONE );
00064
00066 KMFolderTreeItem( KFolderTree *parent, const QString & name,
00067 KMFolder* folder );
00068
00070 KMFolderTreeItem( KFolderTreeItem* parent, const QString & name,
00071 KMFolder* folder );
00072 virtual ~KMFolderTreeItem();
00073
00074 QPixmap normalIcon( int size ) const;
00075 QPixmap unreadIcon( int size ) const;
00076
00077 void setNeedsRepaint( bool value ) { mNeedsRepaint = value; }
00078 bool needsRepaint() const { return mNeedsRepaint; }
00079
00081 KMFolder* folder() const { return mFolder; }
00082 Q3ListViewItem* parent() const { return KFolderTreeItem::parent(); }
00083
00086 void adjustUnreadCount( int newUnreadCount );
00087
00089 virtual bool acceptDrag(QDropEvent* e) const;
00090
00091 signals:
00093 void iconChanged( KMFolderTreeItem * );
00095 void nameChanged( KMFolderTreeItem * );
00096
00097 public slots:
00098 void properties();
00099 void assignShortcut();
00100 void slotShowExpiryProperties();
00101 void slotIconsChanged();
00102 void slotNameChanged();
00103 void slotNoContentChanged();
00104 void updateCount();
00105
00106 protected:
00107 void init();
00108 KMFolder* mFolder;
00110 virtual bool useTopLevelIcon() const { return depth() == 0; }
00112 virtual int iconSize() const { return 16; }
00113
00114 private:
00115 bool mNeedsRepaint;
00116 };
00117
00118
00119
00120 class KMFolderTree : public KMail::FolderTreeBase
00121 {
00122 Q_OBJECT
00123
00124 public:
00125 explicit KMFolderTree( KMMainWidget *mainWidget, QWidget *parent=0,
00126 const char *name=0 );
00127
00129 void writeConfig();
00130
00132 virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00133
00135 void createFolderList( QStringList *str,
00136 QList<QPointer<KMFolder> > *folders,
00137 bool localFolders=true,
00138 bool imapFolders=true,
00139 bool dimapFolders=true,
00140 bool searchFolders=false,
00141 bool includeNoContent=true,
00142 bool includeNoChildren=true );
00143
00145 virtual void readConfig(void);
00146
00148 void cleanupConfigFile();
00149
00151 void nextUnreadFolder(bool confirm);
00152
00154 bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00155
00156 KMFolder *currentFolder() const;
00157
00158 QList<QPointer<KMFolder> > selectedFolders();
00159
00160 enum ColumnMode {unread=15, total=16, foldersize=17};
00161
00163 void toggleColumn(int column, bool openFolders = false);
00164
00167 virtual void updatePopup() const;
00168
00170 void showFolder( KMFolder* );
00171
00173 enum MenuAction {
00174 CopyMessage,
00175 MoveMessage,
00176 CopyFolder,
00177 MoveFolder
00178 };
00179
00181 void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00182 QMenu *menu, Q3ListViewItem *start = 0 );
00183
00184 signals:
00186 void folderSelected(KMFolder*);
00187
00189 void folderSelectedUnread( KMFolder * );
00190
00192 void columnsChanged();
00193
00195 void iconChanged( KMFolderTreeItem * );
00196
00198 void nameChanged( KMFolderTreeItem * );
00199
00200 public slots:
00202 virtual void reload(bool openFolders = false);
00203
00205 void nextUnreadFolder();
00206
00208 void prevUnreadFolder();
00209
00211 void incCurrentFolder();
00212
00214 void decCurrentFolder();
00215
00217 void selectCurrentFolder();
00218
00220 void delayedUpdate();
00221
00223 void slotAccountRemoved(KMAccount*);
00224
00226 void doFolderSelected(Q3ListViewItem *qlvi, bool keepSelection = false);
00227
00233 void slotResetFolderList( Q3ListViewItem* item = 0, bool startList = true );
00234
00236 void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00237
00239 void copyFolder();
00240
00242 void cutFolder();
00243
00245 void pasteFolder();
00246
00248 void delayedReload();
00249
00250 protected slots:
00251
00253 void doFolderListChanged();
00254
00256 void slotFolderRemoved(KMFolder *);
00257
00259 void slotFolderMoveOrCopyOperationFinished();
00260
00262 void refresh();
00263
00265 void openFolder();
00266
00268 void slotFolderExpanded( Q3ListViewItem * item );
00269
00271 void slotFolderCollapsed( Q3ListViewItem * item );
00272
00274 void slotRenameFolder( Q3ListViewItem * item, int col, const QString& text);
00275
00277 void slotUpdateCountsDelayed(KMFolder * folder);
00278 void slotUpdateCountTimeout();
00279 void slotUpdateOneCount();
00280
00282 void slotToggleUnreadColumn();
00283 void slotToggleTotalColumn();
00284 void slotToggleSizeColumn();
00285
00286 void slotContextMenuRequested( Q3ListViewItem *, const QPoint & );
00287
00289 void slotCheckMail();
00290
00291 void slotNewMessageToMailingList();
00292
00294 virtual void moveSelectedToFolder( QAction* act );
00296 virtual void copySelectedToFolder( QAction* act );
00297
00299 void updateCopyActions();
00300
00301 protected:
00302 virtual void contentsMousePressEvent( QMouseEvent *e );
00303 virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00304
00306 virtual void updateUnreadAll( );
00307
00308 virtual void resizeEvent(QResizeEvent*);
00309
00311 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00312 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00313
00314 QTimer mUpdateTimer;
00315
00317 void contentsDragEnterEvent( QDragEnterEvent *e );
00318 void contentsDragMoveEvent( QDragMoveEvent *e );
00319 void contentsDragLeaveEvent( QDragLeaveEvent *e );
00320 void contentsDropEvent( QDropEvent *e );
00321 virtual Q3DragObject* dragObject();
00322
00324 Q3ListViewItem *oldCurrent, *oldSelected;
00325 Q3ListViewItem *dropItem;
00326 QPointer<KMFolderTreeItem> mLastItem;
00327 QTimer autoopen_timer;
00328
00329
00330 bool eventFilter(QObject*, QEvent*);
00331
00333 void prepareItem( KMFolderTreeItem* );
00334
00336 void connectSignals();
00337
00339 void moveOrCopyFolder( QList<QPointer<KMFolder> > sources, KMFolder* destination, bool move=false );
00340
00341 private slots:
00342 void slotAddToFavorites();
00343 void slotUnhideLocalInbox();
00344
00345 private:
00347 Q3ListViewItemIterator mUpdateIterator;
00348
00350 KMenu* mPopup;
00351 QAction *mUnreadAction,*mTotalAction, *mSizeAction;
00352
00353 bool mReloading;
00354 QList<QPointer<KMFolder> > mCopySourceFolders;
00355 bool mCutFolder;
00356
00357 QTimer *mUpdateCountTimer;
00358 QMap<QString,KMFolder*> mFolderToUpdateCount;
00359
00361 KMMenuToFolder mMenuToFolder;
00362 };
00363
00364 #endif