[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace
From:       John Layt <john () layt ! net>
Date:       2010-06-06 9:32:10
Message-ID: 20100606093210.6320DAC8CC () svn ! kde ! org
[Download RAW message or body]

SVN commit 1135055 by jlayt:

Re-enable showing all holiday types in calendar.

See http://reviewboard.kde.org/r/4236/



 M  +31 -11    libs/plasmaclock/calendartable.cpp  
 M  +3 -2      libs/plasmaclock/calendartable.h  
 M  +10 -2     plasma/generic/dataengines/calendar/calendarengine.cpp  
 M  +3 -2      plasma/generic/dataengines/calendar/calendarengine.h  


--- trunk/KDE/kdebase/workspace/libs/plasmaclock/calendartable.cpp #1135054:1135055
@@ -297,8 +297,8 @@
         bool displayHolidays;
         QString holidaysRegion;
         Plasma::DataEngine *dataEngine;
-        // Hash key: int = Julian Day number, QString = what's special
-        QMultiHash<int, QString> holidays;
+        // Hash key: int = Julian Day number of holiday, Data = details of holiday
+        QMultiHash<int, Plasma::DataEngine::Data> holidays;
         // Hash key: int = Julian Day number, QString = what's going on
         QHash<int, QStringList> events;
         QHash<int, QStringList> todos;
@@ -511,9 +511,9 @@
     d->holidays.clear();
 }
 
-void CalendarTable::addHoliday(const QDate &date, const QString &description)
+void CalendarTable::addHoliday(const QDate &date,  Plasma::DataEngine::Data holidayData)
 {
-    d->holidays.insert(date.toJulianDay(), description);
+    d->holidays.insertMulti(date.toJulianDay(), holidayData);
 }
 
 bool CalendarTable::dateHasDetails(const QDate &date) const
@@ -527,10 +527,24 @@
     QString details;
     const int julian = date.toJulianDay();
 
-    foreach (const QString &holiday, d->holidays.values(julian)) {
-        details += i18n("<i>Holiday</i>: %1", holiday);
+    foreach (Plasma::DataEngine::Data holidayData, d->holidays.values(julian)) {
+        if (holidayData.value("observanceType").toString() == "PublicHoliday") {
+            if (!details.isEmpty()) {
+                details += "<br>";
     }
+            details += i18n("<i>Holiday</i>: %1", holidayData.value("name").toString());
+        }
+    }
 
+    foreach (Plasma::DataEngine::Data holidayData, d->holidays.values(julian)) {
+        if (holidayData.value("observanceType").toString() == "Other") {
+            if (!details.isEmpty()) {
+                details += "<br>";
+            }
+            details += holidayData.value("name").toString();
+        }
+    }
+
     if (d->events.contains(julian)) {
         if (!details.isEmpty()) {
             details += "<p>";
@@ -572,7 +586,7 @@
     Plasma::DataEngine::DataIterator i(holidays);
     while (i.hasNext()) {
         i.next();
-        addHoliday(QDate::fromString(i.key(), Qt::ISODate), i.value().toString());
+        addHoliday(QDate::fromString(i.key(), Qt::ISODate), i.value().toHash());
     }
 }
 
@@ -783,7 +797,9 @@
 
     p->setPen(numberColor);
     QFont font = Theme::defaultTheme()->font(Plasma::Theme::DefaultFont);
+    if (type & Event) {
     font.setBold(true);
+    }
     font.setPixelSize(cellArea.height() * 0.7);
     p->setFont(font);
     if (!(type & InvalidDate)) {
@@ -807,10 +823,10 @@
         elementId = "today";
     } else if (type & Selected) {
         elementId = "selected";
-    } else if (type & Event) {
+    } else if (type & PublicHoliday) {
+        elementId = "red";
+    } else if (type & Holiday) {
         elementId = "green";
-    } else if (type & Holiday) {
-        elementId = "red";
     } else {
         return;
     }
@@ -871,9 +887,13 @@
                 type |= CalendarTable::Selected;
             }
 
-            if (d->holidays.contains(julian)) {
+            foreach (Plasma::DataEngine::Data holidayData, d->holidays.values(julian)) {
+                if (holidayData.value("observanceType").toString() == "PublicHoliday") {
+                    type |= CalendarTable::PublicHoliday;
+                } else {
                 type |= CalendarTable::Holiday;
             }
+            }
 
             if (d->events.contains(julian) || d->events.contains(julian)) {
                 type |= CalendarTable::Event;
--- trunk/KDE/kdebase/workspace/libs/plasmaclock/calendartable.h #1135054:1135055
@@ -49,7 +49,8 @@
                     Holiday = 8,
                     NotInCurrentMonth = 16,
                     InvalidDate = 32,
-                    Event = 64};
+                    Event = 64,
+                    PublicHoliday = 128};
     Q_DECLARE_FLAGS(CellTypes, CellType)
 
     explicit CalendarTable(QGraphicsWidget *parent = 0);
@@ -76,7 +77,7 @@
     QString holidaysRegion() const;
 
     void clearHolidays();
-    void addHoliday(const QDate &date, const QString &reason);
+    void addHoliday(const QDate &date, Plasma::DataEngine::Data holidayData);
     bool dateHasDetails(const QDate &date) const;
     QString dateDetails(const QDate &date) const;
 
--- trunk/KDE/kdebase/workspace/plasma/generic/dataengines/calendar/calendarengine.cpp #1135054:1135055
@@ -260,10 +260,18 @@
 
         Plasma::DataEngine::Data data;
         foreach (const KHolidays::Holiday &holiday, holidays) {
-            if (holiday.dayType() == KHolidays::Holiday::NonWorkday && !holiday.text().isEmpty()) {
-                data.insertMulti(holiday.date().toString(Qt::ISODate), holiday.text());
+            if (!holiday.text().isEmpty()) {
+                Plasma::DataEngine::Data holidayData;
+                holidayData.insert("name", holiday.text());
+                // It's a blunt tool for now, we only know if it's a full public holiday or not
+                if ( holiday.dayType() == KHolidays::Holiday::NonWorkday ) {
+                    holidayData.insert("observanceType", "PublicHoliday");
+                } else {
+                    holidayData.insert("observanceType", "Other");
             }
+                data.insertMulti(holiday.date().toString(Qt::ISODate), holidayData);
         }
+        }
 
         setData(request, data);
         return true;
--- trunk/KDE/kdebase/workspace/plasma/generic/dataengines/calendar/calendarengine.h #1135054:1135055
@@ -50,8 +50,9 @@
             * Returns a QString of a sensible default Holiday Region
         holidays:[regionCode]:[YYYY-MM-DD]:[YYYY-MM-DD]
             * Returns a list of all holidays in a Holiday Region between two given dates
-              Each holiday is a pair of QString's, the first being the date in ISO format and the
-              second being the holiday name.
+              Note that multiple holidays can be returned for each date
+              Each holiday is a pair of a QString containing the date in ISO format and a Data
+              containing value pairs for "name" and "observanceType"
         holidays:[regionCode]:[YYYY-MM-DD]
             * Returns a list of all holidays  in a Holiday Region on a given day
         holidaysInMonth:[regionCode]:[YYYY-MM-DD]
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic