kmail

kmmainwidget.h

00001 /* -*- mode: C++; c-file-style: "gnu" -*-
00002     This file is part of KMail, the KDE mail client.
00003     Copyright (c) 2002 Don Sanders <sanders@kde.org>
00004 
00005     Based on the work of Stefan Taferner <taferner@kde.org>
00006 
00007     KMail is free software; you can redistribute it and/or modify it
00008     under the terms of the GNU General Public License, version 2, as
00009     published by the Free Software Foundation.
00010 
00011     KMail is distributed in the hope that it will be useful, but
00012     WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00019 */
00020 
00021 #ifndef __KMMAINWIDGET
00022 #define __KMMAINWIDGET
00023 
00024 #include <kurl.h>
00025 #include <kxmlguiclient.h>
00026 #include <qlistview.h>
00027 #include <qvbox.h>
00028 
00029 #include "kmreaderwin.h" //for inline actions
00030 #include "kmkernel.h" // for access to config
00031 #include <kaction.h>
00032 
00033 class QAccel;
00034 class QVBoxLayout;
00035 class QSplitter;
00036 
00037 class KActionMenu;
00038 class KActionCollection;
00039 class KConfig;
00040 class KRadioAction;
00041 class KToggleAction;
00042 class KMenuBar;
00043 
00044 class KMFolder;
00045 class KMFolderDir;
00046 class KMFolderTree;
00047 class KMFolderTreeItem;
00048 class KMCommand;
00049 class KMMetaFilterActionCommand;
00050 class FolderShortcutCommand;
00051 class KMMessage;
00052 class KMFolder;
00053 class KMAccount;
00054 class KMSystemTray;
00055 class KMHeaders;
00056 
00057 template <typename T> class QValueList;
00058 template <typename T, typename S> class QMap;
00059 template <typename T> class QGuardedPtr;
00060 
00061 namespace KIO {
00062   class Job;
00063 }
00064 
00065 namespace KMail {
00066   class Vacation;
00067   class SieveDebugDialog;
00068   class FolderJob;
00069   class HeaderListQuickSearch;
00070   class SearchWindow;
00071 }
00072 
00073 typedef QMap<int,KMFolder*> KMMenuToFolder;
00074 
00075 
00076 class KDE_EXPORT KMMainWidget : public QWidget
00077 {
00078   Q_OBJECT
00079 
00080 public:
00081   KMMainWidget(QWidget *parent, const char *name,
00082                KXMLGUIClient *aGUIClient,
00083                KActionCollection *actionCollection,
00084          KConfig*config = KMKernel::config() );
00085   virtual ~KMMainWidget();
00086   void destruct();
00087 
00089   virtual void readPreConfig(void);
00090 
00092   virtual void readFolderConfig(void);
00093 
00095   virtual void writeFolderConfig(void);
00096 
00098   virtual void readConfig(void);
00099 
00101   virtual void writeConfig(void);
00102 
00104   KMReaderWin* messageView(void) const { return mMsgView; }
00105   KMFolderTree* folderTree(void) const  { return mFolderTree; }
00106 
00107   static void cleanup();
00108 
00109   KAction *action( const char *name ) { return mActionCollection->action( name ); }
00110   KAction *replyAction() const { return mReplyAction; }
00111   KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00112   KAction *replyAllAction() const { return mReplyAllAction; }
00113   KAction *replyListAction() const { return mReplyListAction; }
00114   KActionMenu * replyMenu() const { return mReplyActionMenu; }
00115   KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00116   KAction *forwardAction() const { return mForwardAction; }
00117   KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00118   KAction *redirectAction() const { return mRedirectAction; }
00119   KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00120   KActionMenu *filterMenu() const { return mFilterMenu; }
00121   KAction *printAction() const { return mPrintAction; }
00122   KAction *trashAction() const { return mTrashAction; }
00123   KAction *deleteAction() const { return mDeleteAction; }
00124   KAction *trashThreadAction() const { return mTrashThreadAction; }
00125   KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00126   KAction *saveAsAction() const { return mSaveAsAction; }
00127   KAction *editAction() const { return mEditAction; }
00128   KAction *sendAgainAction() const { return mSendAgainAction; }
00129   KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00130   KAction *findInMessageAction() const { return mFindInMessageAction; }
00131   KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00132   KAction *openAction() const { return mOpenAction; }
00133   KAction *viewSourceAction() { return mViewSourceAction; }
00134 
00135   KActionMenu *statusMenu()  const{ return mStatusMenu; }
00136   KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00137   KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00138   KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00139   KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00140 
00141   KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00142   KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00143 
00144   KMHeaders *headers() const { return mHeaders; }
00145   void toggleSystemTray();
00146 
00147   void updateListFilterAction();
00148 
00151   static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00152 
00153   KMSystemTray *systray() const;
00154 
00157   bool shortcutIsValid( const KShortcut& ) const;
00158 
00159 
00160   void modifyFolder( KMFolderTreeItem* folderItem );
00161 
00166   void setAccelsEnabled( bool enabled = true );
00167 
00168 public slots:
00169   void slotMoveMsgToFolder( KMFolder *dest);
00170   void slotTrashMsg();   // move to trash
00171 
00172   virtual void show();
00173   virtual void hide();
00175   void slotCheckMail();
00176 
00181   void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00182 
00184   void folderSelected();
00185 
00187   void folderSelectedUnread( KMFolder* );
00188 
00189   void slotMsgSelected(KMMessage*);
00190   void slotMsgChanged();
00191 
00193   void slotSelectFolder(KMFolder*);
00194   void slotSelectMessage(KMMessage*);
00195 
00196   void slotReplaceMsgByUnencryptedVersion();
00197 
00199   void updateMessageMenu();
00201   void startUpdateMessageActionsTimer();
00203   void updateMessageActions();
00204 
00206   void slotSubscriptionDialog();
00207 
00209   void slotFolderTreeColumnsChanged();
00210 
00212   void clearFilterActions();
00213   void initializeFilterActions();
00214 
00216   void initializeIMAPActions() { initializeIMAPActions( true ); }
00217 
00219   void initializeFolderShortcutActions();
00220 
00222   void slotShortcutChanged( KMFolder *folder );
00223 
00224 signals:
00225   void messagesTransfered( bool );
00226   void captionChangeRequest( const QString & caption );
00227 
00228 protected:
00229   void setupActions();
00230   void createWidgets();
00231   void activatePanners();
00232   void showMsg(KMReaderWin *win, KMMessage *msg);
00233   void updateFileMenu();
00234 
00235   KActionCollection * actionCollection() const { return mActionCollection; }
00236 
00240   KConfig * config();
00241 
00242 protected slots:
00243   void slotCheckOneAccount(int);
00244   void slotMailChecked( bool newMail, bool sendOnCheck,
00245                         const QMap<QString, int> & newInFolder );
00246   void getAccountMenu();
00247   void getTransportMenu();
00248   void slotHelp();
00249   void slotFilter();
00250   void slotPopFilter();
00251   void slotManageSieveScripts();
00252   void slotAddrBook();
00253   void slotImport();
00254   void slotViewChange();
00255   void slotCompose();
00256   void slotPostToML();
00257   void slotModifyFolder();
00258   void slotFolderMailingListProperties();
00259   void slotFolderShortcutCommand();
00260   void slotExpireFolder();
00261   void slotExpireAll();
00262   void slotInvalidateIMAPFolders();
00263   void slotMarkAllAsRead();
00264   void slotRemoveFolder();
00265   void slotEmptyFolder();
00266   void slotCompactFolder();
00267   void slotRefreshFolder();
00268   void slotTroubleshootFolder();
00269   void slotCompactAll();
00270   void slotOverrideHtml();
00271   void slotOverrideHtmlLoadExt();
00272   void slotOverrideThread();
00273   void slotToggleSubjectThreading();
00274   void slotMessageQueuedOrDrafted();
00275   void slotEditMsg();
00276   //void slotTrashMsg();   // move to trash
00277   void slotDeleteMsg( bool confirmDelete = true );  // completely delete message
00278   void slotTrashThread();
00279   void slotDeleteThread( bool confirmDelete = true );  // completely delete thread
00280   void slotUndo();
00281   void slotReadOn();
00282   void slotSaveMsg();
00283   void slotOpenMsg();
00284   void slotSaveAttachments();
00285   void slotMoveMsg();
00286   //void slotMoveMsgToFolder( KMFolder *dest);
00287   void slotCopyMsgToFolder( KMFolder *dest);
00288   void slotCopyMsg();
00289   void slotResendMsg();
00290   void slotEditVacation();
00291   void slotDebugSieve();
00292   void slotStartCertManager();
00293   void slotStartWatchGnuPG();
00294   void slotApplyFilters();
00295   void slotExpandThread();
00296   void slotExpandAllThreads();
00297   void slotCollapseThread();
00298   void slotCollapseAllThreads();
00299   void slotShowMsgSrc();
00300   void slotSetMsgStatusNew();
00301   void slotSetMsgStatusUnread();
00302   void slotSetMsgStatusRead();
00303   void slotSetMsgStatusTodo();
00304   void slotSetMsgStatusSent();
00305   void slotSetMsgStatusFlag();
00306   void slotSetThreadStatusNew();
00307   void slotSetThreadStatusUnread();
00308   void slotSetThreadStatusRead();
00309   void slotSetThreadStatusTodo();
00310   void slotSetThreadStatusFlag();
00311   void slotSetThreadStatusWatched();
00312   void slotSetThreadStatusIgnored();
00313   void slotToggleUnread();
00314   void slotToggleTotalColumn();
00315   void slotSendQueued();
00316   void slotSendQueuedVia( int item );
00317   void slotOnlineStatus();
00318   void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00319   void slotMarkAll();
00320   void slotMemInfo();
00321   void slotSearch();
00322   void slotSearchClosed();
00323   void slotFind();
00324   void slotIntro();
00325   void slotShowStartupFolder();
00327   void slotShowTip();
00328   void slotAntiSpamWizard();
00329   void slotAntiVirusWizard();
00330   void slotFilterLogViewer();
00331 
00333   void slotNextMessage();
00334   void slotNextUnreadMessage();
00335   void slotNextImportantMessage();
00336   void slotNextUnreadFolder();
00337   void slotPrevMessage();
00338   void slotPrevUnreadMessage();
00339   void slotPrevImportantMessage();
00340   void slotPrevUnreadFolder();
00341 
00343   void slotDisplayCurrentMessage();
00344   void slotMsgActivated(KMMessage*);
00345 
00347   void slotUpdateUndo();
00348 
00350   virtual void moveSelectedToFolder( int menuId );
00352   virtual void copySelectedToFolder( int menuId );
00354   void updateFolderMenu();
00357   void updateMarkAsReadAction();
00358 
00360   void slotToggleShowQuickSearch();
00361 
00363   void slotEditNotifications();
00364   void slotEditKeys();
00365 
00367   void slotChangeCaption(QListViewItem*);
00368   void removeDuplicates();
00369 
00371   void slotReplyToMsg();
00372   void slotReplyAuthorToMsg();
00373   void slotReplyListToMsg();
00374   void slotReplyAllToMsg();
00375   void slotForwardMsg();
00376   void slotForwardAttachedMsg();
00377   void slotRedirectMsg();
00378   void slotNoQuoteReplyToMsg();
00379   void slotSubjectFilter();
00380   void slotMailingListFilter();
00381   void slotFromFilter();
00382   void slotToFilter();
00383   void slotPrintMsg();
00384 
00385   void slotConfigChanged();
00387   void slotFolderRemoved( KMFolder *folder );
00388 
00390   void slotShowBusySplash();
00393   void showOfflinePage();
00394 
00395 private:
00397   QString overrideEncoding() const;
00398 
00399   void initializeIMAPActions( bool setState );
00400 
00401 private:
00402   // Message actions
00403   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00404     *mDeleteThreadAction, *mSaveAsAction, *mEditAction,
00405     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00406     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
00407   // Composition actions
00408   KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00409       *mReplyListAction,
00410       *mForwardAction, *mForwardAttachedAction, *mRedirectAction,
00411       *mNoQuoteReplyAction;
00412   KActionMenu *mReplyActionMenu;
00413   KActionMenu *mForwardActionMenu;
00414   // Filter actions
00415   KActionMenu *mFilterMenu;
00416   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00417       *mListFilterAction;
00418 
00419   KActionMenu *mStatusMenu, *mThreadStatusMenu,
00420     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00421   KAction *mMarkThreadAsNewAction;
00422   KAction *mMarkThreadAsReadAction;
00423   KAction *mMarkThreadAsUnreadAction;
00424   KToggleAction *mToggleThreadTodoAction;
00425   KToggleAction *mToggleThreadFlagAction;
00426   KToggleAction *mToggleTodoAction;
00427   KToggleAction *mToggleSentAction;
00428   KToggleAction *mToggleFlagAction;
00429 
00430   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00431 
00433   KRadioAction* mUnreadColumnToggle;
00434   KRadioAction* mUnreadTextToggle;
00435   KToggleAction* mTotalColumnToggle;
00436 
00437   KToggleAction *mToggleShowQuickSearchAction;
00438 
00439   KMFolderTree *mFolderTree;
00440   KMReaderWin  *mMsgView;
00441   QSplitter    *mPanner1, *mPanner2;
00442   KMHeaders    *mHeaders;
00443   QVBox        *mSearchAndHeaders;
00444   KToolBar     *mSearchToolBar;
00445   KMail::HeaderListQuickSearch *mQuickSearchLine;
00446   KMFolder     *mFolder;
00447   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00448   KAction       *mlistFilterAction;
00449   bool      mIntegrated;
00450   bool          mBeepOnNew;
00451   bool          mConfirmEmpty;
00452   QString       mStartupFolder;
00453   int       mMessageStatusId;
00454   QValueList<int> mPanner1Sep, mPanner2Sep;
00455   KURL          mUrlCurrent;
00456   QPopupMenu    *mActMenu;
00457   QPopupMenu    *mSendMenu;
00458   QPopupMenu    *mFileMenu;
00459 
00460   bool mLongFolderList;
00461 
00462   bool      mStartupDone;
00463   KMMenuToFolder mMenuToFolder;
00464   int copyId, moveId, htmlId, threadId;
00465   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00466        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00467        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00468 
00469 //  QPopupMenu *mMessageMenu;
00470   KMail::SearchWindow *mSearchWin;
00471 
00472   KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00473       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00474       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00475       *mFolderShortCutCommandAction, *mTroubleshootFolderAction;
00476   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00477   KToggleAction *mThreadBySubjectAction;
00478   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00479 
00480   QTimer *menutimer;
00481   QTimer *mShowBusySplashTimer;
00482 
00483   QGuardedPtr<KMail::Vacation> mVacation;
00484 #if !defined(NDEBUG)
00485   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00486 #endif
00487   KActionCollection *mActionCollection;
00488   KActionSeparator  *mToolbarActionSeparator;
00489   QVBoxLayout *mTopLayout;
00490   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00491   QPtrList<KAction> mFilterMenuActions;
00492   QPtrList<KAction> mFilterTBarActions;
00493   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00494   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00495   QGuardedPtr <KMail::FolderJob> mJob;
00496 
00497   KMSystemTray  *mSystemTray;
00498   KConfig *mConfig;
00499   KXMLGUIClient *mGUIClient;
00500 
00501   static QValueList<KMMainWidget*>* s_mainWidgetList;
00502 
00503   QAccel *mAccel;
00504 };
00505 
00506 #endif
00507 
KDE Home | KDE Accessibility Home | Description of Access Keys