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 #include <qvaluevector.h>
00029 
00030 #include "kmreaderwin.h" //for inline actions
00031 #include "kmkernel.h" // for access to config
00032 #include <kaction.h>
00033 
00034 class QVBoxLayout;
00035 class QSplitter;
00036 class QSignalMapper;
00037 
00038 class KActionMenu;
00039 class KActionCollection;
00040 class KConfig;
00041 class KRadioAction;
00042 class KToggleAction;
00043 class KMenuBar;
00044 
00045 class KMFolder;
00046 class KMFolderDir;
00047 class KMFolderTree;
00048 class KMFolderTreeItem;
00049 class KMCommand;
00050 class KMMetaFilterActionCommand;
00051 class FolderShortcutCommand;
00052 class KMMessage;
00053 class KMFolder;
00054 class KMAccount;
00055 class KMSystemTray;
00056 class KMHeaders;
00057 
00058 template <typename T> class QValueList;
00059 template <typename T, typename S> class QMap;
00060 template <typename T> class QGuardedPtr;
00061 
00062 namespace KIO {
00063   class Job;
00064 }
00065 
00066 namespace KMail {
00067   class Vacation;
00068   class SieveDebugDialog;
00069   class FolderJob;
00070   class HeaderListQuickSearch;
00071   class SearchWindow;
00072 }
00073 
00074 typedef QMap<int,KMFolder*> KMMenuToFolder;
00075 
00076 
00077 class KDE_EXPORT KMMainWidget : public QWidget
00078 {
00079   Q_OBJECT
00080 
00081 public:
00082   KMMainWidget(QWidget *parent, const char *name,
00083                KXMLGUIClient *aGUIClient,
00084                KActionCollection *actionCollection,
00085          KConfig*config = KMKernel::config() );
00086   virtual ~KMMainWidget();
00087   void destruct();
00088 
00090   virtual void readPreConfig(void);
00091 
00093   virtual void readFolderConfig(void);
00094 
00096   virtual void writeFolderConfig(void);
00097 
00099   virtual void readConfig(void);
00100 
00102   virtual void writeConfig(void);
00103 
00105   KMReaderWin* messageView(void) const { return mMsgView; }
00106   KMFolderTree* folderTree(void) const  { return mFolderTree; }
00107 
00108   static void cleanup();
00109 
00110   KAction *action( const char *name ) { return mActionCollection->action( name ); }
00111   KAction *replyAction() const { return mReplyAction; }
00112   KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00113   KAction *replyAllAction() const { return mReplyAllAction; }
00114   KAction *replyListAction() const { return mReplyListAction; }
00115   KActionMenu *customReplyAction() const { return mCustomReplyActionMenu; }
00116   KActionMenu *customReplyAllAction() const { return mCustomReplyAllActionMenu; }
00117   KActionMenu * replyMenu() const { return mReplyActionMenu; }
00118   KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00119   KAction *forwardInlineAction() const { return mForwardInlineAction; }
00120   KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00121   KAction *forwardDigestAction() const { return mForwardDigestAction; }
00122   KAction *redirectAction() const { return mRedirectAction; }
00123   KActionMenu *customForwardAction() const { return mCustomForwardActionMenu; }
00124   KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00125   KActionMenu *filterMenu() const { return mFilterMenu; }
00126   KAction *printAction() const { return mPrintAction; }
00127   KAction *trashAction() const { return mTrashAction; }
00128   KAction *deleteAction() const { return mDeleteAction; }
00129   KAction *trashThreadAction() const { return mTrashThreadAction; }
00130   KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00131   KAction *saveAsAction() const { return mSaveAsAction; }
00132   KAction *editAction() const { return mEditAction; }
00133   KAction *useAction() const { return mUseAction; }
00134   KAction *sendAgainAction() const { return mSendAgainAction; }
00135   KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00136   KAction *findInMessageAction() const { return mFindInMessageAction; }
00137   KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00138   KAction *openAction() const { return mOpenAction; }
00139   KAction *viewSourceAction() { return mViewSourceAction; }
00140 
00141   KActionMenu *statusMenu()  const{ return mStatusMenu; }
00142   KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00143   KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00144   KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00145   KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00146 
00147   KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00148   KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00149 
00150   KMHeaders *headers() const { return mHeaders; }
00151   void toggleSystemTray();
00152 
00153   void updateListFilterAction();
00154 
00157   static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00158 
00159   KMSystemTray *systray() const;
00160 
00163   bool shortcutIsValid( const KShortcut& ) const;
00164 
00165 
00166   void modifyFolder( KMFolderTreeItem* folderItem );
00167 
00172   void setAccelsEnabled( bool enabled = true );
00173 
00174 public slots:
00175   void slotMoveMsgToFolder( KMFolder *dest);
00176   void slotTrashMsg();   // move to trash
00177 
00178   virtual void show();
00179   virtual void hide();
00181   void slotCheckMail();
00182 
00187   void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00188 
00190   void folderSelected();
00191 
00193   void folderSelectedUnread( KMFolder* );
00194 
00195   void slotMsgSelected(KMMessage*);
00196   void slotMsgChanged();
00197 
00199   void slotSelectFolder(KMFolder*);
00200   void slotSelectMessage(KMMessage*);
00201 
00202   void slotReplaceMsgByUnencryptedVersion();
00203 
00205   void updateMessageMenu();
00207   void startUpdateMessageActionsTimer();
00209   void updateMessageActions();
00210 
00212   void slotSubscriptionDialog();
00213 
00215   void slotFolderTreeColumnsChanged();
00216 
00218   void clearFilterActions();
00219   void initializeFilterActions();
00220 
00222   void initializeIMAPActions() { initializeIMAPActions( true ); }
00223 
00225   void initializeFolderShortcutActions();
00226 
00228   void slotShortcutChanged( KMFolder *folder );
00229 
00230   void updateCustomTemplateMenus();
00231 
00232 signals:
00233   void messagesTransfered( bool );
00234   void captionChangeRequest( const QString & caption );
00235 
00236 protected:
00237   void setupActions();
00238   void createWidgets();
00239   void activatePanners();
00240   void showMsg( KMReaderWin *win, KMMessage *msg );
00241   void updateFileMenu();
00242   void newFromTemplate( KMMessage *msg );
00243 
00244   KActionCollection * actionCollection() const { return mActionCollection; }
00245 
00249   KConfig * config();
00250 
00251 protected slots:
00252   void slotCheckOneAccount(int);
00253   void slotMailChecked( bool newMail, bool sendOnCheck,
00254                         const QMap<QString, int> & newInFolder );
00255   void getAccountMenu();
00256   void getTransportMenu();
00257   void slotHelp();
00258   void slotFilter();
00259   void slotPopFilter();
00260   void slotManageSieveScripts();
00261   void slotAddrBook();
00262   void slotImport();
00263   void slotViewChange();
00264   void slotCompose();
00265   void slotPostToML();
00266   void slotModifyFolder();
00267   void slotFolderMailingListProperties();
00268   void slotFolderShortcutCommand();
00269   void slotExpireFolder();
00270   void slotExpireAll();
00271   void slotInvalidateIMAPFolders();
00272   void slotMarkAllAsRead();
00273   void slotRemoveFolder();
00274   void slotEmptyFolder();
00275   void slotCompactFolder();
00276   void slotRefreshFolder();
00277   void slotTroubleshootFolder();
00278   void slotCompactAll();
00279   void slotOverrideHtml();
00280   void slotOverrideHtmlLoadExt();
00281   void slotOverrideThread();
00282   void slotToggleSubjectThreading();
00283   void slotMessageQueuedOrDrafted();
00284   void slotEditMsg();
00285   void slotUseTemplate();
00286   //void slotTrashMsg();   // move to trash
00287   void slotDeleteMsg( bool confirmDelete = true );  // completely delete message
00288   void slotTrashThread();
00289   void slotDeleteThread( bool confirmDelete = true );  // completely delete thread
00290   void slotUndo();
00291   void slotReadOn();
00292   void slotSaveMsg();
00293   void slotOpenMsg();
00294   void slotSaveAttachments();
00295   void slotJumpToFolder();
00296   void slotMoveMsg();
00297   //void slotMoveMsgToFolder( KMFolder *dest);
00298   void slotCopyMsgToFolder( KMFolder *dest);
00299   void slotCopyMsg();
00300   void slotResendMsg();
00301   void slotEditVacation();
00302   void slotDebugSieve();
00303   void slotStartCertManager();
00304   void slotStartWatchGnuPG();
00305   void slotApplyFilters();
00306   void slotExpandThread();
00307   void slotExpandAllThreads();
00308   void slotCollapseThread();
00309   void slotCollapseAllThreads();
00310   void slotShowMsgSrc();
00311   void slotSetMsgStatusNew();
00312   void slotSetMsgStatusUnread();
00313   void slotSetMsgStatusRead();
00314   void slotSetMsgStatusTodo();
00315   void slotSetMsgStatusSent();
00316   void slotSetMsgStatusFlag();
00317   void slotSetThreadStatusNew();
00318   void slotSetThreadStatusUnread();
00319   void slotSetThreadStatusRead();
00320   void slotSetThreadStatusTodo();
00321   void slotSetThreadStatusFlag();
00322   void slotSetThreadStatusWatched();
00323   void slotSetThreadStatusIgnored();
00324   void slotToggleUnread();
00325   void slotToggleTotalColumn();
00326   void slotSendQueued();
00327   void slotSendQueuedVia( int item );
00328   void slotOnlineStatus();
00329   void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00330   void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00331   void slotMarkAll();
00332   void slotMemInfo();
00333   void slotSearch();
00334   void slotSearchClosed();
00335   void slotFind();
00336   void slotIntro();
00337   void slotShowStartupFolder();
00339   void slotShowTip();
00340   void slotAntiSpamWizard();
00341   void slotAntiVirusWizard();
00342   void slotFilterLogViewer();
00343 
00344   void slotExportMail();
00345 
00347   void slotNextMessage();
00348   void slotNextUnreadMessage();
00349   void slotNextImportantMessage();
00350   void slotNextUnreadFolder();
00351   void slotPrevMessage();
00352   void slotPrevUnreadMessage();
00353   void slotPrevImportantMessage();
00354   void slotPrevUnreadFolder();
00355 
00357   void slotDisplayCurrentMessage();
00358   void slotMsgActivated( KMMessage* );
00359 
00360   void slotShowNewFromTemplate();
00361   void slotNewFromTemplate( int );
00362 
00364   void slotUpdateUndo();
00365 
00367   virtual void moveSelectedToFolder( int menuId );
00369   virtual void copySelectedToFolder( int menuId );
00371   void updateFolderMenu();
00374   void updateMarkAsReadAction();
00375 
00377   void slotToggleShowQuickSearch();
00378 
00380   void slotEditNotifications();
00381   void slotEditKeys();
00382 
00384   void slotChangeCaption(QListViewItem*);
00385   void removeDuplicates();
00386 
00388   void slotReplyToMsg();
00389   void slotReplyAuthorToMsg();
00390   void slotReplyListToMsg();
00391   void slotReplyAllToMsg();
00392   void slotCustomReplyToMsg( int tid );
00393   void slotCustomReplyAllToMsg( int tid );
00394   void slotForwardInlineMsg();
00395   void slotForwardAttachedMsg();
00396   void slotForwardDigestMsg();
00397   void slotRedirectMsg();
00398   void slotCustomForwardMsg( int tid );
00399   void slotNoQuoteReplyToMsg();
00400   void slotSubjectFilter();
00401   void slotMailingListFilter();
00402   void slotFromFilter();
00403   void slotToFilter();
00404   void slotPrintMsg();
00405 
00406   void slotConfigChanged();
00408   void slotFolderRemoved( KMFolder *folder );
00409 
00411   void slotShowBusySplash();
00414   void showOfflinePage();
00415 
00416 private:
00418   QString overrideEncoding() const;
00419 
00420   void initializeIMAPActions( bool setState );
00421 
00422 private:
00423   // Message actions
00424   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00425     *mDeleteThreadAction, *mSaveAsAction, *mEditAction, *mUseAction,
00426     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00427     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
00428   // Composition actions
00429   KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00430     *mReplyListAction,
00431     *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00432     *mRedirectAction, *mNoQuoteReplyAction;
00433   KActionMenu *mReplyActionMenu;
00434   KActionMenu *mForwardActionMenu;
00435   // Filter actions
00436   KActionMenu *mFilterMenu;
00437   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00438       *mListFilterAction;
00439   KActionMenu *mTemplateMenu;
00440 
00441   // Custom template actions menu
00442   KActionMenu *mCustomReplyActionMenu,
00443               *mCustomReplyAllActionMenu,
00444               *mCustomForwardActionMenu;
00445   // Signal mappers for custom template actions
00446   QSignalMapper *mCustomReplyMapper,
00447                 *mCustomReplyAllMapper,
00448                 *mCustomForwardMapper;
00449 
00450   KActionMenu *mStatusMenu, *mThreadStatusMenu,
00451     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00452   KAction *mMarkThreadAsNewAction;
00453   KAction *mMarkThreadAsReadAction;
00454   KAction *mMarkThreadAsUnreadAction;
00455   KToggleAction *mToggleThreadTodoAction;
00456   KToggleAction *mToggleThreadFlagAction;
00457   KToggleAction *mToggleTodoAction;
00458   KToggleAction *mToggleFlagAction;
00459 
00460   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00461 
00463   KRadioAction* mUnreadColumnToggle;
00464   KRadioAction* mUnreadTextToggle;
00465   KToggleAction* mTotalColumnToggle;
00466 
00467   KToggleAction *mToggleShowQuickSearchAction;
00468 
00469   KMFolderTree *mFolderTree;
00470   KMReaderWin  *mMsgView;
00471   QSplitter    *mPanner1, *mPanner2;
00472   KMHeaders    *mHeaders;
00473   QVBox        *mSearchAndHeaders;
00474   KToolBar     *mSearchToolBar;
00475   KMail::HeaderListQuickSearch *mQuickSearchLine;
00476   KMFolder     *mFolder;
00477   KMFolder     *mTemplateFolder;
00478   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00479   KAction       *mlistFilterAction;
00480   bool      mIntegrated;
00481   bool          mBeepOnNew;
00482   bool          mConfirmEmpty;
00483   QString       mStartupFolder;
00484   int       mMessageStatusId;
00485   QValueList<int> mPanner1Sep, mPanner2Sep;
00486   KURL          mUrlCurrent;
00487   QPopupMenu    *mActMenu;
00488   QPopupMenu    *mSendMenu;
00489   QPopupMenu    *mFileMenu;
00490 
00491   bool mLongFolderList;
00492 
00493   bool      mStartupDone;
00494   KMMenuToFolder mMenuToFolder;
00495   int copyId, moveId, htmlId, threadId;
00496   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00497        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00498        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00499 
00500 //  QPopupMenu *mMessageMenu;
00501   KMail::SearchWindow *mSearchWin;
00502 
00503   KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00504       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00505       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00506       *mFolderShortCutCommandAction, *mTroubleshootFolderAction;
00507   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00508   KToggleAction *mThreadBySubjectAction;
00509   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00510 
00511   QTimer *menutimer;
00512   QTimer *mShowBusySplashTimer;
00513 
00514   QGuardedPtr<KMail::Vacation> mVacation;
00515 #if !defined(NDEBUG)
00516   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00517 #endif
00518   KActionCollection *mActionCollection;
00519   KActionSeparator  *mToolbarActionSeparator;
00520   QVBoxLayout *mTopLayout;
00521   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00522   QPtrList<KAction> mFilterMenuActions;
00523   QPtrList<KAction> mFilterTBarActions;
00524   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00525   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00526   QGuardedPtr <KMail::FolderJob> mJob;
00527 
00528   QValueVector<QString> mCustomTemplates;
00529   QPtrList<KAction> mCustomTemplateActions;
00530 
00531   KMSystemTray  *mSystemTray;
00532   KConfig *mConfig;
00533   KXMLGUIClient *mGUIClient;
00534 
00535   static QValueList<KMMainWidget*>* s_mainWidgetList;
00536 };
00537 
00538 #endif
00539 
KDE Home | KDE Accessibility Home | Description of Access Keys