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 <tqguardedptr.h>
00027 #include <tqlistview.h>
00028 #include <tqvbox.h>
00029 #include <tqvaluevector.h>
00030 
00031 #include "kmreaderwin.h" //for inline actions
00032 #include "kmkernel.h" // for access to config
00033 #include "messageactions.h"
00034 #include <tdeaction.h>
00035 
00036 class TQVBoxLayout;
00037 class TQSplitter;
00038 class TQSignalMapper;
00039 
00040 class TDEActionMenu;
00041 class TDEActionCollection;
00042 class TDEConfig;
00043 class TDERadioAction;
00044 class TDEToggleAction;
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 TQValueList;
00062 template <typename T, typename S> class TQMap;
00063 template <typename T> class TQGuardedPtr;
00064 
00065 namespace TDEIO {
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 TQMap<int,KMFolder*> KMMenuToFolder;
00080 
00081 
00082 class KDE_EXPORT KMMainWidget : public TQWidget
00083 {
00084   Q_OBJECT
00085   
00086 
00087 public:
00088   KMMainWidget(TQWidget *parent, const char *name,
00089                KXMLGUIClient *aGUIClient,
00090                TDEActionCollection *actionCollection,
00091          TDEConfig*config = KMKernel::config() );
00092   virtual ~KMMainWidget();
00093   void destruct();
00094 
00096   virtual void readPreConfig(void);
00097 
00099   virtual void readFolderConfig(void);
00100 
00102   virtual void writeFolderConfig(void);
00103 
00105   virtual void readConfig(void);
00106 
00108   virtual void writeConfig(void);
00109 
00111   KMReaderWin* messageView(void) const { return mMsgView; }
00112   KMFolderTree* folderTree(void) const  { return mFolderTree; }
00113   KMail::FavoriteFolderView *favoriteFolderView() const { return mFavoriteFolderView; }
00114 
00115   static void cleanup();
00116 
00117   TDEAction *action( const char *name ) { return mActionCollection->action( name ); }
00118   TDEActionMenu *customReplyAction() const { return mCustomReplyActionMenu; }
00119   TDEActionMenu *customReplyAllAction() const { return mCustomReplyAllActionMenu; }
00120   TDEActionMenu *forwardMenu() const { return mForwardActionMenu; }
00121   TDEAction *forwardInlineAction() const { return mForwardInlineAction; }
00122   TDEAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00123   TDEAction *forwardDigestAction() const { return mForwardDigestAction; }
00124   TDEAction *redirectAction() const { return mRedirectAction; }
00125   TDEActionMenu *customForwardAction() const { return mCustomForwardActionMenu; }
00126   TDEActionMenu *filterMenu() const { return mFilterMenu; }
00127   TDEAction *printAction() const { return mPrintAction; }
00128   TDEAction *trashAction() const { return mTrashAction; }
00129   TDEAction *deleteAction() const { return mDeleteAction; }
00130   TDEAction *trashThreadAction() const { return mTrashThreadAction; }
00131   TDEAction *deleteThreadAction() const { return mDeleteThreadAction; }
00132   TDEAction *saveAsAction() const { return mSaveAsAction; }
00133   TDEAction *editAction() const { return mMsgActions->editAction(); }
00134   TDEAction *useAction() const { return mUseAction; }
00135   TDEAction *sendAgainAction() const { return mSendAgainAction; }
00136   TDEAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00137   TDEAction *findInMessageAction() const { return mFindInMessageAction; }
00138   TDEAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00139   TDEAction *openAction() const { return mOpenAction; }
00140   TDEAction *viewSourceAction() const { return mViewSourceAction; }
00141   KMail::MessageActions *messageActions() const { return mMsgActions; }
00142 
00143   TDEActionMenu *statusMenu()  const{ return mMsgActions->messageStatusMenu(); }
00144   TDEActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00145   TDEActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00146   TDEActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00147   TDEActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00148 
00149   TDEToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00150   TDEToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00151 
00152   KMHeaders *headers() const { return mHeaders; }
00153   void toggleSystemTray();
00154 
00155   void updateListFilterAction();
00156 
00159   static const TQValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00160 
00161   KMSystemTray *systray() const;
00162 
00165   bool shortcutIsValid( const TDEShortcut& ) 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 updateVactionScripStatus() { updateVactionScripStatus( 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 TQString & 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   TDEActionCollection * actionCollection() const { return mActionCollection; }
00264 
00268   TDEConfig * config();
00269 
00270 protected slots:
00271   void slotCheckOneAccount(int);
00272   void slotMailChecked( bool newMail, bool sendOnCheck,
00273                         const TQMap<TQString, 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 TQPoint&);
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 );
00382   void updateFolderMenu();
00385   void updateMarkAsReadAction();
00386 
00388   void slotToggleShowQuickSearch();
00389 
00391   void slotEditNotifications();
00392   void slotEditKeys();
00393 
00395   void slotChangeCaption(TQListViewItem*);
00396   void removeDuplicates();
00397 
00398   void slotCustomReplyToMsg( int tid );
00399   void slotCustomReplyAllToMsg( int tid );
00400   void slotForwardInlineMsg();
00401   void slotForwardAttachedMsg();
00402   void slotForwardDigestMsg();
00403   void slotRedirectMsg();
00404   void slotCustomForwardMsg( int tid );
00405   void slotNoQuoteReplyToMsg();
00406   void slotSubjectFilter();
00407   void slotMailingListFilter();
00408   void slotFromFilter();
00409   void slotToFilter();
00410   void slotPrintMsg();
00411   void slotCreateTodo();
00412 
00413   void slotConfigChanged();
00415   void slotFolderRemoved( KMFolder *folder );
00416 
00418   void slotShowBusySplash();
00421   void showOfflinePage();
00422 
00423 private:
00425   TQString overrideEncoding() const;
00426 
00427   void initializeIMAPActions( bool setState );
00428 
00432   KMail::ImapAccountBase* findCurrentImapAccountBase();
00433 
00437   TQString findCurrentImapPath();
00438 
00444   void setupForwardActions();
00445 
00446   void setupFolderView();
00447 
00448 private slots:
00449   void slotRequestFullSearchFromQuickSearch();
00450   void updateVactionScripStatus( bool active );
00451 
00452 private:
00453   // Message actions
00454   TDEAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00455     *mDeleteThreadAction, *mSaveAsAction, *mUseAction,
00456     *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00457     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00458     *mFavoritesCheckMailAction,
00459     *mMoveMsgToFolderAction;
00460   // Composition actions
00461   TDEAction *mPrintAction,
00462     *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00463     *mRedirectAction;
00464   TDEActionMenu *mForwardActionMenu;
00465   // Filter actions
00466   TDEActionMenu *mFilterMenu;
00467   TDEAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00468       *mListFilterAction;
00469   TDEActionMenu *mTemplateMenu;
00470 
00471   // Custom template actions menu
00472   TDEActionMenu *mCustomReplyActionMenu,
00473               *mCustomReplyAllActionMenu,
00474               *mCustomForwardActionMenu;
00475   // Signal mappers for custom template actions
00476   TQSignalMapper *mCustomReplyMapper,
00477                 *mCustomReplyAllMapper,
00478                 *mCustomForwardMapper;
00479 
00480   TDEActionMenu *mThreadStatusMenu,
00481     *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00482   TDEAction *mMarkThreadAsNewAction;
00483   TDEAction *mMarkThreadAsReadAction;
00484   TDEAction *mMarkThreadAsUnreadAction;
00485   TDEToggleAction *mToggleThreadTodoAction;
00486   TDEToggleAction *mToggleThreadFlagAction;
00487 
00488   TDEToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00489 
00491   TDERadioAction* mUnreadColumnToggle;
00492   TDERadioAction* mUnreadTextToggle;
00493   TDEToggleAction* mTotalColumnToggle;
00494   TDEToggleAction* mSizeColumnToggle;
00495 
00496   TDEToggleAction *mToggleShowQuickSearchAction;
00497 
00498   KMFolderTree *mFolderTree;
00499   KMail::FavoriteFolderView *mFavoriteFolderView;
00500   TQWidget      *mFolderView;
00501   TQSplitter    *mFolderViewParent;
00502   KMReaderWin  *mMsgView;
00503   TQSplitter    *mPanner1, *mPanner2;
00504   TQSplitter    *mFolderViewSplitter;
00505   KMHeaders    *mHeaders;
00506   TQVBox        *mSearchAndHeaders;
00507   TDEToolBar     *mSearchToolBar;
00508   KMail::HeaderListQuickSearch *mQuickSearchLine;
00509   TQGuardedPtr<KMFolder> mFolder;
00510   KMFolder     *mTemplateFolder;
00511   TQPopupMenu   *mViewMenu, *mBodyPartsMenu;
00512   TDEAction       *mlistFilterAction;
00513   bool      mIntegrated;
00514   bool          mBeepOnNew;
00515   bool          mConfirmEmpty;
00516   TQString       mStartupFolder;
00517   int       mMessageStatusId;
00518   TQValueList<int> mPanner1Sep, mPanner2Sep;
00519   KURL          mUrlCurrent;
00520   TQPopupMenu   *mActMenu;
00521   TQPopupMenu    *mSendMenu;
00522   TQPopupMenu   *mFileMenu;
00523 
00524   bool mLongFolderList;
00525 
00526   bool      mStartupDone;
00527   KMMenuToFolder mMenuToFolder;
00528   int copyId, moveId, htmlId, threadId;
00529   bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00530        mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00531        mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00532   bool mEnableFavoriteFolderView;
00533 
00534 //  TQPopupMenu *mMessageMenu;
00535   KMail::SearchWindow *mSearchWin;
00536 
00537   TDEAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00538       *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00539       *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00540       *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00541       *mRemoveDuplicatesAction, *mArchiveFolderAction;
00542   TDEToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00543   TDEToggleAction *mThreadBySubjectAction;
00544   TDEToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00545 
00546   TQTimer *menutimer;
00547   TQTimer *mShowBusySplashTimer;
00548 
00549   TQGuardedPtr<KMail::Vacation> mVacation;
00550 #if !defined(NDEBUG)
00551   TQGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00552 #endif
00553   TDEActionCollection *mActionCollection;
00554   TDEActionSeparator  *mToolbarActionSeparator;
00555   TQVBoxLayout *mTopLayout;
00556   bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00557   TQPtrList<TDEAction> mFilterMenuActions;
00558   TQPtrList<TDEAction> mFilterTBarActions;
00559   TQPtrList<KMMetaFilterActionCommand> mFilterCommands;
00560   TQDict<FolderShortcutCommand> mFolderShortcutCommands;
00561   TQGuardedPtr <KMail::FolderJob> mJob;
00562 
00563   TQValueVector<TQString> mCustomTemplates;
00564   TQPtrList<TDEAction> mCustomTemplateActions;
00565 
00566   KMSystemTray  *mSystemTray;
00567   TDEConfig *mConfig;
00568   KXMLGUIClient *mGUIClient;
00569 
00570   KMail::MessageActions *mMsgActions;
00571 
00572   static TQValueList<KMMainWidget*>* s_mainWidgetList;
00573 
00574   KStatusBarLabel *mVacationScriptIndicator;
00575   bool mVacationIndicatorActive;
00576 };
00577 
00578 #endif
00579