1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the Qt Components project.
9 ** $QT_BEGIN_LICENSE:BSD$
10 ** You may use this file under the terms of the BSD license as follows:
12 ** "Redistribution and use in source and binary forms, with or without
13 ** modification, are permitted provided that the following conditions are
15 ** * Redistributions of source code must retain the above copyright
16 ** notice, this list of conditions and the following disclaimer.
17 ** * Redistributions in binary form must reproduce the above copyright
18 ** notice, this list of conditions and the following disclaimer in
19 ** the documentation and/or other materials provided with the
21 ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
22 ** the names of its contributors may be used to endorse or promote
23 ** products derived from this software without specific prior written
26 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
39 ****************************************************************************/
48 property bool checked: false
49 property bool pressed: stateGroup.state == "Pressed" || stateGroup.state == "KeyPressed"
53 property alias text: label.text
55 // Symbian specific API
56 property bool platformInverted: false
58 // Performance optimization:
59 // Use value assignment when property changes instead of binding to js function
60 onCheckedChanged: { contentIcon.source = internal.iconSource() }
61 onPressedChanged: { contentIcon.source = internal.iconSource() }
62 onEnabledChanged: { contentIcon.source = internal.iconSource() }
63 onPlatformInvertedChanged: { contentIcon.source = internal.iconSource() }
67 objectName: "internal"
68 property color disabledColor: root.platformInverted ? platformStyle.colorDisabledLightInverted
69 : platformStyle.colorDisabledLight
70 property color pressedColor: root.platformInverted ? platformStyle.colorPressedInverted
71 : platformStyle.colorPressed
72 property color normalColor: root.platformInverted ? platformStyle.colorNormalLightInverted
73 : platformStyle.colorNormalLight
75 function iconSource() {
79 id = "disabled_selected"
81 id = "disabled_unselected"
85 else if (root.checked)
86 id = "normal_selected"
88 id = "normal_unselected"
90 return privateStyle.imagePath("qtg_graf_checkbox_" + id, root.platformInverted)
94 clickedEffect.restart()
95 root.checked = !root.checked
104 State { name: "Pressed" },
105 State { name: "KeyPressed" },
106 State { name: "Canceled" }
112 ScriptAction { script: privateStyle.play(Android.BasicItem) }
117 ScriptAction { script: privateStyle.play(Android.CheckBox) }
118 ScriptAction { script: internal.toggle() }
123 ScriptAction { script: internal.toggle() }
129 implicitWidth: label.text ? privateStyle.buttonSize + platformStyle.paddingMedium + privateStyle.textWidth(label.text, label.font)
130 : privateStyle.buttonSize
131 implicitHeight: privateStyle.buttonSize
135 source: privateStyle.imagePath("qtg_graf_checkbox_normal_unselected", root.platformInverted);
136 anchors.left: parent.left
137 anchors.verticalCenter: parent.verticalCenter
138 sourceSize.width: privateStyle.buttonSize
139 sourceSize.height: privateStyle.buttonSize
146 onPressed: stateGroup.state = "Pressed"
147 onReleased: stateGroup.state = ""
148 onClicked: stateGroup.state = ""
149 onExited: stateGroup.state = "Canceled"
152 stateGroup.state = "Canceled"
153 // Reset state. Can't expect a release since mouse was ungrabbed
154 stateGroup.state = ""
161 anchors.left: contentIcon.right
162 anchors.leftMargin: text ? platformStyle.paddingMedium : 0
163 anchors.right: parent.right
164 anchors.verticalCenter: parent.verticalCenter
165 elide: Text.ElideRight
166 horizontalAlignment: Text.AlignLeft
167 font { family: platformStyle.fontFamilyRegular; pixelSize: platformStyle.fontSizeMedium }
168 color: root.enabled ? (root.pressed ? internal.pressedColor : internal.normalColor)
169 : internal.disabledColor
172 SequentialAnimation {
179 easing.type: Easing.Linear
187 easing.type: Easing.OutQuad
193 if (!event.isAutoRepeat && (event.key == Qt.Key_Select
194 || event.key == Qt.Key_Return
195 || event.key == Qt.Key_Enter)) {
196 stateGroup.state = "KeyPressed"
197 event.accepted = true
202 if (!event.isAutoRepeat && (event.key == Qt.Key_Select
203 || event.key == Qt.Key_Return
204 || event.key == Qt.Key_Enter)) {
205 stateGroup.state = ""
206 event.accepted = true