1 /* 2 This file is part of Akonadi Mail. 3 4 Copyright (c) 2009 - 2010 Tobias Koenig <tokoe@kde.org> 5 6 SPDX-License-Identifier: LGPL-2.0-or-later 7 */ 8 9 #pragma once 10 11 #include "akonadi-mime_export.h" 12 13 #include <Akonadi/StandardActionManager> 14 15 #include <QObject> 16 17 #include <memory> 18 19 class QAction; 20 class KActionCollection; 21 class QItemSelectionModel; 22 class QWidget; 23 24 namespace Akonadi 25 { 26 class Item; 27 class StandardMailActionManagerPrivate; 28 29 /** 30 * @short Manages emails specific actions for collection and item views. 31 * 32 * @author Andras Mantia <amantia@kde.org> 33 * @since 4.6 34 */ 35 class AKONADI_MIME_EXPORT StandardMailActionManager : public QObject 36 { 37 Q_OBJECT 38 39 public: 40 /** 41 * Describes the supported actions. 42 */ 43 enum Type { 44 MarkMailAsRead = StandardActionManager::LastType + 1, ///< Marks a mail as read 45 MarkMailAsUnread, ///< Marks a mail as unread 46 MarkMailAsImportant, ///< Marks a mail as important 47 MarkMailAsActionItem, ///< Marks a mail as action item 48 MarkAllMailAsRead, ///< Marks all mails in a folder as read. 49 MarkAllMailAsReadRecursive, ///< Marks all mails in a folder and its subfolders as read. 50 MarkAllMailAsUnread, ///< Marks all mails in a folder as unread. 51 MarkAllMailAsImportant, ///< Marks all mails in a folder as important 52 MarkAllMailAsActionItem, ///< Marks all mails in a folder as action item 53 MoveToTrash, ///< Move all selected messages and folders to trash. 54 MoveAllToTrash, ///< Move all messages of the current folder to trash. 55 RemoveDuplicates, ///< Removes all duplicated messages. 56 EmptyAllTrash, ///< Empties trash folders on all accounts 57 EmptyTrash, ///< Empties the trash folder, if a trash folder was selected 58 LastType ///< Marks last action. 59 }; 60 61 /** 62 * Creates a new standard mail action manager. 63 * 64 * @param actionCollection The action collection to operate on. 65 * @param parent The parent widget. 66 */ 67 explicit StandardMailActionManager(KActionCollection *actionCollection, QWidget *parent = nullptr); 68 69 /** 70 * Destroys the standard mail action manager. 71 */ 72 ~StandardMailActionManager() override; 73 74 /** 75 * Sets the collection selection model based on which the collection 76 * related actions should operate. If none is set, all collection actions 77 * will be disabled. 78 * 79 * @param selectionModel selection model for collections 80 */ 81 void setCollectionSelectionModel(QItemSelectionModel *selectionModel); 82 83 /** 84 * Sets the item selection model based on which the item related actions 85 * should operate. If none is set, all item actions will be disabled. 86 * 87 * @param selectionModel selection model for items 88 */ 89 void setItemSelectionModel(QItemSelectionModel *selectionModel); 90 91 /** 92 * Creates the action of the given type and adds it to the action collection 93 * specified in the constructor if it does not exist yet. The action is 94 * connected to its default implementation provided by this class. 95 * 96 * @param type action type 97 */ 98 QAction *createAction(Type type); 99 100 /** 101 * Creates the action of the given type and adds it to the action collection 102 * specified in the constructor if it does not exist yet. The action is 103 * connected to its default implementation provided by this class. 104 * @param type action type 105 */ 106 QAction *createAction(StandardActionManager::Type type); 107 108 /** 109 * Convenience method to create all standard actions. 110 * @see createAction() 111 */ 112 void createAllActions(); 113 114 /** 115 * Returns the action of the given type, 0 if it has not been created (yet). 116 * @param type action type 117 */ 118 QAction *action(Type type) const; 119 120 /** 121 * Returns the action of the given type, 0 if it has not been created (yet). 122 * @param type action type 123 */ 124 QAction *action(StandardActionManager::Type type) const; 125 126 /** 127 * Sets the label of the action @p type to @p text, which is used during 128 * updating the action state and substituted according to the number of 129 * selected objects. This is mainly useful to customize the label of actions 130 * that can operate on multiple objects. 131 * 132 * Example: 133 * @code 134 * acctMgr->setActionText( Akonadi::StandardActionManager::CopyItems, 135 * ki18np( "Copy Item", "Copy %1 Items" ) ); 136 * @endcode 137 * 138 * @param type action type 139 * @param text localized text for action 140 */ 141 void setActionText(StandardActionManager::Type type, const KLocalizedString &text); 142 143 /** 144 * Sets whether the default implementation for the given action @p type 145 * shall be executed when the action is triggered. 146 * 147 * @param intercept If @c false, the default implementation will be executed, 148 * if @c true no action is taken. 149 */ 150 void interceptAction(Type type, bool intercept = true); 151 152 /** 153 * Sets whether the default implementation for the given action @p type 154 * shall be executed when the action is triggered. 155 * 156 * @param type action type 157 * @param intercept If @c false, the default implementation will be executed, 158 * if @c true no action is taken. 159 */ 160 void interceptAction(StandardActionManager::Type type, bool intercept = true); 161 162 /** 163 * Returns the list of collections that are currently selected. 164 * The list is empty if no collection is currently selected. 165 */ 166 Q_REQUIRED_RESULT Akonadi::Collection::List selectedCollections() const; 167 168 /** 169 * Returns the list of items that are currently selected. 170 * The list is empty if no item is currently selected. 171 */ 172 Q_REQUIRED_RESULT Akonadi::Item::List selectedItems() const; 173 174 /** 175 * Sets the favorite collections model based on which the collection 176 * relatedactions should operate. If none is set, the "Add to Favorite Folders" action 177 * will be disabled. 178 * 179 * @param favoritesModel model for a user's favorite mail collections 180 */ 181 void setFavoriteCollectionsModel(FavoriteCollectionsModel *favoritesModel); 182 183 /** 184 * Sets the favorite collection selection model based on which the favorite 185 * collection related actions should operate. If none is set, all favorite modifications 186 * actions will be disabled. 187 * 188 * @param selection model for favorite collections 189 */ 190 void setFavoriteSelectionModel(QItemSelectionModel *selectionModel); 191 192 void setCollectionPropertiesPageNames(const QStringList &names); 193 194 Akonadi::StandardActionManager *standardActionManager() const; 195 196 void markItemsAs(const QByteArray &typeStr, const Akonadi::Item::List &items, bool checkIntercept = true); 197 void markAllItemsAs(const QByteArray &typeStr, const Akonadi::Collection::List &collections, bool checkIntercept = true); 198 199 void setItems(const Item::List &selectedItems); 200 201 Q_SIGNALS: 202 /** 203 * This signal is emitted whenever the action state has been updated. 204 * In case you have special needs for changing the state of some actions, 205 * connect to this signal and adjust the action state. 206 */ 207 void actionStateUpdated(); 208 209 private: 210 //@cond PRIVATE 211 friend class StandardMailActionManagerPrivate; 212 std::unique_ptr<StandardMailActionManagerPrivate> const d; 213 //@endcond 214 }; 215 } 216 217