kfoldertree.h
00001 /* -*- mode: C++; c-file-style: "gnu" -*- 00002 00003 This file is part of libtdepim. 00004 00005 Copyright (C) 2002 Carsten Burghardt <burghardt@kde.org> 00006 Copyright (C) 2002 Marc Mutz <mutz@kde.org> 00007 00008 This library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Library General Public 00010 License version 2 as published by the Free Software Foundation. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00020 Boston, MA 02110-1301, USA. 00021 */ 00022 #ifndef __KFOLDERTREE 00023 #define __KFOLDERTREE 00024 00025 #include <tqpixmap.h> 00026 #include <tqbitarray.h> 00027 #include <tqdragobject.h> 00028 #include <tqcolor.h> 00029 #include <tdelistview.h> 00030 #include <tdepimmacros.h> 00031 00032 class KFolderTree; 00033 00035 struct KPaintInfo { 00036 00037 // Popup ids for toggle-able columns 00038 enum ColumnIds 00039 { 00040 COL_SIZE, 00041 COL_ATTACHMENT, 00042 COL_INVITATION, 00043 COL_IMPORTANT, 00044 COL_TODO, 00045 COL_SPAM_HAM, 00046 COL_WATCHED_IGNORED, 00047 COL_STATUS, 00048 COL_SIGNED, 00049 COL_CRYPTO, 00050 COL_RECEIVER, 00051 COL_SCORE 00052 }; 00053 00054 KPaintInfo() : 00055 pixmapOn(false), 00056 00057 showSize(false), 00058 showAttachment(false), 00059 showInvitation(false), 00060 showImportant(false), 00061 showTodo(false), 00062 showSpamHam(false), 00063 showWatchedIgnored(false), 00064 showStatus(false), 00065 showSigned(false), 00066 showCrypto(false), 00067 showReceiver(false), 00068 showScore(false), 00069 00070 scoreCol(-1), 00071 flagCol(-1), 00072 senderCol(-1), 00073 receiverCol(-1), 00074 subCol(-1), 00075 dateCol(-1), 00076 sizeCol(-1), 00077 attachmentCol(-1), 00078 invitationCol(-1), 00079 importantCol(-1), 00080 todoCol(-1), 00081 spamHamCol(-1), 00082 watchedIgnoredCol(-1), 00083 statusCol(-1), 00084 signedCol(-1), 00085 cryptoCol(-1), 00086 00087 orderOfArrival(false), 00088 status(false), 00089 showCryptoIcons(false), 00090 showAttachmentIcon(false), 00091 showInvitationIcon(false) 00092 {} 00093 00094 bool pixmapOn; 00095 TQPixmap pixmap; 00096 TQColor colFore; 00097 TQColor colBack; 00098 TQColor colNew; 00099 TQColor colUnread; 00100 TQColor colFlag; 00101 TQColor colTodo; 00102 TQColor colCloseToQuota; 00103 00104 bool showSize; 00105 bool showAttachment; 00106 bool showInvitation; 00107 bool showImportant; 00108 bool showTodo; 00109 bool showSpamHam; 00110 bool showWatchedIgnored; 00111 bool showStatus; 00112 bool showSigned; 00113 bool showCrypto; 00114 bool showReceiver; 00115 bool showScore; 00116 00117 int scoreCol; 00118 int flagCol; 00119 int senderCol; 00120 int receiverCol; 00121 int subCol; 00122 int dateCol; 00123 int sizeCol; 00124 int attachmentCol; 00125 int invitationCol; 00126 int importantCol; 00127 int todoCol; 00128 int spamHamCol; 00129 int watchedIgnoredCol; 00130 int statusCol; 00131 int signedCol; 00132 int cryptoCol; 00133 00134 bool orderOfArrival; 00135 bool status; 00136 bool showCryptoIcons; 00137 bool showAttachmentIcon; 00138 bool showInvitationIcon; 00139 }; 00140 00141 //========================================================================== 00142 00143 class KDE_EXPORT KFolderTreeItem : public TDEListViewItem 00144 { 00145 public: 00147 enum Protocol { 00148 Imap, 00149 Local, 00150 News, 00151 CachedImap, 00152 Search, 00153 NONE 00154 }; 00155 00157 enum Type { 00158 Inbox, 00159 Outbox, 00160 SentMail, 00161 Trash, 00162 Drafts, 00163 Templates, 00164 Root, 00165 Calendar, 00166 Tasks, 00167 Journals, 00168 Contacts, 00169 Notes, 00170 Other 00171 }; 00172 00174 KFolderTreeItem( KFolderTree *parent, const TQString & label=TQString(), 00175 Protocol protocol=NONE, Type type=Root ); 00176 00178 KFolderTreeItem( KFolderTreeItem *parent, const TQString & label=TQString(), 00179 Protocol protocol=NONE, Type type=Other, int unread=0, int total=0 ); 00180 00182 virtual int compare( TQListViewItem * i, int col, 00183 bool ascending ) const; 00184 00186 int unreadCount() { return mUnread; } 00187 virtual void setUnreadCount( int aUnread ); 00188 00190 int totalCount() { return mTotal; } 00191 virtual void setTotalCount( int aTotal ); 00192 00194 TQ_INT64 folderSize() { return mSize; } 00195 virtual void setFolderSize( TQ_INT64 aSize ); 00196 00198 Protocol protocol() const { return mProtocol; } 00199 virtual void setProtocol( Protocol aProtocol ) { mProtocol = aProtocol; } 00200 00202 Type type() const { return mType; } 00203 virtual void setType( Type aType ) { mType = aType; } 00204 00206 virtual int countUnreadRecursive(); 00207 00208 virtual TQ_INT64 recursiveFolderSize() const; 00209 00211 virtual void paintCell( TQPainter * p, const TQColorGroup & cg, 00212 int column, int width, int align ); 00213 00215 virtual bool acceptDrag(TQDropEvent* ) const { return true; } 00216 00217 void setFolderIsCloseToQuota( bool ); 00218 bool folderIsCloseToQuota() const; 00219 00220 private: 00222 int protocolSortingKey() const; 00224 int typeSortingKey() const; 00225 00226 protected: 00228 virtual TQString squeezeFolderName( const TQString &text, 00229 const TQFontMetrics &fm, 00230 uint width ) const; 00231 00232 Protocol mProtocol; 00233 Type mType; 00234 int mUnread; 00235 int mTotal; 00236 TQ_INT64 mSize; 00237 bool mFolderIsCloseToQuota; 00238 }; 00239 00240 //========================================================================== 00241 00242 class KDE_EXPORT KFolderTree : public TDEListView 00243 { 00244 Q_OBJECT 00245 00246 00247 public: 00248 KFolderTree( TQWidget *parent, const char *name=0 ); 00249 00254 virtual void addAcceptableDropMimetype( const char *mimeType, bool outsideOk ); 00255 00257 virtual bool acceptDrag( TQDropEvent* event ) const; 00258 00260 KPaintInfo paintInfo() const { return mPaintInfo; } 00261 00263 virtual void addUnreadColumn( const TQString & name, int width=70 ); 00264 virtual void removeUnreadColumn(); 00265 virtual void addTotalColumn( const TQString & name, int width=70 ); 00266 virtual void removeTotalColumn(); 00267 virtual void addSizeColumn( const TQString & name, int width=70 ); 00268 virtual void removeSizeColumn(); 00269 00270 00272 int unreadIndex() const { return mUnreadIndex; } 00273 int totalIndex() const { return mTotalIndex; } 00274 int sizeIndex() const { return mSizeIndex; } 00275 00277 bool isUnreadActive() const { return mUnreadIndex >= 0; } 00278 bool isTotalActive() const { return mTotalIndex >= 0; } 00279 bool isSizeActive() const { return mSizeIndex >= 0; } 00280 00282 virtual void setFullWidth( bool fullWidth ); 00283 00284 protected: 00287 void styleChange( TQStyle& oldStyle ); 00288 00291 void setStyleDependantFrameWidth(); 00292 00293 virtual void drawContentsOffset( TQPainter * p, int ox, int oy, 00294 int cx, int cy, int cw, int ch ); 00295 00296 virtual void contentsMousePressEvent( TQMouseEvent *e ); 00297 virtual void contentsMouseReleaseEvent( TQMouseEvent *e ); 00298 00300 TQMemArray<const char*> mAcceptableDropMimetypes; 00301 TQBitArray mAcceptOutside; 00302 // ### why isn't it then static? ;-) 00304 KPaintInfo mPaintInfo; 00305 00308 int mUnreadIndex; 00309 int mTotalIndex; 00310 int mSizeIndex; 00311 00312 private slots: 00315 void slotSizeChanged( int section, int oldSize, int newSize ); 00316 00317 }; 00318 00319 #endif