00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __KMMAINWIDGET
00009 #define __KMMAINWIDGET
00010
00011 #include <kurl.h>
00012 #include <kxmlguiclient.h>
00013 #include <qlistview.h>
00014 #include <qvbox.h>
00015
00016 #include "kmreaderwin.h"
00017 #include "kmkernel.h"
00018 #include <kaction.h>
00019
00020 class QVBoxLayout;
00021 class QSplitter;
00022
00023 class KActionMenu;
00024 class KActionCollection;
00025 class KConfig;
00026 class KSelectAction;
00027 class KRadioAction;
00028 class KToggleAction;
00029 class KMenuBar;
00030
00031 class KMFolder;
00032 class KMFolderDir;
00033 class KMFolderTree;
00034 class KMFolderTreeItem;
00035 class KMHeaders;
00036 class KMCommand;
00037 class KMMetaFilterActionCommand;
00038 class KMMessage;
00039 class KMFolder;
00040 class KMAccount;
00041 class KMFldSearch;
00042 class KMSystemTray;
00043
00044 template <typename T> class QValueList;
00045 template <typename T, typename S> class QMap;
00046 template <typename T> class QGuardedPtr;
00047
00048 namespace KIO {
00049 class Job;
00050 }
00051
00052 namespace KMail {
00053 class Vacation;
00054 class AttachmentStrategy;
00055 class HeaderStrategy;
00056 class HeaderStyle;
00057 class FolderJob;
00058 class HeaderListQuickSearch;
00059 class ImapAccountBase;
00060 }
00061
00062 typedef QMap<int,KMFolder*> KMMenuToFolder;
00063
00064
00065 class KMMainWidget : public QWidget
00066 {
00067 Q_OBJECT
00068
00069 public:
00070 KMMainWidget(QWidget *parent, const char *name,
00071 KXMLGUIClient *aGUIClient,
00072 KActionCollection *actionCollection,
00073 KConfig*config = KMKernel::config() );
00074 virtual ~KMMainWidget();
00075 void destruct();
00076
00078 virtual void readPreConfig(void);
00079
00081 virtual void readFolderConfig(void);
00082
00084 virtual void writeFolderConfig(void);
00085
00087 virtual void readConfig(void);
00088
00090 virtual void writeConfig(void);
00091
00093 KMReaderWin* messageView(void) const { return mMsgView; }
00094 KMFolderTree* folderTree(void) const { return mFolderTree; }
00095
00096 static void cleanup();
00097
00098 KAction *action( const char *name ) { return mActionCollection->action( name ); }
00099 KAction *replyAction() const { return mReplyAction; }
00100 KAction *replyAuthorAction() const { return mReplyAuthorAction; }
00101 KAction *replyAllAction() const { return mReplyAllAction; }
00102 KAction *replyListAction() const { return mReplyListAction; }
00103 KActionMenu * replyMenu() const { return mReplyActionMenu; }
00104 KActionMenu *forwardMenu() const { return mForwardActionMenu; }
00105 KAction *forwardAction() const { return mForwardAction; }
00106 KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
00107 KAction *redirectAction() const { return mRedirectAction; }
00108 KAction *bounceAction() const { return mBounceAction; }
00109 KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
00110 KActionMenu *filterMenu() const { return mFilterMenu; }
00111 KAction *printAction() const { return mPrintAction; }
00112 KAction *trashAction() const { return mTrashAction; }
00113 KAction *deleteAction() const { return mDeleteAction; }
00114 KAction *saveAsAction() const { return mSaveAsAction; }
00115 KAction *editAction() const { return mEditAction; }
00116 KAction *sendAgainAction() const { return mSendAgainAction; }
00117 KAction *applyFiltersAction() const { return mSendAgainAction; }
00118 KAction *findInMessageAction() const { return mFindInMessageAction; }
00119 KAction *saveAttachmentsAction() const { return mSaveAttachmentsAction; }
00120 KAction *openAction() const { return mOpenAction; }
00121
00122 KActionMenu *statusMenu() const{ return mStatusMenu; }
00123 KActionMenu *threadStatusMenu() const { return mThreadStatusMenu; }
00124 KActionMenu *moveActionMenu() const{ return mMoveActionMenu; }
00125 KActionMenu *mopyActionMenu() const { return mCopyActionMenu; }
00126 KActionMenu *applyFilterActionsMenu() const { return mApplyFilterActionsMenu; }
00127
00128 KToggleAction *watchThreadAction() const { return mWatchThreadAction; }
00129 KToggleAction *ignoreThreadAction() const { return mIgnoreThreadAction; }
00130
00131
00132 KToggleAction *toggleFixFontAction() { return mMsgView->toggleFixFontAction(); }
00133 KAction *viewSourceAction() { return mMsgView->viewSourceAction(); }
00134
00135 KMHeaders *headers() const { return mHeaders; }
00136 void toggleSystemTray();
00137
00138 void updateListFilterAction();
00139
00141 static QPtrList<KMMainWidget>* mainWidgetList() { return s_mainWidgetList; }
00142
00143 KMSystemTray *systray() const;
00144
00145 void modifyFolder( KMFolderTreeItem* folderItem );
00146
00147 public slots:
00148 void slotMoveMsgToFolder( KMFolder *dest);
00149 void slotTrashMsg();
00150
00151 virtual void show();
00152 virtual void hide();
00154 void slotCheckMail();
00155
00160 void folderSelected( KMFolder*, bool forceJumpToUnread = false );
00161
00163 void folderSelected();
00164
00166 void folderSelectedUnread( KMFolder* );
00167
00168 void slotMsgSelected(KMMessage*);
00169 void slotMsgChanged();
00170
00172 void slotSelectFolder(KMFolder*);
00173 void slotSelectMessage(KMMessage*);
00174
00175 void slotReplaceMsgByUnencryptedVersion();
00176
00178 void updateMessageMenu();
00180 void startUpdateMessageActionsTimer();
00182 void updateMessageActions();
00183
00185 void slotSubscriptionDialog();
00186
00188 void slotLocalSubscriptionDialog();
00189
00191 void slotFolderTreeColumnsChanged();
00192
00194 void clearFilterActions();
00195 void initializeFilterActions();
00196
00198 void initializeIMAPActions() { initializeIMAPActions( true ); }
00199
00200 signals:
00201 void messagesTransfered( bool );
00202 void captionChangeRequest( const QString & caption );
00203
00204 protected:
00205 void setupActions();
00206 void createWidgets();
00207 void activatePanners();
00208 void showMsg(KMReaderWin *win, KMMessage *msg);
00209 void updateFileMenu();
00210
00211 KActionCollection * actionCollection() { return mActionCollection; }
00212
00213
00214 KRadioAction * actionForAttachmentStrategy( const KMail::AttachmentStrategy * );
00215
00219 KConfig * config();
00220
00221 protected slots:
00222 void slotCheckOneAccount(int);
00223 void slotMailChecked( bool newMail, bool sendOnCheck,
00224 const QMap<QString, int> & newInFolder );
00225 void getAccountMenu();
00226 void slotHelp();
00227 void slotNewMailReader();
00228 void slotFilter();
00229 void slotPopFilter();
00230 void slotAddrBook();
00231 void slotImport();
00232 void slotViewChange();
00233 void slotCompose();
00234 void slotPostToML();
00235 void slotModifyFolder();
00236 void slotExpireFolder();
00237 void slotExpireAll();
00238 void slotMarkAllAsRead();
00239 void slotRemoveFolder();
00240 void slotEmptyFolder();
00241 void slotCompactFolder();
00242 void slotRefreshFolder();
00243 void slotTroubleshootFolder();
00244 void slotCompactAll();
00245 void slotOverrideHtml();
00246 void slotOverrideThread();
00247 void slotToggleSubjectThreading();
00248 void slotMessageQueuedOrDrafted();
00249 void slotEditMsg();
00250
00251 void slotDeleteMsg( bool confirmDelete = true );
00252 void slotUndo();
00253 void slotReadOn();
00254 void slotSaveMsg();
00255 void slotSaveTextAs();
00256 void slotOpenMsg();
00257 void slotSaveAttachments();
00258 void slotMoveMsg();
00259
00260 void slotCopyMsgToFolder( KMFolder *dest);
00261 void slotCopyMsg();
00262 void slotResendMsg();
00263 void slotEditVacation();
00264 void slotStartCertManager();
00265 void slotStartWatchGnuPG();
00266 void slotApplyFilters();
00267 void slotExpandThread();
00268 void slotExpandAllThreads();
00269 void slotCollapseThread();
00270 void slotCollapseAllThreads();
00271 void slotSetMsgStatusNew();
00272 void slotSetMsgStatusUnread();
00273 void slotSetMsgStatusRead();
00274 void slotSetMsgStatusReplied();
00275 void slotSetMsgStatusForwarded();
00276 void slotSetMsgStatusQueued();
00277 void slotSetMsgStatusTodo();
00278 void slotSetMsgStatusSent();
00279 void slotSetMsgStatusFlag();
00280 void slotSetMsgStatusSpam();
00281 void slotSetMsgStatusHam();
00282 void slotSetThreadStatusNew();
00283 void slotSetThreadStatusUnread();
00284 void slotSetThreadStatusRead();
00285 void slotSetThreadStatusReplied();
00286 void slotSetThreadStatusForwarded();
00287 void slotSetThreadStatusQueued();
00288 void slotSetThreadStatusSent();
00289 void slotSetThreadStatusFlag();
00290 void slotSetThreadStatusSpam();
00291 void slotSetThreadStatusHam();
00292 void slotSetThreadStatusWatched();
00293 void slotSetThreadStatusIgnored();
00294 void slotToggleUnread();
00295 void slotToggleTotalColumn();
00296
00297
00298
00299
00300
00301
00302 void slotIconicAttachments();
00303 void slotSmartAttachments();
00304 void slotInlineAttachments();
00305 void slotHideAttachments();
00306
00307 void slotCycleAttachmentStrategy();
00308 void slotSendQueued();
00309 void slotOnlineStatus();
00310 void slotUpdateOnlineStatus( int );
00311 void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&);
00312 void slotMarkAll();
00313 void slotMemInfo();
00314 void slotSearch();
00315 void slotSearchClosed();
00316 void slotFind();
00317 void slotIntro();
00318 void slotShowStartupFolder();
00320 void slotShowTip();
00321 void slotAntiSpamWizard();
00322 void slotAntiVirusWizard();
00323 void slotFilterLogViewer();
00324
00326 void slotNextMessage();
00327 void slotNextUnreadMessage();
00328 void slotNextImportantMessage();
00329 void slotNextUnreadFolder();
00330 void slotPrevMessage();
00331 void slotPrevUnreadMessage();
00332 void slotPrevImportantMessage();
00333 void slotPrevUnreadFolder();
00334
00336 void slotDisplayCurrentMessage();
00337 void slotMsgActivated(KMMessage*);
00338
00340 void slotUpdateUndo();
00341
00343 virtual void moveSelectedToFolder( int menuId );
00345 virtual void copySelectedToFolder( int menuId );
00347 void updateFolderMenu();
00350 void updateMarkAsReadAction();
00351
00353 void slotToggleShowQuickSearch();
00354
00356 void slotEditNotifications();
00357 void slotEditKeys();
00358
00360 void slotChangeCaption(QListViewItem*);
00361 void removeDuplicates();
00362
00364 void slotReplyToMsg();
00365 void slotReplyAuthorToMsg();
00366 void slotReplyListToMsg();
00367 void slotReplyAllToMsg();
00368 void slotForwardMsg();
00369 void slotForwardAttachedMsg();
00370 void slotRedirectMsg();
00371 void slotBounceMsg();
00372 void slotNoQuoteReplyToMsg();
00373 void slotSubjectFilter();
00374 void slotMailingListFilter();
00375 void slotFromFilter();
00376 void slotToFilter();
00377 void slotPrintMsg();
00378
00379 void slotConfigChanged();
00380
00381 private:
00383 QString overrideEncoding() const;
00384
00385 void initializeIMAPActions( bool setState );
00386
00390 KMail::ImapAccountBase* findCurrentImapAccountBase();
00391
00395 QString findCurrentImapPath();
00396
00397 private:
00398
00399 KAction *mTrashAction, *mDeleteAction, *mSaveAsAction, *mEditAction,
00400 *mSendAgainAction, *mApplyFiltersAction, *mFindInMessageAction,
00401 *mSaveAttachmentsAction, *mOpenAction, *mSaveTextAsAction;
00402
00403 KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
00404 *mReplyListAction,
00405 *mForwardAction, *mForwardAttachedAction, *mRedirectAction,
00406 *mBounceAction, *mNoQuoteReplyAction;
00407 KActionMenu *mReplyActionMenu;
00408 KActionMenu *mForwardActionMenu;
00409
00410 KActionMenu *mFilterMenu;
00411 KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction,
00412 *mListFilterAction;
00413
00414 KActionMenu *mStatusMenu, *mThreadStatusMenu,
00415 *mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu;
00416 KAction *mMarkThreadAsNewAction;
00417 KAction *mMarkThreadAsReadAction;
00418 KAction *mMarkThreadAsUnreadAction;
00419 KToggleAction *mToggleThreadRepliedAction;
00420 KToggleAction *mToggleThreadForwardedAction;
00421 KToggleAction *mToggleThreadQueuedAction;
00422 KToggleAction *mToggleThreadSentAction;
00423 KToggleAction *mToggleThreadFlagAction;
00424 KAction *mMarkThreadAsSpamAction;
00425 KAction *mMarkThreadAsHamAction;
00426 KToggleAction *mToggleRepliedAction;
00427 KToggleAction *mToggleForwardedAction;
00428 KToggleAction *mToggleQueuedAction;
00429 KToggleAction *mToggleSentAction;
00430 KToggleAction *mToggleFlagAction;
00431 KAction *mMarkAsSpamAction;
00432 KAction *mMarkAsHamAction;
00433 KToggleAction *mToggleTodoAction;
00434
00435 KToggleAction *mWatchThreadAction, *mIgnoreThreadAction;
00436
00438 KRadioAction* mUnreadColumnToggle;
00439 KRadioAction* mUnreadTextToggle;
00440 KToggleAction* mTotalColumnToggle;
00441
00442 KToggleAction *mToggleShowQuickSearchAction;
00443 KAction *mSelectAllTextAction, *mCopyMsgTextAction;
00444 private:
00445 KMFolderTree *mFolderTree;
00446 KMReaderWin *mMsgView;
00447 QSplitter *mPanner1, *mPanner2;
00448 KMHeaders *mHeaders;
00449 QVBox *mSearchAndHeaders;
00450 KToolBar *mSearchToolBar;
00451 KMail::HeaderListQuickSearch *mQuickSearchLine;
00452 KMFolder *mFolder;
00453 QPopupMenu *mViewMenu, *mBodyPartsMenu;
00454 KAction *mlistFilterAction;
00455 bool mIntegrated;
00456 bool mBeepOnNew;
00457 bool mConfirmEmpty;
00458 QString mStartupFolder;
00459 int mMessageStatusId;
00460 QValueList<int> mPanner1Sep, mPanner2Sep;
00461 KURL mUrlCurrent;
00462 QPopupMenu *mActMenu;
00463 QPopupMenu *mFileMenu;
00464
00465 bool mLongFolderList;
00466
00467 bool mStartupDone;
00468 KMMenuToFolder mMenuToFolder;
00469 int copyId, moveId, htmlId, threadId;
00470 bool mHtmlPref, mThreadPref, mFolderHtmlPref, mFolderThreadPref,
00471 mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow;
00472
00473
00474 KMFldSearch *mSearchWin;
00475
00476 KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction,
00477 *mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction,
00478 *mMarkAllAsReadAction, *mTroubleshootFolderAction;
00479 KToggleAction *mPreferHtmlAction, *mThreadMessagesAction;
00480 KToggleAction *mThreadBySubjectAction;
00481 KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction;
00482
00483 QTimer *menutimer;
00484
00485 QGuardedPtr<KMail::Vacation> mVacation;
00486 KActionCollection *mActionCollection;
00487 QVBoxLayout *mTopLayout;
00488 bool mDestructed, mForceJumpToUnread;
00489 QPtrList<KAction> mFilterMenuActions;
00490 QPtrList<KAction> mFilterTBarActions;
00491 QPtrList<KMMetaFilterActionCommand> mFilterCommands;
00492 QGuardedPtr <KMail::FolderJob> mJob;
00493
00494 KMSystemTray *mSystemTray;
00495 KConfig *mConfig;
00496 KXMLGUIClient *mGUIClient;
00497
00498 static QPtrList<KMMainWidget>* s_mainWidgetList;
00499 };
00500
00501 #endif
00502