You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
455 lines
14 KiB
455 lines
14 KiB
/* kmail main window |
|
* Copyright 2002 Don Sanders <sanders@kde.org> |
|
* Based on the work of Stefan Taferner <taferner@kde.org> |
|
* |
|
* License GPL |
|
*/ |
|
#ifndef __KMMAINWIDGET |
|
#define __KMMAINWIDGET |
|
|
|
#include <kurl.h> |
|
#include <qlistview.h> |
|
|
|
#include "kmreaderwin.h" //for inline actions |
|
#include "kmkernel.h" // for access to config |
|
#include <kaction.h> |
|
|
|
class QVBoxLayout; |
|
class QSplitter; |
|
class QTextCodec; |
|
|
|
class KActionMenu; |
|
class KActionCollection; |
|
class KConfig; |
|
class KSelectAction; |
|
class KRadioAction; |
|
class KToggleAction; |
|
class KProgressDialog; |
|
class KMenuBar; |
|
|
|
class KMFolder; |
|
class KMFolderDir; |
|
class KMFolderTree; |
|
class KMFolderTreeItem; |
|
class KMHeaders; |
|
class KMCommand; |
|
class KMMetaFilterActionCommand; |
|
class KMMessage; |
|
class KMFolder; |
|
class KMAccount; |
|
class KMFldSearch; |
|
class KMLittleProgressDlg; |
|
class KMSystemTray; |
|
|
|
template <typename T> class QValueList; |
|
template <typename T, typename S> class QMap; |
|
template <typename T> class QGuardedPtr; |
|
|
|
namespace KIO { |
|
class Job; |
|
} |
|
|
|
namespace KMail { |
|
class Vacation; |
|
class AttachmentStrategy; |
|
class HeaderStrategy; |
|
class HeaderStyle; |
|
class FolderJob; |
|
} |
|
|
|
typedef QMap<int,KMFolder*> KMMenuToFolder; |
|
|
|
|
|
class KMMainWidget : public QWidget |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
KMMainWidget(QWidget *parent, const char *name, |
|
KActionCollection *actionCollection, |
|
KConfig*config = KMKernel::config() ); |
|
virtual ~KMMainWidget(); |
|
void destruct(); |
|
|
|
/** Read configuration options before widgets are created. */ |
|
virtual void readPreConfig(void); |
|
|
|
/** Read configuration for current folder. */ |
|
virtual void readFolderConfig(void); |
|
|
|
/** Write configuration for current folder. */ |
|
virtual void writeFolderConfig(void); |
|
|
|
/** Read configuration options after widgets are created. */ |
|
virtual void readConfig(void); |
|
|
|
/** Write configuration options. */ |
|
virtual void writeConfig(void); |
|
|
|
/** Easy access to main components of the window. */ |
|
KMReaderWin* messageView(void) const { return mMsgView; } |
|
KMFolderTree* folderTree(void) const { return mFolderTree; } |
|
|
|
static void cleanup(); |
|
|
|
KAction *action( const char *name ) { return mActionCollection->action( name ); } |
|
KAction *replyAction() { return mReplyAction; } |
|
KAction *replyAllAction() { return mReplyAllAction; } |
|
KAction *replyListAction() { return mReplyListAction; } |
|
KActionMenu *forwardMenu() { return mForwardActionMenu; } |
|
KAction *forwardAction() { return mForwardAction; } |
|
KAction *forwardAttachedAction() { return mForwardAttachedAction; } |
|
KAction *redirectAction() { return mRedirectAction; } |
|
KAction *bounceAction() { return mBounceAction; } |
|
KAction *noQuoteReplyAction() { return mNoQuoteReplyAction; } |
|
KActionMenu *filterMenu() { return mFilterMenu; } |
|
KAction *printAction() { return mPrintAction; } |
|
KAction *trashAction() { return mTrashAction; } |
|
KAction *deleteAction() { return mDeleteAction; } |
|
KAction *saveAsAction() { return mSaveAsAction; } |
|
KAction *editAction() { return mEditAction; } |
|
KAction *sendAgainAction() { return mSendAgainAction; } |
|
KAction *applyFiltersAction() { return mSendAgainAction; } |
|
KAction *findInMessageAction() { return mFindInMessageAction; } |
|
KAction *saveAttachmentsAction() { return mSaveAttachmentsAction; } |
|
|
|
KActionMenu *statusMenu() { return mStatusMenu; } |
|
KActionMenu *threadStatusMenu() { return mThreadStatusMenu; } |
|
KActionMenu *moveActionMenu() { return mMoveActionMenu; } |
|
KActionMenu *mopyActionMenu() { return mCopyActionMenu; } |
|
KActionMenu *applyFilterActionsMenu() { return mApplyFilterActionsMenu; } |
|
|
|
KToggleAction *watchThreadAction() { return mWatchThreadAction; } |
|
KToggleAction *ignoreThreadAction() { return mIgnoreThreadAction; } |
|
|
|
// Forwarded to the reader window. |
|
KToggleAction *toggleFixFontAction() { return mMsgView->toggleFixFontAction(); } |
|
KAction *viewSourceAction() { return mMsgView->viewSourceAction(); } |
|
|
|
void folderSelected(KMFolder*, bool jumpToUnread); |
|
KMHeaders *headers() const { return mHeaders; } |
|
KMLittleProgressDlg* progressDialog() const; |
|
|
|
void toggleSystray(bool enabled, int mode); |
|
|
|
void updateListFilterAction(); |
|
|
|
public slots: |
|
void slotMoveMsgToFolder( KMFolder *dest); |
|
void slotTrashMsg(); // move to trash |
|
|
|
virtual void show(); |
|
virtual void hide(); |
|
/** sven: moved here as public */ |
|
void slotCheckMail(); |
|
|
|
/** Output given message in the statusbar message field. */ |
|
void folderSelected(KMFolder*); |
|
void folderSelectedUnread( KMFolder* ); |
|
|
|
void slotMsgSelected(KMMessage*); |
|
void slotMsgChanged(); |
|
|
|
/** Change the current folder, select a message in the current folder */ |
|
void slotSelectFolder(KMFolder*); |
|
void slotSelectMessage(KMMessage*); |
|
|
|
void slotReplaceMsgByUnencryptedVersion(); |
|
|
|
/** Update message menu */ |
|
void updateMessageMenu(); |
|
/** Start a timer to update message actions */ |
|
void startUpdateMessageActionsTimer(); |
|
/** Update message actions */ |
|
void updateMessageActions(); |
|
void statusMsg(const QString&); |
|
|
|
/** Launch subscription-dialog */ |
|
void slotSubscriptionDialog(); |
|
|
|
/** The columns of the foldertree changed */ |
|
void slotFolderTreeColumnsChanged(); |
|
|
|
signals: |
|
void messagesTransfered(bool); |
|
void captionChangeRequest( const QString & caption ); |
|
|
|
protected: |
|
void setupActions(); |
|
void setupStatusBar(); |
|
void createWidgets(); |
|
void activatePanners(); |
|
void showMsg(KMReaderWin *win, KMMessage *msg); |
|
|
|
KActionCollection * actionCollection() { return mActionCollection; } |
|
|
|
KRadioAction * actionForHeaderStyle( const KMail::HeaderStyle *, |
|
const KMail::HeaderStrategy * ); |
|
KRadioAction * actionForAttachmentStrategy( const KMail::AttachmentStrategy * ); |
|
|
|
/** @return the correct config dialog depending on whether the parent of the mainWidget |
|
* is a KPart or a KMMainWindow. When dealing with geometries, use this pointer |
|
*/ |
|
KConfig * config(); |
|
|
|
protected slots: |
|
void slotCheckOneAccount(int); |
|
void slotMailChecked(bool newMail, bool sendOnCheck); |
|
void getAccountMenu(); |
|
void slotHelp(); |
|
void slotNewMailReader(); |
|
void slotFilter(); |
|
void slotPopFilter(); |
|
void slotAddrBook(); |
|
void slotImport(); |
|
void slotViewChange(); |
|
void slotAddFolder(); |
|
void slotCompose(); |
|
void slotPostToML(); |
|
void slotModifyFolder(); |
|
void slotExpireFolder(); |
|
void slotExpireAll(); |
|
void slotInvalidateIMAPFolders(); |
|
void slotMarkAllAsRead(); |
|
void slotRemoveFolder(); |
|
void slotEmptyFolder(); |
|
void slotCompactFolder(); |
|
void slotRefreshFolder(); |
|
void slotCompactAll(); |
|
void slotOverrideHtml(); |
|
void slotOverrideThread(); |
|
void slotToggleSubjectThreading(); |
|
void slotMessageQueuedOrDrafted(); |
|
void slotEditMsg(); |
|
//void slotTrashMsg(); // move to trash |
|
void slotDeleteMsg(); // completely delete message |
|
void slotUndo(); |
|
void slotReadOn(); |
|
void slotSaveMsg(); |
|
void slotSaveAttachments(); |
|
void slotMoveMsg(); |
|
//void slotMoveMsgToFolder( KMFolder *dest); |
|
void slotCopyMsgToFolder( KMFolder *dest); |
|
void slotCopyMsg(); |
|
void slotResendMsg(); |
|
void slotEditVacation(); |
|
void slotApplyFilters(); |
|
void slotExpandThread(); |
|
void slotExpandAllThreads(); |
|
void slotCollapseThread(); |
|
void slotCollapseAllThreads(); |
|
void slotSetMsgStatusNew(); |
|
void slotSetMsgStatusUnread(); |
|
void slotSetMsgStatusRead(); |
|
void slotSetMsgStatusReplied(); |
|
void slotSetMsgStatusForwarded(); |
|
void slotSetMsgStatusQueued(); |
|
void slotSetMsgStatusSent(); |
|
void slotSetMsgStatusFlag(); |
|
void slotSetMsgStatusSpam(); |
|
void slotSetMsgStatusHam(); |
|
void slotSetThreadStatusNew(); |
|
void slotSetThreadStatusUnread(); |
|
void slotSetThreadStatusRead(); |
|
void slotSetThreadStatusReplied(); |
|
void slotSetThreadStatusForwarded(); |
|
void slotSetThreadStatusQueued(); |
|
void slotSetThreadStatusSent(); |
|
void slotSetThreadStatusFlag(); |
|
void slotSetThreadStatusSpam(); |
|
void slotSetThreadStatusHam(); |
|
void slotSetThreadStatusWatched(); |
|
void slotSetThreadStatusIgnored(); |
|
void slotToggleUnread(); |
|
void slotToggleTotalColumn(); |
|
void slotBriefHeaders(); |
|
void slotFancyHeaders(); |
|
void slotStandardHeaders(); |
|
void slotLongHeaders(); |
|
void slotAllHeaders(); |
|
void slotIconicAttachments(); |
|
void slotSmartAttachments(); |
|
void slotInlineAttachments(); |
|
void slotHideAttachments(); |
|
void slotCycleHeaderStyles(); |
|
void slotCycleAttachmentStrategy(); |
|
void slotSetEncoding(); |
|
void slotSendQueued(); |
|
void slotMsgPopup(KMMessage &msg, const KURL &aUrl, const QPoint&); |
|
void slotMarkAll(); |
|
void slotMemInfo(); |
|
void slotSearch(); |
|
void slotSearchClosed(); |
|
void slotFind(); |
|
void slotUpdateImapMessage(KMMessage *msg); |
|
void slotIntro(); |
|
void slotShowStartupFolder(); |
|
/** Show tip-of-the-day on startup */ |
|
void slotShowTipOnStart(); |
|
/** Show tip-of-the-day, forced */ |
|
void slotShowTip(); |
|
|
|
/** Message navigation */ |
|
void slotNextMessage(); |
|
void slotNextUnreadMessage(); |
|
void slotNextImportantMessage(); |
|
void slotNextUnreadFolder(); |
|
void slotPrevMessage(); |
|
void slotPrevUnreadMessage(); |
|
void slotPrevImportantMessage(); |
|
void slotPrevUnreadFolder(); |
|
|
|
/** etc. */ |
|
void slotMsgActivated(KMMessage*); |
|
|
|
/** Update the undo action */ |
|
void slotUpdateUndo(); |
|
|
|
/** Move selected messages to folder with corresponding to given menuid */ |
|
virtual void moveSelectedToFolder( int menuId ); |
|
/** Copy selected messages to folder with corresponding to given menuid */ |
|
virtual void copySelectedToFolder( int menuId ); |
|
/** Update html and threaded messages preferences in Folder menu. */ |
|
virtual void updateFolderMenu(); |
|
/** Enable or disable the "mark all as read" action. Needs to happen more |
|
* often the the other updates and is therefor in its own method. */ |
|
void updateMarkAsReadAction(); |
|
|
|
|
|
/** XML-GUI stuff */ |
|
void slotEditNotifications(); |
|
void slotEditKeys(); |
|
|
|
/** changes the caption and displays the foldername */ |
|
void slotChangeCaption(QListViewItem*); |
|
void removeDuplicates(); |
|
/** Create actions for marked filters */ |
|
void initializeFilterActions(); |
|
/** Plug filter actions into a popup menu */ |
|
void plugFilterActions(QPopupMenu*); |
|
|
|
/** Slot to reply to a message */ |
|
void slotReplyToMsg(); |
|
void slotReplyListToMsg(); |
|
void slotReplyAllToMsg(); |
|
void slotForwardMsg(); |
|
void slotForwardAttachedMsg(); |
|
void slotRedirectMsg(); |
|
void slotBounceMsg(); |
|
void slotNoQuoteReplyToMsg(); |
|
void slotSubjectFilter(); |
|
void slotMailingListFilter(); |
|
void slotFromFilter(); |
|
void slotToFilter(); |
|
void slotPrintMsg(); |
|
|
|
void slotConfigChanged(); |
|
|
|
private: |
|
// Message actions |
|
KAction *mTrashAction, *mDeleteAction, *mSaveAsAction, *mEditAction, |
|
*mSendAgainAction, *mApplyFiltersAction, *mFindInMessageAction, |
|
*mSaveAttachmentsAction; |
|
// Composition actions |
|
KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyListAction, |
|
*mForwardAction, *mForwardAttachedAction, *mRedirectAction, |
|
*mBounceAction, *mNoQuoteReplyAction; |
|
KActionMenu *mForwardActionMenu; |
|
// Filter actions |
|
KActionMenu *mFilterMenu; |
|
KAction *mSubjectFilterAction, *mFromFilterAction, *mToFilterAction, |
|
*mListFilterAction; |
|
|
|
KActionMenu *mStatusMenu, *mThreadStatusMenu, |
|
*mMoveActionMenu, *mCopyActionMenu, *mApplyFilterActionsMenu; |
|
KAction *mMarkThreadAsNewAction; |
|
KAction *mMarkThreadAsReadAction; |
|
KAction *mMarkThreadAsUnreadAction; |
|
KToggleAction *mToggleThreadRepliedAction; |
|
KToggleAction *mToggleThreadForwardedAction; |
|
KToggleAction *mToggleThreadQueuedAction; |
|
KToggleAction *mToggleThreadSentAction; |
|
KToggleAction *mToggleThreadFlagAction; |
|
KAction *mMarkThreadAsSpamAction; |
|
KAction *mMarkThreadAsHamAction; |
|
KToggleAction *mToggleRepliedAction; |
|
KToggleAction *mToggleForwardedAction; |
|
KToggleAction *mToggleQueuedAction; |
|
KToggleAction *mToggleSentAction; |
|
KToggleAction *mToggleFlagAction; |
|
KAction *mMarkAsSpamAction; |
|
KAction *mMarkAsHamAction; |
|
|
|
KToggleAction *mWatchThreadAction, *mIgnoreThreadAction; |
|
|
|
/** we need to access those KToggleActions from the foldertree-popup */ |
|
KRadioAction* mUnreadColumnToggle; |
|
KRadioAction* mUnreadTextToggle; |
|
KToggleAction* mTotalColumnToggle; |
|
|
|
private: |
|
KMFolderTree *mFolderTree; |
|
KMReaderWin *mMsgView; |
|
QSplitter *mPanner1, *mPanner2; |
|
KMHeaders *mHeaders; |
|
KMFolder *mFolder; |
|
const QTextCodec *mCodec; |
|
QPopupMenu *mViewMenu, *mBodyPartsMenu; |
|
KSelectAction *mEncoding; |
|
KAction *mlistFilterAction; |
|
QCString mEncodingStr; |
|
bool mIntegrated; |
|
bool mSendOnCheck; |
|
bool mBeepOnNew, mSystemTrayOnNew; |
|
int mSystemTrayMode; |
|
bool mConfirmEmpty; |
|
QString mStartupFolder; |
|
int mMessageStatusId; |
|
QValueList<int> mPanner1Sep, mPanner2Sep; |
|
KMMessage *mMsgCurrent; |
|
KURL mUrlCurrent; |
|
QPopupMenu *mActMenu; |
|
QPopupMenu *mFileMenu; |
|
|
|
bool mLongFolderList; |
|
|
|
bool mStartupDone; |
|
KMMenuToFolder mMenuToFolder; |
|
int copyId, moveId, htmlId, threadId; |
|
bool mHtmlPref, mThreadPref, mFolderHtmlPref, mFolderThreadPref, |
|
mFolderThreadSubjPref, mReaderWindowActive, mReaderWindowBelow; |
|
|
|
// QPopupMenu *mMessageMenu; |
|
KMFldSearch *mSearchWin; |
|
|
|
KAction *mModifyFolderAction, *mRemoveFolderAction, *mExpireFolderAction, |
|
*mCompactFolderAction, *mRefreshFolderAction, *mEmptyFolderAction, |
|
*mMarkAllAsReadAction; |
|
KToggleAction *mPreferHtmlAction, *mThreadMessagesAction; |
|
KToggleAction *mThreadBySubjectAction; |
|
KToggleAction *mFolderAction, *mHeaderAction, *mMimeAction; |
|
|
|
QTimer *menutimer; |
|
|
|
// ProgressDialog for transferring messages |
|
KProgressDialog* mProgressDialog; |
|
int mCountJobs, mCountMsgs; |
|
|
|
KMLittleProgressDlg *mLittleProgress; |
|
|
|
QPtrList<KMMessage> mSelectedMsgs; |
|
QGuardedPtr<KMail::Vacation> mVacation; |
|
KActionCollection *mActionCollection; |
|
QVBoxLayout *mTopLayout; |
|
bool mDestructed; |
|
QPtrList<KAction> mFilterActions; |
|
QPtrList<KMMetaFilterActionCommand> mFilterCommands; |
|
QGuardedPtr <KMail::FolderJob> mJob; |
|
|
|
KMSystemTray *mSystemTray; |
|
KConfig *mConfig; |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|