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