kmail

kmheaders.h
1 #ifndef __KMHEADERS
2 #define __KMHEADERS
3 
4 #include "kmime_util.h"
5 #include "headeritem.h"
8 
9 #include <tdelistview.h>
10 #include <kfoldertree.h> // for KPaintInfo
11 #include <kmmsgbase.h> // for KMMsgStatus
12 
13 #include <tqwidget.h>
14 #include <tqstrlist.h>
15 #include <tqmemarray.h>
16 #include <tqmap.h>
17 #include <tqdragobject.h>
18 #include <tqdict.h>
19 #include <tqguardedptr.h>
20 
21 class KMFolder;
22 class KMMessage;
23 class KMMsgBase;
24 class KMCommand;
25 class KMMainWidget;
26 class TDEPopupMenu;
27 class TQPalette;
28 class TQPixmap;
29 class TQIconSet;
30 class TQDateTime;
31 
32 typedef TQPtrList<KMMsgBase> KMMessageList;
33 typedef TQValueList<TQ_UINT32> SerNumList;
34 typedef TQMap<int,KMFolder*> KMMenuToFolder;
35 enum NestingPolicy { AlwaysOpen = 0, DefaultOpen, DefaultClosed, OpenUnread };
36 
37 
38 #define KMAIL_SORT_VERSION 1012
39 #define KMAIL_SORT_FILE(x) x->indexLocation() + ".sorted"
40 #define KMAIL_SORT_HEADER "## KMail Sort V%04d\n\t"
41 #define KMAIL_MAGIC_HEADER_OFFSET 21 //strlen(KMAIL_SORT_HEADER)
42 #define KMAIL_MAX_KEY_LEN 16384
43 #define KMAIL_RESERVED 3
44 
46 class KMHeaders : public TDEListView
47 {
48  TQ_OBJECT
49 
50 
51  friend class ::KMail::HeaderItem; // For easy access to the pixmaps
52 
53 public:
54  KMHeaders(KMMainWidget *owner, TQWidget *parent=0, const char *name=0);
55  virtual ~KMHeaders();
56 
61  virtual void setFolder(KMFolder *, bool forceJumpToUnread = false);
62 
64  KMFolder* folder(void) { return mFolder; }
65 
67  void refreshNestedState(void);
68 
71  virtual void setCurrentMsg(int msgId);
72 
74  TQPtrList<TQListViewItem> currentThread() const;
75 
78  virtual void setThreadStatus(KMMsgStatus status, bool toggle=false);
79 
80  /* Set message status to read if it is new, or unread */
81  virtual void setMsgRead(int msgId);
82 
84  virtual void setMsgStatus(KMMsgStatus status, bool toggle=false);
85  virtual void deleteMsg();
86  virtual void applyFiltersOnMsg();
87  virtual void undo();
88  virtual bool canUndo() const;
89  virtual HeaderItem * prepareMove( int *contentX, int *contentY );
90  virtual void finalizeMove( HeaderItem *item, int contentX, int contentY );
91 
95  virtual void moveMsgToFolder( KMFolder* destination,
96  bool askForConfirmation=true );
97 
100  virtual void copyMsgToFolder(KMFolder* destination,
101  KMMessage* aMsg = 0);
102 
104  virtual void clearSelectableAndAboutToBeDeleted(TQ_UINT32 serNum);
107  virtual KMMessageList* selectedMsgs(bool toBeDeleted = false);
108 
110  TQValueList<int> selectedItems();
111 
113  TQValueList<TQ_UINT32> selectedSernums();
114 
118  TQValueList<TQ_UINT32> selectedVisibleSernums();
119 
121  int indexOfGetMsg (void) const { return getMsgIndex; }
122 
124  KMMainWidget* owner(void) const { return mOwner; }
125 
127  const KPaintInfo *paintInfo(void) const { return &mPaintInfo; }
128 
130  virtual void readConfig(void);
131 
133  virtual void readColorConfig(void);
134 
142  void restoreColumnLayout( TDEConfig *config, const TQString &group );
143 
145  virtual KMMessage* currentMsg();
147  virtual HeaderItem* currentHeaderItem();
149  virtual int currentItemIndex();
151  virtual void setCurrentItemByIndex( int msgIdx );
153  void setCurrentItemBySerialNum( unsigned long serialNum );
155  virtual int topItemIndex();
158  virtual void setTopItemByIndex( int aMsgIdx );
159  virtual void setNestedOverride( bool override );
160  virtual void setSubjectThreading( bool subjThreading );
162  virtual void setOpen ( TQListViewItem *, bool );
163 
164  NestingPolicy getNestingPolicy() const { return nestingPolicy; }
166  bool isThreaded() const {
167  return mNested != mNestedOverride; // xor
168  }
169 
172  virtual int findUnread(bool findNext, int startAt=-1, bool onlyNew = false, bool acceptCurrent = false);
173 
174  void highlightMessage(TQListViewItem*, bool markitread);
175  void highlightCurrentThread();
176 
178  static TQString fancyDate( time_t otime );
179 
180  bool noRepaint;
181 
182  // filter events for popup
183  bool eventFilter ( TQObject *o, TQEvent *e );
184 
186  const KMMsgBase * getMsgBaseForItem( const TQListViewItem *item ) const;
187 
188  // accessors
189  TQFont newFont() const { return mNewFont; }
190  TQFont unreadFont() const { return mUnreadFont; }
191  TQFont importantFont() const { return mImportantFont; }
192  TQFont todoFont() const { return mTodoFont; }
193  TQFont dateFont() const { return mDateFont; }
194 
200  void setCopiedMessages( const TQValueList<TQ_UINT32> &msgs, bool move );
201 
206  bool isMessageCut( TQ_UINT32 serNum ) const;
207 
209  virtual void writeConfig(void);
210 
211 signals:
222 
228  void msgAddedToListView( TQListViewItem* );
229 
230 public slots:
232  void selectMessage(TQListViewItem*);
234  void highlightMessage(TQListViewItem*);
236  void slotRMB();
238  void msgHeaderChanged(KMFolder *folder, int msgId);
240  void msgChanged();
242  void folderCleared();
244  void folderClosed();
246  void msgAdded(int);
248  void msgRemoved( int, TQString );
250  void nextMessage();
252  void selectNextMessage();
254  void prevMessage();
256  void selectPrevMessage();
259  bool nextUnreadMessage(bool acceptCurrent = false);
262  bool prevUnreadMessage();
264  void incCurrentMessage();
266  void decCurrentMessage();
268  void selectCurrentMessage();
270  void slotNoDrag();
272  void resetCurrentTime();
273 
275  void reset();
276 
279  void slotExpandOrCollapseThread( bool expand );
282  void slotExpandOrCollapseAllThreads( bool expand );
283 
284  virtual void ensureCurrentItemVisible();
285 
288  virtual void setSelected(TQListViewItem *item, bool selected);
289 
293  void setSelectedByIndex(TQValueList<int> items, bool selected);
294 
297  void slotToggleColumn(int id, int mode = -1);
298 
300  void setFolderInfoStatus();
301 
302 protected:
303  static TQPixmap *pixNew, *pixUns, *pixDel, *pixRead, *pixRep, *pixSent,
304  *pixQueued, *pixFwd, *pixFlag, *pixWatched, *pixIgnored, *pixSpam, *pixHam,
305  *pixFullySigned, *pixPartiallySigned, *pixUndefinedSigned,
306  *pixFullyEncrypted, *pixPartiallyEncrypted, *pixUndefinedEncrypted,
307  *pixFiller, *pixEncryptionProblematic,
308  *pixSignatureProblematic, *pixAttachment, *pixInvitation,
309  *pixReadFwd, *pixReadReplied, *pixReadFwdReplied, *pixTodo;
310 
312  virtual bool event(TQEvent *e);
313 
315  virtual void paintEmptyArea( TQPainter * p, const TQRect & rect );
316 
318  void makeHeaderVisible();
319 
321  void findUnreadAux( HeaderItem*&, bool &, bool, bool );
322 
327  virtual int firstSelectedMsg() const;
328 
330  virtual void readFolderConfig(void);
331 
333  virtual void writeFolderConfig(void);
334 
336  virtual void contentsMousePressEvent(TQMouseEvent*);
337  virtual void contentsMouseReleaseEvent(TQMouseEvent* e);
338  virtual void keyPressEvent( TQKeyEvent * e );
339 
341  virtual void setSorting( int column, bool ascending = true);
342 
344  void contentsMouseMoveEvent( TQMouseEvent *e );
345 
348  void styleChange( TQStyle& oldStyle );
349 
353 
354 protected slots:
357  virtual void moveSelectedToFolder( int menuId );
359  virtual void copySelectedToFolder( int menuId );
361  virtual int slotFilterMsg( KMMessage * );
363  void dirtySortOrder(int);
365  void rightButtonPressed( TQListViewItem *, const TQPoint &, int );
366 
367 private slots:
368  void slotMoveCompleted( KMCommand * );
369 
370  void copyMessages();
371  void cutMessages();
372  void pasteMessages();
373 
374  void updateActions();
375 
376 private:
379  virtual void updateMessageList( bool set_selection=false,
380  bool forceJumpToUnread = false );
381 
383  TQGuardedPtr<KMFolder> mFolder;
385  KMMainWidget* mOwner;
387  int mTopItem;
389  int mCurrentItem;
391  unsigned long mCurrentItemSerNum;
393  TQMemArray<HeaderItem*> mItems;
394 
395  // ===== threading and sorting ==========
396  bool mNested, mNestedOverride, mSubjThreading;
397  NestingPolicy nestingPolicy;
398  int mSortCol;
399  bool mSortDescending;
400  bool mIgnoreSortOrderChanges;
401 
402  struct {
403  uint ascending : 1;
404  uint dirty : 1;
405  short column;
406  uint fakeSort : 1;
407  uint removed : 1;
408  } mSortInfo;
409 
410 
412  TQDict< SortCacheItem > mSortCacheItems;
414  TQDict< TQPtrList< SortCacheItem > > mSubjectLists;
416  TQPtrList<HeaderItem> mImperfectlyThreadedList;
417 
419  void printSubjectThreadingTree( );
420  void printThreadingTree( );
422  void buildThreadingTree( TQMemArray<SortCacheItem *> sortCache );
424  void buildSubjectThreadingTree( TQMemArray<SortCacheItem *> sortCache );
426  SortCacheItem* findParent(SortCacheItem *item);
428  SortCacheItem* findParentBySubject(SortCacheItem *item);
429  SortCacheItem* mRoot; // used to represent the list view itself while threading
430 
432  void appendItemToSortFile(HeaderItem *);
434  bool writeSortOrder();
436  bool readSortOrder( bool set_selection = false,
437  bool forceJumpToUnread = false );
438 
440  int getMsgIndex;
442  bool getMsgMulti;
444  HeaderItem* getMsgItem;
446  KMMessageList mSelMsgBaseList;
447  HeaderItem* mPrevCurrent;
448 
450  KPaintInfo mPaintInfo;
451 
452  TQFont mNewFont, mUnreadFont, mImportantFont, mDateFont,mTodoFont;
453 
455  static TQIconSet *up, *down;
457  KMMenuToFolder mMenuToFolder;
458 
460  bool mMousePressed;
462  TQPoint mPressPos;
463 
464  KMime::DateFormatter mDate;
465  bool mReaderWindowActive;
466 
468  TDEPopupMenu* mPopup;
469 
470  // copied messages
471  TQValueList<TQ_UINT32> mCopiedMessages;
472  bool mMoveMessages;
473 }; // class
474 #endif
Mail folder.
Definition: kmfolder.h:69
The widget that shows the contents of folders.
Definition: kmheaders.h:47
virtual void setFolder(KMFolder *, bool forceJumpToUnread=false)
A new folder has been selected update the list of headers shown To override the global settings for j...
Definition: kmheaders.cpp:678
TQValueList< TQ_UINT32 > selectedSernums()
Returns the sernums of all selected items.
Definition: kmheaders.cpp:3601
void incCurrentMessage()
Focus the next message, but don't select it.
Definition: kmheaders.cpp:1879
void msgAdded(int)
For when the message with the given message id has been added to a folder.
Definition: kmheaders.cpp:895
void setSelectedByIndex(TQValueList< int > items, bool selected)
Select several items by message index and if they are the parent of a closed thread,...
Definition: kmheaders.cpp:1727
void setFolderInfoStatus()
Provide information about number of messages in a folder.
Definition: kmheaders.cpp:1391
TQValueList< TQ_UINT32 > selectedVisibleSernums()
Returns the sernums of all visible (ie.
Definition: kmheaders.cpp:3616
virtual void copySelectedToFolder(int menuId)
Same thing but copy.
Definition: kmheaders.cpp:1666
int indexOfGetMsg(void) const
Returns index of message returned by last getMsg() call.
Definition: kmheaders.h:121
virtual void paintEmptyArea(TQPainter *p, const TQRect &rect)
Overridden to support backing pixmap.
Definition: kmheaders.cpp:403
bool isThreaded() const
Returns true if the current header list is threaded.
Definition: kmheaders.h:166
virtual void contentsMousePressEvent(TQMouseEvent *)
Handle shift and control selection.
Definition: kmheaders.cpp:2276
void msgChanged()
For when the list of messages in a folder has changed.
Definition: kmheaders.cpp:816
const KMMsgBase * getMsgBaseForItem(const TQListViewItem *item) const
gets the message represented by the item as a KMMsgBase.
Definition: kmheaders.cpp:2609
virtual void readFolderConfig(void)
Read per-folder config options and apply them.
Definition: kmheaders.cpp:608
void reset()
Refresh the list of message headers shown.
Definition: kmheaders.cpp:570
void selected(KMMessage *)
emitted when the list view item corresponding to this message has been selected
void styleChange(TQStyle &oldStyle)
reimplemented in order to update the frame width in case of a changed GUI style
Definition: kmheaders.cpp:1384
virtual KMMessageList * selectedMsgs(bool toBeDeleted=false)
Returns list of selected messages.
Definition: kmheaders.cpp:1755
void restoreColumnLayout(TDEConfig *config, const TQString &group)
Same as TDEListView::restoreLayout(), only that this does not restore the sort order.
Definition: kmheaders.cpp:559
KMFolder * folder(void)
Return the folder whose message headers are being displayed.
Definition: kmheaders.h:64
virtual void setOpen(TQListViewItem *, bool)
Double force items to always be open.
Definition: kmheaders.cpp:2602
virtual void moveSelectedToFolder(int menuId)
Move messages corresponding to the selected items to the folder corresponding to the given menuId.
Definition: kmheaders.cpp:1531
void msgRemoved(int, TQString)
For when the message with the given id has been removed for a folder.
Definition: kmheaders.cpp:1081
void makeHeaderVisible()
Ensure the current item is visible.
Definition: kmheaders.cpp:2098
KMMainWidget * owner(void) const
Returns pointer to owning main window.
Definition: kmheaders.h:124
virtual void readConfig(void)
Read config options.
Definition: kmheaders.cpp:468
void selectCurrentMessage()
Select the message which currently has focus, if it's not already selected.
Definition: kmheaders.cpp:1914
void slotExpandOrCollapseAllThreads(bool expand)
Expands (expand == true) or collapses (expand == false) all threads.
Definition: kmheaders.cpp:1344
virtual void setSelected(TQListViewItem *item, bool selected)
Select an item and if it is the parent of a closed thread, also recursively select its children.
Definition: kmheaders.cpp:1707
void decCurrentMessage()
Focus the previous message, but don't select it.
Definition: kmheaders.cpp:1897
virtual void clearSelectableAndAboutToBeDeleted(TQ_UINT32 serNum)
Resets toBeDeleted and selectable status of all selected items.
Definition: kmheaders.cpp:1738
virtual KMMessage * currentMsg()
Return the current message.
Definition: kmheaders.cpp:2517
virtual void setCurrentItemByIndex(int msgIdx)
Set the current item to the one corresponding to the given msg id.
Definition: kmheaders.cpp:2543
virtual bool event(TQEvent *e)
Look for color changes.
Definition: kmheaders.cpp:414
virtual int slotFilterMsg(KMMessage *)
Apply the filter Rules to a single message.
Definition: kmheaders.cpp:1305
void folderClosed()
For when the folder has been cleared.
Definition: kmheaders.cpp:2701
void slotNoDrag()
Don't show a drag cursor.
Definition: kmheaders.cpp:2086
void resetCurrentTime()
timer function to set the current time regularly
Definition: kmheaders.cpp:2157
void prevMessage()
Make the previous header visible scrolling if necessary.
Definition: kmheaders.cpp:1841
TQValueList< int > selectedItems()
Returns the index values of currently selected items.
Definition: kmheaders.cpp:1776
void selectPrevMessage()
Same as prevMessage() but don't clear the current selection.
Definition: kmheaders.cpp:1853
void nextMessage()
Make the next header visible scrolling if necessary.
Definition: kmheaders.cpp:1804
void setCopiedMessages(const TQValueList< TQ_UINT32 > &msgs, bool move)
Sets the list of copied/cutted messages.
Definition: kmheaders.cpp:3589
void slotToggleColumn(int id, int mode=-1)
switch a column with the given id (see KPaintInfo enum) 1 for activate, 0 for deactivate,...
Definition: kmheaders.cpp:259
void dirtySortOrder(int)
dirties the sort order
Definition: kmheaders.cpp:2865
void selectNextMessage()
Same as nextMessage() but don't clear the current selection.
Definition: kmheaders.cpp:1816
bool nextUnreadMessage(bool acceptCurrent=false)
Make the nextUnread message header visible scrolling if necessary, returning true if an unread messag...
Definition: kmheaders.cpp:2040
virtual void moveMsgToFolder(KMFolder *destination, bool askForConfirmation=true)
If destination is 0 then the messages are deleted, otherwise they are moved to this folder.
Definition: kmheaders.cpp:1586
const KPaintInfo * paintInfo(void) const
PaintInfo pointer.
Definition: kmheaders.h:127
static TQString fancyDate(time_t otime)
return a string relativ to the current time
virtual void setSorting(int column, bool ascending=true)
Called when a header is clicked.
Definition: kmheaders.cpp:2616
void contentsMouseMoveEvent(TQMouseEvent *e)
To initiate a drag operation.
Definition: kmheaders.cpp:2375
void msgHeaderChanged(KMFolder *folder, int msgId)
Refresh list view item corresponding to the messae with the given id.
Definition: kmheaders.cpp:1210
virtual void readColorConfig(void)
Read color options and set palette.
Definition: kmheaders.cpp:426
void setCurrentItemBySerialNum(unsigned long serialNum)
Set the current item to the one corresponding to the given serial number (slow!)
Definition: kmheaders.cpp:3513
virtual HeaderItem * currentHeaderItem()
Return the current list view item.
Definition: kmheaders.cpp:2527
virtual void copyMsgToFolder(KMFolder *destination, KMMessage *aMsg=0)
Messages are duplicated and added to given folder.
Definition: kmheaders.cpp:1674
void refreshNestedState(void)
read the config file and update nested state if necessary
Definition: kmheaders.cpp:589
void rightButtonPressed(TQListViewItem *, const TQPoint &, int)
show context menu
Definition: kmheaders.cpp:2263
TQPtrList< TQListViewItem > currentThread() const
Get a list of all items in the current thread.
Definition: kmheaders.cpp:1234
virtual void setThreadStatus(KMMsgStatus status, bool toggle=false)
Set all messages in the current thread to status status or toggle it, if specified.
Definition: kmheaders.cpp:1256
bool prevUnreadMessage()
Make the previous message header visible scrolling if necessary, returning true if an unread message ...
Definition: kmheaders.cpp:2066
void activated(KMMessage *)
emitted when the list view item corresponding to this message has been double clicked
void setStyleDependantFrameWidth()
Set the width of the frame to a reasonable value for the current GUI style.
Definition: kmheaders.cpp:1369
void folderCleared()
For when the folder has been cleared.
Definition: kmheaders.cpp:2691
void slotRMB()
For when righ mouse button is pressed.
Definition: kmheaders.cpp:2424
virtual int firstSelectedMsg() const
Returns message index of first selected message of the messages where the message with the given id i...
Definition: kmheaders.cpp:1791
virtual void setTopItemByIndex(int aMsgIdx)
Make the item corresponding to the message with the given id the top most visible item.
Definition: kmheaders.cpp:2570
void slotExpandOrCollapseThread(bool expand)
Expands (expand == true) or collapses (expand == false) the current thread.
Definition: kmheaders.cpp:1327
void msgAddedToListView(TQListViewItem *)
emitted after a new item has been fully built and added to the list view.
virtual void setCurrentMsg(int msgId)
Set current message.
Definition: kmheaders.cpp:1692
virtual int currentItemIndex()
Return the index of the message corresponding to the current item.
Definition: kmheaders.cpp:2533
virtual void setMsgStatus(KMMsgStatus status, bool toggle=false)
The following methods processes all selected messages.
Definition: kmheaders.cpp:1222
virtual void writeFolderConfig(void)
Write per-folder config options.
Definition: kmheaders.cpp:638
virtual void writeConfig(void)
Write global config options.
Definition: kmheaders.cpp:659
void selectMessage(TQListViewItem *)
For when a list view item has been double clicked.
Definition: kmheaders.cpp:2166
void findUnreadAux(HeaderItem *&, bool &, bool, bool)
Auxillary method to findUnread.
Definition: kmheaders.cpp:1921
void messageListUpdated()
emitted when the list of messages has been completely rebuilt
bool isMessageCut(TQ_UINT32 serNum) const
Returns true if the message with the given serial number has been cut.
Definition: kmheaders.cpp:3596
virtual int findUnread(bool findNext, int startAt=-1, bool onlyNew=false, bool acceptCurrent=false)
Find next/prev unread message.
Definition: kmheaders.cpp:1960
virtual int topItemIndex()
Return the message id of the top most visible item.
Definition: kmheaders.cpp:2560
void maybeDeleting()
emitted when we might be about to delete messages
This is a Mime Message.
Definition: kmmessage.h:68
Visual representation of a member of the set of displayables (mails in the current folder).
Definition: headeritem.h:164
Represents an item in the set of mails to be displayed but only as far as sorting,...
Definition: headeritem.h:54