summaryrefslogtreecommitdiff
path: root/src/layouts/qquicklinearlayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/layouts/qquicklinearlayout.cpp')
-rw-r--r--src/layouts/qquicklinearlayout.cpp121
1 files changed, 88 insertions, 33 deletions
diff --git a/src/layouts/qquicklinearlayout.cpp b/src/layouts/qquicklinearlayout.cpp
index 541e4aca..931bfed5 100644
--- a/src/layouts/qquicklinearlayout.cpp
+++ b/src/layouts/qquicklinearlayout.cpp
@@ -48,33 +48,67 @@
/*!
\qmltype RowLayout
\instantiates QQuickRowLayout
+ \inherits Item
\inqmlmodule QtQuick.Layouts 1.0
\ingroup layouts
\brief Identical to \l GridLayout, but having only one row.
It is available as a convenience for developers, as it offers a cleaner API.
+ Items in a RowLayout support these attached properties:
+ \list
+ \li \l{Layout::minimumWidth}{Layout.minimumWidth}
+ \li \l{Layout::minimumHeight}{Layout.minimumHeight}
+ \li \l{Layout::preferredWidth}{Layout.preferredWidth}
+ \li \l{Layout::preferredHeight}{Layout.preferredHeight}
+ \li \l{Layout::maximumWidth}{Layout.maximumWidth}
+ \li \l{Layout::maximumHeight}{Layout.maximumHeight}
+ \li \l{Layout::fillWidth}{Layout.fillWidth}
+ \li \l{Layout::fillHeight}{Layout.fillHeight}
+ \li \l{Layout::alignment}{Layout.alignment}
+ \endlist
+
+ Read more about attached properties \l{QML Object Attributes}{here}.
\sa ColumnLayout
\sa GridLayout
+ \sa Row
*/
/*!
\qmltype ColumnLayout
\instantiates QQuickColumnLayout
+ \inherits Item
\inqmlmodule QtQuick.Layouts 1.0
\ingroup layouts
\brief Identical to \l GridLayout, but having only one column.
It is available as a convenience for developers, as it offers a cleaner API.
+ Items in a ColumnLayout support these attached properties:
+ \list
+ \li \l{Layout::minimumWidth}{Layout.minimumWidth}
+ \li \l{Layout::minimumHeight}{Layout.minimumHeight}
+ \li \l{Layout::preferredWidth}{Layout.preferredWidth}
+ \li \l{Layout::preferredHeight}{Layout.preferredHeight}
+ \li \l{Layout::maximumWidth}{Layout.maximumWidth}
+ \li \l{Layout::maximumHeight}{Layout.maximumHeight}
+ \li \l{Layout::fillWidth}{Layout.fillWidth}
+ \li \l{Layout::fillHeight}{Layout.fillHeight}
+ \li \l{Layout::alignment}{Layout.alignment}
+ \endlist
+
+ Read more about attached properties \l{QML Object Attributes}{here}.
+
\sa RowLayout
\sa GridLayout
+ \sa Column
*/
/*!
\qmltype GridLayout
\instantiates QQuickGridLayout
+ \inherits Item
\inqmlmodule QtQuick.Layouts 1.0
\ingroup layouts
\brief Provides a way of dynamically arranging items in a grid.
@@ -112,39 +146,44 @@
specify the row span or column span by setting the \l{Layout::rowSpan}{Layout.rowSpan} or
\l{Layout::columnSpan}{Layout.columnSpan} properties.
- When the layout is resized, items may grow or shrink. Due to this, items have a
- \l{Layout::minimumWidth}{minimum size}, \l{Layout::preferredWidth}{preferred size} and a
- \l{Layout::maximumWidth}{maximum size}.
-
- Preferred size may come from one of several sources. It can be specified with the
- \l{Layout::preferredWidth}{Layout.preferredWidth} and
- \l{Layout::preferredHeight}{Layout.preferredHeight} properties. If these properties are not
- specified, it will use the items' \l{Item::implicitWidth}{implicitWidth} or
- \l{Item::implicitHeight}{implicitHeight} as the preferred size.
- Finally, if neither of these properties are set, it will use the \l{Item::width}{width} and
- \l{Item::height}{height} properties of the item. Note that is provided only as a final
- fallback. If you want to override the preferred size, you should use
- \l{Layout::preferredWidth}{Layout.preferredWidth} or
- \l{Layout::preferredHeight}{Layout.preferredHeight}.
- The \l{Layout::fillWidth}{Layout.fillWidth} and \l{Layout::fillHeight}{Layout.fillHeight} can
- either be \c true or \c false. If it is \c false, the items size will be fixed to its preferred
- size. Otherwise, it will grow or shrink between its minimum and maximum size.
+ Items in a GridLayout support these attached properties:
+ \list
+ \li \l{Layout::row}{Layout.row}
+ \li \l{Layout::column}{Layout.column}
+ \li \l{Layout::rowSpan}{Layout.rowSpan}
+ \li \l{Layout::columnSpan}{Layout.columnSpan}
+ \li \l{Layout::minimumWidth}{Layout.minimumWidth}
+ \li \l{Layout::minimumHeight}{Layout.minimumHeight}
+ \li \l{Layout::preferredWidth}{Layout.preferredWidth}
+ \li \l{Layout::preferredHeight}{Layout.preferredHeight}
+ \li \l{Layout::maximumWidth}{Layout.maximumWidth}
+ \li \l{Layout::maximumHeight}{Layout.maximumHeight}
+ \li \l{Layout::fillWidth}{Layout.fillWidth}
+ \li \l{Layout::fillHeight}{Layout.fillHeight}
+ \li \l{Layout::alignment}{Layout.alignment}
+ \endlist
- \note It is not recommended to have bindings to the width and height properties of items in a
- GridLayout, since this would conflict with the goal of the GridLayout.
+ Read more about attached properties \l{QML Object Attributes}{here}.
\sa RowLayout
\sa ColumnLayout
-
+ \sa Grid
*/
QT_BEGIN_NAMESPACE
-static const qreal q_declarativeLayoutDefaultSpacing = 4.0;
-
+static qreal quickLayoutDefaultSpacing()
+{
+ qreal spacing = 5.0;
+#ifndef Q_OS_MAC
+ // On mac the DPI is always 72 so we should not scale it
+ spacing = qRound(spacing * (qreal(qt_defaultDpiX()) / 96.0));
+#endif
+ return spacing;
+}
QQuickGridLayoutBase::QQuickGridLayoutBase(QQuickGridLayoutBasePrivate &dd,
Qt::Orientation orientation,
@@ -177,12 +216,18 @@ QSizeF QQuickGridLayoutBase::sizeHint(Qt::SizeHint whichSizeHint) const
return d->engine.sizeHint(whichSizeHint, QSizeF());
}
+QQuickGridLayoutBase::~QQuickGridLayoutBase()
+{
+ d_func()->m_isReady = false;
+}
+
void QQuickGridLayoutBase::componentComplete()
{
Q_D(QQuickGridLayoutBase);
quickLayoutDebug() << objectName() << "QQuickGridLayoutBase::componentComplete()" << parent();
d->m_disableRearrange = true;
QQuickLayout::componentComplete(); // will call our geometryChange(), (where isComponentComplete() == true)
+ d->m_isReady = true;
d->m_disableRearrange = false;
updateLayoutItems();
@@ -228,7 +273,7 @@ void QQuickGridLayoutBase::componentComplete()
void QQuickGridLayoutBase::invalidate(QQuickItem *childItem)
{
Q_D(QQuickGridLayoutBase);
- if (!isComponentComplete())
+ if (!isReady())
return;
quickLayoutDebug() << "QQuickGridLayoutBase::invalidate()";
@@ -267,7 +312,7 @@ void QQuickGridLayoutBase::invalidate(QQuickItem *childItem)
void QQuickGridLayoutBase::updateLayoutItems()
{
Q_D(QQuickGridLayoutBase);
- if (!isComponentComplete() || !isVisible())
+ if (!isReady() || !isVisible())
return;
quickLayoutDebug() << "QQuickGridLayoutBase::updateLayoutItems";
d->engine.deleteItems();
@@ -287,7 +332,7 @@ void QQuickGridLayoutBase::itemChange(ItemChange change, const ItemChangeData &v
QObject::connect(item, SIGNAL(implicitWidthChanged()), this, SLOT(onItemImplicitSizeChanged()));
QObject::connect(item, SIGNAL(implicitHeightChanged()), this, SLOT(onItemImplicitSizeChanged()));
- if (isComponentComplete() && isVisible())
+ if (isReady() && isVisible())
updateLayoutItems();
} else if (change == ItemChildRemovedChange) {
quickLayoutDebug() << "ItemChildRemovedChange";
@@ -296,7 +341,7 @@ void QQuickGridLayoutBase::itemChange(ItemChange change, const ItemChangeData &v
QObject::disconnect(item, SIGNAL(visibleChanged()), this, SLOT(onItemVisibleChanged()));
QObject::disconnect(item, SIGNAL(implicitWidthChanged()), this, SLOT(onItemImplicitSizeChanged()));
QObject::disconnect(item, SIGNAL(implicitHeightChanged()), this, SLOT(onItemImplicitSizeChanged()));
- if (isComponentComplete() && isVisible())
+ if (isReady() && isVisible())
updateLayoutItems();
}
@@ -307,7 +352,7 @@ void QQuickGridLayoutBase::geometryChanged(const QRectF &newGeometry, const QRec
{
Q_D(QQuickGridLayoutBase);
QQuickLayout::geometryChanged(newGeometry, oldGeometry);
- if (d->m_disableRearrange || !isComponentComplete() || !newGeometry.isValid())
+ if (d->m_disableRearrange || !isReady() || !newGeometry.isValid())
return;
quickLayoutDebug() << "QQuickGridLayoutBase::geometryChanged" << newGeometry << oldGeometry;
rearrange(newGeometry.size());
@@ -321,6 +366,11 @@ void QQuickGridLayoutBase::removeGridItem(QGridLayoutItem *gridItem)
d->engine.removeRows(index, 1, d->orientation);
}
+bool QQuickGridLayoutBase::isReady() const
+{
+ return d_func()->m_isReady;
+}
+
void QQuickGridLayoutBase::removeLayoutItem(QQuickItem *item)
{
Q_D(QQuickGridLayoutBase);
@@ -334,7 +384,7 @@ void QQuickGridLayoutBase::removeLayoutItem(QQuickItem *item)
void QQuickGridLayoutBase::onItemVisibleChanged()
{
- if (!isComponentComplete())
+ if (!isReady())
return;
quickLayoutDebug() << "QQuickGridLayoutBase::onItemVisibleChanged";
updateLayoutItems();
@@ -342,6 +392,8 @@ void QQuickGridLayoutBase::onItemVisibleChanged()
void QQuickGridLayoutBase::onItemDestroyed()
{
+ if (!isReady())
+ return;
Q_D(QQuickGridLayoutBase);
quickLayoutDebug() << "QQuickGridLayoutBase::onItemDestroyed";
QQuickItem *inDestruction = static_cast<QQuickItem *>(sender());
@@ -354,6 +406,8 @@ void QQuickGridLayoutBase::onItemDestroyed()
void QQuickGridLayoutBase::onItemImplicitSizeChanged()
{
+ if (!isReady())
+ return;
QQuickItem *item = static_cast<QQuickItem *>(sender());
Q_ASSERT(item);
invalidate(item);
@@ -362,7 +416,7 @@ void QQuickGridLayoutBase::onItemImplicitSizeChanged()
void QQuickGridLayoutBase::rearrange(const QSizeF &size)
{
Q_D(QQuickGridLayoutBase);
- if (!isComponentComplete())
+ if (!isReady())
return;
quickLayoutDebug() << objectName() << "QQuickGridLayoutBase::rearrange()" << size;
@@ -412,9 +466,10 @@ QQuickGridLayout::QQuickGridLayout(QQuickItem *parent /* = 0*/)
: QQuickGridLayoutBase(*new QQuickGridLayoutPrivate, Qt::Horizontal, parent)
{
Q_D(QQuickGridLayout);
- d->columnSpacing = q_declarativeLayoutDefaultSpacing;
- d->rowSpacing = q_declarativeLayoutDefaultSpacing;
- d->engine.setSpacing(q_declarativeLayoutDefaultSpacing, Qt::Horizontal | Qt::Vertical);
+ const qreal defaultSpacing = quickLayoutDefaultSpacing();
+ d->columnSpacing = defaultSpacing;
+ d->rowSpacing = defaultSpacing;
+ d->engine.setSpacing(defaultSpacing, Qt::Horizontal | Qt::Vertical);
}
/*!
@@ -672,7 +727,7 @@ QQuickLinearLayout::QQuickLinearLayout(Qt::Orientation orientation,
: QQuickGridLayoutBase(*new QQuickLinearLayoutPrivate, orientation, parent)
{
Q_D(QQuickLinearLayout);
- d->spacing = q_declarativeLayoutDefaultSpacing;
+ d->spacing = quickLayoutDefaultSpacing();
d->engine.setSpacing(d->spacing, Qt::Horizontal | Qt::Vertical);
}