Some changes for better touch support and scripts
[opentodolist:opentodolist.git] / OpenTodoList / qml / OpenTodoList / View.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 "Utils.js" as Utils;
21
22 Rectangle {
23     id: view
24     x: parent.x + parent.width
25     width: parent.width
26     height: parent.height
27     clip: true
28     color: colors.window
29     
30     property alias toolButtons: toolbarContent.children
31     property bool hidden: true
32     property bool active: false
33     property alias clientWidth: contentsFlickable.width
34     property alias clientHeight: contentsFlickable.height
35     default property alias content: contentsFlickable.children
36     property string title: "View"
37
38     onHiddenChanged: {
39         if ( parent ){
40             parent.activeViews = hidden ? Utils.hideView( parent.activeViews, view ) :
41                                   Utils.showView( parent.activeViews, view );
42         }
43     }
44
45     // Catch all mouse input when this view is active
46     MouseArea {
47         anchors.fill: parent
48         onClicked:;
49     }
50     
51     Rectangle {
52         id: toolbar
53         height: toolbarContent.childrenRect.height
54         anchors.left: parent.left
55         anchors.right: parent.right
56         anchors.top: parent.top
57         clip: true
58         color: colors.primary
59         
60         Flickable {
61             anchors.top: parent.top
62             anchors.left: parent.left
63             width: parent.width
64             height: childrenRect.height
65             
66             contentWidth: toolbarContent.childrenRect.width
67             
68             Row {
69                 id: toolbarContent
70                 
71                 //TODO: Will not work! Views remain unhidden even if they are not topmost!
72                 property bool disabled: !view.active
73                 
74                 Component.onCompleted: {
75                     for ( var i = 0; i < children.length; ++i ) {
76                         children[i].sourceIndex = i;
77                     }
78                 }
79             }
80         }
81     }
82     
83     Item {
84         anchors.top: toolbar.bottom
85         anchors.left: parent.left
86         anchors.right: parent.right
87         anchors.bottom: parent.bottom
88         
89         Flickable {
90             id: contentsFlickable
91             anchors { fill: parent; margins: 0 }
92             clip: true
93             contentWidth: contentItem.childrenRect.width
94             contentHeight: contentItem.childrenRect.height
95         }
96     }
97     
98     states: [
99         State {
100             name: "visible"
101             when: view.hidden == false
102             PropertyChanges {
103                 target: view
104                 x: 0
105             }
106         }
107     ]
108     
109     transitions: [
110         Transition {
111             from: ""
112             to: "visible"
113             reversible: true
114             NumberAnimation {
115                 properties: "x"
116                 duration: 500
117                 easing.type: Easing.InOutQuad
118             }
119         }
120     ]
121     
122 }