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

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);
                }
            }
        }
    }
}