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 *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 
00178   void setupForwardingActionsList();
00179 
00180   KStatusBarLabel* vacationScriptIndicator() const { return mVacationScriptIndicator; }
00181   void updateVactionScriptStatus() { updateVactionScriptStatus( mVacationIndicatorActive ); }
00182 
00183 public slots:
00184   void slotMoveMsgToFolder( KMFolder *dest);
00185   void slotTrashMsg();   // move to trash
00186 
00187   virtual void show();
00188   virtual void hide();
00190   void slotCheckMail();
00191 
00196   void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00197 
00199   void folderSelected();
00200 
00202   void folderSelectedUnread( KMFolder* );
00203 
00204   void slotMsgSelected(KMMessage*);
00205   void slotMsgChanged();
00206 
00208   void slotSelectFolder(KMFolder*);
00209   void slotSelectMessage(KMMessage*);
00210 
00211   void slotReplaceMsgByUnencryptedVersion();
00212 
00214   void updateMessageMenu();
00216   void startUpdateMessageActionsTimer();
00218   void updateMessageActions();
00219 
00221   void slotSubscriptionDialog();
00222 
00224   void slotLocalSubscriptionDialog();
00225 
00227   void slotFolderTreeColumnsChanged();
00228 
00230   void clearFilterActions();
00231   void initializeFilterActions();
00232 
00234   void initializeIMAPActions() { initializeIMAPActions( true ); }
00235 
00237   void initializeFolderShortcutActions();
00238 
00240   void slotShortcutChanged( KMFolder *folder );
00241 
00242   void updateCustomTemplateMenus();
00243   void slotEditVacation();
00244 
00245 signals:
00246   void messagesTransfered( bool );
00247   void captionChangeRequest( const QString & caption );
00248 
00249 protected:
00250   void setupActions();
00251   void createWidgets();
00252   void activatePanners();
00253   void showMsg( KMReaderWin *win, KMMessage *msg );
00254   void updateFileMenu();
00255   void newFromTemplate( KMMessage *msg );
00256 
00257   KActionCollection * actionCollection() const { return mActionCollection; }
00258 
00262   KConfig * config();
00263 
00264 protected slots:
00265   void slotCheckOneAccount(int);
00266   void slotMailChecked( bool newMail, bool sendOnCheck,
00267                         const QMap<QString, int> & newInFolder );
00268   void getAccountMenu();
00269   void getTransportMenu();
00270   void slotHelp();
00271   void slotFilter();
00272   void slotPopFilter();
00273   void slotManageSieveScripts();
00274   void slotAddrBook();
00275   void slotImport();
00276   void slotViewChange();
00277   void slotCompose();
00278   void slotPostToML();
00279   void slotModifyFolder();
00280   void slotFolderMailingListProperties();
00281   void slotFolderShortcutCommand();
00282   void slotExpireFolder();
00283   void slotExpireAll();
00284   void slotInvalidateIMAPFolders();
00285   void slotMarkAllAsRead();
00286   void slotArchiveFolder();
00287   void slotRemoveFolder();
00288   void slotEmptyFolder();
00289   void slotCompactFolder();
00290   void slotRefreshFolder();
00291   void slotTroubleshootFolder();
00292   void slotCompactAll();
00293   void slotOverrideHtml();
00294   void slotOverrideHtmlLoadExt();
00295   void slotOverrideThread();
00296   void slotToggleSubjectThreading();
00297   void slotMessageQueuedOrDrafted();
00298   void slotUseTemplate();
00299   //void slotTrashMsg();   // move to trash
00300   void slotDeleteMsg( bool confirmDelete = true );  // completely delete message
00301   void slotTrashThread();
00302   void slotDeleteThread( bool confirmDelete = true );  // completely delete thread
00303   void slotUndo();
00304   void slotReadOn();
00305   void slotSaveMsg();
00306   void slotOpenMsg();
00307   void slotSaveAttachments();
00308   void slotJumpToFolder();
00309   void slotMoveMsg();
00310   //void slotMoveMsgToFolder( KMFolder *dest);
00311   void slotCopyMsgToFolder( KMFolder *dest);
00312   void slotCopyMsg();
00313   void slotResendMsg();
00314   void slotCheckVacation();
00315   void slotDebugSieve();
00316   void slotStartCertManager();
00317   void slotStartWatchGnuPG();
00318   void slotApplyFilters();
00319   void slotExpandThread();
00320   void slotExpandAllThreads();
00321   void slotCollapseThread();
00322   void slotCollapseAllThreads();
00323   void slotShowMsgSrc();
00324   void slotSetThreadStatusNew();
00325   void slotSetThreadStatusUnread();
00326   void slotSetThreadStatusRead();
00327   void slotSetThreadStatusTodo();
00328   void slotSetThreadStatusFlag();
00329   void slotSetThreadStatusWatched();
00330   void slotSetThreadStatusIgnored();
00331   void slotToggleUnread();
00332   void slotToggleTotalColumn();
00333   void slotToggleSizeColumn();
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 
00393   void slotCustomReplyToMsg( int tid );
00394   void slotCustomReplyAllToMsg( int tid );
00395   void slotForwardInlineMsg();
00396   void slotForwardAttachedMsg();
00397   void slotForwardDigestMsg();
00398   void slotRedirectMsg();
00399   void slotCustomForwardMsg( int tid );
00400   void slotNoQuoteReplyToMsg();
00401   void slotSubjectFilter();
00402   void slotMailingListFilter();
00403   void slotFromFilter();
00404   void slotToFilter();
00405   void slotPrintMsg();
00406   void slotCreateTodo();
00407 
00408   void slotConfigChanged();
00410   void slotFolderRemoved( KMFolder *folder );
00411 
00413   void slotShowBusySplash();
00416   void showOfflinePage();
00417 
00418 private:
00420   QString overrideEncoding() const;
00421 
00422   void initializeIMAPActions( bool setState );
00423 
00427   KMail::ImapAccountBase* findCurrentImapAccountBase();
00428 
00432   QString findCurrentImapPath();
00433 
00439   void setupForwardActions();
00440 
00441   void setupFolderView();
00442 
00443 private slots:
00444   void slotRequestFullSearchFromQuickSearch();
00445   void updateVactionScriptStatus( bool active );
00446 
00447 private:
00448   // Message actions
00449   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00450     *mDeleteThreadAction, *mSaveAsAction, *mUseAction,
00451     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00452     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00453     *mFavoritesCheckMailAction,
00454     *mMoveMsgToFolderAction;
00455   // Composition actions
00456   KAction *mPrintAction,
00457     *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00458     *mRedirectAction;
00459   KActionMenu *mForwardActionMenu;
00460   // Filter actions
00461   KActionMenu *mFilterMenu;
00462   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00463       *mListFilterAction;
00464   KActionMenu *mTemplateMenu;
00465 
00466   // Custom template actions menu
00467   KActionMenu *mCustomReplyActionMenu,
00468               *mCustomReplyAllActionMenu,
00469               *mCustomForwardActionMenu;
00470   // Signal mappers for custom template actions
00471   QSignalMapper *mCustomReplyMapper,
00472                 *mCustomReplyAllMapper,
00473                 *mCustomForwardMapper;
00474 
00475   KActionMenu *mThreadStatusMenu,
00476     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00477   KAction *mMarkThreadAsNewAction;
00478   KAction *mMarkThreadAsReadAction;
00479   KAction *mMarkThreadAsUnreadAction;
00480   KToggleAction *mToggleThreadTodoAction;
00481   KToggleAction *mToggleThreadFlagAction;
00482 
00483   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00484 
00486   KRadioAction* mUnreadColumnToggle;
00487   KRadioAction* mUnreadTextToggle;
00488   KToggleAction* mTotalColumnToggle;
00489   KToggleAction* mSizeColumnToggle;
00490 
00491   KToggleAction *mToggleShowQuickSearchAction;
00492 
00493   KMFolderTree *mFolderTree;
00494   KMail::FavoriteFolderView *mFavoriteFolderView;
00495   QWidget      *mFolderView;
00496   QSplitter    *mFolderViewParent;
00497   KMReaderWin  *mMsgView;
00498   QSplitter    *mPanner1, *mPanner2;
00499   QSplitter    *mFolderViewSplitter;
00500   KMHeaders    *mHeaders;
00501   QVBox        *mSearchAndHeaders;
00502   KToolBar     *mSearchToolBar;
00503   KMail::HeaderListQuickSearch *mQuickSearchLine;
00504   QGuardedPtr<KMFolder> mFolder;
00505   KMFolder     *mTemplateFolder;
00506   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00507   KAction       *mlistFilterAction;
00508   bool      mIntegrated;
00509   bool          mBeepOnNew;
00510   bool          mConfirmEmpty;
00511   QString       mStartupFolder;
00512   int       mMessageStatusId;
00513   QValueList<int> mPanner1Sep, mPanner2Sep;
00514   KURL          mUrlCurrent;
00515   QPopupMenu    *mActMenu;
00516   QPopupMenu    *mSendMenu;
00517   QPopupMenu    *mFileMenu;
00518 
00519   bool mLongFolderList;
00520 
00521   bool      mStartupDone;
00522   KMMenuToFolder mMenuToFolder;
00523   int copyId, moveId, htmlId, threadId;
00524   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00525        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00526        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00527   bool mEnableFavoriteFolderView;
00528 
00529 //  QPopupMenu *mMessageMenu;
00530   KMail::SearchWindow *mSearchWin;
00531 
00532   KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00533       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00534       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00535       *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00536       *mRemoveDuplicatesAction, *mArchiveFolderAction;
00537   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00538   KToggleAction *mThreadBySubjectAction;
00539   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00540 
00541   QTimer *menutimer;
00542   QTimer *mShowBusySplashTimer;
00543 
00544   QGuardedPtr<KMail::Vacation> mVacation;
00545 #if !defined(NDEBUG)
00546   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00547 #endif
00548   KActionCollection *mActionCollection;
00549   KActionSeparator  *mToolbarActionSeparator;
00550   QVBoxLayout *mTopLayout;
00551   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00552   QPtrList<KAction> mFilterMenuActions;
00553   QPtrList<KAction> mFilterTBarActions;
00554   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00555   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00556   QGuardedPtr <KMail::FolderJob> mJob;
00557 
00558   QValueVector<QString> mCustomTemplates;
00559   QPtrList<KAction> mCustomTemplateActions;
00560 
00561   KMSystemTray  *mSystemTray;
00562   KConfig *mConfig;
00563   KXMLGUIClient *mGUIClient;
00564 
00565   KMail::MessageActions *mMsgActions;
00566 
00567   static QValueList<KMMainWidget*>* s_mainWidgetList;
00568 
00569   KStatusBarLabel *mVacationScriptIndicator;
00570   bool mVacationIndicatorActive;
00571 };
00572 
00573 #endif
00574 
KDE Home | KDE Accessibility Home | Description of Access Keys