diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/layouts/doc/src/qtquicklayouts-overview.qdoc | 2 | ||||
-rw-r--r-- | src/layouts/doc/src/qtquicklayouts.qdoc | 4 | ||||
-rw-r--r-- | src/layouts/doc/src/snippets/windowconstraints.qml | 2 | ||||
-rw-r--r-- | src/layouts/layouts.pro | 2 | ||||
-rw-r--r-- | src/layouts/plugin.cpp | 4 | ||||
-rw-r--r-- | src/layouts/plugins.qmltypes | 11 | ||||
-rw-r--r-- | src/layouts/qquickgridlayoutengine.cpp | 8 | ||||
-rw-r--r-- | src/layouts/qquickgridlayoutengine_p.h | 6 | ||||
-rw-r--r-- | src/layouts/qquicklayout.cpp | 178 | ||||
-rw-r--r-- | src/layouts/qquicklayout_p.h | 41 |
10 files changed, 246 insertions, 12 deletions
diff --git a/src/layouts/doc/src/qtquicklayouts-overview.qdoc b/src/layouts/doc/src/qtquicklayouts-overview.qdoc index c1f43256..7a124701 100644 --- a/src/layouts/doc/src/qtquicklayouts-overview.qdoc +++ b/src/layouts/doc/src/qtquicklayouts-overview.qdoc @@ -38,7 +38,7 @@ The QML types can be imported into your application using the following import statement in your \c {.qml} file. \code - import QtQuick.Layouts 1.1 + import QtQuick.Layouts 1.2 \endcode \section1 Key Features diff --git a/src/layouts/doc/src/qtquicklayouts.qdoc b/src/layouts/doc/src/qtquicklayouts.qdoc index 99d14e86..bda3236a 100644 --- a/src/layouts/doc/src/qtquicklayouts.qdoc +++ b/src/layouts/doc/src/qtquicklayouts.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! - \qmlmodule QtQuick.Layouts 1.1 + \qmlmodule QtQuick.Layouts 1.2 \title Qt Quick Layouts QML Types \ingroup qmlmodules \brief Provides QML types for arranging QML items in a user interface. @@ -40,7 +40,7 @@ following import statement in your .qml file. \code - import QtQuick.Layouts 1.1 + import QtQuick.Layouts 1.2 \endcode */ diff --git a/src/layouts/doc/src/snippets/windowconstraints.qml b/src/layouts/doc/src/snippets/windowconstraints.qml index 956989a3..e224b54f 100644 --- a/src/layouts/doc/src/snippets/windowconstraints.qml +++ b/src/layouts/doc/src/snippets/windowconstraints.qml @@ -40,7 +40,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.2 -import QtQuick.Layouts 1.0 +import QtQuick.Layouts 1.2 ApplicationWindow { //! [binddefaultsize] diff --git a/src/layouts/layouts.pro b/src/layouts/layouts.pro index 9d21c7a1..3ef18f85 100644 --- a/src/layouts/layouts.pro +++ b/src/layouts/layouts.pro @@ -1,7 +1,7 @@ CXX_MODULE = qml TARGET = qquicklayoutsplugin TARGETPATH = QtQuick/Layouts -IMPORT_VERSION = 1.1 +IMPORT_VERSION = 1.2 QT *= qml-private quick-private gui-private core-private diff --git a/src/layouts/plugin.cpp b/src/layouts/plugin.cpp index 243eea08..52af126c 100644 --- a/src/layouts/plugin.cpp +++ b/src/layouts/plugin.cpp @@ -52,7 +52,9 @@ public: qmlRegisterType<QQuickColumnLayout>(uri, 1, 0, "ColumnLayout"); qmlRegisterType<QQuickGridLayout>(uri, 1, 0, "GridLayout"); qmlRegisterUncreatableType<QQuickLayout>(uri, 1, 0, "Layout", - QLatin1String("Do not create objects of type Layout")); + QStringLiteral("Do not create objects of type Layout")); + qmlRegisterUncreatableType<QQuickLayout>(uri, 1, 2, "Layout", + QStringLiteral("Do not create objects of type Layout")); qmlRegisterRevision<QQuickGridLayoutBase, 1>(uri, 1, 1); } }; diff --git a/src/layouts/plugins.qmltypes b/src/layouts/plugins.qmltypes index 20a8f932..637210e2 100644 --- a/src/layouts/plugins.qmltypes +++ b/src/layouts/plugins.qmltypes @@ -4,7 +4,7 @@ import QtQuick.tooling 1.1 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump.exe -nonrelocatable QtQuick.Layouts 1.1' +// 'qmlplugindump -nonrelocatable QtQuick.Layouts 1.2' Module { Component { @@ -44,9 +44,9 @@ Module { name: "QQuickLayout" defaultProperty: "data" prototype: "QQuickItem" - exports: ["QtQuick.Layouts/Layout 1.0"] + exports: ["QtQuick.Layouts/Layout 1.0", "QtQuick.Layouts/Layout 1.2"] isCreatable: false - exportMetaObjectRevisions: [0] + exportMetaObjectRevisions: [0, 0] attachedType: "QQuickLayoutAttached" } Component { @@ -65,6 +65,11 @@ Module { Property { name: "rowSpan"; type: "int" } Property { name: "columnSpan"; type: "int" } Property { name: "alignment"; type: "Qt::Alignment" } + Property { name: "margins"; type: "double" } + Property { name: "leftMargin"; type: "double" } + Property { name: "topMargin"; type: "double" } + Property { name: "rightMargin"; type: "double" } + Property { name: "bottomMargin"; type: "double" } } Component { name: "QQuickLinearLayout" diff --git a/src/layouts/qquickgridlayoutengine.cpp b/src/layouts/qquickgridlayoutengine.cpp index b006a275..fc11c0fc 100644 --- a/src/layouts/qquickgridlayoutengine.cpp +++ b/src/layouts/qquickgridlayoutengine.cpp @@ -256,6 +256,14 @@ void QQuickGridLayoutItem::effectiveSizeHints_helper(QQuickItem *item, QSizeF *c const qreal minimumDescent = minS.height() - item->baselineOffset(); descentS.setHeight(minimumDescent); + if (info) { + QMarginsF margins = info->qMargins(); + QSizeF extraMargins(margins.left() + margins.right(), margins.top() + margins.bottom()); + minS += extraMargins; + prefS += extraMargins; + maxS += extraMargins; + descentS += extraMargins; + } if (attachedInfo) *attachedInfo = info; } diff --git a/src/layouts/qquickgridlayoutengine_p.h b/src/layouts/qquickgridlayoutengine_p.h index fb6949bc..fadaed72 100644 --- a/src/layouts/qquickgridlayoutengine_p.h +++ b/src/layouts/qquickgridlayoutengine_p.h @@ -105,9 +105,11 @@ public: void setGeometry(const QRectF &rect) { + QQuickLayoutAttached *info = attachedLayoutObject(m_item, false); + const QRectF r = info ? rect.marginsRemoved(info->qMargins()) : rect; const QSizeF oldSize(m_item->width(), m_item->height()); - const QSizeF newSize = rect.size(); - const QPointF topLeft(qCeil(rect.x()), qCeil(rect.y())); + const QSizeF newSize = r.size(); + QPointF topLeft(qCeil(r.x()), qCeil(r.y())); m_item->setPosition(topLeft); if (newSize == oldSize) { if (QQuickLayout *lay = qobject_cast<QQuickLayout *>(m_item)) { diff --git a/src/layouts/qquicklayout.cpp b/src/layouts/qquicklayout.cpp index 3772b6f4..fe57e35a 100644 --- a/src/layouts/qquicklayout.cpp +++ b/src/layouts/qquicklayout.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Quick Layouts module of the Qt Toolkit. @@ -86,6 +86,7 @@ QQuickLayoutAttached::QQuickLayoutAttached(QObject *parent) m_preferredHeight(-1), m_maximumWidth(std::numeric_limits<qreal>::infinity()), m_maximumHeight(std::numeric_limits<qreal>::infinity()), + m_defaultMargins(0), m_row(-1), m_column(-1), m_rowSpan(1), @@ -99,6 +100,10 @@ QQuickLayoutAttached::QQuickLayoutAttached(QObject *parent) m_isMaximumWidthSet(false), m_isMaximumHeightSet(false), m_changesNotificationEnabled(true), + m_isLeftMarginSet(false), + m_isTopMarginSet(false), + m_isRightMarginSet(false), + m_isBottomMarginSet(false), m_alignment(0) { @@ -417,6 +422,177 @@ void QQuickLayoutAttached::setAlignment(Qt::Alignment align) } } +/*! + \qmlattachedproperty real Layout::margins + + Sets the margins outside of an item to all have the same value. The item + itself does not evaluate its own margins. It is the parents responsibility + to decide if it wants to evaluate the margins. + + Specifically, margins are only evaluated by ColumnLayout, RowLayout, + GridLayout, and other layout-like containers, such as SplitView, where the + effective cell size of an item will be increased as the margins are + increased. + + Therefore, if an item with margins is a child of another \c Item, its + position, size and implicit size will remain unchanged. + + Combining margins with alignment will align the item *including* its + margins. For instance, a vertically-centered Item with top margin 1 and + bottom margin 9 will cause the Items effective alignment within the cell to + be 4 pixels above the center. + + The default value is 0 + + \sa leftMargin + \sa topMargin + \sa rightMargin + \sa bottomMargin + + \since QtQuick.Layouts 1.2 +*/ +void QQuickLayoutAttached::setMargins(qreal m) +{ + if (m == m_defaultMargins) + return; + + m_defaultMargins = m; + invalidateItem(); + if (!m_isLeftMarginSet && m_margins.left() != m) + emit leftMarginChanged(); + if (!m_isTopMarginSet && m_margins.top() != m) + emit topMarginChanged(); + if (!m_isRightMarginSet && m_margins.right() != m) + emit rightMarginChanged(); + if (!m_isBottomMarginSet && m_margins.bottom() != m) + emit bottomMarginChanged(); + emit marginsChanged(); +} + +/*! + \qmlattachedproperty real Layout::leftMargin + + Specifies the left margin outside of an item. + If the value is not set, it will use the value from \l margins. + + \sa margins + + \since QtQuick.Layouts 1.2 +*/ +void QQuickLayoutAttached::setLeftMargin(qreal m) +{ + const bool changed = leftMargin() != m; + m_margins.setLeft(m); + m_isLeftMarginSet = true; + if (changed) { + invalidateItem(); + emit leftMarginChanged(); + } +} + +void QQuickLayoutAttached::resetLeftMargin() +{ + const bool changed = m_isLeftMarginSet && (m_defaultMargins != m_margins.left()); + m_isLeftMarginSet = false; + if (changed) { + invalidateItem(); + emit leftMarginChanged(); + } +} + +/*! + \qmlattachedproperty real Layout::topMargin + + Specifies the top margin outside of an item. + If the value is not set, it will use the value from \l margins. + + \sa margins + + \since QtQuick.Layouts 1.2 +*/ +void QQuickLayoutAttached::setTopMargin(qreal m) +{ + const bool changed = topMargin() != m; + m_margins.setTop(m); + m_isTopMarginSet = true; + if (changed) { + invalidateItem(); + emit topMarginChanged(); + } +} + +void QQuickLayoutAttached::resetTopMargin() +{ + const bool changed = m_isTopMarginSet && (m_defaultMargins != m_margins.top()); + m_isTopMarginSet = false; + if (changed) { + invalidateItem(); + emit topMarginChanged(); + } +} + +/*! + \qmlattachedproperty real Layout::rightMargin + + Specifies the right margin outside of an item. + If the value is not set, it will use the value from \l margins. + + \sa margins + + \since QtQuick.Layouts 1.2 +*/ +void QQuickLayoutAttached::setRightMargin(qreal m) +{ + const bool changed = rightMargin() != m; + m_margins.setRight(m); + m_isRightMarginSet = true; + if (changed) { + invalidateItem(); + emit rightMarginChanged(); + } +} + +void QQuickLayoutAttached::resetRightMargin() +{ + const bool changed = m_isRightMarginSet && (m_defaultMargins != m_margins.right()); + m_isRightMarginSet = false; + if (changed) { + invalidateItem(); + emit rightMarginChanged(); + } +} + +/*! + \qmlattachedproperty real Layout::bottomMargin + + Specifies the bottom margin outside of an item. + If the value is not set, it will use the value from \l margins. + + \sa margins + + \since QtQuick.Layouts 1.2 +*/ +void QQuickLayoutAttached::setBottomMargin(qreal m) +{ + const bool changed = bottomMargin() != m; + m_margins.setBottom(m); + m_isBottomMarginSet = true; + if (changed) { + invalidateItem(); + emit bottomMarginChanged(); + } +} + +void QQuickLayoutAttached::resetBottomMargin() +{ + const bool changed = m_isBottomMarginSet && (m_defaultMargins != m_margins.bottom()); + m_isBottomMarginSet = false; + if (changed) { + invalidateItem(); + emit bottomMarginChanged(); + } +} + /*! \qmlattachedproperty int Layout::rowSpan diff --git a/src/layouts/qquicklayout_p.h b/src/layouts/qquicklayout_p.h index a92fea7b..3eeefccd 100644 --- a/src/layouts/qquicklayout_p.h +++ b/src/layouts/qquicklayout_p.h @@ -119,6 +119,12 @@ class QQuickLayoutAttached : public QObject Q_PROPERTY(int columnSpan READ columnSpan WRITE setColumnSpan NOTIFY columnSpanChanged) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged) + Q_PROPERTY(qreal margins READ margins WRITE setMargins NOTIFY marginsChanged) + Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin RESET resetLeftMargin NOTIFY leftMarginChanged) + Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin RESET resetTopMargin NOTIFY topMarginChanged) + Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin RESET resetRightMargin NOTIFY rightMarginChanged) + Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin RESET resetBottomMargin NOTIFY bottomMarginChanged) + public: QQuickLayoutAttached(QObject *object); @@ -166,6 +172,29 @@ public: Qt::Alignment alignment() const { return m_alignment; } void setAlignment(Qt::Alignment align); + qreal margins() const { return m_defaultMargins; } + void setMargins(qreal m); + + qreal leftMargin() const { return m_isLeftMarginSet ? m_margins.left() : m_defaultMargins; } + void setLeftMargin(qreal m); + void resetLeftMargin(); + + qreal topMargin() const { return m_isTopMarginSet ? m_margins.top() : m_defaultMargins; } + void setTopMargin(qreal m); + void resetTopMargin(); + + qreal rightMargin() const { return m_isRightMarginSet ? m_margins.right() : m_defaultMargins; } + void setRightMargin(qreal m); + void resetRightMargin(); + + qreal bottomMargin() const { return m_isBottomMarginSet ? m_margins.bottom() : m_defaultMargins; } + void setBottomMargin(qreal m); + void resetBottomMargin(); + + QMarginsF qMargins() const { + return QMarginsF(leftMargin(), topMargin(), rightMargin(), bottomMargin()); + } + bool setChangesNotificationEnabled(bool enabled) { const bool old = m_changesNotificationEnabled; @@ -200,6 +229,11 @@ signals: void maximumHeightChanged(); void fillWidthChanged(); void fillHeightChanged(); + void leftMarginChanged(); + void topMarginChanged(); + void rightMarginChanged(); + void bottomMarginChanged(); + void marginsChanged(); void rowChanged(); void columnChanged(); void rowSpanChanged(); @@ -219,6 +253,9 @@ private: qreal m_maximumWidth; qreal m_maximumHeight; + qreal m_defaultMargins; + QMarginsF m_margins; + // GridLayout specific properties int m_row; int m_column; @@ -236,6 +273,10 @@ private: unsigned m_isMaximumWidthSet : 1; unsigned m_isMaximumHeightSet : 1; unsigned m_changesNotificationEnabled : 1; + unsigned m_isLeftMarginSet : 1; + unsigned m_isTopMarginSet : 1; + unsigned m_isRightMarginSet : 1; + unsigned m_isBottomMarginSet : 1; Qt::Alignment m_alignment; friend class QQuickLayout; }; |