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