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