00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#ifndef __KMFOLDERTREE
00019
#define __KMFOLDERTREE
00020
00021
#include "kmheaders.h"
00022
#include "kmfolder.h"
00023
00024
#include <klocale.h>
00025
#include <kpopupmenu.h>
00026
#include <kfoldertree.h>
00027
#include <kiconloader.h>
00028
00029
#include <qwidget.h>
00030
#include <qtimer.h>
00031
#include <qheader.h>
00032
00033
class QDropEvent;
00034
class QPixmap;
00035
class QPainter;
00036
class KMFolderImap;
00037
class KMFolderTree;
00038
class KMMainWidget;
00039
class KMAccount;
00040
template <
typename T>
class QGuardedPtr;
00041
00042
class KMFolderTreeItem :
public QObject,
public KFolderTreeItem
00043
00044 {
00045 Q_OBJECT
00046
public:
00048 KMFolderTreeItem( KFolderTree *parent,
const QString & name,
00049 KFolderTreeItem::Protocol protocol=KFolderTreeItem::NONE );
00050
00052 KMFolderTreeItem( KFolderTree *parent,
const QString & name,
00053
KMFolder* folder );
00054
00056 KMFolderTreeItem( KFolderTreeItem* parent,
const QString & name,
00057
KMFolder* folder );
00058
virtual ~KMFolderTreeItem();
00059
00060
QPixmap normalIcon(
int size=16)
const;
00061
QPixmap unreadIcon(
int size=16)
const;
00062
00063
void setNeedsRepaint(
bool value ) { mNeedsRepaint = value; }
00064
bool needsRepaint()
const {
return mNeedsRepaint; }
00065
00067
KMFolder* folder()
const {
return mFolder; }
00068
QListViewItem* parent()
const {
return KFolderTreeItem::parent(); }
00069
00072
void adjustUnreadCount(
int newUnreadCount );
00073
00075
virtual bool acceptDrag(
QDropEvent* ) const;
00076
00077 signals:
00079
void iconChanged( KMFolderTreeItem * );
00081
void nameChanged( KMFolderTreeItem * );
00082
00083 public slots:
00084
void properties();
00085
void slotRepaint();
00086
void slotNameChanged() { emit nameChanged(
this ); }
00087
00088
00089
protected:
00090
void init();
00091
KMFolder* mFolder;
00092
private:
00093
bool mNeedsRepaint;
00094 };
00095
00096
00097
00098
class KMFolderTree :
public KFolderTree
00099 {
00100 Q_OBJECT
00101
00102
public:
00103 KMFolderTree( KMMainWidget *mainWidget,
QWidget *parent=0,
00104
const char *name=0 );
00105
00107
void writeConfig();
00108
00110
virtual void reload(
bool openFolders =
false);
00111
00113
virtual void addDirectory(
KMFolderDir *fdir, KMFolderTreeItem* parent );
00114
00116
virtual QListViewItem* indexOfFolder(
const KMFolder* folder )
const
00117
{
00118
if ( mFolderToItem.contains( folder ) )
00119
return mFolderToItem[ folder ];
00120
else
00121
return 0;
00122 }
00123
00125
void createFolderList(
QStringList *str,
00126
QValueList<
QGuardedPtr<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 readColorConfig(
void);
00139
00141
void cleanupConfigFile();
00142
00144
void nextUnreadFolder(
bool confirm);
00145
00147
bool checkUnreadFolder(KMFolderTreeItem* ftl,
bool confirm);
00148
00149
KMFolder *currentFolder() const;
00150
00151 enum ColumnMode {unread=15, total=16};
00152
00154
void toggleColumn(
int column,
bool openFolders =
false);
00155
00158
virtual void updatePopup() const;
00159
00161 KMMainWidget * mainWidget()
const {
return mMainWidget; }
00162
00164
void showFolder(
KMFolder* );
00165
00166
void insertIntoFolderToItemMap(
const KMFolder *folder, KMFolderTreeItem* item )
00167 {
00168 mFolderToItem.insert( folder, item );
00169 }
00170
00171
void removeFromFolderToItemMap(
const KMFolder *folder )
00172 {
00173 mFolderToItem.remove( folder );
00174 }
00175
00176 signals:
00178
void folderSelected(
KMFolder*);
00179
00181
void folderSelectedUnread(
KMFolder * );
00182
00184
void folderDrop(
KMFolder*);
00185
00187
void folderDropCopy(
KMFolder*);
00188
00190
void columnsChanged();
00191
00193
void iconChanged( KMFolderTreeItem * );
00194
00196
void nameChanged( KMFolderTreeItem * );
00197
00198
public slots:
00200
void nextUnreadFolder();
00201
00203
void prevUnreadFolder();
00204
00206
void incCurrentFolder();
00207
00209
void decCurrentFolder();
00210
00212
void selectCurrentFolder();
00213
00215
void delayedUpdate();
00216
00218
void slotAccountRemoved(KMAccount*);
00219
00221
void doFolderSelected(
QListViewItem*);
00222
00224
void startAutoScroll();
00225
void stopAutoScroll();
00226
00232
void slotResetFolderList(
QListViewItem* item = 0,
bool startList =
true );
00233
00234
protected slots:
00235
00237
void doFolderListChanged();
00238
00240
void slotFolderRemoved(
KMFolder *);
00241
00243
void refresh();
00244
00246
void addChildFolder();
00247
00249
void openFolder();
00250
00252
void slotFolderExpanded(
QListViewItem * item );
00253
00255
void slotFolderCollapsed(
QListViewItem * item );
00256
00258
void slotRenameFolder(
QListViewItem * item,
int col,
const QString& text);
00259
00261
void slotUpdateCounts(
KMFolder * folder);
00262
void slotUpdateCounts(KMFolderImap * folder,
bool success =
true);
00263
void slotUpdateOneCount();
00264
00266
void slotToggleUnreadColumn();
00267
void slotToggleTotalColumn();
00268
00269
void autoScroll();
00270
00271
void slotContextMenuRequested(
QListViewItem *,
const QPoint & );
00272
00274
void slotCheckMail();
00275
00276
void slotNewMessageToMailingList();
00277
00278
protected:
00280
virtual bool event(
QEvent *e);
00281
00282
virtual void contentsMouseReleaseEvent(
QMouseEvent* me);
00283
00285
virtual void updateUnreadAll( );
00286
00287
virtual void resizeEvent(
QResizeEvent*);
00288
00290
bool readIsListViewItemOpen(KMFolderTreeItem *fti);
00291
void writeIsListViewItemOpen(KMFolderTreeItem *fti);
00292
00293
QTimer mUpdateTimer;
00294
00296
void contentsDragEnterEvent(
QDragEnterEvent *e );
00297
void contentsDragMoveEvent(
QDragMoveEvent *e );
00298
void contentsDragLeaveEvent(
QDragLeaveEvent *e );
00299
void contentsDropEvent(
QDropEvent *e );
00300
00302
QListViewItem *oldCurrent, *oldSelected;
00303
QListViewItem *dropItem;
00304 KMFolderTreeItem *mLastItem;
00305
QTimer autoopen_timer;
00306
00307
00308
bool eventFilter(
QObject*,
QEvent*);
00309
00311
void prepareItem( KMFolderTreeItem* );
00312
00314
void connectSignals();
00315
00316
private:
00317
QTimer autoscroll_timer;
00318
int autoscroll_time;
00319
int autoscroll_accel;
00320
00322
QListViewItemIterator mUpdateIterator;
00323
00325 KPopupMenu* mPopup;
00326
int mUnreadPop;
00327
int mTotalPop;
00328
00330
bool mShowPopupAfterDnD;
00331 KMMainWidget *mMainWidget;
00332
bool mReloading;
00333
QMap<const KMFolder*, KMFolderTreeItem*> mFolderToItem;
00334 };
00335
00336
#endif