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