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 <qguardedptr.h>
00027 #include <qlistview.h>
00028 #include <qvbox.h>
00029 #include <qvaluevector.h>
00030
00031 #include "kmreaderwin.h"
00032 #include "kmkernel.h"
00033 #include <kaction.h>
00034
00035 class QVBoxLayout;
00036 class QSplitter;
00037 class QSignalMapper;
00038
00039 class KActionMenu;
00040 class KActionCollection;
00041 class KConfig;
00042 class KRadioAction;
00043 class KToggleAction;
00044 class KMenuBar;
00045
00046 class KMFolder;
00047 class KMFolderDir;
00048 class KMFolderTree;
00049 class KMFolderTreeItem;
00050 class KMCommand;
00051 class KMMetaFilterActionCommand;
00052 class FolderShortcutCommand;
00053 class KMMessage;
00054 class KMFolder;
00055 class KMAccount;
00056 class KMSystemTray;
00057 class KMHeaders;
00058
00059 template <typename T> class QValueList;
00060 template <typename T, typename S> class QMap;
00061 template <typename T> class QGuardedPtr;
00062
00063 namespace KIO {
00064 class Job;
00065 }
00066
00067 namespace KMail {
00068 class Vacation;
00069 class SieveDebugDialog;
00070 class FolderJob;
00071 class HeaderListQuickSearch;
00072 class SearchWindow;
00073 class ImapAccountBase;
00074 }
00075
00076 typedef QMap<int,KMFolder*> KMMenuToFolder;
00077
00078
00079 class KDE_EXPORT KMMainWidget : public QWidget
00080 {
00081 Q_OBJECT
00082
00083 public:
00084 KMMainWidget(QWidget *parent, const char *name,
00085 KXMLGUIClient *aGUIClient,
00086 KActionCollection *actionCollection,
00087 KConfig*config = KMKernel::config() );
00088 virtual ~KMMainWidget();
00089 void destruct();
00090
00092 virtual void readPreConfig(void);
00093
00095 virtual void readFolderConfig(void);
00096
00098 virtual void writeFolderConfig(void);
00099
00101 virtual void readConfig(void);
00102
00104 virtual void writeConfig(void);
00105
00107 KMReaderWin* messageView(void) const { return mMsgView; }
00108 KMFolderTree* folderTree(void) const { return mFolderTree; }
00109
00110 static void cleanup();
00111
00112 KAction *action( const char *name ) { return mActionCollection->action( name ); }
00113 KAction *replyAction() const { return mReplyAction; }
00114 KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00115 KAction *replyAllAction() const { return mReplyAllAction; }
00116 KAction *replyListAction() const { return mReplyListAction; }
00117 KActionMenu *customReplyAction() const { return mCustomReplyActionMenu; }
00118 KActionMenu *customReplyAllAction() const { return mCustomReplyAllActionMenu; }
00119 KActionMenu * replyMenu() const { return mReplyActionMenu; }
00120 KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00121 KAction *forwardInlineAction() const { return mForwardInlineAction; }
00122 KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00123 KAction *forwardDigestAction() const { return mForwardDigestAction; }
00124 KAction *redirectAction() const { return mRedirectAction; }
00125 KActionMenu *customForwardAction() const { return mCustomForwardActionMenu; }
00126 KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00127 KActionMenu *filterMenu() const { return mFilterMenu; }
00128 KAction *printAction() const { return mPrintAction; }
00129 KAction *trashAction() const { return mTrashAction; }
00130 KAction *deleteAction() const { return mDeleteAction; }
00131 KAction *trashThreadAction() const { return mTrashThreadAction; }
00132 KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00133 KAction *saveAsAction() const { return mSaveAsAction; }
00134 KAction *editAction() const { return mEditAction; }
00135 KAction *useAction() const { return mUseAction; }
00136 KAction *sendAgainAction() const { return mSendAgainAction; }
00137 KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00138 KAction *findInMessageAction() const { return mFindInMessageAction; }
00139 KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00140 KAction *openAction() const { return mOpenAction; }
00141 KAction *viewSourceAction() { return mViewSourceAction; }
00142
00143 KActionMenu *statusMenu() const{ return mStatusMenu; }
00144 KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00145 KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00146 KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00147 KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00148
00149 KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00150 KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00151
00152 KMHeaders *headers() const { return mHeaders; }
00153 void toggleSystemTray();
00154
00155 void updateListFilterAction();
00156
00159 static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00160
00161 KMSystemTray *systray() const;
00162
00165 bool shortcutIsValid( const KShortcut& ) const;
00166
00167
00168 void modifyFolder( KMFolderTreeItem* folderItem );
00169
00174 void setAccelsEnabled( bool enabled = true );
00175
00176 public slots:
00177 void slotMoveMsgToFolder( KMFolder *dest);
00178 void slotTrashMsg();
00179
00180 virtual void show();
00181 virtual void hide();
00183 void slotCheckMail();
00184
00189 void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00190
00192 void folderSelected();
00193
00195 void folderSelectedUnread( KMFolder* );
00196
00197 void slotMsgSelected(KMMessage*);
00198 void slotMsgChanged();
00199
00201 void slotSelectFolder(KMFolder*);
00202 void slotSelectMessage(KMMessage*);
00203
00204 void slotReplaceMsgByUnencryptedVersion();
00205
00207 void updateMessageMenu();
00209 void startUpdateMessageActionsTimer();
00211 void updateMessageActions();
00212
00214 void slotSubscriptionDialog();
00215
00217 void slotLocalSubscriptionDialog();
00218
00220 void slotFolderTreeColumnsChanged();
00221
00223 void clearFilterActions();
00224 void initializeFilterActions();
00225
00227 void initializeIMAPActions() { initializeIMAPActions( true ); }
00228
00230 void initializeFolderShortcutActions();
00231
00233 void slotShortcutChanged( KMFolder *folder );
00234
00235 void updateCustomTemplateMenus();
00236
00237 signals:
00238 void messagesTransfered( bool );
00239 void captionChangeRequest( const QString & caption );
00240
00241 protected:
00242 void setupActions();
00243 void createWidgets();
00244 void activatePanners();
00245 void showMsg( KMReaderWin *win, KMMessage *msg );
00246 void updateFileMenu();
00247 void newFromTemplate( KMMessage *msg );
00248
00249
00250 void openFolder();
00251 void closeFolder();
00252
00253 KActionCollection * actionCollection() const { return mActionCollection; }
00254
00258 KConfig * config();
00259
00260 protected slots:
00261 void slotCheckOneAccount(int);
00262 void slotMailChecked( bool newMail, bool sendOnCheck,
00263 const QMap<QString, int> & newInFolder );
00264 void getAccountMenu();
00265 void getTransportMenu();
00266 void slotHelp();
00267 void slotFilter();
00268 void slotPopFilter();
00269 void slotManageSieveScripts();
00270 void slotAddrBook();
00271 void slotImport();
00272 void slotViewChange();
00273 void slotCompose();
00274 void slotPostToML();
00275 void slotModifyFolder();
00276 void slotFolderMailingListProperties();
00277 void slotFolderShortcutCommand();
00278 void slotExpireFolder();
00279 void slotExpireAll();
00280 void slotInvalidateIMAPFolders();
00281 void slotMarkAllAsRead();
00282 void slotRemoveFolder();
00283 void slotEmptyFolder();
00284 void slotCompactFolder();
00285 void slotRefreshFolder();
00286 void slotTroubleshootFolder();
00287 void slotCompactAll();
00288 void slotOverrideHtml();
00289 void slotOverrideHtmlLoadExt();
00290 void slotOverrideThread();
00291 void slotToggleSubjectThreading();
00292 void slotMessageQueuedOrDrafted();
00293 void slotEditMsg();
00294 void slotUseTemplate();
00295
00296 void slotDeleteMsg( bool confirmDelete = true );
00297 void slotTrashThread();
00298 void slotDeleteThread( bool confirmDelete = true );
00299 void slotUndo();
00300 void slotReadOn();
00301 void slotSaveMsg();
00302 void slotOpenMsg();
00303 void slotSaveAttachments();
00304 void slotJumpToFolder();
00305 void slotMoveMsg();
00306
00307 void slotCopyMsgToFolder( KMFolder *dest);
00308 void slotCopyMsg();
00309 void slotResendMsg();
00310 void slotEditVacation();
00311 void slotDebugSieve();
00312 void slotStartCertManager();
00313 void slotStartWatchGnuPG();
00314 void slotApplyFilters();
00315 void slotExpandThread();
00316 void slotExpandAllThreads();
00317 void slotCollapseThread();
00318 void slotCollapseAllThreads();
00319 void slotShowMsgSrc();
00320 void slotSetMsgStatusNew();
00321 void slotSetMsgStatusUnread();
00322 void slotSetMsgStatusRead();
00323 void slotSetMsgStatusTodo();
00324 void slotSetMsgStatusSent();
00325 void slotSetMsgStatusFlag();
00326 void slotSetThreadStatusNew();
00327 void slotSetThreadStatusUnread();
00328 void slotSetThreadStatusRead();
00329 void slotSetThreadStatusTodo();
00330 void slotSetThreadStatusFlag();
00331 void slotSetThreadStatusWatched();
00332 void slotSetThreadStatusIgnored();
00333 void slotToggleUnread();
00334 void slotToggleTotalColumn();
00335 void slotSendQueued();
00336 void slotSendQueuedVia( int item );
00337 void slotOnlineStatus();
00338 void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00339 void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00340 void slotMarkAll();
00341 void slotMemInfo();
00342 void slotSearch();
00343 void slotSearchClosed();
00344 void slotFind();
00345 void slotIntro();
00346 void slotShowStartupFolder();
00348 void slotShowTip();
00349 void slotAntiSpamWizard();
00350 void slotAntiVirusWizard();
00351 void slotFilterLogViewer();
00352
00354 void slotNextMessage();
00355 void slotNextUnreadMessage();
00356 void slotNextImportantMessage();
00357 void slotNextUnreadFolder();
00358 void slotPrevMessage();
00359 void slotPrevUnreadMessage();
00360 void slotPrevImportantMessage();
00361 void slotPrevUnreadFolder();
00362
00364 void slotDisplayCurrentMessage();
00365 void slotMsgActivated( KMMessage* );
00366
00367 void slotShowNewFromTemplate();
00368 void slotNewFromTemplate( int );
00369
00371 void slotUpdateUndo();
00372
00374 virtual void moveSelectedToFolder( int menuId );
00376 virtual void copySelectedToFolder( int menuId );
00378 void updateFolderMenu();
00381 void updateMarkAsReadAction();
00382
00384 void slotToggleShowQuickSearch();
00385
00387 void slotEditNotifications();
00388 void slotEditKeys();
00389
00391 void slotChangeCaption(QListViewItem*);
00392 void removeDuplicates();
00393
00395 void slotReplyToMsg();
00396 void slotReplyAuthorToMsg();
00397 void slotReplyListToMsg();
00398 void slotReplyAllToMsg();
00399 void slotCustomReplyToMsg( int tid );
00400 void slotCustomReplyAllToMsg( int tid );
00401 void slotForwardInlineMsg();
00402 void slotForwardAttachedMsg();
00403 void slotForwardDigestMsg();
00404 void slotRedirectMsg();
00405 void slotCustomForwardMsg( int tid );
00406 void slotNoQuoteReplyToMsg();
00407 void slotSubjectFilter();
00408 void slotMailingListFilter();
00409 void slotFromFilter();
00410 void slotToFilter();
00411 void slotPrintMsg();
00412
00413 void slotConfigChanged();
00415 void slotFolderRemoved( KMFolder *folder );
00416
00418 void slotShowBusySplash();
00421 void showOfflinePage();
00422
00423 private:
00425 QString overrideEncoding() const;
00426
00427 void initializeIMAPActions( bool setState );
00428
00432 KMail::ImapAccountBase* findCurrentImapAccountBase();
00433
00437 QString findCurrentImapPath();
00438
00439 private:
00440
00441 KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00442 *mDeleteThreadAction, *mSaveAsAction, *mEditAction, *mUseAction,
00443 *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00444 *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
00445
00446 KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00447 *mReplyListAction,
00448 *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00449 *mRedirectAction, *mNoQuoteReplyAction;
00450 KActionMenu *mReplyActionMenu;
00451 KActionMenu *mForwardActionMenu;
00452
00453 KActionMenu *mFilterMenu;
00454 KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00455 *mListFilterAction;
00456 KActionMenu *mTemplateMenu;
00457
00458
00459 KActionMenu *mCustomReplyActionMenu,
00460 *mCustomReplyAllActionMenu,
00461 *mCustomForwardActionMenu;
00462
00463 QSignalMapper *mCustomReplyMapper,
00464 *mCustomReplyAllMapper,
00465 *mCustomForwardMapper;
00466
00467 KActionMenu *mStatusMenu, *mThreadStatusMenu,
00468 *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00469 KAction *mMarkThreadAsNewAction;
00470 KAction *mMarkThreadAsReadAction;
00471 KAction *mMarkThreadAsUnreadAction;
00472 KToggleAction *mToggleThreadTodoAction;
00473 KToggleAction *mToggleThreadFlagAction;
00474 KToggleAction *mToggleTodoAction;
00475 KToggleAction *mToggleFlagAction;
00476
00477 KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00478
00480 KRadioAction* mUnreadColumnToggle;
00481 KRadioAction* mUnreadTextToggle;
00482 KToggleAction* mTotalColumnToggle;
00483
00484 KToggleAction *mToggleShowQuickSearchAction;
00485
00486 KMFolderTree *mFolderTree;
00487 KMReaderWin *mMsgView;
00488 QSplitter *mPanner1, *mPanner2;
00489 KMHeaders *mHeaders;
00490 QVBox *mSearchAndHeaders;
00491 KToolBar *mSearchToolBar;
00492 KMail::HeaderListQuickSearch *mQuickSearchLine;
00493 QGuardedPtr<KMFolder> mFolder;
00494 KMFolder *mTemplateFolder;
00495 QPopupMenu *mViewMenu, *mBodyPartsMenu;
00496 KAction *mlistFilterAction;
00497 bool mIntegrated;
00498 bool mBeepOnNew;
00499 bool mConfirmEmpty;
00500 QString mStartupFolder;
00501 int mMessageStatusId;
00502 QValueList<int> mPanner1Sep, mPanner2Sep;
00503 KURL mUrlCurrent;
00504 QPopupMenu *mActMenu;
00505 QPopupMenu *mSendMenu;
00506 QPopupMenu *mFileMenu;
00507
00508 bool mLongFolderList;
00509
00510 bool mStartupDone;
00511 KMMenuToFolder mMenuToFolder;
00512 int copyId, moveId, htmlId, threadId;
00513 bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00514 mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00515 mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00516
00517
00518 KMail::SearchWindow *mSearchWin;
00519
00520 KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00521 *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00522 *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00523 *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00524 *mRemoveDuplicatesAction;
00525 KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00526 KToggleAction *mThreadBySubjectAction;
00527 KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00528
00529 QTimer *menutimer;
00530 QTimer *mShowBusySplashTimer;
00531
00532 QGuardedPtr<KMail::Vacation> mVacation;
00533 #if !defined(NDEBUG)
00534 QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00535 #endif
00536 KActionCollection *mActionCollection;
00537 KActionSeparator *mToolbarActionSeparator;
00538 QVBoxLayout *mTopLayout;
00539 bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00540 QPtrList<KAction> mFilterMenuActions;
00541 QPtrList<KAction> mFilterTBarActions;
00542 QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00543 QDict<FolderShortcutCommand> mFolderShortcutCommands;
00544 QGuardedPtr <KMail::FolderJob> mJob;
00545
00546 QValueVector<QString> mCustomTemplates;
00547 QPtrList<KAction> mCustomTemplateActions;
00548
00549 KMSystemTray *mSystemTray;
00550 KConfig *mConfig;
00551 KXMLGUIClient *mGUIClient;
00552
00553 static QValueList<KMMainWidget*>* s_mainWidgetList;
00554 bool mOpenedImapFolder;
00555 };
00556
00557 #endif
00558