From 356ed5addc48663174019b1e40f970b727567166 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 9 Jun 2015 22:54:39 +0200 Subject: Container: resize the content automatically Change-Id: If7964b64b6f78fc77e1095d69658e27bcb89a6f8 Reviewed-by: J-P Nurmi --- src/controls/qquickcontainer.cpp | 25 +++++++++++++++++++++++++ src/controls/qquickcontainer_p.h | 3 +++ src/controls/qquickcontainer_p_p.h | 4 ++++ src/controls/qquicktabview.cpp | 2 +- src/imports/calendar/CalendarView.qml | 5 ----- src/imports/calendar/DayOfWeekRow.qml | 5 ----- src/imports/calendar/WeekNumberColumn.qml | 5 ----- src/imports/controls/Frame.qml | 4 ---- src/imports/controls/GroupBox.qml | 4 ---- src/imports/controls/PageIndicator.qml | 5 ----- src/imports/controls/TabBar.qml | 5 ----- src/imports/controls/TabView.qml | 5 ----- src/imports/controls/ToolBar.qml | 4 ---- 13 files changed, 33 insertions(+), 43 deletions(-) (limited to 'src') diff --git a/src/controls/qquickcontainer.cpp b/src/controls/qquickcontainer.cpp index 456dd6c8..4c31e12e 100644 --- a/src/controls/qquickcontainer.cpp +++ b/src/controls/qquickcontainer.cpp @@ -53,6 +53,15 @@ QQuickContainerPrivate::QQuickContainerPrivate() : { } +void QQuickContainerPrivate::resizeContent() +{ + Q_Q(QQuickContainer); + if (contentItem) { + contentItem->setPosition(QPointF(q->leftPadding(), q->topPadding())); + contentItem->setSize(QSizeF(q->availableWidth(), q->availableHeight())); + } +} + QQuickContainer::QQuickContainer(QQuickItem *parent) : QQuickControl(*(new QQuickContainerPrivate), parent) { @@ -120,11 +129,27 @@ void QQuickContainer::setContentItem(QQuickItem *item) if (item) { if (!item->parentItem()) item->setParentItem(this); + if (isComponentComplete()) + d->resizeContent(); } emit contentItemChanged(); } } +void QQuickContainer::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + Q_D(QQuickContainer); + QQuickControl::geometryChanged(newGeometry, oldGeometry); + d->resizeContent(); +} + +void QQuickContainer::paddingChange() +{ + Q_D(QQuickContainer); + QQuickControl::paddingChange(); + d->resizeContent(); +} + void QQuickContainer::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) { Q_UNUSED(newItem); diff --git a/src/controls/qquickcontainer_p.h b/src/controls/qquickcontainer_p.h index 6e3e224a..783f79fa 100644 --- a/src/controls/qquickcontainer_p.h +++ b/src/controls/qquickcontainer_p.h @@ -81,6 +81,9 @@ Q_SIGNALS: protected: QQuickContainer(QQuickContainerPrivate &dd, QQuickItem *parent); + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + void paddingChange() Q_DECL_OVERRIDE; + virtual void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem); private: diff --git a/src/controls/qquickcontainer_p_p.h b/src/controls/qquickcontainer_p_p.h index c0b52cec..538ecc3c 100644 --- a/src/controls/qquickcontainer_p_p.h +++ b/src/controls/qquickcontainer_p_p.h @@ -54,9 +54,13 @@ QT_BEGIN_NAMESPACE class Q_QUICKCONTROLS_EXPORT QQuickContainerPrivate : public QQuickControlPrivate { + Q_DECLARE_PUBLIC(QQuickContainer) + public: QQuickContainerPrivate(); + void resizeContent(); + qreal contentWidth; qreal contentHeight; QQuickItem *contentItem; diff --git a/src/controls/qquicktabview.cpp b/src/controls/qquicktabview.cpp index 3a79a725..4b2485b0 100644 --- a/src/controls/qquicktabview.cpp +++ b/src/controls/qquicktabview.cpp @@ -130,7 +130,7 @@ void QQuickTabView::setTabBar(QQuickTabBar *bar) void QQuickTabView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QQuickTabView); - QQuickControl::geometryChanged(newGeometry, oldGeometry); + QQuickContainer::geometryChanged(newGeometry, oldGeometry); if (d->bar) { QQuickItemPrivate *p = QQuickItemPrivate::get(d->bar); if (!p->widthValid) { diff --git a/src/imports/calendar/CalendarView.qml b/src/imports/calendar/CalendarView.qml index 6d182b49..d9d5d42f 100644 --- a/src/imports/calendar/CalendarView.qml +++ b/src/imports/calendar/CalendarView.qml @@ -64,11 +64,6 @@ AbstractCalendarView { rows: 6 columns: 7 - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight - Repeater { id: repeater model: control.source diff --git a/src/imports/calendar/DayOfWeekRow.qml b/src/imports/calendar/DayOfWeekRow.qml index c92b76bc..cec70551 100644 --- a/src/imports/calendar/DayOfWeekRow.qml +++ b/src/imports/calendar/DayOfWeekRow.qml @@ -63,11 +63,6 @@ AbstractDayOfWeekRow { contentItem: Row { id: row - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight - Repeater { model: control.source delegate: control.delegate diff --git a/src/imports/calendar/WeekNumberColumn.qml b/src/imports/calendar/WeekNumberColumn.qml index 2dbde919..149384f3 100644 --- a/src/imports/calendar/WeekNumberColumn.qml +++ b/src/imports/calendar/WeekNumberColumn.qml @@ -63,11 +63,6 @@ AbstractWeekNumberColumn { contentItem: Column { id: column - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight - Repeater { model: control.source delegate: control.delegate diff --git a/src/imports/controls/Frame.qml b/src/imports/controls/Frame.qml index 01bb0e53..02972e4b 100644 --- a/src/imports/controls/Frame.qml +++ b/src/imports/controls/Frame.qml @@ -54,10 +54,6 @@ AbstractFrame { contentItem: Item { id: content - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight } background: Rectangle { diff --git a/src/imports/controls/GroupBox.qml b/src/imports/controls/GroupBox.qml index d4ae204e..78eb4393 100644 --- a/src/imports/controls/GroupBox.qml +++ b/src/imports/controls/GroupBox.qml @@ -55,10 +55,6 @@ AbstractGroupBox { contentItem: Item { id: content - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight } label: Text { diff --git a/src/imports/controls/PageIndicator.qml b/src/imports/controls/PageIndicator.qml index cea0a050..54fe52ec 100644 --- a/src/imports/controls/PageIndicator.qml +++ b/src/imports/controls/PageIndicator.qml @@ -66,11 +66,6 @@ AbstractPageIndicator { contentItem: Row { id: row - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight - spacing: control.Theme.spacing Repeater { diff --git a/src/imports/controls/TabBar.qml b/src/imports/controls/TabBar.qml index 88ef7031..845cf3d0 100644 --- a/src/imports/controls/TabBar.qml +++ b/src/imports/controls/TabBar.qml @@ -64,11 +64,6 @@ AbstractTabBar { contentItem: ListView { id: listView - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight - spacing: 1 orientation: ListView.Horizontal boundsBehavior: Flickable.StopAtBounds diff --git a/src/imports/controls/TabView.qml b/src/imports/controls/TabView.qml index 63327d29..0fb6840b 100644 --- a/src/imports/controls/TabView.qml +++ b/src/imports/controls/TabView.qml @@ -68,11 +68,6 @@ AbstractTabView { Binding { target: control; property: "currentIndex"; value: listView.currentIndex } Binding { target: listView; property: "currentIndex"; value: control.currentIndex } - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight - orientation: Qt.Horizontal snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds diff --git a/src/imports/controls/ToolBar.qml b/src/imports/controls/ToolBar.qml index 0ec2b4c0..43666db2 100644 --- a/src/imports/controls/ToolBar.qml +++ b/src/imports/controls/ToolBar.qml @@ -54,10 +54,6 @@ AbstractToolBar { contentItem: Item { id: content - x: control.leftPadding - y: control.topPadding - width: control.availableWidth - height: control.availableHeight } background: Rectangle { -- cgit v1.2.3