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 * );
00208   void slotMsgActivated( KMMessage * );
00209 
00210   void slotMsgChanged();
00211 
00213   void slotSelectFolder(KMFolder*);
00214   void slotSelectMessage(KMMessage*);
00215 
00216   void slotReplaceMsgByUnencryptedVersion();
00217 
00219   void updateMessageMenu();
00221   void startUpdateMessageActionsTimer();
00223   void updateMessageActions();
00224 
00226   void slotSubscriptionDialog();
00227 
00229   void slotLocalSubscriptionDialog();
00230 
00232   void slotFolderTreeColumnsChanged();
00233 
00235   void clearFilterActions();
00236   void initializeFilterActions();
00237 
00239   void initializeIMAPActions() { initializeIMAPActions( true ); }
00240 
00242   void initializeFolderShortcutActions();
00243 
00245   void slotShortcutChanged( KMFolder *folder );
00246 
00247   void updateCustomTemplateMenus();
00248   void slotEditVacation();
00249 
00250 signals:
00251   void messagesTransfered( bool );
00252   void captionChangeRequest( const QString & caption );
00253 
00254 protected:
00255   void setupActions();
00256   void createWidgets();
00257   void activatePanners();
00258   void showMsg( KMReaderWin *win, KMMessage *msg );
00259   void updateFileMenu();
00260   void newFromTemplate( KMMessage *msg );
00261 
00262   KActionCollection * actionCollection() const { return mActionCollection; }
00263 
00267   KConfig * config();
00268 
00269 protected slots:
00270   void slotCheckOneAccount(int);
00271   void slotMailChecked( bool newMail, bool sendOnCheck,
00272                         const QMap<QString, int> & newInFolder );
00273   void getAccountMenu();
00274   void getTransportMenu();
00275   void slotHelp();
00276   void slotFilter();
00277   void slotPopFilter();
00278   void slotManageSieveScripts();
00279   void slotAddrBook();
00280   void slotImport();
00281   void slotViewChange();
00282   void slotCompose();
00283   void slotPostToML();
00284   void slotModifyFolder();
00285   void slotFolderMailingListProperties();
00286   void slotFolderShortcutCommand();
00287   void slotExpireFolder();
00288   void slotExpireAll();
00289   void slotInvalidateIMAPFolders();
00290   void slotMarkAllAsRead();
00291   void slotArchiveFolder();
00292   void slotRemoveFolder();
00293   void slotEmptyFolder();
00294   void slotCompactFolder();
00295   void slotRefreshFolder();
00296   void slotTroubleshootFolder();
00297   void slotCompactAll();
00298   void slotOverrideHtml();
00299   void slotOverrideHtmlLoadExt();
00300   void slotOverrideThread();
00301   void slotToggleSubjectThreading();
00302   void slotMessageQueuedOrDrafted();
00303   void slotUseTemplate();
00304   //void slotTrashMsg();   // move to trash
00305   void slotDeleteMsg( bool confirmDelete = true );  // completely delete message
00306   void slotTrashThread();
00307   void slotDeleteThread( bool confirmDelete = true );  // completely delete thread
00308   void slotUndo();
00309   void slotReadOn();
00310   void slotSaveMsg();
00311   void slotOpenMsg();
00312   void slotSaveAttachments();
00313   void slotJumpToFolder();
00314   void slotMoveMsg();
00315   //void slotMoveMsgToFolder( KMFolder *dest);
00316   void slotCopyMsgToFolder( KMFolder *dest);
00317   void slotCopyMsg();
00318   void slotResendMsg();
00319   void slotCheckVacation();
00320   void slotDebugSieve();
00321   void slotStartCertManager();
00322   void slotStartWatchGnuPG();
00323   void slotApplyFilters();
00324   void slotExpandThread();
00325   void slotExpandAllThreads();
00326   void slotCollapseThread();
00327   void slotCollapseAllThreads();
00328   void slotShowMsgSrc();
00329   void slotSetThreadStatusNew();
00330   void slotSetThreadStatusUnread();
00331   void slotSetThreadStatusRead();
00332   void slotSetThreadStatusTodo();
00333   void slotSetThreadStatusFlag();
00334   void slotSetThreadStatusWatched();
00335   void slotSetThreadStatusIgnored();
00336   void slotToggleUnread();
00337   void slotToggleTotalColumn();
00338   void slotToggleSizeColumn();
00339   void slotSendQueued();
00340   void slotSendQueuedVia( int item );
00341   void slotOnlineStatus();
00342   void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00343   void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00344   void slotMarkAll();
00345   void slotMemInfo();
00346   void slotSearch();
00347   void slotSearchClosed();
00348   void slotFind();
00349   void slotIntro();
00350   void slotShowStartupFolder();
00352   void slotShowTip();
00353   void slotAntiSpamWizard();
00354   void slotAntiVirusWizard();
00355   void slotFilterLogViewer();
00356 
00358   void slotNextMessage();
00359   void slotNextUnreadMessage();
00360   void slotNextImportantMessage();
00361   void slotNextUnreadFolder();
00362   void slotPrevMessage();
00363   void slotPrevUnreadMessage();
00364   void slotPrevImportantMessage();
00365   void slotPrevUnreadFolder();
00366 
00368   void slotDisplayCurrentMessage();
00369 
00370   void slotShowNewFromTemplate();
00371   void slotNewFromTemplate( int );
00372 
00374   void slotUpdateUndo();
00375 
00377   virtual void moveSelectedToFolder( int menuId );
00379   virtual void copySelectedToFolder( int menuId );
00381   void updateFolderMenu();
00384   void updateMarkAsReadAction();
00385 
00387   void slotToggleShowQuickSearch();
00388 
00390   void slotEditNotifications();
00391   void slotEditKeys();
00392 
00394   void slotChangeCaption(QListViewItem*);
00395   void removeDuplicates();
00396 
00397   void slotCustomReplyToMsg( int tid );
00398   void slotCustomReplyAllToMsg( int tid );
00399   void slotForwardInlineMsg();
00400   void slotForwardAttachedMsg();
00401   void slotForwardDigestMsg();
00402   void slotRedirectMsg();
00403   void slotCustomForwardMsg( int tid );
00404   void slotNoQuoteReplyToMsg();
00405   void slotSubjectFilter();
00406   void slotMailingListFilter();
00407   void slotFromFilter();
00408   void slotToFilter();
00409   void slotPrintMsg();
00410   void slotCreateTodo();
00411 
00412   void slotConfigChanged();
00414   void slotFolderRemoved( KMFolder *folder );
00415 
00417   void slotShowBusySplash();
00420   void showOfflinePage();
00421 
00422 private:
00424   QString overrideEncoding() const;
00425 
00426   void initializeIMAPActions( bool setState );
00427 
00431   KMail::ImapAccountBase* findCurrentImapAccountBase();
00432 
00436   QString findCurrentImapPath();
00437 
00443   void setupForwardActions();
00444 
00445   void setupFolderView();
00446 
00447   void removeFolder(KMFolder *folder);
00448   void removeFolders(const QValueList<QGuardedPtr<KMFolder> > &folders);
00449 
00450 private slots:
00451   void slotRequestFullSearchFromQuickSearch();
00452   void updateVactionScriptStatus( bool active );
00453 
00454 private:
00455   // Message actions
00456   KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00457     *mDeleteThreadAction, *mSaveAsAction, *mUseAction,
00458     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00459     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00460     *mFavoritesCheckMailAction,
00461     *mMoveMsgToFolderAction;
00462   // Composition actions
00463   KAction *mPrintAction,
00464     *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00465     *mRedirectAction;
00466   KActionMenu *mForwardActionMenu;
00467   // Filter actions
00468   KActionMenu *mFilterMenu;
00469   KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00470       *mListFilterAction;
00471   KActionMenu *mTemplateMenu;
00472 
00473   // Custom template actions menu
00474   KActionMenu *mCustomReplyActionMenu,
00475               *mCustomReplyAllActionMenu,
00476               *mCustomForwardActionMenu;
00477   // Signal mappers for custom template actions
00478   QSignalMapper *mCustomReplyMapper,
00479                 *mCustomReplyAllMapper,
00480                 *mCustomForwardMapper;
00481 
00482   KActionMenu *mThreadStatusMenu,
00483     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00484   KAction *mMarkThreadAsNewAction;
00485   KAction *mMarkThreadAsReadAction;
00486   KAction *mMarkThreadAsUnreadAction;
00487   KToggleAction *mToggleThreadTodoAction;
00488   KToggleAction *mToggleThreadFlagAction;
00489 
00490   KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00491 
00493   KRadioAction* mUnreadColumnToggle;
00494   KRadioAction* mUnreadTextToggle;
00495   KToggleAction* mTotalColumnToggle;
00496   KToggleAction* mSizeColumnToggle;
00497 
00498   KToggleAction *mToggleShowQuickSearchAction;
00499 
00500   KMFolderTree *mFolderTree;
00501   KMail::FavoriteFolderView *mFavoriteFolderView;
00502   QWidget      *mFolderView;
00503   QSplitter    *mFolderViewParent;
00504   KMReaderWin  *mMsgView;
00505   QSplitter    *mPanner1, *mPanner2;
00506   QSplitter    *mFolderViewSplitter;
00507   KMHeaders    *mHeaders;
00508   QVBox        *mSearchAndHeaders;
00509   KToolBar     *mSearchToolBar;
00510   KMail::HeaderListQuickSearch *mQuickSearchLine;
00511   QGuardedPtr<KMFolder> mFolder;
00512   KMFolder     *mTemplateFolder;
00513   QPopupMenu   *mViewMenu, *mBodyPartsMenu;
00514   KAction       *mlistFilterAction;
00515   bool      mIntegrated;
00516   bool          mBeepOnNew;
00517   bool          mConfirmEmpty;
00518   QString       mStartupFolder;
00519   int       mMessageStatusId;
00520   QValueList<int> mPanner1Sep, mPanner2Sep;
00521   KURL          mUrlCurrent;
00522   QPopupMenu    *mActMenu;
00523   QPopupMenu    *mSendMenu;
00524   QPopupMenu    *mFileMenu;
00525 
00526   bool mLongFolderList;
00527 
00528   bool      mStartupDone;
00529   KMMenuToFolder mMenuToFolder;
00530   int copyId, moveId, htmlId, threadId;
00531   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00532        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00533        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00534   bool mEnableFavoriteFolderView;
00535 
00536 //  QPopupMenu *mMessageMenu;
00537   KMail::SearchWindow *mSearchWin;
00538 
00539   KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00540       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00541       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00542       *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00543       *mRemoveDuplicatesAction, *mArchiveFolderAction;
00544   KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00545   KToggleAction *mThreadBySubjectAction;
00546   KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00547 
00548   QTimer *menutimer;
00549   QTimer *mShowBusySplashTimer;
00550 
00551   QGuardedPtr<KMail::Vacation> mVacation;
00552 #if !defined(NDEBUG)
00553   QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00554 #endif
00555   KActionCollection *mActionCollection;
00556   KActionSeparator  *mToolbarActionSeparator;
00557   QVBoxLayout *mTopLayout;
00558   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00559   QPtrList<KAction> mFilterMenuActions;
00560   QPtrList<KAction> mFilterTBarActions;
00561   QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00562   QDict<FolderShortcutCommand> mFolderShortcutCommands;
00563   QGuardedPtr <KMail::FolderJob> mJob;
00564 
00565   QValueVector<QString> mCustomTemplates;
00566   QPtrList<KAction> mCustomTemplateActions;
00567 
00568   KMSystemTray  *mSystemTray;
00569   KConfig *mConfig;
00570   KXMLGUIClient *mGUIClient;
00571 
00572   KMail::MessageActions *mMsgActions;
00573 
00574   static QValueList<KMMainWidget*>* s_mainWidgetList;
00575 
00576   KStatusBarLabel *mVacationScriptIndicator;
00577   bool mVacationIndicatorActive;
00578 };
00579 
00580 #endif
00581 
KDE Home | KDE Accessibility Home | Description of Access Keys