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 "kmail_export.h"
00025 #include "kmreaderwin.h"
00026 #include "kmkernel.h"
00027
00028 #include <kurl.h>
00029 #include <kxmlguiclient.h>
00030 #include "messageactions.h"
00031 #include <kaction.h>
00032 #include <kactioncollection.h>
00033 #include <kvbox.h>
00034
00035 #include <QList>
00036 #include <QVBoxLayout>
00037 #include <q3listview.h>
00038 #include <QMenu>
00039 #include <QHash>
00040 #include <QPointer>
00041
00042 class QVBoxLayout;
00043 class QSplitter;
00044 class QSignalMapper;
00045 class QToolBar;
00046
00047 class KActionMenu;
00048 class KConfig;
00049 class KToggleAction;
00050 class K3ListViewSearchLine;
00051
00052 class KMFolder;
00053 class KMFolderTree;
00054 class KMFolderTreeItem;
00055 class KMMetaFilterActionCommand;
00056 class FolderShortcutCommand;
00057 class KMMessage;
00058 class KMFolder;
00059 class KMSystemTray;
00060 class KMHeaders;
00061 class KMMessageTagDescription;
00062 typedef QPair<KMMessageTagDescription*,KAction*> MessageTagPtrPair;
00063 class CustomTemplatesMenu;
00064
00065 template <typename T> class QList;
00066 template <typename T, typename S> class QMap;
00067 template <typename T> class QPointer;
00068
00069 namespace KIO {
00070 class Job;
00071 }
00072
00073 namespace KMail {
00074 class Vacation;
00075 class SieveDebugDialog;
00076 class FolderJob;
00077 class HeaderListQuickSearch;
00078 class SearchWindow;
00079 class ImapAccountBase;
00080 class FavoriteFolderView;
00081 class StatusBarLabel;
00082 }
00083
00084 typedef QMap<QAction*,KMFolder*> KMMenuToFolder;
00085
00086 class KMAIL_EXPORT KMMainWidget : public QWidget
00087 {
00088 Q_OBJECT
00089
00090 public:
00091 typedef QList<KMMainWidget*> PtrList;
00092
00093 KMMainWidget(QWidget *parent, KXMLGUIClient *aGUIClient,
00094 KActionCollection *actionCollection,
00095 KConfig *config = KMKernel::config() );
00096 virtual ~KMMainWidget();
00097 void destruct();
00098
00100 virtual void readPreConfig();
00101
00103 virtual void readFolderConfig();
00104
00106 virtual void writeFolderConfig();
00107
00109 virtual void readConfig();
00110
00112 virtual void writeConfig();
00113
00115 KMReaderWin* messageView() const { return mMsgView; }
00116 KMFolderTree* folderTree() const { return mFolderTree; }
00117 KMail::FavoriteFolderView *favoriteFolderView() const { return mFavoriteFolderView; }
00118
00119 static void cleanup();
00120
00121 QAction *action( const char *name ) { return mActionCollection->action( name ); }
00122 KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00123 KAction *forwardAction() const { return mForwardAction; }
00124 KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00125 KAction *redirectAction() const { return mRedirectAction; }
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 mMsgActions->editAction(); }
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() const { return mViewSourceAction; }
00141 KMail::MessageActions *messageActions() const { return mMsgActions; }
00142
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
00160 static const PtrList *mainWidgetList();
00161
00162 KMSystemTray *systray() const;
00163
00167 QList<QAction*> actionList();
00168
00169 void modifyFolder( KMFolderTreeItem *folderItem );
00170
00171 QLabel* vacationScriptIndicator() const;
00172 void updateVactionScriptStatus() { updateVactionScriptStatus( mVacationIndicatorActive ); }
00173
00174 public slots:
00175 void slotMoveMsgToFolder( KMFolder *dest);
00176 void slotTrashMsg();
00177
00178 void slotCheckMail();
00179
00184 void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00185
00189 void folderSelected();
00190
00194 void folderSelectedUnread( KMFolder* );
00195
00196 void slotMsgSelected(KMMessage*);
00197 void slotMsgChanged();
00198
00202 void slotSelectFolder(KMFolder*);
00203 void slotSelectMessage(KMMessage*);
00204
00205 void slotReplaceMsgByUnencryptedVersion();
00206
00210 void updateMessageMenu();
00211
00215 void startUpdateMessageActionsTimer();
00216
00218 void updateMessageActions();
00219
00221 void slotSubscriptionDialog();
00222
00224 void slotLocalSubscriptionDialog();
00225
00227 void slotFolderTreeColumnsChanged();
00228
00230 void clearFilterActions();
00231 void initializeFilterActions();
00232
00234 void initializeIMAPActions() { initializeIMAPActions( true ); }
00235
00237 void initializeFolderShortcutActions();
00238
00240 void slotShortcutChanged( KMFolder *folder );
00241
00243 void clearMessageTagActions();
00244
00245 void initializeMessageTagActions();
00246
00248 void slotEditVacation();
00249
00252 void slotUpdateMessageTagList( const QString &aLabel );
00253
00254
00260 void updateMessageTagActions( const int aCount );
00261
00269 QList<KActionCollection*> actionCollections() const;
00270
00271 signals:
00272 void messagesTransfered( bool );
00273 void captionChangeRequest( const QString &caption );
00274
00275 protected:
00276 void setupActions();
00277 void createWidgets();
00278 void deleteWidgets();
00279 void layoutSplitters();
00280 void showMsg( KMReaderWin *win, KMMessage *msg );
00281 void updateFileMenu();
00282 void newFromTemplate( KMMessage *msg );
00283
00284
00285 void openFolder();
00286 void closeFolder();
00287
00288 virtual void showEvent( QShowEvent *event );
00289
00290 KActionCollection *actionCollection() const { return mActionCollection; }
00291
00297 KConfig *config();
00298
00299 protected slots:
00300 void slotCheckOneAccount( QAction* );
00301 void slotMailChecked( bool newMail, bool sendOnCheck,
00302 const QMap<QString, int> & newInFolder );
00303 void getAccountMenu();
00304 void getTransportMenu();
00305 void slotHelp();
00306 void slotFilter();
00307 void slotPopFilter();
00308 void slotManageSieveScripts();
00309 void slotAddrBook();
00310 void slotImport();
00311 void slotCompose();
00312 void slotPostToML();
00313 void slotModifyFolder();
00314 void slotFolderMailingListProperties();
00315 void slotFolderShortcutCommand();
00316 void slotExpireFolder();
00317 void slotExpireAll();
00318 void slotInvalidateIMAPFolders();
00319 void slotMarkAllAsRead();
00320 void slotRemoveFolder();
00321 void slotEmptyFolder();
00322 void slotCompactFolder();
00323 void slotRefreshFolder();
00324 void slotTroubleshootFolder();
00325 void slotTroubleshootMaildir();
00326 void slotCompactAll();
00327 void slotOverrideHtml();
00328 void slotOverrideHtmlLoadExt();
00329 void slotOverrideThread();
00330 void slotToggleSubjectThreading();
00331 void slotMessageQueuedOrDrafted();
00332 void slotUseTemplate();
00333
00334 void slotDeleteMsg( bool confirmDelete = true );
00335 void slotTrashThread();
00336 void slotDeleteThread( bool confirmDelete = true );
00337 void slotUndo();
00338 void slotReadOn();
00339 void slotSaveMsg();
00340 void slotOpenMsg();
00341 void slotSaveAttachments();
00342 void slotJumpToFolder();
00343 void slotMoveMsg();
00344
00345 void slotCopyMsgToFolder( KMFolder *dest);
00346 void slotCopyMsg();
00347 void slotResendMsg();
00348 void slotCheckVacation();
00349 void slotDebugSieve();
00350 void slotStartCertManager();
00351 void slotStartWatchGnuPG();
00352 void slotApplyFilters();
00353 void slotExpandThread();
00354 void slotExpandAllThreads();
00355 void slotCollapseThread();
00356 void slotCollapseAllThreads();
00357 void slotShowMsgSrc();
00358 void slotSetThreadStatusNew();
00359 void slotSetThreadStatusUnread();
00360 void slotSetThreadStatusRead();
00361 void slotSetThreadStatusImportant();
00362 void slotSetThreadStatusToAct();
00363 void slotSetThreadStatusWatched();
00364 void slotSetThreadStatusIgnored();
00365 void slotToggleUnread();
00366 void slotToggleTotalColumn();
00367 void slotToggleSizeColumn();
00368 void slotSendQueued();
00369 void slotSendQueuedVia( QAction* item );
00370 void slotOnlineStatus();
00371 void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
00372 void slotMsgPopup(KMMessage &msg, const KUrl &aUrl, const QPoint&);
00373 void slotMarkAll();
00374 void slotFocusQuickSearch();
00375 void slotSearch();
00376 void slotSearchClosed();
00377 void slotFind();
00378 void slotIntro();
00379 void slotShowStartupFolder();
00381 void slotShowTip();
00382 void slotAntiSpamWizard();
00383 void slotAntiVirusWizard();
00384 void slotFilterLogViewer();
00385 void slotAccountWizard();
00386
00388 void slotNextMessage();
00389 void slotNextUnreadMessage();
00390 void slotNextUnreadFolder();
00391 void slotPrevMessage();
00392 void slotPrevUnreadMessage();
00393 void slotPrevUnreadFolder();
00394
00396 void slotDisplayCurrentMessage();
00397 void slotMsgActivated( KMMessage* );
00398
00399 void slotShowNewFromTemplate();
00400 void slotNewFromTemplate( QAction* );
00401
00403 void slotUpdateUndo();
00404
00406 virtual void moveSelectedToFolder( QAction* );
00408 virtual void copySelectedToFolder( QAction* );
00410 void updateFolderMenu();
00415 void updateMarkAsReadAction();
00416
00420 void slotEditNotifications();
00421 void slotEditKeys();
00422
00424 void slotChangeCaption(Q3ListViewItem*);
00425 void removeDuplicates();
00426
00428 void slotCustomReplyToMsg( const QString &tmpl );
00429 void slotCustomReplyAllToMsg( const QString &tmpl );
00430 void slotForwardMsg();
00431 void slotForwardAttachedMsg();
00432 void slotRedirectMsg();
00433 void slotCustomForwardMsg( const QString &tmpl );
00434 void slotNoQuoteReplyToMsg();
00435 void slotSubjectFilter();
00436 void slotMailingListFilter();
00437 void slotFromFilter();
00438 void slotToFilter();
00439 void slotPrintMsg();
00440 void slotCreateTodo();
00441
00442 void slotConfigChanged();
00443
00447 void slotFolderRemoved( KMFolder *folder );
00448
00452 void folderClosed( KMFolder *folder );
00453
00455 void slotShowBusySplash();
00456
00461 void showOfflinePage();
00462
00463 void updateVactionScriptStatus( bool active );
00464
00465 private:
00467 QString overrideEncoding() const;
00468
00469 void initializeIMAPActions( bool setState );
00470
00475 KMail::ImapAccountBase* findCurrentImapAccountBase();
00476
00481 QString findCurrentImapPath();
00482
00484 void updateCustomTemplateMenus();
00485
00486 private slots:
00487 void slotRequestFullSearchFromQuickSearch();
00488
00489 private:
00490
00491 KAction *mTrashAction, *mDeleteAction, *mTrashThreadAction,
00492 *mDeleteThreadAction, *mSaveAsAction, *mUseAction,
00493 *mSendAgainAction, *mApplyAllFiltersAction, *mFindInMessageAction,
00494 *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction,
00495 *mFavoritesCheckMailAction,
00496 *mMoveMsgToFolderAction;
00497
00498 KAction *mPrintAction,
00499 *mForwardAction, *mForwardAttachedAction,
00500 *mRedirectAction;
00501 KActionMenu *mForwardActionMenu;
00502
00503 KActionMenu *mFilterMenu;
00504 KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00505 *mListFilterAction;
00506
00507 KAction *mNextMessageAction, *mPreviousMessageAction;
00508
00509
00510 KActionMenu *mTemplateMenu;
00511 CustomTemplatesMenu *mCustomTemplateMenus;
00512
00513 KActionMenu *mThreadStatusMenu,
00514 *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00515 KAction *mMarkThreadAsNewAction;
00516 KAction *mMarkThreadAsReadAction;
00517 KAction *mMarkThreadAsUnreadAction;
00518 KToggleAction *mToggleThreadImportantAction;
00519 KToggleAction *mToggleThreadToActAction;
00520 KToggleAction *mToggleThreadFlagAction;
00521 KToggleAction* mSizeColumnToggle;
00522
00523 KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00524
00526 KToggleAction* mUnreadColumnToggle;
00527 KToggleAction* mUnreadTextToggle;
00528 KToggleAction* mTotalColumnToggle;
00529
00530 KMail::HeaderListQuickSearch *mQuickSearchLine;
00531 KMail::FavoriteFolderView *mFavoriteFolderView;
00532 QPointer<KMFolder> mFolder;
00533 QWidget *mSearchAndTree;
00534 K3ListViewSearchLine *mFolderQuickSearch;
00535 KMFolderTree *mFolderTree;
00536 KMReaderWin *mMsgView;
00537 QSplitter *mSplitter1, *mSplitter2, *mFolderViewSplitter;
00538 KMHeaders *mHeaders;
00539 KVBox *mSearchAndHeaders;
00540 QWidget *mSearchToolBar;
00541 KMFolder *mTemplateFolder;
00542 QMenu *mViewMenu, *mBodyPartsMenu;
00543 KAction *mlistFilterAction;
00544 bool mIntegrated;
00545 bool mBeepOnNew;
00546 bool mConfirmEmpty;
00547 QString mStartupFolder;
00548 int mMessageStatusId;
00549 KUrl mUrlCurrent;
00550 QMenu *mActMenu;
00551 QMenu *mSendMenu;
00552 QMenu *mFileMenu;
00553 bool mLongFolderList;
00554 bool mStartupDone;
00555 bool mWasEverShown;
00556 KMMenuToFolder mMenuToFolder;
00557 int copyId, moveId, htmlId, threadId;
00558 bool mHtmlPref, mHtmlLoadExtPref, mThreadPref,
00559 mFolderHtmlPref, mFolderHtmlLoadExtPref, mFolderThreadPref,
00560 mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00561 bool mEnableFavoriteFolderView;
00562 bool mEnableFolderQuickSearch;
00563 bool mEnableQuickSearch;
00564
00565
00566 KMail::SearchWindow *mSearchWin;
00567
00568 KAction *mNewFolderAction, *mModifyFolderAction, *mRemoveFolderAction,
00569 *mExpireFolderAction, *mCompactFolderAction, *mRefreshFolderAction,
00570 *mEmptyFolderAction, *mMarkAllAsReadAction, *mFolderMailingListPropertiesAction,
00571 *mFolderShortCutCommandAction, *mTroubleshootFolderAction, *mRemoveDuplicatesAction,
00572 *mTroubleshootMaildirAction, *mPostToMailinglistAction;
00573 KToggleAction *mPreferHtmlAction, *mPreferHtmlLoadExtAction,
00574 *mThreadMessagesAction, *mThreadBySubjectAction;
00575 KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00576
00577 QTimer *menutimer;
00578 QTimer *mShowBusySplashTimer;
00579
00580 QPointer<KMail::Vacation> mVacation;
00581 #if !defined(NDEBUG)
00582 QPointer<KMail::SieveDebugDialog> mSieveDebugDialog;
00583 #endif
00584 KActionCollection *mActionCollection;
00585 QAction *mToolbarActionSeparator;
00586 QAction *mMessageTagToolbarActionSeparator;
00587 QVBoxLayout *mTopLayout;
00588 bool mDestructed, mForceJumpToUnread, mShowingOfflineScreen;
00589 QList<QAction*> mFilterMenuActions;
00590 QList<QAction*> mFilterTBarActions;
00591 QList<KMMetaFilterActionCommand*> mFilterCommands;
00592 QHash<QString,FolderShortcutCommand*> mFolderShortcutCommands;
00593 QPointer<KMail::FolderJob> mJob;
00594
00595 QList<MessageTagPtrPair> mMessageTagMenuActions;
00596 QList<QAction*> mMessageTagTBarActions;
00597 QSignalMapper *mMessageTagToggleMapper;
00598
00599 KMSystemTray *mSystemTray;
00600 KConfig *mConfig;
00601 KXMLGUIClient *mGUIClient;
00602
00603 KMail::MessageActions *mMsgActions;
00604
00605 bool mOpenedImapFolder;
00606
00607 KMail::StatusBarLabel *mVacationScriptIndicator;
00608 bool mVacationIndicatorActive;
00609 };
00610
00611 #endif
00612