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 
00345   void slotNextMessage();
00346   void slotNextUnreadMessage();
00347   void slotNextImportantMessage();
00348   void slotNextUnreadFolder();
00349   void slotPrevMessage();
00350   void slotPrevUnreadMessage();
00351   void slotPrevImportantMessage();
00352   void slotPrevUnreadFolder();
00353 
00355   void slotDisplayCurrentMessage();
00356   void slotMsgActivated( KMMessage* );
00357 
00358   void slotShowNewFromTemplate();
00359   void slotNewFromTemplate( int );
00360 
00362   void slotUpdateUndo();
00363 
00365   virtual void moveSelectedToFolder( int menuId );
00367   virtual void copySelectedToFolder( int menuId );
00369   void updateFolderMenu();
00372   void updateMarkAsReadAction();
00373 
00375   void slotToggleShowQuickSearch();
00376 
00378   void slotEditNotifications();
00379   void slotEditKeys();
00380 
00382   void slotChangeCaption(QListViewItem*);
00383   void removeDuplicates();
00384 
00386   void slotReplyToMsg();
00387   void slotReplyAuthorToMsg();
00388   void slotReplyListToMsg();
00389   void slotReplyAllToMsg();
00390   void slotCustomReplyToMsg( int tid );
00391   void slotCustomReplyAllToMsg( int tid );
00392   void slotForwardInlineMsg();
00393   void slotForwardAttachedMsg();
00394   void slotForwardDigestMsg();
00395   void slotRedirectMsg();
00396   void slotCustomForwardMsg( int tid );
00397   void slotNoQuoteReplyToMsg();
00398   void slotSubjectFilter();
00399   void slotMailingListFilter();
00400   void slotFromFilter();
00401   void slotToFilter();
00402   void slotPrintMsg();
00403 
00404   void slotConfigChanged();
00406   void slotFolderRemoved( KMFolder *folder );
00407 
00409   void slotShowBusySplash();
00412   void showOfflinePage();
00413 
00414 private:
00416   QString overrideEncoding() const;
00417 
00418   void initializeIMAPActions( bool setState );
00419 
00420 private:
00421   // Message actions
00422   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00423     *mDeleteThreadAction, *mSaveAsAction, *mEditAction, *mUseAction,
00424     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00425     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
00426   // Composition actions
00427   KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00428     *mReplyListAction,
00429     *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00430     *mRedirectAction, *mNoQuoteReplyAction;
00431   KActionMenu *mReplyActionMenu;
00432   KActionMenu *mForwardActionMenu;
00433   // Filter actions
00434   KActionMenu *mFilterMenu;
00435   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00436       *mListFilterAction;
00437   KActionMenu *mTemplateMenu;
00438 
00439   // Custom template actions menu
00440   KActionMenu *mCustomReplyActionMenu,
00441               *mCustomReplyAllActionMenu,
00442               *mCustomForwardActionMenu;
00443   // Signal mappers for custom template actions
00444   QSignalMapper *mCustomReplyMapper,
00445                 *mCustomReplyAllMapper,
00446                 *mCustomForwardMapper;
00447 
00448   KActionMenu *mStatusMenu, *mThreadStatusMenu,
00449     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00450   KAction *mMarkThreadAsNewAction;
00451   KAction *mMarkThreadAsReadAction;
00452   KAction *mMarkThreadAsUnreadAction;
00453   KToggleAction *mToggleThreadTodoAction;
00454   KToggleAction *mToggleThreadFlagAction;
00455   KToggleAction *mToggleTodoAction;
00456   KToggleAction *mToggleFlagAction;
00457 
00458   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00459 
00461   KRadioAction* mUnreadColumnToggle;
00462   KRadioAction* mUnreadTextToggle;
00463   KToggleAction* mTotalColumnToggle;
00464 
00465   KToggleAction *mToggleShowQuickSearchAction;
00466 
00467   KMFolderTree *mFolderTree;
00468   KMReaderWin  *mMsgView;
00469   QSplitter    *mPanner1, *mPanner2;
00470   KMHeaders    *mHeaders;
00471   QVBox        *mSearchAndHeaders;
00472   KToolBar     *mSearchToolBar;
00473   KMail::HeaderListQuickSearch *mQuickSearchLine;
00474   KMFolder     *mFolder;
00475   KMFolder     *mTemplateFolder;
00476   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00477   KAction       *mlistFilterAction;
00478   bool      mIntegrated;
00479   bool          mBeepOnNew;
00480   bool          mConfirmEmpty;
00481   QString       mStartupFolder;
00482   int       mMessageStatusId;
00483   QValueList<int> mPanner1Sep, mPanner2Sep;
00484   KURL          mUrlCurrent;
00485   QPopupMenu    *mActMenu;
00486   QPopupMenu    *mSendMenu;
00487   QPopupMenu    *mFileMenu;
00488 
00489   bool mLongFolderList;
00490 
00491   bool      mStartupDone;
00492   KMMenuToFolder mMenuToFolder;
00493   int copyId, moveId, htmlId, threadId;
00494   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00495        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00496        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00497 
00498 //  QPopupMenu *mMessageMenu;
00499   KMail::SearchWindow *mSearchWin;
00500 
00501   KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00502       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00503       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00504       *mFolderShortCutCommandAction, *mTroubleshootFolderAction;
00505   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00506   KToggleAction *mThreadBySubjectAction;
00507   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00508 
00509   QTimer *menutimer;
00510   QTimer *mShowBusySplashTimer;
00511 
00512   QGuardedPtr<KMail::Vacation> mVacation;
00513 #if !defined(NDEBUG)
00514   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00515 #endif
00516   KActionCollection *mActionCollection;
00517   KActionSeparator  *mToolbarActionSeparator;
00518   QVBoxLayout *mTopLayout;
00519   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00520   QPtrList<KAction> mFilterMenuActions;
00521   QPtrList<KAction> mFilterTBarActions;
00522   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00523   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00524   QGuardedPtr <KMail::FolderJob> mJob;
00525 
00526   QValueVector<QString> mCustomTemplates;
00527   QPtrList<KAction> mCustomTemplateActions;
00528 
00529   KMSystemTray  *mSystemTray;
00530   KConfig *mConfig;
00531   KXMLGUIClient *mGUIClient;
00532 
00533   static QValueList<KMMainWidget*>* s_mainWidgetList;
00534 };
00535 
00536 #endif
00537 
KDE Home | KDE Accessibility Home | Description of Access Keys