1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #pragma once
27 
28 #include "utils_global.h"
29 
30 #include <QPointer>
31 #include <QAction>
32 
33 namespace Utils {
34 
35 class QTCREATOR_UTILS_EXPORT ProxyAction : public QAction
36 {
37     Q_OBJECT
38 public:
39     enum Attribute {
40         Hide = 0x01,
41         UpdateText = 0x02,
42         UpdateIcon = 0x04
43     };
44     Q_DECLARE_FLAGS(Attributes, Attribute)
45 
46     explicit ProxyAction(QObject *parent = nullptr);
47 
48     void initialize(QAction *action);
49 
50     void setAction(QAction *action);
51     QAction *action() const;
52 
53     bool shortcutVisibleInToolTip() const;
54     void setShortcutVisibleInToolTip(bool visible);
55 
56     void setAttribute(Attribute attribute);
57     void removeAttribute(Attribute attribute);
58     bool hasAttribute(Attribute attribute);
59 
60     static QString stringWithAppendedShortcut(const QString &str, const QKeySequence &shortcut);
61     static ProxyAction *proxyActionWithIcon(QAction *original, const QIcon &newIcon);
62 
63 signals:
64     void currentActionChanged(QAction *action);
65 
66 private:
67     void actionChanged();
68     void updateState();
69     void updateToolTipWithKeySequence();
70     void disconnectAction();
71     void connectAction();
72     void update(QAction *action, bool initialize);
73 
74     QPointer<QAction> m_action;
75     Attributes m_attributes;
76     bool m_showShortcut = false;
77     QString m_toolTip;
78     bool m_block = false;
79 };
80 
81 } // namespace Utils
82 
83 Q_DECLARE_OPERATORS_FOR_FLAGS(Utils::ProxyAction::Attributes)
84