House keeping in QML resource dir
[opentodolist:opentodolist.git] / OpenTodoList / qml / OpenTodoList / controls / ToolButton.qml
1 /*
2  *  OpenTodoListDesktopQml - Desktop QML frontend for OpenTodoList
3  *  Copyright (C) 2013  Martin Höher <martin@rpdev.net>
4  * 
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  * 
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  * 
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 import QtQuick 2.0
20 import "../js/Utils.js" as Utils
21
22 Item {
23     id: button
24     
25     signal clicked
26     
27     property alias label: text.text
28     property int sourceIndex: 0
29     property alias containsMouse: mouseArea.containsMouse
30     property int childOffset: 10
31     property bool enabled: true
32     property alias font: text.font
33     
34     width: text.width + text.height * 2
35     height: text.height * 2
36
37     Rectangle {
38         id: background
39         width: parent.width
40         height: text.height * 4
41         color: colors.primary
42
43         Behavior on color {
44             ColorAnimation {
45                 duration: 100
46             }
47         }
48     }
49     
50     Text {
51         id: text
52         text: "ToolButton"
53         font.weight: Font.DemiBold
54         font.pointSize: fonts.h1
55         color: colors.fontColorFor( background.color )
56         anchors.horizontalCenter: parent.horizontalCenter
57         y: childOffset + 10
58         wrapMode: Text.WordWrap
59     }
60     
61     MouseArea {
62         id: mouseArea
63         anchors.fill: parent
64         hoverEnabled: true
65         cursorShape: button.state == "disabled" ? Qt.ArrowCursor : Qt.PointingHandCursor
66         onClicked: if ( button.state != "disabled" ) parent.clicked()
67     }
68     
69     states: [
70         State {
71             name: "hovered"
72             when: containsMouse && !( parent.disabled || !enabled || layout.disableHover )
73             PropertyChanges {
74                 target: background
75                 color: colors.primaryLighter1
76             }
77         },
78         State {
79             name: "disabled"
80             when: parent.disabled || !enabled
81             PropertyChanges {
82                 target: button
83                 opacity: 0
84                 childOffset: height
85             }
86         }
87     ]
88     
89     transitions: [
90         Transition {
91             from: ""
92             to: "hovered"
93             reversible: true
94             NumberAnimation {
95                 properties: "childOffset"
96                 duration: 100
97                 easing.type: Easing.InOutQuad
98             }
99         },
100         Transition {
101             //from: ""
102             to: "disabled"
103             reversible: true
104             ParallelAnimation {
105                 NumberAnimation {
106                     properties: "opacity"
107                     duration: 200
108                     easing.type: Easing.InOutQuad
109                 }
110                 NumberAnimation {
111                     properties: "childOffset"
112                     duration: 200
113                     easing.type: Easing.InOutQuad
114                 }
115             }
116         }
117     ]
118     
119 }