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 <klocale.h>
00022 #include <kfoldertree.h>
00023 #include <kdepimmacros.h>
00024
00025 #include <qguardedptr.h>
00026 #include <qwidget.h>
00027 #include <qtimer.h>
00028 #include <qheader.h>
00029
00030 class QDropEvent;
00031 class QPixmap;
00032 class QPainter;
00033 class QPopupMenu;
00034 class KPopupMenu;
00035 class KMFolder;
00036 class KMFolderDir;
00037 class KMFolderImap;
00038 class KMFolderTree;
00039 class KMMainWidget;
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=16) const;
00063 QPixmap unreadIcon(int size=16) 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;
00095 private:
00096 bool mNeedsRepaint;
00097 };
00098
00099
00100
00101 class KMFolderTree : public KFolderTree
00102 {
00103 Q_OBJECT
00104
00105 public:
00106 KMFolderTree( KMMainWidget *mainWidget, QWidget *parent=0,
00107 const char *name=0 );
00108
00110 void writeConfig();
00111
00113 virtual void reload(bool openFolders = false);
00114
00116 virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00117
00119 virtual QListViewItem* indexOfFolder( const KMFolder* folder ) const
00120 {
00121 if ( mFolderToItem.contains( folder ) )
00122 return mFolderToItem[ folder ];
00123 else
00124 return 0;
00125 }
00126
00128 void createFolderList( QStringList *str,
00129 QValueList<QGuardedPtr<KMFolder> > *folders,
00130 bool localFolders=true,
00131 bool imapFolders=true,
00132 bool dimapFolders=true,
00133 bool searchFolders=false,
00134 bool includeNoContent=true,
00135 bool includeNoChildren=true );
00136
00138 virtual void readConfig(void);
00139
00141 void readColorConfig(void);
00142
00144 void cleanupConfigFile();
00145
00147 void nextUnreadFolder(bool confirm);
00148
00150 bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00151
00152 KMFolder *currentFolder() const;
00153
00154 QValueList<QGuardedPtr<KMFolder> > selectedFolders();
00155
00156 enum ColumnMode {unread=15, total=16};
00157
00159 void toggleColumn(int column, bool openFolders = false);
00160
00163 virtual void updatePopup() const;
00164
00166 KMMainWidget * mainWidget() const { return mMainWidget; }
00167
00169 void showFolder( KMFolder* );
00170
00171 void insertIntoFolderToItemMap( const KMFolder *folder, KMFolderTreeItem* item )
00172 {
00173 mFolderToItem.insert( folder, item );
00174 }
00175
00176 void removeFromFolderToItemMap( const KMFolder *folder )
00177 {
00178 mFolderToItem.remove( folder );
00179 }
00180
00182 enum MenuAction {
00183 CopyMessage,
00184 MoveMessage,
00185 CopyFolder,
00186 MoveFolder
00187 };
00188
00190 void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00191 QPopupMenu *menu, QListViewItem *start = 0 );
00192
00193 signals:
00195 void folderSelected(KMFolder*);
00196
00198 void folderSelectedUnread( KMFolder * );
00199
00201 void folderDrop(KMFolder*);
00202
00204 void folderDropCopy(KMFolder*);
00205
00207 void columnsChanged();
00208
00210 void iconChanged( KMFolderTreeItem * );
00211
00213 void nameChanged( KMFolderTreeItem * );
00214
00215 public slots:
00217 void nextUnreadFolder();
00218
00220 void prevUnreadFolder();
00221
00223 void incCurrentFolder();
00224
00226 void decCurrentFolder();
00227
00229 void selectCurrentFolder();
00230
00232 void delayedUpdate();
00233
00235 void slotAccountRemoved(KMAccount*);
00236
00238 void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00239
00245 void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00246
00248 void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00249
00251 void copyFolder();
00252
00254 void cutFolder();
00255
00257 void pasteFolder();
00258
00259 protected slots:
00260
00262 void doFolderListChanged();
00263
00265 void slotFolderRemoved(KMFolder *);
00266
00268 void slotFolderMoveOrCopyOperationFinished();
00269
00271 void refresh();
00272
00274 void openFolder();
00275
00277 void slotFolderExpanded( QListViewItem * item );
00278
00280 void slotFolderCollapsed( QListViewItem * item );
00281
00283 void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00284
00286 void slotUpdateCounts(KMFolder * folder);
00287 void slotUpdateCounts(KMFolderImap * folder, bool success = true);
00289 void slotUpdateCountsDelayed(KMFolder * folder);
00290 void slotUpdateCountTimeout();
00291 void slotUpdateOneCount();
00292
00294 void slotToggleUnreadColumn();
00295 void slotToggleTotalColumn();
00296
00297 void slotContextMenuRequested( QListViewItem *, const QPoint & );
00298
00300 void slotCheckMail();
00301
00302 void slotNewMessageToMailingList();
00303
00305 virtual void moveSelectedToFolder( int menuId );
00307 virtual void copySelectedToFolder( int menuId );
00308
00310 void updateCopyActions();
00311
00312 protected:
00314 virtual bool event(QEvent *e);
00315
00316 virtual void contentsMousePressEvent( QMouseEvent *e );
00317 virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00318
00320 virtual void updateUnreadAll( );
00321
00322 virtual void resizeEvent(QResizeEvent*);
00323
00325 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00326 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00327
00328 QTimer mUpdateTimer;
00329
00331 void contentsDragEnterEvent( QDragEnterEvent *e );
00332 void contentsDragMoveEvent( QDragMoveEvent *e );
00333 void contentsDragLeaveEvent( QDragLeaveEvent *e );
00334 void contentsDropEvent( QDropEvent *e );
00335 virtual QDragObject* dragObject();
00336
00338 QListViewItem *oldCurrent, *oldSelected;
00339 QListViewItem *dropItem;
00340 KMFolderTreeItem *mLastItem;
00341 QTimer autoopen_timer;
00342
00343
00344 bool eventFilter(QObject*, QEvent*);
00345
00347 void prepareItem( KMFolderTreeItem* );
00348
00350 void connectSignals();
00351
00353 void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00354
00355 private:
00357 QListViewItemIterator mUpdateIterator;
00358
00360 KPopupMenu* mPopup;
00361 int mUnreadPop;
00362 int mTotalPop;
00363
00364 KMMainWidget *mMainWidget;
00365 bool mReloading;
00366 QMap<const KMFolder*, KMFolderTreeItem*> mFolderToItem;
00367 QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00368 bool mCutFolder;
00369
00370 QTimer *mUpdateCountTimer;
00371 QMap<QString,KMFolder*> mFolderToUpdateCount;
00372
00374 KMMenuToFolder mMenuToFolder;
00375 };
00376
00377 #endif