diff options
Diffstat (limited to 'libkdepim/kfoldertree.h')
-rw-r--r-- | libkdepim/kfoldertree.h | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/libkdepim/kfoldertree.h b/libkdepim/kfoldertree.h new file mode 100644 index 000000000..5946435b8 --- /dev/null +++ b/libkdepim/kfoldertree.h @@ -0,0 +1,311 @@ +/* -*- mode: C++; c-file-style: "gnu" -*- + + This file is part of libkdepim. + + Copyright (C) 2002 Carsten Burghardt <burghardt@kde.org> + Copyright (C) 2002 Marc Mutz <mutz@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef __KFOLDERTREE +#define __KFOLDERTREE + +#include <qpixmap.h> +#include <qbitarray.h> +#include <qdragobject.h> +#include <qcolor.h> +#include <klistview.h> +#include <kdepimmacros.h> + +class KFolderTree; + +/** Information shared by all items in a list view */ +struct KPaintInfo { + + // Popup ids for toggle-able columns + enum ColumnIds + { + COL_SIZE, + COL_ATTACHMENT, + COL_IMPORTANT, + COL_TODO, + COL_SPAM_HAM, + COL_WATCHED_IGNORED, + COL_STATUS, + COL_SIGNED, + COL_CRYPTO, + COL_RECEIVER, + COL_SCORE + }; + + KPaintInfo() : + pixmapOn(false), + + showSize(false), + showAttachment(false), + showImportant(false), + showTodo( false ), + showSpamHam(false), + showWatchedIgnored(false), + showStatus(false), + showSigned(false), + showCrypto(false), + showReceiver(false), + showScore(false), + + scoreCol(-1), + flagCol(-1), + senderCol(-1), + receiverCol(-1), + subCol(-1), + dateCol(-1), + sizeCol(-1), + attachmentCol(-1), + importantCol(-1), + todoCol(-1), + spamHamCol(-1), + watchedIgnoredCol(-1), + statusCol(-1), + signedCol(-1), + cryptoCol(-1), + + orderOfArrival(false), + status(false), + showCryptoIcons(false), + showAttachmentIcon(false) + {} + + bool pixmapOn; + QPixmap pixmap; + QColor colFore; + QColor colBack; + QColor colNew; + QColor colUnread; + QColor colFlag; + QColor colTodo; + QColor colCloseToQuota; + + bool showSize; + bool showAttachment; + bool showImportant; + bool showTodo; + bool showSpamHam; + bool showWatchedIgnored; + bool showStatus; + bool showSigned; + bool showCrypto; + bool showReceiver; + bool showScore; + + int scoreCol; + int flagCol; + int senderCol; + int receiverCol; + int subCol; + int dateCol; + int sizeCol; + int attachmentCol; + int importantCol; + int todoCol; + int spamHamCol; + int watchedIgnoredCol; + int statusCol; + int signedCol; + int cryptoCol; + + bool orderOfArrival; + bool status; + bool showCryptoIcons; + bool showAttachmentIcon; +}; + +//========================================================================== + +class KDE_EXPORT KFolderTreeItem : public KListViewItem +{ + public: + /** Protocol information */ + enum Protocol { + Imap, + Local, + News, + CachedImap, + Search, + NONE + }; + + /** Type information */ + enum Type { + Inbox, + Outbox, + SentMail, + Trash, + Drafts, + Templates, + Root, + Calendar, + Tasks, + Journals, + Contacts, + Notes, + Other + }; + + /** constructs a root-item */ + KFolderTreeItem( KFolderTree *parent, const QString & label=QString::null, + Protocol protocol=NONE, Type type=Root ); + + /** constructs a child-item */ + KFolderTreeItem( KFolderTreeItem *parent, const QString & label=QString::null, + Protocol protocol=NONE, Type type=Other, int unread=0, int total=0 ); + + /** compare */ + virtual int compare( QListViewItem * i, int col, + bool ascending ) const; + + /** set/get the unread-count */ + int unreadCount() { return mUnread; } + virtual void setUnreadCount( int aUnread ); + + /** set/get the total-count */ + int totalCount() { return mTotal; } + virtual void setTotalCount( int aTotal ); + + /** set/get the total-count */ + Q_INT64 folderSize() { return mSize; } + virtual void setFolderSize( Q_INT64 aSize ); + + /** set/get the protocol of the item */ + Protocol protocol() const { return mProtocol; } + virtual void setProtocol( Protocol aProtocol ) { mProtocol = aProtocol; } + + /** set/get the type of the item */ + Type type() const { return mType; } + virtual void setType( Type aType ) { mType = aType; } + + /** recursive unread count */ + virtual int countUnreadRecursive(); + + virtual Q_INT64 recursiveFolderSize() const; + + /** paints the cell */ + virtual void paintCell( QPainter * p, const QColorGroup & cg, + int column, int width, int align ); + + /** dnd */ + virtual bool acceptDrag(QDropEvent* ) const { return true; } + + void setFolderIsCloseToQuota( bool ); + bool folderIsCloseToQuota() const; + + private: + /** returns a sorting key based on the folder's protocol */ + int protocolSortingKey() const; + /** returns a sorting key based on the folder's type */ + int typeSortingKey() const; + + protected: + /** reimplement to use special squeezing algorithm for the folder name */ + virtual QString squeezeFolderName( const QString &text, + const QFontMetrics &fm, + uint width ) const; + + Protocol mProtocol; + Type mType; + int mUnread; + int mTotal; + Q_INT64 mSize; + bool mFolderIsCloseToQuota; +}; + +//========================================================================== + +class KDE_EXPORT KFolderTree : public KListView +{ + Q_OBJECT + + public: + KFolderTree( QWidget *parent, const char *name=0 ); + + /** registers MIMETypes that are handled + @param mimeType the name of the MIMEType + @param outsideOk accept drops of this type even if + the mouse cursor is not on top of an item */ + virtual void addAcceptableDropMimetype( const char *mimeType, bool outsideOk ); + + /** checks if the drag is acceptable */ + virtual bool acceptDrag( QDropEvent* event ) const; + + /** returns the KPaintInfo */ + KPaintInfo paintInfo() const { return mPaintInfo; } + + /** add/remove unread/total-columns */ + virtual void addUnreadColumn( const QString & name, int width=70 ); + virtual void removeUnreadColumn(); + virtual void addTotalColumn( const QString & name, int width=70 ); + virtual void removeTotalColumn(); + virtual void addSizeColumn( const QString & name, int width=70 ); + virtual void removeSizeColumn(); + + + /** the current index of the unread/total column */ + int unreadIndex() const { return mUnreadIndex; } + int totalIndex() const { return mTotalIndex; } + int sizeIndex() const { return mSizeIndex; } + + /** is the unread/total-column active? */ + bool isUnreadActive() const { return mUnreadIndex >= 0; } + bool isTotalActive() const { return mTotalIndex >= 0; } + bool isSizeActive() const { return mSizeIndex >= 0; } + + /** reimp to set full width of the _first_ column */ + virtual void setFullWidth( bool fullWidth ); + + protected: + /** reimplemented in order to update the frame width in case of a changed + GUI style */ + void styleChange( QStyle& oldStyle ); + + /** Set the width of the frame to a reasonable value for the current GUI + style */ + void setStyleDependantFrameWidth(); + + virtual void drawContentsOffset( QPainter * p, int ox, int oy, + int cx, int cy, int cw, int ch ); + + virtual void contentsMousePressEvent( QMouseEvent *e ); + virtual void contentsMouseReleaseEvent( QMouseEvent *e ); + + /** for mimetypes */ + QMemArray<const char*> mAcceptableDropMimetypes; + QBitArray mAcceptOutside; + + /** shared information */ // ### why isn't it then static? ;-) + KPaintInfo mPaintInfo; + + /** current index of unread/total-column + * -1 is deactivated */ + int mUnreadIndex; + int mTotalIndex; + int mSizeIndex; + + private slots: + /** repaints the complete column (instead of only parts of it as done in + QListView) if the size has changed */ + void slotSizeChanged( int section, int oldSize, int newSize ); + +}; + +#endif |