Unity 8
PreviewTable.qml
1 /*
2  * Copyright (C) 2014,2015 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 QtQuick.Layouts 1.1
19 import Ubuntu.Components 1.3
20 import "../../Components"
21 
22 /*! \brief Preview widget for table.
23 
24  This widget shows two columns contained in widgetData["values"]
25  as arrays of label,value along with a title that comes from widgetData["title"].
26 
27  In case the widget is collapsed it only shows 3 lines of values.
28  */
29 
30 PreviewWidget {
31  id: root
32  implicitHeight: column.implicitHeight
33 
34  readonly property int maximumCollapsedRowCount: 3
35 
36  Column {
37  id: column
38  objectName: "column"
39  spacing: units.gu(1)
40  width: parent.width
41 
42  Label {
43  id: titleLabel
44  objectName: "titleLabel"
45  anchors {
46  left: parent.left
47  right: parent.right
48  }
49  height: visible ? implicitHeight : 0
50  fontSize: "large"
51  font.weight: Font.Light
52  color: root.scopeStyle ? root.scopeStyle.foreground : theme.palette.normal.baseText
53  visible: text !== ""
54  opacity: .8
55  text: widgetData["title"] || ""
56  elide: Text.ElideRight
57  }
58 
59  GridLayout {
60  objectName: "gridLayout"
61  columns: 2
62  columnSpacing: units.gu(2)
63  Repeater {
64  id: rowsRepeater
65  model: widgetData["values"]
66 
67  delegate: Repeater {
68  id: perRowRepeater
69  readonly property int rowIndex: index
70  model: widgetData["values"][index]
71  delegate: Label {
72  objectName: "label"+rowIndex+index
73  fontSize: "small"
74  text: perRowRepeater.model[index]
75  visible: root.expanded || rowIndex < maximumCollapsedRowCount
76  color: root.scopeStyle ? root.scopeStyle.foreground : theme.palette.normal.baseText
77  font.weight: index == 0 ? Font.Normal : Font.Light
78  wrapMode: Text.Wrap
79  Layout.alignment: Qt.AlignTop
80  Layout.minimumHeight: Math.max(units.gu(2.75), contentHeight) // FIXME Reevaluate if we need this once we move away from Qt 5.4
81  Layout.maximumWidth: index == 0 ? column.width / 3 : column.width - x
82  Layout.minimumWidth: index == 0 ? column.width / 3 : -1
83  height: -1 // FIXME Qt 5.4 needs this otherwise wrapped columns
84  // get the height wrong and the next row looks weird
85  // remove once we stop supporting Qt 5.4 (if 5.5 doesn't need it)
86  }
87  }
88  }
89  }
90  }
91 }