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.widgets.toolbar;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.coreevent;
17 import qt.core.namespace;
18 import qt.core.object;
19 import qt.core.point;
20 import qt.core.rect;
21 import qt.core.size;
22 import qt.core.string;
23 import qt.gui.action;
24 import qt.gui.event;
25 import qt.gui.icon;
26 import qt.helpers;
27 import qt.widgets.styleoption;
28 import qt.widgets.widget;
29 
30 /+ QT_REQUIRE_CONFIG(toolbar); +/
31 
32 
33 extern(C++, class) struct QToolBarPrivate;
34 
35 
36 /// Binding for C++ class [QToolBar](https://doc.qt.io/qt-6/qtoolbar.html).
37 class /+ Q_WIDGETS_EXPORT +/ QToolBar : QWidget
38 {
39     mixin(Q_OBJECT);
40 
41     /+ Q_PROPERTY(bool movable READ isMovable WRITE setMovable NOTIFY movableChanged)
42     Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas
43                NOTIFY allowedAreasChanged)
44     Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation
45                NOTIFY orientationChanged)
46     Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
47     Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle
48                NOTIFY toolButtonStyleChanged)
49     Q_PROPERTY(bool floating READ isFloating)
50     Q_PROPERTY(bool floatable READ isFloatable WRITE setFloatable) +/
51 
52 public:
53     /+ explicit +/this(ref const(QString) title, QWidget parent = null);
54     /+ explicit +/this(QWidget parent = null);
55     ~this();
56 
57     final void setMovable(bool movable);
58     final bool isMovable() const;
59 
60     final void setAllowedAreas(/+ Qt:: +/qt.core.namespace.ToolBarAreas areas);
61     final /+ Qt:: +/qt.core.namespace.ToolBarAreas allowedAreas() const;
62 
63     pragma(inline, true) final bool isAreaAllowed(/+ Qt:: +/qt.core.namespace.ToolBarArea area) const
64     { return (allowedAreas() & area) == area; }
65 
66     final void setOrientation(/+ Qt:: +/qt.core.namespace.Orientation orientation);
67     final /+ Qt:: +/qt.core.namespace.Orientation orientation() const;
68 
69     final void clear();
70 
71     /+ using QWidget::addAction; +/
72     final QAction addAction(ref const(QString) text);
73     final QAction addAction(ref const(QIcon) icon, ref const(QString) text);
74     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
75     final QAction addAction(ref const(QString) text, const(QObject) receiver, const(char)* member);
76     }));
77     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
78     final QAction addAction(ref const(QIcon) icon, ref const(QString) text,
79                            const(QObject) receiver, const(char)* member);
80     }));
81 /+ #ifdef Q_CLANG_QDOC
82     template<typename Functor>
83     QAction *addAction(const QString &text, Functor functor);
84     template<typename Functor>
85     QAction *addAction(const QString &text, const QObject *context, Functor functor);
86     template<typename Functor>
87     QAction *addAction(const QIcon &icon, const QString &text, Functor functor);
88     template<typename Functor>
89     QAction *addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor);
90 #else +/
91     // addAction(QString): Connect to a QObject slot / functor or function pointer (with context)
92     /+ template<class Obj, typename Func1> +/
93     /+ inline typename std::enable_if<!std::is_same<const char*, Func1>::value
94         && QtPrivate::IsPointerToTypeDerivedFromQObject<Obj*>::Value, QAction *>::type
95         addAction(const QString &text, const Obj *object, Func1 slot)
96     {
97         QAction *result = addAction(text);
98         connect(result, &QAction::triggered, object, std::move(slot));
99         return result;
100     } +/
101     // addAction(QString): Connect to a functor or function pointer (without context)
102     /+ template <typename Func1> +/
103     /+ inline QAction *addAction(const QString &text, Func1 slot)
104     {
105         QAction *result = addAction(text);
106         connect(result, &QAction::triggered, slot);
107         return result;
108     } +/
109     // addAction(QString): Connect to a QObject slot / functor or function pointer (with context)
110     /+ template<class Obj, typename Func1> +/
111     /+ inline typename std::enable_if<!std::is_same<const char*, Func1>::value
112         && QtPrivate::IsPointerToTypeDerivedFromQObject<Obj*>::Value, QAction *>::type
113         addAction(const QIcon &actionIcon, const QString &text, const Obj *object, Func1 slot)
114     {
115         QAction *result = addAction(actionIcon, text);
116         connect(result, &QAction::triggered, object, std::move(slot));
117         return result;
118     } +/
119     // addAction(QIcon, QString): Connect to a functor or function pointer (without context)
120     /+ template <typename Func1> +/
121     /+ inline QAction *addAction(const QIcon &actionIcon, const QString &text, Func1 slot)
122     {
123         QAction *result = addAction(actionIcon, text);
124         connect(result, &QAction::triggered, slot);
125         return result;
126     } +/
127 /+ #endif +/ // !Q_CLANG_QDOC
128 
129     final QAction addSeparator();
130     final QAction insertSeparator(QAction before);
131 
132     final QAction addWidget(QWidget widget);
133     final QAction insertWidget(QAction before, QWidget widget);
134 
135     final QRect actionGeometry(QAction action) const;
136     final QAction actionAt(ref const(QPoint) p) const;
137     pragma(inline, true) final QAction actionAt(int ax, int ay) const
138     { auto tmp = QPoint(ax, ay); return actionAt(tmp); }
139 
140     final QAction toggleViewAction() const;
141 
142     final QSize iconSize() const;
143     final /+ Qt:: +/qt.core.namespace.ToolButtonStyle toolButtonStyle() const;
144 
145     final QWidget widgetForAction(QAction action) const;
146 
147     final bool isFloatable() const;
148     final void setFloatable(bool floatable);
149     final bool isFloating() const;
150 
151 public /+ Q_SLOTS +/:
152     @QSlot final void setIconSize(ref const(QSize) iconSize);
153     @QSlot final void setToolButtonStyle(/+ Qt:: +/qt.core.namespace.ToolButtonStyle toolButtonStyle);
154 
155 /+ Q_SIGNALS +/public:
156     @QSignal final void actionTriggered(QAction action);
157     @QSignal final void movableChanged(bool movable);
158     @QSignal final void allowedAreasChanged(/+ Qt:: +/qt.core.namespace.ToolBarAreas allowedAreas);
159     @QSignal final void orientationChanged(/+ Qt:: +/qt.core.namespace.Orientation orientation);
160     @QSignal final void iconSizeChanged(ref const(QSize) iconSize);
161     @QSignal final void toolButtonStyleChanged(/+ Qt:: +/qt.core.namespace.ToolButtonStyle toolButtonStyle);
162     @QSignal final void topLevelChanged(bool topLevel);
163     @QSignal final void visibilityChanged(bool visible);
164 
165 protected:
166     override void actionEvent(QActionEvent event);
167     override void changeEvent(QEvent event);
168     override void paintEvent(QPaintEvent event);
169     override bool event(QEvent event);
170     /+ virtual +/ void initStyleOption(QStyleOptionToolBar* option) const;
171 
172 
173 private:
174     /+ Q_DECLARE_PRIVATE(QToolBar) +/
175     /+ Q_DISABLE_COPY(QToolBar) +/
176     /+ Q_PRIVATE_SLOT(d_func(), void _q_toggleView(bool))
177     Q_PRIVATE_SLOT(d_func(), void _q_updateIconSize(const QSize &))
178     Q_PRIVATE_SLOT(d_func(), void _q_updateToolButtonStyle(Qt::ToolButtonStyle)) +/
179 
180     /+ friend class QMainWindow; +/
181     /+ friend class QMainWindowLayout; +/
182     /+ friend class QToolBarLayout; +/
183     /+ friend class QToolBarAreaLayout; +/
184     mixin(CREATE_CONVENIENCE_WRAPPERS);
185 }
186