00001
#ifndef __KMHEADERS
00002
#define __KMHEADERS
00003
00004
#include <qwidget.h>
00005
#include <qstrlist.h>
00006
#include <klistview.h>
00007
#include <kfoldertree.h>
00008
#include <qmemarray.h>
00009
#include <qmap.h>
00010
#include <qdragobject.h>
00011
#include <qdict.h>
00012
#include "kmmessage.h"
00013
#include "kmime_util.h"
00014
#include <kpopupmenu.h>
00015
00016
class KMFolder;
00017
class KMMessage;
00018
class KMMsgBase;
00019
class KMMainWidget;
00020
class QPalette;
00021
class KMHeaderItem;
00022
class QPixmap;
00023
class QIconSet;
00024
class QDateTime;
00025
class KMSortCacheItem;
00026
00027
typedef QPtrList<KMMsgBase> KMMessageList;
00028
typedef QValueList<Q_UINT32> SerNumList;
00029
typedef QMap<int,KMFolder*> KMMenuToFolder;
00030
enum NestingPolicy { AlwaysOpen = 0, DefaultOpen, DefaultClosed, OpenUnread };
00031
enum LoopOnGotoUnreadValue { DontLoop = 0, LoopInCurrentFolder, LoopInAllFolders };
00032
00034 class KMHeaders :
public KListView
00035 {
00036 Q_OBJECT
00037
friend class KMHeaderItem;
00038
00039
public:
00040
KMHeaders(KMMainWidget *
owner, QWidget *parent=0,
const char *name=0);
00041
virtual ~
KMHeaders();
00042
00044
virtual void setFolder(
KMFolder *,
bool jumpToFirst =
false);
00045
00047 KMFolder*
folder(
void) {
return mFolder; }
00048
00050
void refreshNestedState(
void);
00051
00054
virtual void setCurrentMsg(
int msgId);
00055
00057 QPtrList<QListViewItem>
currentThread() const;
00058
00061 virtual
void setThreadStatus(KMMsgStatus status,
bool toggle=false);
00062
00063
00064 virtual
void setMsgRead(
int msgId);
00065
00067 virtual
void setMsgStatus(KMMsgStatus status,
bool toggle=false);
00068 virtual
void deleteMsg();
00069 virtual
void applyFiltersOnMsg();
00070 virtual
void undo();
00071 virtual
bool canUndo() const;
00072 virtual
void resendMsg();
00073 virtual KMHeaderItem * prepareMove(
int *contentX,
int *contentY );
00074 virtual
void finalizeMove( KMHeaderItem *item,
int contentX,
int contentY );
00075
00078 virtual
void moveMsgToFolder(
KMFolder* destination);
00079
00082 virtual
void copyMsgToFolder(
KMFolder* destination,
00083 KMMessage* aMsg = 0);
00084
00086 virtual
void clearSelectableAndAboutToBeDeleted(Q_UINT32 serNum);
00089 virtual KMMessageList* selectedMsgs(
bool toBeDeleted = false);
00090
00092 int indexOfGetMsg (
void)
const {
return getMsgIndex; }
00093
00095 KMMainWidget*
owner(
void)
const {
return mOwner; }
00096
00098 const KPaintInfo *
paintInfo(
void)
const {
return &mPaintInfo; }
00099
00101
virtual void readConfig(
void);
00102
00104
virtual void readColorConfig(
void);
00105
00107
virtual void reset(
void);
00108
00110
void showNewMail();
00111
00113
virtual KMMessage*
currentMsg();
00115
virtual KMHeaderItem*
currentHeaderItem();
00117
virtual int currentItemIndex();
00119
virtual void setCurrentItemByIndex(
int msgIdx );
00121
virtual int topItemIndex();
00124
virtual void setTopItemByIndex(
int aMsgIdx );
00125
virtual void setNestedOverride(
bool override );
00126
virtual void setSubjectThreading(
bool subjThreading );
00128
virtual void setOpen ( QListViewItem *,
bool );
00129
00130 NestingPolicy getNestingPolicy()
const {
return nestingPolicy; }
00132 bool isThreaded()
const {
00133
return mNested != mNestedOverride;
00134 }
00135
00138
virtual int findUnread(
bool findNext,
int startAt=-1,
bool onlyNew =
false,
bool acceptCurrent =
false);
00139
00141 LoopOnGotoUnreadValue
loopOnGotoUnread() {
return mLoopOnGotoUnread; }
00142
00143
void highlightMessage(QListViewItem*,
bool markitread);
00144
00146
static QString fancyDate( time_t otime );
00147
00148 QFont dateFont;
00149
00150
bool noRepaint;
00151
00152
00153
bool eventFilter ( QObject *o, QEvent *e );
00154
00155 signals:
00158
virtual void selected(KMMessage *);
00161
virtual void activated(KMMessage *);
00163
virtual void maybeDeleting();
00164
00165
public slots:
00166
void workAroundQListViewLimitation();
00167
00169
void selectMessage(QListViewItem*);
00171
void highlightMessage(QListViewItem*);
00173
void slotRMB();
00175
void msgHeaderChanged(
KMFolder *folder,
int msgId);
00177
void msgChanged();
00179
void folderCleared();
00181
void msgAdded(
int);
00183
void msgRemoved(
int, QString, QString);
00185
void nextMessage();
00187
void selectNextMessage();
00189
void prevMessage();
00191
void selectPrevMessage();
00194
bool nextUnreadMessage(
bool acceptCurrent =
false);
00197
bool prevUnreadMessage();
00199
void slotNoDrag();
00201
void resetCurrentTime();
00202
00205
void slotExpandOrCollapseThread(
bool expand );
00208
void slotExpandOrCollapseAllThreads(
bool expand );
00209
00210
virtual void ensureCurrentItemVisible();
00211
00214
virtual void setSelected(QListViewItem *item,
bool selected);
00215
00217
void slotToggleSizeColumn();
00218
00220
void setFolderInfoStatus();
00221
00222
protected:
00223
static QPixmap *pixNew, *pixUns, *pixDel, *pixRead, *pixRep, *pixSent,
00224 *pixQueued, *pixFwd, *pixFlag, *pixWatched, *pixIgnored, *pixSpam, *pixHam,
00225 *pixFullySigned, *pixPartiallySigned, *pixUndefinedSigned,
00226 *pixFullyEncrypted, *pixPartiallyEncrypted, *pixUndefinedEncrypted,
00227 *pixFiller, *pixEncryptionProblematic,
00228 *pixSignatureProblematic;
00229
00231
virtual bool event(QEvent *e);
00232
00234
virtual void paintEmptyArea( QPainter * p,
const QRect & rect );
00235
00237
void makeHeaderVisible();
00238
00240
void findUnreadAux( KMHeaderItem*&,
bool &,
bool,
bool );
00241
00246
virtual int firstSelectedMsg() const;
00247
00249 virtual
void readFolderConfig(
void);
00250
00252 virtual
void writeFolderConfig(
void);
00253
00255 virtual
void writeConfig(
void);
00256
00258 virtual
void contentsMousePressEvent(QMouseEvent*);
00259 virtual
void contentsMouseReleaseEvent(QMouseEvent* e);
00260 virtual
void keyPressEvent( QKeyEvent * e );
00261
00263 virtual
void setSorting(
int column,
bool ascending = true);
00264
00266
void contentsMouseMoveEvent( QMouseEvent *e );
00267
00270
void styleChange( QStyle& oldStyle );
00271
00274
void setStyleDependantFrameWidth();
00275
00276 protected slots:
00279 virtual
void moveSelectedToFolder(
int menuId );
00281 virtual
void copySelectedToFolder(
int menuId );
00283 virtual
int slotFilterMsg( KMMessage * );
00285
void dirtySortOrder(
int);
00287
void rightButtonPressed( QListViewItem *, const QPoint &,
int );
00288
00289 private slots:
00290
void slotMoveCompleted(
bool success );
00291
void slotMoveAborted( );
00292
00293 private:
00296 virtual
void updateMessageList(
bool set_selection=false );
00297
00299
KMFolder* mFolder;
00301 KMMainWidget* mOwner;
00303
int mTopItem;
00305
int mCurrentItem;
00307 QMemArray<KMHeaderItem*> mItems;
00308
00309
00310
bool mNested, mNestedOverride, mSubjThreading;
00311 NestingPolicy nestingPolicy;
00312
int mSortCol;
00313
bool mSortDescending;
00314
00315 struct {
00316 uint ascending : 1;
00317 uint dirty : 1;
00318
short column;
00319 uint fakeSort : 1;
00320 uint removed : 1;
00321 } mSortInfo;
00322
00323
00325 QDict< KMSortCacheItem > mSortCacheItems;
00327 QDict< QPtrList< KMSortCacheItem > > mSubjectLists;
00329 QPtrList<KMHeaderItem> mImperfectlyThreadedList;
00330
00332
void buildThreadingTree( QMemArray<KMSortCacheItem *> sortCache );
00334
void buildSubjectThreadingTree( QMemArray<KMSortCacheItem *> sortCache );
00336 KMSortCacheItem* findParent(KMSortCacheItem *item);
00338 KMSortCacheItem* findParentBySubject(KMSortCacheItem *item);
00339
00341
void appendItemToSortFile(KMHeaderItem *);
00343
bool writeSortOrder();
00345
bool readSortOrder(
bool set_selection=
false);
00346
00348
bool showingSize;
00350
int getMsgIndex;
00352
bool getMsgMulti;
00354 KMHeaderItem* getMsgItem;
00356 KMMessageList mSelMsgBaseList;
00357 QPtrList<KMMessage> mSelMsgList;
00358 KMHeaderItem* mPrevCurrent;
00359
00361 KPaintInfo mPaintInfo;
00362
00364
static QIconSet *up, *down;
00366 KMMenuToFolder mMenuToFolder;
00367
00369
bool mMousePressed;
00371 QPoint mPressPos;
00372
00373 KMime::DateFormatter mDate;
00375 LoopOnGotoUnreadValue mLoopOnGotoUnread;
00376
bool mJumpToUnread;
00377
bool mReaderWindowActive;
00378
00380 KPopupMenu* mPopup;
00381
int mSizeColumn;
00382 };
00383
00384
#endif