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 
00092 protected:
00093   void init();
00094   KMFolder* mFolder;
00096   virtual bool useTopLevelIcon() const { return depth() == 0; }
00098   virtual int iconSize() const { return 16; }
00099 
00100 private:
00101   bool mNeedsRepaint;
00102 };
00103 
00104 //==========================================================================
00105 
00106 class KMFolderTree : public KMail::FolderTreeBase
00107 {
00108   Q_OBJECT
00109 
00110 public:
00111   KMFolderTree( KMMainWidget *mainWidget, QWidget *parent=0,
00112         const char *name=0 );
00113 
00115   void writeConfig();
00116 
00118   virtual void reload(bool openFolders = false);
00119 
00121   virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
00122 
00124   virtual QListViewItem* indexOfFolder( const KMFolder* folder ) const
00125   {
00126      if ( mFolderToItem.contains( folder ) )
00127        return mFolderToItem[ folder ];
00128      else
00129        return 0;
00130   }
00131 
00133   void createFolderList( QStringList *str,
00134                          QValueList<QGuardedPtr<KMFolder> > *folders,
00135                          bool localFolders=true,
00136                          bool imapFolders=true,
00137                          bool dimapFolders=true,
00138                          bool searchFolders=false,
00139                          bool includeNoContent=true,
00140                          bool includeNoChildren=true );
00141 
00143   virtual void readConfig(void);
00144 
00146   void cleanupConfigFile();
00147 
00149   void nextUnreadFolder(bool confirm);
00150 
00152   bool checkUnreadFolder(KMFolderTreeItem* ftl, bool confirm);
00153 
00154   KMFolder *currentFolder() const;
00155 
00156   QValueList<QGuardedPtr<KMFolder> > selectedFolders();
00157 
00158   enum ColumnMode {unread=15, total=16, foldersize=17};
00159 
00161   void toggleColumn(int column, bool openFolders = false);
00162 
00165   virtual void updatePopup() const;
00166 
00168   void showFolder( KMFolder* );
00169 
00170   void insertIntoFolderToItemMap( const KMFolder *folder, KMFolderTreeItem* item )
00171   {
00172     mFolderToItem.insert( folder, item );
00173   }
00174 
00175   void removeFromFolderToItemMap( const KMFolder *folder )
00176   {
00177     mFolderToItem.remove( folder );
00178   }
00179 
00181   enum MenuAction {
00182     CopyMessage,
00183     MoveMessage,
00184     CopyFolder,
00185     MoveFolder
00186   };
00187 
00189   void folderToPopupMenu( MenuAction action, QObject *receiver, KMMenuToFolder *,
00190       QPopupMenu *menu, QListViewItem *start = 0 );
00191 
00192 signals:
00194   void folderSelected(KMFolder*);
00195 
00197   void folderSelectedUnread( KMFolder * );
00198 
00200   void columnsChanged();
00201 
00203   void iconChanged( KMFolderTreeItem * );
00204 
00206   void nameChanged( KMFolderTreeItem * );
00207 
00208 public slots:
00210   void nextUnreadFolder();
00211 
00213   void prevUnreadFolder();
00214 
00216   void incCurrentFolder();
00217 
00219   void decCurrentFolder();
00220 
00222   void selectCurrentFolder();
00223 
00225   void delayedUpdate();
00226 
00228   void slotAccountRemoved(KMAccount*);
00229 
00231   void doFolderSelected(QListViewItem *qlvi, bool keepSelection = false);
00232 
00238   void slotResetFolderList( QListViewItem* item = 0, bool startList = true );
00239 
00241   void addChildFolder( KMFolder *folder = 0, QWidget * parent = 0 );
00242 
00244   void copyFolder();
00245 
00247   void cutFolder();
00248 
00250   void pasteFolder();
00251 
00252 protected slots:
00253   //  void slotRMB(int, int);
00255   void doFolderListChanged();
00256 
00258   void slotFolderRemoved(KMFolder *);
00259 
00261   void slotFolderMoveOrCopyOperationFinished();
00262 
00264   void refresh();
00265 
00267   void openFolder();
00268 
00270   void slotFolderExpanded( QListViewItem * item );
00271 
00273   void slotFolderCollapsed( QListViewItem * item );
00274 
00276   void slotRenameFolder( QListViewItem * item, int col, const QString& text);
00277 
00279   void slotUpdateCounts(KMFolder * folder);
00280   void slotUpdateCounts(KMFolderImap * folder, bool success = true);
00282   void slotUpdateCountsDelayed(KMFolder * folder);
00283   void slotUpdateCountTimeout();
00284   void slotUpdateOneCount();
00285 
00287   void slotToggleUnreadColumn();
00288   void slotToggleTotalColumn();
00289   void slotToggleSizeColumn();
00290 
00291   void slotContextMenuRequested( QListViewItem *, const QPoint & );
00292 
00294   void slotCheckMail();
00295 
00296   void slotNewMessageToMailingList();
00297 
00299   virtual void moveSelectedToFolder( int menuId );
00301   virtual void copySelectedToFolder( int menuId );
00302 
00304   void updateCopyActions();
00305 
00306 protected:
00307   virtual void contentsMousePressEvent( QMouseEvent *e );
00308   virtual void contentsMouseReleaseEvent(QMouseEvent* me);
00309 
00311   virtual void updateUnreadAll( );
00312 
00313   virtual void resizeEvent(QResizeEvent*);
00314 
00316   bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00317   void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00318 
00319   QTimer mUpdateTimer;
00320 
00322   void contentsDragEnterEvent( QDragEnterEvent *e );
00323   void contentsDragMoveEvent( QDragMoveEvent *e );
00324   void contentsDragLeaveEvent( QDragLeaveEvent *e );
00325   void contentsDropEvent( QDropEvent *e );
00326   virtual QDragObject* dragObject();
00327 
00329   QListViewItem *oldCurrent, *oldSelected;
00330   QListViewItem *dropItem;
00331   KMFolderTreeItem *mLastItem;
00332   QTimer autoopen_timer;
00333 
00334   // filter some rmb-events
00335   bool eventFilter(QObject*, QEvent*);
00336 
00338   void prepareItem( KMFolderTreeItem* );
00339 
00341   void connectSignals();
00342 
00344   void moveOrCopyFolder( QValueList<QGuardedPtr<KMFolder> > sources, KMFolder* destination, bool move=false );
00345 
00346 private slots:
00347   void slotAddToFavorites();
00348   void slotUnhideLocalInbox();
00349 
00350 private:
00352   QListViewItemIterator mUpdateIterator;
00353 
00355   KPopupMenu* mPopup;
00356   int mUnreadPop;
00357   int mTotalPop;
00358   int mSizePop;
00359 
00360   bool mReloading;
00361   QMap<const KMFolder*, KMFolderTreeItem*> mFolderToItem;
00362   QValueList<QGuardedPtr<KMFolder> > mCopySourceFolders;
00363   bool mCutFolder;
00364 
00365   QTimer *mUpdateCountTimer;
00366   QMap<QString,KMFolder*> mFolderToUpdateCount;
00367 
00369   KMMenuToFolder mMenuToFolder;
00370 };
00371 
00372 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys