1 /* 2 SPDX-FileCopyrightText: 2007 Volker Krause <vkrause@kde.org> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #pragma once 8 9 #include <MessageComposer/MessageFactoryNG> 10 #include <QUrl> 11 12 #include <QObject> 13 14 class QWidget; 15 class QAction; 16 class KJob; 17 class QAction; 18 class KActionMenu; 19 class KActionCollection; 20 class KXMLGUIClient; 21 class KMReaderWin; 22 class QMenu; 23 24 namespace Akonadi 25 { 26 class Item; 27 class StandardMailActionManager; 28 } 29 30 namespace TemplateParser 31 { 32 class CustomTemplatesMenu; 33 } 34 35 namespace KIO 36 { 37 class KUriFilterSearchProviderActions; 38 } 39 namespace KMail 40 { 41 /** 42 Manages common actions that can be performed on one or more messages. 43 */ 44 class MessageActions : public QObject 45 { 46 Q_OBJECT 47 public: 48 explicit MessageActions(KActionCollection *ac, QWidget *parent); 49 ~MessageActions() override; 50 void setMessageView(KMReaderWin *msgView); 51 52 /** 53 * This function adds or updates the actions of the forward action menu, taking the 54 * preference whether to forward inline or as attachment by default into account. 55 * This has to be called when that preference config has been changed. 56 */ 57 void setupForwardActions(KActionCollection *ac); 58 59 /** 60 * Sets up action list for forward menu. 61 */ 62 void setupForwardingActionsList(KXMLGUIClient *guiClient); 63 64 void setCurrentMessage(const Akonadi::Item &item, const Akonadi::Item::List &items = Akonadi::Item::List()); 65 66 KActionMenu *replyMenu() const; 67 QAction *replyListAction() const; 68 QAction *forwardInlineAction() const; 69 QAction *forwardAttachedAction() const; 70 QAction *redirectAction() const; 71 QAction *newToRecipientsAction() const; 72 73 KActionMenu *messageStatusMenu() const; 74 KActionMenu *forwardMenu() const; 75 76 QAction *annotateAction() const; 77 QAction *printAction() const; 78 QAction *printPreviewAction() const; 79 QAction *listFilterAction() const; 80 81 KActionMenu *mailingListActionMenu() const; 82 TemplateParser::CustomTemplatesMenu *customTemplatesMenu() const; 83 84 void addWebShortcutsMenu(QMenu *menu, const QString &text); 85 86 QAction *debugAkonadiSearchAction() const; 87 QAction *addFollowupReminderAction() const; 88 89 QAction *sendAgainAction() const; 90 91 QAction *newMessageFromTemplateAction() const; 92 93 QAction *editAsNewAction() const; 94 95 QAction *exportToPdfAction() const; 96 97 void fillAkonadiStandardAction(Akonadi::StandardMailActionManager *akonadiStandardActionManager); 98 Q_REQUIRED_RESULT Akonadi::Item currentItem() const; 99 100 Q_SIGNALS: 101 // This signal is emitted when a reply is triggered and the 102 // action has finished. 103 // This is useful for the stand-alone reader, it might want to close the window in 104 // that case. 105 void replyActionFinished(); 106 107 public Q_SLOTS: 108 void editCurrentMessage(); 109 110 private: 111 Q_DISABLE_COPY(MessageActions) 112 void annotateMessage(); 113 void updateActions(); 114 void replyCommand(MessageComposer::ReplyStrategy strategy); 115 void addMailingListAction(const QString &item, const QUrl &url); 116 void addMailingListActions(const QString &item, const QList<QUrl> &list); 117 void updateMailingListActions(const Akonadi::Item &messageItem); 118 void printMessage(bool preview); 119 void clearMailingListActions(); 120 121 private Q_SLOTS: 122 void slotItemModified(const Akonadi::Item &item, const QSet<QByteArray> &partIdentifiers); 123 void slotItemRemoved(const Akonadi::Item &item); 124 125 void slotReplyToMsg(); 126 void slotReplyAuthorToMsg(); 127 void slotReplyListToMsg(); 128 void slotReplyAllToMsg(); 129 void slotNoQuoteReplyToMsg(); 130 void slotRunUrl(QAction *urlAction); 131 void slotPrintMessage(); 132 void slotPrintPreviewMsg(); 133 134 void slotUpdateActionsFetchDone(KJob *job); 135 void slotMailingListFilter(); 136 void slotDebugAkonadiSearch(); 137 138 void slotAddFollowupReminder(); 139 void slotResendMessage(); 140 void slotUseTemplate(); 141 142 void slotExportToPdf(); 143 144 private: 145 QList<QAction *> mMailListActionList; 146 Akonadi::Item mCurrentItem; 147 Akonadi::Item::List mVisibleItems; 148 QWidget *const mParent; 149 KMReaderWin *mMessageView = nullptr; 150 151 KActionMenu *const mReplyActionMenu; 152 QAction *const mReplyAction; 153 QAction *const mReplyAllAction; 154 QAction *const mReplyAuthorAction; 155 QAction *const mReplyListAction; 156 QAction *const mNoQuoteReplyAction; 157 QAction *const mForwardInlineAction; 158 QAction *const mForwardAttachedAction; 159 QAction *const mRedirectAction; 160 QAction *const mNewToRecipientsAction; 161 KActionMenu *const mStatusMenu; 162 KActionMenu *const mForwardActionMenu; 163 KActionMenu *const mMailingListActionMenu; 164 QAction *const mAnnotateAction; 165 QAction *const mEditAsNewAction; 166 QAction *mPrintAction = nullptr; 167 QAction *mPrintPreviewAction = nullptr; 168 TemplateParser::CustomTemplatesMenu *mCustomTemplatesMenu = nullptr; 169 QAction *const mListFilterAction; 170 QAction *const mAddFollowupReminderAction; 171 QAction *const mDebugAkonadiSearchAction; 172 QAction *const mSendAgainAction; 173 QAction *const mNewMessageFromTemplateAction; 174 KIO::KUriFilterSearchProviderActions *const mWebShortcutMenuManager; 175 QAction *const mExportToPdfAction; 176 }; 177 } 178 179