House keeping in QML resource dir
[opentodolist:opentodolist.git] / OpenTodoList / qml / OpenTodoList / js / Utils.js
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 var PriorityColors = [
20     "#00E508",
21     "#24E100",
22     "#4FDD00",
23     "#78D900",
24     "#A0D500",
25     "#C6D200",
26     "#CEB000",
27     "#CA8500",
28     "#C65C00",
29     "#C23400",
30     "#BF0E00" ];
31 PriorityColors[-1] = "#00000000";
32
33 function tintPriority( color, priority ) {
34     if ( priority < 0 ) {
35         return color;
36     }
37     return Qt.tint( color, "#30" + PriorityColors[priority].substr( 1 ) );
38 }
39
40 function tint( base, overlay, alpha ) {
41     return Qt.tint( base, Qt.rgba( overlay.r, overlay.g, overlay.b, alpha ) )
42 }
43
44 var ToolButtonImages = [
45     "toolbutton_1.png",
46     "toolbutton_2.png",
47     "toolbutton_4.png",
48     "toolbutton_3.png"
49 ];
50
51 function getToolButtonImage( index ) {
52     return ToolButtonImages[ index % ToolButtonImages.length ];
53 }
54
55 function initViewList() {
56     return [];
57 }
58
59 function showView( list, view ) {
60     if ( !list ) {
61         list = [];
62     }
63     for ( var i = 0; i < list.length; ++i ) {
64         list[i].active = false;
65     }
66     list.push( view );
67     view.active = true;
68     return list;
69 }
70
71 function hideView( list, view ) {
72     view.active = false;
73     list.pop();
74     if ( list.length > 0 ) {
75         list[list.length-1].active = true;
76     }
77     return list;
78 }
79
80 var DayNamesShort = [ "So", "Mo", "Tu", "We", "Th", "Fr", "Sa" ];
81 var MonthNames = [ "January", "February", "March",
82                    "April", "May", "June", "July",
83                   "August", "September", "October",
84                   "November", "December" ];
85
86 function getLastDateOfWeek() {
87     var current = new Date();
88     return new Date(
89                 current.setDate( current.getDate() - current.getDay() + 6 ) );
90 }
91
92 function getFirstDay( date ) {
93     return new Date( date.getFullYear(), date.getMonth(), 1 ).getDay();
94 }
95
96 function getDaysInMonth( date ) {
97     return new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();
98 }
99
100 function getNullDate() {
101     return new Date( NaN, NaN, NaN );
102 }
103
104 function isValidDate( date ) {
105     return !( isNaN( date.getFullYear() ) ||
106              isNaN( date.getMonth() ) ||
107              isNaN( date.getDate() ) );
108 }
109
110 function areDatesEqual( date1, date2 ) {
111     return isValidDate( date1 ) &&
112            isValidDate( date2 ) &&
113            date1.getFullYear() === date2.getFullYear() &&
114              date1.getMonth() === date2.getMonth() &&
115              date1.getDate() === date2.getDate();
116 }
117
118 function formatDate( date, defaultLabel ) {
119     return isValidDate( date ) ?
120                 date.getDate() + " " +
121             MonthNames[ date.getMonth() ] + " " +
122             date.getFullYear() :
123                 defaultLabel;
124 }
125
126 /*
127   Applies a given function on each todo in the given model. This is useful
128   as due to changing a todo, the ordering on the list of todos might change.
129   This is taken into account by this function.
130   */
131 function applyToTodos( model, func ) {
132     var todos = [];
133     for ( var i = 0; i < model.itemCount(); ++i ) {
134         todos.push( model.getItem( i ).object );
135     }
136     for ( var i = 0; i < todos.length; ++i ) {
137         func( todos[ i ] );
138     }
139 }
140
141 function recursiveSetTodoProgress( todo, progress ) {
142     if ( todo.hasSubTodos() ) {
143         applyToTodos( todo.subTodos, function( todo ) {
144             recursiveSetTodoProgress( todo, progress );
145         } );
146     } else {
147         todo.progress = progress;
148     }
149 }