File indexing completed on 2024-05-12 05:20:46
0001 /* 0002 SPDX-FileCopyrightText: 2007 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <MessageComposer/MessageFactoryNG> 0010 #include <QUrl> 0011 0012 #include <QObject> 0013 0014 class QWidget; 0015 class QAction; 0016 class KJob; 0017 class QAction; 0018 class KActionMenu; 0019 class KActionCollection; 0020 class KXMLGUIClient; 0021 class KMReaderWin; 0022 class QMenu; 0023 0024 namespace Akonadi 0025 { 0026 class Item; 0027 class StandardMailActionManager; 0028 } 0029 0030 namespace TemplateParser 0031 { 0032 class CustomTemplatesMenu; 0033 } 0034 0035 namespace KIO 0036 { 0037 class KUriFilterSearchProviderActions; 0038 } 0039 namespace KMail 0040 { 0041 /** 0042 Manages common actions that can be performed on one or more messages. 0043 */ 0044 class MessageActions : public QObject 0045 { 0046 Q_OBJECT 0047 public: 0048 explicit MessageActions(KActionCollection *ac, QWidget *parent); 0049 ~MessageActions() override; 0050 void setMessageView(KMReaderWin *msgView); 0051 0052 /** 0053 * This function adds or updates the actions of the forward action menu, taking the 0054 * preference whether to forward inline or as attachment by default into account. 0055 * This has to be called when that preference config has been changed. 0056 */ 0057 void setupForwardActions(KActionCollection *ac); 0058 0059 /** 0060 * Sets up action list for forward menu. 0061 */ 0062 void setupForwardingActionsList(KXMLGUIClient *guiClient); 0063 0064 void setCurrentMessage(const Akonadi::Item &item, const Akonadi::Item::List &items = Akonadi::Item::List()); 0065 0066 KActionMenu *replyMenu() const; 0067 QAction *replyListAction() const; 0068 QAction *forwardInlineAction() const; 0069 QAction *forwardAttachedAction() const; 0070 QAction *redirectAction() const; 0071 QAction *newToRecipientsAction() const; 0072 0073 KActionMenu *messageStatusMenu() const; 0074 KActionMenu *forwardMenu() const; 0075 0076 QAction *annotateAction() const; 0077 QAction *printAction() const; 0078 QAction *printPreviewAction() const; 0079 QAction *listFilterAction() const; 0080 0081 KActionMenu *mailingListActionMenu() const; 0082 TemplateParser::CustomTemplatesMenu *customTemplatesMenu() const; 0083 0084 void addWebShortcutsMenu(QMenu *menu, const QString &text); 0085 0086 QAction *debugAkonadiSearchAction() const; 0087 QAction *addFollowupReminderAction() const; 0088 0089 QAction *sendAgainAction() const; 0090 0091 QAction *newMessageFromTemplateAction() const; 0092 0093 QAction *editAsNewAction() const; 0094 0095 QAction *exportToPdfAction() const; 0096 0097 QAction *archiveMessageAction() const; 0098 0099 void fillAkonadiStandardAction(Akonadi::StandardMailActionManager *akonadiStandardActionManager); 0100 [[nodiscard]] Akonadi::Item currentItem() const; 0101 0102 Q_SIGNALS: 0103 // This signal is emitted when a reply is triggered and the 0104 // action has finished. 0105 // This is useful for the stand-alone reader, it might want to close the window in 0106 // that case. 0107 void replyActionFinished(); 0108 0109 public Q_SLOTS: 0110 void editCurrentMessage(); 0111 0112 private: 0113 Q_DISABLE_COPY(MessageActions) 0114 void annotateMessage(); 0115 void updateActions(); 0116 void replyCommand(MessageComposer::ReplyStrategy strategy); 0117 void addMailingListAction(const QString &item, const QUrl &url); 0118 void addMailingListActions(const QString &item, const QList<QUrl> &list); 0119 void updateMailingListActions(const Akonadi::Item &messageItem); 0120 void printMessage(bool preview); 0121 void clearMailingListActions(); 0122 0123 private Q_SLOTS: 0124 void slotItemModified(const Akonadi::Item &item, const QSet<QByteArray> &partIdentifiers); 0125 void slotItemRemoved(const Akonadi::Item &item); 0126 0127 void slotReplyToMsg(); 0128 void slotReplyAuthorToMsg(); 0129 void slotReplyListToMsg(); 0130 void slotReplyAllToMsg(); 0131 void slotNoQuoteReplyToMsg(); 0132 void slotRunUrl(QAction *urlAction); 0133 void slotPrintMessage(); 0134 void slotPrintPreviewMsg(); 0135 0136 void slotUpdateActionsFetchDone(KJob *job); 0137 void slotMailingListFilter(); 0138 void slotDebugAkonadiSearch(); 0139 0140 void slotAddFollowupReminder(); 0141 void slotResendMessage(); 0142 void slotUseTemplate(); 0143 0144 void slotExportToPdf(); 0145 0146 void slotArchiveMessage(); 0147 0148 private: 0149 QList<QAction *> mMailListActionList; 0150 Akonadi::Item mCurrentItem; 0151 Akonadi::Item::List mVisibleItems; 0152 QWidget *const mParent; 0153 KMReaderWin *mMessageView = nullptr; 0154 0155 KActionMenu *const mReplyActionMenu; 0156 QAction *const mReplyAction; 0157 QAction *const mReplyAllAction; 0158 QAction *const mReplyAuthorAction; 0159 QAction *const mReplyListAction; 0160 QAction *const mNoQuoteReplyAction; 0161 QAction *const mForwardInlineAction; 0162 QAction *const mForwardAttachedAction; 0163 QAction *const mRedirectAction; 0164 QAction *const mNewToRecipientsAction; 0165 KActionMenu *const mStatusMenu; 0166 KActionMenu *const mForwardActionMenu; 0167 KActionMenu *const mMailingListActionMenu; 0168 QAction *const mAnnotateAction; 0169 QAction *const mEditAsNewAction; 0170 QAction *mPrintAction = nullptr; 0171 QAction *mPrintPreviewAction = nullptr; 0172 TemplateParser::CustomTemplatesMenu *mCustomTemplatesMenu = nullptr; 0173 QAction *const mListFilterAction; 0174 QAction *const mAddFollowupReminderAction; 0175 QAction *const mDebugAkonadiSearchAction; 0176 QAction *const mSendAgainAction; 0177 QAction *const mNewMessageFromTemplateAction; 0178 KIO::KUriFilterSearchProviderActions *const mWebShortcutMenuManager; 0179 QAction *const mExportToPdfAction; 0180 QAction *const mArchiveMessageAction; 0181 }; 0182 }