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 <tqguardedptr.h>
00027 #include <tqwidget.h>
00028 #include <tqtimer.h>
00029 #include <tqheader.h>
00030
00031 class TQDropEvent;
00032 class TQPixmap;
00033 class TQPainter;
00034 class TQPopupMenu;
00035 class KPopupMenu;
00036 class KMFolder;
00037 class KMFolderDir;
00038 class KMFolderImap;
00039 class KMFolderTree;
00040 class KMAccount;
00041
00042 typedef TQMap<int,KMFolder*> KMMenuToFolder;
00043 template <typename T> class TQGuardedPtr;
00044
00045 class KDE_EXPORT KMFolderTreeItem : public TQObject, public KFolderTreeItem
00046 {
00047 Q_OBJECT
00048 public:
00050 KMFolderTreeItem( KFolderTree *parent, const TQString & name,
00051 KFolderTreeItem::Protocol protocol=KFolderTreeItem::NONE );
00052
00054 KMFolderTreeItem( KFolderTree *parent, const TQString & name,
00055 KMFolder* folder );
00056
00058 KMFolderTreeItem( KFolderTreeItem* parent, const TQString & name,
00059 KMFolder* folder );
00060 virtual ~KMFolderTreeItem();
00061
00062 TQPixmap normalIcon( int size ) const;
00063 TQPixmap 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 TQListViewItem* parent() const { return KFolderTreeItem::parent(); }
00071
00074 void adjustUnreadCount( int newUnreadCount );
00075
00077 virtual bool acceptDrag(TQDropEvent* 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, TQWidget *parent=0,
00114 const char *name=0 );
00115
00117 void writeConfig();
00118
00120 virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00121
00123 void createFolderList( TQStringList *str,
00124 TQValueList<TQGuardedPtr<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 TQValueList<TQGuardedPtr<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, TQObject *receiver, KMMenuToFolder *,
00170 TQPopupMenu *menu, TQListViewItem *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(TQListViewItem *qlvi, bool keepSelection = false);
00218
00224 void slotResetFolderList( TQListViewItem* item = 0, bool startList = true );
00225
00227 void addChildFolder( KMFolder *folder = 0, TQWidget * 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( TQListViewItem * item );
00260
00262 void slotFolderCollapsed( TQListViewItem * item );
00263
00265 void slotRenameFolder( TQListViewItem * item, int col, const TQString& 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( TQListViewItem *, const TQPoint & );
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( TQMouseEvent *e );
00296 virtual void contentsMouseReleaseEvent(TQMouseEvent* me);
00297
00299 virtual void updateUnreadAll( );
00300
00301 virtual void resizeEvent(TQResizeEvent*);
00302
00304 bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00305 void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00306
00307 TQTimer mUpdateTimer;
00308
00310 void contentsDragEnterEvent( TQDragEnterEvent *e );
00311 void contentsDragMoveEvent( TQDragMoveEvent *e );
00312 void contentsDragLeaveEvent( TQDragLeaveEvent *e );
00313 void contentsDropEvent( TQDropEvent *e );
00314 virtual TQDragObject* dragObject();
00315
00317 TQListViewItem *oldCurrent, *oldSelected;
00318 TQListViewItem *dropItem;
00319 KMFolderTreeItem *mLastItem;
00320 TQTimer autoopen_timer;
00321
00322
00323 bool eventFilter(TQObject*, TQEvent*);
00324
00326 void prepareItem( KMFolderTreeItem* );
00327
00329 void connectSignals();
00330
00332 void moveOrCopyFolder( TQValueList<TQGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00333
00334 private slots:
00335 void slotAddToFavorites();
00336 void slotUnhideLocalInbox();
00337
00338 private:
00340 TQListViewItemIterator mUpdateIterator;
00341
00343 KPopupMenu* mPopup;
00344 int mUnreadPop;
00345 int mTotalPop;
00346 int mSizePop;
00347
00348 bool mReloading;
00349 TQValueList<TQGuardedPtr<KMFolder> > mCopySourceFolders;
00350 bool mCutFolder;
00351
00352 TQTimer *mUpdateCountTimer;
00353 TQMap<TQString,KMFolder*> mFolderToUpdateCount;
00354
00356 KMMenuToFolder mMenuToFolder;
00357 };
00358
00359 #endif