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 <klocale.h>
00022 #include <kfoldertree.h>
00023 #include <kdepimmacros.h>
00024 
00025 #include <qguardedptr.h>
00026 #include <qwidget.h>
00027 #include <qtimer.h>
00028 #include <qheader.h>
00029 
00030 class QDropEvent;
00031 class QPixmap;
00032 class QPainter;
00033 class QPopupMenu;
00034 class KPopupMenu;
00035 class KMFolder;
00036 class KMFolderDir;
00037 class KMFolderImap;
00038 class KMFolderTree;
00039 class KMMainWidget;
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=16) const;
00063   QPixmap unreadIcon(int size=16) 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 
00092 protected:
00093   void init();
00094   KMFolder* mFolder;
00095 private:
00096   bool mNeedsRepaint;
00097 };
00098 
00099 //==========================================================================
00100 
00101 class KMFolderTree : public KFolderTree
00102 {
00103   Q_OBJECT
00104 
00105 public:
00106   KMFolderTree( KMMainWidget *mainWidget, QWidget *parent=0,
00107         const char *name=0 );
00108 
00110   void writeConfig();
00111 
00113   virtual void reload(bool openFolders = false);
00114 
00116   virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00117 
00119   virtual QListViewItem* indexOfFolder( const KMFolder* folder ) const
00120   {
00121      if ( mFolderToItem.contains( folder ) )
00122        return mFolderToItem[ folder ];
00123      else
00124        return 0;
00125   }
00126 
00128   void createFolderList( QStringList *str,
00129                          QValueList<QGuardedPtr<KMFolder> > *folders,
00130                          bool localFolders=true,
00131                          bool imapFolders=true,
00132                          bool dimapFolders=true,
00133                          bool searchFolders=false,
00134                          bool includeNoContent=true,
00135                          bool includeNoChildren=true );
00136 
00138   virtual void readConfig(void);
00139 
00141   void readColorConfig(void);
00142 
00144   void cleanupConfigFile();
00145 
00147   void nextUnreadFolder(bool confirm);
00148 
00150   bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00151 
00152   KMFolder *currentFolder() const;
00153 
00154   QValueList<QGuardedPtr<KMFolder> > selectedFolders();
00155 
00156   enum ColumnMode {unread=15, total=16};
00157 
00159   void toggleColumn(int column, bool openFolders = false);
00160 
00163   virtual void updatePopup() const;
00164 
00166   KMMainWidget * mainWidget() const { return mMainWidget; }
00167 
00169   void showFolder( KMFolder* );
00170 
00171   void insertIntoFolderToItemMap( const KMFolder *folder, KMFolderTreeItem* item )
00172   {
00173     mFolderToItem.insert( folder, item );
00174   }
00175 
00176   void removeFromFolderToItemMap( const KMFolder *folder )
00177   {
00178     mFolderToItem.remove( folder );
00179   }
00180 
00182   enum MenuAction {
00183     CopyMessage,
00184     MoveMessage,
00185     CopyFolder,
00186     MoveFolder
00187   };
00188 
00190   void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00191       QPopupMenu *menu, QListViewItem *start = 0 );
00192 
00193 signals:
00195   void folderSelected(KMFolder*);
00196 
00198   void folderSelectedUnread( KMFolder * );
00199 
00201   void folderDrop(KMFolder*);
00202 
00204   void folderDropCopy(KMFolder*);
00205 
00207   void columnsChanged();
00208 
00210   void iconChanged( KMFolderTreeItem * );
00211 
00213   void nameChanged( KMFolderTreeItem * );
00214 
00215 public slots:
00217   void nextUnreadFolder();
00218 
00220   void prevUnreadFolder();
00221 
00223   void incCurrentFolder();
00224 
00226   void decCurrentFolder();
00227 
00229   void selectCurrentFolder();
00230 
00232   void delayedUpdate();
00233 
00235   void slotAccountRemoved(KMAccount*);
00236 
00238   void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00239 
00245   void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00246 
00248   void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00249 
00251   void copyFolder();
00252 
00254   void cutFolder();
00255 
00257   void pasteFolder();
00258 
00259 protected slots:
00260   //  void slotRMB(int, int);
00262   void doFolderListChanged();
00263 
00265   void slotFolderRemoved(KMFolder *);
00266 
00268   void slotFolderMoveOrCopyOperationFinished();
00269 
00271   void refresh();
00272 
00274   void openFolder();
00275 
00277   void slotFolderExpanded( QListViewItem * item );
00278 
00280   void slotFolderCollapsed( QListViewItem * item );
00281 
00283   void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00284 
00286   void slotUpdateCounts(KMFolder * folder);
00287   void slotUpdateCounts(KMFolderImap * folder, bool success = true);
00289   void slotUpdateCountsDelayed(KMFolder * folder);
00290   void slotUpdateCountTimeout();
00291   void slotUpdateOneCount();
00292 
00294   void slotToggleUnreadColumn();
00295   void slotToggleTotalColumn();
00296 
00297   void slotContextMenuRequested( QListViewItem *, const QPoint & );
00298 
00300   void slotCheckMail();
00301 
00302   void slotNewMessageToMailingList();
00303 
00305   virtual void moveSelectedToFolder( int menuId );
00307   virtual void copySelectedToFolder( int menuId );
00308 
00310   void updateCopyActions();
00311 
00312 protected:
00314   virtual bool event(QEvent *e);
00315 
00316   virtual void contentsMousePressEvent( QMouseEvent *e );
00317   virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00318 
00320   virtual void updateUnreadAll( );
00321 
00322   virtual void resizeEvent(QResizeEvent*);
00323 
00325   bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00326   void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00327 
00328   QTimer mUpdateTimer;
00329 
00331   void contentsDragEnterEvent( QDragEnterEvent *e );
00332   void contentsDragMoveEvent( QDragMoveEvent *e );
00333   void contentsDragLeaveEvent( QDragLeaveEvent *e );
00334   void contentsDropEvent( QDropEvent *e );
00335   virtual QDragObject* dragObject();
00336 
00338   QListViewItem *oldCurrent, *oldSelected;
00339   QListViewItem *dropItem;
00340   KMFolderTreeItem *mLastItem;
00341   QTimer autoopen_timer;
00342 
00343   // filter some rmb-events
00344   bool eventFilter(QObject*, QEvent*);
00345 
00347   void prepareItem( KMFolderTreeItem* );
00348 
00350   void connectSignals();
00351 
00353   void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00354 
00355 private:
00357   QListViewItemIterator mUpdateIterator;
00358 
00360   KPopupMenu* mPopup;
00361   int mUnreadPop;
00362   int mTotalPop;
00363 
00364   KMMainWidget *mMainWidget;
00365   bool mReloading;
00366   QMap<const KMFolder*, KMFolderTreeItem*> mFolderToItem;
00367   QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00368   bool mCutFolder;
00369 
00370   QTimer *mUpdateCountTimer;
00371   QMap<QString,KMFolder*> mFolderToUpdateCount;
00372 
00374   KMMenuToFolder mMenuToFolder;
00375 };
00376 
00377 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys