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