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