House keeping in QML resource dir
[opentodolist:opentodolist.git] / OpenTodoList / qml / OpenTodoList / controls / TodoView.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 net.rpdev.OpenTodoList 1.0
21
22 Item {
23     id: root
24
25     property int spacing: 4
26     property QtObject model: null
27     property bool autoSize: false
28     property int contentHeight: controls.childrenRect.height + listView.contentHeight
29
30     signal todoSelected(QtObject todo)
31
32     clip: true
33     width: 100
34     height: autoSize ? contentHeight : 100
35
36     Item {
37         id: controls
38         anchors { top: parent.top; left: parent.left; right: parent.right }
39         height: childrenRect.height
40         Behavior on height { SmoothedAnimation { duration: 500 } }
41     }
42     Item {
43         id: list
44         anchors { top: controls.bottom; left: parent.left; right: parent.right; bottom: parent.bottom }
45         ListView {
46             id: listView
47             anchors.fill: parent
48             interactive: !root.autoSize
49             model: TodoSortFilterModel {
50                 sourceModel: root.model
51                 sortMode: TodoSortFilterModel.PrioritySort
52             }
53
54             delegate: TodoListEntry {
55                 todo: object
56                 width: listView.width
57                 hasNext: root.model && index !== root.model.count - 1
58                 onClicked: {
59                     root.todoSelected( object )
60                 }
61             }
62         }
63     }
64 }
65