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