2 * Copyright 2013-2014 Canonical Ltd.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 import Ubuntu.Components 1.1
19 import Ubuntu.Settings.Components 0.1
25 property string identifier
26 property string title: indicatorName.text
27 property alias leftLabel: leftLabelItem.text
28 property alias rightLabel: rightLabelItem.text
29 property var icons: undefined
30 property bool expanded: false
31 property bool selected: false
32 property real iconHeight: units.gu(2)
33 readonly property color color: {
34 if (!expanded) return "#ededed";
35 if (!selected) return "#4c4c4c";
41 implicitWidth: mainItems.width
45 onClicked: parent.clicked()
50 anchors.centerIn: parent
52 width: leftLabelItem.width + iconsItem.width + rightLabelItem.width
53 implicitHeight: units.gu(2)
57 objectName: "leftLabel"
61 verticalCenter: parent.verticalCenter
63 width: contentWidth > 0 ? contentWidth + units.gu(1) : 0
64 horizontalAlignment: Text.AlignHCenter
70 Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } }
77 width: iconRow.width > 0 ? iconRow.width + units.gu(1) : 0
79 left: leftLabelItem.right
80 verticalCenter: parent.verticalCenter
85 anchors.centerIn: iconsItem
90 objectName: "iconRepeater"
92 model: d.useFallbackIcon ? [ "image://theme/settings" ] : root.icons
96 objectName: "icon"+index
100 Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } }
103 if (!expanded) return 1.0;
104 if (!selected) return 0.6;
107 Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } }
115 objectName: "rightLabel"
118 left: iconsItem.right
119 verticalCenter: parent.verticalCenter
121 width: contentWidth > 0 ? contentWidth + units.gu(1) : 0
122 horizontalAlignment: Text.AlignHCenter
125 font.family: "Ubuntu"
128 Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } }
134 objectName: "indicatorName"
136 anchors.top: mainItems.bottom
137 anchors.topMargin: units.gu(0.5)
138 anchors.horizontalCenter: parent.horizontalCenter
139 width: contentWidth > 0 ? contentWidth + units.gu(1) : 0
141 text: title !== "" ? title : identifier
143 horizontalAlignment: Text.AlignHCenter
146 Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } }
151 property bool useFallbackIcon: false
156 when: !expanded && ((icons && icons.length > 0) || leftLabel !== "" || rightLabel !== "")
157 PropertyChanges { target: indicatorName; opacity: 0}
161 name: "minimised_fallback"
162 when: !expanded && (!icons || icons.length === 0) && leftLabel == "" && rightLabel == ""
163 PropertyChanges { target: indicatorName; opacity: 0}
164 PropertyChanges { target: d; useFallbackIcon: true }
169 PropertyChanges { target: indicatorName; visible: true; opacity: 1}
170 PropertyChanges { target: mainItems; anchors.verticalCenterOffset: -units.gu(1) }
174 name: "expanded_icon"
176 when: expanded && (icons && icons.length > 0)
177 AnchorChanges { target: iconsItem; anchors.left: undefined; anchors.horizontalCenter: parent.horizontalCenter }
178 AnchorChanges { target: leftLabelItem; anchors.left: undefined; anchors.right: iconsItem.left }
179 PropertyChanges { target: leftLabelItem; opacity: 0 }
180 PropertyChanges { target: leftLabelItem; opacity: 0 }
181 PropertyChanges { target: rightLabelItem; opacity: 0 }
182 PropertyChanges { target: root; width: Math.max(units.gu(10), Math.max(iconsItem.width, indicatorName.width)) }
186 name: "expanded_fallback"
188 when: expanded && (!icons || icons.length === 0) && leftLabel == "" && rightLabel == ""
189 PropertyChanges { target: d; useFallbackIcon: true }
190 AnchorChanges { target: iconsItem; anchors.left: undefined; anchors.horizontalCenter: parent.horizontalCenter }
191 AnchorChanges { target: leftLabelItem; anchors.left: undefined; anchors.right: iconsItem.left }
192 PropertyChanges { target: leftLabelItem; opacity: 0 }
193 PropertyChanges { target: leftLabelItem; opacity: 0 }
194 PropertyChanges { target: rightLabelItem; opacity: 0 }
195 PropertyChanges { target: root; width: Math.max(units.gu(10), Math.max(iconsItem.width, indicatorName.width)) }
199 name: "expanded_rightLabel"
201 when: expanded && (!icons || icons.length === 0) && rightLabel !== ""
202 AnchorChanges { target: rightLabelItem; anchors.left: undefined; anchors.horizontalCenter: parent.horizontalCenter }
203 PropertyChanges { target: iconsItem; opacity: 0 }
204 PropertyChanges { target: leftLabelItem; opacity: 0 }
205 PropertyChanges { target: root; width: Math.max(units.gu(10), Math.max(rightLabelItem.width, indicatorName.width)) }
209 name: "expanded_leftLabel"
211 when: expanded && (!icons || icons.length === 0) && leftLabel !== ""
212 AnchorChanges { target: leftLabelItem; anchors.left: undefined; anchors.horizontalCenter: parent.horizontalCenter }
213 PropertyChanges { target: iconsItem; opacity: 0 }
214 PropertyChanges { target: rightLabelItem; opacity: 0 }
215 PropertyChanges { target: root; width: Math.max(units.gu(10), Math.max(leftLabelItem.width, indicatorName.width)) }
221 PropertyAction { target: d; property: "useFallbackIcon" }
223 targets: [ mainItems, iconsItem, leftLabelItem, rightLabelItem ]
224 duration: UbuntuAnimation.SnapDuration; easing: UbuntuAnimation.StandardEasing
227 targets: [ root, mainItems, iconsItem, leftLabelItem, rightLabelItem, indicatorName ]
228 properties: "width, opacity, anchors.verticalCenterOffset";
229 duration: UbuntuAnimation.SnapDuration; easing: UbuntuAnimation.StandardEasing
235 onRootActionStateChanged: {
236 if (rootActionState == undefined) {
244 title = rootActionState.title ? rootActionState.title : "";
245 leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
246 rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
247 icons = rootActionState.icons;