~pkunal-parmar/ubuntu-calendar-app/ICalImport

« back to all changes in this revision

Viewing changes to MonthView.qml

  • Committer: Launchpad Translations on behalf of ubuntu-calendar-dev
  • Date: 2014-06-09 06:30:09 UTC
  • Revision ID: launchpad_translations_on_behalf_of_ubuntu-calendar-dev-20140609063009-vf9c9x0iyl0ossr6
Launchpad automatic translations update.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
import "dateExt.js" as DateExt
4
4
import "colorUtils.js" as Color
5
5
 
6
 
ListView {
7
 
    id: monthView
8
 
 
9
 
    readonly property var monthStart: currentItem != null ? currentItem.monthStart : (new Date()).monthStart()
10
 
    readonly property var monthEnd: currentItem != null ? currentItem.monthEnd : (new Date()).monthStart().addMonths(1)
11
 
    readonly property var currentDayStart: intern.currentDayStart
12
 
 
13
 
    property bool compressed: false
14
 
    readonly property real compressedHeight: intern.squareUnit + intern.verticalMargin * 2
15
 
    readonly property real expandedHeight: intern.squareUnit * 6 + intern.verticalMargin * 2
16
 
 
17
 
    signal incrementCurrentDay
18
 
    signal decrementCurrentDay
19
 
 
20
 
    signal gotoNextMonth(int month)
21
 
    signal focusOnDay(var dayStart)
22
 
 
23
 
    onCurrentItemChanged: {
24
 
        if (currentItem == null) {
25
 
            intern.currentDayStart = intern.currentDayStart
26
 
            return
27
 
        }
28
 
        if (currentItem.monthStart <= intern.currentDayStart && intern.currentDayStart < currentItem.monthEnd)
29
 
            return
30
 
        if (currentItem.monthStart <= intern.today && intern.today < currentItem.monthEnd)
31
 
            intern.currentDayStart = intern.today
32
 
        else
33
 
            intern.currentDayStart = currentItem.monthStart
34
 
    }
35
 
 
36
 
    onIncrementCurrentDay: {
37
 
        var t = intern.currentDayStart.addDays(1)
38
 
        if (t < monthEnd) {
39
 
            intern.currentDayStart = t
40
 
        }
41
 
        else if (currentIndex < count - 1) {
42
 
            intern.currentDayStart = t
43
 
            currentIndex = currentIndex + 1
44
 
        }
45
 
    }
46
 
 
47
 
    onDecrementCurrentDay: {
48
 
        var t = intern.currentDayStart.addDays(-1)
49
 
        if (t >= monthStart) {
50
 
            intern.currentDayStart = t
51
 
        }
52
 
        else if (currentIndex > 0) {
53
 
            intern.currentDayStart = t
54
 
            currentIndex = currentIndex - 1
55
 
        }
56
 
    }
57
 
 
58
 
    onGotoNextMonth: {
59
 
        if (monthStart.getMonth() != month) {
60
 
            var i = intern.monthIndex0, m = intern.today.getMonth()
61
 
            while (m != month) {
62
 
                m = (m + 1) % 12
63
 
                i = i + 1
64
 
            }
65
 
            currentIndex = i
66
 
        }
67
 
    }
68
 
 
69
 
    onFocusOnDay: {
70
 
        if (dayStart < monthStart) {
71
 
            if (currentIndex > 0) {
72
 
                intern.currentDayStart = dayStart
73
 
                currentIndex = currentIndex - 1
74
 
            }
75
 
        }
76
 
        else if (dayStart >= monthEnd) {
77
 
            if (currentIndex < count - 1) {
78
 
                intern.currentDayStart = dayStart
79
 
                currentIndex = currentIndex + 1
80
 
            }
81
 
        }
82
 
        else intern.currentDayStart = dayStart
83
 
    }
84
 
 
85
 
    focus: true
86
 
    Keys.onLeftPressed: decrementCurrentDay()
87
 
    Keys.onRightPressed: incrementCurrentDay()
88
 
 
89
 
    QtObject {
90
 
        id: intern
91
 
 
92
 
        property int squareUnit: monthView.width / 8
93
 
        property int verticalMargin: units.gu(1)
94
 
        property int weekstartDay: Qt.locale().firstDayOfWeek
95
 
        property int monthCount: 49 // months for +-2 years
96
 
 
97
 
        property var today: (new Date()).midnight() // TODO: update at midnight
98
 
        property var currentDayStart: today
99
 
        property int monthIndex0: Math.floor(monthCount / 2)
100
 
        property var monthStart0: today.monthStart()
101
 
    }
102
 
 
103
 
    width: parent.width
104
 
    height: compressed ? compressedHeight : expandedHeight
105
 
 
106
 
    interactive: !compressed
107
 
    clip: true
108
 
    orientation: ListView.Horizontal
109
 
    snapMode: ListView.SnapOneItem
110
 
    cacheBuffer: width + 1
111
 
 
112
 
    highlightRangeMode: ListView.StrictlyEnforceRange
113
 
    preferredHighlightBegin: 0
114
 
    preferredHighlightEnd: width
115
 
 
116
 
    model: intern.monthCount
117
 
    currentIndex: intern.monthIndex0
118
 
 
119
 
    delegate: Item {
120
 
        id: monthItem
121
 
 
122
 
        property var monthStart: intern.monthStart0.addMonths(index - intern.monthIndex0)
123
 
        property var monthEnd: monthStart.addMonths(1)
124
 
        property var gridStart: monthStart.weekStart(intern.weekstartDay)
125
 
        property int currentWeekRow: Math.floor((currentDayStart.getTime() - gridStart.getTime()) / Date.msPerWeek)
126
 
 
127
 
        width: monthView.width
128
 
        height: monthView.height
129
 
 
130
 
        Grid {
131
 
            id: monthGrid
132
 
 
133
 
            rows: 6
134
 
            columns: 7
135
 
 
136
 
            x: intern.squareUnit / 2
137
 
            y: intern.verticalMargin
138
 
            width: intern.squareUnit * columns
139
 
            height: intern.squareUnit * rows
140
 
 
141
 
            Repeater {
142
 
                model: monthGrid.rows * monthGrid.columns
143
 
                delegate: Item {
144
 
                    id: dayItem
145
 
                    property var dayStart: gridStart.addDays(index)
146
 
                    property bool isCurrentMonth: monthStart <= dayStart && dayStart < monthEnd
147
 
                    property bool isToday: dayStart.getTime() === intern.today.getTime()
148
 
                    property bool isCurrent: dayStart.getTime() === intern.currentDayStart.getTime()
149
 
                    property int weekday: (index % 7 + intern.weekstartDay) % 7
150
 
                    property bool isSunday: weekday == 0
151
 
                    property int row: Math.floor(index / 7)
152
 
                    property bool isCurrentWeek: row == currentWeekRow
153
 
                    property real topMargin: (row == 0 || (monthView.compressed && isCurrentWeek)) ? -intern.verticalMargin : 0
154
 
                    property real bottomMargin: (row == 5 || (monthView.compressed && isCurrentWeek)) ? -intern.verticalMargin : 0
155
 
                    visible: monthView.compressed ? isCurrentWeek : true
156
 
                    width: intern.squareUnit
157
 
                    height: intern.squareUnit
158
 
                    Rectangle {
159
 
                        visible: isSunday
160
 
                        anchors.fill: parent
161
 
                        anchors.topMargin: dayItem.topMargin
162
 
                        anchors.bottomMargin: dayItem.bottomMargin
163
 
                        color: Color.warmGrey
164
 
                        opacity: 0.1
165
 
                    }
166
 
                    Text {
167
 
                        anchors.centerIn: parent
168
 
                        text: dayStart.getDate()
169
 
                        font: themeDummy.font
170
 
                        color: isToday ? Color.ubuntuOrange : themeDummy.color
171
 
                        scale: isCurrent ? 1.8 : 1.
172
 
                        opacity: isCurrentMonth ? 1. : 0.3
173
 
                        Behavior on scale {
174
 
                            NumberAnimation { duration: 50 }
175
 
                        }
176
 
                    }
177
 
                    MouseArea {
178
 
                        anchors.fill: parent
179
 
                        anchors.topMargin: dayItem.topMargin
180
 
                        anchors.bottomMargin: dayItem.bottomMargin
181
 
                        onReleased: monthView.focusOnDay(dayStart)
182
 
                    }
183
 
                    // Component.onCompleted: console.log(dayStart, intern.currentDayStart)
184
 
                }
185
 
            }
186
 
        }
187
 
 
188
 
        // Component.onCompleted: console.log("Created delegate for month", index, monthStart, gridStart, currentWeekRow, currentWeekRowReal)
189
 
    }
190
 
 
191
 
    Label {
192
 
        visible: false
193
 
        id: themeDummy
194
 
        fontSize: "large"
195
 
        // Component.onCompleted: console.log(color, Qt.lighter(color, 1.74))
 
6
Page {
 
7
    id: monthViewPage
 
8
    objectName: "MonthView"
 
9
 
 
10
    property var currentMonth: DateExt.today();
 
11
 
 
12
    signal dateSelected(var date);
 
13
 
 
14
    Keys.forwardTo: [monthViewPath]
 
15
 
 
16
    PathViewBase{
 
17
        id: monthViewPath
 
18
 
 
19
        property var startMonth: currentMonth;
 
20
 
 
21
        anchors.top:parent.top
 
22
 
 
23
        width:parent.width
 
24
        height: parent.height
 
25
 
 
26
        onNextItemHighlighted: {
 
27
            nextMonth();
 
28
        }
 
29
 
 
30
        onPreviousItemHighlighted: {
 
31
            previousMonth();
 
32
        }
 
33
 
 
34
        function nextMonth() {
 
35
            currentMonth = addMonth(currentMonth, 1);
 
36
        }
 
37
 
 
38
        function previousMonth() {
 
39
            currentMonth = addMonth(currentMonth, -1);
 
40
        }
 
41
 
 
42
        function addMonth(date,month) {
 
43
            return  new Date(date.getFullYear(), date.getMonth() + month, 1, 0, 0, 0);
 
44
        }
 
45
 
 
46
        delegate: MonthComponent {
 
47
            property bool isCurrentItem: index === monthViewPath.currentIndex
 
48
 
 
49
            showEvents: true
 
50
 
 
51
            width: parent.width - units.gu(5)
 
52
            height: parent.height - units.gu(5)
 
53
 
 
54
            currentMonth: monthViewPath.addMonth(monthViewPath.startMonth,
 
55
                                                 monthViewPath.indexType(index));
 
56
 
 
57
            isYearView: false
 
58
 
 
59
            onDateSelected: {
 
60
                monthViewPage.dateSelected(date);
 
61
            }
 
62
        }
196
63
    }
197
64
}