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 class FavoriteFolderView;
00075 }
00076
00077 typedef QMap<int,KMFolder*> KMMenuToFolder;
00078
00079
00080 class KDE_EXPORT KMMainWidget : public QWidget
00081 {
00082 Q_OBJECT
00083
00084 public:
00085 KMMainWidget(QWidget *parent, const char *name,
00086 KXMLGUIClient *aGUIClient,
00087 KActionCollection *actionCollection,
00088 KConfig*config = KMKernel::config() );
00089 virtual ~KMMainWidget();
00090 void destruct();
00091
00093 virtual void readPreConfig(void);
00094
00096 virtual void readFolderConfig(void);
00097
00099 virtual void writeFolderConfig(void);
00100
00102 virtual void readConfig(void);
00103
00105 virtual void writeConfig(void);
00106
00108 KMReaderWin* messageView(void) const { return mMsgView; }
00109 KMFolderTree* folderTree(void) const { return mFolderTree; }
00110 KMail::FavoriteFolderView *favoriteFolderView() const { return mFavoriteFolderView; }
00111
00112 static void cleanup();
00113
00114 KAction *action( const char *name ) { return mActionCollection->action( name ); }
00115 KAction *replyAction() const { return mReplyAction; }
00116 KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00117 KAction *replyAllAction() const { return mReplyAllAction; }
00118 KAction *replyListAction() const { return mReplyListAction; }
00119 KActionMenu *customReplyAction() const { return mCustomReplyActionMenu; }
00120 KActionMenu *customReplyAllAction() const { return mCustomReplyAllActionMenu; }
00121 KActionMenu * replyMenu() const { return mReplyActionMenu; }
00122 KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00123 KAction *forwardInlineAction() const { return mForwardInlineAction; }
00124 KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00125 KAction *forwardDigestAction() const { return mForwardDigestAction; }
00126 KAction *redirectAction() const { return mRedirectAction; }
00127 KActionMenu *customForwardAction() const { return mCustomForwardActionMenu; }
00128 KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00129 KActionMenu *filterMenu() const { return mFilterMenu; }
00130 KAction *printAction() const { return mPrintAction; }
00131 KAction *trashAction() const { return mTrashAction; }
00132 KAction *deleteAction() const { return mDeleteAction; }
00133 KAction *trashThreadAction() const { return mTrashThreadAction; }
00134 KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00135 KAction *saveAsAction() const { return mSaveAsAction; }
00136 KAction *editAction() const { return mEditAction; }
00137 KAction *useAction() const { return mUseAction; }
00138 KAction *sendAgainAction() const { return mSendAgainAction; }
00139 KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00140 KAction *findInMessageAction() const { return mFindInMessageAction; }
00141 KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00142 KAction *openAction() const { return mOpenAction; }
00143 KAction *viewSourceAction() const { return mViewSourceAction; }
00144 KAction *createTodoAction() const { return mCreateTodoAction; }
00145
00146 KActionMenu *statusMenu() const{ return mStatusMenu; }
00147 KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00148 KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00149 KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00150 KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00151
00152 KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00153 KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00154
00155 KMHeaders *headers() const { return mHeaders; }
00156 void toggleSystemTray();
00157
00158 void updateListFilterAction();
00159
00162 static const QValueList<KMMainWidget*>* mainWidgetList() { return s_mainWidgetList; }
00163
00164 KMSystemTray *systray() const;
00165
00168 bool shortcutIsValid( const KShortcut& ) const;
00169
00170
00171 void modifyFolder( KMFolderTreeItem* folderItem );
00172
00177 void setAccelsEnabled( bool enabled = true );
00178
00182 void setupForwardingActionsList();
00183
00184 public slots:
00185 void slotMoveMsgToFolder( KMFolder *dest);
00186 void slotTrashMsg();
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*);
00206 void slotMsgChanged();
00207
00209 void slotSelectFolder(KMFolder*);
00210 void slotSelectMessage(KMMessage*);
00211
00212 void slotReplaceMsgByUnencryptedVersion();
00213
00215 void updateMessageMenu();
00217 void startUpdateMessageActionsTimer();
00219 void updateMessageActions();
00220
00222 void slotSubscriptionDialog();
00223
00225 void slotLocalSubscriptionDialog();
00226
00228 void slotFolderTreeColumnsChanged();
00229
00231 void clearFilterActions();
00232 void initializeFilterActions();
00233
00235 void initializeIMAPActions() { initializeIMAPActions( true ); }
00236
00238 void initializeFolderShortcutActions();
00239
00241 void slotShortcutChanged( KMFolder *folder );
00242
00243 void updateCustomTemplateMenus();
00244 void slotEditVacation();
00245
00246 signals:
00247 void messagesTransfered( bool );
00248 void captionChangeRequest( const QString & caption );
00249
00250 protected:
00251 void setupActions();
00252 void createWidgets();
00253 void activatePanners();
00254 void showMsg( KMReaderWin *win, KMMessage *msg );
00255 void updateFileMenu();
00256 void newFromTemplate( KMMessage *msg );
00257
00258 KActionCollection * actionCollection() const { return mActionCollection; }
00259
00263 KConfig * config();
00264
00265 protected slots:
00266 void slotCheckOneAccount(int);
00267 void slotMailChecked( bool newMail, bool sendOnCheck,
00268 const QMap<QString, int> & newInFolder );
00269 void getAccountMenu();
00270 void getTransportMenu();
00271 void slotHelp();
00272 void slotFilter();
00273 void slotPopFilter();
00274 void slotManageSieveScripts();
00275 void slotAddrBook();
00276 void slotImport();
00277 void slotViewChange();
00278 void slotCompose();
00279 void slotPostToML();
00280 void slotModifyFolder();
00281 void slotFolderMailingListProperties();
00282 void slotFolderShortcutCommand();
00283 void slotExpireFolder();
00284 void slotExpireAll();
00285 void slotInvalidateIMAPFolders();
00286 void slotMarkAllAsRead();
00287 void slotRemoveFolder();
00288 void slotEmptyFolder();
00289 void slotCompactFolder();
00290 void slotRefreshFolder();
00291 void slotTroubleshootFolder();
00292 void slotCompactAll();
00293 void slotOverrideHtml();
00294 void slotOverrideHtmlLoadExt();
00295 void slotOverrideThread();
00296 void slotToggleSubjectThreading();
00297 void slotMessageQueuedOrDrafted();
00298 void slotEditMsg();
00299 void slotUseTemplate();
00300
00301 void slotDeleteMsg( bool confirmDelete = true );
00302 void slotTrashThread();
00303 void slotDeleteThread( bool confirmDelete = true );
00304 void slotUndo();
00305 void slotReadOn();
00306 void slotSaveMsg();
00307 void slotOpenMsg();
00308 void slotSaveAttachments();
00309 void slotJumpToFolder();
00310 void slotMoveMsg();
00311
00312 void slotCopyMsgToFolder( KMFolder *dest);
00313 void slotCopyMsg();
00314 void slotResendMsg();
00315 void slotCheckVacation();
00316 void slotDebugSieve();
00317 void slotStartCertManager();
00318 void slotStartWatchGnuPG();
00319 void slotApplyFilters();
00320 void slotExpandThread();
00321 void slotExpandAllThreads();
00322 void slotCollapseThread();
00323 void slotCollapseAllThreads();
00324 void slotShowMsgSrc();
00325 void slotSetMsgStatusNew();
00326 void slotSetMsgStatusUnread();
00327 void slotSetMsgStatusRead();
00328 void slotSetMsgStatusTodo();
00329 void slotSetMsgStatusSent();
00330 void slotSetMsgStatusFlag();
00331 void slotSetThreadStatusNew();
00332 void slotSetThreadStatusUnread();
00333 void slotSetThreadStatusRead();
00334 void slotSetThreadStatusTodo();
00335 void slotSetThreadStatusFlag();
00336 void slotSetThreadStatusWatched();
00337 void slotSetThreadStatusIgnored();
00338 void slotToggleUnread();
00339 void slotToggleTotalColumn();
00340 void slotToggleSizeColumn();
00341 void slotSendQueued();
00342 void slotSendQueuedVia( int item );
00343 void slotOnlineStatus();
00344 void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00345 void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00346 void slotMarkAll();
00347 void slotMemInfo();
00348 void slotSearch();
00349 void slotSearchClosed();
00350 void slotFind();
00351 void slotIntro();
00352 void slotShowStartupFolder();
00354 void slotShowTip();
00355 void slotAntiSpamWizard();
00356 void slotAntiVirusWizard();
00357 void slotFilterLogViewer();
00358
00360 void slotNextMessage();
00361 void slotNextUnreadMessage();
00362 void slotNextImportantMessage();
00363 void slotNextUnreadFolder();
00364 void slotPrevMessage();
00365 void slotPrevUnreadMessage();
00366 void slotPrevImportantMessage();
00367 void slotPrevUnreadFolder();
00368
00370 void slotDisplayCurrentMessage();
00371 void slotMsgActivated( KMMessage* );
00372
00373 void slotShowNewFromTemplate();
00374 void slotNewFromTemplate( int );
00375
00377 void slotUpdateUndo();
00378
00380 virtual void moveSelectedToFolder( int menuId );
00382 virtual void copySelectedToFolder( int menuId );
00384 void updateFolderMenu();
00387 void updateMarkAsReadAction();
00388
00390 void slotToggleShowQuickSearch();
00391
00393 void slotEditNotifications();
00394 void slotEditKeys();
00395
00397 void slotChangeCaption(QListViewItem*);
00398 void removeDuplicates();
00399
00401 void slotReplyToMsg();
00402 void slotReplyAuthorToMsg();
00403 void slotReplyListToMsg();
00404 void slotReplyAllToMsg();
00405 void slotCustomReplyToMsg( int tid );
00406 void slotCustomReplyAllToMsg( int tid );
00407 void slotForwardInlineMsg();
00408 void slotForwardAttachedMsg();
00409 void slotForwardDigestMsg();
00410 void slotRedirectMsg();
00411 void slotCustomForwardMsg( int tid );
00412 void slotNoQuoteReplyToMsg();
00413 void slotSubjectFilter();
00414 void slotMailingListFilter();
00415 void slotFromFilter();
00416 void slotToFilter();
00417 void slotPrintMsg();
00418 void slotCreateTodo();
00419
00420 void slotConfigChanged();
00422 void slotFolderRemoved( KMFolder *folder );
00423
00425 void slotShowBusySplash();
00428 void showOfflinePage();
00429
00430 private:
00432 QString overrideEncoding() const;
00433
00434 void initializeIMAPActions( bool setState );
00435
00439 KMail::ImapAccountBase* findCurrentImapAccountBase();
00440
00444 QString findCurrentImapPath();
00445
00446 void setupFolderView();
00447
00448 private:
00449
00450 KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00451 *mDeleteThreadAction, *mSaveAsAction, *mEditAction, *mUseAction,
00452 *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00453 *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00454 *mCreateTodoAction, *mFavoritesCheckMailAction;
00455
00456 KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00457 *mReplyListAction,
00458 *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00459 *mRedirectAction, *mNoQuoteReplyAction;
00460 KActionMenu *mReplyActionMenu;
00461 KActionMenu *mForwardActionMenu;
00462
00463 KActionMenu *mFilterMenu;
00464 KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00465 *mListFilterAction;
00466 KActionMenu *mTemplateMenu;
00467
00468
00469 KActionMenu *mCustomReplyActionMenu,
00470 *mCustomReplyAllActionMenu,
00471 *mCustomForwardActionMenu;
00472
00473 QSignalMapper *mCustomReplyMapper,
00474 *mCustomReplyAllMapper,
00475 *mCustomForwardMapper;
00476
00477 KActionMenu *mStatusMenu, *mThreadStatusMenu,
00478 *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00479 KAction *mMarkThreadAsNewAction;
00480 KAction *mMarkThreadAsReadAction;
00481 KAction *mMarkThreadAsUnreadAction;
00482 KToggleAction *mToggleThreadTodoAction;
00483 KToggleAction *mToggleThreadFlagAction;
00484 KToggleAction *mToggleTodoAction;
00485 KToggleAction *mToggleFlagAction;
00486
00487 KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00488
00490 KRadioAction* mUnreadColumnToggle;
00491 KRadioAction* mUnreadTextToggle;
00492 KToggleAction* mTotalColumnToggle;
00493 KToggleAction* mSizeColumnToggle;
00494
00495 KToggleAction *mToggleShowQuickSearchAction;
00496
00497 KMFolderTree *mFolderTree;
00498 KMail::FavoriteFolderView *mFavoriteFolderView;
00499 QWidget *mFolderView;
00500 QSplitter *mFolderViewParent;
00501 KMReaderWin *mMsgView;
00502 QSplitter *mPanner1, *mPanner2;
00503 QSplitter *mFolderViewSplitter;
00504 KMHeaders *mHeaders;
00505 QVBox *mSearchAndHeaders;
00506 KToolBar *mSearchToolBar;
00507 KMail::HeaderListQuickSearch *mQuickSearchLine;
00508 QGuardedPtr<KMFolder> mFolder;
00509 KMFolder *mTemplateFolder;
00510 QPopupMenu *mViewMenu, *mBodyPartsMenu;
00511 KAction *mlistFilterAction;
00512 bool mIntegrated;
00513 bool mBeepOnNew;
00514 bool mConfirmEmpty;
00515 QString mStartupFolder;
00516 int mMessageStatusId;
00517 QValueList<int> mPanner1Sep, mPanner2Sep;
00518 KURL mUrlCurrent;
00519 QPopupMenu *mActMenu;
00520 QPopupMenu *mSendMenu;
00521 QPopupMenu *mFileMenu;
00522
00523 bool mLongFolderList;
00524
00525 bool mStartupDone;
00526 KMMenuToFolder mMenuToFolder;
00527 int copyId, moveId, htmlId, threadId;
00528 bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00529 mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00530 mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00531 bool mEnableFavoriteFolderView;
00532
00533
00534 KMail::SearchWindow *mSearchWin;
00535
00536 KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00537 *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00538 *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00539 *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00540 *mRemoveDuplicatesAction;
00541 KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00542 KToggleAction *mThreadBySubjectAction;
00543 KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00544
00545 QTimer *menutimer;
00546 QTimer *mShowBusySplashTimer;
00547
00548 QGuardedPtr<KMail::Vacation> mVacation;
00549 #if !defined(NDEBUG)
00550 QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00551 #endif
00552 KActionCollection *mActionCollection;
00553 KActionSeparator *mToolbarActionSeparator;
00554 QVBoxLayout *mTopLayout;
00555 bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00556 QPtrList<KAction> mFilterMenuActions;
00557 QPtrList<KAction> mFilterTBarActions;
00558 QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00559 QDict<FolderShortcutCommand> mFolderShortcutCommands;
00560 QGuardedPtr <KMail::FolderJob> mJob;
00561
00562 QValueVector<QString> mCustomTemplates;
00563 QPtrList<KAction> mCustomTemplateActions;
00564
00565 KMSystemTray *mSystemTray;
00566 KConfig *mConfig;
00567 KXMLGUIClient *mGUIClient;
00568
00569 static QValueList<KMMainWidget*>* s_mainWidgetList;
00570 };
00571
00572 #endif
00573