Lomiri
CheckableSetting.qml
1 /*
2  * Copyright (C) 2014-2016 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.12
18 import Lomiri.Components 1.3
19 import Lomiri.Components.ListItems 1.3 as ListItem
20 
21 ListItem.Empty {
22  id: listItem
23 
24  property alias text: label.text
25  property bool checked: false
26  property real leftMargin
27  property real rightMargin
28 
29  readonly property real labelOffset: label.x
30 
31  signal linkActivated(string link)
32 
33  implicitHeight: Math.max(label.height, checkBox.height)
34  highlightWhenPressed: false
35 
36  FocusScope {
37  anchors.fill: parent
38  focus: true
39 
40  CheckBox {
41  id: checkBox
42 
43  anchors {
44  left: parent.left
45  top: parent.top
46  leftMargin: listItem.leftMargin
47  }
48 
49  Component.onCompleted: {
50  checked = listItem.checked;
51  }
52 
53  onClicked: {
54  listItem.checked = checked
55  listItem.triggered(listItem.checked)
56  }
57 
58  Connections {
59  target: listItem
60  onCheckedChanged: checkBox.checked = listItem.checked
61  }
62 
63  Connections {
64  target: listItem.__mouseArea
65  onClicked: {
66  listItem.checked = !listItem.checked
67  listItem.triggered(listItem.checked)
68  }
69  }
70  }
71 
72  Label {
73  id: label
74  anchors {
75  left: checkBox.right
76  right: parent.right
77  verticalCenter: parent.verticalCenter
78  leftMargin: units.gu(2)
79  rightMargin: listItem.rightMargin
80  }
81  wrapMode: Text.Wrap
82  linkColor: LomiriColors.orange
83  color: textColor
84  font.weight: Font.Light
85  fontSize: "small"
86  lineHeight: 1.2
87  onLinkActivated: listItem.linkActivated(link)
88  }
89 
90  Keys.onSpacePressed: checkBox.trigger()
91  }
92 }