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 <qguardedptr.h>
00027 #include <qwidget.h>
00028 #include <qtimer.h>
00029 #include <qheader.h>
00030 
00031 class QDropEvent;
00032 class QPixmap;
00033 class QPainter;
00034 class QPopupMenu;
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 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 ) const;
00063   QPixmap 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   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   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, QWidget *parent=0,
00114         const char *name=0 );
00115 
00117   void writeConfig();
00118 
00120   virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00121 
00123   void createFolderList( QStringList *str,
00124                          QValueList<QGuardedPtr<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   QValueList<QGuardedPtr<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, QObject *receiver, KMMenuToFolder *,
00170       QPopupMenu *menu, QListViewItem *start = 0 );
00171 
00172 signals:
00174   void folderSelected(KMFolder*);
00175 
00177   void folderSelectedUnread( KMFolder * );
00178 
00180   void columnsChanged();
00181 
00183   void iconChanged( KMFolderTreeItem * );
00184 
00186   void nameChanged( KMFolderTreeItem * );
00187 
00188 public slots:
00190   virtual void reload(bool openFolders = false);
00191 
00193   void nextUnreadFolder();
00194 
00196   void prevUnreadFolder();
00197 
00199   void incCurrentFolder();
00200 
00202   void decCurrentFolder();
00203 
00205   void selectCurrentFolder();
00206 
00208   void delayedUpdate();
00209 
00211   void slotAccountRemoved(KMAccount*);
00212 
00214   void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00215 
00221   void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00222 
00224   void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00225 
00227   void copyFolder();
00228 
00230   void cutFolder();
00231 
00233   void pasteFolder();
00234 
00236   void delayedReload();
00237 
00238 protected slots:
00239   //  void slotRMB(int, int);
00241   void doFolderListChanged();
00242 
00244   void slotFolderRemoved(KMFolder *);
00245 
00247   void slotFolderMoveOrCopyOperationFinished();
00248 
00250   void refresh();
00251 
00253   void openFolder();
00254 
00256   void slotFolderExpanded( QListViewItem * item );
00257 
00259   void slotFolderCollapsed( QListViewItem * item );
00260 
00262   void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00263 
00265   void slotUpdateCountsDelayed(KMFolder * folder);
00266   void slotUpdateCountTimeout();
00267   void slotUpdateOneCount();
00268 
00270   void slotToggleUnreadColumn();
00271   void slotToggleTotalColumn();
00272   void slotToggleSizeColumn();
00273 
00274   void slotContextMenuRequested( QListViewItem *, const QPoint & );
00275 
00277   void slotCheckMail();
00278 
00279   void slotNewMessageToMailingList();
00280 
00282   virtual void moveSelectedToFolder( int menuId );
00284   virtual void copySelectedToFolder( int menuId );
00285 
00287   void updateCopyActions();
00288 
00289 protected:
00290   virtual void contentsMousePressEvent( QMouseEvent *e );
00291   virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00292 
00294   virtual void updateUnreadAll( );
00295 
00296   virtual void resizeEvent(QResizeEvent*);
00297 
00299   bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00300   void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00301 
00302   QTimer mUpdateTimer;
00303 
00305   void contentsDragEnterEvent( QDragEnterEvent *e );
00306   void contentsDragMoveEvent( QDragMoveEvent *e );
00307   void contentsDragLeaveEvent( QDragLeaveEvent *e );
00308   void contentsDropEvent( QDropEvent *e );
00309   virtual QDragObject* dragObject();
00310 
00312   QListViewItem *oldCurrent, *oldSelected;
00313   QListViewItem *dropItem;
00314   KMFolderTreeItem *mLastItem;
00315   QTimer autoopen_timer;
00316 
00317   // filter some rmb-events
00318   bool eventFilter(QObject*, QEvent*);
00319 
00321   void prepareItem( KMFolderTreeItem* );
00322 
00324   void connectSignals();
00325 
00327   void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00328 
00329 private slots:
00330   void slotAddToFavorites();
00331   void slotUnhideLocalInbox();
00332 
00333 private:
00335   QListViewItemIterator mUpdateIterator;
00336 
00338   KPopupMenu* mPopup;
00339   int mUnreadPop;
00340   int mTotalPop;
00341   int mSizePop;
00342 
00343   bool mReloading;
00344   QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00345   bool mCutFolder;
00346 
00347   QTimer *mUpdateCountTimer;
00348   QMap<QString,KMFolder*> mFolderToUpdateCount;
00349 
00351   KMMenuToFolder mMenuToFolder;
00352 };
00353 
00354 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys