Update copyright year in Digia's license headers
[qt:qtgraphicaleffects.git] / tests / manual / testbed / Slider.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the Qt Graphical Effects module.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
14 **   * Redistributions of source code must retain the above copyright
15 **     notice, this list of conditions and the following disclaimer.
16 **   * Redistributions in binary form must reproduce the above copyright
17 **     notice, this list of conditions and the following disclaimer in
18 **     the documentation and/or other materials provided with the
19 **     distribution.
20 **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21 **     of its contributors may be used to endorse or promote products derived
22 **     from this software without specific prior written permission.
23 **
24 **
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
36 **
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41 import QtQuick 2.0
42
43 Item {
44     id: slider
45
46     property real value: 1
47     property real maximum: 1
48     property real minimum: 0
49     property string caption: ""
50     property bool pressed: mouseArea.pressed
51     property bool integer: false
52     property string handleSource: "images/slider_handle.png"
53
54     width: parent.width
55     height: 20
56
57     function updatePos() {
58         if (maximum > minimum) {
59             var pos = (track.width - 10) * (value - minimum) / (maximum - minimum) + 5;
60             return Math.min(Math.max(pos, 5), track.width - 5) - 10;
61         } else {
62             return 5;
63         }
64     }
65
66     Text {
67         id: captionText
68         width: 110
69         anchors.verticalCenter: parent.verticalCenter
70         horizontalAlignment: Text.AlignRight
71         text: slider.caption + ':'
72         font.family: "Arial"
73         font.pixelSize: 11
74         color: "#B3B3B3"
75     }
76
77     Text {
78         id: valueCaption
79         anchors.left: captionText.right
80         anchors.leftMargin: 11
81         anchors.verticalCenter: parent.verticalCenter
82         width: 35
83         horizontalAlignment: Text.AlignLeft
84         text: integer ? slider.value.toFixed(0) : slider.value.toFixed(1)
85         font.family: "Arial"
86         font.pixelSize: 11
87         color: "#999999"
88     }
89
90     Item {
91         id: track
92         height: parent.height
93         anchors.verticalCenter: parent.verticalCenter
94         anchors.left: parent.left
95         anchors.leftMargin: parent.width / 2
96         anchors.right: parent.right
97         anchors.rightMargin: 10
98
99         BorderImage {
100             source: "images/slider_track.png"
101             anchors.left: parent.left
102             anchors.right: parent.right
103             border.right: 2
104         }
105
106         BorderImage {
107             id: trackFilled
108             anchors.left: minimum == -maximum ? (value < 0 ? handle.horizontalCenter : parent.horizontalCenter) : parent.left
109             anchors.right: minimum == -maximum && value < 0 ? parent.horizontalCenter : handle.horizontalCenter
110             source: "images/slider_track_filled.png"
111             border.left: 3
112             border.right: 3
113         }
114
115         Image {
116             id: handle;
117             smooth: true
118             source: mouseArea.pressed ? 'images/slider_handle_pressed.png' : slider.handleSource
119             x: updatePos()
120         }
121
122         MouseArea {
123             id: mouseArea
124             anchors { left: parent.left; right: parent.right; verticalCenter: parent.verticalCenter }
125             height: 16
126             preventStealing: true
127
128             onPressed: {
129                 var handleX = Math.max(0, Math.min(mouseX, mouseArea.width))
130                 var realValue = (maximum - minimum) * handleX / mouseArea.width + minimum;
131                 value = slider.integer ? Math.round(realValue) : realValue;
132             }
133
134             onPositionChanged: {
135                 if (pressed) {
136                     var handleX = Math.max(0, Math.min(mouseX, mouseArea.width))
137                     var realValue = (maximum - minimum) * handleX / mouseArea.width + minimum;
138                     value = slider.integer ? Math.round(realValue) : realValue;
139                 }
140             }
141         }
142     }
143 }