Unity 8
PreviewIconActions.qml
1 /*
2  * Copyright (C) 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 Ubuntu.Components 1.3
19 
20 /*! This preview widget icons+label for number of items in widgetData["actions"].
21  * For each of the items we recognize the fields "label", "icon", "temporaryIcon" and "id".
22  * temporaryIcon is the icon that will be shown just after the user presses icon until the
23  * scope refreshes the preview
24  */
25 
26 PreviewWidget {
27  id: root
28 
29  implicitHeight: row.height
30 
31  Row {
32  id: row
33  readonly property var actions: root.widgetData ? root.widgetData["actions"] : null
34  width: parent.width
35  onActionsChanged: {
36  // Rewire the source since it may have been unwired on onClicked
37  // but the icon didn't change i.e. the scope updated the results
38  // and the icon needs to go back to the one it was originally
39  for (var i = 0; i < repeater.count; ++i) {
40  var button = repeater.itemAt(i);
41  button.updateIcon();
42  }
43  }
44 
45  spacing: units.gu(2)
46 
47  Repeater {
48  id: repeater
49  model: row.actions
50 
51  AbstractButton {
52  objectName: "button" + modelData.id
53  height: label.height
54  width: childrenRect.width
55 
56  readonly property var iconUrl: modelData.icon;
57  function updateIcon() {
58  icon.source = iconUrl;
59  }
60 
61  Image {
62  id: icon
63  height: parent.height
64  width: height
65  source: modelData.icon
66  sourceSize { width: icon.width; height: icon.height }
67  }
68 
69  Label {
70  id: label
71  anchors.left: icon.right
72  anchors.leftMargin: visible ? units.gu(0.5) : 0
73  text: modelData.label
74  font.weight: Font.Light
75  visible: text !== ""
76  }
77 
78  onClicked: {
79  if (modelData.temporaryIcon) {
80  icon.source = modelData.temporaryIcon;
81  }
82  root.triggered(root.widgetId, modelData.id, modelData);
83  }
84  }
85  }
86  }
87 
88 }