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 }