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

List:       kde-pim
Subject:    [Kde-pim] [patch] korganizer - printing calendar item recurrence
From:       "Ron Goodheart" <ron.goodheart () gmail ! com>
Date:       2008-08-22 5:18:50
Message-ID: 138cf8bd0808212218t3a2311a2oc43bcf303e3d371b () mail ! gmail ! com
[Download RAW message or body]

HI all,
Got the following on my printout when printing my scheduled event on korganizer.
   "Repeat: TODO: Convert Repeat to String!"

So created the attached patch to print the recurrence information.

However, have only tested with 3.5 - could not get trunk to compile
due to never finding "AkonadiConfig.cmake".
The patch does support all of the recurrence available on the 3.5 GUI.

Regards,
Ron

["calprintdefaultplugins.diff" (text/x-patch)]

Index: printing/calprintdefaultplugins.cpp
===================================================================
--- printing/calprintdefaultplugins.cpp	(revision 850710)
+++ printing/calprintdefaultplugins.cpp	(working copy)
@@ -37,6 +37,7 @@
 #include <kcalendarsystem.h>
 #include <knuminput.h>
 #include <kcombobox.h>
+#include "koglobals.h"
 
 #include "calprintdefaultplugins.h"
 
@@ -280,12 +281,126 @@
       h = QMAX( printCaptionAndText( p, textRect, stringVis.mEndCaption, \
stringVis.mEndString, captionFont, textFont ), h );  }
     
-    
+    // Convert recurrence to a string
     if ( (*it)->doesRecur() ) {
       QRect recurBox( timesBox.left()+padding(), h+padding(), \
                timesBox.right()-padding(), lineHeight );
-      // TODO: Convert the recurrence to a string and print it out!
-      QString recurString( "TODO: Convert Repeat to String!" );
-      h = QMAX( printCaptionAndText( p, recurBox, i18n("Repeats: "), recurString, \
captionFont, textFont ), h ); +      KCal::Recurrence *recurs = (*it)->recurrence();
+      // recurrence
+      QStringList dayList;
+      dayList.push_back( i18n("5th Last") );
+      dayList.push_back( i18n("4th Last") );
+      dayList.push_back( i18n("3rd Last") );
+      dayList.push_back( i18n("2nd Last") );
+      dayList.push_back( i18n("Last") ); 
+      dayList.push_back( i18n("unknown") ); // zero
+      dayList.push_back( i18n("1st") );
+      dayList.push_back( i18n("2nd") );
+      dayList.push_back( i18n("3rd") );
+      dayList.push_back( i18n("4th") );
+      dayList.push_back( i18n("5th") );      
+      QString recurString;
+      const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
+      switch(recurs->recurrenceType()) {
+        case Recurrence::rNone:
+          recurString = i18n("None");
+          break;
+        case Recurrence::rDaily:
+          recurString = i18n("Every 1 day","Every %1 \
days",recurs->frequency()).arg(recurs->frequency()); +          break;
+        case Recurrence::rWeekly: 
+        {
+          QString dayNames;
+          // Respect start of week setting
+          int weekStart = KGlobal::locale()->weekStartDay();
+          bool addSpace = false;
+          for ( int i = 0; i < 7; ++i ) { 
+            if ( recurs->days().testBit( (i+weekStart+6)%7 )) {
+              if (addSpace) dayNames.append(" ");  
+              dayNames.append( calSys->weekDayName( ((i+weekStart+6)%7)+1, true ) );
+              addSpace=true;
+            }
+          }
+          recurString = i18n("Every %1 week on %2","Every %1 weeks on \
%2",recurs->frequency()).arg(recurs->frequency()).arg(dayNames); +          break;
+        }
+        case Recurrence::rMonthlyPos:
+        {
+          KCal::RecurrenceRule::WDayPos rule = recurs->monthPositions()[0];
+          recurString = i18n("Every %1 month on the %2 %3","Every %1 months on the \
%2 %3",recurs->frequency()) +                            .arg(recurs->frequency())
+                            .arg(dayList[rule.pos() + 5])
+                            .arg(calSys->weekDayName(rule.day()));
+          break;
+        }
+        case Recurrence::rMonthlyDay:
+        {     
+          int days = recurs->monthDays()[0];
+          if (days < 0) {
+            recurString = i18n("Every %1 month on the %2 day","Every %1 months on \
the %2 day",recurs->frequency()) +                              .arg( \
recurs->frequency() ) +                              .arg( dayList[days + 5] );
+          } else {
+            recurString = i18n("Every %1 month on day %2","Every %1 months on day \
%2",recurs->frequency()) +                              .arg(recurs->frequency())
+                              .arg(recurs->monthDays()[0]);
+          }
+          break;
+        }                              
+
+        case Recurrence::rYearlyMonth:
+          recurString = i18n("Every %1 year on day %2 of %3","Every %1 years on day \
%2 of %3",recurs->frequency()) +                            .arg(recurs->frequency())
+                            .arg(recurs->yearDates()[0])
+                            .arg(calSys->monthName(recurs->yearMonths()[0],1960));
+          break;
+        case Recurrence::rYearlyPos:
+        {
+          KCal::RecurrenceRule::WDayPos rule = recurs->yearPositions()[0];
+          recurString = i18n("Every %1 year on the %2 %3 of %4","Every %1 years on \
the %2 %3 %4",recurs->frequency()) +                            .arg( \
recurs->frequency() ) +                            .arg( dayList[rule.pos() + 5] )
+                            .arg( calSys->weekDayName(rule.day()) )
+                            .arg( calSys->monthName(recurs->yearMonths()[0],1960) );
+          break;
+        }
+        case Recurrence::rYearlyDay:
+          recurString = i18n("Every %1 year on day %2","Every %1 years on day \
%2",recurs->frequency()) +                            .arg( recurs->frequency() )
+                            .arg( recurs->yearDays()[0] );
+          break;
+      }      
+      // occurrances
+      QString occurString;
+      switch (recurs->duration()) {
+        case 0: // end date set
+          occurString = i18n("until \
%1").arg(KGlobal::locale()->formatDate(recurs->endDate(),true)); +          break;
+        case -1: // infinite
+          break;
+        default: // number of occurrances
+          occurString = i18n("for 1 occurance","for %1 \
occurances",recurs->duration()).arg(recurs->duration()); +          break;
+      }
+      // exception dates
+      QString exceptString;
+      if ( !recurs->exDates().isEmpty() ) {
+        exceptString = i18n("except");
+        for ( unsigned i = 0; i < recurs->exDates().size(); i++ ) {
+          if (true == recurs->recursOn(recurs->exDates()[i]))
+            exceptString.append("@");
+          exceptString.append(" ");
+          exceptString.append( KGlobal::locale()->formatDate( \
recurs->exDates()[i],true) ); +        }
+      }      
+      QString displayString;
+      displayString.append(recurString);
+      if (!displayString.endsWith(" "))
+        displayString.append(" ");
+      displayString.append(occurString);
+      if (!displayString.endsWith(" "))
+        displayString.append(" ");
+      displayString.append(exceptString);
+      h = QMAX( printCaptionAndText( p, recurBox, i18n("Repeats: "), displayString, \
captionFont, textFont ), h );  }
     
     QRect alarmBox( timesBox.left()+padding(), h+padding(), \
timesBox.right()-padding(), lineHeight );



_______________________________________________
KDE PIM mailing list kde-pim@kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/

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

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