summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt12
-rw-r--r--korganizer/koprefs.cpp7
-rw-r--r--korganizer/koprefs.h1
-rw-r--r--korganizer/koprefsdialog.cpp12
-rw-r--r--korganizer/kotodoview.cpp30
-rw-r--r--korganizer/kotodoview.h1
-rw-r--r--korganizer/kotodoviewitem.cpp38
-rw-r--r--libkcal/todo.cpp44
-rw-r--r--libkcal/todo.h16
9 files changed, 143 insertions, 18 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index b4e26c2..5257bff 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1314,27 +1314,39 @@
1314{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1314{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1315{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1315{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1316{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" }, 1316{ "This prints the view as you see it.\n(With the complete content, of course.)\nYou may change the print layout by resizing the view.\nPrint unscaled may print several pages\ndepending on the amount of data.\nPrint scaled down will print all on one page.\nPrint scaled up/down will print all on one page,\nbut will scale up the text to page boundaries,\nif the text is smaller than the page.\nYou can select page geometry setup in the next dialog.\n","Dies druckt die Ansicht wie man sie sieht.\n(Mit dem kompletten Inhalt natürlich.)\nMan kann das Layout ändern durch ändern der Fenstergröße.\nDrucke unskaliert druckt ggf. mehrere Seiten\nabhängig von der Menge der Daten.\nDrucke runterskaliert um auf eine Seite zu passen\ndruckt alles auf eine Seite.\nDrucke hoch/runterskaliert um genau auf eine Seite zu passen\nvergrößert den Text gegebenenfalls.\nDas Seitenlayout kann im nächsten Dialog gewählt werden.\n" },
1317{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1317{ "KO/Pi Printout","KO/Pi Ausdruck" },
1318{ "Print unscaled","Drucke unskaliert" }, 1318{ "Print unscaled","Drucke unskaliert" },
1319{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1319{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1320{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1320{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1321{ "Printout Mode","Druck Modus" }, 1321{ "Printout Mode","Druck Modus" },
1322{ "Filter menu icon","Filtermenu Icon" }, 1322{ "Filter menu icon","Filtermenu Icon" },
1323{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" }, 1323{ "<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n","<p><b>A+(shift oder ctrl)</b>: Zeige Zeit bis zum nächsten Alarm</p>\n" },
1324{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" }, 1324{ "<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n","<p><b>N</b>: Wechsle zur nächsten Ansicht, die ein Icon in der Toolbar hat</p>\n" },
1325{ "%1d","%1t" }, 1325{ "%1d","%1t" },
1326{ "%1h","%1std" }, 1326{ "%1h","%1std" },
1327{ "%1min","%1min" }, 1327{ "%1min","%1min" },
1328{ "( %1 before )","( %1 vorher )" }, 1328{ "( %1 before )","( %1 vorher )" },
1329{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" }, 1329{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" },
1330{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" }, 1330{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" },
1331{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." }, 1331{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." },
1332{ "Show Sync Events in WN+Agenda","Zeige Sync-Ereignisse in WN+Agenda" }, 1332{ "Show Sync Events in WN+Agenda","Zeige Sync-Ereignisse in WN+Agenda" },
1333{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" }, 1333{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" },
1334{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1334{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1335{ " on "," am " }, 1335{ " on "," am " },
1336{ "On: ","Am: " }, 1336{ "On: ","Am: " },
1337{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" }, 1337{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" },
1338{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1339{ "Color for running todos:","Farbe für laufende Todos:" },
1340{ "The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?","Das Todo\n%1\nist gestartet.\nWollen Sie es\nauf gestoppt setzen?" },
1341{ "Todo is started","Todo is gestarted" },
1342{ "Stop todo","Stoppe Todo" },
1343{ "Todo is stopped","Todo ist gestoppt" },
1344{ "Start todo","Starte Todo" },
1345{ "The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?","Das Todo\n%1\nist gestoppt.\nWollen Sie es auf\ngestartet setzen?" },
1346{ "","" },
1347{ "","" },
1348{ "","" },
1349{ "","" },
1338{ "","" }, 1350{ "","" },
1339{ "","" }, 1351{ "","" },
1340{ "","" }, 1352{ "","" },
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp
index 5879a2d..e8c7c76 100644
--- a/korganizer/koprefs.cpp
+++ b/korganizer/koprefs.cpp
@@ -41,55 +41,51 @@
41#include <klocale.h> 41#include <klocale.h>
42#include <kdebug.h> 42#include <kdebug.h>
43#include <kemailsettings.h> 43#include <kemailsettings.h>
44#include <kstaticdeleter.h> 44#include <kstaticdeleter.h>
45#include <libkdepim/kpimglobalprefs.h> 45#include <libkdepim/kpimglobalprefs.h>
46 46
47#include "koprefs.h" 47#include "koprefs.h"
48#include "mainwindow.h" 48#include "mainwindow.h"
49 49
50KOPrefs *KOPrefs::mInstance = 0; 50KOPrefs *KOPrefs::mInstance = 0;
51static KStaticDeleter<KOPrefs> insd; 51static KStaticDeleter<KOPrefs> insd;
52 52
53KOPrefs::KOPrefs() : 53KOPrefs::KOPrefs() :
54 KPimPrefs("korganizerrc") 54 KPimPrefs("korganizerrc")
55{ 55{
56 mCategoryColors.setAutoDelete(true); 56 mCategoryColors.setAutoDelete(true);
57 fillMailDefaults(); 57 fillMailDefaults();
58 mDefaultCategoryColor = QColor(175,210,255);//196,196,196); 58 mDefaultCategoryColor = QColor(175,210,255);//196,196,196);
59 QColor defaultHolidayColor = QColor(255,0,0); 59 QColor defaultHolidayColor = QColor(255,0,0);
60 QColor defaultHighlightColor = QColor(129,112,255);//64,64,255); 60 QColor defaultHighlightColor = QColor(129,112,255);//64,64,255);
61 QColor defaultAgendaBgColor = QColor(239,241,169);//128,128,128); 61 QColor defaultAgendaBgColor = QColor(239,241,169);//128,128,128);
62 QColor defaultWorkingHoursColor = QColor(170,223,150);//160,160,160); 62 QColor defaultWorkingHoursColor = QColor(170,223,150);//160,160,160);
63 QColor defaultTodoDueTodayColor = QColor(255,220,100); 63 QColor defaultTodoDueTodayColor = QColor(255,220,100);
64 QColor defaultTodoOverdueColor = QColor(255,153,125); 64 QColor defaultTodoOverdueColor = QColor(255,153,125);
65 65 QColor defaultTodoRunColor = QColor(99,194,30);
66
67 KPrefs::setCurrentGroup("General"); 66 KPrefs::setCurrentGroup("General");
68
69
70 addItemBool("Enable Group Scheduling",&mEnableGroupScheduling,false); 67 addItemBool("Enable Group Scheduling",&mEnableGroupScheduling,false);
71
72 addItemBool("ShowIconNewTodo",&mShowIconNewTodo,true); 68 addItemBool("ShowIconNewTodo",&mShowIconNewTodo,true);
73 addItemBool("ShowIconNewEvent",&mShowIconNewEvent,true); 69 addItemBool("ShowIconNewEvent",&mShowIconNewEvent,true);
74 addItemBool("ShowIconSearch",&mShowIconSearch,true); 70 addItemBool("ShowIconSearch",&mShowIconSearch,true);
75 addItemBool("ShowIconList",&mShowIconList,true); 71 addItemBool("ShowIconList",&mShowIconList,true);
76 addItemBool("ShowIconDay1",&mShowIconDay1,true); 72 addItemBool("ShowIconDay1",&mShowIconDay1,true);
77 addItemBool("ShowIconDay5",&mShowIconDay5,true); 73 addItemBool("ShowIconDay5",&mShowIconDay5,true);
78 addItemBool("ShowIconDay6",&mShowIconDay6,true); 74 addItemBool("ShowIconDay6",&mShowIconDay6,true);
79 addItemBool("ShowIconDay7",&mShowIconDay7,true); 75 addItemBool("ShowIconDay7",&mShowIconDay7,true);
80 addItemBool("ShowIconMonth",&mShowIconMonth,true); 76 addItemBool("ShowIconMonth",&mShowIconMonth,true);
81 addItemBool("ShowIconTodoview",&mShowIconTodoview,true); 77 addItemBool("ShowIconTodoview",&mShowIconTodoview,true);
82 addItemBool("ShowIconBackFast",&mShowIconBackFast,true); 78 addItemBool("ShowIconBackFast",&mShowIconBackFast,true);
83 addItemBool("ShowIconBack",&mShowIconBack,true); 79 addItemBool("ShowIconBack",&mShowIconBack,true);
84 addItemBool("ShowIconToday",&mShowIconToday,true); 80 addItemBool("ShowIconToday",&mShowIconToday,true);
85 addItemBool("ShowIconForward",&mShowIconForward,true); 81 addItemBool("ShowIconForward",&mShowIconForward,true);
86 addItemBool("ShowIconForwardFast",&mShowIconForwardFast,true); 82 addItemBool("ShowIconForwardFast",&mShowIconForwardFast,true);
87 addItemBool("ShowIconWhatsThis",&mShowIconWhatsThis,true); 83 addItemBool("ShowIconWhatsThis",&mShowIconWhatsThis,true);
88 addItemBool("ShowIconWeekNum",&mShowIconWeekNum,true); 84 addItemBool("ShowIconWeekNum",&mShowIconWeekNum,true);
89 addItemBool("ShowIconNextDays",&mShowIconNextDays,true); 85 addItemBool("ShowIconNextDays",&mShowIconNextDays,true);
90 addItemBool("ShowIconNext",&mShowIconNext,true); 86 addItemBool("ShowIconNext",&mShowIconNext,true);
91 addItemBool("ShowIconJournal",&mShowIconJournal,true); 87 addItemBool("ShowIconJournal",&mShowIconJournal,true);
92 addItemBool("ShowIconStretch",&mShowIconStretch,true); 88 addItemBool("ShowIconStretch",&mShowIconStretch,true);
93 addItemBool("ShowIconFilter",&mShowIconFilter,false); 89 addItemBool("ShowIconFilter",&mShowIconFilter,false);
94 addItemBool("ShowIconOnetoolbar",&mShowIconOnetoolbar,true); 90 addItemBool("ShowIconOnetoolbar",&mShowIconOnetoolbar,true);
95 91
@@ -196,48 +192,49 @@ KOPrefs::KOPrefs() :
196 QString hdp= locateLocal("data","korganizer")+"/"; 192 QString hdp= locateLocal("data","korganizer")+"/";
197#endif 193#endif
198 194
199 KPrefs::setCurrentGroup("LoadSaveFileNames"); 195 KPrefs::setCurrentGroup("LoadSaveFileNames");
200 196
201 addItemString("LastImportFile", &mLastImportFile ,hdp +"import.ics" ); 197 addItemString("LastImportFile", &mLastImportFile ,hdp +"import.ics" );
202 addItemString("LastVcalFile", &mLastVcalFile ,hdp +"export.vcs" ); 198 addItemString("LastVcalFile", &mLastVcalFile ,hdp +"export.vcs" );
203 addItemString("LastSaveFile", &mLastSaveFile ,hdp +"mybackup.ics" ); 199 addItemString("LastSaveFile", &mLastSaveFile ,hdp +"mybackup.ics" );
204 addItemString("LastLoadFile", &mLastLoadFile ,hdp +"mybackup.ics" ); 200 addItemString("LastLoadFile", &mLastLoadFile ,hdp +"mybackup.ics" );
205 201
206 202
207 KPrefs::setCurrentGroup("Locale"); 203 KPrefs::setCurrentGroup("Locale");
208 addItemBool("ShortDateInViewer",&mShortDateInViewer,false); 204 addItemBool("ShortDateInViewer",&mShortDateInViewer,false);
209 205
210 206
211 KPrefs::setCurrentGroup("Colors"); 207 KPrefs::setCurrentGroup("Colors");
212 addItemColor("Holiday Color",&mHolidayColor,defaultHolidayColor); 208 addItemColor("Holiday Color",&mHolidayColor,defaultHolidayColor);
213 addItemColor("Highlight Color",&mHighlightColor,defaultHighlightColor); 209 addItemColor("Highlight Color",&mHighlightColor,defaultHighlightColor);
214 addItemColor("Event Color",&mEventColor,mDefaultCategoryColor); 210 addItemColor("Event Color",&mEventColor,mDefaultCategoryColor);
215 addItemColor("Todo done Color",&mTodoDoneColor,QColor(111,255,115) ); 211 addItemColor("Todo done Color",&mTodoDoneColor,QColor(111,255,115) );
216 addItemColor("Agenda Background Color",&mAgendaBgColor,defaultAgendaBgColor); 212 addItemColor("Agenda Background Color",&mAgendaBgColor,defaultAgendaBgColor);
217 addItemColor("WorkingHours Color",&mWorkingHoursColor,defaultWorkingHoursColor); 213 addItemColor("WorkingHours Color",&mWorkingHoursColor,defaultWorkingHoursColor);
218 addItemColor("Todo due today Color",&mTodoDueTodayColor,defaultTodoDueTodayColor); 214 addItemColor("Todo due today Color",&mTodoDueTodayColor,defaultTodoDueTodayColor);
219 addItemColor("Todo overdue Color",&mTodoOverdueColor,defaultTodoOverdueColor); 215 addItemColor("Todo overdue Color",&mTodoOverdueColor,defaultTodoOverdueColor);
216 addItemColor("Todo running Color",&mTodoRunColor,defaultTodoRunColor);
220 addItemColor("MonthViewEvenColor",&mMonthViewEvenColor,QColor( 160,160,255 )); 217 addItemColor("MonthViewEvenColor",&mMonthViewEvenColor,QColor( 160,160,255 ));
221 addItemColor("MonthViewOddColor",&mMonthViewOddColor,QColor( 160,255,160 )); 218 addItemColor("MonthViewOddColor",&mMonthViewOddColor,QColor( 160,255,160 ));
222 addItemColor("MonthViewHolidayColor",&mMonthViewHolidayColor,QColor( 255,160,160 )); 219 addItemColor("MonthViewHolidayColor",&mMonthViewHolidayColor,QColor( 255,160,160 ));
223 addItemBool("MonthViewUsesDayColors",&mMonthViewUsesDayColors,true); 220 addItemBool("MonthViewUsesDayColors",&mMonthViewUsesDayColors,true);
224 addItemBool("MonthViewSatSunTog",&mMonthViewSatSunTog,true); 221 addItemBool("MonthViewSatSunTog",&mMonthViewSatSunTog,true);
225 addItemBool("MonthViewWeek",&mMonthViewWeek,false); 222 addItemBool("MonthViewWeek",&mMonthViewWeek,false);
226 addItemBool("HightlightDateTimeEdit",&mHightlightDateTimeEdit,false); 223 addItemBool("HightlightDateTimeEdit",&mHightlightDateTimeEdit,false);
227 addItemColor("AppColor1",&mAppColor1,QColor( 130,170,255 )); 224 addItemColor("AppColor1",&mAppColor1,QColor( 130,170,255 ));
228 addItemColor("AppColor2",&mAppColor2,QColor( 174,216,255 )); 225 addItemColor("AppColor2",&mAppColor2,QColor( 174,216,255 ));
229 addItemBool("UseAppColors",&mUseAppColors,false); 226 addItemBool("UseAppColors",&mUseAppColors,false);
230 227
231 228
232 229
233 KPrefs::setCurrentGroup("Views"); 230 KPrefs::setCurrentGroup("Views");
234 addItemBool("Show Date Navigator",&mShowDateNavigator,true); 231 addItemBool("Show Date Navigator",&mShowDateNavigator,true);
235 addItemInt("Hour Size",&mHourSize,8); 232 addItemInt("Hour Size",&mHourSize,8);
236 addItemBool("Show Daily Recurrences",&mDailyRecur,true); 233 addItemBool("Show Daily Recurrences",&mDailyRecur,true);
237 addItemBool("Show Weekly Recurrences",&mWeeklyRecur,true); 234 addItemBool("Show Weekly Recurrences",&mWeeklyRecur,true);
238 addItemBool("Show Month Daily Recurrences",&mMonthDailyRecur,true); 235 addItemBool("Show Month Daily Recurrences",&mMonthDailyRecur,true);
239 addItemBool("Show Month Weekly Recurrences",&mMonthWeeklyRecur,true); 236 addItemBool("Show Month Weekly Recurrences",&mMonthWeeklyRecur,true);
240 addItemBool("ShowShortMonthName",&mMonthShowShort,false); 237 addItemBool("ShowShortMonthName",&mMonthShowShort,false);
241 addItemBool("ShowIconsInMonthCell",&mMonthShowIcons,true); 238 addItemBool("ShowIconsInMonthCell",&mMonthShowIcons,true);
242#ifdef DESKTOP_VERION 239#ifdef DESKTOP_VERION
243 addItemBool("Enable ToolTips",&mEnableToolTips,true); 240 addItemBool("Enable ToolTips",&mEnableToolTips,true);
diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h
index cf8dae6..d511faa 100644
--- a/korganizer/koprefs.h
+++ b/korganizer/koprefs.h
@@ -118,48 +118,49 @@ class KOPrefs : public KPimPrefs
118 QFont mTimeBarFont; 118 QFont mTimeBarFont;
119 QFont mMonthViewFont; 119 QFont mMonthViewFont;
120 QFont mAgendaViewFont; 120 QFont mAgendaViewFont;
121 QFont mMarcusBainsFont; 121 QFont mMarcusBainsFont;
122 QFont mTimeLabelsFont; 122 QFont mTimeLabelsFont;
123 QFont mTodoViewFont; 123 QFont mTodoViewFont;
124 QFont mListViewFont; 124 QFont mListViewFont;
125 QFont mDateNavigatorFont; 125 QFont mDateNavigatorFont;
126 QFont mEditBoxFont; 126 QFont mEditBoxFont;
127 QFont mJornalViewFont; 127 QFont mJornalViewFont;
128 QFont mWhatsNextFont; 128 QFont mWhatsNextFont;
129 QFont mEventViewFont; 129 QFont mEventViewFont;
130 130
131 131
132 132
133 133
134 QColor mHolidayColor; 134 QColor mHolidayColor;
135 QColor mHighlightColor; 135 QColor mHighlightColor;
136 QColor mEventColor; 136 QColor mEventColor;
137 QColor mTodoDoneColor; 137 QColor mTodoDoneColor;
138 QColor mAgendaBgColor; 138 QColor mAgendaBgColor;
139 QColor mWorkingHoursColor; 139 QColor mWorkingHoursColor;
140 QColor mTodoDueTodayColor; 140 QColor mTodoDueTodayColor;
141 QColor mTodoOverdueColor; 141 QColor mTodoOverdueColor;
142 QColor mTodoRunColor;
142 QColor mMonthViewEvenColor; 143 QColor mMonthViewEvenColor;
143 QColor mMonthViewOddColor; 144 QColor mMonthViewOddColor;
144 QColor mMonthViewHolidayColor; 145 QColor mMonthViewHolidayColor;
145 bool mMonthViewUsesDayColors; 146 bool mMonthViewUsesDayColors;
146 bool mMonthViewSatSunTog; 147 bool mMonthViewSatSunTog;
147 bool mMonthViewWeek; 148 bool mMonthViewWeek;
148 QColor mAppColor1; 149 QColor mAppColor1;
149 QColor mAppColor2; 150 QColor mAppColor2;
150 bool mUseAppColors; 151 bool mUseAppColors;
151 152
152 int mDayBegins; 153 int mDayBegins;
153 int mHourSize; 154 int mHourSize;
154 int mAllDaySize; 155 int mAllDaySize;
155 bool mShowFullMenu; 156 bool mShowFullMenu;
156 bool mDailyRecur; 157 bool mDailyRecur;
157 bool mWeeklyRecur; 158 bool mWeeklyRecur;
158 bool mMonthDailyRecur; 159 bool mMonthDailyRecur;
159 bool mMonthWeeklyRecur; 160 bool mMonthWeeklyRecur;
160 bool mMonthShowIcons; 161 bool mMonthShowIcons;
161 bool mMonthShowShort; 162 bool mMonthShowShort;
162 bool mEnableToolTips; 163 bool mEnableToolTips;
163 bool mEnableMonthScroll; 164 bool mEnableMonthScroll;
164 bool mFullViewMonth; 165 bool mFullViewMonth;
165 bool mMonthViewUsesCategoryColor; 166 bool mMonthViewUsesCategoryColor;
diff --git a/korganizer/koprefsdialog.cpp b/korganizer/koprefsdialog.cpp
index 0bbb3bf..a8943de 100644
--- a/korganizer/koprefsdialog.cpp
+++ b/korganizer/koprefsdialog.cpp
@@ -875,53 +875,63 @@ dummy =
875 875
876 KPrefsDialogWidBool *showCompletedTodo = 876 KPrefsDialogWidBool *showCompletedTodo =
877 addWidBool(i18n("To-do view shows completed Todos"), 877 addWidBool(i18n("To-do view shows completed Todos"),
878 &(KOPrefs::instance()->mShowCompletedTodo),topFrame); 878 &(KOPrefs::instance()->mShowCompletedTodo),topFrame);
879 topLayout->addWidget(showCompletedTodo->checkBox(),ii++,0); 879 topLayout->addWidget(showCompletedTodo->checkBox(),ii++,0);
880 dummy = 880 dummy =
881 addWidBool(i18n("To-do view shows complete as 'xx %'"), 881 addWidBool(i18n("To-do view shows complete as 'xx %'"),
882 &(KOPrefs::instance()->mTodoViewShowsPercentage),topFrame); 882 &(KOPrefs::instance()->mTodoViewShowsPercentage),topFrame);
883 topLayout->addWidget(dummy->checkBox(),ii++,0); 883 topLayout->addWidget(dummy->checkBox(),ii++,0);
884 884
885 dummy = 885 dummy =
886 addWidBool(i18n("Small To-do view uses smaller font"), 886 addWidBool(i18n("Small To-do view uses smaller font"),
887 &(KOPrefs::instance()->mTodoViewUsesSmallFont),topFrame); 887 &(KOPrefs::instance()->mTodoViewUsesSmallFont),topFrame);
888 topLayout->addWidget(dummy->checkBox(),ii++,0); 888 topLayout->addWidget(dummy->checkBox(),ii++,0);
889 889
890 890
891 891
892 dummy = 892 dummy =
893 addWidBool(i18n("Todo view uses category colors"), 893 addWidBool(i18n("Todo view uses category colors"),
894 &(KOPrefs::instance()->mTodoViewUsesCatColors),topFrame); 894 &(KOPrefs::instance()->mTodoViewUsesCatColors),topFrame);
895 topLayout->addWidget(dummy->checkBox(),ii++,0); 895 topLayout->addWidget(dummy->checkBox(),ii++,0);
896 896
897 897
898 QWidget* wid = new QWidget( topFrame ); 898 QWidget* wid = new QWidget( topFrame );
899 // Todo run today color
900 KPrefsDialogWidColor *todoRunColor =
901 addWidColor(i18n("Color for running todos:"),
902 &(KOPrefs::instance()->mTodoRunColor),wid);
903 QHBoxLayout *widLayout = new QHBoxLayout(wid);
904 widLayout->addWidget( todoRunColor->label() );
905 widLayout->addWidget( todoRunColor->button() );
906 topLayout->addWidget(wid,ii++,0);
907
908 wid = new QWidget( topFrame );
899 // Todo due today color 909 // Todo due today color
900 KPrefsDialogWidColor *todoDueTodayColor = 910 KPrefsDialogWidColor *todoDueTodayColor =
901 addWidColor(i18n("Todo due today color:"), 911 addWidColor(i18n("Todo due today color:"),
902 &(KOPrefs::instance()->mTodoDueTodayColor),wid); 912 &(KOPrefs::instance()->mTodoDueTodayColor),wid);
903 QHBoxLayout *widLayout = new QHBoxLayout(wid); 913 widLayout = new QHBoxLayout(wid);
904 widLayout->addWidget( todoDueTodayColor->label() ); 914 widLayout->addWidget( todoDueTodayColor->label() );
905 widLayout->addWidget( todoDueTodayColor->button() ); 915 widLayout->addWidget( todoDueTodayColor->button() );
906 topLayout->addWidget(wid,ii++,0); 916 topLayout->addWidget(wid,ii++,0);
907 //topLayout->addWidget(todoDueTodayColor->button(),ii++,1); 917 //topLayout->addWidget(todoDueTodayColor->button(),ii++,1);
908 918
909 // Todo overdue color 919 // Todo overdue color
910 wid = new QWidget( topFrame ); 920 wid = new QWidget( topFrame );
911 widLayout = new QHBoxLayout(wid); 921 widLayout = new QHBoxLayout(wid);
912 KPrefsDialogWidColor *todoOverdueColor = 922 KPrefsDialogWidColor *todoOverdueColor =
913 addWidColor(i18n("Todo overdue color:"), 923 addWidColor(i18n("Todo overdue color:"),
914 &(KOPrefs::instance()->mTodoOverdueColor),wid); 924 &(KOPrefs::instance()->mTodoOverdueColor),wid);
915 widLayout->addWidget(todoOverdueColor->label()); 925 widLayout->addWidget(todoOverdueColor->label());
916 widLayout->addWidget(todoOverdueColor->button()); 926 widLayout->addWidget(todoOverdueColor->button());
917 topLayout->addWidget(wid,ii++,0); 927 topLayout->addWidget(wid,ii++,0);
918 928
919 dummy = 929 dummy =
920 addWidBool(i18n("Colors are applied to text"), 930 addWidBool(i18n("Colors are applied to text"),
921 &(KOPrefs::instance()->mTodoViewUsesForegroundColor),topFrame); 931 &(KOPrefs::instance()->mTodoViewUsesForegroundColor),topFrame);
922 topLayout->addWidget(dummy->checkBox(),ii++,0); 932 topLayout->addWidget(dummy->checkBox(),ii++,0);
923 933
924 dummy = 934 dummy =
925 addWidBool(i18n("Allday Agenda view shows todos"), 935 addWidBool(i18n("Allday Agenda view shows todos"),
926 &(KOPrefs::instance()->mShowTodoInAgenda),topFrame); 936 &(KOPrefs::instance()->mShowTodoInAgenda),topFrame);
927 topLayout->addWidget(dummy->checkBox(),ii++,0); 937 topLayout->addWidget(dummy->checkBox(),ii++,0);
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 935a5f5..7ee1eef 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -460,48 +460,50 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
460 QString label = QString ("%1 %").arg (i); 460 QString label = QString ("%1 %").arg (i);
461 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 461 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
462 } 462 }
463 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 463 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
464 464
465 465
466 466
467 mItemPopupMenu = new QPopupMenu(this); 467 mItemPopupMenu = new QPopupMenu(this);
468 mItemPopupMenu->insertItem(i18n("Show..."), this, 468 mItemPopupMenu->insertItem(i18n("Show..."), this,
469 SLOT (showTodo())); 469 SLOT (showTodo()));
470 mItemPopupMenu->insertItem(i18n("Edit..."), this, 470 mItemPopupMenu->insertItem(i18n("Edit..."), this,
471 SLOT (editTodo())); 471 SLOT (editTodo()));
472 mItemPopupMenu->insertItem( i18n("Delete"), this, 472 mItemPopupMenu->insertItem( i18n("Delete"), this,
473 SLOT (deleteTodo())); 473 SLOT (deleteTodo()));
474 mItemPopupMenu->insertItem( i18n("Clone..."), this, 474 mItemPopupMenu->insertItem( i18n("Clone..."), this,
475 SLOT (cloneTodo())); 475 SLOT (cloneTodo()));
476 mItemPopupMenu->insertItem( i18n("Move..."), this, 476 mItemPopupMenu->insertItem( i18n("Move..."), this,
477 SLOT (moveTodo())); 477 SLOT (moveTodo()));
478 mItemPopupMenu->insertItem( i18n("Beam..."), this, 478 mItemPopupMenu->insertItem( i18n("Beam..."), this,
479 SLOT (beamTodo())); 479 SLOT (beamTodo()));
480 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 480 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
481 SLOT (cancelTodo())); 481 SLOT (cancelTodo()));
482 mItemPopupMenu->insertSeparator(); 482 mItemPopupMenu->insertSeparator();
483 483
484 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this,
485 SLOT (toggleRunningItem()));
484 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 486 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
485 SLOT (newTodo())); 487 SLOT (newTodo()));
486 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 488 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
487 SLOT (newSubTodo())); 489 SLOT (newSubTodo()));
488 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 490 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
489 SLOT (unparentTodo()),0,21); 491 SLOT (unparentTodo()),0,21);
490 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 492 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
491 SLOT (reparentTodo()),0,22); 493 SLOT (reparentTodo()),0,22);
492 mItemPopupMenu->insertSeparator(); 494 mItemPopupMenu->insertSeparator();
493#if 0 495#if 0
494 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 496 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
495 this, SLOT( purgeCompleted() ) ); 497 this, SLOT( purgeCompleted() ) );
496 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 498 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
497 this, SLOT( toggleCompleted() ),0, 33 ); 499 this, SLOT( toggleCompleted() ),0, 33 );
498 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 500 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
499 this, SLOT( toggleQuickTodo() ),0, 34 ); 501 this, SLOT( toggleQuickTodo() ),0, 34 );
500 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 502 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
501 this, SLOT( toggleRunning() ),0, 35 ); 503 this, SLOT( toggleRunning() ),0, 35 );
502 504
503#endif 505#endif
504 mPopupMenu = new QPopupMenu(this); 506 mPopupMenu = new QPopupMenu(this);
505 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 507 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
506 SLOT (newTodo()),0,1); 508 SLOT (newTodo()),0,1);
507 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 509 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
@@ -1078,59 +1080,85 @@ void KOTodoView::changedCategories(int index)
1078 if ( !colcat.isEmpty() ) { 1080 if ( !colcat.isEmpty() ) {
1079 if ( categories.find ( colcat ) != categories.end () ) { 1081 if ( categories.find ( colcat ) != categories.end () ) {
1080 categories.remove( colcat ); 1082 categories.remove( colcat );
1081 categories.prepend( colcat ); 1083 categories.prepend( colcat );
1082 } 1084 }
1083 } 1085 }
1084 mActiveItem->todo()->setCategories (categories); 1086 mActiveItem->todo()->setCategories (categories);
1085 mActiveItem->construct(); 1087 mActiveItem->construct();
1086 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1088 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1087 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 1089 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
1088 } 1090 }
1089} 1091}
1090void KOTodoView::itemDoubleClicked(QListViewItem *item) 1092void KOTodoView::itemDoubleClicked(QListViewItem *item)
1091{ 1093{
1092 if ( pendingSubtodo != 0 ) { 1094 if ( pendingSubtodo != 0 ) {
1093 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1095 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1094 } 1096 }
1095 pendingSubtodo = 0; 1097 pendingSubtodo = 0;
1096 int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() ); 1098 int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() );
1097 //qDebug("ROW %d ", row); 1099 //qDebug("ROW %d ", row);
1098 if (!item) { 1100 if (!item) {
1099 newTodo(); 1101 newTodo();
1100 return; 1102 return;
1101 } else { 1103 } else {
1102 if ( row == 1 || row == 2 ) { 1104 if ( row == 2 ) {
1103 mActiveItem = (KOTodoViewItem *) item; 1105 mActiveItem = (KOTodoViewItem *) item;
1104 newSubTodo(); 1106 newSubTodo();
1105 return; 1107 return;
1106 } 1108 }
1109 if ( row == 1 ) {
1110 mActiveItem = (KOTodoViewItem *) item;
1111 toggleRunningItem();
1112 return;
1113 }
1107 } 1114 }
1108 if ( KOPrefs::instance()->mEditOnDoubleClick ) 1115 if ( KOPrefs::instance()->mEditOnDoubleClick )
1109 editItem( item ); 1116 editItem( item );
1110 else 1117 else
1111 showItem( item , QPoint(), 0 ); 1118 showItem( item , QPoint(), 0 );
1112} 1119}
1120void KOTodoView::toggleRunningItem()
1121{
1122 qDebug("KOTodoView::toggleRunning() ");
1123 if ( ! mActiveItem )
1124 return;
1125 Todo * t = mActiveItem->todo();
1126 if ( t->isRunning() ) {
1127 int result = KMessageBox::warningContinueCancel(this,
1128 i18n("The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?").arg(mActiveItem->text(0).left( 20 ) ),i18n("Todo is started"),i18n("Stop todo"),i18n("Cancel"), true);
1129 if (result != KMessageBox::Continue) return;
1130 t->setRunning( false );
1131 mActiveItem->construct();
1132 } else {
1133 int result = KMessageBox::warningContinueCancel(this,
1134 i18n("The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?").arg(mActiveItem->text(0).left( 20 ) ),i18n("Todo is stopped"),i18n("Start todo"),i18n("Cancel"), true);
1135 if (result != KMessageBox::Continue) return;
1136 t->setRunning( true );
1137 mActiveItem->construct();
1138 }
1139}
1140
1113void KOTodoView::itemClicked(QListViewItem *item) 1141void KOTodoView::itemClicked(QListViewItem *item)
1114{ 1142{
1115 //qDebug("KOTodoView::itemClicked %d", item); 1143 //qDebug("KOTodoView::itemClicked %d", item);
1116 if (!item) { 1144 if (!item) {
1117 if ( pendingSubtodo != 0 ) { 1145 if ( pendingSubtodo != 0 ) {
1118 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1146 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1119 } 1147 }
1120 pendingSubtodo = 0; 1148 pendingSubtodo = 0;
1121 return; 1149 return;
1122 } 1150 }
1123 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1151 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1124 if ( pendingSubtodo != 0 ) { 1152 if ( pendingSubtodo != 0 ) {
1125 bool allowReparent = true; 1153 bool allowReparent = true;
1126 QListViewItem *par = item; 1154 QListViewItem *par = item;
1127 while ( par ) { 1155 while ( par ) {
1128 if ( par == pendingSubtodo ) { 1156 if ( par == pendingSubtodo ) {
1129 allowReparent = false; 1157 allowReparent = false;
1130 break; 1158 break;
1131 } 1159 }
1132 par = par->parent(); 1160 par = par->parent();
1133 } 1161 }
1134 if ( !allowReparent ) { 1162 if ( !allowReparent ) {
1135 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 1163 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
1136 qDebug("Recursive reparenting not possible "); 1164 qDebug("Recursive reparenting not possible ");
diff --git a/korganizer/kotodoview.h b/korganizer/kotodoview.h
index d0788a9..d368513 100644
--- a/korganizer/kotodoview.h
+++ b/korganizer/kotodoview.h
@@ -185,48 +185,49 @@ class KOTodoView : public KOrg::BaseView
185 void itemClicked(QListViewItem *); 185 void itemClicked(QListViewItem *);
186 void itemStateChanged(QListViewItem *); 186 void itemStateChanged(QListViewItem *);
187 void modified(bool); 187 void modified(bool);
188 void itemDoubleClicked(QListViewItem *item); 188 void itemDoubleClicked(QListViewItem *item);
189 189
190 signals: 190 signals:
191 void newTodoSignal(); 191 void newTodoSignal();
192 void newSubTodoSignal(Todo *); 192 void newSubTodoSignal(Todo *);
193 void unparentTodoSignal(Todo *); 193 void unparentTodoSignal(Todo *);
194 void reparentTodoSignal( Todo *,Todo * ); 194 void reparentTodoSignal( Todo *,Todo * );
195 void showTodoSignal(Todo *); 195 void showTodoSignal(Todo *);
196 196
197 void editTodoSignal(Todo *); 197 void editTodoSignal(Todo *);
198 void deleteTodoSignal(Todo *); 198 void deleteTodoSignal(Todo *);
199 void todoModifiedSignal (Todo *, int); 199 void todoModifiedSignal (Todo *, int);
200 200
201 void isModified(bool); 201 void isModified(bool);
202 void cloneTodoSignal( Incidence * ); 202 void cloneTodoSignal( Incidence * );
203 void cancelTodoSignal( Incidence * ); 203 void cancelTodoSignal( Incidence * );
204 void moveTodoSignal( Incidence * ); 204 void moveTodoSignal( Incidence * );
205 void beamTodoSignal( Incidence * ); 205 void beamTodoSignal( Incidence * );
206 void purgeCompletedSignal(); 206 void purgeCompletedSignal();
207 207
208 protected slots: 208 protected slots:
209 void toggleRunningItem();
209 void paintNeeded(); 210 void paintNeeded();
210 void processSelectionChange(); 211 void processSelectionChange();
211 void addQuickTodo(); 212 void addQuickTodo();
212 void setTodoModified( Todo* ); 213 void setTodoModified( Todo* );
213 void todoModified(Todo *, int ); 214 void todoModified(Todo *, int );
214 215
215 private: 216 private:
216 /* 217 /*
217 * the TodoEditor approach is rather unscaling in the long 218 * the TodoEditor approach is rather unscaling in the long
218 * run. 219 * run.
219 * Korganizer keeps it in memory and we need to update 220 * Korganizer keeps it in memory and we need to update
220 * 1. make KOTodoViewItem a QObject again? 221 * 1. make KOTodoViewItem a QObject again?
221 * 2. add a public method for setting one todo modified? 222 * 2. add a public method for setting one todo modified?
222 * 3. add a private method for setting a todo modified + friend here? 223 * 3. add a private method for setting a todo modified + friend here?
223 * -- zecke 2002-07-08 224 * -- zecke 2002-07-08
224 */ 225 */
225 KOTodoViewWhatsThis* mKOTodoViewWhatsThis; 226 KOTodoViewWhatsThis* mKOTodoViewWhatsThis;
226 friend class KOTodoListView; 227 friend class KOTodoListView;
227 void paintEvent(QPaintEvent * pevent); 228 void paintEvent(QPaintEvent * pevent);
228 bool mPendingUpdateBeforeRepaint; 229 bool mPendingUpdateBeforeRepaint;
229 friend class KOTodoViewItem; 230 friend class KOTodoViewItem;
230 QMap<Todo *,KOTodoViewItem *>::ConstIterator insertTodoItem(Todo *todo); 231 QMap<Todo *,KOTodoViewItem *>::ConstIterator insertTodoItem(Todo *todo);
231 void restoreItemState( QListViewItem * ); 232 void restoreItemState( QListViewItem * );
232 233
diff --git a/korganizer/kotodoviewitem.cpp b/korganizer/kotodoviewitem.cpp
index 6559119..66f8d06 100644
--- a/korganizer/kotodoviewitem.cpp
+++ b/korganizer/kotodoviewitem.cpp
@@ -1,46 +1,47 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <klocale.h> 20#include <klocale.h>
21#include <kdebug.h> 21#include <kdebug.h>
22#include <qapp.h> 22#include <qapp.h>
23#include <kglobal.h>
23 24
24#include <kiconloader.h> 25#include <kiconloader.h>
25#include "kotodoviewitem.h" 26#include "kotodoviewitem.h"
26#include "kotodoview.h" 27#include "kotodoview.h"
27#include "koprefs.h" 28#include "koprefs.h"
28 29
29KOTodoViewItem::KOTodoViewItem( QListView *parent, Todo *todo, KOTodoView *kotodo) 30KOTodoViewItem::KOTodoViewItem( QListView *parent, Todo *todo, KOTodoView *kotodo)
30 : QCheckListItem( parent , "", CheckBox ), mTodo( todo ), mTodoView( kotodo ) 31 : QCheckListItem( parent , "", CheckBox ), mTodo( todo ), mTodoView( kotodo )
31{ 32{
32 construct(); 33 construct();
33} 34}
34 35
35KOTodoViewItem::KOTodoViewItem( KOTodoViewItem *parent, Todo *todo, KOTodoView *kotodo ) 36KOTodoViewItem::KOTodoViewItem( KOTodoViewItem *parent, Todo *todo, KOTodoView *kotodo )
36 : QCheckListItem( parent, "", CheckBox ), mTodo( todo ), mTodoView( kotodo ) 37 : QCheckListItem( parent, "", CheckBox ), mTodo( todo ), mTodoView( kotodo )
37{ 38{
38 construct(); 39 construct();
39} 40}
40 41
41QString KOTodoViewItem::key(int column,bool) const 42QString KOTodoViewItem::key(int column,bool) const
42{ 43{
43 QMap<int,QString>::ConstIterator it = mKeyMap.find(column); 44 QMap<int,QString>::ConstIterator it = mKeyMap.find(column);
44 if (it == mKeyMap.end()) { 45 if (it == mKeyMap.end()) {
45 return text(column).lower(); 46 return text(column).lower();
46 } else { 47 } else {
@@ -99,66 +100,77 @@ void KOTodoViewItem::construct()
99 QDate d = mTodo->dtDue().date(); 100 QDate d = mTodo->dtDue().date();
100 keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 101 keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
101 // setSortKey(3,keyd); 102 // setSortKey(3,keyd);
102 if (mTodo->doesFloat()) { 103 if (mTodo->doesFloat()) {
103 setText(4,""); 104 setText(4,"");
104 } 105 }
105 else { 106 else {
106 setText(4,mTodo->dtDueTimeStr()); 107 setText(4,mTodo->dtDueTimeStr());
107 QTime t = mTodo->dtDue().time(); 108 QTime t = mTodo->dtDue().time();
108 keyt.sprintf("%02d%02d",t.hour(),t.minute()); 109 keyt.sprintf("%02d%02d",t.hour(),t.minute());
109 //setSortKey(4,keyt); 110 //setSortKey(4,keyt);
110 } 111 }
111 } else { 112 } else {
112 setText(3,""); 113 setText(3,"");
113 setText(4,""); 114 setText(4,"");
114 } 115 }
115 setSortKey(3,keyd); 116 setSortKey(3,keyd);
116 setSortKey(4,keyt); 117 setSortKey(4,keyt);
117 118
118 if (mTodo->isCompleted()) setSortKey(1,"6" + QString::number(mTodo->priority())+keyd+keyt); 119 if (mTodo->isCompleted()) setSortKey(1,"6" + QString::number(mTodo->priority())+keyd+keyt);
119 else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); 120 else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt);
120 121
121 122
122 123
124 keyd = "";
125 keyt = "";
126
127 if (mTodo->isRunning() ) {
128 QDate d = mTodo->runStart().date();
129 QTime t = mTodo->runStart().time();
130 skeyt.sprintf("%02d%02d",t.hour(),t.minute());
131 skeyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
132 keyd = KGlobal::locale()->formatDate( d );
133 keyt = KGlobal::locale()->formatTime( t );
134
135 } else {
136
123 if (mTodo->hasStartDate()) { 137 if (mTodo->hasStartDate()) {
124 setText(5, mTodo->dtStartDateStr()); 138 keyd = mTodo->dtStartDateStr();
125 QDate d = mTodo->dtStart().date(); 139 QDate d = mTodo->dtStart().date();
126 skeyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 140 skeyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
127 141
128 if (mTodo->doesFloat()) { 142 if ( !mTodo->doesFloat()) {
129 setText(6,""); 143 keyt = mTodo->dtStartTimeStr();
130 }
131 else {
132 setText(6,mTodo->dtStartTimeStr());
133 QTime t = mTodo->dtStart().time(); 144 QTime t = mTodo->dtStart().time();
134 skeyt.sprintf("%02d%02d",t.hour(),t.minute()); 145 skeyt.sprintf("%02d%02d",t.hour(),t.minute());
135 146
136 } 147 }
137 } else { 148
138 setText(5,"");
139 setText(6,"");
140 } 149 }
150 }
151 setText(5,keyd);
152 setText(6,keyt);
141 setSortKey(5,skeyd); 153 setSortKey(5,skeyd);
142 setSortKey(6,skeyt); 154 setSortKey(6,skeyt);
143 155
144 setText(7,mTodo->cancelled() ? i18n("Yes") : i18n("No")); 156 setText(7,mTodo->cancelled() ? i18n("Yes") : i18n("No"));
145 setText(8,mTodo->categoriesStr()); 157 setText(8,mTodo->categoriesStr());
146 158
147#if 0 159#if 0
148 // Find sort id in description. It's the text behind the last '#' character 160 // Find sort id in description. It's the text behind the last '#' character
149 // found in the description. White spaces are removed from beginning and end 161 // found in the description. White spaces are removed from beginning and end
150 // of sort id. 162 // of sort id.
151 int pos = mTodo->description().findRev('#'); 163 int pos = mTodo->description().findRev('#');
152 if (pos < 0) { 164 if (pos < 0) {
153 setText(6,""); 165 setText(6,"");
154 } else { 166 } else {
155 QString str = mTodo->description().mid(pos+1); 167 QString str = mTodo->description().mid(pos+1);
156 str.stripWhiteSpace(); 168 str.stripWhiteSpace();
157 setText(6,str); 169 setText(6,str);
158 } 170 }
159#endif 171#endif
160 172
161 m_known = false; 173 m_known = false;
162 m_init = false; 174 m_init = false;
163 175
164 setMyPixmap(); 176 setMyPixmap();
@@ -347,56 +359,64 @@ void KOTodoViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, i
347{ 359{
348 QColorGroup _cg = cg; 360 QColorGroup _cg = cg;
349 QColorGroup::ColorRole role; 361 QColorGroup::ColorRole role;
350 if ( KOPrefs::instance()->mTodoViewUsesForegroundColor ) 362 if ( KOPrefs::instance()->mTodoViewUsesForegroundColor )
351 role = QColorGroup::Text; 363 role = QColorGroup::Text;
352 else 364 else
353 role = QColorGroup::Base; 365 role = QColorGroup::Base;
354 //#ifndef KORG_NOLVALTERNATION 366 //#ifndef KORG_NOLVALTERNATION
355 if (isAlternate()) 367 if (isAlternate())
356 _cg.setColor(QColorGroup::Base, static_cast< KOTodoListView* >(listView())->alternateBackground()); 368 _cg.setColor(QColorGroup::Base, static_cast< KOTodoListView* >(listView())->alternateBackground());
357 bool setColor = KOPrefs::instance()->mTodoViewUsesCatColors; 369 bool setColor = KOPrefs::instance()->mTodoViewUsesCatColors;
358 QColor colorToSet; 370 QColor colorToSet;
359 if ( setColor ) { 371 if ( setColor ) {
360 QStringList categories = mTodo->categories(); 372 QStringList categories = mTodo->categories();
361 QString cat = categories.first(); 373 QString cat = categories.first();
362 if ( !cat.isEmpty()) { 374 if ( !cat.isEmpty()) {
363 colorToSet = *(KOPrefs::instance()->categoryColor(cat) ); 375 colorToSet = *(KOPrefs::instance()->categoryColor(cat) );
364 } else 376 } else
365 setColor = false; 377 setColor = false;
366 } 378 }
367 bool openMode = !isOpen(); 379 bool openMode = !isOpen();
368 // maybe we are in flat-display-mode 380 // maybe we are in flat-display-mode
369 if ( !firstChild() ) 381 if ( !firstChild() )
370 openMode = false; 382 openMode = false;
383 bool colorRunning = mTodo->isRunning();
384 if ( ! colorRunning && openMode )
385 colorRunning = mTodo->hasRunningSub();
386 if ( colorRunning ) {
387 setColor = true;
388 colorToSet = KOPrefs::instance()->mTodoRunColor;
389 } else {
371 int odue = mTodo->hasDueSubTodo( openMode ); 390 int odue = mTodo->hasDueSubTodo( openMode );
372 if (odue == 2) { 391 if (odue == 2) {
373 colorToSet = KOPrefs::instance()->mTodoOverdueColor; 392 colorToSet = KOPrefs::instance()->mTodoOverdueColor;
374 setColor = true; 393 setColor = true;
375 } else if ( odue == 1 ) { 394 } else if ( odue == 1 ) {
376 colorToSet = KOPrefs::instance()->mTodoDueTodayColor; 395 colorToSet = KOPrefs::instance()->mTodoDueTodayColor;
377 setColor = true; 396 setColor = true;
378 } 397 }
398 }
379 399
380 400
381 if ( setColor ) { 401 if ( setColor ) {
382 _cg.setColor(role,colorToSet ); 402 _cg.setColor(role,colorToSet );
383 if ( role == QColorGroup::Base) { 403 if ( role == QColorGroup::Base) {
384 int rgb = colorToSet.red(); 404 int rgb = colorToSet.red();
385 rgb += colorToSet.blue()/2; 405 rgb += colorToSet.blue()/2;
386 rgb += colorToSet.green(); 406 rgb += colorToSet.green();
387 if ( rgb < 200 ) 407 if ( rgb < 200 )
388 _cg.setColor(QColorGroup::Text,Qt::white ); 408 _cg.setColor(QColorGroup::Text,Qt::white );
389 } 409 }
390 } 410 }
391 //#endif 411 //#endif
392 if ( column > 0 ){ 412 if ( column > 0 ){
393 if ( column == 2 && !KOPrefs::instance()->mTodoViewShowsPercentage ) { 413 if ( column == 2 && !KOPrefs::instance()->mTodoViewShowsPercentage ) {
394 p->save(); 414 p->save();
395 int progress = (int)(( (width-6)*mTodo->percentComplete())/100.0 + 0.5); 415 int progress = (int)(( (width-6)*mTodo->percentComplete())/100.0 + 0.5);
396 416
397 p->fillRect( 0, 0, width, height(), _cg.base() ); // background 417 p->fillRect( 0, 0, width, height(), _cg.base() ); // background
398 // p->setPen(Qt::black ); //border 418 // p->setPen(Qt::black ); //border
399 // p->setBrush( KOPrefs::instance()->mHighlightColorKGlobalSettings::baseColor() ); //filling 419 // p->setBrush( KOPrefs::instance()->mHighlightColorKGlobalSettings::baseColor() ); //filling
400 QColor fc = KOPrefs::instance()->mHighlightColor; 420 QColor fc = KOPrefs::instance()->mHighlightColor;
401 if ( mTodo->percentComplete() == 100 ) 421 if ( mTodo->percentComplete() == 100 )
402 fc = darkGreen; 422 fc = darkGreen;
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index a496404..7dee4cd 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -14,64 +14,108 @@
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24 24
25#include "todo.h" 25#include "todo.h"
26 26
27using namespace KCal; 27using namespace KCal;
28 28
29Todo::Todo(): Incidence() 29Todo::Todo(): Incidence()
30{ 30{
31// mStatus = TENTATIVE; 31// mStatus = TENTATIVE;
32 32
33 mHasDueDate = false; 33 mHasDueDate = false;
34 setHasStartDate( false ); 34 setHasStartDate( false );
35 mCompleted = getEvenTime(QDateTime::currentDateTime()); 35 mCompleted = getEvenTime(QDateTime::currentDateTime());
36 mHasCompletedDate = false; 36 mHasCompletedDate = false;
37 mPercentComplete = 0; 37 mPercentComplete = 0;
38 mRunning = false;
39 mRunSaveTimer = 0;
38} 40}
39 41
40Todo::Todo(const Todo &t) : Incidence(t) 42Todo::Todo(const Todo &t) : Incidence(t)
41{ 43{
42 mDtDue = t.mDtDue; 44 mDtDue = t.mDtDue;
43 mHasDueDate = t.mHasDueDate; 45 mHasDueDate = t.mHasDueDate;
44 mCompleted = t.mCompleted; 46 mCompleted = t.mCompleted;
45 mHasCompletedDate = t.mHasCompletedDate; 47 mHasCompletedDate = t.mHasCompletedDate;
46 mPercentComplete = t.mPercentComplete; 48 mPercentComplete = t.mPercentComplete;
49 mRunning = false;
50 mRunSaveTimer = 0;
47} 51}
48 52
49Todo::~Todo() 53Todo::~Todo()
50{ 54{
55 setRunning( false );
56}
57
58void Todo::setRunning( bool run )
59{
60 if ( run == mRunning )
61 return;
62 if ( !mRunSaveTimer ) {
63 mRunSaveTimer = new QTimer ( this );
64 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) );
65 }
66 mRunning = run;
67 if ( mRunning ) {
68 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min
69 mRunStart = QDateTime::currentDateTime();
70 } else {
71 mRunSaveTimer->stop();
72 saveRunningInfoToFile();
73 }
74}
51 75
76void Todo::saveRunningInfoToFile()
77{
78 qDebug("Todo::saveRunningInfoToFile() ");
52} 79}
53 80
81int Todo::runTime()
82{
83 if ( !mRunning )
84 return 0;
85 return mRunStart.secsTo( QDateTime::currentDateTime() );
86}
87bool Todo::hasRunningSub()
88{
89 if ( mRunning )
90 return true;
91 Incidence *aTodo;
92 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) {
93 if ( ((Todo*)aTodo)->hasRunningSub() )
94 return true;
95 }
96 return false;
97}
54Incidence *Todo::clone() 98Incidence *Todo::clone()
55{ 99{
56 return new Todo(*this); 100 return new Todo(*this);
57} 101}
58 102
59bool Todo::contains ( Todo* from ) 103bool Todo::contains ( Todo* from )
60{ 104{
61 105
62 if ( !from->summary().isEmpty() ) 106 if ( !from->summary().isEmpty() )
63 if ( !summary().startsWith( from->summary() )) 107 if ( !summary().startsWith( from->summary() ))
64 return false; 108 return false;
65 if ( from->hasStartDate() ) { 109 if ( from->hasStartDate() ) {
66 if ( !hasStartDate() ) 110 if ( !hasStartDate() )
67 return false; 111 return false;
68 if ( from->dtStart() != dtStart()) 112 if ( from->dtStart() != dtStart())
69 return false; 113 return false;
70 } 114 }
71 if ( from->hasDueDate() ){ 115 if ( from->hasDueDate() ){
72 if ( !hasDueDate() ) 116 if ( !hasDueDate() )
73 return false; 117 return false;
74 if ( from->dtDue() != dtDue()) 118 if ( from->dtDue() != dtDue())
75 return false; 119 return false;
76 } 120 }
77 if ( !from->location().isEmpty() ) 121 if ( !from->location().isEmpty() )
diff --git a/libkcal/todo.h b/libkcal/todo.h
index a22d4b7..fe43357 100644
--- a/libkcal/todo.h
+++ b/libkcal/todo.h
@@ -4,55 +4,58 @@
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20#ifndef TODO_H 20#ifndef TODO_H
21#define TODO_H 21#define TODO_H
22// 22//
23// Todo component, representing a VTODO object 23// Todo component, representing a VTODO object
24// 24//
25 25
26#include "incidence.h" 26#include "incidence.h"
27 27
28#include <qtimer.h>
29
28namespace KCal { 30namespace KCal {
29 31
30/** 32/**
31 This class provides a Todo in the sense of RFC2445. 33 This class provides a Todo in the sense of RFC2445.
32*/ 34*/
33class Todo : public Incidence 35 class Todo : public QObject,public Incidence
34{ 36{
37 Q_OBJECT
35 public: 38 public:
36 Todo(); 39 Todo();
37 Todo(const Todo &); 40 Todo(const Todo &);
38 ~Todo(); 41 ~Todo();
39 typedef ListBase<Todo> List; 42 typedef ListBase<Todo> List;
40 QCString type() const { return "Todo"; } 43 QCString type() const { return "Todo"; }
41 44
42 /** Return an exact copy of this todo. */ 45 /** Return an exact copy of this todo. */
43 Incidence *clone(); 46 Incidence *clone();
44 QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const; 47 QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const;
45 48
46 /** for setting the todo's due date/time with a QDateTime. */ 49 /** for setting the todo's due date/time with a QDateTime. */
47 void setDtDue(const QDateTime &dtDue); 50 void setDtDue(const QDateTime &dtDue);
48 /** returns an event's Due date/time as a QDateTime. */ 51 /** returns an event's Due date/time as a QDateTime. */
49 QDateTime dtDue() const; 52 QDateTime dtDue() const;
50 /** returns an event's due time as a string formatted according to the 53 /** returns an event's due time as a string formatted according to the
51 users locale settings */ 54 users locale settings */
52 QString dtDueTimeStr() const; 55 QString dtDueTimeStr() const;
53 /** returns an event's due date as a string formatted according to the 56 /** returns an event's due date as a string formatted according to the
54 users locale settings */ 57 users locale settings */
55 QString dtDueDateStr(bool shortfmt=true) const; 58 QString dtDueDateStr(bool shortfmt=true) const;
56 /** returns an event's due date and time as a string formatted according 59 /** returns an event's due date and time as a string formatted according
57 to the users locale settings */ 60 to the users locale settings */
58 QString dtDueStr(bool shortfmt=true) const; 61 QString dtDueStr(bool shortfmt=true) const;
@@ -93,44 +96,53 @@ class Todo : public Incidence
93 void setCompleted(bool); 96 void setCompleted(bool);
94 97
95 /** 98 /**
96 Return how many percent of the task are completed. Returns a value 99 Return how many percent of the task are completed. Returns a value
97 between 0 and 100. 100 between 0 and 100.
98 */ 101 */
99 int percentComplete() const; 102 int percentComplete() const;
100 /** 103 /**
101 Set how many percent of the task are completed. Valid values are in the 104 Set how many percent of the task are completed. Valid values are in the
102 range from 0 to 100. 105 range from 0 to 100.
103 */ 106 */
104 void setPercentComplete(int); 107 void setPercentComplete(int);
105 108
106 /** return date and time when todo was completed */ 109 /** return date and time when todo was completed */
107 QDateTime completed() const; 110 QDateTime completed() const;
108 QString completedStr(bool shortF = true) const; 111 QString completedStr(bool shortF = true) const;
109 /** set date and time of completion */ 112 /** set date and time of completion */
110 void setCompleted(const QDateTime &completed); 113 void setCompleted(const QDateTime &completed);
111 114
112 /** Return true, if todo has a date associated with completion */ 115 /** Return true, if todo has a date associated with completion */
113 bool hasCompletedDate() const; 116 bool hasCompletedDate() const;
114 bool contains ( Todo*); 117 bool contains ( Todo*);
115 void checkSetCompletedFalse(); 118 void checkSetCompletedFalse();
116 bool setRecurDates(); 119 bool setRecurDates();
117 120 bool isRunning() {return mRunning;}
121 bool hasRunningSub();
122 void setRunning( bool );
123 int runTime();
124 QDateTime runStart () const { return mRunStart;}
125 public slots:
126 void saveRunningInfoToFile();
118 private: 127 private:
128 bool mRunning;
129 QTimer * mRunSaveTimer;
130 QDateTime mRunStart;
119 bool accept(Visitor &v) { return v.visit(this); } 131 bool accept(Visitor &v) { return v.visit(this); }
120 132
121 QDateTime mDtDue; // due date of todo 133 QDateTime mDtDue; // due date of todo
122 134
123 bool mHasDueDate; // if todo has associated due date 135 bool mHasDueDate; // if todo has associated due date
124 136
125// int mStatus; // confirmed/delegated/tentative/etc 137// int mStatus; // confirmed/delegated/tentative/etc
126 138
127 QDateTime mCompleted; 139 QDateTime mCompleted;
128 bool mHasCompletedDate; 140 bool mHasCompletedDate;
129 141
130 int mPercentComplete; 142 int mPercentComplete;
131}; 143};
132 144
133 bool operator==( const Todo&, const Todo& ); 145 bool operator==( const Todo&, const Todo& );
134} 146}
135 147
136#endif 148#endif