Update copyright headers
[qt:qt.git] / demos / mobile / guitartuner / src / mycomponents / Adjuster.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
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 The Qt Company Ltd nor the names of its
21 **     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 1.0
42 import "adjustbars.js" as AdjustBars
43
44 /* A barchart-like adjuster component. */
45 Rectangle {
46     id: adjuster
47
48     property real max: 100
49     property real value: 0
50     property bool created: false
51
52     signal valueChanged(real value)
53     signal focusChangedByClick()
54     signal arrowPressedWhenValueOverLimits()
55
56     function setValue(pValue) {
57         value = pValue;
58         AdjustBars.fillBars(value/max*AdjustBars.maxBars);
59         valueChanged(value);
60     }
61
62     height: 60; width: 300
63     color: "transparent"
64     Keys.onRightPressed: {
65         var val = value+max/AdjustBars.maxBars;
66         if (val <= max) {
67             value = val;
68             AdjustBars.fillBars(value/max*AdjustBars.maxBars);
69             valueChanged(value);
70         }
71         else {
72             arrowPressedWhenValueOverLimits()
73         }
74     }
75     Keys.onLeftPressed: {
76         var val = value-max/AdjustBars.maxBars;
77         if (0 <= val) {
78             value = val;
79             AdjustBars.fillBars(value/max*AdjustBars.maxBars);
80             valueChanged(value);
81         }
82         else {
83             arrowPressedWhenValueOverLimits()
84         }
85     }
86     Component.onCompleted: {
87         AdjustBars.createBars();
88         AdjustBars.fillBars(value/max*AdjustBars.maxBars);
89         created = true;
90     }
91     Component.onDestruction: {
92         AdjustBars.destroyBars;
93     }
94     //Dynamic objects have to be recreated when the window size changes.
95     onWidthChanged: {
96         if (created) {
97             AdjustBars.destroyBars();
98             AdjustBars.createBars();
99             AdjustBars.fillBars(value/max*AdjustBars.maxBars);
100         }
101     }
102     onHeightChanged: {
103         if (created) {
104             AdjustBars.destroyBars();
105             AdjustBars.createBars();
106             AdjustBars.fillBars(value/max*AdjustBars.maxBars);
107         }
108     }
109
110     MouseArea {
111         anchors.fill: parent
112         onPositionChanged: {
113             focusChangedByClick();
114             var val = mouse.x/parent.width*parent.max;
115             if (0 < val && val < max) {
116                 parent.value = val;
117                 AdjustBars.fillBars(parent.value/parent.max*AdjustBars.maxBars);
118                 valueChanged(parent.value);
119             }
120         }
121         onClicked: {
122             focusChangedByClick();
123             var val = mouse.x/parent.width*parent.max;
124             if (0 < val && val < max) {
125                 parent.value = val;
126                 AdjustBars.fillBars(parent.value/parent.max*AdjustBars.maxBars);
127                 valueChanged(parent.value);
128             }
129         }
130     }
131 }