[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-21 20:44:08
Message-ID: 20100621204408.D62D9AC8DA () svn ! kde ! org
[Download RAW message or body]

SVN commit 1140935 by jlayt:

Fix missing Todo's in Plasma calendar.

See Reviewboard http://reviewboard.kde.org/r/4387/



 M  +41 -47    libs/plasmaclock/calendartable.cpp  
 M  +8 -1      plasma/generic/dataengines/calendar/eventdatacontainer.cpp  


--- trunk/KDE/kdebase/workspace/libs/plasmaclock/calendartable.cpp #1140934:1140935
@@ -300,11 +300,10 @@
         bool displayHolidays;
         QString holidaysRegion;
         Plasma::DataEngine *dataEngine;
-        // Hash key: int = Julian Day number of holiday, Data = details of holiday
+        // Hash key: int = Julian Day number of holiday/event/todo, Data = details \
of holiday/event/todo  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;
+        QMultiHash<int, Plasma::DataEngine::Data> events;
+        QMultiHash<int, Plasma::DataEngine::Data> todos;
         QString eventsQuery;
 
         Ui::calendarConfig calendarConfigUi;
@@ -530,41 +529,57 @@
     QString details;
     const int julian = date.toJulianDay();
 
+    if (d->holidays.contains(julian)) {
+        details += "<br>";
+
     foreach (Plasma::DataEngine::Data holidayData, d->holidays.values(julian)) {
         if (holidayData.value("observanceType").toString() == "PublicHoliday") {
-            if (!details.isEmpty()) {
+                details += i18n("<i>Holiday</i>: %1", \
holidayData.value("name").toString());  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()) {
+                //TODO add a type when strings not frozen
+                details += holidayData.value("name").toString();
                 details += "<br>";
             }
-            details += holidayData.value("name").toString();
         }
     }
 
     if (d->events.contains(julian)) {
-        if (!details.isEmpty()) {
-            details += "<p>";
-        }
+        details += "<br>";
 
-        foreach (const QString &event, d->events.value(julian)) {
-            details += i18n("<i>Event</i>: %1<br>", event);
+        foreach (Plasma::DataEngine::Data eventData, d->events.values(julian)) {
+            KDateTime startDate = \
KDateTime(eventData.value("StartDate").toDateTime()); +            KDateTime endDate \
= KDateTime(eventData.value("EndDate").toDateTime()); +            QTime startTime, \
endTime; +            if (startDate.date() < date) {
+                startTime.setHMS(0, 0, 0);
+            } else {
+                startTime = startDate.time();
         }
+            if (endDate.date() > date) {
+                endTime.setHMS(23, 59, 59);
+            } else {
+                endTime = endDate.time();
     }
+            //TODO translate this layout once strings not frozen
+            QString description = QString("%1 - \
%2<br>%3").arg(KGlobal::locale()->formatTime(startTime)) +                            \
.arg(KGlobal::locale()->formatTime(endTime)) +                                        \
.arg(eventData.value("Summary").toString()); +            details += \
i18n("<i>Event</i>: %1<br>", description); +        }
+    }
 
     if (d->todos.contains(julian)) {
-        if (!details.isEmpty()) {
-            details += "<p>";
-        }
+        details += "<br>";
 
-        foreach (const QString &event, d->todos.value(julian)) {
-            details += i18n("<i>Todo</i>: %1<br>", event);
+        foreach (Plasma::DataEngine::Data todoData, d->todos.values(julian)) {
+            //TODO add Priority and Percentage Complete when strings not frozen
+            QString description = \
QString("%1").arg(todoData.value("Summary").toString()); +            details += \
i18n("<i>Todo</i>: %1<br>", description);  }
     }
 
@@ -614,38 +629,17 @@
 void CalendarTable::dataUpdated(const QString &source, const \
Plasma::DataEngine::Data &data)  {
     Q_UNUSED(source)
-    //kDebug() << "***************" << source << data.count() << data;
-    //QVariantList list
-    KLocale *loc = KGlobal::locale();
     d->events.clear();
     d->todos.clear();
     foreach (const QVariant &v, data) {
-        const QVariantMap map = v.toMap();
-
-        if (map["Type"].toString() == "Journal") {
-            continue;
+        Plasma::DataEngine::Data pimData = v.toHash();
+        QString type = pimData.take("Type").toString();
+        if (type == "Todo") {
+            d->todos.insert(pimData.value("TodoDueDate").toDateTime().date().toJulianDay(), \
pimData); +        } else if (type == "Event") {
+            d->events.insert(pimData.value("StartDate").toDateTime().date().toJulianDay(), \
pimData); +        } // Ignore Journals
         }
-
-        QString description = QString("%1 - %2\n%3")
-                                \
                .arg(loc->formatDateTime(KDateTime(map["StartDate"].toDateTime())))
-                                \
                .arg(loc->formatDateTime(KDateTime(map["EndDate"].toDateTime())))
-                                .arg(map["Summary"].toString());
-        int julian = map["StartDate"].toDateTime().date().toJulianDay();
-        //kDebug() << "inserting" << julian << map["Type"].toString() << \
                description;
-        if (map["Type"].toString() == "Todo") {
-            if (d->todos.contains(julian)) {
-                d->todos[julian].append(description);
-            } else {
-                d->todos.insert(julian, QStringList() << description);
-            }
-        } else {
-            if (d->events.contains(julian)) {
-                d->events[julian].append(description);
-            } else {
-                d->events.insert(julian, QStringList() << description);
-            }
-        }
-    }
     update();
 }
 
--- trunk/KDE/kdebase/workspace/plasma/generic/dataengines/calendar/eventdatacontainer.cpp \
#1140934:1140935 @@ -78,13 +78,20 @@
 void EventDataContainer::updateData(Akonadi::DateRangeFilterProxyModel* model, const \
QModelIndex& parent)  {
     for(int row = 0; row < model->rowCount(parent); ++row) {
-        QVariantMap eventData;
+        Plasma::DataEngine::Data eventData;
         eventData["Type"] = model->index(row, Akonadi::CalendarModel::Type).data();
         eventData["StartDate"] = model->index(row, \
Akonadi::CalendarModel::DateTimeStart).data(Akonadi::CalendarModel::SortRole).toDateTime();
                
         eventData["EndDate"] = model->index(row, \
Akonadi::CalendarModel::DateTimeEnd).data(Akonadi::CalendarModel::SortRole).toDateTime();
 +        eventData["PrimaryDate"] = model->index(row, \
Akonadi::CalendarModel::PrimaryDate).data(Akonadi::CalendarModel::SortRole).toDateTime();
                
         eventData["Summary"] = model->index(row, \
                Akonadi::CalendarModel::Summary).data().toString();
         QVariant collection = model->index(row, \
                Akonadi::CalendarModel::Type).data(Akonadi::EntityTreeModel::ParentCollectionRole);
                
         eventData["Source"] = collection.value<Akonadi::Collection>().name();
+        eventData["RecursRole"] = model->index(row, \
Akonadi::CalendarModel::RecursRole).data(); +        if ( eventData["Type"] == "Todo" \
) { +            eventData["TodoDueDate"] = model->index(row, \
Akonadi::CalendarModel::DateTimeDue).data(Akonadi::CalendarModel::SortRole).toDateTime();
 +            eventData["TodoPriority"] = model->index(row, \
Akonadi::CalendarModel::Priority).data(Akonadi::CalendarModel::SortRole); +           \
eventData["TodoPercentComplete"] = model->index(row, \
Akonadi::CalendarModel::PercentComplete).data(Akonadi::CalendarModel::SortRole); +    \
                }
         setData(model->index(row, Akonadi::CalendarModel::Uid).data().toString(), \
eventData);  }
     checkForUpdate();


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

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