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 <tdelocale.h>
00024 #include <tdepimmacros.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 TDEPopupMenu;
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   
00049 public:
00051   KMFolderTreeItem( KFolderTree *parent, const TQString & name,
00052                     KFolderTreeItem::Protocol protocol=KFolderTreeItem::NONE );
00053 
00055   KMFolderTreeItem( KFolderTree *parent, const TQString & name,
00056                     KMFolder* folder );
00057 
00059   KMFolderTreeItem( KFolderTreeItem* parent, const TQString & name,
00060                     KMFolder* folder );
00061   virtual ~KMFolderTreeItem();
00062 
00063   TQPixmap normalIcon( int size ) const;
00064   TQPixmap unreadIcon( int size ) const;
00065 
00066   void setNeedsRepaint( bool value ) { mNeedsRepaint = value; }
00067   bool needsRepaint() const { return mNeedsRepaint; }
00068 
00070   KMFolder* folder() const { return mFolder; }
00071   TQListViewItem* parent() const { return KFolderTreeItem::parent(); }
00072 
00075   void adjustUnreadCount( int newUnreadCount );
00076 
00078   virtual bool acceptDrag(TQDropEvent* e) const;
00079 
00080 signals:
00082   void iconChanged( KMFolderTreeItem * );
00084   void nameChanged( KMFolderTreeItem * );
00085 
00086 public slots:
00087   void properties();
00088   void assignShortcut();
00089   void slotShowExpiryProperties();
00090   void slotIconsChanged();
00091   void slotNameChanged();
00092   void slotNoContentChanged();
00093   void updateCount();
00094 
00095 protected:
00096   void init();
00097   KMFolder* mFolder;
00099   virtual bool useTopLevelIcon() const { return depth() == 0; }
00101   virtual int iconSize() const { return 16; }
00102 
00103 private:
00104   bool mNeedsRepaint;
00105 };
00106 
00107 //==========================================================================
00108 
00109 class KMFolderTree : public KMail::FolderTreeBase
00110 {
00111   Q_OBJECT
00112   
00113 
00114 public:
00115   KMFolderTree( KMMainWidget *mainWidget, TQWidget *parent=0,
00116         const char *name=0 );
00117 
00119   void writeConfig();
00120 
00122   virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00123 
00125   void createFolderList( TQStringList *str,
00126                          TQValueList<TQGuardedPtr<KMFolder> > *folders,
00127                          bool localFolders=true,
00128                          bool imapFolders=true,
00129                          bool dimapFolders=true,
00130                          bool searchFolders=false,
00131                          bool includeNoContent=true,
00132                          bool includeNoChildren=true );
00133 
00135   virtual void readConfig(void);
00136 
00138   void cleanupConfigFile();
00139 
00141   void nextUnreadFolder(bool confirm);
00142 
00144   bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00145 
00146   KMFolder *currentFolder() const;
00147 
00148   TQValueList<TQGuardedPtr<KMFolder> > selectedFolders();
00149 
00150   enum ColumnMode {unread=15, total=16, foldersize=17};
00151 
00153   void toggleColumn(int column, bool openFolders = false);
00154 
00157   virtual void updatePopup() const;
00158 
00160   void showFolder( KMFolder* );
00161 
00163   enum MenuAction {
00164     CopyMessage,
00165     MoveMessage,
00166     CopyFolder,
00167     MoveFolder
00168   };
00169 
00171   void folderToPopupMenu( MenuAction action, TQObject *receiver, KMMenuToFolder *,
00172       TQPopupMenu *menu, TQListViewItem *start = 0 );
00173 
00174 signals:
00176   void folderSelected(KMFolder*);
00177 
00179   void folderSelectedUnread( KMFolder * );
00180 
00182   void syncStateChanged();
00183 
00185   void columnsChanged();
00186 
00188   void iconChanged( KMFolderTreeItem * );
00189 
00191   void nameChanged( KMFolderTreeItem * );
00192 
00193 public slots:
00195   virtual void reload(bool openFolders = false);
00196 
00198   void nextUnreadFolder();
00199 
00201   void prevUnreadFolder();
00202 
00204   void incCurrentFolder();
00205 
00207   void decCurrentFolder();
00208 
00210   void selectCurrentFolder();
00211 
00213   void delayedUpdate();
00214 
00216   void slotAccountRemoved(KMAccount*);
00217 
00219   void doFolderSelected(TQListViewItem *qlvi, bool keepSelection = false);
00220 
00226   void slotResetFolderList( TQListViewItem* item = 0, bool startList = true );
00227 
00229   void addChildFolder( KMFolder *folder = 0, TQWidget * parent = 0 );
00230 
00232   void copyFolder();
00233 
00235   void cutFolder();
00236 
00238   void pasteFolder();
00239 
00241   void delayedReload();
00242 
00243 protected slots:
00244   //  void slotRMB(int, int);
00246   void doFolderListChanged();
00247 
00249   void slotFolderRemoved(KMFolder *);
00250 
00252   void slotFolderMoveOrCopyOperationFinished();
00253 
00255   void refresh();
00256 
00258   void openFolder();
00259 
00261   void slotFolderExpanded( TQListViewItem * item );
00262 
00264   void slotFolderCollapsed( TQListViewItem * item );
00265 
00267   void slotRenameFolder( TQListViewItem * item, int col, const TQString& text);
00268 
00270   void slotUpdateCountsDelayed(KMFolder * folder);
00271   void slotUpdateCountTimeout();
00272   void slotUpdateOneCount();
00273 
00275   void slotToggleUnreadColumn();
00276   void slotToggleTotalColumn();
00277   void slotToggleSizeColumn();
00278 
00279   void slotContextMenuRequested( TQListViewItem *, const TQPoint & );
00280 
00282   void slotCheckMail();
00283 
00284   void slotNewMessageToMailingList();
00285 
00287   virtual void moveSelectedToFolder( int menuId );
00289   virtual void copySelectedToFolder( int menuId );
00290 
00292   void updateCopyActions();
00293 
00294   void slotSyncStateChanged();
00295 
00296 protected:
00297   virtual void contentsMousePressEvent( TQMouseEvent *e );
00298   virtual void contentsMouseReleaseEvent(TQMouseEvent* me);
00299 
00301   virtual void updateUnreadAll( );
00302 
00303   virtual void resizeEvent(TQResizeEvent*);
00304 
00306   bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00307   void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00308 
00309   TQTimer mUpdateTimer;
00310 
00312   void contentsDragEnterEvent( TQDragEnterEvent *e );
00313   void contentsDragMoveEvent( TQDragMoveEvent *e );
00314   void contentsDragLeaveEvent( TQDragLeaveEvent *e );
00315   void contentsDropEvent( TQDropEvent *e );
00316   virtual TQDragObject* dragObject();
00317 
00319   TQListViewItem *oldCurrent, *oldSelected;
00320   TQListViewItem *dropItem;
00321   KMFolderTreeItem *mLastItem;
00322   TQTimer autoopen_timer;
00323 
00324   // filter some rmb-events
00325   bool eventFilter(TQObject*, TQEvent*);
00326 
00328   void prepareItem( KMFolderTreeItem* );
00329 
00331   void connectSignals();
00332 
00334   void moveOrCopyFolder( TQValueList<TQGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00335 
00336 private slots:
00337   void slotAddToFavorites();
00338   void slotUnhideLocalInbox();
00339 
00340 private:
00342   TQListViewItemIterator mUpdateIterator;
00343 
00345   TDEPopupMenu* mPopup;
00346   int mUnreadPop;
00347   int mTotalPop;
00348   int mSizePop;
00349 
00350   bool mReloading;
00351   TQValueList<TQGuardedPtr<KMFolder> > mCopySourceFolders;
00352   bool mCutFolder;
00353 
00354   TQTimer *mUpdateCountTimer;
00355   TQMap<TQString,KMFolder*> mFolderToUpdateCount;
00356 
00358   KMMenuToFolder mMenuToFolder;
00359 };
00360 
00361 #endif