00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __KMMAINWIDGET
00022 #define __KMMAINWIDGET
00023
00024 #include <kurl.h>
00025 #include <kxmlguiclient.h>
00026 #include <qlistview.h>
00027 #include <qvbox.h>
00028
00029 #include "kmreaderwin.h"
00030 #include "kmkernel.h"
00031 #include <kaction.h>
00032
00033 class QVBoxLayout;
00034 class QSplitter;
00035
00036 class KActionMenu;
00037 class KActionCollection;
00038 class KConfig;
00039 class KRadioAction;
00040 class KToggleAction;
00041 class KMenuBar;
00042
00043 class KMFolder;
00044 class KMFolderDir;
00045 class KMFolderTree;
00046 class KMFolderTreeItem;
00047 class KMCommand;
00048 class KMMetaFilterActionCommand;
00049 class FolderShortcutCommand;
00050 class KMMessage;
00051 class KMFolder;
00052 class KMAccount;
00053 class KMSystemTray;
00054 class KMHeaders;
00055
00056 template <typename T> class QValueList;
00057 template <typename T, typename S> class QMap;
00058 template <typename T> class QGuardedPtr;
00059
00060 namespace KIO {
00061 class Job;
00062 }
00063
00064 namespace KMail {
00065 class Vacation;
00066 class SieveDebugDialog;
00067 class FolderJob;
00068 class HeaderListQuickSearch;
00069 class SearchWindow;
00070 }
00071
00072 typedef QMap<int,KMFolder*> KMMenuToFolder;
00073
00074
00075 class KDE_EXPORT KMMainWidget : public QWidget
00076 {
00077 Q_OBJECT
00078
00079 public:
00080 KMMainWidget(QWidget *parent, const char *name,
00081 KXMLGUIClient *aGUIClient,
00082 KActionCollection *actionCollection,
00083 KConfig*config = KMKernel::config() );
00084 virtual ~KMMainWidget();
00085 void destruct();
00086
00088 virtual void readPreConfig(void);
00089
00091 virtual void readFolderConfig(void);
00092
00094 virtual void writeFolderConfig(void);
00095
00097 virtual void readConfig(void);
00098
00100 virtual void writeConfig(void);
00101
00103 KMReaderWin* messageView(void) const { return mMsgView; }
00104 KMFolderTree* folderTree(void) const { return mFolderTree; }
00105
00106 static void cleanup();
00107
00108 KAction *action( const char *name ) { return mActionCollection->action( name ); }
00109 KAction *replyAction() const { return mReplyAction; }
00110 KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00111 KAction *replyAllAction() const { return mReplyAllAction; }
00112 KAction *replyListAction() const { return mReplyListAction; }
00113 KActionMenu * replyMenu() const { return mReplyActionMenu; }
00114 KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00115 KAction *forwardInlineAction() const { return mForwardInlineAction; }
00116 KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00117 KAction *forwardDigestAction() const { return mForwardDigestAction; }
00118 KAction *redirectAction() const { return mRedirectAction; }
00119 KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00120 KActionMenu *filterMenu() const { return mFilterMenu; }
00121 KAction *printAction() const { return mPrintAction; }
00122 KAction *trashAction() const { return mTrashAction; }
00123 KAction *deleteAction() const { return mDeleteAction; }
00124 KAction *trashThreadAction() const { return mTrashThreadAction; }
00125 KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00126 KAction *saveAsAction() const { return mSaveAsAction; }
00127 KAction *editAction() const { return mEditAction; }
00128 KAction *sendAgainAction() const { return mSendAgainAction; }
00129 KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00130 KAction *findInMessageAction() const { return mFindInMessageAction; }
00131 KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00132 KAction *openAction() const { return mOpenAction; }
00133 KAction *viewSourceAction() { return mViewSourceAction; }
00134
00135 KActionMenu *statusMenu() const{ return mStatusMenu; }
00136 KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00137 KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00138 KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00139 KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00140
00141 KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00142 KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00143
00144 KMHeaders *headers() const { return mHeaders; }
00145 void toggleSystemTray();
00146
00147 void updateListFilterAction();
00148
00151 static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00152
00153 KMSystemTray *systray() const;
00154
00157 bool shortcutIsValid( const KShortcut& ) const;
00158
00159
00160 void modifyFolder( KMFolderTreeItem* folderItem );
00161
00166 void setAccelsEnabled( bool enabled = true );
00167
00168 public slots:
00169 void slotMoveMsgToFolder( KMFolder *dest);
00170 void slotTrashMsg();
00171
00172 virtual void show();
00173 virtual void hide();
00175 void slotCheckMail();
00176
00181 void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00182
00184 void folderSelected();
00185
00187 void folderSelectedUnread( KMFolder* );
00188
00189 void slotMsgSelected(KMMessage*);
00190 void slotMsgChanged();
00191
00193 void slotSelectFolder(KMFolder*);
00194 void slotSelectMessage(KMMessage*);
00195
00196 void slotReplaceMsgByUnencryptedVersion();
00197
00199 void updateMessageMenu();
00201 void startUpdateMessageActionsTimer();
00203 void updateMessageActions();
00204
00206 void slotSubscriptionDialog();
00207
00209 void slotFolderTreeColumnsChanged();
00210
00212 void clearFilterActions();
00213 void initializeFilterActions();
00214
00216 void initializeIMAPActions() { initializeIMAPActions( true ); }
00217
00219 void initializeFolderShortcutActions();
00220
00222 void slotShortcutChanged( KMFolder *folder );
00223
00224 signals:
00225 void messagesTransfered( bool );
00226 void captionChangeRequest( const QString & caption );
00227
00228 protected:
00229 void setupActions();
00230 void createWidgets();
00231 void activatePanners();
00232 void showMsg(KMReaderWin *win, KMMessage *msg);
00233 void updateFileMenu();
00234
00235 KActionCollection * actionCollection() const { return mActionCollection; }
00236
00240 KConfig * config();
00241
00242 protected slots:
00243 void slotCheckOneAccount(int);
00244 void slotMailChecked( bool newMail, bool sendOnCheck,
00245 const QMap<QString, int> & newInFolder );
00246 void getAccountMenu();
00247 void getTransportMenu();
00248 void slotHelp();
00249 void slotFilter();
00250 void slotPopFilter();
00251 void slotManageSieveScripts();
00252 void slotAddrBook();
00253 void slotImport();
00254 void slotViewChange();
00255 void slotCompose();
00256 void slotPostToML();
00257 void slotModifyFolder();
00258 void slotFolderMailingListProperties();
00259 void slotFolderShortcutCommand();
00260 void slotExpireFolder();
00261 void slotExpireAll();
00262 void slotInvalidateIMAPFolders();
00263 void slotMarkAllAsRead();
00264 void slotRemoveFolder();
00265 void slotEmptyFolder();
00266 void slotCompactFolder();
00267 void slotRefreshFolder();
00268 void slotTroubleshootFolder();
00269 void slotCompactAll();
00270 void slotOverrideHtml();
00271 void slotOverrideHtmlLoadExt();
00272 void slotOverrideThread();
00273 void slotToggleSubjectThreading();
00274 void slotMessageQueuedOrDrafted();
00275 void slotEditMsg();
00276
00277 void slotDeleteMsg( bool confirmDelete = true );
00278 void slotTrashThread();
00279 void slotDeleteThread( bool confirmDelete = true );
00280 void slotUndo();
00281 void slotReadOn();
00282 void slotSaveMsg();
00283 void slotOpenMsg();
00284 void slotSaveAttachments();
00285 void slotJumpToFolder();
00286 void slotMoveMsg();
00287
00288 void slotCopyMsgToFolder( KMFolder *dest);
00289 void slotCopyMsg();
00290 void slotResendMsg();
00291 void slotEditVacation();
00292 void slotDebugSieve();
00293 void slotStartCertManager();
00294 void slotStartWatchGnuPG();
00295 void slotApplyFilters();
00296 void slotExpandThread();
00297 void slotExpandAllThreads();
00298 void slotCollapseThread();
00299 void slotCollapseAllThreads();
00300 void slotShowMsgSrc();
00301 void slotSetMsgStatusNew();
00302 void slotSetMsgStatusUnread();
00303 void slotSetMsgStatusRead();
00304 void slotSetMsgStatusTodo();
00305 void slotSetMsgStatusSent();
00306 void slotSetMsgStatusFlag();
00307 void slotSetThreadStatusNew();
00308 void slotSetThreadStatusUnread();
00309 void slotSetThreadStatusRead();
00310 void slotSetThreadStatusTodo();
00311 void slotSetThreadStatusFlag();
00312 void slotSetThreadStatusWatched();
00313 void slotSetThreadStatusIgnored();
00314 void slotToggleUnread();
00315 void slotToggleTotalColumn();
00316 void slotSendQueued();
00317 void slotSendQueuedVia( int item );
00318 void slotOnlineStatus();
00319 void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00320 void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00321 void slotMarkAll();
00322 void slotMemInfo();
00323 void slotSearch();
00324 void slotSearchClosed();
00325 void slotFind();
00326 void slotIntro();
00327 void slotShowStartupFolder();
00329 void slotShowTip();
00330 void slotAntiSpamWizard();
00331 void slotAntiVirusWizard();
00332 void slotFilterLogViewer();
00333
00335 void slotNextMessage();
00336 void slotNextUnreadMessage();
00337 void slotNextImportantMessage();
00338 void slotNextUnreadFolder();
00339 void slotPrevMessage();
00340 void slotPrevUnreadMessage();
00341 void slotPrevImportantMessage();
00342 void slotPrevUnreadFolder();
00343
00345 void slotDisplayCurrentMessage();
00346 void slotMsgActivated(KMMessage*);
00347
00349 void slotUpdateUndo();
00350
00352 virtual void moveSelectedToFolder( int menuId );
00354 virtual void copySelectedToFolder( int menuId );
00356 void updateFolderMenu();
00359 void updateMarkAsReadAction();
00360
00362 void slotToggleShowQuickSearch();
00363
00365 void slotEditNotifications();
00366 void slotEditKeys();
00367
00369 void slotChangeCaption(QListViewItem*);
00370 void removeDuplicates();
00371
00373 void slotReplyToMsg();
00374 void slotReplyAuthorToMsg();
00375 void slotReplyListToMsg();
00376 void slotReplyAllToMsg();
00377 void slotForwardInlineMsg();
00378 void slotForwardAttachedMsg();
00379 void slotForwardDigestMsg();
00380 void slotRedirectMsg();
00381 void slotNoQuoteReplyToMsg();
00382 void slotSubjectFilter();
00383 void slotMailingListFilter();
00384 void slotFromFilter();
00385 void slotToFilter();
00386 void slotPrintMsg();
00387
00388 void slotConfigChanged();
00390 void slotFolderRemoved( KMFolder *folder );
00391
00393 void slotShowBusySplash();
00396 void showOfflinePage();
00397
00398 private:
00400 QString overrideEncoding() const;
00401
00402 void initializeIMAPActions( bool setState );
00403
00404 private:
00405
00406 KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00407 *mDeleteThreadAction, *mSaveAsAction, *mEditAction,
00408 *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00409 *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
00410
00411 KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00412 *mReplyListAction,
00413 *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00414 *mRedirectAction,
00415 *mNoQuoteReplyAction;
00416 KActionMenu *mReplyActionMenu;
00417 KActionMenu *mForwardActionMenu;
00418
00419 KActionMenu *mFilterMenu;
00420 KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00421 *mListFilterAction;
00422
00423 KActionMenu *mStatusMenu, *mThreadStatusMenu,
00424 *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00425 KAction *mMarkThreadAsNewAction;
00426 KAction *mMarkThreadAsReadAction;
00427 KAction *mMarkThreadAsUnreadAction;
00428 KToggleAction *mToggleThreadTodoAction;
00429 KToggleAction *mToggleThreadFlagAction;
00430 KToggleAction *mToggleTodoAction;
00431 KToggleAction *mToggleSentAction;
00432 KToggleAction *mToggleFlagAction;
00433
00434 KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00435
00437 KRadioAction* mUnreadColumnToggle;
00438 KRadioAction* mUnreadTextToggle;
00439 KToggleAction* mTotalColumnToggle;
00440
00441 KToggleAction *mToggleShowQuickSearchAction;
00442
00443 KMFolderTree *mFolderTree;
00444 KMReaderWin *mMsgView;
00445 QSplitter *mPanner1, *mPanner2;
00446 KMHeaders *mHeaders;
00447 QVBox *mSearchAndHeaders;
00448 KToolBar *mSearchToolBar;
00449 KMail::HeaderListQuickSearch *mQuickSearchLine;
00450 KMFolder *mFolder;
00451 QPopupMenu *mViewMenu, *mBodyPartsMenu;
00452 KAction *mlistFilterAction;
00453 bool mIntegrated;
00454 bool mBeepOnNew;
00455 bool mConfirmEmpty;
00456 QString mStartupFolder;
00457 int mMessageStatusId;
00458 QValueList<int> mPanner1Sep, mPanner2Sep;
00459 KURL mUrlCurrent;
00460 QPopupMenu *mActMenu;
00461 QPopupMenu *mSendMenu;
00462 QPopupMenu *mFileMenu;
00463
00464 bool mLongFolderList;
00465
00466 bool mStartupDone;
00467 KMMenuToFolder mMenuToFolder;
00468 int copyId, moveId, htmlId, threadId;
00469 bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00470 mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00471 mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00472
00473
00474 KMail::SearchWindow *mSearchWin;
00475
00476 KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00477 *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00478 *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00479 *mFolderShortCutCommandAction, *mTroubleshootFolderAction;
00480 KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00481 KToggleAction *mThreadBySubjectAction;
00482 KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00483
00484 QTimer *menutimer;
00485 QTimer *mShowBusySplashTimer;
00486
00487 QGuardedPtr<KMail::Vacation> mVacation;
00488 #if !defined(NDEBUG)
00489 QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00490 #endif
00491 KActionCollection *mActionCollection;
00492 KActionSeparator *mToolbarActionSeparator;
00493 QVBoxLayout *mTopLayout;
00494 bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00495 QPtrList<KAction> mFilterMenuActions;
00496 QPtrList<KAction> mFilterTBarActions;
00497 QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00498 QDict<FolderShortcutCommand> mFolderShortcutCommands;
00499 QGuardedPtr <KMail::FolderJob> mJob;
00500
00501 KMSystemTray *mSystemTray;
00502 KConfig *mConfig;
00503 KXMLGUIClient *mGUIClient;
00504
00505 static QValueList<KMMainWidget*>* s_mainWidgetList;
00506 };
00507
00508 #endif
00509