1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
import QtQuick 2.0
import Ubuntu.Components 0.1
import "dateExt.js" as DateExt
import "colorUtils.js" as Color
PathViewBase{
id: weekRibbonRoot
property int weekWidth:0;
property var visibleWeek: intern.now
signal daySelected(var day);
signal weekChanged(var visibleWeek);
QtObject{
id: intern
property var now: new Date();
property int weekstartDay: Qt.locale().firstDayOfWeek
property var weekStart: visibleWeek.addDays(-7)
property var selectedDate: visibleWeek
}
onNextItemHighlighted: {
nextWeek();
}
onPreviousItemHighlighted: {
previousWeek();
}
onVisibleWeekChanged: {
setSelectedDay();
}
Component.onCompleted: {
setSelectedDay();
}
function nextWeek() {
var weekStartDay= visibleWeek.weekStart(intern.weekstartDay);
visibleWeek = weekStartDay.addDays(7);
setSelectedDay();
weekChanged( visibleWeek );
}
function previousWeek(){
var weekStartDay = visibleWeek.weekStart(intern.weekstartDay);
visibleWeek = weekStartDay.addDays(-7);
setSelectedDay();
weekChanged( visibleWeek );
}
function setSelectedDay(date) {
if( date !== undefined && date !== null) {
intern.selectedDate = date;
return;
}
if( intern.now.weekStart(intern.weekstartDay).isSameDay(visibleWeek) ) {
intern.selectedDate = intern.now
} else {
intern.selectedDate = visibleWeek
}
}
delegate: Row{
id: dayLabelRow
width: parent.width
function getWeekStart() {
if (index === weekRibbonRoot.currentIndex) {
return intern.weekStart;
}
var previousIndex = weekRibbonRoot.currentIndex > 0 ? weekRibbonRoot.currentIndex - 1 : 2
if ( index === previousIndex ) {
var weekStartDay= intern.weekStart.weekStart( Qt.locale().firstDayOfWeek);
return weekStartDay.addDays(-7);
}
var weekStartDay = intern.weekStart.weekStart( Qt.locale().firstDayOfWeek);
return weekStartDay.addDays(7);
}
property var weekStart: getWeekStart();
Repeater{
id: dayLabelRepeater
model:7
delegate: dafaultDayLabelComponent
}
}
Component{
id: dafaultDayLabelComponent
Rectangle{
id: weekDay
width: column.width
height: column.height
color: intern.selectedDate.isSameDay(day) ? Color.ubuntuOrange : "white"
property var weekStartDay: parent.weekStart.weekStart( Qt.locale().firstDayOfWeek);
property var day : weekStartDay.addDays(index)
Column {
id: column
width: weekWidth
Label{
text: Qt.locale().standaloneDayName(( intern.weekstartDay + index), Locale.ShortFormat)
horizontalAlignment: Text.AlignHCenter
width: column.width
fontSize: "medium"
}
Label{
text: weekDay.day.getDate()
horizontalAlignment: Text.AlignHCenter
width: column.width
fontSize: "large"
}
}
MouseArea{
anchors.fill: parent
onClicked: {
weekRibbonRoot.setSelectedDay(day);
weekRibbonRoot.daySelected(day);
}
}
}
}
}
|