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 *forwardAction() const { return mForwardAction; }
00116   KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00117   KAction *redirectAction() const { return mRedirectAction; }
00118   KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00119   KActionMenu *filterMenu() const { return mFilterMenu; }
00120   KAction *printAction() const { return mPrintAction; }
00121   KAction *trashAction() const { return mTrashAction; }
00122   KAction *deleteAction() const { return mDeleteAction; }
00123   KAction *trashThreadAction() const { return mTrashThreadAction; }
00124   KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00125   KAction *saveAsAction() const { return mSaveAsAction; }
00126   KAction *editAction() const { return mEditAction; }
00127   KAction *sendAgainAction() const { return mSendAgainAction; }
00128   KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00129   KAction *findInMessageAction() const { return mFindInMessageAction; }
00130   KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00131   KAction *openAction() const { return mOpenAction; }
00132   KAction *viewSourceAction() { return mViewSourceAction; }
00133 
00134   KActionMenu *statusMenu()  const{ return mStatusMenu; }
00135   KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00136   KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00137   KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00138   KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00139 
00140   KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00141   KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00142 
00143   KMHeaders *headers() const { return mHeaders; }
00144   void toggleSystemTray();
00145 
00146   void updateListFilterAction();
00147 
00150   static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00151 
00152   KMSystemTray *systray() const;
00153 
00156   bool shortcutIsValid( const KShortcut& ) const;
00157 
00158 
00159   void modifyFolder( KMFolderTreeItem* folderItem );
00160 
00165   void setAccelsEnabled( bool enabled = true );
00166 
00167 public slots:
00168   void slotMoveMsgToFolder( KMFolder *dest);
00169   void slotTrashMsg();   // move to trash
00170 
00171   virtual void show();
00172   virtual void hide();
00174   void slotCheckMail();
00175 
00180   void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00181 
00183   void folderSelected();
00184 
00186   void folderSelectedUnread( KMFolder* );
00187 
00188   void slotMsgSelected(KMMessage*);
00189   void slotMsgChanged();
00190 
00192   void slotSelectFolder(KMFolder*);
00193   void slotSelectMessage(KMMessage*);
00194 
00195   void slotReplaceMsgByUnencryptedVersion();
00196 
00198   void updateMessageMenu();
00200   void startUpdateMessageActionsTimer();
00202   void updateMessageActions();
00203 
00205   void slotSubscriptionDialog();
00206 
00208   void slotFolderTreeColumnsChanged();
00209 
00211   void clearFilterActions();
00212   void initializeFilterActions();
00213 
00215   void initializeIMAPActions() { initializeIMAPActions( true ); }
00216 
00218   void initializeFolderShortcutActions();
00219 
00221   void slotShortcutChanged( KMFolder *folder );
00222 
00223 signals:
00224   void messagesTransfered( bool );
00225   void captionChangeRequest( const QString & caption );
00226 
00227 protected:
00228   void setupActions();
00229   void createWidgets();
00230   void activatePanners();
00231   void showMsg(KMReaderWin *win, KMMessage *msg);
00232   void updateFileMenu();
00233 
00234   KActionCollection * actionCollection() const { return mActionCollection; }
00235 
00239   KConfig * config();
00240 
00241 protected slots:
00242   void slotCheckOneAccount(int);
00243   void slotMailChecked( bool newMail, bool sendOnCheck,
00244                         const QMap<QString, int> & newInFolder );
00245   void getAccountMenu();
00246   void getTransportMenu();
00247   void slotHelp();
00248   void slotFilter();
00249   void slotPopFilter();
00250   void slotManageSieveScripts();
00251   void slotAddrBook();
00252   void slotImport();
00253   void slotViewChange();
00254   void slotCompose();
00255   void slotPostToML();
00256   void slotModifyFolder();
00257   void slotFolderMailingListProperties();
00258   void slotFolderShortcutCommand();
00259   void slotExpireFolder();
00260   void slotExpireAll();
00261   void slotInvalidateIMAPFolders();
00262   void slotMarkAllAsRead();
00263   void slotRemoveFolder();
00264   void slotEmptyFolder();
00265   void slotCompactFolder();
00266   void slotRefreshFolder();
00267   void slotTroubleshootFolder();
00268   void slotCompactAll();
00269   void slotOverrideHtml();
00270   void slotOverrideHtmlLoadExt();
00271   void slotOverrideThread();
00272   void slotToggleSubjectThreading();
00273   void slotMessageQueuedOrDrafted();
00274   void slotEditMsg();
00275   //void slotTrashMsg();   // move to trash
00276   void slotDeleteMsg( bool confirmDelete = true );  // completely delete message
00277   void slotTrashThread();
00278   void slotDeleteThread( bool confirmDelete = true );  // completely delete thread
00279   void slotUndo();
00280   void slotReadOn();
00281   void slotSaveMsg();
00282   void slotOpenMsg();
00283   void slotSaveAttachments();
00284   void slotJumpToFolder();
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 
00505 #endif
00506 
KDE Home | KDE Accessibility Home | Description of Access Keys