From f0f66c1aa001c630a6b246e312bef7f8e83958d2 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Fri, 3 Nov 2017 18:26:22 +0100 Subject: Qt.labs.platform: declare and register enums to the meta system To make them correctly available in QML so that they also work as signal arguments. Task-number: QTBUG-64259 Change-Id: I5fa00871f96357d924661c4b8af323a0f1748c9d Reviewed-by: Liang Qi --- src/imports/platform/qquickplatformmenu_p.h | 1 + .../platform/qquickplatformstandardpaths_p.h | 2 ++ .../platform/qquickplatformsystemtrayicon_p.h | 2 ++ src/imports/platform/qtlabsplatformplugin.cpp | 6 ++-- tests/auto/platform/data/tst_messagedialog.qml | 42 ++++++++++++++++++++++ tests/auto/platform/data/tst_systemtrayicon.qml | 32 +++++++++++++++++ 6 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/imports/platform/qquickplatformmenu_p.h b/src/imports/platform/qquickplatformmenu_p.h index 7456c660..b5c23b61 100644 --- a/src/imports/platform/qquickplatformmenu_p.h +++ b/src/imports/platform/qquickplatformmenu_p.h @@ -209,5 +209,6 @@ private: QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickPlatformMenu) +Q_DECLARE_METATYPE(QPlatformMenu::MenuType) #endif // QQUICKPLATFORMMENU_P_H diff --git a/src/imports/platform/qquickplatformstandardpaths_p.h b/src/imports/platform/qquickplatformstandardpaths_p.h index c3d879b0..e2f4e11e 100644 --- a/src/imports/platform/qquickplatformstandardpaths_p.h +++ b/src/imports/platform/qquickplatformstandardpaths_p.h @@ -86,5 +86,7 @@ private: QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickPlatformStandardPaths) +Q_DECLARE_METATYPE(QStandardPaths::StandardLocation) +Q_DECLARE_METATYPE(QStandardPaths::LocateOptions) #endif // QQUICKPLATFORMSTANDARDPATHS_P_H diff --git a/src/imports/platform/qquickplatformsystemtrayicon_p.h b/src/imports/platform/qquickplatformsystemtrayicon_p.h index 7aa07512..77a78f30 100644 --- a/src/imports/platform/qquickplatformsystemtrayicon_p.h +++ b/src/imports/platform/qquickplatformsystemtrayicon_p.h @@ -137,5 +137,7 @@ private: QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickPlatformSystemTrayIcon) +Q_DECLARE_METATYPE(QPlatformSystemTrayIcon::ActivationReason) +Q_DECLARE_METATYPE(QPlatformSystemTrayIcon::MessageIcon) #endif // QQUICKPLATFORMSYSTEMTRAYICON_P_H diff --git a/src/imports/platform/qtlabsplatformplugin.cpp b/src/imports/platform/qtlabsplatformplugin.cpp index bcb9ac98..1eac7d80 100644 --- a/src/imports/platform/qtlabsplatformplugin.cpp +++ b/src/imports/platform/qtlabsplatformplugin.cpp @@ -56,9 +56,6 @@ # include "qquickplatformsystemtrayicon_p.h" #endif -Q_DECLARE_METATYPE(QStandardPaths::StandardLocation) -Q_DECLARE_METATYPE(QStandardPaths::LocateOptions) - static inline void initResources() { #ifdef QT_STATIC @@ -102,6 +99,7 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri) qmlRegisterType(uri, 1, 0, "MenuItem"); qmlRegisterType(uri, 1, 0, "MenuItemGroup"); qmlRegisterType(uri, 1, 0, "MenuSeparator"); + qRegisterMetaType(); qmlRegisterUncreatableType(uri, 1, 0, "StandardButton", QQuickPlatformDialog::tr("Cannot create an instance of StandardButton")); qmlRegisterSingletonType(uri, 1, 0, "StandardPaths", QQuickPlatformStandardPaths::create); @@ -110,6 +108,8 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri) #if QT_CONFIG(systemtrayicon) qmlRegisterType(uri, 1, 0, "SystemTrayIcon"); + qRegisterMetaType(); + qRegisterMetaType(); #endif } diff --git a/tests/auto/platform/data/tst_messagedialog.qml b/tests/auto/platform/data/tst_messagedialog.qml index 8415f429..cf51c27d 100644 --- a/tests/auto/platform/data/tst_messagedialog.qml +++ b/tests/auto/platform/data/tst_messagedialog.qml @@ -63,9 +63,51 @@ TestCase { MessageDialog { } } + SignalSpy { + id: spy + } + function test_instance() { var dialog = messageDialog.createObject(testCase) verify(dialog) dialog.destroy() } + + function test_standardButtons() { + // Q_FLAGS(QPlatformDialogHelper::StandardButtons) + compare(MessageDialog.NoButton , 0x00000000) + compare(MessageDialog.Ok , 0x00000400) + compare(MessageDialog.Save , 0x00000800) + compare(MessageDialog.SaveAll , 0x00001000) + compare(MessageDialog.Open , 0x00002000) + compare(MessageDialog.Yes , 0x00004000) + compare(MessageDialog.YesToAll , 0x00008000) + compare(MessageDialog.No , 0x00010000) + compare(MessageDialog.NoToAll , 0x00020000) + compare(MessageDialog.Abort , 0x00040000) + compare(MessageDialog.Retry , 0x00080000) + compare(MessageDialog.Ignore , 0x00100000) + compare(MessageDialog.Close , 0x00200000) + compare(MessageDialog.Cancel , 0x00400000) + compare(MessageDialog.Discard , 0x00800000) + compare(MessageDialog.Help , 0x01000000) + compare(MessageDialog.Apply , 0x02000000) + compare(MessageDialog.Reset , 0x04000000) + compare(MessageDialog.RestoreDefaults, 0x08000000) + } + + function test_clicked() { + var dialog = messageDialog.createObject(testCase) + verify(dialog) + + spy.target = dialog + spy.signalName = "clicked" + + dialog.clicked(MessageDialog.Yes) + compare(spy.count, 1) + compare(spy.signalArguments[0][0], MessageDialog.Yes) + + spy.clear() + dialog.destroy() + } } diff --git a/tests/auto/platform/data/tst_systemtrayicon.qml b/tests/auto/platform/data/tst_systemtrayicon.qml index 62e231c0..ea6f731a 100644 --- a/tests/auto/platform/data/tst_systemtrayicon.qml +++ b/tests/auto/platform/data/tst_systemtrayicon.qml @@ -97,4 +97,36 @@ TestCase { spy.clear() icon.destroy() } + + function test_messageIcon() { + // Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason) + compare(SystemTrayIcon.NoIcon, 0) + compare(SystemTrayIcon.Information, 1) + compare(SystemTrayIcon.Warning, 2) + compare(SystemTrayIcon.Critical, 3) + } + + function test_activationReason() { + // Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason) + compare(SystemTrayIcon.Unknown, 0) + compare(SystemTrayIcon.Context, 1) + compare(SystemTrayIcon.DoubleClick, 2) + compare(SystemTrayIcon.Trigger, 3) + compare(SystemTrayIcon.MiddleClick, 4) + } + + function test_activated() { + var icon = systemTrayIcon.createObject(testCase) + verify(icon) + + spy.target = icon + spy.signalName = "activated" + + icon.activated(SystemTrayIcon.Trigger) + compare(spy.count, 1) + compare(spy.signalArguments[0][0], SystemTrayIcon.Trigger) + + spy.clear() + icon.destroy() + } } -- cgit v1.2.3 From f46776cc68f88a8cbc518cacf6c63f31f11d73b0 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 6 Nov 2017 13:53:03 +0100 Subject: Fix QQuickSlider::valueAt() Task-number: QTBUG-64065 Change-Id: Id77a85ce5b88c20795e9f7fe9d2ece974f46a315 Reviewed-by: J-P Nurmi --- src/quicktemplates2/qquickslider.cpp | 6 +++--- tests/auto/controls/data/tst_slider.qml | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp index 4d3cbe3e..da2f402f 100644 --- a/src/quicktemplates2/qquickslider.cpp +++ b/src/quicktemplates2/qquickslider.cpp @@ -513,10 +513,10 @@ void QQuickSlider::setHandle(QQuickItem *handle) qreal QQuickSlider::valueAt(qreal position) const { Q_D(const QQuickSlider); - const qreal value = d->from + (d->to - d->from) * position; + const qreal value = (d->to - d->from) * position; if (qFuzzyIsNull(d->stepSize)) - return value; - return qRound(value / d->stepSize) * d->stepSize; + return d->from + value; + return d->from + qRound(value / d->stepSize) * d->stepSize; } /*! diff --git a/tests/auto/controls/data/tst_slider.qml b/tests/auto/controls/data/tst_slider.qml index 8d696297..9ee8626d 100644 --- a/tests/auto/controls/data/tst_slider.qml +++ b/tests/auto/controls/data/tst_slider.qml @@ -769,12 +769,14 @@ TestCase { return [ { tag: "0.0..1.0", from: 0.0, to: 1.0, values: [0.0, 0.2, 0.5, 1.0] }, { tag: "0..100", from: 0, to: 100, values: [0, 20, 50, 100] }, - { tag: "100..-100", from: 100, to: -100, values: [100, 60, 0, -100] } + { tag: "100..-100", from: 100, to: -100, values: [100, 60, 0, -100] }, + { tag: "-7..7", from: -7, to: 7, stepSize: 1.0, values: [-7.0, -4.0, 0.0, 7.0] }, + { tag: "-3..7", from: -3, to: 7, stepSize: 5.0, values: [-3.0, -3.0, 2.0, 7.0] }, ] } function test_valueAt(data) { - var control = createTemporaryObject(slider, testCase, {from: data.from, to: data.to}) + var control = createTemporaryObject(slider, testCase, {from: data.from, to: data.to, stepSize: data.stepSize}) verify(control) compare(control.valueAt(0.0), data.values[0]) -- cgit v1.2.3 From a0559ea88be32e19e83b2131cb26e61e873dc817 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 3 Nov 2017 11:13:44 +0400 Subject: DialogButtonBox: micro optimization for resizeContent() Change-Id: Ie72671fb92108dfaf5aaae4ea3ffb279e14b2f1a Reviewed-by: J-P Nurmi --- src/quicktemplates2/qquickdialogbuttonbox.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp index 1b50346c..5f7f488e 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox.cpp +++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp @@ -172,13 +172,13 @@ static QRectF alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment qreal w = size.width(); qreal h = size.height(); if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter) - y += rectangle.size().height() / 2 - h / 2; + y += (rectangle.size().height() - h) / 2; else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom) y += rectangle.size().height() - h; if ((alignment & Qt::AlignRight) == Qt::AlignRight) x += rectangle.size().width() - w; else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter) - x += rectangle.size().width() / 2 - w / 2; + x += (rectangle.size().width() - w) / 2; return QRectF(x, y, w, h); } @@ -188,15 +188,12 @@ void QQuickDialogButtonBoxPrivate::resizeContent() if (!contentItem) return; - const int halign = alignment & Qt::AlignHorizontal_Mask; - const int valign = alignment & Qt::AlignVertical_Mask; - - const qreal cw = !halign ? q->availableWidth() : contentItem->implicitWidth(); - const qreal ch = !valign ? q->availableHeight() : contentItem->implicitHeight(); - QRectF geometry = q->boundingRect().adjusted(q->leftPadding(), q->topPadding(), -q->rightPadding(), -q->bottomPadding()); - if (halign || valign) + if (alignment != 0) { + qreal cw = (alignment & Qt::AlignHorizontal_Mask) == 0 ? q->availableWidth() : contentItem->implicitWidth(); + qreal ch = (alignment & Qt::AlignVertical_Mask) == 0 ? q->availableHeight() : contentItem->implicitHeight(); geometry = alignedRect(q->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight, alignment, QSizeF(cw, ch), geometry); + } contentItem->setPosition(geometry.topLeft()); contentItem->setSize(geometry.size()); -- cgit v1.2.3