Storing window size and geometry
[opentodolist:opentodolist.git] / OpenTodoList / qml / OpenTodoList / controls / 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 "../js/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: toolbar.children
31     property bool hidden: true
32     property bool active: false
33     property alias clientWidth: contents.width
34     property alias clientHeight: contents.height
35     default property alias content: contents.children
36     property string title: "View"
37     property int padding: 20
38
39     onHiddenChanged: {
40         if ( parent ){
41             parent.activeViews = hidden ? Utils.hideView( parent.activeViews, view ) :
42                                   Utils.showView( parent.activeViews, view );
43         }
44     }
45
46     // Catch all mouse input when this view is active
47     MouseArea {
48         anchors.fill: parent
49         onClicked:;
50     }
51
52     Rectangle {
53         id: toolbarOuter
54         color: colors.primary
55         height: childrenRect.height
56         clip: true
57         radius: 5
58         anchors { left: parent.left; right: parent.right; top: parent.top
59             leftMargin: padding; rightMargin: padding; topMargin: padding }
60         Flickable {
61             clip: true
62             anchors { left: parent.left; right: parent.right;
63                 margins: parent.radius }
64             height: toolbar.childrenRect.height
65             contentWidth: toolbar.childrenRect.width
66             contentHeight: toolbar.childrenRect.height
67             Row {
68                 id: toolbar
69                 anchors.left: parent.left
70                 anchors.leftMargin: spacing / 2
71                 spacing: layout.minimumButtonHeight / 2
72             }
73         }
74     }
75
76     Item {
77         id: toolbarDecorationOuter
78         anchors { left: parent.left; right: parent.right; top: toolbarOuter.bottom;
79             leftMargin: padding * 2; rightMargin: padding }
80         height: childrenRect.height
81         Item {
82             width: 30
83             height: 30
84             Image {
85                 sourceSize.width: width
86                 sourceSize.height: height
87                 anchors.fill: parent
88                 source:"image://primitives/polygon/color=" + colors.primary +
89                        ",fill=" + colors.primary +
90                        ",points=0:0-15:30-30:0"
91             }
92         }
93     }
94
95     Rectangle {
96         id: contents
97         color: colors.view
98         clip: true
99
100         anchors { left: parent.left; right: parent.right;
101                   top: toolbarDecorationOuter.bottom; bottom: parent.bottom;
102                   leftMargin: padding; rightMargin: padding; bottomMargin: padding }
103     }
104     
105     states: [
106         State {
107             name: "visible"
108             when: view.hidden == false
109             PropertyChanges {
110                 target: view
111                 x: 0
112             }
113         }
114     ]
115     
116     transitions: [
117         Transition {
118             from: ""
119             to: "visible"
120             reversible: true
121             NumberAnimation {
122                 properties: "x"
123                 duration: 500
124                 easing.type: Easing.InOutQuad
125             }
126         }
127     ]
128     
129 }