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 QAccel;
00034 class QVBoxLayout;
00035 class QSplitter;
00036 
00037 class KActionMenu;
00038 class KActionCollection;
00039 class KConfig;
00040 class KRadioAction;
00041 class KToggleAction;
00042 class KMenuBar;
00043 
00044 class KMFolder;
00045 class KMFolderDir;
00046 class KMFolderTree;
00047 class KMFolderTreeItem;
00048 class KMCommand;
00049 class KMMetaFilterActionCommand;
00050 class FolderShortcutCommand;
00051 class KMMessage;
00052 class KMFolder;
00053 class KMAccount;
00054 class KMSystemTray;
00055 class KMHeaders;
00056 
00057 template <typename T> class QValueList;
00058 template <typename T, typename S> class QMap;
00059 template <typename T> class QGuardedPtr;
00060 
00061 namespace KIO {
00062   class Job;
00063 }
00064 
00065 namespace KMail {
00066   class Vacation;
00067   class SieveDebugDialog;
00068   class FolderJob;
00069   class HeaderListQuickSearch;
00070   class SearchWindow;
00071 }
00072 
00073 typedef QMap<int,KMFolder*> KMMenuToFolder;
00074 
00075 
00076 class KDE_EXPORT KMMainWidget : public QWidget
00077 {
00078   Q_OBJECT
00079 
00080 public:
00081   KMMainWidget(QWidget *parent, const char *name,
00082                KXMLGUIClient *aGUIClient,
00083                KActionCollection *actionCollection,
00084          KConfig*config = KMKernel::config() );
00085   virtual ~KMMainWidget();
00086   void destruct();
00087 
00089   virtual void readPreConfig(void);
00090 
00092   virtual void readFolderConfig(void);
00093 
00095   virtual void writeFolderConfig(void);
00096 
00098   virtual void readConfig(void);
00099 
00101   virtual void writeConfig(void);
00102 
00104   KMReaderWin* messageView(void) const { return mMsgView; }
00105   KMFolderTree* folderTree(void) const  { return mFolderTree; }
00106 
00107   static void cleanup();
00108 
00109   KAction *action( const char *name ) { return mActionCollection->action( name ); }
00110   KAction *replyAction() const { return mReplyAction; }
00111   KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00112   KAction *replyAllAction() const { return mReplyAllAction; }
00113   KAction *replyListAction() const { return mReplyListAction; }
00114   KActionMenu * replyMenu() const { return mReplyActionMenu; }
00115   KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00116   KAction *forwardAction() const { return mForwardAction; }
00117   KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
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 slotMoveMsg();
00286   //void slotMoveMsgToFolder( KMFolder *dest);
00287   void slotCopyMsgToFolder( KMFolder *dest);
00288   void slotCopyMsg();
00289   void slotResendMsg();
00290   void slotEditVacation();
00291   void slotDebugSieve();
00292   void slotStartCertManager();
00293   void slotStartWatchGnuPG();
00294   void slotApplyFilters();
00295   void slotExpandThread();
00296   void slotExpandAllThreads();
00297   void slotCollapseThread();
00298   void slotCollapseAllThreads();
00299   void slotShowMsgSrc();
00300   void slotSetMsgStatusNew();
00301   void slotSetMsgStatusUnread();
00302   void slotSetMsgStatusRead();
00303   void slotSetMsgStatusTodo();
00304   void slotSetMsgStatusSent();
00305   void slotSetMsgStatusFlag();
00306   void slotSetThreadStatusNew();
00307   void slotSetThreadStatusUnread();
00308   void slotSetThreadStatusRead();
00309   void slotSetThreadStatusTodo();
00310   void slotSetThreadStatusFlag();
00311   void slotSetThreadStatusWatched();
00312   void slotSetThreadStatusIgnored();
00313   void slotToggleUnread();
00314   void slotToggleTotalColumn();
00315   void slotSendQueued();
00316   void slotSendQueuedVia( int item );
00317   void slotOnlineStatus();
00318   void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00319   void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00320   void slotMarkAll();
00321   void slotMemInfo();
00322   void slotSearch();
00323   void slotSearchClosed();
00324   void slotFind();
00325   void slotIntro();
00326   void slotShowStartupFolder();
00328   void slotShowTip();
00329   void slotAntiSpamWizard();
00330   void slotAntiVirusWizard();
00331   void slotFilterLogViewer();
00332 
00334   void slotNextMessage();
00335   void slotNextUnreadMessage();
00336   void slotNextImportantMessage();
00337   void slotNextUnreadFolder();
00338   void slotPrevMessage();
00339   void slotPrevUnreadMessage();
00340   void slotPrevImportantMessage();
00341   void slotPrevUnreadFolder();
00342 
00344   void slotDisplayCurrentMessage();
00345   void slotMsgActivated(KMMessage*);
00346 
00348   void slotUpdateUndo();
00349 
00351   virtual void moveSelectedToFolder( int menuId );
00353   virtual void copySelectedToFolder( int menuId );
00355   void updateFolderMenu();
00358   void updateMarkAsReadAction();
00359 
00361   void slotToggleShowQuickSearch();
00362 
00364   void slotEditNotifications();
00365   void slotEditKeys();
00366 
00368   void slotChangeCaption(QListViewItem*);
00369   void removeDuplicates();
00370 
00372   void slotReplyToMsg();
00373   void slotReplyAuthorToMsg();
00374   void slotReplyListToMsg();
00375   void slotReplyAllToMsg();
00376   void slotForwardMsg();
00377   void slotForwardAttachedMsg();
00378   void slotRedirectMsg();
00379   void slotNoQuoteReplyToMsg();
00380   void slotSubjectFilter();
00381   void slotMailingListFilter();
00382   void slotFromFilter();
00383   void slotToFilter();
00384   void slotPrintMsg();
00385 
00386   void slotConfigChanged();
00388   void slotFolderRemoved( KMFolder *folder );
00389 
00391   void slotShowBusySplash();
00394   void showOfflinePage();
00395 
00396 private:
00398   QString overrideEncoding() const;
00399 
00400   void initializeIMAPActions( bool setState );
00401 
00402 private:
00403   // Message actions
00404   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00405     *mDeleteThreadAction, *mSaveAsAction, *mEditAction,
00406     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00407     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
00408   // Composition actions
00409   KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00410       *mReplyListAction,
00411       *mForwardAction, *mForwardAttachedAction, *mRedirectAction,
00412       *mNoQuoteReplyAction;
00413   KActionMenu *mReplyActionMenu;
00414   KActionMenu *mForwardActionMenu;
00415   // Filter actions
00416   KActionMenu *mFilterMenu;
00417   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00418       *mListFilterAction;
00419 
00420   KActionMenu *mStatusMenu, *mThreadStatusMenu,
00421     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00422   KAction *mMarkThreadAsNewAction;
00423   KAction *mMarkThreadAsReadAction;
00424   KAction *mMarkThreadAsUnreadAction;
00425   KToggleAction *mToggleThreadTodoAction;
00426   KToggleAction *mToggleThreadFlagAction;
00427   KToggleAction *mToggleTodoAction;
00428   KToggleAction *mToggleSentAction;
00429   KToggleAction *mToggleFlagAction;
00430 
00431   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00432 
00434   KRadioAction* mUnreadColumnToggle;
00435   KRadioAction* mUnreadTextToggle;
00436   KToggleAction* mTotalColumnToggle;
00437 
00438   KToggleAction *mToggleShowQuickSearchAction;
00439 
00440   KMFolderTree *mFolderTree;
00441   KMReaderWin  *mMsgView;
00442   QSplitter    *mPanner1, *mPanner2;
00443   KMHeaders    *mHeaders;
00444   QVBox        *mSearchAndHeaders;
00445   KToolBar     *mSearchToolBar;
00446   KMail::HeaderListQuickSearch *mQuickSearchLine;
00447   KMFolder     *mFolder;
00448   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00449   KAction       *mlistFilterAction;
00450   bool      mIntegrated;
00451   bool          mBeepOnNew;
00452   bool          mConfirmEmpty;
00453   QString       mStartupFolder;
00454   int       mMessageStatusId;
00455   QValueList<int> mPanner1Sep, mPanner2Sep;
00456   KURL          mUrlCurrent;
00457   QPopupMenu    *mActMenu;
00458   QPopupMenu    *mSendMenu;
00459   QPopupMenu    *mFileMenu;
00460 
00461   bool mLongFolderList;
00462 
00463   bool      mStartupDone;
00464   KMMenuToFolder mMenuToFolder;
00465   int copyId, moveId, htmlId, threadId;
00466   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00467        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00468        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00469 
00470 //  QPopupMenu *mMessageMenu;
00471   KMail::SearchWindow *mSearchWin;
00472 
00473   KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00474       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00475       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00476       *mFolderShortCutCommandAction, *mTroubleshootFolderAction;
00477   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00478   KToggleAction *mThreadBySubjectAction;
00479   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00480 
00481   QTimer *menutimer;
00482   QTimer *mShowBusySplashTimer;
00483 
00484   QGuardedPtr<KMail::Vacation> mVacation;
00485 #if !defined(NDEBUG)
00486   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00487 #endif
00488   KActionCollection *mActionCollection;
00489   KActionSeparator  *mToolbarActionSeparator;
00490   QVBoxLayout *mTopLayout;
00491   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00492   QPtrList<KAction> mFilterMenuActions;
00493   QPtrList<KAction> mFilterTBarActions;
00494   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00495   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00496   QGuardedPtr <KMail::FolderJob> mJob;
00497 
00498   KMSystemTray  *mSystemTray;
00499   KConfig *mConfig;
00500   KXMLGUIClient *mGUIClient;
00501 
00502   static QValueList<KMMainWidget*>* s_mainWidgetList;
00503 
00504   QAccel *mAccel;
00505 };
00506 
00507 #endif
00508 
KDE Home | KDE Accessibility Home | Description of Access Keys