2 * Copyright (C) 2014 Canonical, Ltd.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 import Ubuntu.Components 1.3
19 import "../../Components"
21 /*! \brief This component constructs the Preview UI.
23 * Currently it displays all the widgets in a flickable column.
29 /*! \brief Model containing preview widgets.
31 * The model should expose "widgetId", "type" and "properties" roles, as well as
32 * have a triggered(QString widgetId, QString actionId, QVariantMap data) method,
33 * that's called when actions are executed in widgets.
35 property var previewModel
37 //! \brief The ScopeStyle component.
38 property var scopeStyle: null
40 //! Should the orientation be locked
41 property int orientationLockCount: 0
47 property: "widgetColumnCount"
49 when: root.orientationLockCount === 0
62 readonly property int columns: width >= units.gu(80) ? 2 : 1
63 readonly property real columnWidth: (width - (spacing * (columns - 1))) / columns
64 readonly property int singleColumnMargin: units.gu(2)
71 objectName: "previewListRow" + index
76 topMargin: units.gu(2)
77 width: row.columnWidth
80 readonly property int columnNumber: index
89 highlightMoveDuration: 0 // QTBUG-53460
91 Behavior on contentY { UbuntuNumberAnimation { } }
93 delegate: PreviewWidgetFactory {
94 widgetId: model.widgetId
95 widgetType: model.type
96 widgetData: model.properties
97 scopeStyle: root.scopeStyle
98 parentFlickable: column
103 leftMargin: if (row.columns == 1) {
104 return singleColumnMarginless ? 0 : row.singleColumnMargin;
106 return column.columnNumber == 0 ? row.singleColumnMargin : 0;
108 rightMargin: if (row.columns == 1) {
109 return singleColumnMarginless ? 0 : row.singleColumnMargin;
111 return column.columnNumber == 1 ? row.singleColumnMargin : 0;
116 previewModel.triggered(widgetId, actionId, data);
120 oskScroller.setMakeSureVisibleItem(item);
123 onFocusChanged: if (focus) column.positionViewAtIndex(index, ListView.Contain)
125 onHeightChanged: if (focus) {
126 column.forceLayout();
127 column.positionViewAtIndex(index, ListView.Contain)
130 onOrientationLockChanged: {
132 root.orientationLockCount++;
134 root.orientationLockCount = Math.max(0, root.orientationLockCount--);
137 Component.onDestruction: {
139 root.orientationLockCount = Math.max(0, root.orientationLockCount--);