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 "messageactions.h"
00034 #include <kaction.h>
00035 
00036 class QVBoxLayout;
00037 class QSplitter;
00038 class QSignalMapper;
00039 
00040 class KActionMenu;
00041 class KActionCollection;
00042 class KConfig;
00043 class KRadioAction;
00044 class KToggleAction;
00045 class KMenuBar;
00046 class KStatusBarLabel;
00047 
00048 class KMFolder;
00049 class KMFolderDir;
00050 class KMFolderTree;
00051 class KMFolderTreeItem;
00052 class KMCommand;
00053 class KMMetaFilterActionCommand;
00054 class FolderShortcutCommand;
00055 class KMMessage;
00056 class KMFolder;
00057 class KMAccount;
00058 class KMSystemTray;
00059 class KMHeaders;
00060 
00061 template <typename T> class QValueList;
00062 template <typename T, typename S> class QMap;
00063 template <typename T> class QGuardedPtr;
00064 
00065 namespace KIO {
00066   class Job;
00067 }
00068 
00069 namespace KMail {
00070   class Vacation;
00071   class SieveDebugDialog;
00072   class FolderJob;
00073   class HeaderListQuickSearch;
00074   class SearchWindow;
00075   class ImapAccountBase;
00076   class FavoriteFolderView;
00077 }
00078 
00079 typedef QMap<int,KMFolder*> KMMenuToFolder;
00080 
00081 
00082 class KDE_EXPORT KMMainWidget : public QWidget
00083 {
00084   Q_OBJECT
00085 
00086 public:
00087   KMMainWidget(QWidget *parent, const char *name,
00088                KXMLGUIClient *aGUIClient,
00089                KActionCollection *actionCollection,
00090          KConfig*config = KMKernel::config() );
00091   virtual ~KMMainWidget();
00092   void destruct();
00093 
00095   virtual void readPreConfig(void);
00096 
00098   virtual void readFolderConfig(void);
00099 
00101   virtual void writeFolderConfig(void);
00102 
00104   virtual void readConfig(void);
00105 
00107   virtual void writeConfig(void);
00108 
00110   KMReaderWin* messageView(void) const { return mMsgView; }
00111   KMFolderTree* folderTree(void) const  { return mFolderTree; }
00112   KMail::FavoriteFolderView *favoriteFolderView() const { return mFavoriteFolderView; }
00113 
00114   static void cleanup();
00115 
00116   KAction *action( const char *name ) { return mActionCollection->action( name ); }
00117   KActionMenu *customReplyAction() const { return mCustomReplyActionMenu; }
00118   KActionMenu *customReplyAllAction() const { return mCustomReplyAllActionMenu; }
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   KActionMenu *filterMenu() const { return mFilterMenu; }
00126   KAction *printAction() const { return mPrintAction; }
00127   KAction *trashAction() const { return mTrashAction; }
00128   KAction *deleteAction() const { return mDeleteAction; }
00129   KAction *trashThreadAction() const { return mTrashThreadAction; }
00130   KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00131   KAction *saveAsAction() const { return mSaveAsAction; }
00132   KAction *editAction() const { return mMsgActions->editAction(); }
00133   KAction *useAction() const { return mUseAction; }
00134   KAction *sendAgainAction() const { return mSendAgainAction; }
00135   KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00136   KAction *findInMessageAction() const { return mFindInMessageAction; }
00137   KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00138   KAction *openAction() const { return mOpenAction; }
00139   KAction *viewSourceAction() const { return mViewSourceAction; }
00140   KMail::MessageActions *messageActions() const { return mMsgActions; }
00141 
00142   KActionMenu *statusMenu()  const{ return mMsgActions->messageStatusMenu(); }
00143   KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00144   KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00145   KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00146   KActionMenu *decCopyActionMenu() const { return mDecCopyActionMenu; }
00147   KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00148 
00149   KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00150   KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00151 
00152   KMHeaders *headers() const { return mHeaders; }
00153   void toggleSystemTray();
00154 
00155   void updateListFilterAction();
00156 
00159   static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00160 
00161   KMSystemTray *systray() const;
00162 
00165   bool shortcutIsValid( const KShortcut& ) const;
00166 
00167 
00168   void modifyFolder( KMFolderTreeItem* folderItem );
00169 
00174   void setAccelsEnabled( bool enabled = true );
00175 
00179   void setupForwardingActionsList();
00180 
00181   KStatusBarLabel* vacationScriptIndicator() const { return mVacationScriptIndicator; }
00182   void updateVactionScriptStatus() { updateVactionScriptStatus( mVacationIndicatorActive ); }
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 * );
00209   void slotMsgActivated( KMMessage * );
00210 
00211   void slotMsgChanged();
00212 
00214   void slotSelectFolder(KMFolder*);
00215   void slotSelectMessage(KMMessage*);
00216 
00217   void slotReplaceMsgByUnencryptedVersion();
00218 
00220   void updateMessageMenu();
00222   void startUpdateMessageActionsTimer();
00224   void updateMessageActions();
00225 
00227   void slotSubscriptionDialog();
00228 
00230   void slotLocalSubscriptionDialog();
00231 
00233   void slotFolderTreeColumnsChanged();
00234 
00236   void clearFilterActions();
00237   void initializeFilterActions();
00238 
00240   void initializeIMAPActions() { initializeIMAPActions( true ); }
00241 
00243   void initializeFolderShortcutActions();
00244 
00246   void slotShortcutChanged( KMFolder *folder );
00247 
00248   void updateCustomTemplateMenus();
00249   void slotEditVacation();
00250 
00251 signals:
00252   void messagesTransfered( bool );
00253   void captionChangeRequest( const QString & caption );
00254 
00255 protected:
00256   void setupActions();
00257   void createWidgets();
00258   void activatePanners();
00259   void showMsg( KMReaderWin *win, KMMessage *msg );
00260   void updateFileMenu();
00261   void newFromTemplate( KMMessage *msg );
00262 
00263   KActionCollection * actionCollection() const { return mActionCollection; }
00264 
00268   KConfig * config();
00269 
00270 protected slots:
00271   void slotCheckOneAccount(int);
00272   void slotMailChecked( bool newMail, bool sendOnCheck,
00273                         const QMap<QString, int> & newInFolder );
00274   void getAccountMenu();
00275   void getTransportMenu();
00276   void slotHelp();
00277   void slotFilter();
00278   void slotPopFilter();
00279   void slotManageSieveScripts();
00280   void slotAddrBook();
00281   void slotImport();
00282   void slotViewChange();
00283   void slotCompose();
00284   void slotPostToML();
00285   void slotModifyFolder();
00286   void slotFolderMailingListProperties();
00287   void slotFolderShortcutCommand();
00288   void slotExpireFolder();
00289   void slotExpireAll();
00290   void slotInvalidateIMAPFolders();
00291   void slotMarkAllAsRead();
00292   void slotArchiveFolder();
00293   void slotRemoveFolder();
00294   void slotEmptyFolder();
00295   void slotCompactFolder();
00296   void slotRefreshFolder();
00297   void slotTroubleshootFolder();
00298   void slotCompactAll();
00299   void slotOverrideHtml();
00300   void slotOverrideHtmlLoadExt();
00301   void slotOverrideThread();
00302   void slotToggleSubjectThreading();
00303   void slotMessageQueuedOrDrafted();
00304   void slotUseTemplate();
00305   //void slotTrashMsg();   // move to trash
00306   void slotDeleteMsg( bool confirmDelete = true );  // completely delete message
00307   void slotTrashThread();
00308   void slotDeleteThread( bool confirmDelete = true );  // completely delete thread
00309   void slotUndo();
00310   void slotReadOn();
00311   void slotSaveMsg();
00312   void slotOpenMsg();
00313   void slotSaveAttachments();
00314   void slotJumpToFolder();
00315   void slotMoveMsg();
00316   //void slotMoveMsgToFolder( KMFolder *dest);
00317   void slotCopyMsgToFolder( KMFolder *dest);
00318   void slotCopyMsg();
00319   void slotResendMsg();
00320   void slotCheckVacation();
00321   void slotDebugSieve();
00322   void slotStartCertManager();
00323   void slotStartWatchGnuPG();
00324   void slotApplyFilters();
00325   void slotExpandThread();
00326   void slotExpandAllThreads();
00327   void slotCollapseThread();
00328   void slotCollapseAllThreads();
00329   void slotShowMsgSrc();
00330   void slotSetThreadStatusNew();
00331   void slotSetThreadStatusUnread();
00332   void slotSetThreadStatusRead();
00333   void slotSetThreadStatusTodo();
00334   void slotSetThreadStatusFlag();
00335   void slotSetThreadStatusWatched();
00336   void slotSetThreadStatusIgnored();
00337   void slotToggleUnread();
00338   void slotToggleTotalColumn();
00339   void slotToggleSizeColumn();
00340   void slotSendQueued();
00341   void slotSendQueuedVia( int item );
00342   void slotOnlineStatus();
00343   void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00344   void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00345   void slotMarkAll();
00346   void slotMemInfo();
00347   void slotSearch();
00348   void slotSearchClosed();
00349   void slotFind();
00350   void slotIntro();
00351   void slotShowStartupFolder();
00353   void slotShowTip();
00354   void slotAntiSpamWizard();
00355   void slotAntiVirusWizard();
00356   void slotFilterLogViewer();
00357 
00359   void slotNextMessage();
00360   void slotNextUnreadMessage();
00361   void slotNextImportantMessage();
00362   void slotNextUnreadFolder();
00363   void slotPrevMessage();
00364   void slotPrevUnreadMessage();
00365   void slotPrevImportantMessage();
00366   void slotPrevUnreadFolder();
00367 
00369   void slotDisplayCurrentMessage();
00370 
00371   void slotShowNewFromTemplate();
00372   void slotNewFromTemplate( int );
00373 
00375   void slotUpdateUndo();
00376 
00378   virtual void moveSelectedToFolder( int menuId );
00380   virtual void copySelectedToFolder( int menuId );
00383   virtual void decryptedCopySelectedToFolder( int menuId );
00385   void updateFolderMenu();
00388   void updateMarkAsReadAction();
00389 
00391   void slotToggleShowQuickSearch();
00392 
00394   void slotEditNotifications();
00395   void slotEditKeys();
00396 
00398   void slotChangeCaption(QListViewItem*);
00399   void removeDuplicates();
00400 
00401   void slotCustomReplyToMsg( int tid );
00402   void slotCustomReplyAllToMsg( int tid );
00403   void slotForwardInlineMsg();
00404   void slotForwardAttachedMsg();
00405   void slotForwardDigestMsg();
00406   void slotRedirectMsg();
00407   void slotCustomForwardMsg( int tid );
00408   void slotNoQuoteReplyToMsg();
00409   void slotSubjectFilter();
00410   void slotMailingListFilter();
00411   void slotFromFilter();
00412   void slotToFilter();
00413   void slotPrintMsg();
00414   void slotCreateTodo();
00415 
00416   void slotConfigChanged();
00418   void slotFolderRemoved( KMFolder *folder );
00419 
00421   void slotShowBusySplash();
00424   void showOfflinePage();
00425 
00426 private:
00428   QString overrideEncoding() const;
00429 
00430   void initializeIMAPActions( bool setState );
00431 
00435   KMail::ImapAccountBase* findCurrentImapAccountBase();
00436 
00440   QString findCurrentImapPath();
00441 
00447   void setupForwardActions();
00448 
00449   void setupFolderView();
00450 
00451   void removeFolder(KMFolder *folder);
00452   void removeFolders(const QValueList<QGuardedPtr<KMFolder> > &folders);
00453 
00454 private slots:
00455   void slotRequestFullSearchFromQuickSearch();
00456   void updateVactionScriptStatus( bool active );
00457 
00458 private:
00459   // Message actions
00460   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00461     *mDeleteThreadAction, *mSaveAsAction, *mUseAction,
00462     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00463     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00464     *mFavoritesCheckMailAction,
00465     *mMoveMsgToFolderAction;
00466   // Composition actions
00467   KAction *mPrintAction,
00468     *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00469     *mRedirectAction;
00470   KActionMenu *mForwardActionMenu;
00471   // Filter actions
00472   KActionMenu *mFilterMenu;
00473   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00474       *mListFilterAction;
00475   KActionMenu *mTemplateMenu;
00476 
00477   // Custom template actions menu
00478   KActionMenu *mCustomReplyActionMenu,
00479               *mCustomReplyAllActionMenu,
00480               *mCustomForwardActionMenu;
00481   // Signal mappers for custom template actions
00482   QSignalMapper *mCustomReplyMapper,
00483                 *mCustomReplyAllMapper,
00484                 *mCustomForwardMapper;
00485 
00486   KActionMenu *mThreadStatusMenu,
00487     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu,
00488     *mDecCopyActionMenu;
00489   KAction *mMarkThreadAsNewAction;
00490   KAction *mMarkThreadAsReadAction;
00491   KAction *mMarkThreadAsUnreadAction;
00492   KToggleAction *mToggleThreadTodoAction;
00493   KToggleAction *mToggleThreadFlagAction;
00494 
00495   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00496 
00498   KRadioAction* mUnreadColumnToggle;
00499   KRadioAction* mUnreadTextToggle;
00500   KToggleAction* mTotalColumnToggle;
00501   KToggleAction* mSizeColumnToggle;
00502 
00503   KToggleAction *mToggleShowQuickSearchAction;
00504 
00505   KMFolderTree *mFolderTree;
00506   KMail::FavoriteFolderView *mFavoriteFolderView;
00507   QWidget      *mFolderView;
00508   QSplitter    *mFolderViewParent;
00509   KMReaderWin  *mMsgView;
00510   QSplitter    *mPanner1, *mPanner2;
00511   QSplitter    *mFolderViewSplitter;
00512   KMHeaders    *mHeaders;
00513   QVBox        *mSearchAndHeaders;
00514   KToolBar     *mSearchToolBar;
00515   KMail::HeaderListQuickSearch *mQuickSearchLine;
00516   QGuardedPtr<KMFolder> mFolder;
00517   KMFolder     *mTemplateFolder;
00518   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00519   KAction       *mlistFilterAction;
00520   bool      mIntegrated;
00521   bool          mBeepOnNew;
00522   bool          mConfirmEmpty;
00523   QString       mStartupFolder;
00524   int       mMessageStatusId;
00525   QValueList<int> mPanner1Sep, mPanner2Sep;
00526   KURL          mUrlCurrent;
00527   QPopupMenu    *mActMenu;
00528   QPopupMenu    *mSendMenu;
00529   QPopupMenu    *mFileMenu;
00530 
00531   bool mLongFolderList;
00532 
00533   bool      mStartupDone;
00534   KMMenuToFolder mMenuToFolder;
00535   int copyId, moveId, htmlId, threadId;
00536   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00537        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00538        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00539   bool mEnableFavoriteFolderView;
00540 
00541 //  QPopupMenu *mMessageMenu;
00542   KMail::SearchWindow *mSearchWin;
00543 
00544   KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00545       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00546       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00547       *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00548       *mRemoveDuplicatesAction, *mArchiveFolderAction;
00549   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00550   KToggleAction *mThreadBySubjectAction;
00551   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00552 
00553   QTimer *menutimer;
00554   QTimer *mShowBusySplashTimer;
00555 
00556   QGuardedPtr<KMail::Vacation> mVacation;
00557 #if !defined(NDEBUG)
00558   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00559 #endif
00560   KActionCollection *mActionCollection;
00561   KActionSeparator  *mToolbarActionSeparator;
00562   QVBoxLayout *mTopLayout;
00563   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00564   QPtrList<KAction> mFilterMenuActions;
00565   QPtrList<KAction> mFilterTBarActions;
00566   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00567   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00568   QGuardedPtr <KMail::FolderJob> mJob;
00569 
00570   QValueVector<QString> mCustomTemplates;
00571   QPtrList<KAction> mCustomTemplateActions;
00572 
00573   KMSystemTray  *mSystemTray;
00574   KConfig *mConfig;
00575   KXMLGUIClient *mGUIClient;
00576 
00577   KMail::MessageActions *mMsgActions;
00578 
00579   static QValueList<KMMainWidget*>* s_mainWidgetList;
00580 
00581   KStatusBarLabel *mVacationScriptIndicator;
00582   bool mVacationIndicatorActive;
00583 };
00584 
00585 #endif
00586 
KDE Home | KDE Accessibility Home | Description of Access Keys