summaryrefslogtreecommitdiffstats
path: root/libkdepim/kfoldertree.h
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/kfoldertree.h')
-rw-r--r--libkdepim/kfoldertree.h311
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