aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-02-15 13:55:50 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-02-17 13:28:09 +0000
commit5313a2b3fd9fe83b20b3e589f29e744be5fcab38 (patch)
tree93ba98a425577cbdb73dc4a3f60be003d6b00aa5 /src/quicktemplates2
parentf6eb6a3661f5c8c47c539d38b5bcb0a33c22d904 (diff)
Add DialogButtonBox::buttonLayout
[ChangeLog][Controls][DialogButtonBox] Added buttonLayout property that can be used to arrange the buttons. Change-Id: I9160e5df86a0c9444b45ed9f585c50166c145671 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r--src/quicktemplates2/qquickdialogbuttonbox.cpp57
-rw-r--r--src/quicktemplates2/qquickdialogbuttonbox_p.h22
-rw-r--r--src/quicktemplates2/qquickdialogbuttonbox_p_p.h1
3 files changed, 73 insertions, 7 deletions
diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp
index cd971139..70425c40 100644
--- a/src/quicktemplates2/qquickdialogbuttonbox.cpp
+++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp
@@ -168,10 +168,16 @@ QT_BEGIN_NAMESPACE
\sa accepted(), rejected(), helpRequested()
*/
+static QQuickDialogButtonBox::ButtonLayout platformButtonLayout()
+{
+ return QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::DialogButtonBoxLayout).value<QQuickDialogButtonBox::ButtonLayout>();
+}
+
QQuickDialogButtonBoxPrivate::QQuickDialogButtonBoxPrivate()
: alignment(0),
position(QQuickDialogButtonBox::Footer),
standardButtons(QPlatformDialogHelper::NoButton),
+ buttonLayout(platformButtonLayout()),
delegate(nullptr)
{
}
@@ -258,6 +264,11 @@ void QQuickDialogButtonBoxPrivate::updateLayout()
}
struct ButtonLayout {
+ ButtonLayout(QPlatformDialogHelper::ButtonLayout layout)
+ : m_layout(QPlatformDialogHelper::buttonLayout(Qt::Horizontal, layout))
+ {
+ }
+
bool operator()(QQuickAbstractButton *first, QQuickAbstractButton *second)
{
const QPlatformDialogHelper::ButtonRole firstRole = QQuickDialogPrivate::buttonRole(first);
@@ -280,15 +291,10 @@ void QQuickDialogButtonBoxPrivate::updateLayout()
return firstRole != QPlatformDialogHelper::InvalidRole;
}
- static const int *themeButtonLayout()
- {
- const int hint = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt();
- return QPlatformDialogHelper::buttonLayout(Qt::Horizontal, static_cast<QPlatformDialogHelper::ButtonLayout>(hint));
- }
- const int *m_layout = themeButtonLayout();
+ const int *m_layout;
};
- std::sort(buttons.begin(), buttons.end(), ButtonLayout());
+ std::sort(buttons.begin(), buttons.end(), ButtonLayout(static_cast<QPlatformDialogHelper::ButtonLayout>(buttonLayout)));
for (int i = 0; i < buttons.count() - 1; ++i)
q->insertItem(i, buttons.at(i));
@@ -580,6 +586,43 @@ QQuickDialogButtonBoxAttached *QQuickDialogButtonBox::qmlAttachedProperties(QObj
return new QQuickDialogButtonBoxAttached(object);
}
+/*!
+ \since QtQuick.Controls 2.5 (Qt 5.12)
+ \qmlproperty enumeration QtQuick.Controls::DialogButtonBox::buttonLayout
+
+ This property holds the button layout policy to be used when arranging the buttons contained in the button box.
+ The default value is platform-specific.
+
+ Available values:
+ \value DialogButtonBox.WinLayout Use a policy appropriate for applications on Windows.
+ \value DialogButtonBox.MacLayout Use a policy appropriate for applications on macOS.
+ \value DialogButtonBox.KdeLayout Use a policy appropriate for applications on KDE.
+ \value DialogButtonBox.GnomeLayout Use a policy appropriate for applications on GNOME.
+ \value DialogButtonBox.AndroidLayout Use a policy appropriate for applications on Android.
+*/
+QQuickDialogButtonBox::ButtonLayout QQuickDialogButtonBox::buttonLayout() const
+{
+ Q_D(const QQuickDialogButtonBox);
+ return d->buttonLayout;
+}
+
+void QQuickDialogButtonBox::setButtonLayout(ButtonLayout layout)
+{
+ Q_D(QQuickDialogButtonBox);
+ if (d->buttonLayout == layout)
+ return;
+
+ d->buttonLayout = layout;
+ if (isComponentComplete())
+ d->updateLayout();
+ emit buttonLayoutChanged();
+}
+
+void QQuickDialogButtonBox::resetButtonLayout()
+{
+ setButtonLayout(platformButtonLayout());
+}
+
void QQuickDialogButtonBox::updatePolish()
{
Q_D(QQuickDialogButtonBox);
diff --git a/src/quicktemplates2/qquickdialogbuttonbox_p.h b/src/quicktemplates2/qquickdialogbuttonbox_p.h
index 1e3cdeef..df302e54 100644
--- a/src/quicktemplates2/qquickdialogbuttonbox_p.h
+++ b/src/quicktemplates2/qquickdialogbuttonbox_p.h
@@ -66,6 +66,8 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickDialogButtonBox : public QQuickCont
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment RESET resetAlignment NOTIFY alignmentChanged FINAL)
Q_PROPERTY(QPlatformDialogHelper::StandardButtons standardButtons READ standardButtons WRITE setStandardButtons NOTIFY standardButtonsChanged FINAL)
Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged FINAL)
+ // 2.5 (Qt 5.12)
+ Q_PROPERTY(ButtonLayout buttonLayout READ buttonLayout WRITE setButtonLayout RESET resetButtonLayout NOTIFY buttonLayoutChanged FINAL REVISION 5)
Q_FLAGS(QPlatformDialogHelper::StandardButtons)
public:
@@ -94,6 +96,24 @@ public:
static QQuickDialogButtonBoxAttached *qmlAttachedProperties(QObject *object);
+ // 2.5 (Qt 5.12)
+
+ // ### TODO: use Q_ENUMS(QPlatformDialogHelper::ButtonLayout)
+ enum ButtonLayout {
+ UnknownLayout = -1,
+ WinLayout,
+ MacLayout,
+ KdeLayout,
+ GnomeLayout,
+ MacModelessLayout,
+ AndroidLayout
+ };
+ Q_ENUM(ButtonLayout)
+
+ ButtonLayout buttonLayout() const;
+ void setButtonLayout(ButtonLayout layout);
+ void resetButtonLayout();
+
Q_SIGNALS:
void accepted();
void rejected();
@@ -107,6 +127,8 @@ Q_SIGNALS:
Q_REVISION(3) void applied();
Q_REVISION(3) void reset();
Q_REVISION(3) void discarded();
+ // 2.5 (Qt 5.12)
+ Q_REVISION(5) void buttonLayoutChanged();
protected:
void updatePolish() override;
diff --git a/src/quicktemplates2/qquickdialogbuttonbox_p_p.h b/src/quicktemplates2/qquickdialogbuttonbox_p_p.h
index 7247d591..3c761d6b 100644
--- a/src/quicktemplates2/qquickdialogbuttonbox_p_p.h
+++ b/src/quicktemplates2/qquickdialogbuttonbox_p_p.h
@@ -78,6 +78,7 @@ public:
Qt::Alignment alignment;
QQuickDialogButtonBox::Position position;
QPlatformDialogHelper::StandardButtons standardButtons;
+ QQuickDialogButtonBox::ButtonLayout buttonLayout;
QQmlComponent *delegate;
};