[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [plasma-framework] src/declarativeimports/calendar: [calendar] Add week numbers in Calendar componen
From: Martin Klapetek <mklapetek () kde ! org>
Date: 2015-06-05 12:35:11
Message-ID: E1Z0qq7-0003Rx-T0 () scm ! kde ! org
[Download RAW message or body]
Git commit 5caba3cfaff270a1a1b376451a56c6506cb4e1ce by Martin Klapetek.
Committed on 05/06/2015 at 12:34.
Pushed by mklapetek into branch 'master'.
[calendar] Add week numbers in Calendar components
Change-Id: Ie46b9b9c1e6035a9b2933362227d3c8fcd30a10e
REVIEW: 124004
CCBUG: 338195
CHANGELOG: Calendar components can now display week numbers
M +4 -4 src/declarativeimports/calendar/calendar.cpp
M +5 -3 src/declarativeimports/calendar/calendar.h
M +42 -8 src/declarativeimports/calendar/qml/DaysCalendar.qml
M +2 -1 src/declarativeimports/calendar/qml/MonthView.qml
http://commits.kde.org/plasma-framework/5caba3cfaff270a1a1b376451a56c6506cb4e1ce
diff --git a/src/declarativeimports/calendar/calendar.cpp \
b/src/declarativeimports/calendar/calendar.cpp index a766acb..c0e8fcf 100644
--- a/src/declarativeimports/calendar/calendar.cpp
+++ b/src/declarativeimports/calendar/calendar.cpp
@@ -184,7 +184,7 @@ QAbstractListModel *Calendar::daysModel() const
{
return m_daysModel;
}
-QList<int> Calendar::weeksModel() const
+QJsonArray Calendar::weeksModel() const
{
return m_weekList;
}
@@ -196,7 +196,7 @@ void Calendar::updateData()
}
m_dayList.clear();
- m_weekList.clear();
+ m_weekList = QJsonArray();
int totalDays = m_days * m_weeks;
@@ -261,12 +261,12 @@ void Calendar::updateData()
}
const int numOfDaysInCalendar = m_dayList.count();
- // Fill weeksModel (just a QList<int>) with the week numbers. This needs some \
tweaking! + // Fill weeksModel with the week numbers
for (int i = 0; i < numOfDaysInCalendar; i += 7) {
const DayData &data = m_dayList.at(i);
m_weekList << QDate(data.yearNumber, data.monthNumber, \
data.dayNumber).weekNumber(); }
-
+ emit weeksModelChanged();
m_daysModel->update();
// qDebug() << "---------------------------------------------------------------";
diff --git a/src/declarativeimports/calendar/calendar.h \
b/src/declarativeimports/calendar/calendar.h index ea20bf5..5dc3081 100644
--- a/src/declarativeimports/calendar/calendar.h
+++ b/src/declarativeimports/calendar/calendar.h
@@ -23,6 +23,7 @@
#include <QObject>
#include <QDate>
#include <QAbstractListModel>
+#include <QJsonArray>
#include "daydata.h"
#include "daysmodel.h"
@@ -53,7 +54,7 @@ class Calendar : public QObject
/**
* This model contains the week numbers for the given date grid.
*/
- Q_PROPERTY(QList<int> weeksModel READ weeksModel CONSTANT)
+ Q_PROPERTY(QJsonArray weeksModel READ weeksModel NOTIFY weeksModelChanged)
/**
* The number of days a week contains.
@@ -163,7 +164,7 @@ public:
// Models
QAbstractListModel *daysModel() const;
- QList<int> weeksModel() const;
+ QJsonArray weeksModel() const;
// QML invokables
Q_INVOKABLE void nextMonth();
@@ -184,6 +185,7 @@ Q_SIGNALS:
void errorMessageChanged();
void monthNameChanged();
void yearChanged();
+ void weeksModelChanged();
public Q_SLOTS:
void updateData();
@@ -194,7 +196,7 @@ private:
Types m_types;
QList<DayData> m_dayList;
DaysModel *m_daysModel;
- QList<int> m_weekList;
+ QJsonArray m_weekList;
int m_days;
int m_weeks;
diff --git a/src/declarativeimports/calendar/qml/DaysCalendar.qml \
b/src/declarativeimports/calendar/qml/DaysCalendar.qml index 67b3a2e..53a5dbc 100644
--- a/src/declarativeimports/calendar/qml/DaysCalendar.qml
+++ b/src/declarativeimports/calendar/qml/DaysCalendar.qml
@@ -23,13 +23,15 @@ import org.kde.plasma.extras 2.0 as PlasmaExtras
Item {
id: daysCalendar
+ readonly property int gridColumns: root.showWeekNumbers ? calendarGrid.columns + \
1 : calendarGrid.columns +
// This is to ensure that the inner grid.width is always aligned to be divisible \
by 7, // fixes wrong side margins because of the rounding of cell size
// (consider the parent.width to be 404, the cell width would be 56,
// but 56*7 + 6 (the inner spacing) is 398, so we split the remaining 6 to avoid
// wrong alignment)
anchors {
- leftMargin: Math.floor(((parent.width - (root.columns + 1) * borderWidth) % \
root.columns) / 2) + leftMargin: Math.floor(((parent.width - (gridColumns + 1) \
* borderWidth) % gridColumns) / 2) rightMargin: anchors.leftMargin
bottomMargin: anchors.leftMargin
}
@@ -56,7 +58,7 @@ Item {
// This isn't the real width/height, but rather the X coord where the \
line will stop
// and as the coord system starts from (0,0), we need to do "-1" to not \
get off-by-1 errors
- var rectWidth = (root.cellWidth + root.borderWidth) * \
calendarGrid.columns + root.borderWidth - 1 + var rectWidth = \
(root.cellWidth + root.borderWidth) * gridColumns + root.borderWidth \
- 1
var rectHeight = (root.cellHeight + root.borderWidth) * \
calendarGrid.rows + root.borderWidth - 1
// the outer frame
@@ -64,15 +66,15 @@ Item {
// horizontal lines
for (var i = 0; i < calendarGrid.rows - 1; i++) {
- var lineY = (rectHeight / calendarGrid.columns) * (i + 1);
+ var lineY = (rectHeight / calendarGrid.rows) * (i + 1);
- ctx.moveTo(0, lineY);
+ ctx.moveTo(root.showWeekNumbers ? root.cellWidth + root.borderWidth \
: root.borderWidth, lineY); ctx.lineTo(rectWidth, lineY);
}
// vertical lines
- for (var i = 0; i < calendarGrid.columns - 1; i++) {
- var lineX = (rectWidth / calendarGrid.rows) * (i + 1);
+ for (var i = 0; i < gridColumns - 1; i++) {
+ var lineX = (rectWidth / gridColumns) * (i + 1);
ctx.moveTo(lineX, root.borderWidth + root.cellHeight);
ctx.lineTo(lineX, rectHeight);
@@ -84,10 +86,42 @@ Item {
}
}
+ Column {
+ id: weeksColumn
+ visible: root.showWeekNumbers
+ anchors {
+ top: canvas.top
+ left: parent.left
+ bottom: canvas.bottom
+ // The borderWidth needs to be counted twice here because it goes
+ // in fact through two lines - the topmost one (the outer edge)
+ // and then the one below weekday strings
+ topMargin: root.cellHeight + root.borderWidth + root.borderWidth
+ }
+ spacing: root.borderWidth
+
+ Repeater {
+ model: root.showWeekNumbers ? calendarBackend.weeksModel : []
+
+ Components.Label {
+ height: root.cellHeight
+ width: root.cellWidth
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ opacity: 0.4
+ text: modelData
+ font.pixelSize: Math.max(theme.smallestFont.pixelSize, \
root.cellHeight / 6) + }
+ }
+ }
+
Grid {
id: calendarGrid
// Pad the grid to not overlap with the top and left frame
- x: root.borderWidth
+ // When week numbers are shown, the border needs to be counted twice
+ // because there's one more cell to count with and therefore also
+ // another border to add
+ x: root.showWeekNumbers ? 2 * root.borderWidth + root.cellWidth: \
root.borderWidth y: root.borderWidth
columns: calendarBackend.days
rows: calendarBackend.weeks + 1
@@ -129,4 +163,4 @@ Item {
DayDelegate {}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/declarativeimports/calendar/qml/MonthView.qml \
b/src/declarativeimports/calendar/qml/MonthView.qml index 6eaa8db..86e37d8 100644
--- a/src/declarativeimports/calendar/qml/MonthView.qml
+++ b/src/declarativeimports/calendar/qml/MonthView.qml
@@ -47,13 +47,14 @@ Item {
property int week;
property int firstDay: new Date(showDate.getFullYear(), showDate.getMonth(), \
1).getDay() property date today
+ property bool showWeekNumbers: true
function prefCellWidth() {
return Math.min(
Math.max(
mWidth * 3,
// Take the calendar width, subtract the inner and outer spacings \
and divide by number of columns (==days in week)
- Math.floor((calendar.width - (root.columns + 1) * borderWidth) / \
root.columns) + Math.floor((calendar.width - (root.columns + 1) * \
borderWidth) / (root.columns + (root.showWeekNumbers ? 1 : 0))) ),
mWidth * 100
)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic