on xenial help sign in
Merging with lp:~3v1n0/unity8/calendar-days
commitb696b80ccab23402377f19baeb524f76b9f26433 authorMarco Trevisan (Treviño) <mail@3v1n0.net> dateThu 27 Oct 2016, 15:11 (10 years ago) parent1880ebec0ab86f
7 files changed+86−12
debian/changelog+7 debian/control+3−3 plugins/Unity/Indicators/modelprinter.cpp+19−4 plugins/Unity/Indicators/modelprinter.h+2−1 qml/Panel/Indicators/MenuItemFactory.qml+20−1 tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.js+2−2 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+33−1
debian/changelog+7
@@ -1,5 +1,12 @@
11unity8 (8.15) UNRELEASED; urgency=medium
22
3+ * MenuItemFactory: bind calendar backend properties to calendarMenu item
4+
5+ Adds support for showing the calendar at the requested date, marking days
6+ with events properly and toggling the visibility of the week number.
7+
8+ * MenuItemFactory: use Menus.RadioMenu and Menus.ButtonMenu
9+
310 * Bump version as USC breaks with unity8 << 8.14
411
512 -- Marco Trevisan (Treviño) <marco@ubuntu.com> Thu, 27 Oct 2016 14:03:03 +0200
debian/control+3−3
@@ -28,7 +28,7 @@ Build-Depends: cmake,
2828 libpam0g-dev,
2929 libpay2-dev,
3030 libpulse-dev,
31− libqmenumodel-dev (>= 0.2.9),
31+ libqmenumodel-dev (>= 0.2.10),
3232 libqt5svg5-dev,
3333 libqt5xmlpatterns5-dev,
3434 libsystemsettings-dev,
@@ -79,7 +79,7 @@ X-Ubuntu-Use-Langpack: yes
7979
8080Package: indicators-client
8181Architecture: any
82−Depends: qmenumodel-qml (>= 0.2.9),
82+Depends: qmenumodel-qml (>= 0.2.10),
8383 qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
8484 unity8 (= ${binary:Version}),
8585 ${misc:Depends},
@@ -118,7 +118,7 @@ Depends: dmz-cursor-theme,
118118 gsettings-desktop-schemas,
119119 libcap2-bin,
120120 libglib2.0-bin,
121− qmenumodel-qml (>= 0.2.9),
121+ qmenumodel-qml (>= 0.2.10),
122122 qml-module-biometryd,
123123 qml-module-qt-labs-folderlistmodel,
124124 qml-module-qtquick-xmllistmodel,
plugins/Unity/Indicators/modelprinter.cpp+19−4
@@ -105,12 +105,25 @@ QString ModelPrinter::getRowSring(UnityMenuModel* sourceModel, int row, int dept
105105
106106 Q_FOREACH(int role, roles) {
107107 const QByteArray& roleName = roleNames[role];
108− stream << tabify(depth) << getVariantString(roleName, sourceModel->get(row, roleName));
108+ stream << getVariantString(roleName, sourceModel->get(row, roleName), depth);
109109 }
110110 return str;
111111}
112112
113−QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData) const
113+QString ModelPrinter::getVariantString(const QVariant& vData) const
114+{
115+ if (vData.type() == QVariant::List) {
116+ QStringList strList;
117+ for (const auto& v : vData.toList())
118+ strList.append(getVariantString(v));
119+
120+ return '[' + strList.join(", ") + ']';
121+ }
122+
123+ return vData.toString();
124+}
125+
126+QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData, int depth) const
114127{
115128 QString str;
116129 QTextStream stream(&str);
@@ -119,18 +132,20 @@ QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &
119132 QMapIterator<QString, QVariant> iter(vData.toMap());
120133 while (iter.hasNext()) {
121134 iter.next();
135+ stream << tabify(depth);
122136 stream << roleName
123137 << "."
124138 << iter.key()
125139 << ": "
126− << iter.value().toString()
140+ << getVariantString(iter.value())
127141 << endl;
128142 }
129143 }
130144 else {
145+ stream << tabify(depth);
131146 stream << roleName
132147 << ": "
133− << vData.toString()
148+ << getVariantString(vData)
134149 << endl;
135150 }
136151 return str;
plugins/Unity/Indicators/modelprinter.h+2−1
@@ -46,7 +46,8 @@ Q_SIGNALS:
4646private:
4747 QString getModelDataString(UnityMenuModel* sourceModel, int level);
4848 QString getRowSring(UnityMenuModel* sourceModel, int index, int depth) const;
49− QString getVariantString(const QString& roleName, const QVariant &vData) const;
49+ QString getVariantString(const QString& roleName, const QVariant &vData, int depth) const;
50+ QString getVariantString(const QVariant&) const;
5051
5152 UnityMenuModel* m_model;
5253 QList<UnityMenuModel*> m_children;
qml/Panel/Indicators/MenuItemFactory.qml+20−1
@@ -535,8 +535,27 @@ Item {
535535
536536 Menus.CalendarMenu {
537537 objectName: "calendarMenu"
538− highlightWhenPressed: false
539538 focus: true
539+
540+ property QtObject menuData: null
541+ property var menuModel: menuFactory.menuModel
542+ property int menuIndex: -1
543+
544+ showWeekNumbers: menuData && menuData.actionState["show-week-numbers"]
545+
546+ Binding on currentDate {
547+ when: menuData && menuData.actionState.hasOwnProperty("calendar-day") > 0
548+ value: new Date(menuData.actionState["calendar-day"] * 1000)
549+ }
550+
551+ Binding on eventDays {
552+ when: menuData && menuData.actionState.hasOwnProperty("appointment-days") > 0
553+ value: menuData.actionState["appointment-days"]
554+ }
555+
556+ onSelectedDateChanged: {
557+ menuModel.activate(menuIndex, selectedDate.getTime() / 1000 | 0)
558+ }
540559 }
541560 }
542561
tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.js+2−2
@@ -651,9 +651,9 @@ var fakeMenuData = {
651651 "rowData": {
652652 "action": "indicator.calendar",
653653 "actionState": {
654− "appointment-days": "",
654+ "appointment-days": [10],
655655 "calendar-day": (new Date).getTime() / 1000,
656− "show-week-numbers": false,
656+ "show-week-numbers": true,
657657 },
658658 "ext": {},
659659 "icon": "image://theme/calendar",
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+33−1
@@ -80,9 +80,11 @@ Item {
8080 menuData.isCheck = false;
8181 menuData.isRadio = false;
8282 menuData.isToggled = false;
83+ }
8384
84− loader.sourceComponent = null;
85+ function cleanup() {
8586 loader.data = undefined;
87+ loader.sourceComponent = undefined;
8688
8789 verify(loader.item == null);
8890 }
@@ -116,6 +118,8 @@ Item {
116118 { tag: 'accesspoint', type: "unity.widgets.systemsettings.tablet.accesspoint", objectName: "accessPoint" },
117119 { tag: 'modeminfoitem', type: "com.canonical.indicator.network.modeminfoitem", objectName: "modemInfoItem" },
118120
121+ { tag: 'calendar', type: "com.canonical.indicator.calendar", objectName: "calendarMenu" },
122+
119123 { tag: 'unknown', type: "", objectName: "standardMenu"}
120124 ];
121125 }
@@ -833,5 +837,33 @@ Item {
833837 compare(loader.item.checked, true, "Clicking switch menu should toggle check");
834838 tryCompare(loader.item, "checked", false);
835839 }
840+
841+ function test_create_calendar_data() {
842+ return [
843+ { calendarDay: new Date(), showWeekNumbers: false, eventDays: new Array() },
844+ { calendarDay: new Date(2016, 8), showWeekNumbers: true, eventDays: [31] },
845+ { calendarDay: new Date(), showWeekNumbers: false, eventDays: [1, 5, 10] },
846+ ];
847+ }
848+
849+ function test_create_calendar(data) {
850+ menuData.type = "com.canonical.indicator.calendar";
851+ menuData.actionState = {
852+ "calendar-day": data.calendarDay.getTime() / 1000 | 0,
853+ "show-week-numbers": data.showWeekNumbers,
854+ "appointment-days": data.eventDays
855+ }
856+
857+ loader.data = menuData;
858+ loader.sourceComponent = factory.load(menuData);
859+ tryCompareFunction(function() { return loader.item != undefined; }, true);
860+ compare(loader.item.objectName, "calendarMenu", "Should have created a calendar menu")
861+
862+ compare(loader.item.currentDate.getFullYear(), data.calendarDay.getFullYear(), "Calendar year does not match data")
863+ compare(loader.item.currentDate.getMonth(), data.calendarDay.getMonth(), "Calendar month does not match data")
864+ compare(loader.item.currentDate.getDay(), data.calendarDay.getDay(), "Calendar day does not match data")
865+ compare(loader.item.showWeekNumbers, data.showWeekNumbers, "Week numbers visibility does not match data")
866+ compare(loader.item.eventDays, data.eventDays, "Event days do not match data")
867+ }
836868 }
837869}