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 "messageactions.h"
00034 #include <kaction.h>
00035
00036 class QVBoxLayout;
00037 class QSplitter;
00038 class QSignalMapper;
00039
00040 class KActionMenu;
00041 class KActionCollection;
00042 class KConfig;
00043 class KRadioAction;
00044 class KToggleAction;
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 QValueList;
00062 template <typename T, typename S> class QMap;
00063 template <typename T> class QGuardedPtr;
00064
00065 namespace KIO {
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 QMap<int,KMFolder*> KMMenuToFolder;
00080
00081
00082 class KDE_EXPORT KMMainWidget : public QWidget
00083 {
00084 Q_OBJECT
00085
00086 public:
00087 KMMainWidget(QWidget *parent, const char *name,
00088 KXMLGUIClient *aGUIClient,
00089 KActionCollection *actionCollection,
00090 KConfig*config = KMKernel::config() );
00091 virtual ~KMMainWidget();
00092 void destruct();
00093
00095 virtual void readPreConfig(void);
00096
00098 virtual void readFolderConfig(void);
00099
00101 virtual void writeFolderConfig(void);
00102
00104 virtual void readConfig(void);
00105
00107 virtual void writeConfig(void);
00108
00110 KMReaderWin* messageView(void) const { return mMsgView; }
00111 KMFolderTree* folderTree(void) const { return mFolderTree; }
00112 KMail::FavoriteFolderView *favoriteFolderView() const { return mFavoriteFolderView; }
00113
00114 static void cleanup();
00115
00116 KAction *action( const char *name ) { return mActionCollection->action( name ); }
00117 KActionMenu *customReplyAction() const { return mCustomReplyActionMenu; }
00118 KActionMenu *customReplyAllAction() const { return mCustomReplyAllActionMenu; }
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 KActionMenu *filterMenu() const { return mFilterMenu; }
00126 KAction *printAction() const { return mPrintAction; }
00127 KAction *trashAction() const { return mTrashAction; }
00128 KAction *deleteAction() const { return mDeleteAction; }
00129 KAction *trashThreadAction() const { return mTrashThreadAction; }
00130 KAction *deleteThreadAction() const { return mDeleteThreadAction; }
00131 KAction *saveAsAction() const { return mSaveAsAction; }
00132 KAction *editAction() const { return mMsgActions->editAction(); }
00133 KAction *useAction() const { return mUseAction; }
00134 KAction *sendAgainAction() const { return mSendAgainAction; }
00135 KAction *applyAllFiltersAction() const { return mApplyAllFiltersAction; }
00136 KAction *findInMessageAction() const { return mFindInMessageAction; }
00137 KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00138 KAction *openAction() const { return mOpenAction; }
00139 KAction *viewSourceAction() const { return mViewSourceAction; }
00140 KMail::MessageActions *messageActions() const { return mMsgActions; }
00141
00142 KActionMenu *statusMenu() const{ return mMsgActions->messageStatusMenu(); }
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
00178 void setupForwardingActionsList();
00179
00180 KStatusBarLabel* vacationScriptIndicator() const { return mVacationScriptIndicator; }
00181 void updateVactionScriptStatus() { updateVactionScriptStatus( mVacationIndicatorActive ); }
00182
00183 public slots:
00184 void slotMoveMsgToFolder( KMFolder *dest);
00185 void slotTrashMsg();
00186
00187 virtual void show();
00188 virtual void hide();
00190 void slotCheckMail();
00191
00196 void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00197
00199 void folderSelected();
00200
00202 void folderSelectedUnread( KMFolder* );
00203
00204 void slotMsgSelected( KMMessage * );
00208 void slotMsgActivated( KMMessage * );
00209
00210 void slotMsgChanged();
00211
00213 void slotSelectFolder(KMFolder*);
00214 void slotSelectMessage(KMMessage*);
00215
00216 void slotReplaceMsgByUnencryptedVersion();
00217
00219 void updateMessageMenu();
00221 void startUpdateMessageActionsTimer();
00223 void updateMessageActions();
00224
00226 void slotSubscriptionDialog();
00227
00229 void slotLocalSubscriptionDialog();
00230
00232 void slotFolderTreeColumnsChanged();
00233
00235 void clearFilterActions();
00236 void initializeFilterActions();
00237
00239 void initializeIMAPActions() { initializeIMAPActions( true ); }
00240
00242 void initializeFolderShortcutActions();
00243
00245 void slotShortcutChanged( KMFolder *folder );
00246
00247 void updateCustomTemplateMenus();
00248 void slotEditVacation();
00249
00250 signals:
00251 void messagesTransfered( bool );
00252 void captionChangeRequest( const QString & caption );
00253
00254 protected:
00255 void setupActions();
00256 void createWidgets();
00257 void activatePanners();
00258 void showMsg( KMReaderWin *win, KMMessage *msg );
00259 void updateFileMenu();
00260 void newFromTemplate( KMMessage *msg );
00261
00262 KActionCollection * actionCollection() const { return mActionCollection; }
00263
00267 KConfig * config();
00268
00269 protected slots:
00270 void slotCheckOneAccount(int);
00271 void slotMailChecked( bool newMail, bool sendOnCheck,
00272 const QMap<QString, int> & newInFolder );
00273 void getAccountMenu();
00274 void getTransportMenu();
00275 void slotHelp();
00276 void slotFilter();
00277 void slotPopFilter();
00278 void slotManageSieveScripts();
00279 void slotAddrBook();
00280 void slotImport();
00281 void slotViewChange();
00282 void slotCompose();
00283 void slotPostToML();
00284 void slotModifyFolder();
00285 void slotFolderMailingListProperties();
00286 void slotFolderShortcutCommand();
00287 void slotExpireFolder();
00288 void slotExpireAll();
00289 void slotInvalidateIMAPFolders();
00290 void slotMarkAllAsRead();
00291 void slotArchiveFolder();
00292 void slotRemoveFolder();
00293 void slotEmptyFolder();
00294 void slotCompactFolder();
00295 void slotRefreshFolder();
00296 void slotTroubleshootFolder();
00297 void slotCompactAll();
00298 void slotOverrideHtml();
00299 void slotOverrideHtmlLoadExt();
00300 void slotOverrideThread();
00301 void slotToggleSubjectThreading();
00302 void slotMessageQueuedOrDrafted();
00303 void slotUseTemplate();
00304
00305 void slotDeleteMsg( bool confirmDelete = true );
00306 void slotTrashThread();
00307 void slotDeleteThread( bool confirmDelete = true );
00308 void slotUndo();
00309 void slotReadOn();
00310 void slotSaveMsg();
00311 void slotOpenMsg();
00312 void slotSaveAttachments();
00313 void slotJumpToFolder();
00314 void slotMoveMsg();
00315
00316 void slotCopyMsgToFolder( KMFolder *dest);
00317 void slotCopyMsg();
00318 void slotResendMsg();
00319 void slotCheckVacation();
00320 void slotDebugSieve();
00321 void slotStartCertManager();
00322 void slotStartWatchGnuPG();
00323 void slotApplyFilters();
00324 void slotExpandThread();
00325 void slotExpandAllThreads();
00326 void slotCollapseThread();
00327 void slotCollapseAllThreads();
00328 void slotShowMsgSrc();
00329 void slotSetThreadStatusNew();
00330 void slotSetThreadStatusUnread();
00331 void slotSetThreadStatusRead();
00332 void slotSetThreadStatusTodo();
00333 void slotSetThreadStatusFlag();
00334 void slotSetThreadStatusWatched();
00335 void slotSetThreadStatusIgnored();
00336 void slotToggleUnread();
00337 void slotToggleTotalColumn();
00338 void slotToggleSizeColumn();
00339 void slotSendQueued();
00340 void slotSendQueuedVia( int item );
00341 void slotOnlineStatus();
00342 void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00343 void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00344 void slotMarkAll();
00345 void slotMemInfo();
00346 void slotSearch();
00347 void slotSearchClosed();
00348 void slotFind();
00349 void slotIntro();
00350 void slotShowStartupFolder();
00352 void slotShowTip();
00353 void slotAntiSpamWizard();
00354 void slotAntiVirusWizard();
00355 void slotFilterLogViewer();
00356
00358 void slotNextMessage();
00359 void slotNextUnreadMessage();
00360 void slotNextImportantMessage();
00361 void slotNextUnreadFolder();
00362 void slotPrevMessage();
00363 void slotPrevUnreadMessage();
00364 void slotPrevImportantMessage();
00365 void slotPrevUnreadFolder();
00366
00368 void slotDisplayCurrentMessage();
00369
00370 void slotShowNewFromTemplate();
00371 void slotNewFromTemplate( int );
00372
00374 void slotUpdateUndo();
00375
00377 virtual void moveSelectedToFolder( int menuId );
00379 virtual void copySelectedToFolder( int menuId );
00381 void updateFolderMenu();
00384 void updateMarkAsReadAction();
00385
00387 void slotToggleShowQuickSearch();
00388
00390 void slotEditNotifications();
00391 void slotEditKeys();
00392
00394 void slotChangeCaption(QListViewItem*);
00395 void removeDuplicates();
00396
00397 void slotCustomReplyToMsg( int tid );
00398 void slotCustomReplyAllToMsg( int tid );
00399 void slotForwardInlineMsg();
00400 void slotForwardAttachedMsg();
00401 void slotForwardDigestMsg();
00402 void slotRedirectMsg();
00403 void slotCustomForwardMsg( int tid );
00404 void slotNoQuoteReplyToMsg();
00405 void slotSubjectFilter();
00406 void slotMailingListFilter();
00407 void slotFromFilter();
00408 void slotToFilter();
00409 void slotPrintMsg();
00410 void slotCreateTodo();
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
00443 void setupForwardActions();
00444
00445 void setupFolderView();
00446
00447 void removeFolder(KMFolder *folder);
00448 void removeFolders(const QValueList<QGuardedPtr<KMFolder> > &folders);
00449
00450 private slots:
00451 void slotRequestFullSearchFromQuickSearch();
00452 void updateVactionScriptStatus( bool active );
00453
00454 private:
00455
00456 KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00457 *mDeleteThreadAction, *mSaveAsAction, *mUseAction,
00458 *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00459 *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00460 *mFavoritesCheckMailAction,
00461 *mMoveMsgToFolderAction;
00462
00463 KAction *mPrintAction,
00464 *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
00465 *mRedirectAction;
00466 KActionMenu *mForwardActionMenu;
00467
00468 KActionMenu *mFilterMenu;
00469 KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00470 *mListFilterAction;
00471 KActionMenu *mTemplateMenu;
00472
00473
00474 KActionMenu *mCustomReplyActionMenu,
00475 *mCustomReplyAllActionMenu,
00476 *mCustomForwardActionMenu;
00477
00478 QSignalMapper *mCustomReplyMapper,
00479 *mCustomReplyAllMapper,
00480 *mCustomForwardMapper;
00481
00482 KActionMenu *mThreadStatusMenu,
00483 *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00484 KAction *mMarkThreadAsNewAction;
00485 KAction *mMarkThreadAsReadAction;
00486 KAction *mMarkThreadAsUnreadAction;
00487 KToggleAction *mToggleThreadTodoAction;
00488 KToggleAction *mToggleThreadFlagAction;
00489
00490 KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00491
00493 KRadioAction* mUnreadColumnToggle;
00494 KRadioAction* mUnreadTextToggle;
00495 KToggleAction* mTotalColumnToggle;
00496 KToggleAction* mSizeColumnToggle;
00497
00498 KToggleAction *mToggleShowQuickSearchAction;
00499
00500 KMFolderTree *mFolderTree;
00501 KMail::FavoriteFolderView *mFavoriteFolderView;
00502 QWidget *mFolderView;
00503 QSplitter *mFolderViewParent;
00504 KMReaderWin *mMsgView;
00505 QSplitter *mPanner1, *mPanner2;
00506 QSplitter *mFolderViewSplitter;
00507 KMHeaders *mHeaders;
00508 QVBox *mSearchAndHeaders;
00509 KToolBar *mSearchToolBar;
00510 KMail::HeaderListQuickSearch *mQuickSearchLine;
00511 QGuardedPtr<KMFolder> mFolder;
00512 KMFolder *mTemplateFolder;
00513 QPopupMenu *mViewMenu, *mBodyPartsMenu;
00514 KAction *mlistFilterAction;
00515 bool mIntegrated;
00516 bool mBeepOnNew;
00517 bool mConfirmEmpty;
00518 QString mStartupFolder;
00519 int mMessageStatusId;
00520 QValueList<int> mPanner1Sep, mPanner2Sep;
00521 KURL mUrlCurrent;
00522 QPopupMenu *mActMenu;
00523 QPopupMenu *mSendMenu;
00524 QPopupMenu *mFileMenu;
00525
00526 bool mLongFolderList;
00527
00528 bool mStartupDone;
00529 KMMenuToFolder mMenuToFolder;
00530 int copyId, moveId, htmlId, threadId;
00531 bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00532 mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00533 mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00534 bool mEnableFavoriteFolderView;
00535
00536
00537 KMail::SearchWindow *mSearchWin;
00538
00539 KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00540 *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00541 *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00542 *mFolderShortCutCommandAction, *mTroubleshootFolderAction,
00543 *mRemoveDuplicatesAction, *mArchiveFolderAction;
00544 KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction, *mThreadMessagesAction;
00545 KToggleAction *mThreadBySubjectAction;
00546 KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00547
00548 QTimer *menutimer;
00549 QTimer *mShowBusySplashTimer;
00550
00551 QGuardedPtr<KMail::Vacation> mVacation;
00552 #if !defined(NDEBUG)
00553 QGuardedPtr<KMail::SieveDebugDialog> mSieveDebugDialog;
00554 #endif
00555 KActionCollection *mActionCollection;
00556 KActionSeparator *mToolbarActionSeparator;
00557 QVBoxLayout *mTopLayout;
00558 bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00559 QPtrList<KAction> mFilterMenuActions;
00560 QPtrList<KAction> mFilterTBarActions;
00561 QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00562 QDict<FolderShortcutCommand> mFolderShortcutCommands;
00563 QGuardedPtr <KMail::FolderJob> mJob;
00564
00565 QValueVector<QString> mCustomTemplates;
00566 QPtrList<KAction> mCustomTemplateActions;
00567
00568 KMSystemTray *mSystemTray;
00569 KConfig *mConfig;
00570 KXMLGUIClient *mGUIClient;
00571
00572 KMail::MessageActions *mMsgActions;
00573
00574 static QValueList<KMMainWidget*>* s_mainWidgetList;
00575
00576 KStatusBarLabel *mVacationScriptIndicator;
00577 bool mVacationIndicatorActive;
00578 };
00579
00580 #endif
00581