kmail

kmfoldertree.h

00001 /* -*- mode: C++ -*-
00002    This file is part of the KDE libraries
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00016    Boston, MA 02110-1301, USA.
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 // duplication from kmcommands.h, to avoid the include
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   //  void slotRMB(int, int);
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   // filter some rmb-events
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