diff --git a/Modules/Bar/Calendar/CalendarPanel.qml b/Modules/Bar/Calendar/CalendarPanel.qml index 70a2fa74..c0617865 100644 --- a/Modules/Bar/Calendar/CalendarPanel.qml +++ b/Modules/Bar/Calendar/CalendarPanel.qml @@ -91,7 +91,7 @@ NPanel { } } - // Today day number - with simple, stable animation + // Today day number NText { opacity: content.isCurrentMonth ? 1.0 : 0.0 Layout.preferredWidth: content.isCurrentMonth ? implicitWidth : 0 @@ -110,7 +110,6 @@ NPanel { // Month, year, location ColumnLayout { - // Give the whole column a fixed width to stabilize the layout Layout.preferredWidth: 170 * scaling Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft spacing: -Style.marginXS * scaling @@ -169,7 +168,7 @@ NPanel { } } - // The Clock, anchored separately for stability + // Digital clock with circular progress Item { id: clockItem anchors.right: parent.right @@ -178,6 +177,7 @@ NPanel { width: Style.fontSizeXXXL * 1.9 * scaling height: Style.fontSizeXXXL * 1.9 * scaling + // Seconds circular progress Canvas { id: secondsProgress anchors.fill: parent @@ -196,11 +196,15 @@ NPanel { var centerY = height / 2 var radius = Math.min(width, height) / 2 - 3 * scaling ctx.reset() + + // Background circle ctx.beginPath() ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI) ctx.lineWidth = 2.5 * scaling ctx.strokeStyle = Qt.alpha(Color.mOnPrimary, 0.15) ctx.stroke() + + // Progress arc ctx.beginPath() ctx.arc(centerX, centerY, radius, -Math.PI / 2, -Math.PI / 2 + progress * 2 * Math.PI) ctx.lineWidth = 2.5 * scaling @@ -210,6 +214,7 @@ NPanel { } } + // Digital clock ColumnLayout { anchors.centerIn: parent spacing: -Style.marginXXS * scaling @@ -236,12 +241,13 @@ NPanel { } } - // ... (rest of the file is unchanged) ... + // 6-day forecast (outside blue banner) RowLayout { visible: weatherReady Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter spacing: Style.marginL * scaling + Repeater { model: weatherReady ? Math.min(6, LocationService.data.weather.daily.time.length) : 0 delegate: ColumnLayout { @@ -249,6 +255,7 @@ NPanel { Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter spacing: Style.marginS * scaling + NText { text: { var weatherDate = new Date(LocationService.data.weather.daily.time[index].replace(/-/g, "/")) @@ -259,12 +266,14 @@ NPanel { font.weight: Style.fontWeightMedium Layout.alignment: Qt.AlignHCenter } + NIcon { Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter icon: LocationService.weatherSymbolFromCode(LocationService.data.weather.daily.weathercode[index]) pointSize: Style.fontSizeXXL * 1.5 * scaling color: Color.mPrimary } + NText { Layout.alignment: Qt.AlignHCenter text: { @@ -285,19 +294,27 @@ NPanel { } } } + + // Loading indicator for weather RowLayout { visible: !weatherReady Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter NBusyIndicator {} } + + // Spacer Item {} + + // Navigation and divider RowLayout { Layout.fillWidth: true spacing: Style.marginS * scaling + NDivider { Layout.fillWidth: true } + NIconButton { icon: "chevron-left" onClicked: { @@ -307,6 +324,7 @@ NPanel { content.isCurrentMonth = content.checkIsCurrentMonth() } } + NIconButton { icon: "calendar" onClicked: { @@ -315,6 +333,7 @@ NPanel { content.isCurrentMonth = true } } + NIconButton { icon: "chevron-right" onClicked: { @@ -325,24 +344,31 @@ NPanel { } } } + + // Names of days of the week RowLayout { Layout.fillWidth: true spacing: 0 + Item { visible: Settings.data.location.showWeekNumberInCalendar Layout.preferredWidth: visible ? Style.baseWidgetSize * 0.7 * scaling : 0 } + GridLayout { Layout.fillWidth: true columns: 7 rows: 1 columnSpacing: 0 rowSpacing: 0 + Repeater { model: 7 + Item { Layout.fillWidth: true Layout.preferredHeight: Style.baseWidgetSize * 0.6 * scaling + NText { anchors.centerIn: parent text: { @@ -359,20 +385,27 @@ NPanel { } } } + + // Grid with weeks and days RowLayout { Layout.fillWidth: true Layout.fillHeight: true spacing: 0 + + // Column of week numbers ColumnLayout { visible: Settings.data.location.showWeekNumberInCalendar Layout.preferredWidth: visible ? Style.baseWidgetSize * 0.7 * scaling : 0 Layout.fillHeight: true spacing: 0 + Repeater { model: 6 + Item { Layout.fillWidth: true Layout.fillHeight: true + NText { anchors.centerIn: parent color: Color.mOutline @@ -404,21 +437,27 @@ NPanel { } } } + + // Days Grid MonthGrid { id: grid + Layout.fillWidth: true Layout.fillHeight: true spacing: Style.marginXXS * scaling month: Time.date.getMonth() year: Time.date.getFullYear() locale: Qt.locale() + delegate: Item { Rectangle { width: Style.baseWidgetSize * 0.9 * scaling height: Style.baseWidgetSize * 0.9 * scaling anchors.centerIn: parent radius: Style.radiusM * scaling + color: model.today ? Color.mSecondary : Color.transparent + NText { anchors.centerIn: parent text: model.day @@ -433,6 +472,7 @@ NPanel { pointSize: Style.fontSizeM * scaling font.weight: model.today ? Style.fontWeightBold : Style.fontWeightMedium } + Behavior on color { ColorAnimation { duration: Style.animationFast