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     DecCopyMessage
00167   };
00168 
00170   void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00171       QPopupMenu *menu, QListViewItem *start = 0 );
00172 
00173 signals:
00175   void folderSelected(KMFolder*);
00176 
00178   void folderSelectedUnread( KMFolder * );
00179 
00181   void syncStateChanged();
00182 
00184   void columnsChanged();
00185 
00187   void iconChanged( KMFolderTreeItem * );
00188 
00190   void nameChanged( KMFolderTreeItem * );
00191 
00192 public slots:
00194   virtual void reload(bool openFolders = false);
00195 
00197   void nextUnreadFolder();
00198 
00200   void prevUnreadFolder();
00201 
00203   void incCurrentFolder();
00204 
00206   void decCurrentFolder();
00207 
00209   void selectCurrentFolder();
00210 
00212   void delayedUpdate();
00213 
00215   void slotAccountRemoved(KMAccount*);
00216 
00218   void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00219 
00225   void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00226 
00228   void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00229 
00231   void copyFolder();
00232 
00234   void cutFolder();
00235 
00237   void pasteFolder();
00238 
00240   void delayedReload();
00241 
00242 protected slots:
00243   //  void slotRMB(int, int);
00245   void doFolderListChanged();
00246 
00248   void slotFolderRemoved(KMFolder *);
00249 
00251   void slotFolderMoveOrCopyOperationFinished();
00252 
00254   void refresh();
00255 
00257   void openFolder();
00258 
00260   void slotFolderExpanded( QListViewItem * item );
00261 
00263   void slotFolderCollapsed( QListViewItem * item );
00264 
00266   void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00267 
00269   void slotUpdateCountsDelayed(KMFolder * folder);
00270   void slotUpdateCountTimeout();
00271   void slotUpdateOneCount();
00272 
00274   void slotToggleUnreadColumn();
00275   void slotToggleTotalColumn();
00276   void slotToggleSizeColumn();
00277 
00278   void slotContextMenuRequested( QListViewItem *, const QPoint & );
00279 
00281   void slotCheckMail();
00282 
00283   void slotNewMessageToMailingList();
00284 
00286   virtual void moveSelectedToFolder( int menuId );
00288   virtual void copySelectedToFolder( int menuId );
00289 
00291   void updateCopyActions();
00292 
00293   void slotSyncStateChanged();
00294 
00295 protected:
00296   virtual void contentsMousePressEvent( QMouseEvent *e );
00297   virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00298 
00300   virtual void updateUnreadAll( );
00301 
00302   virtual void resizeEvent(QResizeEvent*);
00303 
00305   bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00306   void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00307 
00308   QTimer mUpdateTimer;
00309 
00311   void contentsDragEnterEvent( QDragEnterEvent *e );
00312   void contentsDragMoveEvent( QDragMoveEvent *e );
00313   void contentsDragLeaveEvent( QDragLeaveEvent *e );
00314   void contentsDropEvent( QDropEvent *e );
00315   virtual QDragObject* dragObject();
00316 
00318   QListViewItem *oldCurrent, *oldSelected;
00319   QListViewItem *dropItem;
00320   KMFolderTreeItem *mLastItem;
00321   QTimer autoopen_timer;
00322 
00323   // filter some rmb-events
00324   bool eventFilter(QObject*, QEvent*);
00325 
00327   void prepareItem( KMFolderTreeItem* );
00328 
00330   void connectSignals();
00331 
00333   void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00334 
00335 private slots:
00336   void slotAddToFavorites();
00337   void slotUnhideLocalInbox();
00338 
00339 private:
00341   QListViewItemIterator mUpdateIterator;
00342 
00344   KPopupMenu* mPopup;
00345   int mUnreadPop;
00346   int mTotalPop;
00347   int mSizePop;
00348 
00349   bool mReloading;
00350   QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00351   bool mCutFolder;
00352 
00353   QTimer *mUpdateCountTimer;
00354   QMap<QString,KMFolder*> mFolderToUpdateCount;
00355 
00357   KMMenuToFolder mMenuToFolder;
00358 };
00359 
00360 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys