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 <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 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 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 TQ_OBJECT 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 TQ_OBJECT 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 KPopupMenu* 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