Unity 8
Preview.qml
1 /*
2  * Copyright (C) 2014 Canonical, Ltd.
3  *
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.
7  *
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.
12  *
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/>.
15  */
16 
17 import QtQuick 2.4
18 import Ubuntu.Components 1.3
19 import "../../Components"
20 
21 /*! \brief This component constructs the Preview UI.
22  *
23  * Currently it displays all the widgets in a flickable column.
24  */
25 
26 Item {
27  id: root
28 
29  /*! \brief Model containing preview widgets.
30  *
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.
34  */
35  property var previewModel
36 
37  //! \brief The ScopeStyle component.
38  property var scopeStyle: null
39 
40  //! Should the orientation be locked
41  property int orientationLockCount: 0
42 
43  clip: true
44 
45  Binding {
46  target: previewModel
47  property: "widgetColumnCount"
48  value: row.columns
49  when: root.orientationLockCount === 0
50  }
51 
52  MouseArea {
53  anchors.fill: parent
54  }
55 
56  Row {
57  id: row
58 
59  spacing: units.gu(1)
60  anchors { fill: parent; margins: spacing }
61 
62  property int columns: width >= units.gu(80) ? 2 : 1
63  property real columnWidth: width / columns
64 
65  Repeater {
66  model: previewModel
67 
68  delegate: ListView {
69  id: column
70  objectName: "previewListRow" + index
71  anchors {
72  top: parent.top
73  bottom: parent.bottom
74  }
75  width: row.columnWidth
76  spacing: row.spacing
77 
78  ListViewOSKScroller {
79  id: oskScroller
80  list: column
81  }
82 
83  model: columnModel
84  cacheBuffer: height
85  highlightMoveDuration: 0 // QTBUG-53460
86 
87  Behavior on contentY { UbuntuNumberAnimation { } }
88 
89  delegate: PreviewWidgetFactory {
90  widgetId: model.widgetId
91  widgetType: model.type
92  widgetData: model.properties
93  scopeStyle: root.scopeStyle
94  parentFlickable: column
95 
96  anchors {
97  left: parent.left
98  right: parent.right
99  leftMargin: widgetMargins
100  rightMargin: widgetMargins
101  }
102 
103  onTriggered: {
104  previewModel.triggered(widgetId, actionId, data);
105  }
106 
107  onMakeSureVisible: {
108  oskScroller.setMakeSureVisibleItem(item);
109  }
110 
111  onFocusChanged: if (focus) column.positionViewAtIndex(index, ListView.Contain)
112 
113  onHeightChanged: if (focus) {
114  column.forceLayout();
115  column.positionViewAtIndex(index, ListView.Contain)
116  }
117 
118  onOrientationLockChanged: {
119  if (orientationLock)
120  root.orientationLockCount++;
121  else
122  root.orientationLockCount = Math.max(0, root.orientationLockCount--);
123  }
124 
125  Component.onDestruction: {
126  if (orientationLock)
127  root.orientationLockCount = Math.max(0, root.orientationLockCount--);
128  }
129  }
130  }
131  }
132  }
133 }