1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.gui.action;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.coreevent;
17 import qt.core.list;
18 import qt.core.namespace;
19 import qt.core.object;
20 import qt.core.string;
21 import qt.core.variant;
22 import qt.gui.actiongroup;
23 import qt.gui.font;
24 import qt.gui.icon;
25 import qt.gui.keysequence;
26 import qt.helpers;
27 
28 /+ #if QT_CONFIG(shortcut)
29 #endif
30 QT_REQUIRE_CONFIG(action); +/
31 
32 
33 extern(C++, class) struct QActionPrivate;
34 /+ #if QT_DEPRECATED_SINCE(6,0) +/
35 extern(C++, class) struct QGraphicsWidget;
36 /+ #endif +/
37 
38 /// Binding for C++ class [QAction](https://doc.qt.io/qt-6/qaction.html).
39 class /+ Q_GUI_EXPORT +/ QAction : QObject
40 {
41     mixin(Q_OBJECT);
42     /+ Q_DECLARE_PRIVATE(QAction) +/
43 
44     /+ Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
45     Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
46     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged
47                RESET resetEnabled FINAL)
48     Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY changed)
49     Q_PROPERTY(QString text READ text WRITE setText NOTIFY changed)
50     Q_PROPERTY(QString iconText READ iconText WRITE setIconText NOTIFY changed)
51     Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip NOTIFY changed)
52     Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip NOTIFY changed)
53     Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis NOTIFY changed)
54     Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY changed)
55 #if QT_CONFIG(shortcut)
56     Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut NOTIFY changed)
57     Q_PROPERTY(Qt::ShortcutContext shortcutContext READ shortcutContext WRITE setShortcutContext
58                NOTIFY changed)
59     Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat NOTIFY changed)
60 #endif // QT_CONFIG(shortcut)
61     Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
62     Q_PROPERTY(MenuRole menuRole READ menuRole WRITE setMenuRole NOTIFY changed)
63     Q_PROPERTY(bool iconVisibleInMenu READ isIconVisibleInMenu WRITE setIconVisibleInMenu
64                NOTIFY changed)
65     Q_PROPERTY(bool shortcutVisibleInContextMenu READ isShortcutVisibleInContextMenu
66                WRITE setShortcutVisibleInContextMenu NOTIFY changed)
67     Q_PROPERTY(Priority priority READ priority WRITE setPriority) +/
68 
69 public:
70     // note this is copied into qplatformmenu.h, which must stay in sync
71     enum MenuRole { NoRole = 0, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole,
72                     AboutRole, PreferencesRole, QuitRole }
73     /+ Q_ENUM(MenuRole) +/
74     enum Priority { LowPriority = 0,
75                     NormalPriority = 128,
76                     HighPriority = 256}
77     /+ Q_ENUM(Priority) +/
78     /+ explicit +/this(QObject parent = null);
79     /+ explicit +/this(ref const(QString) text, QObject parent = null);
80     /+ explicit +/this(ref const(QIcon) icon, ref const(QString) text, QObject parent = null);
81 
82     ~this();
83 
84     final QList!(QObject) associatedObjects() const;
85 
86 /+ #if QT_DEPRECATED_SINCE(6,0)
87 #ifdef Q_CLANG_QDOC
88     QWidget *parentWidget() const;
89     QList<QWidget*> associatedWidgets() const;
90     QList<QGraphicsWidget*> associatedGraphicsWidgets() const;
91 #else +/
92     /*
93         These are templates so that instantiation happens only in calling code, when
94         QWidget, QMenu, and QGraphicsWidget can be expected to be fully defined.
95     */
96     /+ template<typename T = QWidget*> +/
97     final T parentWidget(T)() const
98     {
99         auto result = parent();
100         while (result && !qobject_cast!(T)(result))
101             result = result.parent();
102         return static_cast!(T)(result);
103     }
104 
105     /+ template<typename T = QWidget*> +/
106     /+final QList!(T) associatedWidgets(T)() const
107     {
108         QList!(T) result;
109         for (auto object : associatedObjects())
110             if (auto widget = qobject_cast!(T)(object))
111                 result.append(widget);
112         return result;
113     }+/
114     /+ template<typename T = QGraphicsWidget*> +/
115     /+final QList!(T) associatedGraphicsWidgets(T)() const
116     {
117         QList!(T) result;
118         for (auto object : associatedObjects())
119             if (auto graphicsWidget = qobject_cast!(T)(object))
120                 result.append(graphicsWidget);
121         return result;
122     }+/
123 /+ #endif
124 #endif +/
125 
126     final void setActionGroup(QActionGroup group);
127     final QActionGroup actionGroup() const;
128     final void setIcon(ref const(QIcon) icon);
129     final QIcon icon() const;
130 
131     final void setText(ref const(QString) text);
132     final QString text() const;
133 
134     final void setIconText(ref const(QString) text);
135     final QString iconText() const;
136 
137     final void setToolTip(ref const(QString) tip);
138     final QString toolTip() const;
139 
140     final void setStatusTip(ref const(QString) statusTip);
141     final QString statusTip() const;
142 
143     final void setWhatsThis(ref const(QString) what);
144     final QString whatsThis() const;
145 
146     final void setPriority(Priority priority);
147     final Priority priority() const;
148 
149     final void setSeparator(bool b);
150     final bool isSeparator() const;
151 
152 /+ #if QT_CONFIG(shortcut) +/
153     final void setShortcut(ref const(QKeySequence) shortcut);
154     final void setShortcut(const QString  shortcut)
155     {
156         auto tmp = QKeySequence(shortcut);
157         setShortcut(tmp);
158     }
159     final QKeySequence shortcut() const;
160 
161     /+ final void setShortcuts(ref const(QList!(QKeySequence)) shortcuts);
162     final void setShortcuts(QKeySequence.StandardKey);
163     final QList!(QKeySequence) shortcuts() const; +/
164 
165     final void setShortcutContext(/+ Qt:: +/qt.core.namespace.ShortcutContext context);
166     final /+ Qt:: +/qt.core.namespace.ShortcutContext shortcutContext() const;
167 
168     final void setAutoRepeat(bool);
169     final bool autoRepeat() const;
170 /+ #endif +/ // QT_CONFIG(shortcut)
171 
172     final void setFont(ref const(QFont) font);
173     final QFont font() const;
174 
175     final void setCheckable(bool);
176     final bool isCheckable() const;
177 
178     final QVariant data() const;
179     final void setData(ref const(QVariant) var);
180     final void setData(T)(T value)
181     {
182         static if(is(const(T) == const(QVariant)))
183             QVariant v = value;
184         else
185             QVariant v = QVariant.fromValue(value);
186         setData(v);
187     }
188 
189     final bool isChecked() const;
190 
191     final bool isEnabled() const;
192 
193     final bool isVisible() const;
194 
195     enum ActionEvent { Trigger, Hover }
196     final void activate(ActionEvent event);
197 
198     final void setMenuRole(MenuRole menuRole);
199     final MenuRole menuRole() const;
200 
201 /+ #if QT_DEPRECATED_SINCE(6,0)
202 #ifdef Q_CLANG_QDOC
203     QMenu *menu() const;
204     void setMenu(QMenu *menu);
205 #else +/
206     /+ template<typename T = QMenu*> +/
207     final T menu(T)() const
208     {
209         return qobject_cast!(T)(menuObject());
210     }
211     /+ template<typename T = QMenu*> +/
212     final void setMenu(T)(T m)
213     {
214         setMenuObject(m);
215     }
216 /+ #endif
217 #endif +/
218 
219     final void setIconVisibleInMenu(bool visible);
220     final bool isIconVisibleInMenu() const;
221 
222     final void setShortcutVisibleInContextMenu(bool show);
223     final bool isShortcutVisibleInContextMenu() const;
224 
225     final bool showStatusText(QObject object = null);
226 
227 protected:
228     override bool event(QEvent );
229     this(ref QActionPrivate dd, QObject parent);
230 
231 public /+ Q_SLOTS +/:
232     @QSlot final void trigger() { activate(ActionEvent.Trigger); }
233     @QSlot final void hover() { activate(ActionEvent.Hover); }
234     @QSlot final void setChecked(bool);
235     @QSlot final void toggle();
236     @QSlot final void setEnabled(bool);
237     @QSlot final void resetEnabled();
238     pragma(inline, true) @QSlot final void setDisabled(bool b) { setEnabled(!b); }
239     @QSlot final void setVisible(bool);
240 
241 /+ Q_SIGNALS +/public:
242     @QSignal final void changed();
243     @QSignal final void enabledChanged(bool enabled);
244     @QSignal final void checkableChanged(bool checkable);
245     @QSignal final void visibleChanged();
246     @QSignal final void triggered(bool checked = false);
247     @QSignal final void hovered();
248     @QSignal final void toggled(bool);
249 
250 private:
251     /+ Q_DISABLE_COPY(QAction) +/
252     /+ friend class QActionGroup; +/
253     /+ friend class QWidget; +/
254     /+ friend class QMenu; +/
255     /+ friend class QMenuPrivate; +/
256     /+ friend class QToolButton; +/
257     /+ friend class QGraphicsWidget; +/
258 
259     final QObject menuObject() const;
260     final void setMenuObject(QObject object);
261     mixin(CREATE_CONVENIENCE_WRAPPERS);
262 }
263 
264 /+ #ifndef QT_NO_DEBUG_STREAM
265 Q_GUI_EXPORT QDebug operator<<(QDebug, const QAction *);
266 #endif +/
267