summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-10-27 23:22:36 (UTC)
committer zautrix <zautrix>2005-10-27 23:22:36 (UTC)
commitcbda16d4966c7483d20d1b6b5a64c8af367ea732 (patch) (unidiff)
tree47099fd5b318c47eb1d8fff3d8a3eef6e34f6f23
parentd6d384e50cfd511866958e58cdd3adeb35ed1c4e (diff)
downloadkdepimpi-cbda16d4966c7483d20d1b6b5a64c8af367ea732.zip
kdepimpi-cbda16d4966c7483d20d1b6b5a64c8af367ea732.tar.gz
kdepimpi-cbda16d4966c7483d20d1b6b5a64c8af367ea732.tar.bz2
us fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt5
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt1
-rw-r--r--korganizer/komonthview.cpp14
-rw-r--r--libkdepim/kdatepicker.cpp8
-rw-r--r--microkde/kdatetbl.cpp32
5 files changed, 34 insertions, 26 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index edf7eb1..681e433 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,82 +1,87 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.2.6 ************
4
5KO/Pi:
6Made navigation in datepicker more userfriendly when using keyboard for scrolling.
7
3********** VERSION 2.2.5 ************ 8********** VERSION 2.2.5 ************
4 9
5Bugfixes in KO/Pi, KA/Pi and OM/Pi. 10Bugfixes in KO/Pi, KA/Pi and OM/Pi.
6Added possibility to disable auto saving in KO/Pi. 11Added possibility to disable auto saving in KO/Pi.
7How to disable it? Good question! Next question, please? 12How to disable it? Good question! Next question, please?
8Added info about count of events/todos/journals to calendar info. 13Added info about count of events/todos/journals to calendar info.
9 14
10 15
11********** VERSION 2.2.4 ************ 16********** VERSION 2.2.4 ************
12 17
13KO/Pi alarm applet: Made font smaller and added a dealy before starting KO/Pi to avoid problems accessing data storage when an alarm did wake up the Z. 18KO/Pi alarm applet: Made font smaller and added a dealy before starting KO/Pi to avoid problems accessing data storage when an alarm did wake up the Z.
14Added 3 sec notification about a started timer. 19Added 3 sec notification about a started timer.
15 20
16KO/Pi: 21KO/Pi:
17Added export option for all data to File->Export menu. 22Added export option for all data to File->Export menu.
18Better management if a save error occours. 23Better management if a save error occours.
19Added 15 sec delay in automatic saving when Z wake up from suspend and the automatic save timer did expire - to avoid problems accessing data storage directly after wake up. 24Added 15 sec delay in automatic saving when Z wake up from suspend and the automatic save timer did expire - to avoid problems accessing data storage directly after wake up.
20Fix for displaying month names of an utf8 translated language (like Russian). I hope a Russian version of KO/Pi will be available soon. 25Fix for displaying month names of an utf8 translated language (like Russian). I hope a Russian version of KO/Pi will be available soon.
21 26
22Added duration info about multiday events. 27Added duration info about multiday events.
23Changed behaviour of "Set complete" in Todo viewer: Now Todo viewer closes not automatically. 28Changed behaviour of "Set complete" in Todo viewer: Now Todo viewer closes not automatically.
24 29
25KA/Pi: 30KA/Pi:
26Added for vCard import the option to import contact data in Latin1 format. 31Added for vCard import the option to import contact data in Latin1 format.
27 32
28********** VERSION 2.2.3 ************ 33********** VERSION 2.2.3 ************
29 34
30KO/Pi: 35KO/Pi:
31Fixed a problem with (non empty) exception dates in the exception date edit dialog of recurring events for newly created events. 36Fixed a problem with (non empty) exception dates in the exception date edit dialog of recurring events for newly created events.
32 37
33Fixed usability problem in KA/Pi: 38Fixed usability problem in KA/Pi:
34Now searching works for "all phone numbers and all addresses" if "all fields" is selected as search option. 39Now searching works for "all phone numbers and all addresses" if "all fields" is selected as search option.
35 40
36Changed some behaviour in OM/Pi mail management to make it more usable. 41Changed some behaviour in OM/Pi mail management to make it more usable.
37 42
38 43
39********** VERSION 2.2.2 ************ 44********** VERSION 2.2.2 ************
40 45
41KO/Pi: 46KO/Pi:
42Fixed a problem with the sort order of last modified date in list view. 47Fixed a problem with the sort order of last modified date in list view.
43KA/Pi: 48KA/Pi:
44Fixed a resource config read problem on windows. 49Fixed a resource config read problem on windows.
45 50
46 51
47********** VERSION 2.2.1 ************ 52********** VERSION 2.2.1 ************
48 53
49KO/Pi: 54KO/Pi:
50Fixed a problem displaying very long allday events in agenda view in single day mode. 55Fixed a problem displaying very long allday events in agenda view in single day mode.
51Fixed a problem with the default settings for new todos. 56Fixed a problem with the default settings for new todos.
52Added an error message dialog if saving of calendar files is not possible. 57Added an error message dialog if saving of calendar files is not possible.
53Made it impossible to close KO/Pi if saving fails. 58Made it impossible to close KO/Pi if saving fails.
54Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick. 59Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick.
55Added config options for conflict detection. 60Added config options for conflict detection.
56 61
57KA/Pi: 62KA/Pi:
58Added a config option to turn on asking before a contact is deleted. 63Added a config option to turn on asking before a contact is deleted.
59Fixed a problem with the default view and view selection at startup. 64Fixed a problem with the default view and view selection at startup.
60Formatted name is now set on import, if formatted name is empty. 65Formatted name is now set on import, if formatted name is empty.
61Fixed a problem of displaying images in the contact details view: 66Fixed a problem of displaying images in the contact details view:
62Now the wid/hei ratio is not changed. 67Now the wid/hei ratio is not changed.
63I a picture is larger than 128 pixels in wid or hei it is downscaled to 68I a picture is larger than 128 pixels in wid or hei it is downscaled to
64max 128 pixels wid/hei. 69max 128 pixels wid/hei.
65 70
66********** VERSION 2.2.0 ************ 71********** VERSION 2.2.0 ************
67 72
68New stable release! 73New stable release!
69Fixed some minor usability problems. 74Fixed some minor usability problems.
70Added writing of next alarm to a file for usage on pdaXrom. 75Added writing of next alarm to a file for usage on pdaXrom.
71 76
72 77
73************************************* 78*************************************
74 79
75You can find the complete changelog 80You can find the complete changelog
76from version 1.7.7 to 2.2.0 81from version 1.7.7 to 2.2.0
77in the source package or on 82in the source package or on
78 83
79http://www.pi-sync.net/html/changelog.html 84http://www.pi-sync.net/html/changelog.html
80 85
81 86
82 87
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 288ce4b..767e243 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1069,513 +1069,512 @@
1069{ "Time Format","Zeit Format" }, 1069{ "Time Format","Zeit Format" },
1070{ "Time Zone","Zeit Zone" }, 1070{ "Time Zone","Zeit Zone" },
1071{ "%1 groups subscribed","%1 Guppen abboniert" }, 1071{ "%1 groups subscribed","%1 Guppen abboniert" },
1072{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 1072{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
1073{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1073{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1074{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1074{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1075{ "Save settings","Speichere Einstellungen" }, 1075{ "Save settings","Speichere Einstellungen" },
1076{ "Save standard","Speichere Standard" }, 1076{ "Save standard","Speichere Standard" },
1077{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1077{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1078{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1078{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1079{ "Data storage path","Daten Speicherpfad" }, 1079{ "Data storage path","Daten Speicherpfad" },
1080{ "Language","Sprache" }, 1080{ "Language","Sprache" },
1081{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1081{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1082{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1082{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1083{ "Show events that are done","Zeige abgelaufene Termine" }, 1083{ "Show events that are done","Zeige abgelaufene Termine" },
1084{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1084{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1085{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1085{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1086{ "KO/Pi","KO/Pi" }, 1086{ "KO/Pi","KO/Pi" },
1087{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1087{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1088{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1088{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1089{ "Sound.Al.: ","Sound.Al.: " }, 1089{ "Sound.Al.: ","Sound.Al.: " },
1090{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1090{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1091{ "Restore","Wiederherstellen" }, 1091{ "Restore","Wiederherstellen" },
1092{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" }, 1092{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklich\nwiederherstellen?" },
1093{ "% completed","% erledigt" }, 1093{ "% completed","% erledigt" },
1094{ "%d item(s) found.","%d Item(s) gefunden." }, 1094{ "%d item(s) found.","%d Item(s) gefunden." },
1095{ "Set complete","Setze auf erledigt" }, 1095{ "Set complete","Setze auf erledigt" },
1096{ "(cancelled)","(gecancelt)" }, 1096{ "(cancelled)","(gecancelt)" },
1097{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1097{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1098{ " Local time "," Lokale Zeit " }, 1098{ " Local time "," Lokale Zeit " },
1099{ "Form2","Form2" }, 1099{ "Form2","Form2" },
1100{ "Filter enabled","Filter angeschaltet" }, 1100{ "Filter enabled","Filter angeschaltet" },
1101{ "Edit Filters","Ändere Filter" }, 1101{ "Edit Filters","Ändere Filter" },
1102{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1102{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1103{ "Agenda","Agenda" }, 1103{ "Agenda","Agenda" },
1104{ " ("," (" }, 1104{ " ("," (" },
1105{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1105{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1106{ "Print","Print" }, 1106{ "Print","Print" },
1107{ "&Setup Printer...","Drucker &Setup..." }, 1107{ "&Setup Printer...","Drucker &Setup..." },
1108{ "View Type","Zeige Typ" }, 1108{ "View Type","Zeige Typ" },
1109{ "Page &orientation:","Seiten Ausrichtung:" }, 1109{ "Page &orientation:","Seiten Ausrichtung:" },
1110{ "Use Default of Selected Style","Default des selektierten Stils" }, 1110{ "Use Default of Selected Style","Default des selektierten Stils" },
1111{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1111{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1112{ "Portrait","Portrait" }, 1112{ "Portrait","Portrait" },
1113{ "Landscape","Landschaft" }, 1113{ "Landscape","Landschaft" },
1114{ "Print day","Drucke Tag" }, 1114{ "Print day","Drucke Tag" },
1115{ "CalPrintDay_Base","CalPrintDay_Base" }, 1115{ "CalPrintDay_Base","CalPrintDay_Base" },
1116{ "Date && Time Range","Datum && Zeitspanne" }, 1116{ "Date && Time Range","Datum && Zeitspanne" },
1117{ "&End date:","&Enddatum:" }, 1117{ "&End date:","&Enddatum:" },
1118{ "&Start date:","&Startdatum:" }, 1118{ "&Start date:","&Startdatum:" },
1119{ "Start &time:","Startzeit:" }, 1119{ "Start &time:","Startzeit:" },
1120{ "End ti&me:","Endzeit:" }, 1120{ "End ti&me:","Endzeit:" },
1121{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1121{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1122{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1122{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1123{ "Alt+D","Alt+D" }, 1123{ "Alt+D","Alt+D" },
1124{ "&Use colors","Nutze Farben" }, 1124{ "&Use colors","Nutze Farben" },
1125{ "Alt+U","Alt+U" }, 1125{ "Alt+U","Alt+U" },
1126{ "Print week","Drucke Woche" }, 1126{ "Print week","Drucke Woche" },
1127{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1127{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1128{ "Use &colors","Nutze Farben" }, 1128{ "Use &colors","Nutze Farben" },
1129{ "Type of View","Typ der Ansicht" }, 1129{ "Type of View","Typ der Ansicht" },
1130{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1130{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1131{ "Alt+F","Alt+F" }, 1131{ "Alt+F","Alt+F" },
1132{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1132{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1133{ "Alt+T","Alt+T" }, 1133{ "Alt+T","Alt+T" },
1134{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1134{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1135{ "Print month","Drucke Monat" }, 1135{ "Print month","Drucke Monat" },
1136{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1136{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1137{ "&Start month:","&Startmonat:" }, 1137{ "&Start month:","&Startmonat:" },
1138{ "&End month:","&Endmonat:" }, 1138{ "&End month:","&Endmonat:" },
1139{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1139{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1140{ "Print todos","Drucke Todos" }, 1140{ "Print todos","Drucke Todos" },
1141{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1141{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1142{ "Include &description of the item","Inclusive Itembeschreibung" }, 1142{ "Include &description of the item","Inclusive Itembeschreibung" },
1143{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1143{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1144{ "Include &priority of the item","Inclusive Priorität des Items" }, 1144{ "Include &priority of the item","Inclusive Priorität des Items" },
1145{ "Items to Print","Zu druckende Items" }, 1145{ "Items to Print","Zu druckende Items" },
1146{ "&From:","Von:" }, 1146{ "&From:","Von:" },
1147{ "&To:","Bis:" }, 1147{ "&To:","Bis:" },
1148{ "Print &all todo items","Drucke alle Todo Items" }, 1148{ "Print &all todo items","Drucke alle Todo Items" },
1149{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1149{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1150{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1150{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1151{ "Todo List","Todo Liste" }, 1151{ "Todo List","Todo Liste" },
1152{ "&Title:","&Titel:" }, 1152{ "&Title:","&Titel:" },
1153{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" }, 1153{ "Co&nnect subtodos with its parent","Verbinde Untertodos mit ihren Ober-Todos" },
1154{ "Todo list","Todo Liste" }, 1154{ "Todo list","Todo Liste" },
1155{ "&Print...","Drucke..." }, 1155{ "&Print...","Drucke..." },
1156{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1156{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1157{ "[Unconfigured]","[Unkonfiguriert]" }, 1157{ "[Unconfigured]","[Unkonfiguriert]" },
1158{ "OK","OK" }, 1158{ "OK","OK" },
1159{ "FilterEditor","FilterEditor" }, 1159{ "FilterEditor","FilterEditor" },
1160{ "Include","Inclusive" }, 1160{ "Include","Inclusive" },
1161{ "Exclude","Exclusive" }, 1161{ "Exclude","Exclusive" },
1162{ "Edit Selection...","Editiere Auswahl" }, 1162{ "Edit Selection...","Editiere Auswahl" },
1163{ "recurring events","wiederholende Termine" }, 1163{ "recurring events","wiederholende Termine" },
1164{ "recurr. events","wiederh.Termine" }, 1164{ "recurr. events","wiederh.Termine" },
1165{ "completed to-dos","erledigte Todos" }, 1165{ "completed to-dos","erledigte Todos" },
1166{ "events","Termine" }, 1166{ "events","Termine" },
1167{ "todos","Todos" }, 1167{ "todos","Todos" },
1168{ "journals","Journale" }, 1168{ "journals","Journale" },
1169{ "public","öffentl." }, 1169{ "public","öffentl." },
1170{ "private","privat" }, 1170{ "private","privat" },
1171{ "confidential","vertraul." }, 1171{ "confidential","vertraul." },
1172{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" }, 1172{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Untertodos.\nAlle erledigten Untertodos\nwerden auch gelöscht!" },
1173{ "Yesterday","Gestern" }, 1173{ "Yesterday","Gestern" },
1174{ "Day after tomorrow","Übermorgen" }, 1174{ "Day after tomorrow","Übermorgen" },
1175{ "Tomorrow","Morgen" }, 1175{ "Tomorrow","Morgen" },
1176{ "Day before yesterday","Vorgestern" }, 1176{ "Day before yesterday","Vorgestern" },
1177{ "Size %1","Größe %1" }, 1177{ "Size %1","Größe %1" },
1178{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1178{ "New Agendasize: %1","Neue Agendagröße: %1" },
1179{ " (%1 y.)"," (%1 J.)" }, 1179{ " (%1 y.)"," (%1 J.)" },
1180{ "Allday:","Ganztägig:" }, 1180{ "Allday:","Ganztägig:" },
1181{ "compl.todos","erled.Todos" }, 1181{ "compl.todos","erled.Todos" },
1182{ "Day view","Tagesansicht" }, 1182{ "Day view","Tagesansicht" },
1183{ "Next days","Nächste Tage" }, 1183{ "Next days","Nächste Tage" },
1184{ "Next week","Nächste Woche" }, 1184{ "Next week","Nächste Woche" },
1185{ "Next two weeks","Nächste zwei Wochen" }, 1185{ "Next two weeks","Nächste zwei Wochen" },
1186{ "This month","Dieser Monat" }, 1186{ "This month","Dieser Monat" },
1187{ "Journal view","Journal" }, 1187{ "Journal view","Journal" },
1188{ "Display all opened","Zeige alle geöffnet" }, 1188{ "Display all opened","Zeige alle geöffnet" },
1189{ "Display all closed","Zeige alle geschlossen" }, 1189{ "Display all closed","Zeige alle geschlossen" },
1190{ "Display all flat","Zeige alle flach" }, 1190{ "Display all flat","Zeige alle flach" },
1191{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1191{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1192{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1192{ "Default todo done color:","Standard Todo erledigt Farbe" },
1193{ "Select week %1-%2","Wähle Woche %1-%2" }, 1193{ "Select week %1-%2","Wähle Woche %1-%2" },
1194{ "Select Week","Wähle Woche" }, 1194{ "Select Week","Wähle Woche" },
1195{ "Set alarm...","Setze Alarm..." }, 1195{ "Set alarm...","Setze Alarm..." },
1196{ "Set Alarm!","Setze Alarm!" }, 1196{ "Set Alarm!","Setze Alarm!" },
1197{ "Changed alarm for %1 items","Alarm für %1 Items geändert" }, 1197{ "Changed alarm for %1 items","Alarm für %1 Items geändert" },
1198{ " and "," und " }, 1198{ " and "," und " },
1199{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, 1199{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1200{ "Mail to selected","Mail an Ausgewählte" }, 1200{ "Mail to selected","Mail an Ausgewählte" },
1201{ "Mail to all","Mail an Alle" }, 1201{ "Mail to all","Mail an Alle" },
1202{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, 1202{ "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" },
1203{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, 1203{ "Set reminder ON with offset to:","Alarm AN mit Offset auf:" },
1204{ " on"," am" }, 1204{ " on"," am" },
1205{ " completed on "," erledigt am " }, 1205{ " completed on "," erledigt am " },
1206{ "Save as Event template","Speichere als Vorlage" }, 1206{ "Save as Event template","Speichere als Vorlage" },
1207{ "Load Event template","Lade Termin Vorlage" }, 1207{ "Load Event template","Lade Termin Vorlage" },
1208{ "Save as Journal template","Speichere als Journal Vorlage" }, 1208{ "Save as Journal template","Speichere als Journal Vorlage" },
1209{ "Insert Journal template","Füge Journal Vorlage ein" }, 1209{ "Insert Journal template","Füge Journal Vorlage ein" },
1210{ "Sub todos:<br>","Unter-Todos:<br>" }, 1210{ "Sub todos:<br>","Unter-Todos:<br>" },
1211{ "Parent todo:<br>","Über-Todo:<br>" }, 1211{ "Parent todo:<br>","Über-Todo:<br>" },
1212{ "Set current as color category","Setze Gewählte als Farbkategorie" }, 1212{ "Set current as color category","Setze Gewählte als Farbkategorie" },
1213{ " completed"," erledigt" }, 1213{ " completed"," erledigt" },
1214{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" }, 1214{ "(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!","(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi basiert auf KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) und das KDE Team.\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.pi-sync.info --- www.korganizer.org\nBesonderen Dank an Michael und Ben\nfür intensives Testen!" },
1215{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 1215{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
1216{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 1216{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
1217{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 1217{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
1218{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 1218{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
1219{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 1219{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
1220{ "Error","Fehler" }, 1220{ "Error","Fehler" },
1221{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 1221{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
1222{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 1222{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
1223{ "Warning","Warnung" }, 1223{ "Warning","Warnung" },
1224{ "Select week number","Wähle Wochen Nummer" }, 1224{ "Select week number","Wähle Wochen Nummer" },
1225{ "Februar","Februar" }, 1225{ "Februar","Februar" },
1226{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, 1226{ "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" },
1227{ "W","W" }, 1227{ "W","W" },
1228{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, 1228{ "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" },
1229{ "T: %1","T: %1" }, 1229{ "T: %1","T: %1" },
1230{ "Start: ","Start: " }, 1230{ "Start: ","Start: " },
1231{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 1231{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
1232{ "Password for remote access:","Passwort für fernen Zugriff:" }, 1232{ "Password for remote access:","Passwort für fernen Zugriff:" },
1233{ "Remote IP address:","Ferne IP Adresse:" }, 1233{ "Remote IP address:","Ferne IP Adresse:" },
1234{ "Remote port number:","Ferne Port Nummer:" }, 1234{ "Remote port number:","Ferne Port Nummer:" },
1235{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 1235{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
1236{ "Remote from: ","Fern von: " }, 1236{ "Remote from: ","Fern von: " },
1237{ "Local from: ","Lokal von: " }, 1237{ "Local from: ","Lokal von: " },
1238{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 1238{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
1239{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 1239{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
1240{ "Write back","Schreibe zurück" }, 1240{ "Write back","Schreibe zurück" },
1241{ "KO/Pi Synchronization","KO/Pi Synchronisation" }, 1241{ "KO/Pi Synchronization","KO/Pi Synchronisation" },
1242{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 1242{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
1243{ "Received sync request","Sync Anfrage erhalten" }, 1243{ "Received sync request","Sync Anfrage erhalten" },
1244{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 1244{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
1245{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 1245{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
1246{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 1246{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
1247{ "Sending file...","Sende Datei..." }, 1247{ "Sending file...","Sende Datei..." },
1248{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 1248{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
1249{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 1249{ "Receiving synced file...","Gesyncte Daten erhalten..." },
1250{ "Received %1 bytes","%1 Bytes erhalten" }, 1250{ "Received %1 bytes","%1 Bytes erhalten" },
1251{ "Writing file to disk...","Speichere Datei..." }, 1251{ "Writing file to disk...","Speichere Datei..." },
1252{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 1252{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
1253{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 1253{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
1254{ "Synchronize!","Synchronisiere!" }, 1254{ "Synchronize!","Synchronisiere!" },
1255{ "High clock skew!","Großer Uhrzeitunterschied!" }, 1255{ "High clock skew!","Großer Uhrzeitunterschied!" },
1256{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 1256{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
1257{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 1257{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
1258{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, 1258{ "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." },
1259{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, 1259{ "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" },
1260{ "List week view","Listenwochenansicht" }, 1260{ "List week view","Listenwochenansicht" },
1261{ "List week","Listenwochenansicht" }, 1261{ "List week","Listenwochenansicht" },
1262{ "Next Week","Nächste Woche" }, 1262{ "Next Week","Nächste Woche" },
1263{ "Previous Week","Vorherige Woche" }, 1263{ "Previous Week","Vorherige Woche" },
1264{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." }, 1264{ "No items were found matching\nyour search expression.\nUse the wildcard characters\n'*' and '?' where needed.","Keine Einträge gefunden die\ndem Suchausdruck entsprechen.\nBenutze Platzhalter Zeichen\n'*' und '?' wo benötigt." },
1265{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, 1265{ "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" },
1266{ "Details","Details" }, 1266{ "Details","Details" },
1267{ "Created time","Erstellt Zeit" }, 1267{ "Created time","Erstellt Zeit" },
1268{ "Last modified time","Geändert Zeit" }, 1268{ "Last modified time","Geändert Zeit" },
1269{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, 1269{ "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" },
1270{ "View Options","Anzeige Optionen" }, 1270{ "View Options","Anzeige Optionen" },
1271{ "<b>Created: ","<b>Erstellt am: " }, 1271{ "<b>Created: ","<b>Erstellt am: " },
1272{ "<b>Last modified: ","<b>Zuletzt geändert am: " }, 1272{ "<b>Last modified: ","<b>Zuletzt geändert am: " },
1273{ "Journal: ","Journal: " }, 1273{ "Journal: ","Journal: " },
1274{ "yearly","jährlich" }, 1274{ "yearly","jährlich" },
1275{ "(%1) ","%1-" }, 1275{ "(%1) ","%1-" },
1276{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, 1276{ "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" },
1277{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, 1277{ "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" },
1278{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, 1278{ "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" },
1279{ "Summary/Loc.","Titel/Ort" }, 1279{ "Summary/Loc.","Titel/Ort" },
1280{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, 1280{ "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." },
1281{ "Week Number","Wochennummer" }, 1281{ "Week Number","Wochennummer" },
1282{ "Import","Importiere" }, 1282{ "Import","Importiere" },
1283{ "Export","Exportiere" }, 1283{ "Export","Exportiere" },
1284{ "Beam","Beame" }, 1284{ "Beam","Beame" },
1285{ "Export","Exportiere" }, 1285{ "Export","Exportiere" },
1286{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1286{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1287{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1287{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1288{ "Journal/Details...","Journale/Details..." }, 1288{ "Journal/Details...","Journale/Details..." },
1289{ "Agenda View","Agenda Ansicht" }, 1289{ "Agenda View","Agenda Ansicht" },
1290{ "Show current time","Zeige aktuelle Zeit" }, 1290{ "Show current time","Zeige aktuelle Zeit" },
1291{ "Edit new item","Bearbeite neuen Eintrag" }, 1291{ "Edit new item","Bearbeite neuen Eintrag" },
1292{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" }, 1292{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" },
1293{ "There is no next alarm.","Es gibt keinen nächsten Alarm." }, 1293{ "There is no next alarm.","Es gibt keinen nächsten Alarm." },
1294{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, 1294{ "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" },
1295{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, 1295{ "The next alarm is in:\n","Der nächste Alarm ist in:\n" },
1296{ "%1 days\n","%1 Tagen\n" }, 1296{ "%1 days\n","%1 Tagen\n" },
1297{ "1 day\n","1 Tag\n" }, 1297{ "1 day\n","1 Tag\n" },
1298{ "%1 hours\n","%1 Stunden\n" }, 1298{ "%1 hours\n","%1 Stunden\n" },
1299{ "1 hour\n","1 Stunde\n" }, 1299{ "1 hour\n","1 Stunde\n" },
1300{ "%1 minutes\n","%1 Minuten\n" }, 1300{ "%1 minutes\n","%1 Minuten\n" },
1301{ "1 minute\n","1 Minute\n" }, 1301{ "1 minute\n","1 Minute\n" },
1302{ "Only one toolbar","Nur eine Toolbar" }, 1302{ "Only one toolbar","Nur eine Toolbar" },
1303{ "Print","Drucke" }, 1303{ "Print","Drucke" },
1304{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." }, 1304{ "Print selected event / todo...","Drucke ausgewählten Termin / Todo..." },
1305{ "There is nothing selected!","Es ist nichts ausgewählt!" }, 1305{ "There is nothing selected!","Es ist nichts ausgewählt!" },
1306{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " }, 1306{ "\n\nDo you really want to print this item?","\n\nMöchten Sie wirklich diesen Eintrag ausdrucken? " },
1307{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" }, 1307{ "KO/Pi Print Confirmation","KO/Pi Druckbestätigung" },
1308{ "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" }, 1308{ "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" },
1309{ "KO/Pi Printout","KO/Pi Ausdruck" }, 1309{ "KO/Pi Printout","KO/Pi Ausdruck" },
1310{ "Print unscaled","Drucke unskaliert" }, 1310{ "Print unscaled","Drucke unskaliert" },
1311{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." }, 1311{ "Print scaled down to fit one page","Drucke runterskaliert um auf eine Seite zu passen." },
1312{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." }, 1312{ "Print scaled up/down to fit one page","Drucke hoch/runterskaliert um genau auf eine Seite zu passen." },
1313{ "Printout Mode","Druck Modus" }, 1313{ "Printout Mode","Druck Modus" },
1314{ "Filter menu icon","Filtermenu Icon" }, 1314{ "Filter menu icon","Filtermenu Icon" },
1315{ "<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" }, 1315{ "<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" },
1316{ "<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" }, 1316{ "<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" },
1317{ "%1d","%1t" }, 1317{ "%1d","%1t" },
1318{ "%1h","%1std" }, 1318{ "%1h","%1std" },
1319{ "%1min","%1min" }, 1319{ "%1min","%1min" },
1320{ "( %1 before )","( %1 vorher )" }, 1320{ "( %1 before )","( %1 vorher )" },
1321{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" }, 1321{ "The next alarm is in\nless than one minute!","Der nächste Alarm kommt in\nweniger als einer Minute!" },
1322{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" }, 1322{ "\nThe internal alarm notification is disabled!\n","\nDie interne Alarmbenachrichtigung ist ausgeschaltet!\n" },
1323{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." }, 1323{ "Enable it in the settings menu, TAB alarm.","Schalten Sie sie an im Menu Einstellungen, TAB Alarm." },
1324{ "Show Sync Events","Zeige Sync-Ereignisse" }, 1324{ "Show Sync Events","Zeige Sync-Ereignisse" },
1325{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" }, 1325{ "Use short date in WN+Event view","Zeige Kurzdatum in WN+Terminanzeige" },
1326{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" }, 1326{ "Number of max.displayed todo prios:","Anzahl max.angezeigter Todo-Prios:" },
1327{ " on "," am " }, 1327{ " on "," am " },
1328{ "On: ","Am: " }, 1328{ "On: ","Am: " },
1329{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" }, 1329{ "<i>The recurrence is computed from the start datetime!</i>","<i>Die Wiederholung wird vom Startwert aus berechnet!</i>" },
1330{ "Start/Stop todo...","Starte/Stoppe Todo..." }, 1330{ "Start/Stop todo...","Starte/Stoppe Todo..." },
1331{ "Color for running todos:","Farbe für laufende Todos:" }, 1331{ "Color for running todos:","Farbe für laufende Todos:" },
1332{ "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?" }, 1332{ "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?" },
1333{ "Todo is started","Todo ist gestartet" }, 1333{ "Todo is started","Todo ist gestartet" },
1334{ "Stop todo","Stoppe Todo" }, 1334{ "Stop todo","Stoppe Todo" },
1335{ "Todo is stopped","Todo ist gestoppt" }, 1335{ "Todo is stopped","Todo ist gestoppt" },
1336{ "Start todo","Starte Todo" }, 1336{ "Start todo","Starte Todo" },
1337{ "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?" }, 1337{ "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?" },
1338{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" }, 1338{ "The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?","Das Todo\n%1\nwird geklont!\nEs hat Untertodos!\nMöchten Sie alle\nUntertodos auch klonen?" },
1339{ "Todo has subtodos","Todo hat Untertodos" }, 1339{ "Todo has subtodos","Todo hat Untertodos" },
1340{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" }, 1340{ "Block popup until mouse button release","Sperre Popup bis Mausknopf losgelassen" },
1341{ "Colors","Farben" }, 1341{ "Colors","Farben" },
1342{ "Click on new parent item","Klicke auf neues Übertodo" }, 1342{ "Click on new parent item","Klicke auf neues Übertodo" },
1343{ "Reparenting aborted!","Übertodo setzen abgebrochen" }, 1343{ "Reparenting aborted!","Übertodo setzen abgebrochen" },
1344{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" }, 1344{ "Cannot move Todo to itself\nor a child of itself","Kann nicht Todo auf\nsich selbst oder\nein Untertodo verschieben" },
1345{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" }, 1345{ "Recursive reparenting not possible!","Rekursives Verschieben nicht möglich" },
1346{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" }, 1346{ "Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)","Entferne alle erledigten Todos?\n(Erledigte wiederholende Todos\nwerden nicht gelöscht!)" },
1347{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 1347{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
1348{ "times","Zeiten" }, 1348{ "times","Zeiten" },
1349{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" }, 1349{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" },
1350{ "Backup enabled","Backup angeschaltet" }, 1350{ "Backup enabled","Backup angeschaltet" },
1351{ "Use standard backup dir","Standard Backupverzeichnis" }, 1351{ "Use standard backup dir","Standard Backupverzeichnis" },
1352{ "Number of Backups:","Anzahl der Backups" }, 1352{ "Number of Backups:","Anzahl der Backups" },
1353{ "Make backup every ","Mache ein Backup alle " }, 1353{ "Make backup every ","Mache ein Backup alle " },
1354{ " days"," Tage" }, 1354{ " days"," Tage" },
1355{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." }, 1355{ "Creating backup ... please wait ...","Erstelle Backup ... bitte warten ..." },
1356{ "Backup Failed!","Backup Problem!" }, 1356{ "Backup Failed!","Backup Problem!" },
1357{ "Try again now","Versuche jetzt nochmal" }, 1357{ "Try again now","Versuche jetzt nochmal" },
1358{ "Try again later","Versuche später nochmal" }, 1358{ "Try again later","Versuche später nochmal" },
1359{ "Try again tomorrow","Versuche morgen nochmal" }, 1359{ "Try again tomorrow","Versuche morgen nochmal" },
1360{ "Disable backup","Schalte Backup ab" }, 1360{ "Disable backup","Schalte Backup ab" },
1361{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 1361{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
1362{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 1362{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
1363{ "Choose action","Wähle Aktion" }, 1363{ "Choose action","Wähle Aktion" },
1364{ "Comment for todo:","Kommentar zum Todo:" }, 1364{ "Comment for todo:","Kommentar zum Todo:" },
1365{ "Stop+note","Stop+Notiz" }, 1365{ "Stop+note","Stop+Notiz" },
1366{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" }, 1366{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
1367{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" }, 1367{ "KO/Pi: Missing alarms!","KO/Pi: Verpasste Alarme!" },
1368{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" }, 1368{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" },
1369{ "Print complete list...","Drucke komplette Liste..." }, 1369{ "Print complete list...","Drucke komplette Liste..." },
1370{ "Hide all selected","Verstecke Ausgewählte" }, 1370{ "Hide all selected","Verstecke Ausgewählte" },
1371{ "Add items","hinzufügen" }, 1371{ "Add items","hinzufügen" },
1372{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" }, 1372{ "One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?","Ein (oder mehrere) ausgewähltes\nTodo hat Untertodos!\nMöchten Sie der Auswahlliste\nalle Untertodos von allen\nausgewählten Todos hinzufügen?" },
1373{ "Print List View...","Drucke Listenansicht..." }, 1373{ "Print List View...","Drucke Listenansicht..." },
1374{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." }, 1374{ "You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.","Sie können die <b>Listenansicht</b> und die Listenansicht im <b>Suchdialog</b> ausdrucken! Um das zu machen gehen Sie bitte zur <b>Listenansicht</b> oder zum <b>Suchdialog</b>. Rechtsklicken Sie auf die Liste. Wählen Sie im Popupmenu den Eintrag <b>Drucke komplette Liste</b>. Das druckt die Liste so, wie man sie sieht. Sie können Listeneinträge entfernen ohne die korrespondierenden Ereignisse/Todos zu löschen! Selektieren sie einfach alle Einträge, die sie nicht ausdrucken möchten. Dann Rechtsklicken Sie auf einen Eintrag und wählen <b>Verstecke Selektierte</b>. Danach können Sie die Liste ohne diese Einträge ausdrucken." },
1375{ "Configure KO/Pi...","Konfiguriere KO/Pi..." }, 1375{ "Configure KO/Pi...","Konfiguriere KO/Pi..." },
1376{ "Global Settings...","Globale Einstellungen..." }, 1376{ "Global Settings...","Globale Einstellungen..." },
1377{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" }, 1377{ "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" },
1378{ "(disabled)","(abgeschaltet)" }, 1378{ "(disabled)","(abgeschaltet)" },
1379{ "New Calendar","Neuer Kalender" }, 1379{ "New Calendar","Neuer Kalender" },
1380{ "Calendar","Kalender" }, 1380{ "Calendar","Kalender" },
1381{ "Filter selector","Filterauswahl" }, 1381{ "Filter selector","Filterauswahl" },
1382{ "Filtermenu","Filtermenu" }, 1382{ "Filtermenu","Filtermenu" },
1383{ "Toggle Fullscreen","Vollbild umschalten" }, 1383{ "Toggle Fullscreen","Vollbild umschalten" },
1384{ "Toggle Resource View","Resourcenansicht umschalten" }, 1384{ "Toggle Resource View","Resourcenansicht umschalten" },
1385{ "Storage HowTo...","Speicherort HowTo..." }, 1385{ "Storage HowTo...","Speicherort HowTo..." },
1386{ "Timetracking HowTo...","Timetracking HowTo..." }, 1386{ "Timetracking HowTo...","Timetracking HowTo..." },
1387{ "Juni","Juni" }, 1387{ "Juni","Juni" },
1388{ "Juli","Juli" }, 1388{ "Juli","Juli" },
1389{ "ToDo:","ToDo:" }, 1389{ "ToDo:","ToDo:" },
1390{ "Set Calendar","Setze Kalender" }, 1390{ "Set Calendar","Setze Kalender" },
1391{ "Todo: %1","Todo: %1" }, 1391{ "Todo: %1","Todo: %1" },
1392{ ": (Prio ",": (Prio " }, 1392{ ": (Prio ",": (Prio " },
1393{ "Todos","Todos" }, 1393{ "Todos","Todos" },
1394{ "Todo Viewer","Todo Anzeige" }, 1394{ "Todo Viewer","Todo Anzeige" },
1395{ "Todo ","Todo " }, 1395{ "Todo ","Todo " },
1396{ " Calendar \n Resource "," Kalender \n Resource " }, 1396{ " Calendar \n Resource "," Kalender \n Resource " },
1397{ " Color "," Farbe " }, 1397{ " Color "," Farbe " },
1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, 1398{ "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" },
1399{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, 1399{ "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" },
1400{ "Add new Calendar","Füge Kalender hinzu" }, 1400{ "Add new Calendar","Füge Kalender hinzu" },
1401{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, 1401{ "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" },
1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, 1402{ "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" },
1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, 1403{ "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" },
1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, 1404{ "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." },
1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, 1405{ "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" },
1406{ "Global application font for all apps:","Globale Schriftart:" }, 1406{ "Global application font for all apps:","Globale Schriftart:" },
1407{ "Application Font","Applikationsschriftart" }, 1407{ "Application Font","Applikationsschriftart" },
1408{ "Kx/Pi","Kx/Pi" }, 1408{ "Kx/Pi","Kx/Pi" },
1409{ "Backup","Backup" }, 1409{ "Backup","Backup" },
1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1410{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, 1411{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" },
1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1413{ "Choose Color","Wähle Farbe" }, 1413{ "Choose Color","Wähle Farbe" },
1414{ " OK "," OK " }, 1414{ " OK "," OK " },
1415{ " Cancel "," Abbrechen " }, 1415{ " Cancel "," Abbrechen " },
1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, 1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" }, 1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1418{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1418{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" }, 1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, 1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" },
1421{ "%1\nis running!","%1\nist am Laufen!" }, 1421{ "%1\nis running!","%1\nist am Laufen!" },
1422{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1422{ "Additional Comment:","Zusätzlicher Kommentar:" },
1423{ "Stop and save","Stopp und Speichern" }, 1423{ "Stop and save","Stopp und Speichern" },
1424{ "Continue running","Weiter laufen lassen" }, 1424{ "Continue running","Weiter laufen lassen" },
1425{ "Stop - do not save","Stopp - nicht Speichern" }, 1425{ "Stop - do not save","Stopp - nicht Speichern" },
1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, 1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" },
1427{ "Time mismatch!","Zeiten stimmen nicht!" }, 1427{ "Time mismatch!","Zeiten stimmen nicht!" },
1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, 1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" },
1429{ "Yes, stop todo","Ja, stoppe Todo" }, 1429{ "Yes, stop todo","Ja, stoppe Todo" },
1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, 1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" },
1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, 1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" },
1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, 1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." },
1433{ "Spouse","Ehegatte" }, 1433{ "Spouse","Ehegatte" },
1434{ "Notes","Notizen" }, 1434{ "Notes","Notizen" },
1435{ "Messanger","Messanger" }, 1435{ "Messanger","Messanger" },
1436{ "Assistant","Assistent" }, 1436{ "Assistant","Assistent" },
1437{ "Manager","Manager" }, 1437{ "Manager","Manager" },
1438{ "Secrecy","Sichtbar" }, 1438{ "Secrecy","Sichtbar" },
1439{ "male","männlich" }, 1439{ "male","männlich" },
1440{ "female","weiblich" }, 1440{ "female","weiblich" },
1441{ "Hide!","Verbergen!" }, 1441{ "Hide!","Verbergen!" },
1442{ "Show!","Anzeigen!" }, 1442{ "Show!","Anzeigen!" },
1443{ "Details","Details" }, 1443{ "Details","Details" },
1444{ "Profession","Beruf" }, 1444{ "Profession","Beruf" },
1445{ "Children","Kinder" }, 1445{ "Children","Kinder" },
1446{ "Department","Abteilung" }, 1446{ "Department","Abteilung" },
1447{ "Backup cancelled","Backup abgebrochen" }, 1447{ "Backup cancelled","Backup abgebrochen" },
1448{ "Backup globally disabled","Backup global abgeschaltet" }, 1448{ "Backup globally disabled","Backup global abgeschaltet" },
1449{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1449{ "Backup succesfully finished","Backup erfolgreich beendet" },
1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, 1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" },
1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, 1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" },
1452{ "Birthdays","Geburtstage" }, 1452{ "Birthdays","Geburtstage" },
1453{ "KO/Pi import information!","KO/Pi Import Information!" }, 1453{ "KO/Pi import information!","KO/Pi Import Information!" },
1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, 1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" },
1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, 1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" },
1457{ "Reload","Neu laden" }, 1457{ "Reload","Neu laden" },
1458{ "Timezone settings","Zeitzoneneinstellung" }, 1458{ "Timezone settings","Zeitzoneneinstellung" },
1459{ "Title: ","Titel: " }, 1459{ "Title: ","Titel: " },
1460{ "Journal from: ","Journal vom: " }, 1460{ "Journal from: ","Journal vom: " },
1461{ "Journal: %1 from ","Journal: %1 vom " }, 1461{ "Journal: %1 from ","Journal: %1 vom " },
1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, 1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" },
1463{ "Selected Item","Ausgewähltes Item" }, 1463{ "Selected Item","Ausgewähltes Item" },
1464{ "Select Date...","Wähle Datum..." }, 1464{ "Select Date...","Wähle Datum..." },
1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, 1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" },
1466{ "Change category list now!","Ändere Kategorieliste jetzt!" }, 1466{ "Change category list now!","Ändere Kategorieliste jetzt!" },
1467{ "Edit category list...","Ändere Kategorieliste..." }, 1467{ "Edit category list...","Ändere Kategorieliste..." },
1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, 1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" },
1469{ "Filepath: ","Dateipfad: " }, 1469{ "Filepath: ","Dateipfad: " },
1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, 1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" },
1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, 1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" },
1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" }, 1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" },
1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, 1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" },
1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, 1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" },
1475{ "Loading of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, 1475{ "Loading of calendar(s) failed","Laden von Kalendern fehlgeschlagen" },
1476{ "Alarm Options","Alarm Einstellungen" }, 1476{ "Alarm Options","Alarm Einstellungen" },
1477{ "Delete selected...","Lösche Ausgewählte..." }, 1477{ "Delete selected...","Lösche Ausgewählte..." },
1478{ "None","Nichts" }, 1478{ "None","Nichts" },
1479{ "Selection","Auswahl" }, 1479{ "Selection","Auswahl" },
1480{ "Set categories","Setze Kategorien" }, 1480{ "Set categories","Setze Kategorien" },
1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, 1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" },
1482{ "Reset","Neu setzen" }, 1482{ "Reset","Neu setzen" },
1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, 1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" },
1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, 1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" },
1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, 1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" },
1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, 1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" },
1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
1488{ "Edit","Edit" }, 1488{ "Edit","Edit" },
1489{ "Last Modified","Zuletzt geändert" }, 1489{ "Last Modified","Zuletzt geändert" },
1490{ "Journal viewer","Journal Anzeige" }, 1490{ "Journal viewer","Journal Anzeige" },
1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, 1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." },
1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, 1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." },
1493{ "Hide Completed","Verstecke erledigte Todos" }, 1493{ "Hide Completed","Verstecke erledigte Todos" },
1494{ "Show not Running","Zeige nicht Laufende" }, 1494{ "Show not Running","Zeige nicht Laufende" },
1495{ "Click to add new Todo","Klick für neues Todo!" }, 1495{ "Click to add new Todo","Klick für neues Todo!" },
1496{ "Show next conflict for","Zeige nächsten Konflikt für" }, 1496{ "Show next conflict for","Zeige nächsten Konflikt für" },
1497{ "All events","Alle Termine" }, 1497{ "All events","Alle Termine" },
1498{ "Allday events","Ganztagestermine" }, 1498{ "Allday events","Ganztagestermine" },
1499{ "Events with time","Termine mit Zeit" }, 1499{ "Events with time","Termine mit Zeit" },
1500{ "No conflict found","Kein Konflikt gefunden" }, 1500{ "No conflict found","Kein Konflikt gefunden" },
1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, 1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, 1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " },
1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, 1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" },
1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, 1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" },
1505{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" }, 1505{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" },
1506{ "Show date","Zeige Datum" }, 1506{ "Show date","Zeige Datum" },
1507{ "No problem!","Null Problemo!" }, 1507{ "No problem!","Null Problemo!" },
1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
1513{ "Pi-Sync Error","Pi-Sync Fehler" }, 1513{ "Pi-Sync Error","Pi-Sync Fehler" },
1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
1520{ "Receiving file from remote...","Empfange entfernte Datei..." }, 1520{ "Receiving file from remote...","Empfange entfernte Datei..." },
1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
1526{ "Writing back file ...","Schreibe Datei zurück..." }, 1526{ "Writing back file ...","Schreibe Datei zurück..." },
1527{ "Sending back file ...","Sende Datei zurück..." }, 1527{ "Sending back file ...","Sende Datei zurück..." },
1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" }, 1528{ "Eeek, there I am ticklish!","Hihi, da bin ich kitzlig!" },
1529{ "Created","Angelegt" }, 1529{ "Created","Angelegt" },
1530{ "Last Modified Sub","Zuletzt geändertes Sub" }, 1530{ "Last Modified Sub","Zuletzt geändertes Sub" },
1531{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" }, 1531{ "Checking conflicts ... please wait","Überprüfe Konflikte ... bitte warten" },
1532{ "Show times on two lines","Zeige Zeiten auf zwei Zeilen" }, 1532{ "Show times on two lines","Zeige Zeiten auf zwei Zeilen" },
1533{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" }, 1533{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
1534{ "Duration","Dauer" }, 1534{ "Duration","Dauer" },
1535{ " day"," Tag" }, 1535{ " day"," Tag" },
1536{ "Click this button to display all todos in a <b>flat</b> hierarchy","Klicke diesen Knopf um alle Todos in einer <b>flachen</b> Hierarchie darzustellen" }, 1536{ "Click this button to display all todos in a <b>flat</b> hierarchy","Klicke diesen Knopf um alle Todos in einer <b>flachen</b> Hierarchie darzustellen" },
1537{ "Click this button to display all todos <b>openend</b>","Klicke diesen Knopf um alle Todos <b>geöffnet</b> darzustellen" }, 1537{ "Click this button to display all todos <b>openend</b>","Klicke diesen Knopf um alle Todos <b>geöffnet</b> darzustellen" },
1538{ "Click this button to display all todos <b>closed</b>","Klicke diesen Knopf um alle Todos <b>geschlossen</b> darzustellen" }, 1538{ "Click this button to display all todos <b>closed</b>","Klicke diesen Knopf um alle Todos <b>geschlossen</b> darzustellen" },
1539{ "Click this button to toggle show/hide <b>running</b> todos","Klicke diesen Knopf um <b>zeige Laufende</b> umzuschalten" }, 1539{ "Click this button to toggle show/hide <b>running</b> todos","Klicke diesen Knopf um <b>zeige Laufende</b> umzuschalten" },
1540{ "Click this button to toggle show/hide <b>completed</b> todos","Klicke diesen Knopf um <b>zeige Erledigte</b> umzuschalten" }, 1540{ "Click this button to toggle show/hide <b>completed</b> todos","Klicke diesen Knopf um <b>zeige Erledigte</b> umzuschalten" },
1541{ "Click this button to add a new subtodo to the currently selected todo","Klicke diesen Knopf um ein Untertodo zu dem gerade selektierten Todo hinzuzufügen" }, 1541{ "Click this button to add a new subtodo to the currently selected todo","Klicke diesen Knopf um ein Untertodo zu dem gerade selektierten Todo hinzuzufügen" },
1542{ "In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.","In dieser Spalte kann man einen <b>Kalender auf sichtbar schalten</b>. Wenn ein Kalender nicht sichtbar ist werden seine Einträge nicht in den Ansichten angezeigt. Man kann Einträge hinzufügen und laden/speichern wie gewöhnlich." }, 1542{ "In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.","In dieser Spalte kann man einen <b>Kalender auf sichtbar schalten</b>. Wenn ein Kalender nicht sichtbar ist werden seine Einträge nicht in den Ansichten angezeigt. Man kann Einträge hinzufügen und laden/speichern wie gewöhnlich." },
1543{ "In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.","In dieser Spalte wird der <b>Name des Kalenders</b> angezeigt. Wenn Sie auf den Namen klicken wird Information über die Kalenderdatei angezeigt. Wenn die Datei beim Start nicht geladen wurde können Sie hier erneut versuchen sie zu laden." }, 1543{ "In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.","In dieser Spalte wird der <b>Name des Kalenders</b> angezeigt. Wenn Sie auf den Namen klicken wird Information über die Kalenderdatei angezeigt. Wenn die Datei beim Start nicht geladen wurde können Sie hier erneut versuchen sie zu laden." },
1544{ "In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as "do not use". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.","In dieser Spalte können die <b>Alarme eines Kalenders alle zusammen abgeschaltet werden</b>. Die Alarmdaten im Kalender selbst werden nicht verändert, es werde die Alarme intern als "nicht beachten" markiert. Nützlich wenn Sie den Kalender einer anderen Person laden aber nicht über dessen Alarme unterrichtet werden wollen." }, 1544{ "In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as "do not use". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.","In dieser Spalte können die <b>Alarme eines Kalenders alle zusammen abgeschaltet werden</b>. Die Alarmdaten im Kalender selbst werden nicht verändert, es werde die Alarme intern als "nicht beachten" markiert. Nützlich wenn Sie den Kalender einer anderen Person laden aber nicht über dessen Alarme unterrichtet werden wollen." },
1545{ "In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.","In dieser Spalte können Sie einen <b>Kalender und alle Einträge auf schreibgeschützt setzen</b>. Einträge eines schreibgeschützten Kalenders können nicht verändert werden und es können keine Einträge zum Kalender hinzugefügt werden. Wenn Sie die Einstellung eines Kalenders in dieser Spalte auf schreibgeschützt setzen werden alle Daten automatisch abgespeichert, da die Daten eines schreibgeschützten Kalenders später nicht mehr gespeichert werden." }, 1545{ "In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.","In dieser Spalte können Sie einen <b>Kalender und alle Einträge auf schreibgeschützt setzen</b>. Einträge eines schreibgeschützten Kalenders können nicht verändert werden und es können keine Einträge zum Kalender hinzugefügt werden. Wenn Sie die Einstellung eines Kalenders in dieser Spalte auf schreibgeschützt setzen werden alle Daten automatisch abgespeichert, da die Daten eines schreibgeschützten Kalenders später nicht mehr gespeichert werden." },
1546{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." }, 1546{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." },
1547{ "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" }, 1547{ "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" },
1548{ "Error saving data","Fehler beim Abspeichern" }, 1548{ "Error saving data","Fehler beim Abspeichern" },
1549{ "Calendar(s) not saved:","Nicht gespeicherte Kalender:" }, 1549{ "Calendar(s) not saved:","Nicht gespeicherte Kalender:" },
1550{ "Enable conflict detection","Schalte Konflikterkennung an" }, 1550{ "Enable conflict detection","Schalte Konflikterkennung an" },
1551{ "Filter for the edited event","Filter für den bearbeiteten Termin" }, 1551{ "Filter for the edited event","Filter für den bearbeiteten Termin" },
1552{ "Filter for other events","Filter für die anderen Termine" }, 1552{ "Filter for other events","Filter für die anderen Termine" },
1553{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" }, 1553{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" },
1554{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" }, 1554{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" },
1555{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" }, 1555{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" },
1556{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" }, 1556{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" },
1557{ "Conflict detection","Konflikterkennung" }, 1557{ "Conflict detection","Konflikterkennung" },
1558{ "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" }, 1558{ "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" },
1559{ "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." }, 1559{ "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." },
1560{ "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" }, 1560{ "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" },
1561{ "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." }, 1561{ "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." },
1562{ " Yes, close "," Ja, beenden " }, 1562{ " Yes, close "," Ja, beenden " },
1563{ "Export All Data","Exportiere alle Daten" }, 1563{ "Export All Data","Exportiere alle Daten" },
1564{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" }, 1564{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" },
1565{ "<p><b>Duration:</b> %1 days</p>","<p><b>Dauer:</b> %1 Tage</p>" }, 1565{ "<p><b>Duration:</b> %1 days</p>","<p><b>Dauer:</b> %1 Tage</p>" },
1566{ " (Duration: %1 days)"," (Dauer: %1 Tage)" }, 1566{ " (Duration: %1 days)"," (Dauer: %1 Tage)" },
1567{ "Autosave enabled!","Auto-Speichern angeschaltet!" }, 1567{ "Autosave enabled!","Auto-Speichern angeschaltet!" },
1568{ "Autosave disabled! Save timer stopped!","Auto-Speichern ausgeschaltet! Speicher Timer gestoppt!" }, 1568{ "Autosave disabled! Save timer stopped!","Auto-Speichern ausgeschaltet! Speicher Timer gestoppt!" },
1569{ "Autosave disabled!","Auto-Speichern ist ausgeschaltet!" }, 1569{ "Autosave disabled!","Auto-Speichern ist ausgeschaltet!" },
1570{ "Yes, Save!","Ja, Speichern!" }, 1570{ "Yes, Save!","Ja, Speichern!" },
1571{ "Calendar is modified\nbut Autosave is disabled!\nDo you want\nto save the data?","Der Kalender wurde verändert,\naber Auto-Speichern ist\nabgeschaltet. Möchten Sie\ndie Daten speichern?" }, 1571{ "Calendar is modified\nbut Autosave is disabled!\nDo you want\nto save the data?","Der Kalender wurde verändert,\naber Auto-Speichern ist\nabgeschaltet. Möchten Sie\ndie Daten speichern?" },
1572{ "<p><b>C+ctrl</b>: Dis/enable automatic saving</p>\n","<p><b>C+ctrl</b>: Auto-Speichern ab/anschalten</p>\n" }, 1572{ "<p><b>C+ctrl</b>: Dis/enable automatic saving</p>\n","<p><b>C+ctrl</b>: Auto-Speichern ab/anschalten</p>\n" },
1573{ "<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>","<br>Der Kalender enthält<br><b>%1 Termine<br>%2 Todos<br>%3 Journale</b>" }, 1573{ "<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>","<br>Der Kalender enthält<br><b>%1 Termine<br>%2 Todos<br>%3 Journale</b>" },
1574{ "","" }, 1574{ "","" },
1575{ "","" }, 1575{ "","" },
1576{ "","" }, 1576{ "","" },
1577{ "","" }, 1577{ "","" },
1578{ "","" }, 1578{ "","" },
1579{ "","" }, 1579{ "","" },
1580{ "","" }, 1580{ "","" },
1581{ "","" },
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 610aae6..85e9166 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -228,1031 +228,1039 @@ void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
228 case Key_Return: 228 case Key_Return:
229 case Key_Enter: 229 case Key_Enter:
230 { 230 {
231 if ( currentItem() >= 0 ) { 231 if ( currentItem() >= 0 ) {
232 emit doubleClicked( item( currentItem() ) ); 232 emit doubleClicked( item( currentItem() ) );
233 e->accept(); 233 e->accept();
234 } else { 234 } else {
235 e->ignore(); 235 e->ignore();
236 } 236 }
237 } 237 }
238 break; 238 break;
239 case Key_Shift: 239 case Key_Shift:
240 emit shiftDown(); 240 emit shiftDown();
241 break; 241 break;
242 default: 242 default:
243 e->ignore(); 243 e->ignore();
244 break; 244 break;
245 } 245 }
246} 246}
247 247
248void KNoScrollListBox::oneDown() 248void KNoScrollListBox::oneDown()
249{ 249{
250 if ( count () ) { 250 if ( count () ) {
251 if ( ((uint)currentItem()+1) == count () ) { 251 if ( ((uint)currentItem()+1) == count () ) {
252 emit nextCell(); 252 emit nextCell();
253 } else { 253 } else {
254 resetOnFocusIn = false; 254 resetOnFocusIn = false;
255 setCurrentItem((currentItem()+1)%count()); 255 setCurrentItem((currentItem()+1)%count());
256 if(!itemVisible(currentItem())) { 256 if(!itemVisible(currentItem())) {
257 if(currentItem() == 0) { 257 if(currentItem() == 0) {
258 setTopItem(0); 258 setTopItem(0);
259 } else { 259 } else {
260 setTopItem(topItem()+1); 260 setTopItem(topItem()+1);
261 } 261 }
262 } 262 }
263 } 263 }
264 } 264 }
265} 265}
266void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) 266void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e)
267{ 267{
268 switch(e->key()) { 268 switch(e->key()) {
269 case Key_Shift: 269 case Key_Shift:
270 emit shiftUp(); 270 emit shiftUp();
271 break; 271 break;
272 default: 272 default:
273 break; 273 break;
274 } 274 }
275} 275}
276 276
277void KNoScrollListBox::mousePressEvent(QMouseEvent *e) 277void KNoScrollListBox::mousePressEvent(QMouseEvent *e)
278{ 278{
279 QListBox::mousePressEvent(e); 279 QListBox::mousePressEvent(e);
280 280
281 if(e->button() == RightButton) { 281 if(e->button() == RightButton) {
282 emit rightClick(); 282 emit rightClick();
283 } 283 }
284} 284}
285 285
286MonthViewItem::MonthViewItem( Incidence *incidence, const QString & s) 286MonthViewItem::MonthViewItem( Incidence *incidence, const QString & s)
287 : QListBoxItem() 287 : QListBoxItem()
288{ 288{
289 mblockRepaint = true; 289 mblockRepaint = true;
290 isWeekItem = KOPrefs::instance()->mMonthViewWeek; 290 isWeekItem = KOPrefs::instance()->mMonthViewWeek;
291 recycle( incidence, s ); 291 recycle( incidence, s );
292} 292}
293void MonthViewItem::recycle( Incidence *incidence, const QString & s) 293void MonthViewItem::recycle( Incidence *incidence, const QString & s)
294{ 294{
295 mDisplayHighlighted = false; 295 mDisplayHighlighted = false;
296 setText( s ); 296 setText( s );
297 mMultiday = 0; 297 mMultiday = 0;
298 mIncidence = incidence; 298 mIncidence = incidence;
299 mRecur = false; 299 mRecur = false;
300 mAlarm = false; 300 mAlarm = false;
301 mReply = false; 301 mReply = false;
302 mInfo = false; 302 mInfo = false;
303 mdayPos = 0; 303 mdayPos = 0;
304} 304}
305 305
306bool MonthViewItem::setHighlightedFalse() 306bool MonthViewItem::setHighlightedFalse()
307{ 307{
308 if ( !mDisplayHighlighted ) 308 if ( !mDisplayHighlighted )
309 return false; 309 return false;
310 mDisplayHighlighted = false; 310 mDisplayHighlighted = false;
311 return true; 311 return true;
312} 312}
313 313
314bool MonthViewItem::setHighlighted( Incidence * inc ) 314bool MonthViewItem::setHighlighted( Incidence * inc )
315{ 315{
316 if ( inc == mIncidence ) { 316 if ( inc == mIncidence ) {
317 if ( mDisplayHighlighted ) 317 if ( mDisplayHighlighted )
318 return false; 318 return false;
319 mDisplayHighlighted = true; 319 mDisplayHighlighted = true;
320 return true; 320 return true;
321 } else { 321 } else {
322 if ( !mDisplayHighlighted ) 322 if ( !mDisplayHighlighted )
323 return false; 323 return false;
324 mDisplayHighlighted = false; 324 mDisplayHighlighted = false;
325 return true; 325 return true;
326 } 326 }
327 return false; 327 return false;
328} 328}
329void MonthViewItem::paint(QPainter *p) 329void MonthViewItem::paint(QPainter *p)
330{ 330{
331 if ( mblockRepaint || !mIncidence ) { 331 if ( mblockRepaint || !mIncidence ) {
332 return; 332 return;
333 } 333 }
334#if QT_VERSION >= 0x030000 334#if QT_VERSION >= 0x030000
335 bool sel = isSelected(); 335 bool sel = isSelected();
336#else 336#else
337 bool sel = selected(); 337 bool sel = selected();
338#endif 338#endif
339 int heihei = height( listBox () ); 339 int heihei = height( listBox () );
340 int x = 1; 340 int x = 1;
341 if (KOPrefs::instance()->mMonthViewUsesCategoryColor || mDisplayHighlighted || sel ) 341 if (KOPrefs::instance()->mMonthViewUsesCategoryColor || mDisplayHighlighted || sel )
342 { 342 {
343 343
344 p->setBackgroundColor( palette().color( QPalette::Normal, \ 344 p->setBackgroundColor( palette().color( QPalette::Normal, \
345 sel ||mDisplayHighlighted ? QColorGroup::Highlight : QColorGroup::Background ) ); 345 sel ||mDisplayHighlighted ? QColorGroup::Highlight : QColorGroup::Background ) );
346 p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei ); 346 p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei );
347 } 347 }
348 348
349 //int y = 3;//(height() - mRecurPixmap.height()) /2; 349 //int y = 3;//(height() - mRecurPixmap.height()) /2;
350 int size = PIXMAP_SIZE; 350 int size = PIXMAP_SIZE;
351 if ( QApplication::desktop()->width() < 300 ) 351 if ( QApplication::desktop()->width() < 300 )
352 size = 3; 352 size = 3;
353 int y = (heihei - size -1 ) /2; 353 int y = (heihei - size -1 ) /2;
354 354
355 if ( mIncidence->calID() > 1 ) { 355 if ( mIncidence->calID() > 1 ) {
356 p->fillRect ( x, y-2,size,size+4, KOPrefs::instance()->defaultColor( mIncidence->calID() ) ); 356 p->fillRect ( x, y-2,size,size+4, KOPrefs::instance()->defaultColor( mIncidence->calID() ) );
357 p->drawRect ( x, y-2,size,size+4); 357 p->drawRect ( x, y-2,size,size+4);
358 x += size + 1; 358 x += size + 1;
359 } 359 }
360 if ( KOPrefs::instance()->mMonthShowIcons ) { 360 if ( KOPrefs::instance()->mMonthShowIcons ) {
361 if ( mInfo ) { 361 if ( mInfo ) {
362 p->fillRect ( x, y,size,size, Qt::darkGreen ); 362 p->fillRect ( x, y,size,size, Qt::darkGreen );
363 x += size + 1; 363 x += size + 1;
364 } 364 }
365 if ( mRecur ) { 365 if ( mRecur ) {
366 p->fillRect ( x, y,size,size, Qt::blue ); 366 p->fillRect ( x, y,size,size, Qt::blue );
367 x += size + 1; 367 x += size + 1;
368 } 368 }
369 if ( mAlarm ) { 369 if ( mAlarm ) {
370 p->fillRect ( x, y,size,size, Qt::red ); 370 p->fillRect ( x, y,size,size, Qt::red );
371 x += size + 1; 371 x += size + 1;
372 } 372 }
373 if ( mReply ) { 373 if ( mReply ) {
374 p->fillRect ( x, y,size,size, Qt::yellow ); 374 p->fillRect ( x, y,size,size, Qt::yellow );
375 x += size + 1; 375 x += size + 1;
376 } 376 }
377 } 377 }
378 378
379 379
380 380
381 381
382 if ( sel ) p->setPen( Qt::white ); 382 if ( sel ) p->setPen( Qt::white );
383 else p->setPen( palette().color( QPalette::Normal,QColorGroup::Foreground ) ); 383 else p->setPen( palette().color( QPalette::Normal,QColorGroup::Foreground ) );
384 384
385#if 0 385#if 0
386 p->setPen( palette().color( QPalette::Normal, sel ? \ 386 p->setPen( palette().color( QPalette::Normal, sel ? \
387 QColorGroup::HighlightedText : QColorGroup::Foreground ) ); 387 QColorGroup::HighlightedText : QColorGroup::Foreground ) );
388#endif 388#endif
389 QColor textColor = p->pen().color(); 389 QColor textColor = p->pen().color();
390 390
391 391
392 if ( mMultiday ) { 392 if ( mMultiday ) {
393 int yyy = y+(size/2); 393 int yyy = y+(size/2);
394 int sizeM = size+2; 394 int sizeM = size+2;
395 p->setBrush( QBrush( textColor ) ); 395 p->setBrush( QBrush( textColor ) );
396 p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ; 396 p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ;
397 if ( mMultiday == 2 || mMultiday == 3 ) { 397 if ( mMultiday == 2 || mMultiday == 3 ) {
398 QPointArray pa ( 3 ); 398 QPointArray pa ( 3 );
399 pa.setPoint (0, x, yyy ); 399 pa.setPoint (0, x, yyy );
400 pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 ); 400 pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 );
401 pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 ); 401 pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 );
402 p->drawPolygon( pa ); 402 p->drawPolygon( pa );
403 } 403 }
404 if ( mMultiday == 2 || mMultiday == 1 ) { 404 if ( mMultiday == 2 || mMultiday == 1 ) {
405 QPointArray pa ( 3 ); 405 QPointArray pa ( 3 );
406 pa.setPoint (0, x+sizeM +sizeM/2, yyy ); 406 pa.setPoint (0, x+sizeM +sizeM/2, yyy );
407 pa.setPoint (1, x+sizeM, yyy+sizeM/2 ); 407 pa.setPoint (1, x+sizeM, yyy+sizeM/2 );
408 pa.setPoint (2, x+sizeM, yyy-sizeM/2 ); 408 pa.setPoint (2, x+sizeM, yyy-sizeM/2 );
409 p->drawPolygon( pa ); 409 p->drawPolygon( pa );
410 } 410 }
411 if ( mMultiday == 1 ) { 411 if ( mMultiday == 1 ) {
412 // p->fillRect ( x, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); 412 // p->fillRect ( x, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) );
413 p->drawLine ( x+1, yyy-sizeM/2, x+1, yyy+sizeM/2 ); 413 p->drawLine ( x+1, yyy-sizeM/2, x+1, yyy+sizeM/2 );
414 } 414 }
415 if ( mMultiday == 3 ) { 415 if ( mMultiday == 3 ) {
416 // p->fillRect ( x+sizeM, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); 416 // p->fillRect ( x+sizeM, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) );
417 p->drawLine ( x+sizeM +sizeM/2-1, yyy-sizeM/2, x+sizeM +sizeM/2-1, yyy+sizeM/2 ); 417 p->drawLine ( x+sizeM +sizeM/2-1, yyy-sizeM/2, x+sizeM +sizeM/2-1, yyy+sizeM/2 );
418 418
419 } 419 }
420 x += sizeM/2 + 1; 420 x += sizeM/2 + 1;
421 x += sizeM + 1; 421 x += sizeM + 1;
422 } 422 }
423 423
424 if ( mIncidence->typeID() == todoID ){ 424 if ( mIncidence->typeID() == todoID ){
425 Todo* td = ( Todo* ) mIncidence; 425 Todo* td = ( Todo* ) mIncidence;
426 if ( td->isCompleted() ) { 426 if ( td->isCompleted() ) {
427 int half = size/2; 427 int half = size/2;
428 p->drawLine ( x, heihei/2, x +half , heihei/2 +half ) ; 428 p->drawLine ( x, heihei/2, x +half , heihei/2 +half ) ;
429 p->drawLine ( x +half , heihei/2 +half , x +half+half +2 , heihei/2 -2 ) ; 429 p->drawLine ( x +half , heihei/2 +half , x +half+half +2 , heihei/2 -2 ) ;
430 x += half+half + 4; 430 x += half+half + 4;
431 431
432 } else { 432 } else {
433 int val = td->percentComplete()/20; 433 int val = td->percentComplete()/20;
434 p->fillRect ( x+1, y-2, val ,size+4,textColor ); 434 p->fillRect ( x+1, y-2, val ,size+4,textColor );
435 p->drawRect ( x, y-2,7,size+4); 435 p->drawRect ( x, y-2,7,size+4);
436 x += size + 3; 436 x += size + 3;
437 } 437 }
438 } 438 }
439 QFontMetrics fm = p->fontMetrics(); 439 QFontMetrics fm = p->fontMetrics();
440 int yPos; 440 int yPos;
441 int pmheight = size; 441 int pmheight = size;
442 if( pmheight < fm.height() ) 442 if( pmheight < fm.height() )
443 yPos = fm.ascent() + fm.leading()/2; 443 yPos = fm.ascent() + fm.leading()/2;
444 else 444 else
445 yPos = pmheight/2 - fm.height()/2 + fm.ascent(); 445 yPos = pmheight/2 - fm.height()/2 + fm.ascent();
446 446
447 if ( KOPrefs::instance()->mMonthShowTimes || isWeekItem) { 447 if ( KOPrefs::instance()->mMonthShowTimes || isWeekItem) {
448 p->drawText( x, yPos, text() ); 448 p->drawText( x, yPos, text() );
449 if ( mIncidence->cancelled() ) { 449 if ( mIncidence->cancelled() ) {
450 int wid = fm.width( text() ); 450 int wid = fm.width( text() );
451 p->drawLine( x, heihei/2 ,x+wid, heihei/2 ); 451 p->drawLine( x, heihei/2 ,x+wid, heihei/2 );
452 } 452 }
453 } else { 453 } else {
454 QString pText = text(); 454 QString pText = text();
455 if( pText.mid(2,1) == ":" ) 455 if( pText.mid(2,1) == ":" )
456 pText = pText.mid( 6 ); 456 pText = pText.mid( 6 );
457 p->drawText( x, yPos, pText ); 457 p->drawText( x, yPos, pText );
458 if ( mIncidence->cancelled() ) { 458 if ( mIncidence->cancelled() ) {
459 int wid = fm.width( pText ); 459 int wid = fm.width( pText );
460 p->drawLine( x, heihei/2 ,x+wid, heihei/2 ); 460 p->drawLine( x, heihei/2 ,x+wid, heihei/2 );
461 } 461 }
462 } 462 }
463} 463}
464 464
465int MonthViewItem::height(const QListBox *lb) const 465int MonthViewItem::height(const QListBox *lb) const
466{ 466{
467 int ret = 10; 467 int ret = 10;
468 if ( lb ) 468 if ( lb )
469 ret = lb->fontMetrics().lineSpacing()+1; 469 ret = lb->fontMetrics().lineSpacing()+1;
470 return ret; 470 return ret;
471} 471}
472 472
473int MonthViewItem::width(const QListBox *lb) const 473int MonthViewItem::width(const QListBox *lb) const
474{ 474{
475 if( KOPrefs::instance()->mEnableMonthScroll || isWeekItem ) { 475 if( KOPrefs::instance()->mEnableMonthScroll || isWeekItem ) {
476 int size = PIXMAP_SIZE; 476 int size = PIXMAP_SIZE;
477 if ( QApplication::desktop()->width() < 300 ) 477 if ( QApplication::desktop()->width() < 300 )
478 size = 3; 478 size = 3;
479 int x = 1; 479 int x = 1;
480 if ( KOPrefs::instance()->mMonthShowIcons ) { 480 if ( KOPrefs::instance()->mMonthShowIcons ) {
481 if ( mInfo ) { 481 if ( mInfo ) {
482 x += size + 1; 482 x += size + 1;
483 } 483 }
484 if( mRecur ) { 484 if( mRecur ) {
485 x += size+1; 485 x += size+1;
486 } 486 }
487 if( mAlarm ) { 487 if( mAlarm ) {
488 x += size+1; 488 x += size+1;
489 } 489 }
490 if( mReply ) { 490 if( mReply ) {
491 x += size+1; 491 x += size+1;
492 } 492 }
493 } 493 }
494 if( mMultiday ) { 494 if( mMultiday ) {
495 x += size+1+2+size/2; 495 x += size+1+2+size/2;
496 } 496 }
497 return( x + lb->fontMetrics().width( text() ) + 1 ); 497 return( x + lb->fontMetrics().width( text() ) + 1 );
498 } 498 }
499 if ( ! lb ) 499 if ( ! lb )
500 return 10; 500 return 10;
501 return lb->width(); 501 return lb->width();
502} 502}
503 503
504 504
505MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par ) 505MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par )
506 : KNoScrollListBox( par ), 506 : KNoScrollListBox( par ),
507 mMonthView( parent ) 507 mMonthView( parent )
508{ 508{
509 //QVBoxLayout *topLayout = new QVBoxLayout( this ); 509 //QVBoxLayout *topLayout = new QVBoxLayout( this );
510 currentPalette = 0; 510 currentPalette = 0;
511 // mLabel = new QLabel( this );QPushButton 511 // mLabel = new QLabel( this );QPushButton
512 mLabel = new QPushButton( this ); 512 mLabel = new QPushButton( this );
513 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); 513 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain );
514 //mLabel->setLineWidth( 1 ); 514 //mLabel->setLineWidth( 1 );
515 //mLabel->setAlignment( AlignCenter ); 515 //mLabel->setAlignment( AlignCenter );
516 mLabel->setFlat( true ); 516 mLabel->setFlat( true );
517 mLabel->setFocusPolicy(NoFocus); 517 mLabel->setFocusPolicy(NoFocus);
518 //mItemList = new KNoScrollListBox( this ); 518 //mItemList = new KNoScrollListBox( this );
519 setMinimumSize( 10, 10 ); 519 setMinimumSize( 10, 10 );
520 setFrameStyle( QFrame::Panel | QFrame::Plain ); 520 setFrameStyle( QFrame::Panel | QFrame::Plain );
521 setLineWidth( 1 ); 521 setLineWidth( 1 );
522 //topLayout->addWidget( mItemList ); 522 //topLayout->addWidget( mItemList );
523 mLabel->raise(); 523 mLabel->raise();
524 // QColor( 0,0,255 ) QColor( 160,1600,255 ) 524 // QColor( 0,0,255 ) QColor( 160,1600,255 )
525 mStandardPalette = palette(); 525 mStandardPalette = palette();
526 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); 526 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) );
527 527
528 enableScrollBars( false ); 528 enableScrollBars( false );
529 updateConfig(); 529 updateConfig();
530 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); 530 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
531 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); 531 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
532 connect( this , SIGNAL( doubleClicked( QListBoxItem *) ), 532 connect( this , SIGNAL( doubleClicked( QListBoxItem *) ),
533 SLOT( defaultAction( QListBoxItem * ) ) ); 533 SLOT( defaultAction( QListBoxItem * ) ) );
534 connect( this, SIGNAL( rightButtonPressed( QListBoxItem *, 534 connect( this, SIGNAL( rightButtonPressed( QListBoxItem *,
535 const QPoint &) ), 535 const QPoint &) ),
536 SLOT( contextMenu( QListBoxItem * ) ) ); 536 SLOT( contextMenu( QListBoxItem * ) ) );
537 connect( this, SIGNAL( highlighted( QListBoxItem *) ), 537 connect( this, SIGNAL( highlighted( QListBoxItem *) ),
538 SLOT( selection( QListBoxItem * ) ) ); 538 SLOT( selection( QListBoxItem * ) ) );
539 539
540 /* 540 /*
541 connect( this, SIGNAL( clicked( QListBoxItem * ) ), 541 connect( this, SIGNAL( clicked( QListBoxItem * ) ),
542 SLOT( selection( QListBoxItem * ) ) ); 542 SLOT( selection( QListBoxItem * ) ) );
543 */ 543 */
544} 544}
545#ifdef DESKTOP_VERSION 545#ifdef DESKTOP_VERSION
546QToolTipGroup *MonthViewCell::toolTipGroup() 546QToolTipGroup *MonthViewCell::toolTipGroup()
547{ 547{
548 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); 548 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0);
549 return mToolTipGroup; 549 return mToolTipGroup;
550} 550}
551#endif 551#endif
552 552
553void MonthViewCell::setDate( const QDate &date ) 553void MonthViewCell::setDate( const QDate &date )
554{ 554{
555 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; 555 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl;
556 mDate = date; 556 mDate = date;
557 557
558 558
559 559
560 //resizeEvent( 0 ); 560 //resizeEvent( 0 );
561} 561}
562 562
563QDate MonthViewCell::date() const 563QDate MonthViewCell::date() const
564{ 564{
565 return mDate; 565 return mDate;
566} 566}
567 567
568void MonthViewCell::setPrimary( bool primary ) 568void MonthViewCell::setPrimary( bool primary )
569{ 569{
570 mPrimary = primary; 570 mPrimary = primary;
571 //setMyPalette(); 571 //setMyPalette();
572} 572}
573void MonthViewCell::setMyPalette() 573void MonthViewCell::setMyPalette()
574{ 574{
575 575
576 if ( mHoliday) { 576 if ( mHoliday) {
577 if ( currentPalette == 1 ) return; 577 if ( currentPalette == 1 ) return;
578 mLabel->setPalette( QPalette ( mHolidayPalette.color( QPalette::Normal,QColorGroup::Base),mHolidayPalette.color(QPalette::Normal,QColorGroup::Base ) )); 578 mLabel->setPalette( QPalette ( mHolidayPalette.color( QPalette::Normal,QColorGroup::Base),mHolidayPalette.color(QPalette::Normal,QColorGroup::Base ) ));
579 setPalette( mHolidayPalette ); 579 setPalette( mHolidayPalette );
580 //mLabel->setPalette( mHolidayPalette ); 580 //mLabel->setPalette( mHolidayPalette );
581 currentPalette = 1; 581 currentPalette = 1;
582 582
583 } else { 583 } else {
584 if ( mPrimary ) { 584 if ( mPrimary ) {
585 if ( currentPalette == 2 ) return; 585 if ( currentPalette == 2 ) return;
586 mLabel->setPalette( QPalette ( mPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); 586 mLabel->setPalette( QPalette ( mPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) ));
587 //mLabel->setPalette( mPrimaryPalette ); 587 //mLabel->setPalette( mPrimaryPalette );
588 setPalette( mPrimaryPalette ); 588 setPalette( mPrimaryPalette );
589 currentPalette = 2; 589 currentPalette = 2;
590 590
591 } else { 591 } else {
592 if ( currentPalette == 3 ) return; 592 if ( currentPalette == 3 ) return;
593 setPalette( mNonPrimaryPalette ); 593 setPalette( mNonPrimaryPalette );
594 mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); 594 mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) ));
595 //mLabel->setPalette( mNonPrimaryPalette );; 595 //mLabel->setPalette( mNonPrimaryPalette );;
596 currentPalette = 3; 596 currentPalette = 3;
597 } 597 }
598 } 598 }
599 //QPalette pal = palette(); 599 //QPalette pal = palette();
600 600
601 //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); 601 //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) ));
602} 602}
603QPalette MonthViewCell::getPalette () 603QPalette MonthViewCell::getPalette ()
604{ 604{
605 if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) 605 if ( !KOPrefs::instance()->mMonthViewUsesDayColors )
606 return mStandardPalette; 606 return mStandardPalette;
607 if ( mHoliday) { 607 if ( mHoliday) {
608 return mHolidayPalette ; 608 return mHolidayPalette ;
609 } else { 609 } else {
610 if ( mPrimary ) { 610 if ( mPrimary ) {
611 return mPrimaryPalette ; 611 return mPrimaryPalette ;
612 } 612 }
613 } 613 }
614 return mNonPrimaryPalette; 614 return mNonPrimaryPalette;
615} 615}
616bool MonthViewCell::isPrimary() const 616bool MonthViewCell::isPrimary() const
617{ 617{
618 return mPrimary; 618 return mPrimary;
619} 619}
620 620
621void MonthViewCell::setHoliday( bool holiday ) 621void MonthViewCell::setHoliday( bool holiday )
622{ 622{
623 mHoliday = holiday; 623 mHoliday = holiday;
624 //setMyPalette(); 624 //setMyPalette();
625} 625}
626 626
627void MonthViewCell::setHoliday( const QString &holiday ) 627void MonthViewCell::setHoliday( const QString &holiday )
628{ 628{
629 mHolidayString = holiday; 629 mHolidayString = holiday;
630 630
631 if ( !holiday.isEmpty() ) { 631 if ( !holiday.isEmpty() ) {
632 setHoliday( true ); 632 setHoliday( true );
633 } 633 }
634} 634}
635 635
636void MonthViewCell::startUpdateCell() 636void MonthViewCell::startUpdateCell()
637{ 637{
638 blockSignals( true ); 638 blockSignals( true );
639 mdayCount = 0; 639 mdayCount = 0;
640 setFocusPolicy(NoFocus); 640 setFocusPolicy(NoFocus);
641 if ( !mMonthView->isUpdatePossible() ) 641 if ( !mMonthView->isUpdatePossible() )
642 return; 642 return;
643 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 643 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
644 while ( mitem ) { 644 while ( mitem ) {
645 mitem->setBlockRepaint( true ); 645 mitem->setBlockRepaint( true );
646 mitem = (MonthViewItem *)mitem->next(); 646 mitem = (MonthViewItem *)mitem->next();
647 } 647 }
648 if ( mAvailItemList.count() > 20 ) { 648 if ( mAvailItemList.count() > 20 ) {
649 mAvailItemList.setAutoDelete( true ); 649 mAvailItemList.setAutoDelete( true );
650 mAvailItemList.clear(); 650 mAvailItemList.clear();
651 mAvailItemList.setAutoDelete( false ); 651 mAvailItemList.setAutoDelete( false );
652 clear(); 652 clear();
653 } 653 }
654 654
655 setPrimary( mDate.month()%2 ); 655 setPrimary( mDate.month()%2 );
656 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); 656 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays);
657 if ( mDate == QDate::currentDate() ) { 657 if ( mDate == QDate::currentDate() ) {
658 setLineWidth( 3 ); 658 setLineWidth( 3 );
659 } else { 659 } else {
660 setLineWidth( 1 ); 660 setLineWidth( 1 );
661 } 661 }
662 MonthViewItem* CurrentAvailItem = (MonthViewItem*) firstItem (); 662 MonthViewItem* CurrentAvailItem = (MonthViewItem*) firstItem ();
663 //clear(); 663 //clear();
664 while ( CurrentAvailItem ) { 664 while ( CurrentAvailItem ) {
665 MonthViewItem *item = CurrentAvailItem; 665 MonthViewItem *item = CurrentAvailItem;
666 //item->setHighlightedFalse(); 666 //item->setHighlightedFalse();
667 item->recycle( 0, ""); 667 item->recycle( 0, "");
668 CurrentAvailItem = (MonthViewItem *)item->next(); 668 CurrentAvailItem = (MonthViewItem *)item->next();
669 mAvailItemList.append( item ); 669 mAvailItemList.append( item );
670 takeItem ( item ); 670 takeItem ( item );
671 } 671 }
672 672
673#ifdef DESKTOP_VERSION 673#ifdef DESKTOP_VERSION
674 QToolTip::remove(this); 674 QToolTip::remove(this);
675#endif 675#endif
676 mToolTip.clear(); 676 mToolTip.clear();
677 //qApp->processEvents(); 677 //qApp->processEvents();
678#if 0 678#if 0
679 if ( !mHolidayString.isEmpty() ) { 679 if ( !mHolidayString.isEmpty() ) {
680 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); 680 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
681 item->setPalette( mHolidayPalette ); 681 item->setPalette( mHolidayPalette );
682 insertItem( item ); 682 insertItem( item );
683 mToolTip.append ( mHolidayString ); 683 mToolTip.append ( mHolidayString );
684 } 684 }
685#endif 685#endif
686} 686}
687 687
688int MonthViewCell::insertEvent(Event *event) 688int MonthViewCell::insertEvent(Event *event)
689{ 689{
690 bool useToolTips = true; 690 bool useToolTips = true;
691#ifndef DESKTOP_VERSION 691#ifndef DESKTOP_VERSION
692 useToolTips = false; 692 useToolTips = false;
693#endif 693#endif
694 QString mToolTipText; 694 QString mToolTipText;
695 setFocusPolicy(WheelFocus); 695 setFocusPolicy(WheelFocus);
696 if ( !(event->doesRecur() == Recurrence::rNone) ) { 696 if ( !(event->doesRecur() == Recurrence::rNone) ) {
697 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) 697 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
698 return mdayCount; 698 return mdayCount;
699 else 699 else
700 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) 700 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
701 return mdayCount; 701 return mdayCount;
702 } 702 }
703 703
704 if ( event->isHoliday()) { 704 if ( event->isHoliday()) {
705 setHoliday( true ); 705 setHoliday( true );
706 if ( mDate.dayOfWeek() == 7 ) 706 if ( mDate.dayOfWeek() == 7 )
707 setLineWidth( 3 ); 707 setLineWidth( 3 );
708 } 708 }
709 QString text; 709 QString text;
710 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day 710 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day
711 if (event->isMultiDay()) { 711 if (event->isMultiDay()) {
712 QString prefix = "<->";multiday = 2; 712 QString prefix = "<->";multiday = 2;
713 QString time; 713 QString time;
714 if ( event->doesRecur() ) { 714 if ( event->doesRecur() ) {
715 if ( event->recursOn( mDate) ) { 715 if ( event->recursOn( mDate) ) {
716 prefix ="->" ;multiday = 1; 716 prefix ="->" ;multiday = 1;
717 } 717 }
718 else { 718 else {
719 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 719 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
720 if ( event->recursOn( mDate.addDays( -days)) ) { 720 if ( event->recursOn( mDate.addDays( -days)) ) {
721 prefix ="<-" ;multiday = 3; 721 prefix ="<-" ;multiday = 3;
722 } 722 }
723 } 723 }
724 724
725 } else { 725 } else {
726 if (mDate == event->dtStart().date()) { 726 if (mDate == event->dtStart().date()) {
727 prefix ="->" ;multiday = 1; 727 prefix ="->" ;multiday = 1;
728 } else if (mDate == event->dtEnd().date()) { 728 } else if (mDate == event->dtEnd().date()) {
729 prefix ="<-" ;multiday = 3; 729 prefix ="<-" ;multiday = 3;
730 } 730 }
731 } 731 }
732 if ( !event->doesFloat() ) { 732 if ( !event->doesFloat() ) {
733 if ( mDate == event->dtStart().date () ) 733 if ( mDate == event->dtStart().date () )
734 time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; 734 time = KGlobal::locale()->formatTime(event->dtStart().time())+" ";
735 else if ( mDate == event->dtEnd().date () ) 735 else if ( mDate == event->dtEnd().date () )
736 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; 736 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" ";
737 737
738 } 738 }
739 text = time + event->summary(); 739 text = time + event->summary();
740
741 int dur = 0;
742 if ( event->doesFloat() ) {
743 dur = event->dtStart().daysTo(event->dtEnd())+1;
744
745 }
740 if ( useToolTips ) { 746 if ( useToolTips ) {
741 mToolTipText += prefix + text; 747 mToolTipText += prefix + text;
742 if ( event->doesFloat() ) { 748 if ( dur ) {
743 mToolTipText += i18n(" (Duration: %1 days)" ).arg ( event->dtStart().daysTo(event->dtEnd())+1); 749 mToolTipText += i18n(" (Duration: %1 days)" ).arg ( dur );
744
745 } 750 }
746 } 751 }
752 if ( dur ) {
753 text += " ("+ QString::number( dur ) + i18n(" days" ) + ")";
754 }
747 } else { 755 } else {
748 if (event->doesFloat()) { 756 if (event->doesFloat()) {
749 text = event->summary(); 757 text = event->summary();
750 if ( useToolTips ) 758 if ( useToolTips )
751 mToolTipText += text; 759 mToolTipText += text;
752 } 760 }
753 else { 761 else {
754 text = KGlobal::locale()->formatTime(event->dtStart().time()); 762 text = KGlobal::locale()->formatTime(event->dtStart().time());
755 text += " " + event->summary(); 763 text += " " + event->summary();
756 if ( useToolTips ) 764 if ( useToolTips )
757 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); 765 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
758 } 766 }
759 } 767 }
760 if ( useToolTips && ! event->location().isEmpty() ) { 768 if ( useToolTips && ! event->location().isEmpty() ) {
761 mToolTipText += " (" + event->location() +")"; 769 mToolTipText += " (" + event->location() +")";
762 } 770 }
763 MonthViewItem *item ; 771 MonthViewItem *item ;
764 772
765 if ( mAvailItemList.count() ) { 773 if ( mAvailItemList.count() ) {
766 item = mAvailItemList.first(); 774 item = mAvailItemList.first();
767 mAvailItemList.remove( item ); 775 mAvailItemList.remove( item );
768 item->recycle( event, text ); 776 item->recycle( event, text );
769 } else { 777 } else {
770 item = new MonthViewItem( event, text ); 778 item = new MonthViewItem( event, text );
771 } 779 }
772 780
773 QPalette pal; 781 QPalette pal;
774 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 782 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
775 QStringList categories = event->categories(); 783 QStringList categories = event->categories();
776 QString cat = categories.first(); 784 QString cat = categories.first();
777 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 785 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
778 pal = getPalette(); 786 pal = getPalette();
779 if (cat.isEmpty()) { 787 if (cat.isEmpty()) {
780 //pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 788 //pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
781 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->defaultColor( event->calID() )); 789 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->defaultColor( event->calID() ));
782 } else { 790 } else {
783 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 791 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
784 } 792 }
785 793
786 } else { 794 } else {
787 if (cat.isEmpty()) { 795 if (cat.isEmpty()) {
788 //pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 796 //pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
789 pal = QPalette( KOPrefs::instance()->defaultColor( event->calID() ), KOPrefs::instance()->defaultColor( event->calID() )); 797 pal = QPalette( KOPrefs::instance()->defaultColor( event->calID() ), KOPrefs::instance()->defaultColor( event->calID() ));
790 } else { 798 } else {
791 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 799 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
792 } 800 }
793 } 801 }
794 802
795 } else { 803 } else {
796 pal = mStandardPalette ; 804 pal = mStandardPalette ;
797 } 805 }
798 pal.setColor(QColorGroup::Highlight, KOPrefs::instance()->mHighlightColor); 806 pal.setColor(QColorGroup::Highlight, KOPrefs::instance()->mHighlightColor);
799 item->setPalette( pal ); 807 item->setPalette( pal );
800 item->setRecur( event->doesRecur() ); 808 item->setRecur( event->doesRecur() );
801 item->setAlarm( event->isAlarmEnabled() && multiday < 2 && event->alarmEnabled() ); 809 item->setAlarm( event->isAlarmEnabled() && multiday < 2 && event->alarmEnabled() );
802 item->setMoreInfo( event->description().length() > 0 ); 810 item->setMoreInfo( event->description().length() > 0 );
803#ifdef DESKTOP_VERSION 811#ifdef DESKTOP_VERSION
804 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, 812 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails,
805 KOPrefs::instance()->email()); 813 KOPrefs::instance()->email());
806 if ( me != 0 ) { 814 if ( me != 0 ) {
807 if ( me->status() == Attendee::NeedsAction && me->RSVP()) 815 if ( me->status() == Attendee::NeedsAction && me->RSVP())
808 item->setReply(true && multiday < 2); 816 item->setReply(true && multiday < 2);
809 else 817 else
810 item->setReply(false); 818 item->setReply(false);
811 } else 819 } else
812 item->setReply(false); 820 item->setReply(false);
813#endif 821#endif
814 822
815 item->setMultiDay( multiday ); 823 item->setMultiDay( multiday );
816 if ( multiday ) { 824 if ( multiday ) {
817 insertItem( item ,mdayCount); 825 insertItem( item ,mdayCount);
818 ++mdayCount; 826 ++mdayCount;
819 } else { 827 } else {
820 uint i = mdayCount; 828 uint i = mdayCount;
821 uint pos = mdayCount; 829 uint pos = mdayCount;
822 uint itcount = count(); 830 uint itcount = count();
823 if ( itcount > 1000 ) { 831 if ( itcount > 1000 ) {
824 qDebug("KO: Bug in MonthViewCell::insertEvent %u ", itcount); 832 qDebug("KO: Bug in MonthViewCell::insertEvent %u ", itcount);
825 itcount = 0; 833 itcount = 0;
826 } 834 }
827 for ( i = pos; i < itcount;++i ) { 835 for ( i = pos; i < itcount;++i ) {
828 // qDebug("i %d mday %u count %d ",i,itcount,mdayCount ); 836 // qDebug("i %d mday %u count %d ",i,itcount,mdayCount );
829 QListBoxItem* it = this->item ( i ); 837 QListBoxItem* it = this->item ( i );
830 if ( it && text < it->text() ) { 838 if ( it && text < it->text() ) {
831 pos = i; 839 pos = i;
832 break; 840 break;
833 } 841 }
834 ++pos; 842 ++pos;
835 } 843 }
836 insertItem( item ,pos); 844 insertItem( item ,pos);
837 } 845 }
838 if ( useToolTips ) { 846 if ( useToolTips ) {
839 mToolTip.append( mToolTipText ); 847 mToolTip.append( mToolTipText );
840 } 848 }
841 return mdayCount; 849 return mdayCount;
842} 850}
843void MonthViewCell::insertTodo(Todo *todo) 851void MonthViewCell::insertTodo(Todo *todo)
844{ 852{
845 setFocusPolicy(WheelFocus); 853 setFocusPolicy(WheelFocus);
846 QString text; 854 QString text;
847 if (todo->hasDueDate()) { 855 if (todo->hasDueDate()) {
848 if (!todo->doesFloat()) { 856 if (!todo->doesFloat()) {
849 text += KGlobal::locale()->formatTime(todo->dtDue().time()); 857 text += KGlobal::locale()->formatTime(todo->dtDue().time());
850 text += " "; 858 text += " ";
851 } 859 }
852 } 860 }
853 text += todo->summary(); 861 text += todo->summary();
854 MonthViewItem *item ; 862 MonthViewItem *item ;
855 if ( mAvailItemList.count() ) { 863 if ( mAvailItemList.count() ) {
856 item = mAvailItemList.first(); 864 item = mAvailItemList.first();
857 mAvailItemList.remove( item ); 865 mAvailItemList.remove( item );
858 item->recycle( todo, text ); 866 item->recycle( todo, text );
859 } else { 867 } else {
860 item = new MonthViewItem( todo, text ); 868 item = new MonthViewItem( todo, text );
861 } 869 }
862 //MonthViewItem *item = new MonthViewItem( todo, mDate, text ); 870 //MonthViewItem *item = new MonthViewItem( todo, mDate, text );
863 //item->setPalette( mStandardPalette ); 871 //item->setPalette( mStandardPalette );
864 QPalette pal; 872 QPalette pal;
865 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 873 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
866 QStringList categories = todo->categories(); 874 QStringList categories = todo->categories();
867 QString cat = categories.first(); 875 QString cat = categories.first();
868 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 876 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
869 pal = getPalette(); 877 pal = getPalette();
870 if (cat.isEmpty()) { 878 if (cat.isEmpty()) {
871 //pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 879 //pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
872 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->defaultColor( todo->calID() )); 880 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->defaultColor( todo->calID() ));
873 } else { 881 } else {
874 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 882 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
875 } 883 }
876 884
877 } else { 885 } else {
878 if (cat.isEmpty()) { 886 if (cat.isEmpty()) {
879 //pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 887 //pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
880 pal = QPalette(KOPrefs::instance()->defaultColor( todo->calID() ), KOPrefs::instance()->defaultColor( todo->calID() )); 888 pal = QPalette(KOPrefs::instance()->defaultColor( todo->calID() ), KOPrefs::instance()->defaultColor( todo->calID() ));
881 } else { 889 } else {
882 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 890 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
883 } 891 }
884 } 892 }
885 893
886 } else { 894 } else {
887 pal = mStandardPalette ; 895 pal = mStandardPalette ;
888 } 896 }
889 pal.setColor(QColorGroup::Highlight, KOPrefs::instance()->mHighlightColor); 897 pal.setColor(QColorGroup::Highlight, KOPrefs::instance()->mHighlightColor);
890 item->setPalette( pal ); 898 item->setPalette( pal );
891 item->setRecur( todo->doesRecur() ); 899 item->setRecur( todo->doesRecur() );
892 item->setAlarm( todo->isAlarmEnabled() && todo->alarmEnabled() ); 900 item->setAlarm( todo->isAlarmEnabled() && todo->alarmEnabled() );
893 item->setMoreInfo( todo->description().length() > 0 ); 901 item->setMoreInfo( todo->description().length() > 0 );
894 insertItem( item , count()); 902 insertItem( item , count());
895#ifdef DESKTOP_VERSION 903#ifdef DESKTOP_VERSION
896 mToolTip.append( text ); 904 mToolTip.append( text );
897#endif 905#endif
898} 906}
899void MonthViewCell::repaintfinishUpdateCell() 907void MonthViewCell::repaintfinishUpdateCell()
900{ 908{
901 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 909 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
902 while ( mitem ) { 910 while ( mitem ) {
903 mitem->setBlockRepaint( false ); 911 mitem->setBlockRepaint( false );
904 updateItem ( mitem ); 912 updateItem ( mitem );
905 mitem = (MonthViewItem *)mitem->next(); 913 mitem = (MonthViewItem *)mitem->next();
906 } 914 }
907 blockSignals( false ); 915 blockSignals( false );
908} 916}
909void MonthViewCell::finishUpdateCell() 917void MonthViewCell::finishUpdateCell()
910{ 918{
911 919
912 920
913 921
914#ifdef DESKTOP_VERSION 922#ifdef DESKTOP_VERSION
915 if (mToolTip.count() > 0 ) { 923 if (mToolTip.count() > 0 ) {
916 mToolTip.sort(); 924 mToolTip.sort();
917 QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),""); 925 QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),"");
918 } 926 }
919#endif 927#endif
920 //sort(); 928 //sort();
921 //setMyPalette(); 929 //setMyPalette();
922 setMyPalette(); 930 setMyPalette();
923 931
924 resizeEvent( 0 ); 932 resizeEvent( 0 );
925 933
926} 934}
927void MonthViewCell::updateCell() 935void MonthViewCell::updateCell()
928{ 936{
929 if ( !mMonthView->isUpdatePossible() ) 937 if ( !mMonthView->isUpdatePossible() )
930 return; 938 return;
931 startUpdateCell(); 939 startUpdateCell();
932 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 940 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
933 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true ); 941 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
934 Event *event; 942 Event *event;
935 for( event = events.first(); event; event = events.next() ) { // for event 943 for( event = events.first(); event; event = events.next() ) { // for event
936 insertEvent(event); 944 insertEvent(event);
937 } 945 }
938 // insert due todos 946 // insert due todos
939 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate ); 947 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
940 Todo *todo; 948 Todo *todo;
941 for(todo = todos.first(); todo; todo = todos.next()) { 949 for(todo = todos.first(); todo; todo = todos.next()) {
942 insertTodo( todo ); 950 insertTodo( todo );
943 } 951 }
944 finishUpdateCell(); 952 finishUpdateCell();
945 // if ( isVisible()) 953 // if ( isVisible())
946 //qApp->processEvents(); 954 //qApp->processEvents();
947} 955}
948 956
949void MonthViewCell::updateConfig( bool bigFont ) // = false 957void MonthViewCell::updateConfig( bool bigFont ) // = false
950{ 958{
951 959
952 if ( bigFont ) { 960 if ( bigFont ) {
953 QFont fo = KOPrefs::instance()->mMonthViewFont; 961 QFont fo = KOPrefs::instance()->mMonthViewFont;
954 int ps = fo.pointSize() + 2; 962 int ps = fo.pointSize() + 2;
955 if ( ps < 18 ) 963 if ( ps < 18 )
956 ps += 2; 964 ps += 2;
957 fo.setPointSize( ps ); 965 fo.setPointSize( ps );
958 setFont( fo ); 966 setFont( fo );
959 } else 967 } else
960 setFont( KOPrefs::instance()->mMonthViewFont ); 968 setFont( KOPrefs::instance()->mMonthViewFont );
961 969
962 QFontMetrics fm( font() ); 970 QFontMetrics fm( font() );
963 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); 971 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 );
964 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); 972 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 );
965 mHolidayPalette = mStandardPalette; 973 mHolidayPalette = mStandardPalette;
966 mPrimaryPalette = mStandardPalette; 974 mPrimaryPalette = mStandardPalette;
967 mNonPrimaryPalette = mStandardPalette; 975 mNonPrimaryPalette = mStandardPalette;
968 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { 976 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) {
969 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); 977 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor );
970 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); 978 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor );
971 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); 979 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark());
972 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); 980 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark());
973 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); 981 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor);
974 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); 982 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor);
975 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); 983 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark());
976 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); 984 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor);
977 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); 985 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor);
978 } 986 }
979 //updateCell(); 987 //updateCell();
980} 988}
981 989
982void MonthViewCell::enableScrollBars( bool enabled ) 990void MonthViewCell::enableScrollBars( bool enabled )
983{ 991{
984 992
985 return; 993 return;
986 if ( enabled ) { 994 if ( enabled ) {
987 QListBoxItem *fi = firstItem (); 995 QListBoxItem *fi = firstItem ();
988 if (fi ) { 996 if (fi ) {
989 int ihei = fi->height( this ); 997 int ihei = fi->height( this );
990 int hei = numRows () * ihei; 998 int hei = numRows () * ihei;
991 if ( hei < height() - horizontalScrollBar()->height () ) { 999 if ( hei < height() - horizontalScrollBar()->height () ) {
992 setVScrollBarMode(QScrollView::AlwaysOff); 1000 setVScrollBarMode(QScrollView::AlwaysOff);
993 } 1001 }
994 else 1002 else
995 setVScrollBarMode(QScrollView::Auto); 1003 setVScrollBarMode(QScrollView::Auto);
996 if ( ihei *3 > height() ) { 1004 if ( ihei *3 > height() ) {
997 setHScrollBarMode(QScrollView::AlwaysOff); 1005 setHScrollBarMode(QScrollView::AlwaysOff);
998 } 1006 }
999 else { 1007 else {
1000 setHScrollBarMode(QScrollView::Auto); 1008 setHScrollBarMode(QScrollView::Auto);
1001 } 1009 }
1002 } else { 1010 } else {
1003 setVScrollBarMode(QScrollView::Auto); 1011 setVScrollBarMode(QScrollView::Auto);
1004 setHScrollBarMode(QScrollView::Auto); 1012 setHScrollBarMode(QScrollView::Auto);
1005 } 1013 }
1006 } else { 1014 } else {
1007 setVScrollBarMode(QScrollView::AlwaysOff); 1015 setVScrollBarMode(QScrollView::AlwaysOff);
1008 setHScrollBarMode(QScrollView::AlwaysOff); 1016 setHScrollBarMode(QScrollView::AlwaysOff);
1009 } 1017 }
1010} 1018}
1011 1019
1012Incidence *MonthViewCell::selectedIncidence() 1020Incidence *MonthViewCell::selectedIncidence()
1013{ 1021{
1014 int index = currentItem(); 1022 int index = currentItem();
1015 if ( index < 0 ) return 0; 1023 if ( index < 0 ) return 0;
1016 1024
1017 MonthViewItem *mitem = 1025 MonthViewItem *mitem =
1018 static_cast<MonthViewItem *>( item( index ) ); 1026 static_cast<MonthViewItem *>( item( index ) );
1019 1027
1020 if ( !mitem ) return 0; 1028 if ( !mitem ) return 0;
1021 1029
1022 return mitem->incidence(); 1030 return mitem->incidence();
1023} 1031}
1024 1032
1025QDate MonthViewCell::selectedIncidenceDate() 1033QDate MonthViewCell::selectedIncidenceDate()
1026{ 1034{
1027 QDate qd; 1035 QDate qd;
1028 int index = currentItem(); 1036 int index = currentItem();
1029 if ( index < 0 ) return qd; 1037 if ( index < 0 ) return qd;
1030 return mDate; 1038 return mDate;
1031} 1039}
1032 1040
1033void MonthViewCell::deselect() 1041void MonthViewCell::deselect()
1034{ 1042{
1035 clearSelection(); 1043 clearSelection();
1036 enableScrollBars( false ); 1044 enableScrollBars( false );
1037 // updateCell(); 1045 // updateCell();
1038} 1046}
1039void MonthViewCell::select() 1047void MonthViewCell::select()
1040{ 1048{
1041 ;// updateCell(); 1049 ;// updateCell();
1042} 1050}
1043 1051
1044void MonthViewCell::resizeEvent ( QResizeEvent * e ) 1052void MonthViewCell::resizeEvent ( QResizeEvent * e )
1045{ 1053{
1046 if ( !mMonthView->isUpdatePossible() ) 1054 if ( !mMonthView->isUpdatePossible() )
1047 return; 1055 return;
1048 //qDebug("++++++++++++++MonthViewCell::resizeEvent %d %d ", width(), height()); 1056 //qDebug("++++++++++++++MonthViewCell::resizeEvent %d %d ", width(), height());
1049 deselect(); 1057 deselect();
1050 mLabel->setMaximumHeight( height() - lineWidth()*2 ); 1058 mLabel->setMaximumHeight( height() - lineWidth()*2 );
1051 1059
1052 QString text; 1060 QString text;
1053 //mLabel->setText( text ); 1061 //mLabel->setText( text );
1054 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; 1062 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog;
1055 if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { 1063 if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) {
1056 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " " + QString::number( mDate.day() ); 1064 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " " + QString::number( mDate.day() );
1057 mLabel->resize( mLabelBigSize ); 1065 mLabel->resize( mLabelBigSize );
1058 } else { 1066 } else {
1059 mLabel->resize( mLabelSize ); 1067 mLabel->resize( mLabelSize );
1060 text = QString::number( mDate.day() ); 1068 text = QString::number( mDate.day() );
1061 } 1069 }
1062 mLabel->setText( text ); 1070 mLabel->setText( text );
1063 1071
1064 int size = height() - mLabel->height() - lineWidth()-1; 1072 int size = height() - mLabel->height() - lineWidth()-1;
1065 //qDebug("LW %d ", lineWidth()); 1073 //qDebug("LW %d ", lineWidth());
1066 if ( size > 0 ) 1074 if ( size > 0 )
1067 verticalScrollBar()->setMaximumHeight( size ); 1075 verticalScrollBar()->setMaximumHeight( size );
1068 size = width() - mLabel->width() -lineWidth()-1; 1076 size = width() - mLabel->width() -lineWidth()-1;
1069 if ( size > 0 ) 1077 if ( size > 0 )
1070 horizontalScrollBar()->setMaximumWidth( size ); 1078 horizontalScrollBar()->setMaximumWidth( size );
1071 mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() ); 1079 mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() );
1072 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 1080 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
1073 // mItemList->resize ( width(), height () ); 1081 // mItemList->resize ( width(), height () );
1074 if ( e ) 1082 if ( e )
1075 KNoScrollListBox::resizeEvent ( e ); 1083 KNoScrollListBox::resizeEvent ( e );
1076} 1084}
1077 1085
1078void MonthViewCell::defaultAction( QListBoxItem *item ) 1086void MonthViewCell::defaultAction( QListBoxItem *item )
1079{ 1087{
1080 1088
1081 if ( !item ) { 1089 if ( !item ) {
1082 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1090 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1083 emit newEventSignal( dt ); 1091 emit newEventSignal( dt );
1084 return; 1092 return;
1085 } 1093 }
1086 1094
1087 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1095 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1088 Incidence *incidence = eventItem->incidence(); 1096 Incidence *incidence = eventItem->incidence();
1089 if ( incidence ) mMonthView->defaultAction( incidence ); 1097 if ( incidence ) mMonthView->defaultAction( incidence );
1090} 1098}
1091void MonthViewCell::showDay() 1099void MonthViewCell::showDay()
1092{ 1100{
1093 emit showDaySignal( date() ); 1101 emit showDaySignal( date() );
1094} 1102}
1095void MonthViewCell::newEvent() 1103void MonthViewCell::newEvent()
1096{ 1104{
1097 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1105 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1098 emit newEventSignal( dt ); 1106 emit newEventSignal( dt );
1099} 1107}
1100void MonthViewCell::cellClicked( QListBoxItem *item ) 1108void MonthViewCell::cellClicked( QListBoxItem *item )
1101{ 1109{
1102 mMonthView->setSelectedCell( this ); 1110 mMonthView->setSelectedCell( this );
1103 if ( item == 0 ) { 1111 if ( item == 0 ) {
1104 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1112 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1105 emit newEventSignal( dt ); 1113 emit newEventSignal( dt );
1106 return; 1114 return;
1107 } 1115 }
1108 1116
1109} 1117}
1110 1118
1111void MonthViewCell::contextMenu( QListBoxItem *item ) 1119void MonthViewCell::contextMenu( QListBoxItem *item )
1112{ 1120{
1113 mMonthView->setPopupCell( this ); 1121 mMonthView->setPopupCell( this );
1114 if ( !item ) { 1122 if ( !item ) {
1115 mMonthView->showContextMenu( 0 ); 1123 mMonthView->showContextMenu( 0 );
1116 return; 1124 return;
1117 } 1125 }
1118 //selection( item ); 1126 //selection( item );
1119 //qApp->processEvents(); 1127 //qApp->processEvents();
1120 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1128 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1121 Incidence *incidence = eventItem->incidence(); 1129 Incidence *incidence = eventItem->incidence();
1122 if ( incidence ) { 1130 if ( incidence ) {
1123 mBlockDeselect = true; 1131 mBlockDeselect = true;
1124 mMonthView->showContextMenu( incidence ); 1132 mMonthView->showContextMenu( incidence );
1125 } 1133 }
1126} 1134}
1127 1135
1128void MonthViewCell::selection( QListBoxItem *item ) 1136void MonthViewCell::selection( QListBoxItem *item )
1129{ 1137{
1130 if ( !item ) { 1138 if ( !item ) {
1131 emit highlightIncidence( 0 , this, 0 ); 1139 emit highlightIncidence( 0 , this, 0 );
1132 return; 1140 return;
1133 } 1141 }
1134 MonthViewItem * it = (static_cast<MonthViewItem *>( item )); 1142 MonthViewItem * it = (static_cast<MonthViewItem *>( item ));
1135 emit highlightIncidence( it->incidence(), this, it->multiDay() ); 1143 emit highlightIncidence( it->incidence(), this, it->multiDay() );
1136 mMonthView->setSelectedCell( this ); 1144 mMonthView->setSelectedCell( this );
1137} 1145}
1138 1146
1139void MonthViewCell::deHighLight() 1147void MonthViewCell::deHighLight()
1140{ 1148{
1141 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 1149 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
1142 while ( mitem ) { 1150 while ( mitem ) {
1143 if ( mitem->setHighlightedFalse() ) 1151 if ( mitem->setHighlightedFalse() )
1144 updateItem ( mitem ); 1152 updateItem ( mitem );
1145 mitem = (MonthViewItem *)mitem->next(); 1153 mitem = (MonthViewItem *)mitem->next();
1146 } 1154 }
1147} 1155}
1148// returns true if no inc found 1156// returns true if no inc found
1149bool MonthViewCell::doHighLight( Incidence * inc ) 1157bool MonthViewCell::doHighLight( Incidence * inc )
1150{ 1158{
1151 1159
1152 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 1160 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
1153 while ( mitem ) { 1161 while ( mitem ) {
1154 if ( mitem->incidence() == inc ) { 1162 if ( mitem->incidence() == inc ) {
1155 if ( mitem->setHighlighted( inc ) ) 1163 if ( mitem->setHighlighted( inc ) )
1156 updateItem ( mitem ); 1164 updateItem ( mitem );
1157 return false; 1165 return false;
1158 } 1166 }
1159 mitem = (MonthViewItem *)mitem->next(); 1167 mitem = (MonthViewItem *)mitem->next();
1160 } 1168 }
1161 return true; 1169 return true;
1162} 1170}
1163// ******************************************************************************* 1171// *******************************************************************************
1164// ******************************************************************************* 1172// *******************************************************************************
1165// ******************************************************************************* 1173// *******************************************************************************
1166 1174
1167 1175
1168KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) 1176KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
1169 : KOEventView( calendar, parent, name ), 1177 : KOEventView( calendar, parent, name ),
1170 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), 1178 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
1171 mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) 1179 mWidthLongDayLabel( 0 ), mSelectedCell( 0 )
1172{ 1180{
1173 mFlagKeyPressed = false; 1181 mFlagKeyPressed = false;
1174 mShortDayLabelsM = false; 1182 mShortDayLabelsM = false;
1175 mShortDayLabelsW = false; 1183 mShortDayLabelsW = false;
1176 skipResize = false; 1184 skipResize = false;
1177 clPending = true; 1185 clPending = true;
1178 mPopupCell = 0; 1186 mPopupCell = 0;
1179 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" ); 1187 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" );
1180 mWidStack = new QWidgetStack( this ); 1188 mWidStack = new QWidgetStack( this );
1181 QVBoxLayout* hb = new QVBoxLayout( this ); 1189 QVBoxLayout* hb = new QVBoxLayout( this );
1182 mMonthView = new QWidget( mWidStack ); 1190 mMonthView = new QWidget( mWidStack );
1183 mWeekView = new QWidget( mWidStack ); 1191 mWeekView = new QWidget( mWidStack );
1184#if QT_VERSION >= 0x030000 1192#if QT_VERSION >= 0x030000
1185 mWidStack->addWidget(mMonthView ); 1193 mWidStack->addWidget(mMonthView );
1186 mWidStack->addWidget(mWeekView ); 1194 mWidStack->addWidget(mWeekView );
1187#else 1195#else
1188 mWidStack->addWidget( mMonthView, 1 ); 1196 mWidStack->addWidget( mMonthView, 1 );
1189 mWidStack->addWidget( mWeekView , 1 ); 1197 mWidStack->addWidget( mWeekView , 1 );
1190#endif 1198#endif
1191 hb->addWidget( mNavigatorBar ); 1199 hb->addWidget( mNavigatorBar );
1192 hb->addWidget( mWidStack ); 1200 hb->addWidget( mWidStack );
1193 mShowWeekView = KOPrefs::instance()->mMonthViewWeek; 1201 mShowWeekView = KOPrefs::instance()->mMonthViewWeek;
1194 updatePossible = false; 1202 updatePossible = false;
1195 //updatePossible = true; 1203 //updatePossible = true;
1196 mCells.setAutoDelete( true ); 1204 mCells.setAutoDelete( true );
1197 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 1205 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
1198 mDayLabels.resize( mDaysPerWeek ); 1206 mDayLabels.resize( mDaysPerWeek );
1199 mDayLabelsW.resize( mDaysPerWeek ); 1207 mDayLabelsW.resize( mDaysPerWeek );
1200 QFont bfont = font(); 1208 QFont bfont = font();
1201 if ( QApplication::desktop()->width() < 650 ) { 1209 if ( QApplication::desktop()->width() < 650 ) {
1202 bfont.setPointSize( bfont.pointSize() - 2 ); 1210 bfont.setPointSize( bfont.pointSize() - 2 );
1203 } 1211 }
1204 bfont.setBold( true ); 1212 bfont.setBold( true );
1205 int i; 1213 int i;
1206 1214
1207 for( i = 0; i < mDaysPerWeek; i++ ) { 1215 for( i = 0; i < mDaysPerWeek; i++ ) {
1208 QLabel *label = new QLabel( mMonthView ); 1216 QLabel *label = new QLabel( mMonthView );
1209 label->setFont(bfont); 1217 label->setFont(bfont);
1210 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1218 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1211 label->setLineWidth(1); 1219 label->setLineWidth(1);
1212 label->setAlignment(AlignCenter); 1220 label->setAlignment(AlignCenter);
1213 mDayLabels.insert( i, label ); 1221 mDayLabels.insert( i, label );
1214 label = new QLabel( mWeekView ); 1222 label = new QLabel( mWeekView );
1215 label->setFont(bfont); 1223 label->setFont(bfont);
1216 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1224 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1217 label->setLineWidth(1); 1225 label->setLineWidth(1);
1218 label->setAlignment(AlignCenter); 1226 label->setAlignment(AlignCenter);
1219 mDayLabelsW.insert( i, label ); 1227 mDayLabelsW.insert( i, label );
1220 } 1228 }
1221 1229
1222 bfont.setBold( false ); 1230 bfont.setBold( false );
1223 mWeekLabels.resize( mNumWeeks+1 ); 1231 mWeekLabels.resize( mNumWeeks+1 );
1224 mWeekLabelsW.resize( 2 ); 1232 mWeekLabelsW.resize( 2 );
1225 for( i = 0; i < mNumWeeks+1; i++ ) { 1233 for( i = 0; i < mNumWeeks+1; i++ ) {
1226 KOWeekButton *label = new KOWeekButton( mMonthView ); 1234 KOWeekButton *label = new KOWeekButton( mMonthView );
1227 label->setFocusPolicy(NoFocus); 1235 label->setFocusPolicy(NoFocus);
1228 label->setFont(bfont); 1236 label->setFont(bfont);
1229 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 1237 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
1230 label->setFlat(true); 1238 label->setFlat(true);
1231 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 1239 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
1232 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1240 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1233 //label->setLineWidth(1); 1241 //label->setLineWidth(1);
1234 //label->setAlignment(AlignCenter); 1242 //label->setAlignment(AlignCenter);
1235 mWeekLabels.insert( i, label ); 1243 mWeekLabels.insert( i, label );
1236 } 1244 }
1237 mWeekLabels[mNumWeeks]->setText( i18n("W")); 1245 mWeekLabels[mNumWeeks]->setText( i18n("W"));
1238 mWeekLabels[mNumWeeks]->setFocusPolicy(WheelFocus); 1246 mWeekLabels[mNumWeeks]->setFocusPolicy(WheelFocus);
1239 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); 1247 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number"));
1240 1248
1241 for( i = 0; i < 1+1; i++ ) { 1249 for( i = 0; i < 1+1; i++ ) {
1242 KOWeekButton *label = new KOWeekButton( mWeekView ); 1250 KOWeekButton *label = new KOWeekButton( mWeekView );
1243 label->setFocusPolicy(NoFocus); 1251 label->setFocusPolicy(NoFocus);
1244 label->setFont(bfont); 1252 label->setFont(bfont);
1245 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 1253 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
1246 label->setFlat(true); 1254 label->setFlat(true);
1247 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 1255 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
1248 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1256 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1249 //label->setLineWidth(1); 1257 //label->setLineWidth(1);
1250 //label->setAlignment(AlignCenter); 1258 //label->setAlignment(AlignCenter);
1251 mWeekLabelsW.insert( i, label ); 1259 mWeekLabelsW.insert( i, label );
1252 } 1260 }
1253 mWeekLabelsW[1]->setText( i18n("W")); 1261 mWeekLabelsW[1]->setText( i18n("W"));
1254 mWeekLabelsW[1]->setFocusPolicy(WheelFocus); 1262 mWeekLabelsW[1]->setFocusPolicy(WheelFocus);
1255 1263
1256 1264
1257 int row, col; 1265 int row, col;
1258 mCells.resize( mNumCells ); 1266 mCells.resize( mNumCells );
diff --git a/libkdepim/kdatepicker.cpp b/libkdepim/kdatepicker.cpp
index 25b4e81..68ef943 100644
--- a/libkdepim/kdatepicker.cpp
+++ b/libkdepim/kdatepicker.cpp
@@ -1,490 +1,498 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 This file is part of the KDE libraries 2 This file is part of the KDE libraries
3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org) 3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
4 (C) 1998-2001 Mirko Boehm (mirko@kde.org) 4 (C) 1998-2001 Mirko Boehm (mirko@kde.org)
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 20
21#include "kdatepicker.h" 21#include "kdatepicker.h"
22#include <kglobal.h> 22#include <kglobal.h>
23#include <kapplication.h> 23#include <kapplication.h>
24#include <klocale.h> 24#include <klocale.h>
25#include <kiconloader.h> 25#include <kiconloader.h>
26#include <qframe.h> 26#include <qframe.h>
27#include <qpainter.h> 27#include <qpainter.h>
28#include <qdialog.h> 28#include <qdialog.h>
29#include <qtoolbutton.h> 29#include <qtoolbutton.h>
30#include <qfont.h> 30#include <qfont.h>
31#include <qapplication.h> 31#include <qapplication.h>
32#include <qlineedit.h> 32#include <qlineedit.h>
33#include <qvalidator.h> 33#include <qvalidator.h>
34#include <kdebug.h> 34#include <kdebug.h>
35#include <knotifyclient.h> 35#include <knotifyclient.h>
36#include <kglobalsettings.h> 36#include <kglobalsettings.h>
37#include "kdatetbl.h" 37#include "kdatetbl.h"
38#include "kdateedit.h" 38#include "kdateedit.h"
39//#include "kdatepicker.moc" 39//#include "kdatepicker.moc"
40 40
41 41
42KDatePicker::KDatePicker(QWidget *parent, QDate dt, const char *name) 42KDatePicker::KDatePicker(QWidget *parent, QDate dt, const char *name)
43 : QFrame(parent,name), 43 : QFrame(parent,name),
44 yearForward(new QToolButton(this)), 44 yearForward(new QToolButton(this)),
45 yearBackward(new QToolButton(this)), 45 yearBackward(new QToolButton(this)),
46 monthForward(new QToolButton(this)), 46 monthForward(new QToolButton(this)),
47 monthBackward(new QToolButton(this)), 47 monthBackward(new QToolButton(this)),
48 selectMonth(new QToolButton(this)), 48 selectMonth(new QToolButton(this)),
49 selectYear(new QToolButton(this)), 49 selectYear(new QToolButton(this)),
50 todayBut(new QToolButton(this)), 50 todayBut(new QToolButton(this)),
51 //line(new QLineEdit(this)), 51 //line(new QLineEdit(this)),
52 val(new KDateValidator(this)) 52 val(new KDateValidator(this))
53 //table(new KDateTable(this)), 53 //table(new KDateTable(this)),
54 //fontsize(1) 54 //fontsize(1)
55{ 55{
56 QFont fo = KGlobalSettings::generalFont(); 56 QFont fo = KGlobalSettings::generalFont();
57 int add = 2; 57 int add = 2;
58 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 ) 58 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 )
59 add += 4; 59 add += 4;
60 fo.setPointSize(fo.pointSize()+add ); 60 fo.setPointSize(fo.pointSize()+add );
61 setFont( fo ); 61 setFont( fo );
62 table = new KDateTable(this); 62 table = new KDateTable(this);
63 setFontSize(font().pointSize()); 63 setFontSize(font().pointSize());
64 //line->setValidator(val); 64 //line->setValidator(val);
65 lineDate = new KDateEdit( this, "dateediipicker", true ); 65 lineDate = new KDateEdit( this, "dateediipicker", true );
66 yearForward->setPixmap(SmallIcon("3rightarrowB")); 66 yearForward->setPixmap(SmallIcon("3rightarrowB"));
67 yearBackward->setPixmap(SmallIcon("3leftarrowB")); 67 yearBackward->setPixmap(SmallIcon("3leftarrowB"));
68 monthForward->setPixmap(SmallIcon("2rightarrowB")); 68 monthForward->setPixmap(SmallIcon("2rightarrowB"));
69 monthBackward->setPixmap(SmallIcon("2leftarrowB")); 69 monthBackward->setPixmap(SmallIcon("2leftarrowB"));
70 todayBut->setPixmap(SmallIcon("today")); 70 todayBut->setPixmap(SmallIcon("today"));
71 setDate(dt); // set button texts 71 setDate(dt); // set button texts
72 connect(table, SIGNAL(dateChanged(QDate)), SLOT(dateChangedSlot(QDate))); 72 connect(table, SIGNAL(dateChanged(QDate)), SLOT(dateChangedSlot(QDate)));
73 connect(table, SIGNAL(tableClicked()), SLOT(tableClickedSlot())); 73 connect(table, SIGNAL(tableClicked()), SLOT(tableClickedSlot()));
74 connect(monthForward, SIGNAL(clicked()), SLOT(monthForwardClicked())); 74 connect(monthForward, SIGNAL(clicked()), SLOT(monthForwardClicked()));
75 connect(monthBackward, SIGNAL(clicked()), SLOT(monthBackwardClicked())); 75 connect(monthBackward, SIGNAL(clicked()), SLOT(monthBackwardClicked()));
76 connect(yearForward, SIGNAL(clicked()), SLOT(yearForwardClicked())); 76 connect(yearForward, SIGNAL(clicked()), SLOT(yearForwardClicked()));
77 connect(yearBackward, SIGNAL(clicked()), SLOT(yearBackwardClicked())); 77 connect(yearBackward, SIGNAL(clicked()), SLOT(yearBackwardClicked()));
78 connect(selectMonth, SIGNAL(clicked()), SLOT(selectMonthClicked())); 78 connect(selectMonth, SIGNAL(clicked()), SLOT(selectMonthClicked()));
79 connect(selectYear, SIGNAL(clicked()), SLOT(selectYearClicked())); 79 connect(selectYear, SIGNAL(clicked()), SLOT(selectYearClicked()));
80 connect(todayBut, SIGNAL(clicked()), SLOT(goToday())); 80 connect(todayBut, SIGNAL(clicked()), SLOT(goToday()));
81 //connect(line, SIGNAL(returnPressed()), SLOT(lineEnterPressed())); 81 //connect(line, SIGNAL(returnPressed()), SLOT(lineEnterPressed()));
82 connect(lineDate, SIGNAL(dateChanged(QDate)), SLOT(slotSetDate(QDate))); 82 connect(lineDate, SIGNAL(dateChanged(QDate)), SLOT(slotSetDate(QDate)));
83 connect(lineDate, SIGNAL(returnPressed()), SLOT(lineEnterPressed())); 83 connect(lineDate, SIGNAL(returnPressed()), SLOT(lineEnterPressed()));
84 table->setFocus(); 84 table->setFocus();
85 85
86} 86}
87 87
88KDatePicker::~KDatePicker() 88KDatePicker::~KDatePicker()
89{ 89{
90} 90}
91 91
92void 92void
93KDatePicker::resizeEvent(QResizeEvent*) 93KDatePicker::resizeEvent(QResizeEvent*)
94{ 94{
95 QWidget *buttons[] = { 95 QWidget *buttons[] = {
96 yearBackward, 96 yearBackward,
97 monthBackward, 97 monthBackward,
98 selectMonth, 98 selectMonth,
99 selectYear, 99 selectYear,
100 monthForward, 100 monthForward,
101 yearForward }; 101 yearForward };
102 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]); 102 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
103 QSize sizes[NoOfButtons]; 103 QSize sizes[NoOfButtons];
104 int buttonHeight=0; 104 int buttonHeight=0;
105 int count; 105 int count;
106 int w; 106 int w;
107 int x=0; 107 int x=0;
108 // ----- calculate button row height: 108 // ----- calculate button row height:
109 for(count=0; count<NoOfButtons; ++count) { 109 for(count=0; count<NoOfButtons; ++count) {
110 int xS = buttons[count]->sizeHint().width(); 110 int xS = buttons[count]->sizeHint().width();
111 int yS = buttons[count]->sizeHint().height(); 111 int yS = buttons[count]->sizeHint().height();
112 if ( QApplication::desktop()->width() < 320 ) 112 if ( QApplication::desktop()->width() < 320 )
113 sizes[count]=QSize ( xS+4, yS ); 113 sizes[count]=QSize ( xS+4, yS );
114 else 114 else
115 sizes[count]=QSize ( xS+10, yS ); 115 sizes[count]=QSize ( xS+10, yS );
116 116
117 buttonHeight=QMAX(buttonHeight, sizes[count].height()); 117 buttonHeight=QMAX(buttonHeight, sizes[count].height());
118 } 118 }
119 buttonHeight += 10; 119 buttonHeight += 10;
120 // ----- calculate size of the month button: 120 // ----- calculate size of the month button:
121 w=0; 121 w=0;
122 for(count=0; count<NoOfButtons; ++count) { 122 for(count=0; count<NoOfButtons; ++count) {
123 if(buttons[count]!=selectMonth) 123 if(buttons[count]!=selectMonth)
124 { 124 {
125 w+=sizes[count].width(); 125 w+=sizes[count].width();
126 } else { 126 } else {
127 x=count; 127 x=count;
128 } 128 }
129 } 129 }
130 sizes[x].setWidth(width()-w); // stretch the month button 130 sizes[x].setWidth(width()-w); // stretch the month button
131 // ----- place the buttons: 131 // ----- place the buttons:
132 x=0; 132 x=0;
133 for(count=0; count<NoOfButtons; ++count) 133 for(count=0; count<NoOfButtons; ++count)
134 { 134 {
135 w=sizes[count].width(); 135 w=sizes[count].width();
136 buttons[count]->setGeometry(x, 0, w, buttonHeight); 136 buttons[count]->setGeometry(x, 0, w, buttonHeight);
137 x+=w; 137 x+=w;
138 } 138 }
139 // ----- place the line edit for direct input: 139 // ----- place the line edit for direct input:
140 sizes[0]=lineDate->sizeHint(); 140 sizes[0]=lineDate->sizeHint();
141 //line->setGeometry(0, height()-sizes[0].height(), width(), sizes[0].height()); 141 //line->setGeometry(0, height()-sizes[0].height(), width(), sizes[0].height());
142 int todaywid = todayBut->sizeHint().width(); 142 int todaywid = todayBut->sizeHint().width();
143todayBut->setGeometry(0, height()-sizes[0].height(),todaywid, sizes[0].height()); 143todayBut->setGeometry(0, height()-sizes[0].height(),todaywid, sizes[0].height());
144 lineDate->setGeometry(0+todaywid, height()-sizes[0].height(), width()-todaywid, sizes[0].height()); 144 lineDate->setGeometry(0+todaywid, height()-sizes[0].height(), width()-todaywid, sizes[0].height());
145 // ----- adjust the table: 145 // ----- adjust the table:
146 table->setGeometry(0, buttonHeight, width(), 146 table->setGeometry(0, buttonHeight, width(),
147 height()-buttonHeight-sizes[0].height()); 147 height()-buttonHeight-sizes[0].height());
148} 148}
149 149
150void 150void
151KDatePicker::dateChangedSlot(QDate date) 151KDatePicker::dateChangedSlot(QDate date)
152{ 152{
153 lineDate->setDate( date );//(KGlobal::locale()->formatDate(date, true)); 153 lineDate->setDate( date );//(KGlobal::locale()->formatDate(date, true));
154 //line->setText(KGlobal::locale()->formatDate(date, true)); 154 //line->setText(KGlobal::locale()->formatDate(date, true));
155 QString temp;
156 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false));
157 temp.setNum(date.year());
158 selectYear->setText(temp);
155 emit(dateChanged(date)); 159 emit(dateChanged(date));
156} 160}
157 161
158void 162void
159KDatePicker::tableClickedSlot() 163KDatePicker::tableClickedSlot()
160{ 164{
161 165
162 emit(dateSelected(table->getDate())); 166 emit(dateSelected(table->getDate()));
163 emit(tableClicked()); 167 emit(tableClicked());
164} 168}
165 169
166const QDate& 170const QDate&
167KDatePicker::getDate() const 171KDatePicker::getDate() const
168{ 172{
169 return table->getDate(); 173 return table->getDate();
170} 174}
171 175
172const QDate & 176const QDate &
173KDatePicker::date() const 177KDatePicker::date() const
174{ 178{
175 return table->getDate(); 179 return table->getDate();
176} 180}
177 181
178void KDatePicker::goToday() 182void KDatePicker::goToday()
179{ 183{
180 slotSetDate( QDate::currentDate() ); 184 slotSetDate( QDate::currentDate() );
181 185
182} 186}
183void KDatePicker::slotSetDate( QDate date ) 187void KDatePicker::slotSetDate( QDate date )
184{ 188{
185 189
186 if(date.isValid()) { 190 if(date.isValid()) {
187 QString temp; 191 QString temp;
188 // ----- 192 // -----
189 table->setDate(date); 193 table->setDate(date);
190 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false)); 194 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false));
191 temp.setNum(date.year()); 195 temp.setNum(date.year());
192 selectYear->setText(temp); 196 selectYear->setText(temp);
193 //line->setText(KGlobal::locale()->formatDate(date, true)); 197 //line->setText(KGlobal::locale()->formatDate(date, true));
194 lineDate->setDate( date ); 198 lineDate->setDate( date );
195 } 199 }
196 200
197} 201}
198bool 202bool
199KDatePicker::setDate(const QDate& date) 203KDatePicker::setDate(const QDate& date)
200{ 204{
201 table->setFocus(); 205 table->setFocus();
202 if(date.isValid()) { 206 if(date.isValid()) {
203 QString temp; 207 QString temp;
204 // ----- 208 // -----
205 table->setDate(date); 209 table->setDate(date);
206 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false)); 210 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false));
207 temp.setNum(date.year()); 211 temp.setNum(date.year());
208 selectYear->setText(temp); 212 selectYear->setText(temp);
209 //line->setText(KGlobal::locale()->formatDate(date, true)); 213 //line->setText(KGlobal::locale()->formatDate(date, true));
210 lineDate->setDate( date ); 214 lineDate->setDate( date );
211 return true; 215 return true;
212 } else { 216 } else {
213 217
214 return false; 218 return false;
215 } 219 }
216 220
217 221
218} 222}
219 223
220void 224void
221KDatePicker::monthForwardClicked() 225KDatePicker::monthForwardClicked()
222{ 226{
223 QDate temp=table->getDate(); 227 QDate temp=table->getDate();
224 int day=temp.day(); 228 int day=temp.day();
225 // ----- 229 // -----
226 if(temp.month()==12) { 230 if(temp.month()==12) {
227 temp.setYMD(temp.year()+1, 1, 1); 231 temp.setYMD(temp.year()+1, 1, 1);
228 } else { 232 } else {
229 temp.setYMD(temp.year(), temp.month()+1, 1); 233 temp.setYMD(temp.year(), temp.month()+1, 1);
230 } 234 }
231 if(temp.daysInMonth()<day) { 235 if(temp.daysInMonth()<day) {
232 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 236 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
233 } else { 237 } else {
234 temp.setYMD(temp.year(), temp.month(), day); 238 temp.setYMD(temp.year(), temp.month(), day);
235 } 239 }
236 // assert(temp.isValid()); 240 // assert(temp.isValid());
237 setDate(temp); 241 setDate(temp);
238} 242}
239 243
240void 244void
241KDatePicker::monthBackwardClicked() 245KDatePicker::monthBackwardClicked()
242{ 246{
243 QDate temp=table->getDate(); 247 QDate temp=table->getDate();
244 int day=temp.day(); 248 int day=temp.day();
245 // ----- 249 // -----
246 if(temp.month()==1) 250 if(temp.month()==1)
247 { 251 {
248 temp.setYMD(temp.year()-1, 12, 1); 252 temp.setYMD(temp.year()-1, 12, 1);
249 } else { 253 } else {
250 temp.setYMD(temp.year(), temp.month()-1, 1); 254 temp.setYMD(temp.year(), temp.month()-1, 1);
251 } 255 }
252 if(temp.daysInMonth()<day) 256 if(temp.daysInMonth()<day)
253 { 257 {
254 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 258 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
255 } else { 259 } else {
256 temp.setYMD(temp.year(), temp.month(), day); 260 temp.setYMD(temp.year(), temp.month(), day);
257 } 261 }
258 // assert(temp.isValid()); 262 // assert(temp.isValid());
259 setDate(temp); 263 setDate(temp);
260} 264}
261 265
262void 266void
263KDatePicker::yearForwardClicked() 267KDatePicker::yearForwardClicked()
264{ 268{
265 QDate temp=table->getDate(); 269 QDate temp=table->getDate();
266 int day=temp.day(); 270 int day=temp.day();
267 // ----- 271 // -----
268 temp.setYMD(temp.year()+1, temp.month(), 1); 272 temp.setYMD(temp.year()+1, temp.month(), 1);
269 if(temp.daysInMonth()<day) 273 if(temp.daysInMonth()<day)
270 { 274 {
271 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 275 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
272 } else { 276 } else {
273 temp.setYMD(temp.year(), temp.month(), day); 277 temp.setYMD(temp.year(), temp.month(), day);
274 } 278 }
275 // assert(temp.isValid()); 279 // assert(temp.isValid());
276 setDate(temp); 280 setDate(temp);
277} 281}
278 282
279void 283void
280KDatePicker::yearBackwardClicked() 284KDatePicker::yearBackwardClicked()
281{ 285{
282 QDate temp=table->getDate(); 286 QDate temp=table->getDate();
283 int day=temp.day(); 287 int day=temp.day();
284 // ----- 288 // -----
285 temp.setYMD(temp.year()-1, temp.month(), 1); 289 temp.setYMD(temp.year()-1, temp.month(), 1);
286 if(temp.daysInMonth()<day) 290 if(temp.daysInMonth()<day)
287 { 291 {
288 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 292 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
289 } else { 293 } else {
290 temp.setYMD(temp.year(), temp.month(), day); 294 temp.setYMD(temp.year(), temp.month(), day);
291 } 295 }
292 // assert(temp.isValid()); 296 // assert(temp.isValid());
293 setDate(temp); 297 setDate(temp);
294} 298}
295 299
296void 300void
297KDatePicker::selectMonthClicked() 301KDatePicker::selectMonthClicked()
298{ 302{
299 int month; 303 int month;
300 KPopupFrame* popup = new KPopupFrame(this); 304 KPopupFrame* popup = new KPopupFrame(this);
301 KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(popup); 305 KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(popup);
302 // ----- 306 // -----
303 picker->resize(picker->sizeHint()); 307 picker->resize(picker->sizeHint());
304 popup->setMainWidget(picker); 308 popup->setMainWidget(picker);
305 picker->setFocus(); 309 picker->setFocus();
306 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); 310 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
307 if(popup->exec(selectMonth->mapToGlobal(QPoint(0, selectMonth->height())))) 311 if(popup->exec(selectMonth->mapToGlobal(QPoint(0, selectMonth->height()))))
308 { 312 {
309 QDate date; 313 QDate date;
310 int day; 314 int day;
311 // ----- 315 // -----
312 month=picker->getResult(); 316 month=picker->getResult();
313 date=table->getDate(); 317 date=table->getDate();
314 day=date.day(); 318 day=date.day();
315 // ----- construct a valid date in this month: 319 // ----- construct a valid date in this month:
316 date.setYMD(date.year(), month, 1); 320 date.setYMD(date.year(), month, 1);
317 date.setYMD(date.year(), month, QMIN(day, date.daysInMonth())); 321 date.setYMD(date.year(), month, QMIN(day, date.daysInMonth()));
318 // ----- set this month 322 // ----- set this month
319 setDate(date); 323 setDate(date);
320 } else { 324 } else {
321 KNotifyClient::beep(); 325 KNotifyClient::beep();
322 } 326 }
323 delete popup; 327 delete popup;
324} 328}
325 329
326void 330void
327KDatePicker::selectYearClicked() 331KDatePicker::selectYearClicked()
328{ 332{
329 int year; 333 int year;
330 KPopupFrame* popup = new KPopupFrame(this); 334 KPopupFrame* popup = new KPopupFrame(this);
331 KDateInternalYearSelector* picker = new KDateInternalYearSelector(fontsize, popup); 335 KDateInternalYearSelector* picker = new KDateInternalYearSelector(fontsize, popup);
332 // ----- 336 // -----
333 picker->resize(picker->sizeHint()); 337 picker->resize(picker->sizeHint());
334 popup->setMainWidget(picker); 338 popup->setMainWidget(picker);
335 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); 339 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
336 picker->setFocus(); 340 picker->setFocus();
337 if(popup->exec(selectYear->mapToGlobal(QPoint(0, selectMonth->height())))) 341 if(popup->exec(selectYear->mapToGlobal(QPoint(0, selectMonth->height()))))
338 { 342 {
339 QDate date; 343 QDate date;
340 int day; 344 int day;
341 // ----- 345 // -----
342 year=picker->getYear(); 346 year=picker->getYear();
343 date=table->getDate(); 347 date=table->getDate();
344 day=date.day(); 348 day=date.day();
345 // ----- construct a valid date in this month: 349 // ----- construct a valid date in this month:
346 date.setYMD(year, date.month(), 1); 350 date.setYMD(year, date.month(), 1);
347 date.setYMD(year, date.month(), QMIN(day, date.daysInMonth())); 351 date.setYMD(year, date.month(), QMIN(day, date.daysInMonth()));
348 // ----- set this month 352 // ----- set this month
349 setDate(date); 353 setDate(date);
350 } else { 354 } else {
351 KNotifyClient::beep(); 355 KNotifyClient::beep();
352 } 356 }
353 delete popup; 357 delete popup;
354} 358}
355 359
356void 360void
357KDatePicker::setEnabled(bool enable) 361KDatePicker::setEnabled(bool enable)
358{ 362{
359 QWidget *widgets[]= { 363 QWidget *widgets[]= {
360 yearForward, yearBackward, monthForward, monthBackward, 364 yearForward, yearBackward, monthForward, monthBackward,
361 selectMonth, selectYear, 365 selectMonth, selectYear,
362 lineDate, table }; 366 lineDate, table };
363 const int Size=sizeof(widgets)/sizeof(widgets[0]); 367 const int Size=sizeof(widgets)/sizeof(widgets[0]);
364 int count; 368 int count;
365 // ----- 369 // -----
366 for(count=0; count<Size; ++count) 370 for(count=0; count<Size; ++count)
367 { 371 {
368 widgets[count]->setEnabled(enable); 372 widgets[count]->setEnabled(enable);
369 } 373 }
370} 374}
371 375
372void 376void
373KDatePicker::lineEnterPressed() 377KDatePicker::lineEnterPressed()
374{ 378{
375 QDate temp; 379 QDate temp;
376 // ----- 380 // -----
377 temp = lineDate->date(); 381 temp = lineDate->date();
378 //if(val->date(line->text(), temp)==QValidator::Acceptable) 382 //if(val->date(line->text(), temp)==QValidator::Acceptable)
379 //{ 383 //{
380 emit(dateEntered(temp)); 384 emit(dateEntered(temp));
381 setDate(temp); 385 setDate(temp);
382 // } else { 386 // } else {
383// KNotifyClient::beep(); 387// KNotifyClient::beep();
384// } 388// }
385} 389}
386 390
387QSize 391QSize
388KDatePicker::sizeHint() const 392KDatePicker::sizeHint() const
389{ 393{
390 QSize tableSize=table->sizeHint(); 394 QSize tableSize=table->sizeHint();
391 QWidget *buttons[]={ 395 QWidget *buttons[]={
392 yearBackward, 396 yearBackward,
393 monthBackward, 397 monthBackward,
394 selectMonth, 398 selectMonth,
395 selectYear, 399 selectYear,
396 monthForward, 400 monthForward,
397 yearForward }; 401 yearForward };
398 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]); 402 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
399 QSize sizes[NoOfButtons]; 403 QSize sizes[NoOfButtons];
400 int cx=0, cy=0, count; 404 int cx=0, cy=0, count;
401 // ----- store the size hints: 405 // ----- store the size hints:
402 for(count=0; count<NoOfButtons; ++count) 406 for(count=0; count<NoOfButtons; ++count)
403 { 407 {
404 sizes[count]=buttons[count]->sizeHint(); 408 sizes[count]=buttons[count]->sizeHint();
405 if(buttons[count]==selectMonth) 409 if(buttons[count]==selectMonth)
406 { 410 {
407 cx+=maxMonthRect.width()+15; 411 cx+=maxMonthRect.width()+15;
408 } else { 412 } else {
409 cx+=sizes[count].width()+15; 413 cx+=sizes[count].width()+15;
410 } 414 }
411 cy=QMAX(sizes[count].height(), cy); 415 cy=QMAX(sizes[count].height(), cy);
412 } 416 }
413 // ----- calculate width hint: 417 // ----- calculate width hint:
414 cx=QMAX(cx, tableSize.width()); // line edit ignored 418 cx=QMAX(cx, tableSize.width()); // line edit ignored
415 if ( cx > QApplication::desktop()->width() -5 ) 419 if ( cx > QApplication::desktop()->width() -5 )
416 cx = QApplication::desktop()->width() -5; 420 cx = QApplication::desktop()->width() -5;
417 // ----- calculate height hint: 421 // ----- calculate height hint:
418 cy+=tableSize.height()+lineDate->sizeHint().height(); 422 cy+=tableSize.height()+lineDate->sizeHint().height();
419 423
420 return QSize(cx, cy); 424 return QSize(cx, cy);
421} 425}
422 426
423void 427void
424KDatePicker::setFontSize(int s) 428KDatePicker::setFontSize(int s)
425{ 429{
426 QWidget *buttons[]= { 430 QWidget *buttons[]= {
427 // yearBackward, 431 // yearBackward,
428 // monthBackward, 432 // monthBackward,
429 selectMonth, 433 selectMonth,
430 selectYear, 434 selectYear,
431 // monthForward, 435 // monthForward,
432 // yearForward 436 // yearForward
433 }; 437 };
434 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]); 438 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
435 int count; 439 int count;
436 QFont font; 440 QFont font;
437 QRect r; 441 QRect r;
438 // ----- 442 // -----
439 fontsize=s; 443 fontsize=s;
440 for(count=0; count<NoOfButtons; ++count) 444 for(count=0; count<NoOfButtons; ++count)
441 { 445 {
442 font=buttons[count]->font(); 446 font=buttons[count]->font();
443 font.setPointSize(s); 447 font.setPointSize(s);
444 buttons[count]->setFont(font); 448 buttons[count]->setFont(font);
445 } 449 }
446 QFontMetrics metrics(selectMonth->fontMetrics()); 450 QFontMetrics metrics(selectMonth->fontMetrics());
447 for(int i=1; i <= 12; ++i) 451 for(int i=1; i <= 12; ++i)
448 { // maxMonthRect is used by sizeHint() 452 { // maxMonthRect is used by sizeHint()
449 r=metrics.boundingRect(KGlobal::locale()->monthName(i, false)); 453 r=metrics.boundingRect(KGlobal::locale()->monthName(i, false));
450 maxMonthRect.setWidth(QMAX(r.width(), maxMonthRect.width())); 454 maxMonthRect.setWidth(QMAX(r.width(), maxMonthRect.width()));
451 maxMonthRect.setHeight(QMAX(r.height(), maxMonthRect.height())); 455 maxMonthRect.setHeight(QMAX(r.height(), maxMonthRect.height()));
452 } 456 }
453 table->setFontSize(s); 457 table->setFontSize(s);
454} 458}
455 459
456void KDatePicker::virtual_hook( int id, void* data ) 460void KDatePicker::virtual_hook( int id, void* data )
457{ /*BASE::virtual_hook( id, data );*/ } 461{ /*BASE::virtual_hook( id, data );*/ }
458 462
459void KDatePicker::keyPressEvent ( QKeyEvent * e ) 463void KDatePicker::keyPressEvent ( QKeyEvent * e )
460{ 464{
461 switch ( e->key() ) { 465 switch ( e->key() ) {
462 case Qt::Key_Right: 466 case Qt::Key_Right:
463 monthForwardClicked(); 467 monthForwardClicked();
464 break; 468 break;
465 case Qt::Key_Left: 469 case Qt::Key_Left:
466 monthBackwardClicked(); 470 monthBackwardClicked();
467 break; 471 break;
468 472
469 case Qt::Key_Down: 473 case Qt::Key_Down:
470 yearForwardClicked(); 474 yearForwardClicked();
471 475
472 break; 476 break;
473 477
474 case Qt::Key_Up: 478 case Qt::Key_Up:
475 yearBackwardClicked(); 479 yearBackwardClicked();
476 break; 480 break;
477 481
482 case Qt::Key_T:
483 goToday();
484 break;
485
478 case Qt::Key_Return: 486 case Qt::Key_Return:
479 case Qt::Key_Enter: 487 case Qt::Key_Enter:
480 case Qt::Key_Space: 488 case Qt::Key_Space:
481 tableClickedSlot(); 489 tableClickedSlot();
482 break; 490 break;
483 case Qt::Key_Escape: 491 case Qt::Key_Escape:
484 e->ignore(); 492 e->ignore();
485 break; 493 break;
486 default: 494 default:
487 break; 495 break;
488 } 496 }
489 497
490} 498}
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index 4271b55..353f78d 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -1,795 +1,783 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 This file is part of the KDE libraries 2 This file is part of the KDE libraries
3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org) 3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
4 (C) 1998-2001 Mirko Boehm (mirko@kde.org) 4 (C) 1998-2001 Mirko Boehm (mirko@kde.org)
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 20
21/////////////////// KDateTable widget class ////////////////////// 21/////////////////// KDateTable widget class //////////////////////
22// 22//
23// Copyright (C) 1997 Tim D. Gilman 23// Copyright (C) 1997 Tim D. Gilman
24// (C) 1998-2001 Mirko Boehm 24// (C) 1998-2001 Mirko Boehm
25// Written using Qt (http://www.troll.no) for the 25// Written using Qt (http://www.troll.no) for the
26// KDE project (http://www.kde.org) 26// KDE project (http://www.kde.org)
27// 27//
28// This is a support class for the KDatePicker class. It just 28// This is a support class for the KDatePicker class. It just
29// draws the calender table without titles, but could theoretically 29// draws the calender table without titles, but could theoretically
30// be used as a standalone. 30// be used as a standalone.
31// 31//
32// When a date is selected by the user, it emits a signal: 32// When a date is selected by the user, it emits a signal:
33// dateSelected(QDate) 33// dateSelected(QDate)
34 34
35#include <kglobal.h> 35#include <kglobal.h>
36#include <kglobalsettings.h> 36#include <kglobalsettings.h>
37#include <kapplication.h> 37#include <kapplication.h>
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <knotifyclient.h> 40#include <knotifyclient.h>
41#include "kdatetbl.h" 41#include "kdatetbl.h"
42#include <qdatetime.h> 42#include <qdatetime.h>
43#include <qstring.h> 43#include <qstring.h>
44#include <qpen.h> 44#include <qpen.h>
45#include <qpainter.h> 45#include <qpainter.h>
46#include <qdialog.h> 46#include <qdialog.h>
47#include <assert.h> 47#include <assert.h>
48#include <qapplication.h> 48#include <qapplication.h>
49 49
50KDateValidator::KDateValidator(QWidget* parent, const char* name) 50KDateValidator::KDateValidator(QWidget* parent, const char* name)
51 : QValidator(parent, name) 51 : QValidator(parent, name)
52{ 52{
53} 53}
54 54
55QValidator::State 55QValidator::State
56KDateValidator::validate(QString& text, int&) const 56KDateValidator::validate(QString& text, int&) const
57{ 57{
58 QDate temp; 58 QDate temp;
59 // ----- everything is tested in date(): 59 // ----- everything is tested in date():
60 return date(text, temp); 60 return date(text, temp);
61} 61}
62 62
63QValidator::State 63QValidator::State
64KDateValidator::date(const QString& text, QDate& d) const 64KDateValidator::date(const QString& text, QDate& d) const
65{ 65{
66 QDate tmp = KGlobal::locale()->readDate(text); 66 QDate tmp = KGlobal::locale()->readDate(text);
67 if (!tmp.isNull()) 67 if (!tmp.isNull())
68 { 68 {
69 d = tmp; 69 d = tmp;
70 return Acceptable; 70 return Acceptable;
71 } else 71 } else
72 return Valid; 72 return Valid;
73} 73}
74 74
75void 75void
76KDateValidator::fixup( QString& ) const 76KDateValidator::fixup( QString& ) const
77{ 77{
78 78
79} 79}
80 80
81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f) 81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f)
82 : QGridView(parent, name, f) 82 : QGridView(parent, name, f)
83{ 83{
84 setFont( KGlobalSettings::generalFont() ); 84 setFont( KGlobalSettings::generalFont() );
85 if(!date_.isValid()) 85 if(!date_.isValid())
86 { 86 {
87 date_=QDate::currentDate(); 87 date_=QDate::currentDate();
88 } 88 }
89 setFocusPolicy( QWidget::StrongFocus ); 89 setFocusPolicy( QWidget::StrongFocus );
90 setNumRows(7); // 6 weeks max + headline 90 setNumRows(7); // 6 weeks max + headline
91 setNumCols(7); // 7 days a week 91 setNumCols(7); // 7 days a week
92 setHScrollBarMode(AlwaysOff); 92 setHScrollBarMode(AlwaysOff);
93 setVScrollBarMode(AlwaysOff); 93 setVScrollBarMode(AlwaysOff);
94 viewport()->setBackgroundColor(QColor(220,245,255)); 94 viewport()->setBackgroundColor(QColor(220,245,255));
95#if 0 95#if 0
96 viewport()->setEraseColor(lightGray); 96 viewport()->setEraseColor(lightGray);
97#endif 97#endif
98 mMarkCurrent = false; 98 mMarkCurrent = false;
99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth 99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth
100} 100}
101 101
102void 102void
103KDateTable::paintCell(QPainter *painter, int row, int col) 103KDateTable::paintCell(QPainter *painter, int row, int col)
104{ 104{
105 QRect rect; 105 QRect rect;
106 QString text; 106 QString text;
107 QPen pen; 107 QPen pen;
108 int w=cellWidth(); 108 int w=cellWidth();
109 int h=cellHeight(); 109 int h=cellHeight();
110 int pos; 110 int pos;
111 QBrush brushBlue(blue); 111 QBrush brushBlue(blue);
112 QBrush brushLightblue(QColor(220,245,255)); 112 QBrush brushLightblue(QColor(220,245,255));
113 QFont _font=font(); 113 QFont _font=font();
114 // ----- 114 // -----
115 if(row==0) 115 if(row==0)
116 { // we are drawing the headline 116 { // we are drawing the headline
117 _font.setBold(true); 117 _font.setBold(true);
118 painter->setFont(_font); 118 painter->setFont(_font);
119 bool normalday = true; 119 bool normalday = true;
120 QString daystr; 120 QString daystr;
121 if (KGlobal::locale()->weekStartsMonday()) 121 if (KGlobal::locale()->weekStartsMonday())
122 { 122 {
123 daystr = KGlobal::locale()->weekDayName(col+1, true); 123 daystr = KGlobal::locale()->weekDayName(col+1, true);
124 if (col == 5 || col == 6) 124 if (col == 5 || col == 6)
125 normalday = false; 125 normalday = false;
126 } else { 126 } else {
127 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true); 127 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true);
128 if (col == 0 || col == 6) 128 if (col == 0 || col == 6)
129 normalday = false; 129 normalday = false;
130 } 130 }
131 if (!normalday) 131 if (!normalday)
132 { 132 {
133 painter->setPen(QColor(220,245,255)); 133 painter->setPen(QColor(220,245,255));
134 painter->setBrush(brushLightblue); 134 painter->setBrush(brushLightblue);
135 painter->drawRect(0, 0, w, h); 135 painter->drawRect(0, 0, w, h);
136 painter->setPen(blue); 136 painter->setPen(blue);
137 } else { 137 } else {
138 painter->setPen(blue); 138 painter->setPen(blue);
139 painter->setBrush(brushBlue); 139 painter->setBrush(brushBlue);
140 painter->drawRect(0, 0, w, h); 140 painter->drawRect(0, 0, w, h);
141 painter->setPen(white); 141 painter->setPen(white);
142 } 142 }
143 painter->drawText(0, 0, w, h-1, AlignCenter, 143 painter->drawText(0, 0, w, h-1, AlignCenter,
144 daystr, -1, &rect); 144 daystr, -1, &rect);
145 painter->setPen(black); 145 painter->setPen(black);
146 painter->moveTo(0, h-1); 146 painter->moveTo(0, h-1);
147 painter->lineTo(w-1, h-1); 147 painter->lineTo(w-1, h-1);
148 // ----- draw the weekday: 148 // ----- draw the weekday:
149 } else { 149 } else {
150 painter->setFont(_font); 150 painter->setFont(_font);
151 pos=7*(row-1)+col; 151 pos=7*(row-1)+col;
152 if (KGlobal::locale()->weekStartsMonday()) 152 if (KGlobal::locale()->weekStartsMonday())
153 pos++; 153 pos++;
154 if(pos<firstday || (firstday+numdays<=pos)) 154 if(pos<firstday || (firstday+numdays<=pos))
155 { // we are either 155 { // we are either
156 // ° painting a day of the previous month or 156 // ° painting a day of the previous month or
157 // ° painting a day of the following month 157 // ° painting a day of the following month
158 if(pos<firstday) 158 if(pos<firstday)
159 { // previous month 159 { // previous month
160 text.setNum(numDaysPrevMonth+pos-firstday+1); 160 text.setNum(numDaysPrevMonth+pos-firstday+1);
161 } else { // following month 161 } else { // following month
162 text.setNum(pos-firstday-numdays+1); 162 text.setNum(pos-firstday-numdays+1);
163 } 163 }
164 painter->setPen(gray); 164 painter->setPen(gray);
165 } else { // paint a day of the current month 165 } else { // paint a day of the current month
166 text.setNum(pos-firstday+1); 166 text.setNum(pos-firstday+1);
167 painter->setPen(black); 167 painter->setPen(black);
168 } 168 }
169 169
170 pen=painter->pen(); 170 pen=painter->pen();
171 if(firstday+date.day()-1==pos) 171 if(firstday+date.day()-1==pos)
172 { 172 {
173 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 173 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
174 painter->setPen(green); 174 painter->setPen(green);
175 else 175 else
176 painter->setPen(red); 176 painter->setPen(red);
177 if(hasFocus()) 177 if(hasFocus())
178 { 178 {
179 painter->setBrush(darkRed); 179 painter->setBrush(darkRed);
180 pen=white; 180 pen=white;
181 } else { 181 } else {
182 painter->setBrush(darkGray); 182 painter->setBrush(darkGray);
183 pen=white; 183 pen=white;
184 } 184 }
185 } else { 185 } else {
186 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 186 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
187 { 187 {
188 painter->setPen(green); 188 painter->setPen(green);
189 painter->setBrush(darkGreen); 189 painter->setBrush(darkGreen);
190 pen=white; 190 pen=white;
191 } else { 191 } else {
192 painter->setBrush(QColor(220,245,255)); 192 painter->setBrush(QColor(220,245,255));
193 painter->setPen(QColor(220,245,255)); 193 painter->setPen(QColor(220,245,255));
194 } 194 }
195 } 195 }
196 painter->drawRect(0, 0, w, h); 196 painter->drawRect(0, 0, w, h);
197 painter->setPen(pen); 197 painter->setPen(pen);
198 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect); 198 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect);
199 } 199 }
200 /* 200 /*
201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width()); 201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width());
202 if(rect.height()>maxCell.height()) { 202 if(rect.height()>maxCell.height()) {
203 maxCell.setHeight(rect.height()); 203 maxCell.setHeight(rect.height());
204 } 204 }
205 */ 205 */
206} 206}
207 207
208void 208void
209KDateTable::keyPressEvent( QKeyEvent *e ) 209KDateTable::keyPressEvent( QKeyEvent *e )
210{ 210{
211 /* 211 /*
212 // not working properly 212 // not working properly
213 if ( e->key() == Qt::Key_Prior ) { 213 if ( e->key() == Qt::Key_Prior ) {
214 if ( date.month() == 1 ) { 214 if ( date.month() == 1 ) {
215 KNotifyClient::beep(); 215 KNotifyClient::beep();
216 return; 216 return;
217 } 217 }
218 int day = date.day(); 218 int day = date.day();
219 if ( day > 27 ) 219 if ( day > 27 )
220 while ( !QDate::isValid( date.year(), date.month()-1, day ) ) 220 while ( !QDate::isValid( date.year(), date.month()-1, day ) )
221 day--; 221 day--;
222 setDate(QDate(date.year(), date.month()-1, day)); 222 setDate(QDate(date.year(), date.month()-1, day));
223 return; 223 return;
224 } 224 }
225 if ( e->key() == Qt::Key_Next ) { 225 if ( e->key() == Qt::Key_Next ) {
226 if ( date.month() == 12 ) { 226 if ( date.month() == 12 ) {
227 KNotifyClient::beep(); 227 KNotifyClient::beep();
228 return; 228 return;
229 } 229 }
230 int day = date.day(); 230 int day = date.day();
231 if ( day > 27 ) 231 if ( day > 27 )
232 while ( !QDate::isValid( date.year(), date.month()+1, day ) ) 232 while ( !QDate::isValid( date.year(), date.month()+1, day ) )
233 day--; 233 day--;
234 setDate(QDate(date.year(), date.month()+1, day)); 234 setDate(QDate(date.year(), date.month()+1, day));
235 return; 235 return;
236 } 236 }
237 */ 237 */
238 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 238 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
239 239
240 int temp=firstday+date.day()-dayoff; 240 int temp=firstday+date.day()-dayoff;
241 int pos = temp; 241 int pos = temp;
242 bool irgnore = true; 242 bool irgnore = true;
243 int add = 0;
243 if ( e->state() != Qt::ControlButton ) { 244 if ( e->state() != Qt::ControlButton ) {
244 if ( e->key() == Qt::Key_Up ) { 245 if ( e->key() == Qt::Key_Up ) {
245 pos -= 7; 246 add -= 7;
246 irgnore = false; 247 irgnore = false;
247 } 248 }
248 if ( e->key() == Qt::Key_Down ) { 249 if ( e->key() == Qt::Key_Down ) {
249 pos += 7; 250 add += 7;
250 irgnore = false; 251 irgnore = false;
251 } 252 }
252 if ( e->key() == Qt::Key_Left ) { 253 if ( e->key() == Qt::Key_Left ) {
253 pos--; 254 --add;
254 irgnore = false; 255 irgnore = false;
255 } 256 }
256 if ( e->key() == Qt::Key_Right ) { 257 if ( e->key() == Qt::Key_Right ) {
257 pos++; 258 ++add;
258 irgnore = false; 259 irgnore = false;
259 } 260 }
260 } 261 }
261 if ( irgnore ) 262 if ( irgnore ) {
262 e->ignore(); 263 e->ignore();
263
264 if(pos+dayoff<=firstday)
265 { // this day is in the previous month
266 KNotifyClient::beep();
267 return;
268 }
269 if(firstday+numdays<pos+dayoff)
270 { // this date is in the next month
271 KNotifyClient::beep(i18n( "Month not long enough" ));
272 return;
273 }
274
275 if ( pos == temp )
276 return; 264 return;
265 }
277 266
278 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 267 pos += add;
268 setDate(date.addDays( add ));
279 updateCell(temp/7+1, temp%7); // Update the previously selected cell 269 updateCell(temp/7+1, temp%7); // Update the previously selected cell
280 updateCell(pos/7+1, pos%7); // Update the selected cell 270 updateCell(pos/7+1, pos%7); // Update the selected cell
281 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 271
282
283
284} 272}
285 273
286void 274void
287KDateTable::viewportResizeEvent(QResizeEvent * e) 275KDateTable::viewportResizeEvent(QResizeEvent * e)
288{ 276{
289 QGridView::viewportResizeEvent(e); 277 QGridView::viewportResizeEvent(e);
290 278
291 setCellWidth(viewport()->width()/7); 279 setCellWidth(viewport()->width()/7);
292 setCellHeight(viewport()->height()/7); 280 setCellHeight(viewport()->height()/7);
293} 281}
294 282
295void 283void
296KDateTable::setFontSize(int size) 284KDateTable::setFontSize(int size)
297{ 285{
298 int count; 286 int count;
299 QRect rect; 287 QRect rect;
300 // ----- store rectangles: 288 // ----- store rectangles:
301 fontsize=size; 289 fontsize=size;
302 QFont _font = font(); 290 QFont _font = font();
303 _font.setPointSize(fontsize); 291 _font.setPointSize(fontsize);
304 setFont( _font ); 292 setFont( _font );
305 _font.setBold( true ); 293 _font.setBold( true );
306 QFontMetrics metrics(_font); 294 QFontMetrics metrics(_font);
307 295
308 // ----- find largest day name: 296 // ----- find largest day name:
309 maxCell.setWidth(0); 297 maxCell.setWidth(0);
310 maxCell.setHeight(0); 298 maxCell.setHeight(0);
311 for(count=0; count<7; ++count) 299 for(count=0; count<7; ++count)
312 { 300 {
313 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true)); 301 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true));
314 maxCell.setWidth(QMAX(maxCell.width(), rect.width())); 302 maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
315 maxCell.setHeight(QMAX(maxCell.height(), rect.height())); 303 maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
316 } 304 }
317 // ----- compare with a real wide number and add some space: 305 // ----- compare with a real wide number and add some space:
318 rect=metrics.boundingRect(QString::fromLatin1("88")); 306 rect=metrics.boundingRect(QString::fromLatin1("88"));
319 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); 307 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
320#ifdef DESKTOP_VERSION 308#ifdef DESKTOP_VERSION
321 maxCell.setHeight(QMAX(maxCell.height()+8, rect.height())); 309 maxCell.setHeight(QMAX(maxCell.height()+8, rect.height()));
322#else 310#else
323 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); 311 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
324#endif 312#endif
325 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) { 313 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) {
326 maxCell.setHeight(maxCell.width() * 1000 / 1900 ); 314 maxCell.setHeight(maxCell.width() * 1000 / 1900 );
327 //qDebug("setmax "); 315 //qDebug("setmax ");
328 } 316 }
329} 317}
330 318
331void 319void
332KDateTable::contentsMousePressEvent(QMouseEvent *e) 320KDateTable::contentsMousePressEvent(QMouseEvent *e)
333{ 321{
334 if(e->type()!=QEvent::MouseButtonPress) 322 if(e->type()!=QEvent::MouseButtonPress)
335 { // the KDatePicker only reacts on mouse press events: 323 { // the KDatePicker only reacts on mouse press events:
336 return; 324 return;
337 } 325 }
338 if(!isEnabled()) 326 if(!isEnabled())
339 { 327 {
340 KNotifyClient::beep(); 328 KNotifyClient::beep();
341 return; 329 return;
342 } 330 }
343 331
344 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 332 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
345 // ----- 333 // -----
346 int row, col, pos, temp; 334 int row, col, pos, temp;
347 QPoint mouseCoord; 335 QPoint mouseCoord;
348 // ----- 336 // -----
349 mouseCoord = e->pos(); 337 mouseCoord = e->pos();
350 row=rowAt(mouseCoord.y()); 338 row=rowAt(mouseCoord.y());
351 col=columnAt(mouseCoord.x()); 339 col=columnAt(mouseCoord.x());
352 if(row<0 || col<0) 340 if(row<0 || col<0)
353 { // the user clicked on the frame of the table 341 { // the user clicked on the frame of the table
354 return; 342 return;
355 } 343 }
356 pos=7*(row-1)+col+1; 344 pos=7*(row-1)+col+1;
357#if 0 345#if 0
358 if(pos+dayoff<=firstday) 346 if(pos+dayoff<=firstday)
359 { // this day is in the previous month 347 { // this day is in the previous month
360 KNotifyClient::beep(); 348 KNotifyClient::beep();
361 return; 349 return;
362 } 350 }
363 if(firstday+numdays<pos+dayoff) 351 if(firstday+numdays<pos+dayoff)
364 { // this date is in the next month 352 { // this date is in the next month
365 KNotifyClient::beep(); 353 KNotifyClient::beep();
366 return; 354 return;
367 } 355 }
368#endif 356#endif
369 temp=firstday+date.day()-dayoff-1; 357 temp=firstday+date.day()-dayoff-1;
370 QDate da = QDate(date.year(), date.month(),1); 358 QDate da = QDate(date.year(), date.month(),1);
371 setDate(da.addDays( pos-firstday+dayoff-1)); 359 setDate(da.addDays( pos-firstday+dayoff-1));
372 updateCell(temp/7+1, temp%7); // Update the previously selected cell 360 updateCell(temp/7+1, temp%7); // Update the previously selected cell
373 updateCell(row, col); // Update the selected cell 361 updateCell(row, col); // Update the selected cell
374 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 362 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
375 emit(tableClicked()); 363 emit(tableClicked());
376} 364}
377 365
378bool 366bool
379KDateTable::setDate(const QDate& date_) 367KDateTable::setDate(const QDate& date_)
380{ 368{
381 bool changed=false; 369 bool changed=false;
382 QDate temp; 370 QDate temp;
383 mMarkCurrent = false; 371 mMarkCurrent = false;
384 // ----- 372 // -----
385 if(!date_.isValid()) 373 if(!date_.isValid())
386 { 374 {
387 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; 375 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl;
388 return false; 376 return false;
389 } 377 }
390 if(date!=date_) 378 if(date!=date_)
391 { 379 {
392 date=date_; 380 date=date_;
393 changed=true; 381 changed=true;
394 } 382 }
395 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() ); 383 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() );
396 temp.setYMD(date.year(), date.month(), 1); 384 temp.setYMD(date.year(), date.month(), 1);
397 firstday=temp.dayOfWeek(); 385 firstday=temp.dayOfWeek();
398 if(firstday==1) firstday=8; 386 if(firstday==1) firstday=8;
399 numdays=date.daysInMonth(); 387 numdays=date.daysInMonth();
400 if(date.month()==1) 388 if(date.month()==1)
401 { // set to december of previous year 389 { // set to december of previous year
402 temp.setYMD(date.year()-1, 12, 1); 390 temp.setYMD(date.year()-1, 12, 1);
403 } else { // set to previous month 391 } else { // set to previous month
404 temp.setYMD(date.year(), date.month()-1, 1); 392 temp.setYMD(date.year(), date.month()-1, 1);
405 } 393 }
406 numDaysPrevMonth=temp.daysInMonth(); 394 numDaysPrevMonth=temp.daysInMonth();
407 if(changed) 395 if(changed)
408 { 396 {
409 repaintContents(false); 397 repaintContents(false);
410 } 398 }
411 emit(dateChanged(date)); 399 emit(dateChanged(date));
412 return true; 400 return true;
413} 401}
414 402
415const QDate& 403const QDate&
416KDateTable::getDate() const 404KDateTable::getDate() const
417{ 405{
418 return date; 406 return date;
419} 407}
420 408
421void KDateTable::focusInEvent( QFocusEvent *e ) 409void KDateTable::focusInEvent( QFocusEvent *e )
422{ 410{
423 repaintContents(false); 411 repaintContents(false);
424 QGridView::focusInEvent( e ); 412 QGridView::focusInEvent( e );
425} 413}
426 414
427void KDateTable::focusOutEvent( QFocusEvent *e ) 415void KDateTable::focusOutEvent( QFocusEvent *e )
428{ 416{
429 repaintContents(false); 417 repaintContents(false);
430 QGridView::focusOutEvent( e ); 418 QGridView::focusOutEvent( e );
431} 419}
432 420
433QSize 421QSize
434KDateTable::sizeHint() const 422KDateTable::sizeHint() const
435{ 423{
436 if(maxCell.height()>0 && maxCell.width()>0) 424 if(maxCell.height()>0 && maxCell.width()>0)
437 { 425 {
438 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(), 426 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(),
439 (maxCell.height()+4)*numRows()+2*frameWidth()); 427 (maxCell.height()+4)*numRows()+2*frameWidth());
440 } else { 428 } else {
441 return QSize(-1, -1); 429 return QSize(-1, -1);
442 } 430 }
443} 431}
444 432
445KDateInternalMonthPicker::KDateInternalMonthPicker 433KDateInternalMonthPicker::KDateInternalMonthPicker
446(QWidget* parent, const char* name) 434(QWidget* parent, const char* name)
447 : QGridView(parent, name), 435 : QGridView(parent, name),
448 result(0) // invalid 436 result(0) // invalid
449{ 437{
450 QRect rect; 438 QRect rect;
451 QFont font; 439 QFont font;
452 // ----- 440 // -----
453 activeCol = -1; 441 activeCol = -1;
454 activeRow = -1; 442 activeRow = -1;
455 font=KGlobalSettings::generalFont(); 443 font=KGlobalSettings::generalFont();
456 int fontsize = 10; 444 int fontsize = 10;
457 int add = 2; 445 int add = 2;
458 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 ) 446 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 )
459 add += 8; 447 add += 8;
460 if ( QApplication::desktop()->width() > 640 ) 448 if ( QApplication::desktop()->width() > 640 )
461 add += 6; 449 add += 6;
462 font.setPointSize(fontsize+add); 450 font.setPointSize(fontsize+add);
463 setFont(font); 451 setFont(font);
464 setHScrollBarMode(AlwaysOff); 452 setHScrollBarMode(AlwaysOff);
465 setVScrollBarMode(AlwaysOff); 453 setVScrollBarMode(AlwaysOff);
466 setFrameStyle(QFrame::NoFrame); 454 setFrameStyle(QFrame::NoFrame);
467 setNumRows(4); 455 setNumRows(4);
468 setNumCols(3); 456 setNumCols(3);
469 // enable to find drawing failures: 457 // enable to find drawing failures:
470 // setTableFlags(Tbl_clipCellPainting); 458 // setTableFlags(Tbl_clipCellPainting);
471#if 0 459#if 0
472 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 460 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
473#endif 461#endif
474 // ----- find the preferred size 462 // ----- find the preferred size
475 // (this is slow, possibly, but unfortunatly it is needed here): 463 // (this is slow, possibly, but unfortunatly it is needed here):
476 QFontMetrics metrics(font); 464 QFontMetrics metrics(font);
477 for(int i=1; i <= 12; ++i) 465 for(int i=1; i <= 12; ++i)
478 { 466 {
479 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false)); 467 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false));
480 if(max.width()<rect.width()) max.setWidth(rect.width()); 468 if(max.width()<rect.width()) max.setWidth(rect.width());
481 if(max.height()<rect.height()) max.setHeight(rect.height()); 469 if(max.height()<rect.height()) max.setHeight(rect.height());
482 } 470 }
483 471
484} 472}
485 473
486QSize 474QSize
487KDateInternalMonthPicker::sizeHint() const 475KDateInternalMonthPicker::sizeHint() const
488{ 476{
489 return QSize((max.width()+6)*numCols()+2*frameWidth(), 477 return QSize((max.width()+6)*numCols()+2*frameWidth(),
490 (max.height()+6)*numRows()+2*frameWidth()); 478 (max.height()+6)*numRows()+2*frameWidth());
491} 479}
492 480
493int 481int
494KDateInternalMonthPicker::getResult() const 482KDateInternalMonthPicker::getResult() const
495{ 483{
496 return result; 484 return result;
497} 485}
498 486
499void 487void
500KDateInternalMonthPicker::setupPainter(QPainter *p) 488KDateInternalMonthPicker::setupPainter(QPainter *p)
501{ 489{
502 p->setPen(black); 490 p->setPen(black);
503} 491}
504 492
505void 493void
506KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*) 494KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*)
507{ 495{
508 setCellWidth(width()/3); 496 setCellWidth(width()/3);
509 setCellHeight(height()/4); 497 setCellHeight(height()/4);
510} 498}
511 499
512void 500void
513KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col) 501KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col)
514{ 502{
515 int index; 503 int index;
516 QString text; 504 QString text;
517 // ----- find the number of the cell: 505 // ----- find the number of the cell:
518 index=3*row+col+1; 506 index=3*row+col+1;
519 text=KGlobal::locale()->monthName(index, false); 507 text=KGlobal::locale()->monthName(index, false);
520 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); 508 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
521 if ( activeCol == col && activeRow == row ) 509 if ( activeCol == col && activeRow == row )
522 painter->drawRect( 0, 0, cellWidth(), cellHeight() ); 510 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
523} 511}
524 512
525void 513void
526KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e) 514KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e)
527{ 515{
528 if(!isEnabled() || e->button() != LeftButton) 516 if(!isEnabled() || e->button() != LeftButton)
529 { 517 {
530 KNotifyClient::beep(); 518 KNotifyClient::beep();
531 return; 519 return;
532 } 520 }
533 // ----- 521 // -----
534 int row, col; 522 int row, col;
535 QPoint mouseCoord; 523 QPoint mouseCoord;
536 // ----- 524 // -----
537 mouseCoord = e->pos(); 525 mouseCoord = e->pos();
538 row=rowAt(mouseCoord.y()); 526 row=rowAt(mouseCoord.y());
539 col=columnAt(mouseCoord.x()); 527 col=columnAt(mouseCoord.x());
540 528
541 if(row<0 || col<0) 529 if(row<0 || col<0)
542 { // the user clicked on the frame of the table 530 { // the user clicked on the frame of the table
543 activeCol = -1; 531 activeCol = -1;
544 activeRow = -1; 532 activeRow = -1;
545 } else { 533 } else {
546 activeCol = col; 534 activeCol = col;
547 activeRow = row; 535 activeRow = row;
548 updateCell( row, col /*, false */ ); 536 updateCell( row, col /*, false */ );
549 } 537 }
550} 538}
551 539
552void 540void
553KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e) 541KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e)
554{ 542{
555 if (e->state() & LeftButton) 543 if (e->state() & LeftButton)
556 { 544 {
557 int row, col; 545 int row, col;
558 QPoint mouseCoord; 546 QPoint mouseCoord;
559 // ----- 547 // -----
560 mouseCoord = e->pos(); 548 mouseCoord = e->pos();
561 row=rowAt(mouseCoord.y()); 549 row=rowAt(mouseCoord.y());
562 col=columnAt(mouseCoord.x()); 550 col=columnAt(mouseCoord.x());
563 int tmpRow = -1, tmpCol = -1; 551 int tmpRow = -1, tmpCol = -1;
564 if(row<0 || col<0) 552 if(row<0 || col<0)
565 { // the user clicked on the frame of the table 553 { // the user clicked on the frame of the table
566 if ( activeCol > -1 ) 554 if ( activeCol > -1 )
567 { 555 {
568 tmpRow = activeRow; 556 tmpRow = activeRow;
569 tmpCol = activeCol; 557 tmpCol = activeCol;
570 } 558 }
571 activeCol = -1; 559 activeCol = -1;
572 activeRow = -1; 560 activeRow = -1;
573 } else { 561 } else {
574 bool differentCell = (activeRow != row || activeCol != col); 562 bool differentCell = (activeRow != row || activeCol != col);
575 if ( activeCol > -1 && differentCell) 563 if ( activeCol > -1 && differentCell)
576 { 564 {
577 tmpRow = activeRow; 565 tmpRow = activeRow;
578 tmpCol = activeCol; 566 tmpCol = activeCol;
579 } 567 }
580 if ( differentCell) 568 if ( differentCell)
581 { 569 {
582 activeRow = row; 570 activeRow = row;
583 activeCol = col; 571 activeCol = col;
584 updateCell( row, col /*, false */ ); // mark the new active cell 572 updateCell( row, col /*, false */ ); // mark the new active cell
585 } 573 }
586 } 574 }
587 if ( tmpRow > -1 ) // repaint the former active cell 575 if ( tmpRow > -1 ) // repaint the former active cell
588 updateCell( tmpRow, tmpCol /*, true */ ); 576 updateCell( tmpRow, tmpCol /*, true */ );
589 } 577 }
590} 578}
591 579
592void 580void
593KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e) 581KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e)
594{ 582{
595 if(!isEnabled()) 583 if(!isEnabled())
596 { 584 {
597 return; 585 return;
598 } 586 }
599 // ----- 587 // -----
600 int row, col, pos; 588 int row, col, pos;
601 QPoint mouseCoord; 589 QPoint mouseCoord;
602 // ----- 590 // -----
603 mouseCoord = e->pos(); 591 mouseCoord = e->pos();
604 row=rowAt(mouseCoord.y()); 592 row=rowAt(mouseCoord.y());
605 col=columnAt(mouseCoord.x()); 593 col=columnAt(mouseCoord.x());
606 if(row<0 || col<0) 594 if(row<0 || col<0)
607 { // the user clicked on the frame of the table 595 { // the user clicked on the frame of the table
608 emit(closeMe(0)); 596 emit(closeMe(0));
609 } 597 }
610 pos=3*row+col+1; 598 pos=3*row+col+1;
611 result=pos; 599 result=pos;
612 emit(closeMe(1)); 600 emit(closeMe(1));
613} 601}
614 602
615 603
616 604
617KDateInternalYearSelector::KDateInternalYearSelector 605KDateInternalYearSelector::KDateInternalYearSelector
618(int fontsize, QWidget* parent, const char* name) 606(int fontsize, QWidget* parent, const char* name)
619 : QLineEdit(parent, name), 607 : QLineEdit(parent, name),
620 val(new QIntValidator(this)), 608 val(new QIntValidator(this)),
621 result(0) 609 result(0)
622{ 610{
623 QFont font; 611 QFont font;
624 // ----- 612 // -----
625 font=KGlobalSettings::generalFont(); 613 font=KGlobalSettings::generalFont();
626 font.setPointSize(fontsize); 614 font.setPointSize(fontsize);
627 setFont(font); 615 setFont(font);
628#if 0 616#if 0
629 setFrameStyle(QFrame::NoFrame); 617 setFrameStyle(QFrame::NoFrame);
630#endif 618#endif
631 // we have to respect the limits of QDate here, I fear: 619 // we have to respect the limits of QDate here, I fear:
632 val->setRange(0, 8000); 620 val->setRange(0, 8000);
633 setValidator(val); 621 setValidator(val);
634 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot())); 622 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot()));
635} 623}
636 624
637void 625void
638KDateInternalYearSelector::yearEnteredSlot() 626KDateInternalYearSelector::yearEnteredSlot()
639{ 627{
640 bool ok; 628 bool ok;
641 int year; 629 int year;
642 QDate date; 630 QDate date;
643 // ----- check if this is a valid year: 631 // ----- check if this is a valid year:
644 year=text().toInt(&ok); 632 year=text().toInt(&ok);
645 if(!ok) 633 if(!ok)
646 { 634 {
647 KNotifyClient::beep(); 635 KNotifyClient::beep();
648 return; 636 return;
649 } 637 }
650 date.setYMD(year, 1, 1); 638 date.setYMD(year, 1, 1);
651 if(!date.isValid()) 639 if(!date.isValid())
652 { 640 {
653 KNotifyClient::beep(); 641 KNotifyClient::beep();
654 return; 642 return;
655 } 643 }
656 result=year; 644 result=year;
657 emit(closeMe(1)); 645 emit(closeMe(1));
658} 646}
659 647
660int 648int
661KDateInternalYearSelector::getYear() 649KDateInternalYearSelector::getYear()
662{ 650{
663 return result; 651 return result;
664} 652}
665 653
666void 654void
667KDateInternalYearSelector::setYear(int year) 655KDateInternalYearSelector::setYear(int year)
668{ 656{
669 QString temp; 657 QString temp;
670 // ----- 658 // -----
671 temp.setNum(year); 659 temp.setNum(year);
672 setText(temp); 660 setText(temp);
673} 661}
674 662
675KPopupFrame::KPopupFrame(QWidget* parent, const char* name) 663KPopupFrame::KPopupFrame(QWidget* parent, const char* name)
676 : QFrame(parent, name, WType_Popup), 664 : QFrame(parent, name, WType_Popup),
677 result(0), // rejected 665 result(0), // rejected
678 main(0) 666 main(0)
679{ 667{
680 setFrameStyle(QFrame::Box|QFrame::Raised); 668 setFrameStyle(QFrame::Box|QFrame::Raised);
681 setMidLineWidth(2); 669 setMidLineWidth(2);
682} 670}
683 671
684void 672void
685KPopupFrame::keyPressEvent(QKeyEvent* e) 673KPopupFrame::keyPressEvent(QKeyEvent* e)
686{ 674{
687 if(e->key()==Key_Escape) 675 if(e->key()==Key_Escape)
688 { 676 {
689 result=0; // rejected 677 result=0; // rejected
690 qApp->exit_loop(); 678 qApp->exit_loop();
691 } 679 }
692} 680}
693 681
694void 682void
695KPopupFrame::close(int r) 683KPopupFrame::close(int r)
696{ 684{
697 result=r; 685 result=r;
698 qApp->exit_loop(); 686 qApp->exit_loop();
699} 687}
700 688
701void 689void
702KPopupFrame::setMainWidget(QWidget* m) 690KPopupFrame::setMainWidget(QWidget* m)
703{ 691{
704 main=m; 692 main=m;
705 if(main!=0) 693 if(main!=0)
706 { 694 {
707 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth()); 695 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth());
708 } 696 }
709} 697}
710 698
711void 699void
712KPopupFrame::resizeEvent(QResizeEvent*) 700KPopupFrame::resizeEvent(QResizeEvent*)
713{ 701{
714 if(main!=0) 702 if(main!=0)
715 { 703 {
716 main->setGeometry(frameWidth(), frameWidth(), 704 main->setGeometry(frameWidth(), frameWidth(),
717 width()-2*frameWidth(), height()-2*frameWidth()); 705 width()-2*frameWidth(), height()-2*frameWidth());
718 } 706 }
719} 707}
720 708
721void 709void
722KPopupFrame::popup(const QPoint &pos) 710KPopupFrame::popup(const QPoint &pos)
723{ 711{
724 // Make sure the whole popup is visible. 712 // Make sure the whole popup is visible.
725 QRect d = QApplication::desktop()->frameGeometry(); 713 QRect d = QApplication::desktop()->frameGeometry();
726 int x = pos.x(); 714 int x = pos.x();
727 int y = pos.y(); 715 int y = pos.y();
728 int w = width(); 716 int w = width();
729 int h = height(); 717 int h = height();
730 if (x+w > d.x()+d.width()) 718 if (x+w > d.x()+d.width())
731 x = d.width() - w; 719 x = d.width() - w;
732 if (y+h > d.y()+d.height()) 720 if (y+h > d.y()+d.height())
733 y = d.height() - h; 721 y = d.height() - h;
734 if (x < d.x()) 722 if (x < d.x())
735 x = 0; 723 x = 0;
736 if (y < d.y()) 724 if (y < d.y())
737 y = 0; 725 y = 0;
738 726
739 // Pop the thingy up. 727 // Pop the thingy up.
740 move(x, y); 728 move(x, y);
741 show(); 729 show();
742} 730}
743 731
744int 732int
745KPopupFrame::exec(QPoint pos) 733KPopupFrame::exec(QPoint pos)
746{ 734{
747 popup(pos); 735 popup(pos);
748 repaint(); 736 repaint();
749 qApp->enter_loop(); 737 qApp->enter_loop();
750 hide(); 738 hide();
751 return result; 739 return result;
752} 740}
753 741
754int 742int
755KPopupFrame::exec(int x, int y) 743KPopupFrame::exec(int x, int y)
756{ 744{
757 return exec(QPoint(x, y)); 745 return exec(QPoint(x, y));
758} 746}
759 747
760void KPopupFrame::virtual_hook( int, void* ) 748void KPopupFrame::virtual_hook( int, void* )
761{ /*BASE::virtual_hook( id, data );*/ } 749{ /*BASE::virtual_hook( id, data );*/ }
762 750
763void KDateTable::virtual_hook( int, void* ) 751void KDateTable::virtual_hook( int, void* )
764{ /*BASE::virtual_hook( id, data );*/ } 752{ /*BASE::virtual_hook( id, data );*/ }
765 753
766//#include "kdatetbl.moc" 754//#include "kdatetbl.moc"
767 755
768 756
769KDateInternalWeekPicker::KDateInternalWeekPicker 757KDateInternalWeekPicker::KDateInternalWeekPicker
770(QWidget* parent, const char* name) 758(QWidget* parent, const char* name)
771 : QGridView(parent, name), 759 : QGridView(parent, name),
772 result(0) // invalid 760 result(0) // invalid
773{ 761{
774 QRect rect; 762 QRect rect;
775 QFont font; 763 QFont font;
776 // ----- 764 // -----
777 activeCol = -1; 765 activeCol = -1;
778 activeRow = -1; 766 activeRow = -1;
779 font=KGlobalSettings::generalFont(); 767 font=KGlobalSettings::generalFont();
780 int fontsize = 10; 768 int fontsize = 10;
781 int add = 2; 769 int add = 2;
782 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 ) 770 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 )
783 add += 6; 771 add += 6;
784 font.setPointSize(fontsize+add); 772 font.setPointSize(fontsize+add);
785 setFont(font); 773 setFont(font);
786 setHScrollBarMode(AlwaysOff); 774 setHScrollBarMode(AlwaysOff);
787 setVScrollBarMode(AlwaysOff); 775 setVScrollBarMode(AlwaysOff);
788 setFrameStyle(QFrame::NoFrame); 776 setFrameStyle(QFrame::NoFrame);
789 if ( QApplication::desktop()->height() > 240 ) { 777 if ( QApplication::desktop()->height() > 240 ) {
790 setNumRows(13); 778 setNumRows(13);
791 setNumCols(4); 779 setNumCols(4);
792 } else { 780 } else {
793 setNumRows(4); 781 setNumRows(4);
794 setNumCols(13); 782 setNumCols(13);
795 } 783 }