author | zautrix <zautrix> | 2005-03-27 13:04:11 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-03-27 13:04:11 (UTC) |
commit | 9e3e43aaca0986ae224c752d2d3a760661be61b6 (patch) (unidiff) | |
tree | 18295c0cc7177be6022a7abec716131f06b2a756 | |
parent | 1800cf5f3af1f666dddcbfffe3171adcd467ae3d (diff) | |
download | kdepimpi-9e3e43aaca0986ae224c752d2d3a760661be61b6.zip kdepimpi-9e3e43aaca0986ae224c752d2d3a760661be61b6.tar.gz kdepimpi-9e3e43aaca0986ae224c752d2d3a760661be61b6.tar.bz2 |
fixes
-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 13 | ||||
-rw-r--r-- | kalarmd/alarmdialog.cpp | 4 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 28 | ||||
-rw-r--r-- | korganizer/koagendaview.cpp | 27 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 8 | ||||
-rw-r--r-- | libkcal/calendarlocal.cpp | 1 |
6 files changed, 59 insertions, 22 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index ce55780..5ef60be 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt | |||
@@ -925,392 +925,401 @@ | |||
925 | { "5 minutes","5 Min." }, | 925 | { "5 minutes","5 Min." }, |
926 | { "1 minute","1 Min." }, | 926 | { "1 minute","1 Min." }, |
927 | { "23","23" }, | 927 | { "23","23" }, |
928 | { "Mon 15","Mon 15" }, | 928 | { "Mon 15","Mon 15" }, |
929 | { "Configure KO","Konfiguriere KO" }, | 929 | { "Configure KO","Konfiguriere KO" }, |
930 | { "Event text","Termin Text" }, | 930 | { "Event text","Termin Text" }, |
931 | { "ToDo","ToDo" }, | 931 | { "ToDo","ToDo" }, |
932 | { "Today","Heute" }, | 932 | { "Today","Heute" }, |
933 | { "What's Next View","What's Next Ansicht" }, | 933 | { "What's Next View","What's Next Ansicht" }, |
934 | { "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, | 934 | { "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, |
935 | { "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, | 935 | { "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, |
936 | { "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, | 936 | { "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, |
937 | { "Alarm","Alarm" }, | 937 | { "Alarm","Alarm" }, |
938 | { "Used %1 Client","Benutzter %1 Client" }, | 938 | { "Used %1 Client","Benutzter %1 Client" }, |
939 | { "No email client installed","Kein Email Klient installiert" }, | 939 | { "No email client installed","Kein Email Klient installiert" }, |
940 | { "Userdefined email client","Benutzerdef. Email Klient" }, | 940 | { "Userdefined email client","Benutzerdef. Email Klient" }, |
941 | { "OM/Pi email client","OM/Pi Email Klient" }, | 941 | { "OM/Pi email client","OM/Pi Email Klient" }, |
942 | { "Include in multiple ","Beziehe in multiple " }, | 942 | { "Include in multiple ","Beziehe in multiple " }, |
943 | { "calendar ","Kalender " }, | 943 | { "calendar ","Kalender " }, |
944 | { "addressbook ","Adressbuch " }, | 944 | { "addressbook ","Adressbuch " }, |
945 | { "pwmanager","PWmanager" }, | 945 | { "pwmanager","PWmanager" }, |
946 | { " sync"," Sync ein" }, | 946 | { " sync"," Sync ein" }, |
947 | { "Write back synced data","Schreibe gesyncte Daten zurück" }, | 947 | { "Write back synced data","Schreibe gesyncte Daten zurück" }, |
948 | { "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, | 948 | { "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, |
949 | { "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, | 949 | { "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, |
950 | { "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, | 950 | { "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, |
951 | { "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, | 951 | { "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, |
952 | { "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, | 952 | { "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, |
953 | { "Help...","Hilfe..." }, | 953 | { "Help...","Hilfe..." }, |
954 | { "Local file Cal:","Lokale Datei Kal:" }, | 954 | { "Local file Cal:","Lokale Datei Kal:" }, |
955 | { "Local file ABook:","Lokale Datei ABuch:" }, | 955 | { "Local file ABook:","Lokale Datei ABuch:" }, |
956 | { "Local file PWMgr:","Lokale Datei PWMgr:" }, | 956 | { "Local file PWMgr:","Lokale Datei PWMgr:" }, |
957 | { "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, | 957 | { "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, |
958 | { "Calendar:","Kalender:" }, | 958 | { "Calendar:","Kalender:" }, |
959 | { "AddressBook:","AdressBuch:" }, | 959 | { "AddressBook:","AdressBuch:" }, |
960 | { "PWManager:","PWManager:" }, | 960 | { "PWManager:","PWManager:" }, |
961 | { "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, | 961 | { "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, |
962 | { "ssh/scp","ssh/scp" }, | 962 | { "ssh/scp","ssh/scp" }, |
963 | { "ftp","ftp" }, | 963 | { "ftp","ftp" }, |
964 | { "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, | 964 | { "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, |
965 | { "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, | 965 | { "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, |
966 | { "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, | 966 | { "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, |
967 | { "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, | 967 | { "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, |
968 | { "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, | 968 | { "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, |
969 | { "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, | 969 | { "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, |
970 | { "KDE-Pim sync config","KDE-Pim sync Konfig" }, | 970 | { "KDE-Pim sync config","KDE-Pim sync Konfig" }, |
971 | { "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, | 971 | { "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, |
972 | { "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, | 972 | { "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, |
973 | { "Port number (Default: %1)","Port Nummer (Default: %1)" }, | 973 | { "Port number (Default: %1)","Port Nummer (Default: %1)" }, |
974 | { "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, | 974 | { "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, |
975 | { "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, | 975 | { "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, |
976 | { "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, | 976 | { "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, |
977 | { "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, | 977 | { "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, |
978 | { "Disable Pi-Sync","Schalte Pi-Sync aus" }, | 978 | { "Disable Pi-Sync","Schalte Pi-Sync aus" }, |
979 | { "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, | 979 | { "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, |
980 | { "KDE-Pim Sync","KDE-Pim Sync" }, | 980 | { "KDE-Pim Sync","KDE-Pim Sync" }, |
981 | { "Multiple profiles","Multi-Sync Profile" }, | 981 | { "Multiple profiles","Multi-Sync Profile" }, |
982 | { "Device: ","Gerät: " }, | 982 | { "Device: ","Gerät: " }, |
983 | { "Multiple sync started.","Multi-Sync gestartet." }, | 983 | { "Multiple sync started.","Multi-Sync gestartet." }, |
984 | { "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, | 984 | { "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, |
985 | { "Turn filter on","Schalte Filter an" }, | 985 | { "Turn filter on","Schalte Filter an" }, |
986 | { "Turn filter off","Schalte Filter aus" }, | 986 | { "Turn filter off","Schalte Filter aus" }, |
987 | { "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, | 987 | { "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, |
988 | { "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, | 988 | { "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, |
989 | { "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, | 989 | { "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, |
990 | { "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, | 990 | { "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, |
991 | { "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, | 991 | { "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, |
992 | { "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, | 992 | { "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, |
993 | { "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, | 993 | { "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, |
994 | { "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, | 994 | { "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, |
995 | { "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, | 995 | { "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, |
996 | { "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, | 996 | { "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, |
997 | { "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, | 997 | { "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, |
998 | { "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, | 998 | { "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, |
999 | { "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, | 999 | { "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, |
1000 | { "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, | 1000 | { "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, |
1001 | { "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, | 1001 | { "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, |
1002 | { "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, | 1002 | { "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, |
1003 | { "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, | 1003 | { "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, |
1004 | { "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, | 1004 | { "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, |
1005 | { "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, | 1005 | { "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, |
1006 | { "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, | 1006 | { "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, |
1007 | { "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, | 1007 | { "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, |
1008 | { "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, | 1008 | { "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, |
1009 | { "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, | 1009 | { "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, |
1010 | { "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, | 1010 | { "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, |
1011 | { "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, | 1011 | { "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, |
1012 | { "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, | 1012 | { "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, |
1013 | { "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, | 1013 | { "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, |
1014 | { "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, | 1014 | { "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, |
1015 | { "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, | 1015 | { "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, |
1016 | { "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, | 1016 | { "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, |
1017 | { "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, | 1017 | { "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, |
1018 | { "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, | 1018 | { "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, |
1019 | { "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, | 1019 | { "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, |
1020 | { "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, | 1020 | { "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, |
1021 | { "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, | 1021 | { "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, |
1022 | { "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, | 1022 | { "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, |
1023 | { "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, | 1023 | { "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, |
1024 | { "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datumsnavigator</p>\n" }, | 1024 | { "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datumsnavigator</p>\n" }, |
1025 | { "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, | 1025 | { "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, |
1026 | { "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, | 1026 | { "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, |
1027 | { "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" }, | 1027 | { "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" }, |
1028 | { "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" }, | 1028 | { "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" }, |
1029 | { "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, | 1029 | { "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, |
1030 | { "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " }, | 1030 | { "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " }, |
1031 | { "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, | 1031 | { "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, |
1032 | { "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, | 1032 | { "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, |
1033 | { "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" }, | 1033 | { "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" }, |
1034 | { "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, | 1034 | { "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, |
1035 | { "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, | 1035 | { "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, |
1036 | { "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, | 1036 | { "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, |
1037 | { "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, | 1037 | { "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, |
1038 | { "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, | 1038 | { "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, |
1039 | { "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, | 1039 | { "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, |
1040 | { "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, | 1040 | { "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, |
1041 | { "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, | 1041 | { "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, |
1042 | { "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, | 1042 | { "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, |
1043 | { "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, | 1043 | { "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, |
1044 | { "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, | 1044 | { "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, |
1045 | { "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, | 1045 | { "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, |
1046 | { "KO/Pi FAQ","KO/Pi FAQ" }, | 1046 | { "KO/Pi FAQ","KO/Pi FAQ" }, |
1047 | { "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, | 1047 | { "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, |
1048 | { "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, | 1048 | { "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, |
1049 | { "About KOrganizer/Pi","Über KOrganizer/Pi" }, | 1049 | { "About KOrganizer/Pi","Über KOrganizer/Pi" }, |
1050 | { "From: ","Von: " }, | 1050 | { "From: ","Von: " }, |
1051 | { "Remove sync info","Entferne Sync Info" }, | 1051 | { "Remove sync info","Entferne Sync Info" }, |
1052 | { "For all profiles","Für alle Profile" }, | 1052 | { "For all profiles","Für alle Profile" }, |
1053 | { "Hide not Running","Verstecke nicht Laufende" }, | 1053 | { "Hide not Running","Verstecke nicht Laufende" }, |
1054 | { "ME","ME" }, | 1054 | { "ME","ME" }, |
1055 | { "Toolbar","Toolbar" }, | 1055 | { "Toolbar","Toolbar" }, |
1056 | { "Undo Delete...","Löschen rückgängig machen..." }, | 1056 | { "Undo Delete...","Löschen rückgängig machen..." }, |
1057 | { "Undo Delete","Löschen rückgängig machen" }, | 1057 | { "Undo Delete","Löschen rückgängig machen" }, |
1058 | { "KDE Sync HowTo...","KDE Sync HowTo..." }, | 1058 | { "KDE Sync HowTo...","KDE Sync HowTo..." }, |
1059 | { "Multi Sync HowTo...","Multi Sync HowTo..." }, | 1059 | { "Multi Sync HowTo...","Multi Sync HowTo..." }, |
1060 | { "Januar","Januar" }, | 1060 | { "Januar","Januar" }, |
1061 | { "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, | 1061 | { "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, |
1062 | { "No Filter","Kein Filter" }, | 1062 | { "No Filter","Kein Filter" }, |
1063 | { "Multiple Sync options","Multi Sync Optionen" }, | 1063 | { "Multiple Sync options","Multi Sync Optionen" }, |
1064 | { "Sync algo options","Sync Ablauf Optionen" }, | 1064 | { "Sync algo options","Sync Ablauf Optionen" }, |
1065 | { "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, | 1065 | { "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, |
1066 | { "Incoming calendar filter:","Eingehender Kalender Filter:" }, | 1066 | { "Incoming calendar filter:","Eingehender Kalender Filter:" }, |
1067 | { "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, | 1067 | { "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, |
1068 | { "Write back options","Optionen zum Zurückschreiben" }, | 1068 | { "Write back options","Optionen zum Zurückschreiben" }, |
1069 | { "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, | 1069 | { "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, |
1070 | { "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, | 1070 | { "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, |
1071 | { "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, | 1071 | { "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, |
1072 | { "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, | 1072 | { "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, |
1073 | { "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, | 1073 | { "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, |
1074 | { "Time period","Zeitspanne" }, | 1074 | { "Time period","Zeitspanne" }, |
1075 | { "From ","Von " }, | 1075 | { "From ","Von " }, |
1076 | { " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, | 1076 | { " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, |
1077 | { " weeks in the future "," Wochen in der Zukunft " }, | 1077 | { " weeks in the future "," Wochen in der Zukunft " }, |
1078 | { "Profile kind specific settings","Profil Art abhängige Einstellungen" }, | 1078 | { "Profile kind specific settings","Profil Art abhängige Einstellungen" }, |
1079 | { "Local temp file:","Lokale temp Datei:" }, | 1079 | { "Local temp file:","Lokale temp Datei:" }, |
1080 | { "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, | 1080 | { "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, |
1081 | { "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, | 1081 | { "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, |
1082 | { "Language","Sprache" }, | 1082 | { "Language","Sprache" }, |
1083 | { "Time Format","Zeit Format" }, | 1083 | { "Time Format","Zeit Format" }, |
1084 | { "Time Zone","Zeit Zone" }, | 1084 | { "Time Zone","Zeit Zone" }, |
1085 | { "%1 groups subscribed","%1 Guppen abboniert" }, | 1085 | { "%1 groups subscribed","%1 Guppen abboniert" }, |
1086 | { "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" }, | 1086 | { "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" }, |
1087 | { "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, | 1087 | { "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, |
1088 | { "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, | 1088 | { "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, |
1089 | { "Save settings","Speichere Einstellungen" }, | 1089 | { "Save settings","Speichere Einstellungen" }, |
1090 | { "Save standard","Speichere Standard" }, | 1090 | { "Save standard","Speichere Standard" }, |
1091 | { "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, | 1091 | { "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, |
1092 | { "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, | 1092 | { "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, |
1093 | { "Data storage path","Daten Speicherpfad" }, | 1093 | { "Data storage path","Daten Speicherpfad" }, |
1094 | { "Language","Sprache" }, | 1094 | { "Language","Sprache" }, |
1095 | { "Show time in agenda items","Zeige Zeit in Agenda Items" }, | 1095 | { "Show time in agenda items","Zeige Zeit in Agenda Items" }, |
1096 | { "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, | 1096 | { "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, |
1097 | { "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, | 1097 | { "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, |
1098 | { "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, | 1098 | { "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, |
1099 | { "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, | 1099 | { "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, |
1100 | { "KO/Pi","KO/Pi" }, | 1100 | { "KO/Pi","KO/Pi" }, |
1101 | { "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, | 1101 | { "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, |
1102 | { "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, | 1102 | { "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, |
1103 | { "Sound.Al.: ","Sound.Al.: " }, | 1103 | { "Sound.Al.: ","Sound.Al.: " }, |
1104 | { "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, | 1104 | { "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, |
1105 | { "Restore","Wiederherstellen" }, | 1105 | { "Restore","Wiederherstellen" }, |
1106 | { "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, | 1106 | { "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, |
1107 | { "% completed","% erledigt" }, | 1107 | { "% completed","% erledigt" }, |
1108 | { "%d item(s) found.","%d Item(s) gefunden." }, | 1108 | { "%d item(s) found.","%d Item(s) gefunden." }, |
1109 | { "Set complete","Setze auf erledigt" }, | 1109 | { "Set complete","Setze auf erledigt" }, |
1110 | { "(cancelled)","(gecancelt)" }, | 1110 | { "(cancelled)","(gecancelt)" }, |
1111 | { "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, | 1111 | { "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, |
1112 | { " Local time "," Locale Zeit " }, | 1112 | { " Local time "," Locale Zeit " }, |
1113 | { "Form2","Form2" }, | 1113 | { "Form2","Form2" }, |
1114 | { "Filter enabled","Filter angeschaltet" }, | 1114 | { "Filter enabled","Filter angeschaltet" }, |
1115 | { "Edit Filters","Ändere Filter" }, | 1115 | { "Edit Filters","Ändere Filter" }, |
1116 | { "Print What's Next View...","Drucke What's Next Ansicht..." }, | 1116 | { "Print What's Next View...","Drucke What's Next Ansicht..." }, |
1117 | { "Agenda","Agenda" }, | 1117 | { "Agenda","Agenda" }, |
1118 | { " ("," (" }, | 1118 | { " ("," (" }, |
1119 | { "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, | 1119 | { "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, |
1120 | { "Print","Print" }, | 1120 | { "Print","Print" }, |
1121 | { "&Setup Printer...","Drucker &Setup..." }, | 1121 | { "&Setup Printer...","Drucker &Setup..." }, |
1122 | { "View Type","Zeige Typ" }, | 1122 | { "View Type","Zeige Typ" }, |
1123 | { "Page &orientation:","Seiten Ausrichtung:" }, | 1123 | { "Page &orientation:","Seiten Ausrichtung:" }, |
1124 | { "Use Default of Selected Style","Default des selektierten Stils" }, | 1124 | { "Use Default of Selected Style","Default des selektierten Stils" }, |
1125 | { "Use Default Setting of Printer","Default Einstellung des Druckers" }, | 1125 | { "Use Default Setting of Printer","Default Einstellung des Druckers" }, |
1126 | { "Portrait","Portrait" }, | 1126 | { "Portrait","Portrait" }, |
1127 | { "Landscape","Landschaft" }, | 1127 | { "Landscape","Landschaft" }, |
1128 | { "Print day","Drucke Tag" }, | 1128 | { "Print day","Drucke Tag" }, |
1129 | { "CalPrintDay_Base","CalPrintDay_Base" }, | 1129 | { "CalPrintDay_Base","CalPrintDay_Base" }, |
1130 | { "Date && Time Range","Datum && Zeitspanne" }, | 1130 | { "Date && Time Range","Datum && Zeitspanne" }, |
1131 | { "&End date:","&Enddatum:" }, | 1131 | { "&End date:","&Enddatum:" }, |
1132 | { "&Start date:","&Startdatum:" }, | 1132 | { "&Start date:","&Startdatum:" }, |
1133 | { "Start &time:","Startzeit:" }, | 1133 | { "Start &time:","Startzeit:" }, |
1134 | { "End ti&me:","Endzeit:" }, | 1134 | { "End ti&me:","Endzeit:" }, |
1135 | { "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, | 1135 | { "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, |
1136 | { "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, | 1136 | { "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, |
1137 | { "Alt+D","Alt+D" }, | 1137 | { "Alt+D","Alt+D" }, |
1138 | { "&Use colors","Nutze Farben" }, | 1138 | { "&Use colors","Nutze Farben" }, |
1139 | { "Alt+U","Alt+U" }, | 1139 | { "Alt+U","Alt+U" }, |
1140 | { "Print week","Drucke Woche" }, | 1140 | { "Print week","Drucke Woche" }, |
1141 | { "CalPrintWeek_Base","CalPrintWeek_Base" }, | 1141 | { "CalPrintWeek_Base","CalPrintWeek_Base" }, |
1142 | { "Use &colors","Nutze Farben" }, | 1142 | { "Use &colors","Nutze Farben" }, |
1143 | { "Type of View","Typ der Ansicht" }, | 1143 | { "Type of View","Typ der Ansicht" }, |
1144 | { "Print as &Filofax page","Drucke als &Filofax Seite" }, | 1144 | { "Print as &Filofax page","Drucke als &Filofax Seite" }, |
1145 | { "Alt+F","Alt+F" }, | 1145 | { "Alt+F","Alt+F" }, |
1146 | { "Print as &timetable view:","Drucke als Zeittabelle:" }, | 1146 | { "Print as &timetable view:","Drucke als Zeittabelle:" }, |
1147 | { "Alt+T","Alt+T" }, | 1147 | { "Alt+T","Alt+T" }, |
1148 | { "Print as split week view","Drucke als gesplittete Wochenansicht" }, | 1148 | { "Print as split week view","Drucke als gesplittete Wochenansicht" }, |
1149 | { "Print month","Drucke Monat" }, | 1149 | { "Print month","Drucke Monat" }, |
1150 | { "CalPrintMonth_Base","CalPrintMonth_Base" }, | 1150 | { "CalPrintMonth_Base","CalPrintMonth_Base" }, |
1151 | { "&Start month:","&Startmonat:" }, | 1151 | { "&Start month:","&Startmonat:" }, |
1152 | { "&End month:","&Endmonat:" }, | 1152 | { "&End month:","&Endmonat:" }, |
1153 | { "Print week &numbers","Drucke Wochen Nummer(n)" }, | 1153 | { "Print week &numbers","Drucke Wochen Nummer(n)" }, |
1154 | { "Print todos","Drucke Todos" }, | 1154 | { "Print todos","Drucke Todos" }, |
1155 | { "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, | 1155 | { "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, |
1156 | { "Include &description of the item","Inclusive Itembeschreibung" }, | 1156 | { "Include &description of the item","Inclusive Itembeschreibung" }, |
1157 | { "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, | 1157 | { "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, |
1158 | { "Include &priority of the item","Inclusive Priorität des Items" }, | 1158 | { "Include &priority of the item","Inclusive Priorität des Items" }, |
1159 | { "Items to Print","Zu druckende Items" }, | 1159 | { "Items to Print","Zu druckende Items" }, |
1160 | { "&From:","Von:" }, | 1160 | { "&From:","Von:" }, |
1161 | { "&To:","Bis:" }, | 1161 | { "&To:","Bis:" }, |
1162 | { "Print &all todo items","Drucke alle Todo Items" }, | 1162 | { "Print &all todo items","Drucke alle Todo Items" }, |
1163 | { "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, | 1163 | { "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, |
1164 | { "Only items due in the &range:","Nur Items in dem Zeitraum:" }, | 1164 | { "Only items due in the &range:","Nur Items in dem Zeitraum:" }, |
1165 | { "Todo List","Todo Liste" }, | 1165 | { "Todo List","Todo Liste" }, |
1166 | { "&Title:","&Titel:" }, | 1166 | { "&Title:","&Titel:" }, |
1167 | { "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, | 1167 | { "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, |
1168 | { "Todo list","Todo Liste" }, | 1168 | { "Todo list","Todo Liste" }, |
1169 | { "&Print...","Drucke..." }, | 1169 | { "&Print...","Drucke..." }, |
1170 | { "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, | 1170 | { "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, |
1171 | { "[Unconfigured]","[Unkonfiguriert]" }, | 1171 | { "[Unconfigured]","[Unkonfiguriert]" }, |
1172 | { "OK","OK" }, | 1172 | { "OK","OK" }, |
1173 | { "FilterEditor","FilterEditor" }, | 1173 | { "FilterEditor","FilterEditor" }, |
1174 | { "Include","Inclusive" }, | 1174 | { "Include","Inclusive" }, |
1175 | { "Exclude","Exclusive" }, | 1175 | { "Exclude","Exclusive" }, |
1176 | { "Edit Selection...","Editiere Auswahl" }, | 1176 | { "Edit Selection...","Editiere Auswahl" }, |
1177 | { "recurring events","wiederholende Termine" }, | 1177 | { "recurring events","wiederholende Termine" }, |
1178 | { "recurr. events","wiederh.Termine" }, | 1178 | { "recurr. events","wiederh.Termine" }, |
1179 | { "completed to-dos","erledigte Todos" }, | 1179 | { "completed to-dos","erledigte Todos" }, |
1180 | { "events","Termine" }, | 1180 | { "events","Termine" }, |
1181 | { "todos","Todos" }, | 1181 | { "todos","Todos" }, |
1182 | { "journals","Journale" }, | 1182 | { "journals","Journale" }, |
1183 | { "public","öffentl." }, | 1183 | { "public","öffentl." }, |
1184 | { "private","privat" }, | 1184 | { "private","privat" }, |
1185 | { "confidential","vertraul." }, | 1185 | { "confidential","vertraul." }, |
1186 | { "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" }, | 1186 | { "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" }, |
1187 | { "Yesterday","Gestern" }, | 1187 | { "Yesterday","Gestern" }, |
1188 | { "Day after tomorrow","Übermorgen" }, | 1188 | { "Day after tomorrow","Übermorgen" }, |
1189 | { "Tomorrow","Morgen" }, | 1189 | { "Tomorrow","Morgen" }, |
1190 | { "Day before yesterday","Vorgestern" }, | 1190 | { "Day before yesterday","Vorgestern" }, |
1191 | { "Size %1","Größe %1" }, | 1191 | { "Size %1","Größe %1" }, |
1192 | { "New Agendasize: %1","Neue Agendagröße: %1" }, | 1192 | { "New Agendasize: %1","Neue Agendagröße: %1" }, |
1193 | { " (%1 y.)"," (%1 J.)" }, | 1193 | { " (%1 y.)"," (%1 J.)" }, |
1194 | { "Allday:","Ganztägig:" }, | 1194 | { "Allday:","Ganztägig:" }, |
1195 | { "compl.todos","erled.Todos" }, | 1195 | { "compl.todos","erled.Todos" }, |
1196 | { "Day view","Tagesansicht" }, | 1196 | { "Day view","Tagesansicht" }, |
1197 | { "Next days","Nächste Tage" }, | 1197 | { "Next days","Nächste Tage" }, |
1198 | { "Next week","Nächste Woche" }, | 1198 | { "Next week","Nächste Woche" }, |
1199 | { "Next two weeks","Nächste zwei Wochen" }, | 1199 | { "Next two weeks","Nächste zwei Wochen" }, |
1200 | { "Next month","Nächster Monat" }, | 1200 | { "Next month","Nächster Monat" }, |
1201 | { "Journal view","Journal" }, | 1201 | { "Journal view","Journal" }, |
1202 | { "Display all opened","Zeige alle geöffnet" }, | 1202 | { "Display all opened","Zeige alle geöffnet" }, |
1203 | { "Display all closed","Zeige alle geschlossen" }, | 1203 | { "Display all closed","Zeige alle geschlossen" }, |
1204 | { "Display all flat","Zeige alle flach" }, | 1204 | { "Display all flat","Zeige alle flach" }, |
1205 | { "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, | 1205 | { "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, |
1206 | { "Default todo done color:","Standard Todo erledigt Farbe" }, | 1206 | { "Default todo done color:","Standard Todo erledigt Farbe" }, |
1207 | { "Select week %1-%2","Wähle Woche %1-%2" }, | 1207 | { "Select week %1-%2","Wähle Woche %1-%2" }, |
1208 | { "Select Week","Wähle Woche" }, | 1208 | { "Select Week","Wähle Woche" }, |
1209 | { "Set alarm for selected...","Setze Alarm für Selekt..." }, | 1209 | { "Set alarm for selected...","Setze Alarm für Selekt..." }, |
1210 | { "Set Alarm!","Setze Alarm!" }, | 1210 | { "Set Alarm!","Setze Alarm!" }, |
1211 | { "Canged alarm for %1 items","Alarm für %1 Items geändert" }, | 1211 | { "Canged alarm for %1 items","Alarm für %1 Items geändert" }, |
1212 | { " and "," und " }, | 1212 | { " and "," und " }, |
1213 | { "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, | 1213 | { "<IMG src="%1"> only )","nur <IMG src="%1"> )" }, |
1214 | { "Mail to selected","Mail an Ausgewählte" }, | 1214 | { "Mail to selected","Mail an Ausgewählte" }, |
1215 | { "Mail to all","Mail an Alle" }, | 1215 | { "Mail to all","Mail an Alle" }, |
1216 | { "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, | 1216 | { "Week view mode uses bigger font","Wochenansicht Modus nutzt größeren Font" }, |
1217 | { "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, | 1217 | { "Set reminder ON with offset to:","Alarm AN mit Offset auf:" }, |
1218 | { " on"," am" }, | 1218 | { " on"," am" }, |
1219 | { " completed on "," erledigt am " }, | 1219 | { " completed on "," erledigt am " }, |
1220 | { "Save as Event template","Speichere als Vorlage" }, | 1220 | { "Save as Event template","Speichere als Vorlage" }, |
1221 | { "Load Event template","Lade Termin Vorlage" }, | 1221 | { "Load Event template","Lade Termin Vorlage" }, |
1222 | { "Save as Journal template","Speichere als Journal Vorlage" }, | 1222 | { "Save as Journal template","Speichere als Journal Vorlage" }, |
1223 | { "Insert Journal template","Füge Journal Vorlage ein" }, | 1223 | { "Insert Journal template","Füge Journal Vorlage ein" }, |
1224 | { "Sub todos:<br>","Unter Todos:<br>" }, | 1224 | { "Sub todos:<br>","Unter Todos:<br>" }, |
1225 | { "Parent todo:<br>","Über Todo:<br>" }, | 1225 | { "Parent todo:<br>","Über Todo:<br>" }, |
1226 | { "Set current as color category","Setze Gewählte als Farbkategorie" }, | 1226 | { "Set current as color category","Setze Gewählte als Farbkategorie" }, |
1227 | { " completed"," erledigt" }, | 1227 | { " completed"," erledigt" }, |
1228 | { "(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!" }, | 1228 | { "(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!" }, |
1229 | { "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, | 1229 | { "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, |
1230 | { "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, | 1230 | { "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, |
1231 | { "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, | 1231 | { "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, |
1232 | { "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?" }, | 1232 | { "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?" }, |
1233 | { "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, | 1233 | { "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, |
1234 | { "Error","Fehler" }, | 1234 | { "Error","Fehler" }, |
1235 | { ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, | 1235 | { ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, |
1236 | { "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, | 1236 | { "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, |
1237 | { "Warning","Warnung" }, | 1237 | { "Warning","Warnung" }, |
1238 | { "Select week number","Wähle Wochen Nummer" }, | 1238 | { "Select week number","Wähle Wochen Nummer" }, |
1239 | { "Februar","Februar" }, | 1239 | { "Februar","Februar" }, |
1240 | { "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, | 1240 | { "Click on the week number to\nshow week zoomed","Klicke auf die Wochennummer\num die Woche groß zu zeigen" }, |
1241 | { "W","W" }, | 1241 | { "W","W" }, |
1242 | { "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, | 1242 | { "Click on this to\nselect week number","Klicke hierauf um\ndie Woche auszuwählen" }, |
1243 | { "T: %1","T: %1" }, | 1243 | { "T: %1","T: %1" }, |
1244 | { "Start: ","Start: " }, | 1244 | { "Start: ","Start: " }, |
1245 | { "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, | 1245 | { "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, |
1246 | { "Password for remote access:","Passwort für fernen Zugriff:" }, | 1246 | { "Password for remote access:","Passwort für fernen Zugriff:" }, |
1247 | { "Remote IP address:","Ferne IP Adresse:" }, | 1247 | { "Remote IP address:","Ferne IP Adresse:" }, |
1248 | { "Remote port number:","Ferne Port Nummer:" }, | 1248 | { "Remote port number:","Ferne Port Nummer:" }, |
1249 | { "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, | 1249 | { "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, |
1250 | { "Remote from: ","Fern von: " }, | 1250 | { "Remote from: ","Fern von: " }, |
1251 | { "Local from: ","Lokal von: " }, | 1251 | { "Local from: ","Lokal von: " }, |
1252 | { "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" }, | 1252 | { "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" }, |
1253 | { "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, | 1253 | { "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, |
1254 | { "Write back","Schreibe zurück" }, | 1254 | { "Write back","Schreibe zurück" }, |
1255 | { "KO/Pi Synchronization","KO/Pi Synchronisation" }, | 1255 | { "KO/Pi Synchronization","KO/Pi Synchronisation" }, |
1256 | { "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, | 1256 | { "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, |
1257 | { "Received sync request","Sync Anfrage erhalten" }, | 1257 | { "Received sync request","Sync Anfrage erhalten" }, |
1258 | { "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." }, | 1258 | { "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." }, |
1259 | { "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, | 1259 | { "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, |
1260 | { "Data saved to temp file!","Daten in temp Datei gespeichert!" }, | 1260 | { "Data saved to temp file!","Daten in temp Datei gespeichert!" }, |
1261 | { "Sending file...","Sende Datei..." }, | 1261 | { "Sending file...","Sende Datei..." }, |
1262 | { "Waiting for synced file...","Warte auf gesyncte Daten..." }, | 1262 | { "Waiting for synced file...","Warte auf gesyncte Daten..." }, |
1263 | { "Receiving synced file...","Gesyncte Daten erhalten..." }, | 1263 | { "Receiving synced file...","Gesyncte Daten erhalten..." }, |
1264 | { "Received %1 bytes","%1 Bytes erhalten" }, | 1264 | { "Received %1 bytes","%1 Bytes erhalten" }, |
1265 | { "Writing file to disk...","Speichere Datei..." }, | 1265 | { "Writing file to disk...","Speichere Datei..." }, |
1266 | { "Pi-Sync successful!","Pi-Sync erfolgreich!" }, | 1266 | { "Pi-Sync successful!","Pi-Sync erfolgreich!" }, |
1267 | { "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, | 1267 | { "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, |
1268 | { "Synchronize!","Synchronisiere!" }, | 1268 | { "Synchronize!","Synchronisiere!" }, |
1269 | { "High clock skew!","Großer Uhrzeitunterschied!" }, | 1269 | { "High clock skew!","Großer Uhrzeitunterschied!" }, |
1270 | { "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, | 1270 | { "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, |
1271 | { "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!" }, | 1271 | { "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!" }, |
1272 | { "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, | 1272 | { "This is a %1 recurring todo.","Das ist eine %1 wiederholende Aufgabe." }, |
1273 | { "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, | 1273 | { "<p><b>Start on:</b> %1</p>","<p><b>Start am:</b> %1</p>" }, |
1274 | { "List week view","Listenwochenansicht" }, | 1274 | { "List week view","Listenwochenansicht" }, |
1275 | { "List week","Listenwochenansicht" }, | 1275 | { "List week","Listenwochenansicht" }, |
1276 | { "Next Week","Nächste Woche" }, | 1276 | { "Next Week","Nächste Woche" }, |
1277 | { "Previous Week","Vorherige Woche" }, | 1277 | { "Previous Week","Vorherige Woche" }, |
1278 | { "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." }, | 1278 | { "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." }, |
1279 | { "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, | 1279 | { "Show in todo/event viewer:","Zeige in Termin/Todo Anzeige:" }, |
1280 | { "Details","Details" }, | 1280 | { "Details","Details" }, |
1281 | { "Created time","Erstellt Zeit" }, | 1281 | { "Created time","Erstellt Zeit" }, |
1282 | { "Last modified time","Geändert Zeit" }, | 1282 | { "Last modified time","Geändert Zeit" }, |
1283 | { "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, | 1283 | { "Show in What'sThis quick overview:","Zeige in What'sThis Schnellübersicht:" }, |
1284 | { "View Options","Anzeige Optionen" }, | 1284 | { "View Options","Anzeige Optionen" }, |
1285 | { "<b>Created: ","<b>Erstellt am: " }, | 1285 | { "<b>Created: ","<b>Erstellt am: " }, |
1286 | { "<b>Last modified: ","<b>Zuletzt geändert am: " }, | 1286 | { "<b>Last modified: ","<b>Zuletzt geändert am: " }, |
1287 | { "Journal: ","Journal: " }, | 1287 | { "Journal: ","Journal: " }, |
1288 | { "yearly","jährlich" }, | 1288 | { "yearly","jährlich" }, |
1289 | { "(%1) ","%1-" }, | 1289 | { "(%1) ","%1-" }, |
1290 | { "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, | 1290 | { "<p><b>K</b>: Week view in Month view syle</p>\n","<p><b>K</b>: Wochenansicht in Art der Monatsansicht</p>\n" }, |
1291 | { "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, | 1291 | { "Enable tooltips displaying summary of ev.","Titel-Tooltips anzeigen" }, |
1292 | { "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, | 1292 | { "Enable scrollbars in month view cells","Scrollbar in Zellen anzeigen" }, |
1293 | { "Summary/Loc.","Titel/Ort" }, | 1293 | { "Summary/Loc.","Titel/Ort" }, |
1294 | { "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, | 1294 | { "No items found. Use '*' and '?' where needed.","Nichts gefunden. Benutze '*' and '?' wo benötigt." }, |
1295 | { "Week Number","Wochennummer" }, | 1295 | { "Week Number","Wochennummer" }, |
1296 | { "Import","Importiere" }, | 1296 | { "Import","Importiere" }, |
1297 | { "Export","Exportiere" }, | 1297 | { "Export","Exportiere" }, |
1298 | { "Beam","Beame" }, | 1298 | { "Beam","Beame" }, |
1299 | { "Export selected","Exportiere Selektierte" }, | 1299 | { "Export selected","Exportiere Selektierte" }, |
1300 | { "As iCal (ics) file...","Als iCal (ics) Datei..." }, | 1300 | { "As iCal (ics) file...","Als iCal (ics) Datei..." }, |
1301 | { "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, | 1301 | { "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, |
1302 | { "Journal/Details...","Journale/Details..." }, | 1302 | { "Journal/Details...","Journale/Details..." }, |
1303 | { "Agenda View","Agenda Ansicht" }, | 1303 | { "Agenda View","Agenda Ansicht" }, |
1304 | { "Show current time","Zeige aktuelle Zeit" }, | 1304 | { "Show current time","Zeige aktuelle Zeit" }, |
1305 | { "Edit new item","Bearbeite neuen Eintrag" }, | 1305 | { "Edit new item","Bearbeite neuen Eintrag" }, |
1306 | { "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" }, | 1306 | { "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" }, |
1307 | { "There is no next alarm.","Es gibt keinen nächsten Alarm." }, | 1307 | { "There is no next alarm.","Es gibt keinen nächsten Alarm." }, |
1308 | { "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, | 1308 | { "%1 %2 - %3 (next event/todo with alarm)","%1 %2 - %3 (nächster Termin/Todo mit Alarm)" }, |
1309 | { "The next alarm is on:\n%1\nat: %2\n\n%3\n(%4)","Der nächste Alarm in am:\n%1\num: %2\n\n%3\n(%4)" }, | 1309 | { "The next alarm is in:\n","Der nächste Alarm ist in:\n" }, |
1310 | { "%1 days\n","%1 Tagen\n" }, | ||
1311 | { "1 day\n","1 Tag\n" }, | ||
1312 | { "%1 hours\n","%1 Stunden\n" }, | ||
1313 | { "1 hour\n","1 Stunde\n" }, | ||
1314 | { "%1 minutes\n","%1 Minuten\n" }, | ||
1315 | { "1 minute\n","1 Minute\n" }, | ||
1310 | { "","" }, | 1316 | { "","" }, |
1311 | { "","" }, | 1317 | { "","" }, |
1312 | { "","" }, | 1318 | { "","" }, |
1313 | { "","" }, | 1319 | { "","" }, |
1314 | { "","" }, | 1320 | { "","" }, |
1315 | { "","" }, | 1321 | { "","" }, |
1316 | \ No newline at end of file | 1322 | { "","" }, |
1323 | { "","" }, | ||
1324 | { "","" }, | ||
1325 | { "","" }, \ No newline at end of file | ||
diff --git a/kalarmd/alarmdialog.cpp b/kalarmd/alarmdialog.cpp index 7ead3b9..7b888ab 100644 --- a/kalarmd/alarmdialog.cpp +++ b/kalarmd/alarmdialog.cpp | |||
@@ -1,312 +1,316 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the KDE alarm daemon. | 2 | This file is part of the KDE alarm daemon. |
3 | Copyright (c) 2000 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2000 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | // $Id$ | 24 | // $Id$ |
25 | 25 | ||
26 | #include <qhbox.h> | 26 | #include <qhbox.h> |
27 | #include <qvbox.h> | 27 | #include <qvbox.h> |
28 | #include <qapp.h> | 28 | #include <qapp.h> |
29 | #include <qlabel.h> | 29 | #include <qlabel.h> |
30 | #include <qlayout.h> | 30 | #include <qlayout.h> |
31 | #include <qfile.h> | 31 | #include <qfile.h> |
32 | #include <qtimer.h> | 32 | #include <qtimer.h> |
33 | #include <qsound.h> | 33 | #include <qsound.h> |
34 | #include <qpushbutton.h> | 34 | #include <qpushbutton.h> |
35 | #ifndef DESKTOP_VERSION | ||
35 | #define protected public | 36 | #define protected public |
36 | #include <qspinbox.h> | 37 | #include <qspinbox.h> |
37 | #undef protected | 38 | #undef protected |
39 | #else | ||
40 | #include <qspinbox.h> | ||
41 | #endif | ||
38 | #include <stdlib.h> | 42 | #include <stdlib.h> |
39 | #ifndef _WIN32_ | 43 | #ifndef _WIN32_ |
40 | #include <unistd.h> | 44 | #include <unistd.h> |
41 | #include <sys/ioctl.h> | 45 | #include <sys/ioctl.h> |
42 | #endif | 46 | #endif |
43 | #include <stdio.h> | 47 | #include <stdio.h> |
44 | #include <fcntl.h> | 48 | #include <fcntl.h> |
45 | 49 | ||
46 | #ifndef DESKTOP_VERSION | 50 | #ifndef DESKTOP_VERSION |
47 | #include <qtopia/alarmserver.h> | 51 | #include <qtopia/alarmserver.h> |
48 | #include <qpe/resource.h> | 52 | #include <qpe/resource.h> |
49 | #include <qtopia/sound.h> | 53 | #include <qtopia/sound.h> |
50 | 54 | ||
51 | #endif | 55 | #endif |
52 | 56 | ||
53 | #include "alarmdialog.h" | 57 | #include "alarmdialog.h" |
54 | 58 | ||
55 | 59 | ||
56 | AlarmDialog::AlarmDialog(QWidget *parent,const char *name) | 60 | AlarmDialog::AlarmDialog(QWidget *parent,const char *name) |
57 | : QDialog (parent, name, true, Qt::WStyle_StaysOnTop ) | 61 | : QDialog (parent, name, true, Qt::WStyle_StaysOnTop ) |
58 | { | 62 | { |
59 | setCaption( "KO/Pi Alarm!" ); | 63 | setCaption( "KO/Pi Alarm!" ); |
60 | QVBoxLayout* layout = new QVBoxLayout( this); | 64 | QVBoxLayout* layout = new QVBoxLayout( this); |
61 | QLabel* l = new QLabel("The following event triggered alarm:",this); | 65 | QLabel* l = new QLabel("The following event triggered alarm:",this); |
62 | layout->addWidget ( l ); | 66 | layout->addWidget ( l ); |
63 | l->setAlignment( AlignCenter); | 67 | l->setAlignment( AlignCenter); |
64 | mMessage = new QLabel ( " ", this ); | 68 | mMessage = new QLabel ( " ", this ); |
65 | int fs = 18; | 69 | int fs = 18; |
66 | int fs2 = 12; | 70 | int fs2 = 12; |
67 | if ( QApplication::desktop()->width() < 480 ) { | 71 | if ( QApplication::desktop()->width() < 480 ) { |
68 | setMaximumSize(220, 260); | 72 | setMaximumSize(220, 260); |
69 | fs2 = 10; | 73 | fs2 = 10; |
70 | } | 74 | } |
71 | else { | 75 | else { |
72 | setMaximumSize(440, 440); | 76 | setMaximumSize(440, 440); |
73 | } | 77 | } |
74 | layout->setSpacing( 3 ); | 78 | layout->setSpacing( 3 ); |
75 | layout->setMargin( 3 ); | 79 | layout->setMargin( 3 ); |
76 | QFont fo = QApplication::font(); | 80 | QFont fo = QApplication::font(); |
77 | fo.setBold( true ); | 81 | fo.setBold( true ); |
78 | fo.setPointSize( fs2 ); | 82 | fo.setPointSize( fs2 ); |
79 | l->setFont( fo ); | 83 | l->setFont( fo ); |
80 | fo.setPointSize( fs ); | 84 | fo.setPointSize( fs ); |
81 | mMessage->setFont(fo ); | 85 | mMessage->setFont(fo ); |
82 | mMessage->setAlignment( AlignCenter); | 86 | mMessage->setAlignment( AlignCenter); |
83 | layout->addWidget ( mMessage ); | 87 | layout->addWidget ( mMessage ); |
84 | mMissedAlarms= new QLabel ( "(No missed Alarms)", this ); | 88 | mMissedAlarms= new QLabel ( "(No missed Alarms)", this ); |
85 | mMissedAlarms->setAlignment( AlignCenter); | 89 | mMissedAlarms->setAlignment( AlignCenter); |
86 | 90 | ||
87 | playSoundTimer = new QTimer( this ); | 91 | playSoundTimer = new QTimer( this ); |
88 | connect ( playSoundTimer, SIGNAL( timeout() ), this, SLOT (playSound() ) ); | 92 | connect ( playSoundTimer, SIGNAL( timeout() ), this, SLOT (playSound() ) ); |
89 | 93 | ||
90 | playSoundTimer->stop(); | 94 | playSoundTimer->stop(); |
91 | 95 | ||
92 | layout->addWidget ( mMissedAlarms ); | 96 | layout->addWidget ( mMissedAlarms ); |
93 | mMissedAlarmsCombo = new QComboBox ( this ); | 97 | mMissedAlarmsCombo = new QComboBox ( this ); |
94 | layout->addWidget ( mMissedAlarmsCombo ); | 98 | layout->addWidget ( mMissedAlarmsCombo ); |
95 | 99 | ||
96 | QLabel* labb = new QLabel("Suspend duration (minutes):",this); | 100 | QLabel* labb = new QLabel("Suspend duration (minutes):",this); |
97 | labb->setAlignment(AlignCenter); | 101 | labb->setAlignment(AlignCenter); |
98 | layout->addWidget ( labb ); | 102 | layout->addWidget ( labb ); |
99 | fo = font(); | 103 | fo = font(); |
100 | int pointSize = 36; | 104 | int pointSize = 36; |
101 | if ( QApplication::desktop()->width() <= 320 ) | 105 | if ( QApplication::desktop()->width() <= 320 ) |
102 | pointSize = 24; | 106 | pointSize = 24; |
103 | fo.setPointSize( pointSize ); | 107 | fo.setPointSize( pointSize ); |
104 | mSuspendSpin = new QSpinBox(1,1440,1,this); | 108 | mSuspendSpin = new QSpinBox(1,1440,1,this); |
105 | mSuspendSpin->setFont( fo ); | 109 | mSuspendSpin->setFont( fo ); |
106 | mSuspendSpin->setValue(7); // default suspend duration | 110 | mSuspendSpin->setValue(7); // default suspend duration |
107 | mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); | 111 | mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); |
108 | mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); | 112 | mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); |
109 | #if QT_VERSION < 0x030000 | 113 | #if QT_VERSION < 0x030000 |
110 | mSuspendSpin->upButton ()->setFixedSize( QSize( 48, 30 )); | 114 | mSuspendSpin->upButton ()->setFixedSize( QSize( 48, 30 )); |
111 | mSuspendSpin->downButton ()->setFixedSize( QSize( 48, 30 )); | 115 | mSuspendSpin->downButton ()->setFixedSize( QSize( 48, 30 )); |
112 | #endif | 116 | #endif |
113 | mSuspendSpin->setFixedSize( 100,62 ); | 117 | mSuspendSpin->setFixedSize( 100,62 ); |
114 | mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); | 118 | mSuspendSpin->setButtonSymbols( QSpinBox::PlusMinus ); |
115 | QHBoxLayout* layoutSpin = new QHBoxLayout( layout ); | 119 | QHBoxLayout* layoutSpin = new QHBoxLayout( layout ); |
116 | layoutSpin->addStretch (); | 120 | layoutSpin->addStretch (); |
117 | layoutSpin->addWidget ( mSuspendSpin ); | 121 | layoutSpin->addWidget ( mSuspendSpin ); |
118 | layoutSpin->addStretch (); | 122 | layoutSpin->addStretch (); |
119 | 123 | ||
120 | QVBox * bbox = new QVBox ( this ); | 124 | QVBox * bbox = new QVBox ( this ); |
121 | layout->addWidget ( bbox ); | 125 | layout->addWidget ( bbox ); |
122 | bbox->layout()->setSpacing( 2 ); | 126 | bbox->layout()->setSpacing( 2 ); |
123 | labb = new QLabel("Press \"Cancel\" or \"Esc\" to suspend!",bbox); | 127 | labb = new QLabel("Press \"Cancel\" or \"Esc\" to suspend!",bbox); |
124 | labb->setAlignment(AlignCenter); | 128 | labb->setAlignment(AlignCenter); |
125 | mSuspendButton = new QPushButton( "Suspend", bbox); | 129 | mSuspendButton = new QPushButton( "Suspend", bbox); |
126 | QPushButton* silen = new QPushButton( " Stop sound ", bbox); | 130 | QPushButton* silen = new QPushButton( " Stop sound ", bbox); |
127 | QPushButton* okbut = new QPushButton( "Ok", bbox); | 131 | QPushButton* okbut = new QPushButton( "Ok", bbox); |
128 | mSuspendButton->setFont( fo ); | 132 | mSuspendButton->setFont( fo ); |
129 | silen->setFont( fo ); | 133 | silen->setFont( fo ); |
130 | okbut->setFont( fo ); | 134 | okbut->setFont( fo ); |
131 | okbut->setDefault( true ); | 135 | okbut->setDefault( true ); |
132 | connect (silen , SIGNAL( clicked() ), this, SLOT (silent() ) ); | 136 | connect (silen , SIGNAL( clicked() ), this, SLOT (silent() ) ); |
133 | connect (mSuspendButton, SIGNAL( clicked() ), this, SLOT (slotSuspend() ) ); | 137 | connect (mSuspendButton, SIGNAL( clicked() ), this, SLOT (slotSuspend() ) ); |
134 | connect (okbut , SIGNAL( clicked() ), this, SLOT (slotOk() ) ); | 138 | connect (okbut , SIGNAL( clicked() ), this, SLOT (slotOk() ) ); |
135 | #ifndef _WIN32_ | 139 | #ifndef _WIN32_ |
136 | if ( QFile::exists ( "/dev/sharp_led" ) ) | 140 | if ( QFile::exists ( "/dev/sharp_led" ) ) |
137 | fd_led = open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); | 141 | fd_led = open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); |
138 | else | 142 | else |
139 | #endif | 143 | #endif |
140 | fd_led = 0; | 144 | fd_led = 0; |
141 | statusLED.which = SHARP_LED_SALARM; | 145 | statusLED.which = SHARP_LED_SALARM; |
142 | mSilent = false; | 146 | mSilent = false; |
143 | mSuspendCounter = 0; | 147 | mSuspendCounter = 0; |
144 | setServerNotification( true ); | 148 | setServerNotification( true ); |
145 | } | 149 | } |
146 | void AlarmDialog::reject () | 150 | void AlarmDialog::reject () |
147 | { | 151 | { |
148 | QTimer::singleShot ( 3000, this, SLOT (suspend()) ); | 152 | QTimer::singleShot ( 3000, this, SLOT (suspend()) ); |
149 | slotSuspend(); | 153 | slotSuspend(); |
150 | } | 154 | } |
151 | AlarmDialog::~AlarmDialog() | 155 | AlarmDialog::~AlarmDialog() |
152 | { | 156 | { |
153 | } | 157 | } |
154 | void AlarmDialog::silent () | 158 | void AlarmDialog::silent () |
155 | { | 159 | { |
156 | mSilent = true; | 160 | mSilent = true; |
157 | } | 161 | } |
158 | void AlarmDialog::accept() | 162 | void AlarmDialog::accept() |
159 | { | 163 | { |
160 | slotOk(); | 164 | slotOk(); |
161 | } | 165 | } |
162 | 166 | ||
163 | void AlarmDialog::suspend() | 167 | void AlarmDialog::suspend() |
164 | { | 168 | { |
165 | #ifdef DESKTOP_VERSION | 169 | #ifdef DESKTOP_VERSION |
166 | 170 | ||
167 | #else | 171 | #else |
168 | Sound::soundAlarm (); | 172 | Sound::soundAlarm (); |
169 | #endif | 173 | #endif |
170 | } | 174 | } |
171 | void AlarmDialog::slotOk() | 175 | void AlarmDialog::slotOk() |
172 | { | 176 | { |
173 | mStopAlarm = true; | 177 | mStopAlarm = true; |
174 | mMissedAlarms->setText("(No missed Alarms)"); | 178 | mMissedAlarms->setText("(No missed Alarms)"); |
175 | mMessage->setText(""); | 179 | mMessage->setText(""); |
176 | mMissedAlarmsCombo->clear(); | 180 | mMissedAlarmsCombo->clear(); |
177 | #ifndef _WIN32_ | 181 | #ifndef _WIN32_ |
178 | if ( fd_led > 0 ) { | 182 | if ( fd_led > 0 ) { |
179 | statusLED.status = LED_SALARM_OFF ; | 183 | statusLED.status = LED_SALARM_OFF ; |
180 | ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED); | 184 | ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED); |
181 | } | 185 | } |
182 | #endif | 186 | #endif |
183 | QDialog::accept(); | 187 | QDialog::accept(); |
184 | } | 188 | } |
185 | 189 | ||
186 | void AlarmDialog::slotSuspend() | 190 | void AlarmDialog::slotSuspend() |
187 | { | 191 | { |
188 | //qDebug("AlarmDialog::suspend() "); // emit suspendSignal(mSuspendSpin->value()); | 192 | //qDebug("AlarmDialog::suspend() "); // emit suspendSignal(mSuspendSpin->value()); |
189 | mStopAlarm = true; | 193 | mStopAlarm = true; |
190 | QDateTime nextA = QDateTime::currentDateTime().addSecs( mSuspendSpin->value() * 60 ); | 194 | QDateTime nextA = QDateTime::currentDateTime().addSecs( mSuspendSpin->value() * 60 ); |
191 | QString mess = "suspend_alarm" +mFileName+"+++" ; | 195 | QString mess = "suspend_alarm" +mFileName+"+++" ; |
192 | if ( mMessage->text().left( 10 ) !="Suspended:" ) | 196 | if ( mMessage->text().left( 10 ) !="Suspended:" ) |
193 | mess += "Suspended:\n"; | 197 | mess += "Suspended:\n"; |
194 | mess +=mMessage->text(); | 198 | mess +=mMessage->text(); |
195 | #ifndef DESKTOP_VERSION | 199 | #ifndef DESKTOP_VERSION |
196 | if ( mServerNotification ) | 200 | if ( mServerNotification ) |
197 | AlarmServer::addAlarm ( nextA,"koalarm",mess.latin1()); | 201 | AlarmServer::addAlarm ( nextA,"koalarm",mess.latin1()); |
198 | #endif | 202 | #endif |
199 | emit addAlarm( nextA , mess ); | 203 | emit addAlarm( nextA , mess ); |
200 | slotOk(); | 204 | slotOk(); |
201 | } | 205 | } |
202 | 206 | ||
203 | void AlarmDialog::setServerNotification( bool b ) | 207 | void AlarmDialog::setServerNotification( bool b ) |
204 | { | 208 | { |
205 | mServerNotification = b; | 209 | mServerNotification = b; |
206 | } | 210 | } |
207 | int AlarmDialog::getSuspendTime( ) | 211 | int AlarmDialog::getSuspendTime( ) |
208 | { | 212 | { |
209 | return mSuspendSpin->value(); | 213 | return mSuspendSpin->value(); |
210 | 214 | ||
211 | } | 215 | } |
212 | void AlarmDialog::setSuspendTime( int val ) | 216 | void AlarmDialog::setSuspendTime( int val ) |
213 | { | 217 | { |
214 | mSuspendSpin->setValue( val ); | 218 | mSuspendSpin->setValue( val ); |
215 | } | 219 | } |
216 | bool AlarmDialog::eventNotification( QString mess, int replay , QString fn, bool playwav, int pause , int suspendtimes) | 220 | bool AlarmDialog::eventNotification( QString mess, int replay , QString fn, bool playwav, int pause , int suspendtimes) |
217 | { | 221 | { |
218 | if ( mess.left( 9) != "Suspended" ) | 222 | if ( mess.left( 9) != "Suspended" ) |
219 | mSuspendCounter = suspendtimes; | 223 | mSuspendCounter = suspendtimes; |
220 | mPauseCount = pause; | 224 | mPauseCount = pause; |
221 | mFileName = fn; | 225 | mFileName = fn; |
222 | mPlayWav = playwav; | 226 | mPlayWav = playwav; |
223 | if ( !QFile::exists( fn ) ) | 227 | if ( !QFile::exists( fn ) ) |
224 | mFileName = ""; | 228 | mFileName = ""; |
225 | alarmCounter = 0 ; | 229 | alarmCounter = 0 ; |
226 | maxAlarmReplay = replay ; | 230 | maxAlarmReplay = replay ; |
227 | mStopAlarm = false; | 231 | mStopAlarm = false; |
228 | mSilent = false; | 232 | mSilent = false; |
229 | if ( !mMessage->text().stripWhiteSpace().isEmpty() ) { | 233 | if ( !mMessage->text().stripWhiteSpace().isEmpty() ) { |
230 | mMissedAlarmsCombo->show(); | 234 | mMissedAlarmsCombo->show(); |
231 | mMissedAlarmsCombo->insertItem( mMessage->text().stripWhiteSpace() ); | 235 | mMissedAlarmsCombo->insertItem( mMessage->text().stripWhiteSpace() ); |
232 | mMissedAlarms->setText( "Missed alarms:"); | 236 | mMissedAlarms->setText( "Missed alarms:"); |
233 | } else | 237 | } else |
234 | mMissedAlarmsCombo->hide(); | 238 | mMissedAlarmsCombo->hide(); |
235 | mMessage->setText(mess); | 239 | mMessage->setText(mess); |
236 | int w =sizeHint().width() ; | 240 | int w =sizeHint().width() ; |
237 | int h = sizeHint().height() ; | 241 | int h = sizeHint().height() ; |
238 | int dw = QApplication::desktop()->width(); | 242 | int dw = QApplication::desktop()->width(); |
239 | int dh = QApplication::desktop()->height(); | 243 | int dh = QApplication::desktop()->height(); |
240 | setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 244 | setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
241 | show(); | 245 | show(); |
242 | raise(); | 246 | raise(); |
243 | qApp->processEvents(); | 247 | qApp->processEvents(); |
244 | repaint(); | 248 | repaint(); |
245 | qApp->processEvents(); | 249 | qApp->processEvents(); |
246 | 250 | ||
247 | #ifndef _WIN32_ | 251 | #ifndef _WIN32_ |
248 | if ( fd_led > 0 ) { | 252 | if ( fd_led > 0 ) { |
249 | statusLED.status = LED_SALARM_ON ; | 253 | statusLED.status = LED_SALARM_ON ; |
250 | ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED); | 254 | ioctl (fd_led, SHARP_LED_SETSTATUS, &statusLED); |
251 | } | 255 | } |
252 | #endif | 256 | #endif |
253 | playSoundTimer->start( 1000, true ); | 257 | playSoundTimer->start( 1000, true ); |
254 | return true; | 258 | return true; |
255 | 259 | ||
256 | } | 260 | } |
257 | 261 | ||
258 | 262 | ||
259 | void AlarmDialog::playSound () | 263 | void AlarmDialog::playSound () |
260 | { | 264 | { |
261 | if (mStopAlarm ) | 265 | if (mStopAlarm ) |
262 | return; | 266 | return; |
263 | showNormal(); | 267 | showNormal(); |
264 | setActiveWindow(); | 268 | setActiveWindow(); |
265 | mSuspendSpin->setFocus(); | 269 | mSuspendSpin->setFocus(); |
266 | raise(); | 270 | raise(); |
267 | 271 | ||
268 | qApp->processEvents(); | 272 | qApp->processEvents(); |
269 | if ( alarmCounter < maxAlarmReplay && ! mSilent) { | 273 | if ( alarmCounter < maxAlarmReplay && ! mSilent) { |
270 | ++alarmCounter; | 274 | ++alarmCounter; |
271 | #ifdef DESKTOP_VERSION | 275 | #ifdef DESKTOP_VERSION |
272 | mPlayWav = true; | 276 | mPlayWav = true; |
273 | #endif | 277 | #endif |
274 | if ( !mPlayWav || mFileName.length() < 2 ) { | 278 | if ( !mPlayWav || mFileName.length() < 2 ) { |
275 | 279 | ||
276 | #ifdef DESKTOP_VERSION | 280 | #ifdef DESKTOP_VERSION |
277 | qDebug("Sound play not possible - file not found"); | 281 | qDebug("Sound play not possible - file not found"); |
278 | #else | 282 | #else |
279 | Sound::soundAlarm (); | 283 | Sound::soundAlarm (); |
280 | #endif | 284 | #endif |
281 | } else | 285 | } else |
282 | 286 | ||
283 | { | 287 | { |
284 | #ifdef DESKTOP_VERSION | 288 | #ifdef DESKTOP_VERSION |
285 | #ifdef _WIN32_ | 289 | #ifdef _WIN32_ |
286 | QSound::play ( mFileName ); | 290 | QSound::play ( mFileName ); |
287 | #else | 291 | #else |
288 | 292 | ||
289 | QString command = "playwave -r 22050 " + mFileName; | 293 | QString command = "playwave -r 22050 " + mFileName; |
290 | qDebug("KO: Playing file %s with 22kHz",mFileName.latin1() ); | 294 | qDebug("KO: Playing file %s with 22kHz",mFileName.latin1() ); |
291 | int ret = system ( command.latin1() ); | 295 | int ret = system ( command.latin1() ); |
292 | if ( ret != 0 ) { | 296 | if ( ret != 0 ) { |
293 | qDebug("Sound play command failed: %s ",command.latin1() ); | 297 | qDebug("Sound play command failed: %s ",command.latin1() ); |
294 | } | 298 | } |
295 | 299 | ||
296 | #endif | 300 | #endif |
297 | 301 | ||
298 | #else | 302 | #else |
299 | QSound::play ( mFileName ); | 303 | QSound::play ( mFileName ); |
300 | #endif | 304 | #endif |
301 | //qDebug("BEEP!"); | 305 | //qDebug("BEEP!"); |
302 | } | 306 | } |
303 | } else { | 307 | } else { |
304 | if ( ! mSilent && mSuspendCounter > 0 ) { | 308 | if ( ! mSilent && mSuspendCounter > 0 ) { |
305 | --mSuspendCounter; | 309 | --mSuspendCounter; |
306 | reject (); | 310 | reject (); |
307 | hide(); | 311 | hide(); |
308 | return; | 312 | return; |
309 | } | 313 | } |
310 | } | 314 | } |
311 | playSoundTimer->start( mPauseCount * 1000, true ); | 315 | playSoundTimer->start( mPauseCount * 1000, true ); |
312 | } | 316 | } |
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 73aa733..a330414 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -3688,395 +3688,417 @@ void CalendarView::updateFilter() | |||
3688 | if (mFilterView->filtersEnabled()) { | 3688 | if (mFilterView->filtersEnabled()) { |
3689 | mess = i18n("Filter selected: ")+filter->name(); | 3689 | mess = i18n("Filter selected: ")+filter->name(); |
3690 | filter->setEnabled(true); | 3690 | filter->setEnabled(true); |
3691 | } | 3691 | } |
3692 | else filter->setEnabled(false); | 3692 | else filter->setEnabled(false); |
3693 | mCalendar->setFilter(filter); | 3693 | mCalendar->setFilter(filter); |
3694 | updateView(); | 3694 | updateView(); |
3695 | if ( !mess.isEmpty() ) | 3695 | if ( !mess.isEmpty() ) |
3696 | topLevelWidget()->setCaption( mess ); | 3696 | topLevelWidget()->setCaption( mess ); |
3697 | 3697 | ||
3698 | } | 3698 | } |
3699 | } | 3699 | } |
3700 | 3700 | ||
3701 | void CalendarView::filterEdited() | 3701 | void CalendarView::filterEdited() |
3702 | { | 3702 | { |
3703 | mFilterView->updateFilters(); | 3703 | mFilterView->updateFilters(); |
3704 | updateFilter(); | 3704 | updateFilter(); |
3705 | writeSettings(); | 3705 | writeSettings(); |
3706 | } | 3706 | } |
3707 | 3707 | ||
3708 | 3708 | ||
3709 | void CalendarView::takeOverEvent() | 3709 | void CalendarView::takeOverEvent() |
3710 | { | 3710 | { |
3711 | Incidence *incidence = currentSelection(); | 3711 | Incidence *incidence = currentSelection(); |
3712 | 3712 | ||
3713 | if (!incidence) return; | 3713 | if (!incidence) return; |
3714 | 3714 | ||
3715 | incidence->setOrganizer(KOPrefs::instance()->email()); | 3715 | incidence->setOrganizer(KOPrefs::instance()->email()); |
3716 | incidence->recreate(); | 3716 | incidence->recreate(); |
3717 | incidence->setReadOnly(false); | 3717 | incidence->setReadOnly(false); |
3718 | 3718 | ||
3719 | updateView(); | 3719 | updateView(); |
3720 | } | 3720 | } |
3721 | 3721 | ||
3722 | void CalendarView::takeOverCalendar() | 3722 | void CalendarView::takeOverCalendar() |
3723 | { | 3723 | { |
3724 | // TODO: Create Calendar::allIncidences() function and use it here | 3724 | // TODO: Create Calendar::allIncidences() function and use it here |
3725 | 3725 | ||
3726 | QPtrList<Event> events = mCalendar->events(); | 3726 | QPtrList<Event> events = mCalendar->events(); |
3727 | for(uint i=0; i<events.count(); ++i) { | 3727 | for(uint i=0; i<events.count(); ++i) { |
3728 | events.at(i)->setOrganizer(KOPrefs::instance()->email()); | 3728 | events.at(i)->setOrganizer(KOPrefs::instance()->email()); |
3729 | events.at(i)->recreate(); | 3729 | events.at(i)->recreate(); |
3730 | events.at(i)->setReadOnly(false); | 3730 | events.at(i)->setReadOnly(false); |
3731 | } | 3731 | } |
3732 | 3732 | ||
3733 | QPtrList<Todo> todos = mCalendar->todos(); | 3733 | QPtrList<Todo> todos = mCalendar->todos(); |
3734 | for(uint i=0; i<todos.count(); ++i) { | 3734 | for(uint i=0; i<todos.count(); ++i) { |
3735 | todos.at(i)->setOrganizer(KOPrefs::instance()->email()); | 3735 | todos.at(i)->setOrganizer(KOPrefs::instance()->email()); |
3736 | todos.at(i)->recreate(); | 3736 | todos.at(i)->recreate(); |
3737 | todos.at(i)->setReadOnly(false); | 3737 | todos.at(i)->setReadOnly(false); |
3738 | } | 3738 | } |
3739 | 3739 | ||
3740 | QPtrList<Journal> journals = mCalendar->journals(); | 3740 | QPtrList<Journal> journals = mCalendar->journals(); |
3741 | for(uint i=0; i<journals.count(); ++i) { | 3741 | for(uint i=0; i<journals.count(); ++i) { |
3742 | journals.at(i)->setOrganizer(KOPrefs::instance()->email()); | 3742 | journals.at(i)->setOrganizer(KOPrefs::instance()->email()); |
3743 | journals.at(i)->recreate(); | 3743 | journals.at(i)->recreate(); |
3744 | journals.at(i)->setReadOnly(false); | 3744 | journals.at(i)->setReadOnly(false); |
3745 | } | 3745 | } |
3746 | 3746 | ||
3747 | updateView(); | 3747 | updateView(); |
3748 | } | 3748 | } |
3749 | 3749 | ||
3750 | void CalendarView::showIntro() | 3750 | void CalendarView::showIntro() |
3751 | { | 3751 | { |
3752 | kdDebug() << "To be implemented." << endl; | 3752 | kdDebug() << "To be implemented." << endl; |
3753 | } | 3753 | } |
3754 | 3754 | ||
3755 | QWidgetStack *CalendarView::viewStack() | 3755 | QWidgetStack *CalendarView::viewStack() |
3756 | { | 3756 | { |
3757 | return mRightFrame; | 3757 | return mRightFrame; |
3758 | } | 3758 | } |
3759 | 3759 | ||
3760 | QWidget *CalendarView::leftFrame() | 3760 | QWidget *CalendarView::leftFrame() |
3761 | { | 3761 | { |
3762 | return ( QWidget *)mLeftFrame; | 3762 | return ( QWidget *)mLeftFrame; |
3763 | } | 3763 | } |
3764 | 3764 | ||
3765 | DateNavigator *CalendarView::dateNavigator() | 3765 | DateNavigator *CalendarView::dateNavigator() |
3766 | { | 3766 | { |
3767 | return mNavigator; | 3767 | return mNavigator; |
3768 | } | 3768 | } |
3769 | 3769 | ||
3770 | KDateNavigator* CalendarView::dateNavigatorWidget() | 3770 | KDateNavigator* CalendarView::dateNavigatorWidget() |
3771 | { | 3771 | { |
3772 | return mDateNavigator->navigatorView(); | 3772 | return mDateNavigator->navigatorView(); |
3773 | } | 3773 | } |
3774 | void CalendarView::toggleDateNavigatorWidget() | 3774 | void CalendarView::toggleDateNavigatorWidget() |
3775 | { | 3775 | { |
3776 | KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; | 3776 | KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; |
3777 | 3777 | ||
3778 | if (!KOPrefs::instance()->mShowDateNavigator ) | 3778 | if (!KOPrefs::instance()->mShowDateNavigator ) |
3779 | mDateNavigator->hide(); | 3779 | mDateNavigator->hide(); |
3780 | else | 3780 | else |
3781 | mDateNavigator->show(); | 3781 | mDateNavigator->show(); |
3782 | } | 3782 | } |
3783 | void CalendarView::addView(KOrg::BaseView *view) | 3783 | void CalendarView::addView(KOrg::BaseView *view) |
3784 | { | 3784 | { |
3785 | mViewManager->addView(view); | 3785 | mViewManager->addView(view); |
3786 | } | 3786 | } |
3787 | 3787 | ||
3788 | void CalendarView::showView(KOrg::BaseView *view) | 3788 | void CalendarView::showView(KOrg::BaseView *view) |
3789 | { | 3789 | { |
3790 | mViewManager->showView(view, mLeftFrame->isVisible()); | 3790 | mViewManager->showView(view, mLeftFrame->isVisible()); |
3791 | } | 3791 | } |
3792 | 3792 | ||
3793 | Incidence *CalendarView::currentSelection() | 3793 | Incidence *CalendarView::currentSelection() |
3794 | { | 3794 | { |
3795 | return mViewManager->currentSelection(); | 3795 | return mViewManager->currentSelection(); |
3796 | } | 3796 | } |
3797 | void CalendarView::toggleAllDaySize() | 3797 | void CalendarView::toggleAllDaySize() |
3798 | { | 3798 | { |
3799 | /* | 3799 | /* |
3800 | if ( KOPrefs::instance()->mAllDaySize > 47 ) | 3800 | if ( KOPrefs::instance()->mAllDaySize > 47 ) |
3801 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; | 3801 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; |
3802 | else | 3802 | else |
3803 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; | 3803 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; |
3804 | */ | 3804 | */ |
3805 | viewManager()->agendaView()->toggleAllDay(); | 3805 | viewManager()->agendaView()->toggleAllDay(); |
3806 | } | 3806 | } |
3807 | void CalendarView::toggleExpand() | 3807 | void CalendarView::toggleExpand() |
3808 | { | 3808 | { |
3809 | // if ( mLeftFrame->isHidden() ) { | 3809 | // if ( mLeftFrame->isHidden() ) { |
3810 | // mLeftFrame->show(); | 3810 | // mLeftFrame->show(); |
3811 | // emit calendarViewExpanded( false ); | 3811 | // emit calendarViewExpanded( false ); |
3812 | // } else { | 3812 | // } else { |
3813 | // mLeftFrame->hide(); | 3813 | // mLeftFrame->hide(); |
3814 | // emit calendarViewExpanded( true ); | 3814 | // emit calendarViewExpanded( true ); |
3815 | // } | 3815 | // } |
3816 | //qDebug(" CalendarView::toggleExpand()"); | 3816 | //qDebug(" CalendarView::toggleExpand()"); |
3817 | globalFlagBlockAgenda = 1; | 3817 | globalFlagBlockAgenda = 1; |
3818 | emit calendarViewExpanded( !mLeftFrame->isHidden() ); | 3818 | emit calendarViewExpanded( !mLeftFrame->isHidden() ); |
3819 | globalFlagBlockAgenda = 5; | 3819 | globalFlagBlockAgenda = 5; |
3820 | mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); | 3820 | mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); |
3821 | //mViewManager->showView( 0, true ); | 3821 | //mViewManager->showView( 0, true ); |
3822 | } | 3822 | } |
3823 | 3823 | ||
3824 | void CalendarView::calendarModified( bool modified, Calendar * ) | 3824 | void CalendarView::calendarModified( bool modified, Calendar * ) |
3825 | { | 3825 | { |
3826 | setModified( modified ); | 3826 | setModified( modified ); |
3827 | } | 3827 | } |
3828 | 3828 | ||
3829 | Todo *CalendarView::selectedTodo() | 3829 | Todo *CalendarView::selectedTodo() |
3830 | { | 3830 | { |
3831 | Incidence *incidence = currentSelection(); | 3831 | Incidence *incidence = currentSelection(); |
3832 | if ( incidence && incidence->type() == "Todo" ) { | 3832 | if ( incidence && incidence->type() == "Todo" ) { |
3833 | return static_cast<Todo *>( incidence ); | 3833 | return static_cast<Todo *>( incidence ); |
3834 | } | 3834 | } |
3835 | 3835 | ||
3836 | incidence = mTodoList->selectedIncidences().first(); | 3836 | incidence = mTodoList->selectedIncidences().first(); |
3837 | if ( incidence && incidence->type() == "Todo" ) { | 3837 | if ( incidence && incidence->type() == "Todo" ) { |
3838 | return static_cast<Todo *>( incidence ); | 3838 | return static_cast<Todo *>( incidence ); |
3839 | } | 3839 | } |
3840 | 3840 | ||
3841 | return 0; | 3841 | return 0; |
3842 | } | 3842 | } |
3843 | 3843 | ||
3844 | void CalendarView::dialogClosing(Incidence *in) | 3844 | void CalendarView::dialogClosing(Incidence *in) |
3845 | { | 3845 | { |
3846 | // mDialogList.remove(in); | 3846 | // mDialogList.remove(in); |
3847 | } | 3847 | } |
3848 | 3848 | ||
3849 | void CalendarView::showIncidence() | 3849 | void CalendarView::showIncidence() |
3850 | { | 3850 | { |
3851 | mViewerCallerIsSearchDialog = false; | 3851 | mViewerCallerIsSearchDialog = false; |
3852 | Incidence *incidence = currentSelection(); | 3852 | Incidence *incidence = currentSelection(); |
3853 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 3853 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
3854 | if ( incidence ) { | 3854 | if ( incidence ) { |
3855 | ShowIncidenceVisitor v; | 3855 | ShowIncidenceVisitor v; |
3856 | v.act( incidence, this ); | 3856 | v.act( incidence, this ); |
3857 | } | 3857 | } |
3858 | } | 3858 | } |
3859 | void CalendarView::editIncidenceDescription() | 3859 | void CalendarView::editIncidenceDescription() |
3860 | { | 3860 | { |
3861 | mFlagEditDescription = true; | 3861 | mFlagEditDescription = true; |
3862 | editIncidence(); | 3862 | editIncidence(); |
3863 | mFlagEditDescription = false; | 3863 | mFlagEditDescription = false; |
3864 | } | 3864 | } |
3865 | void CalendarView::editIncidence() | 3865 | void CalendarView::editIncidence() |
3866 | { | 3866 | { |
3867 | // qDebug("editIncidence() "); | 3867 | // qDebug("editIncidence() "); |
3868 | Incidence *incidence = currentSelection(); | 3868 | Incidence *incidence = currentSelection(); |
3869 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 3869 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
3870 | if ( incidence ) { | 3870 | if ( incidence ) { |
3871 | EditIncidenceVisitor v; | 3871 | EditIncidenceVisitor v; |
3872 | v.act( incidence, this ); | 3872 | v.act( incidence, this ); |
3873 | } | 3873 | } |
3874 | } | 3874 | } |
3875 | 3875 | ||
3876 | void CalendarView::deleteIncidence() | 3876 | void CalendarView::deleteIncidence() |
3877 | { | 3877 | { |
3878 | Incidence *incidence = currentSelection(); | 3878 | Incidence *incidence = currentSelection(); |
3879 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 3879 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
3880 | if ( incidence ) { | 3880 | if ( incidence ) { |
3881 | deleteIncidence(incidence); | 3881 | deleteIncidence(incidence); |
3882 | } | 3882 | } |
3883 | } | 3883 | } |
3884 | 3884 | ||
3885 | void CalendarView::showIncidence(Incidence *incidence) | 3885 | void CalendarView::showIncidence(Incidence *incidence) |
3886 | { | 3886 | { |
3887 | mViewerCallerIsSearchDialog = false; | 3887 | mViewerCallerIsSearchDialog = false; |
3888 | //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); | 3888 | //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); |
3889 | if ( sender() && mDialogManager->getSearchDialog() ) { | 3889 | if ( sender() && mDialogManager->getSearchDialog() ) { |
3890 | if ( sender () == mDialogManager->getSearchDialog()->listview() ) { | 3890 | if ( sender () == mDialogManager->getSearchDialog()->listview() ) { |
3891 | mViewerCallerIsSearchDialog = true; | 3891 | mViewerCallerIsSearchDialog = true; |
3892 | } | 3892 | } |
3893 | } | 3893 | } |
3894 | if ( incidence ) { | 3894 | if ( incidence ) { |
3895 | ShowIncidenceVisitor v; | 3895 | ShowIncidenceVisitor v; |
3896 | v.act( incidence, this ); | 3896 | v.act( incidence, this ); |
3897 | } | 3897 | } |
3898 | } | 3898 | } |
3899 | 3899 | ||
3900 | void CalendarView::editIncidence(Incidence *incidence) | 3900 | void CalendarView::editIncidence(Incidence *incidence) |
3901 | { | 3901 | { |
3902 | if ( incidence ) { | 3902 | if ( incidence ) { |
3903 | 3903 | ||
3904 | EditIncidenceVisitor v; | 3904 | EditIncidenceVisitor v; |
3905 | v.act( incidence, this ); | 3905 | v.act( incidence, this ); |
3906 | 3906 | ||
3907 | } | 3907 | } |
3908 | } | 3908 | } |
3909 | 3909 | ||
3910 | void CalendarView::deleteIncidence(Incidence *incidence) | 3910 | void CalendarView::deleteIncidence(Incidence *incidence) |
3911 | { | 3911 | { |
3912 | //qDebug(" CalendarView::deleteIncidence "); | 3912 | //qDebug(" CalendarView::deleteIncidence "); |
3913 | if ( incidence ) { | 3913 | if ( incidence ) { |
3914 | DeleteIncidenceVisitor v; | 3914 | DeleteIncidenceVisitor v; |
3915 | v.act( incidence, this ); | 3915 | v.act( incidence, this ); |
3916 | } | 3916 | } |
3917 | } | 3917 | } |
3918 | 3918 | ||
3919 | 3919 | ||
3920 | void CalendarView::lookForOutgoingMessages() | 3920 | void CalendarView::lookForOutgoingMessages() |
3921 | { | 3921 | { |
3922 | OutgoingDialog *ogd = mDialogManager->outgoingDialog(); | 3922 | OutgoingDialog *ogd = mDialogManager->outgoingDialog(); |
3923 | ogd->loadMessages(); | 3923 | ogd->loadMessages(); |
3924 | } | 3924 | } |
3925 | 3925 | ||
3926 | void CalendarView::lookForIncomingMessages() | 3926 | void CalendarView::lookForIncomingMessages() |
3927 | { | 3927 | { |
3928 | IncomingDialog *icd = mDialogManager->incomingDialog(); | 3928 | IncomingDialog *icd = mDialogManager->incomingDialog(); |
3929 | icd->retrieve(); | 3929 | icd->retrieve(); |
3930 | } | 3930 | } |
3931 | 3931 | ||
3932 | bool CalendarView::removeCompletedSubTodos( Todo* t ) | 3932 | bool CalendarView::removeCompletedSubTodos( Todo* t ) |
3933 | { | 3933 | { |
3934 | bool deleteTodo = true; | 3934 | bool deleteTodo = true; |
3935 | QPtrList<Incidence> subTodos; | 3935 | QPtrList<Incidence> subTodos; |
3936 | Incidence *aTodo; | 3936 | Incidence *aTodo; |
3937 | subTodos = t->relations(); | 3937 | subTodos = t->relations(); |
3938 | for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { | 3938 | for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { |
3939 | if (! removeCompletedSubTodos( (Todo*) aTodo )) | 3939 | if (! removeCompletedSubTodos( (Todo*) aTodo )) |
3940 | deleteTodo = false; | 3940 | deleteTodo = false; |
3941 | } | 3941 | } |
3942 | if ( deleteTodo ) { | 3942 | if ( deleteTodo ) { |
3943 | if ( t->isCompleted() && !t->doesRecur()) { | 3943 | if ( t->isCompleted() && !t->doesRecur()) { |
3944 | checkExternalId( t ); | 3944 | checkExternalId( t ); |
3945 | mCalendar->deleteTodo( t ); | 3945 | mCalendar->deleteTodo( t ); |
3946 | changeTodoDisplay( t,KOGlobals::EVENTDELETED ); | 3946 | changeTodoDisplay( t,KOGlobals::EVENTDELETED ); |
3947 | } | 3947 | } |
3948 | else | 3948 | else |
3949 | deleteTodo = false; | 3949 | deleteTodo = false; |
3950 | } | 3950 | } |
3951 | return deleteTodo; | 3951 | return deleteTodo; |
3952 | 3952 | ||
3953 | } | 3953 | } |
3954 | void CalendarView::purgeCompleted() | 3954 | void CalendarView::purgeCompleted() |
3955 | { | 3955 | { |
3956 | int result = KMessageBox::warningContinueCancel(this, | 3956 | int result = KMessageBox::warningContinueCancel(this, |
3957 | i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); | 3957 | i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); |
3958 | 3958 | ||
3959 | if (result == KMessageBox::Continue) { | 3959 | if (result == KMessageBox::Continue) { |
3960 | 3960 | ||
3961 | QPtrList<Todo> todoCal; | 3961 | QPtrList<Todo> todoCal; |
3962 | QPtrList<Todo> rootTodos; | 3962 | QPtrList<Todo> rootTodos; |
3963 | //QPtrList<Incidence> rel; | 3963 | //QPtrList<Incidence> rel; |
3964 | Todo *aTodo;//, *rTodo; | 3964 | Todo *aTodo;//, *rTodo; |
3965 | Incidence *rIncidence; | 3965 | Incidence *rIncidence; |
3966 | bool childDelete = false; | 3966 | bool childDelete = false; |
3967 | bool deletedOne = true; | 3967 | bool deletedOne = true; |
3968 | todoCal = calendar()->todos(); | 3968 | todoCal = calendar()->todos(); |
3969 | for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { | 3969 | for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { |
3970 | if ( !aTodo->relatedTo() ) | 3970 | if ( !aTodo->relatedTo() ) |
3971 | rootTodos.append( aTodo ); | 3971 | rootTodos.append( aTodo ); |
3972 | } | 3972 | } |
3973 | for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { | 3973 | for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { |
3974 | removeCompletedSubTodos( aTodo ); | 3974 | removeCompletedSubTodos( aTodo ); |
3975 | } | 3975 | } |
3976 | 3976 | ||
3977 | updateView(); | 3977 | updateView(); |
3978 | } | 3978 | } |
3979 | } | 3979 | } |
3980 | 3980 | ||
3981 | void CalendarView::slotCalendarChanged() | 3981 | void CalendarView::slotCalendarChanged() |
3982 | { | 3982 | { |
3983 | ; | 3983 | ; |
3984 | } | 3984 | } |
3985 | 3985 | ||
3986 | void CalendarView::keyPressEvent ( QKeyEvent *e) | 3986 | void CalendarView::keyPressEvent ( QKeyEvent *e) |
3987 | { | 3987 | { |
3988 | //qDebug(" alendarView::keyPressEvent "); | 3988 | //qDebug(" alendarView::keyPressEvent "); |
3989 | e->ignore(); | 3989 | e->ignore(); |
3990 | } | 3990 | } |
3991 | 3991 | ||
3992 | 3992 | ||
3993 | bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) | 3993 | bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) |
3994 | { | 3994 | { |
3995 | // mSyncManager = manager; | 3995 | // mSyncManager = manager; |
3996 | if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { | 3996 | if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { |
3997 | qDebug("KO: SyncKDE request detected!"); | 3997 | qDebug("KO: SyncKDE request detected!"); |
3998 | } | 3998 | } |
3999 | mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); | 3999 | mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); |
4000 | mCurrentSyncName = mSyncManager->getCurrentSyncName(); | 4000 | mCurrentSyncName = mSyncManager->getCurrentSyncName(); |
4001 | return syncCalendar( filename, mode ); | 4001 | return syncCalendar( filename, mode ); |
4002 | } | 4002 | } |
4003 | bool CalendarView::syncExternal(KSyncManager* manager, QString resource) | 4003 | bool CalendarView::syncExternal(KSyncManager* manager, QString resource) |
4004 | { | 4004 | { |
4005 | //mSyncManager = manager; | 4005 | //mSyncManager = manager; |
4006 | mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); | 4006 | mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); |
4007 | mCurrentSyncName = mSyncManager->getCurrentSyncName(); | 4007 | mCurrentSyncName = mSyncManager->getCurrentSyncName(); |
4008 | if ( resource == "sharp" ) | 4008 | if ( resource == "sharp" ) |
4009 | syncExternal( 0 ); | 4009 | syncExternal( 0 ); |
4010 | if ( resource == "phone" ) | 4010 | if ( resource == "phone" ) |
4011 | syncExternal( 1 ); | 4011 | syncExternal( 1 ); |
4012 | // pending setmodified | 4012 | // pending setmodified |
4013 | return true; | 4013 | return true; |
4014 | } | 4014 | } |
4015 | void CalendarView::setSyncManager(KSyncManager* manager) | 4015 | void CalendarView::setSyncManager(KSyncManager* manager) |
4016 | { | 4016 | { |
4017 | mSyncManager = manager; | 4017 | mSyncManager = manager; |
4018 | } | 4018 | } |
4019 | 4019 | ||
4020 | void CalendarView::removeSyncInfo( QString syncProfile) | 4020 | void CalendarView::removeSyncInfo( QString syncProfile) |
4021 | { | 4021 | { |
4022 | qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); | 4022 | qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); |
4023 | mCalendar->removeSyncInfo( syncProfile ); | 4023 | mCalendar->removeSyncInfo( syncProfile ); |
4024 | 4024 | ||
4025 | } | 4025 | } |
4026 | 4026 | ||
4027 | void CalendarView::undo_delete() | 4027 | void CalendarView::undo_delete() |
4028 | { | 4028 | { |
4029 | //qDebug("undo_delete() "); | 4029 | //qDebug("undo_delete() "); |
4030 | Incidence* undo = mCalendar->undoIncidence(); | 4030 | Incidence* undo = mCalendar->undoIncidence(); |
4031 | if ( !undo ) { | 4031 | if ( !undo ) { |
4032 | KMessageBox::sorry(this,i18n("There is nothing to undo!"), | 4032 | KMessageBox::sorry(this,i18n("There is nothing to undo!"), |
4033 | i18n("KO/Pi")); | 4033 | i18n("KO/Pi")); |
4034 | return; | 4034 | return; |
4035 | } | 4035 | } |
4036 | if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + | 4036 | if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + |
4037 | i18n("\nAre you sure you want\nto restore this?"), | 4037 | i18n("\nAre you sure you want\nto restore this?"), |
4038 | i18n("KO/Pi Confirmation"),i18n("Restore"))) { | 4038 | i18n("KO/Pi Confirmation"),i18n("Restore"))) { |
4039 | mCalendar->undoDeleteIncidence(); | 4039 | mCalendar->undoDeleteIncidence(); |
4040 | updateView(); | 4040 | updateView(); |
4041 | } | 4041 | } |
4042 | } | 4042 | } |
4043 | 4043 | ||
4044 | void CalendarView::slotViewerClosed() | 4044 | void CalendarView::slotViewerClosed() |
4045 | { | 4045 | { |
4046 | QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); | 4046 | QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); |
4047 | } | 4047 | } |
4048 | 4048 | ||
4049 | void CalendarView::resetFocus() | 4049 | void CalendarView::resetFocus() |
4050 | { | 4050 | { |
4051 | if ( mViewerCallerIsSearchDialog ) { | 4051 | if ( mViewerCallerIsSearchDialog ) { |
4052 | if ( mDialogManager->getSearchDialog()->isVisible() ){ | 4052 | if ( mDialogManager->getSearchDialog()->isVisible() ){ |
4053 | mDialogManager->getSearchDialog()->raise(); | 4053 | mDialogManager->getSearchDialog()->raise(); |
4054 | mDialogManager->getSearchDialog()->setActiveWindow(); | 4054 | mDialogManager->getSearchDialog()->setActiveWindow(); |
4055 | mDialogManager->getSearchDialog()->listview()->resetFocus(); | 4055 | mDialogManager->getSearchDialog()->listview()->resetFocus(); |
4056 | } else | 4056 | } else |
4057 | mViewerCallerIsSearchDialog = false; | 4057 | mViewerCallerIsSearchDialog = false; |
4058 | } | 4058 | } |
4059 | if ( !mViewerCallerIsSearchDialog ) { | 4059 | if ( !mViewerCallerIsSearchDialog ) { |
4060 | //mViewManager->currentView()->setFocus(); | 4060 | //mViewManager->currentView()->setFocus(); |
4061 | //qDebug("sssssssssssssssset focus "); | 4061 | //qDebug("sssssssssssssssset focus "); |
4062 | topLevelWidget()->raise(); | 4062 | topLevelWidget()->raise(); |
4063 | setActiveWindow(); | 4063 | setActiveWindow(); |
4064 | //setFocus(); | 4064 | //setFocus(); |
4065 | } | 4065 | } |
4066 | mViewerCallerIsSearchDialog = false; | 4066 | mViewerCallerIsSearchDialog = false; |
4067 | } | 4067 | } |
4068 | 4068 | ||
4069 | void CalendarView::showNextAlarms() | 4069 | void CalendarView::showNextAlarms() |
4070 | { | 4070 | { |
4071 | QString message; | 4071 | QString message; |
4072 | if ( mNextAlarmDateTime > QDateTime::currentDateTime() ) { | 4072 | QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); |
4073 | if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { | ||
4073 | QString sum = mCalendar->nextSummary(); | 4074 | QString sum = mCalendar->nextSummary(); |
4074 | QDateTime nextA = mNextAlarmDateTime; | 4075 | QDateTime nextA = mNextAlarmDateTime; |
4075 | QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); | 4076 | QDateTime cur = QDateTime::currentDateTime(); |
4076 | message = i18n("The next alarm is on:\n%1\nat: %2\n\n%3\n(%4)").arg( KGlobal::locale()->formatDate(nextA.date() , false)).arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; | 4077 | int secs = cur.secsTo( nextA ); |
4078 | int min = secs /60; | ||
4079 | int hours = min /60; | ||
4080 | min = min % 60; | ||
4081 | int days = hours /24; | ||
4082 | hours = hours % 24; | ||
4083 | |||
4084 | message = i18n("The next alarm is in:\n"); | ||
4085 | if ( days > 1 ) | ||
4086 | message += i18n("%1 days\n").arg( days ); | ||
4087 | else if ( days == 1 ) | ||
4088 | message += i18n("1 day\n"); | ||
4089 | if ( hours > 1 ) | ||
4090 | message += i18n("%1 hours\n").arg( hours ); | ||
4091 | else if ( hours == 1 ) | ||
4092 | message += i18n("1 hour\n"); | ||
4093 | if ( min > 1 ) | ||
4094 | message += i18n("%1 minutes\n").arg( min ); | ||
4095 | else if ( min == 1 ) | ||
4096 | message += i18n("1 minute\n"); | ||
4097 | |||
4098 | message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; | ||
4077 | } else { | 4099 | } else { |
4078 | message = i18n("There is no next alarm."); | 4100 | message = i18n("There is no next alarm."); |
4079 | 4101 | ||
4080 | } | 4102 | } |
4081 | KMessageBox::information( this, message); | 4103 | KMessageBox::information( this, message); |
4082 | } | 4104 | } |
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp index 18f242c..f6f390b 100644 --- a/korganizer/koagendaview.cpp +++ b/korganizer/koagendaview.cpp | |||
@@ -1,1227 +1,1224 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <qhbox.h> | 24 | #include <qhbox.h> |
25 | #include <qvbox.h> | 25 | #include <qvbox.h> |
26 | #include <qlabel.h> | 26 | #include <qlabel.h> |
27 | #include <qframe.h> | 27 | #include <qframe.h> |
28 | #include <qlayout.h> | 28 | #include <qlayout.h> |
29 | #ifndef KORG_NOSPLITTER | 29 | #ifndef KORG_NOSPLITTER |
30 | #include <qsplitter.h> | 30 | #include <qsplitter.h> |
31 | #endif | 31 | #endif |
32 | #include <qfont.h> | 32 | #include <qfont.h> |
33 | #include <qfontmetrics.h> | 33 | #include <qfontmetrics.h> |
34 | #include <qpopupmenu.h> | 34 | #include <qpopupmenu.h> |
35 | #include <qtooltip.h> | 35 | #include <qtooltip.h> |
36 | #include <qpainter.h> | 36 | #include <qpainter.h> |
37 | #include <qpushbutton.h> | 37 | #include <qpushbutton.h> |
38 | #include <qapplication.h> | 38 | #include <qapplication.h> |
39 | 39 | ||
40 | #include <kapplication.h> | 40 | #include <kapplication.h> |
41 | #include <KDGanttMinimizeSplitter.h> | 41 | #include <KDGanttMinimizeSplitter.h> |
42 | #include <kdebug.h> | 42 | #include <kdebug.h> |
43 | #include <kstandarddirs.h> | 43 | #include <kstandarddirs.h> |
44 | #include <kiconloader.h> | 44 | #include <kiconloader.h> |
45 | #include <klocale.h> | 45 | #include <klocale.h> |
46 | #include <kconfig.h> | 46 | #include <kconfig.h> |
47 | #include <kglobal.h> | 47 | #include <kglobal.h> |
48 | #include "calendarview.h" | 48 | #include "calendarview.h" |
49 | #include "koviewmanager.h" | 49 | #include "koviewmanager.h" |
50 | 50 | ||
51 | #include <libkcal/calendar.h> | 51 | #include <libkcal/calendar.h> |
52 | #include <libkcal/icaldrag.h> | 52 | #include <libkcal/icaldrag.h> |
53 | #include <libkcal/dndfactory.h> | 53 | #include <libkcal/dndfactory.h> |
54 | 54 | ||
55 | #include <kcalendarsystem.h> | 55 | #include <kcalendarsystem.h> |
56 | 56 | ||
57 | #include "koglobals.h" | 57 | #include "koglobals.h" |
58 | #ifndef KORG_NOPLUGINS | 58 | #ifndef KORG_NOPLUGINS |
59 | #include "kocore.h" | 59 | #include "kocore.h" |
60 | #endif | 60 | #endif |
61 | #include "koprefs.h" | 61 | #include "koprefs.h" |
62 | #include "koagenda.h" | 62 | #include "koagenda.h" |
63 | #include "koagendaitem.h" | 63 | #include "koagendaitem.h" |
64 | #ifndef KORG_NOPRINTER | 64 | #ifndef KORG_NOPRINTER |
65 | #include "calprinter.h" | 65 | #include "calprinter.h" |
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | #include "koagendaview.h" | 68 | #include "koagendaview.h" |
69 | //#include "koagendaview.moc" | 69 | //#include "koagendaview.moc" |
70 | 70 | ||
71 | //extern bool globalFlagBlockPainting; | 71 | //extern bool globalFlagBlockPainting; |
72 | extern int globalFlagBlockAgenda; | 72 | extern int globalFlagBlockAgenda; |
73 | extern int globalFlagBlockStartup; | 73 | extern int globalFlagBlockStartup; |
74 | extern int globalFlagBlockAgendaItemPaint; | 74 | extern int globalFlagBlockAgendaItemPaint; |
75 | extern int globalFlagBlockAgendaItemUpdate; | 75 | extern int globalFlagBlockAgendaItemUpdate; |
76 | extern int globalFlagBlockLabel; | 76 | extern int globalFlagBlockLabel; |
77 | using namespace KOrg; | 77 | using namespace KOrg; |
78 | 78 | ||
79 | 79 | ||
80 | 80 | ||
81 | TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : | 81 | TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : |
82 | QScrollView(parent,name,f) | 82 | QScrollView(parent,name,f) |
83 | { | 83 | { |
84 | mRows = rows; | 84 | mRows = rows; |
85 | 85 | ||
86 | setMinimumHeight( 20 ); | 86 | setMinimumHeight( 20 ); |
87 | mCellHeight = KOPrefs::instance()->mHourSize*4; | 87 | mCellHeight = KOPrefs::instance()->mHourSize*4; |
88 | 88 | ||
89 | enableClipper(true); | 89 | enableClipper(true); |
90 | 90 | ||
91 | setHScrollBarMode(AlwaysOff); | 91 | setHScrollBarMode(AlwaysOff); |
92 | setVScrollBarMode(AlwaysOff); | 92 | setVScrollBarMode(AlwaysOff); |
93 | 93 | ||
94 | resizeContents(50,mRows * mCellHeight); | 94 | resizeContents(50,mRows * mCellHeight); |
95 | 95 | ||
96 | viewport()->setBackgroundMode( PaletteBackground ); | 96 | viewport()->setBackgroundMode( PaletteBackground ); |
97 | } | 97 | } |
98 | 98 | ||
99 | void TimeLabels::setCellHeight(int height) | 99 | void TimeLabels::setCellHeight(int height) |
100 | { | 100 | { |
101 | mCellHeight = height; | 101 | mCellHeight = height; |
102 | } | 102 | } |
103 | 103 | ||
104 | /* | 104 | /* |
105 | Optimization so that only the "dirty" portion of the scroll view | 105 | Optimization so that only the "dirty" portion of the scroll view |
106 | is redrawn. Unfortunately, this is not called by default paintEvent() method. | 106 | is redrawn. Unfortunately, this is not called by default paintEvent() method. |
107 | */ | 107 | */ |
108 | void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) | 108 | void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) |
109 | { | 109 | { |
110 | 110 | ||
111 | // if ( globalFlagBlockAgenda ) | 111 | // if ( globalFlagBlockAgenda ) |
112 | // return; | 112 | // return; |
113 | // bug: the parameters cx, cy, cw, ch are the areas that need to be | 113 | // bug: the parameters cx, cy, cw, ch are the areas that need to be |
114 | // redrawn, not the area of the widget. unfortunately, this | 114 | // redrawn, not the area of the widget. unfortunately, this |
115 | // code assumes the latter... | 115 | // code assumes the latter... |
116 | 116 | ||
117 | // now, for a workaround... | 117 | // now, for a workaround... |
118 | // these two assignments fix the weird redraw bug | 118 | // these two assignments fix the weird redraw bug |
119 | cx = contentsX() + 2; | 119 | cx = contentsX() + 2; |
120 | cw = contentsWidth() - 2; | 120 | cw = contentsWidth() - 2; |
121 | // end of workaround | 121 | // end of workaround |
122 | 122 | ||
123 | int cell = ((int)(cy/mCellHeight)); | 123 | int cell = ((int)(cy/mCellHeight)); |
124 | int y = cell * mCellHeight; | 124 | int y = cell * mCellHeight; |
125 | QFontMetrics fm = fontMetrics(); | 125 | QFontMetrics fm = fontMetrics(); |
126 | QString hour; | 126 | QString hour; |
127 | QString suffix; | 127 | QString suffix; |
128 | QString fullTime; | ||
129 | int tW = fm.width("24:00i"); | 128 | int tW = fm.width("24:00i"); |
130 | int timeHeight = fm.height(); | 129 | int timeHeight = fm.height(); |
131 | //timeHeight -= (timeHeight/4-2); | 130 | //timeHeight -= (timeHeight/4-2); |
132 | int borderWidth = 0; | 131 | int borderWidth = 0; |
133 | QFont nFont = p->font(); | 132 | QFont nFont = p->font(); |
134 | 133 | ||
135 | if (!KGlobal::locale()->use12Clock()) | 134 | if (!KGlobal::locale()->use12Clock()) |
136 | suffix = "00"; | 135 | suffix = "00"; |
137 | else | 136 | else |
138 | borderWidth = 0; | 137 | borderWidth = 0; |
139 | if ( timeHeight > mCellHeight ) { | 138 | if ( timeHeight > mCellHeight ) { |
140 | timeHeight = mCellHeight-1; | 139 | timeHeight = mCellHeight-1; |
141 | int pointS = nFont.pointSize(); | 140 | int pointS = nFont.pointSize(); |
142 | while ( pointS > 4 ) { | 141 | while ( pointS > 4 ) { |
143 | nFont.setPointSize( pointS ); | 142 | nFont.setPointSize( pointS ); |
144 | fm = QFontMetrics( nFont ); | 143 | fm = QFontMetrics( nFont ); |
145 | if ( fm.height() < mCellHeight ) | 144 | if ( fm.height() < mCellHeight ) |
146 | break; | 145 | break; |
147 | -- pointS; | 146 | -- pointS; |
148 | } | 147 | } |
149 | fm = QFontMetrics( nFont ); | 148 | fm = QFontMetrics( nFont ); |
150 | borderWidth = 4; | 149 | borderWidth = 4; |
151 | timeHeight = fm.height(); | 150 | timeHeight = fm.height(); |
152 | } | 151 | } |
153 | timeHeight -= (timeHeight/4-2); | 152 | timeHeight -= (timeHeight/4-2); |
154 | QFont sFont = nFont; | 153 | QFont sFont = nFont; |
155 | sFont.setPointSize( sFont.pointSize()/2+2 ); | 154 | sFont.setPointSize( sFont.pointSize()/2+2 ); |
156 | QFontMetrics fmS( sFont ); | 155 | QFontMetrics fmS( sFont ); |
157 | int sHei = fmS.height(); | 156 | int sHei = fmS.height(); |
158 | 157 | sHei -= (sHei/4-2); | |
158 | int startW = this->width() - frameWidth(); | ||
159 | while (y < cy + ch) { | 159 | while (y < cy + ch) { |
160 | p->drawLine(cx,y,cx+tW,y); | 160 | p->drawLine(cx,y,cx+tW,y); |
161 | hour.setNum(cell); | 161 | hour.setNum(cell); |
162 | 162 | ||
163 | // handle 24h and am/pm time formats | 163 | // handle 24h and am/pm time formats |
164 | if (KGlobal::locale()->use12Clock()) { | 164 | if (KGlobal::locale()->use12Clock()) { |
165 | if (cell > 11) suffix = "pm"; | 165 | if (cell > 11) suffix = "pm"; |
166 | else | 166 | else |
167 | suffix = "am"; | 167 | suffix = "am"; |
168 | if (cell == 0) hour.setNum(12); | 168 | if (cell == 0) hour.setNum(12); |
169 | if (cell > 12) hour.setNum(cell - 12); | 169 | if (cell > 12) hour.setNum(cell - 12); |
170 | } | 170 | } |
171 | 171 | ||
172 | // create string in format of "XX:XX" or "XXpm/am" | ||
173 | fullTime = hour;// + suffix; | ||
174 | |||
175 | // center and draw the time label | 172 | // center and draw the time label |
176 | int timeWidth = fm.width(fullTime+"i"); | 173 | int timeWidth = fm.width(hour+"i"); |
177 | int tw2 = fm.width(suffix); | 174 | int tw2 = fm.width(suffix); |
178 | int offset = this->width() - timeWidth - tw2; | 175 | int offset = startW - timeWidth - tw2 ; |
179 | p->setFont( nFont ); | 176 | p->setFont( nFont ); |
180 | p->drawText(cx - borderWidth + offset, y+ timeHeight, fullTime); | 177 | p->drawText(cx - borderWidth + offset, y+ timeHeight, hour); |
181 | p->setFont( sFont ); | 178 | p->setFont( sFont ); |
182 | offset += timeWidth; | 179 | offset = startW - tw2-1; |
183 | p->drawText(cx - borderWidth + offset, y+ sHei, suffix); | 180 | p->drawText(cx - borderWidth + offset, y+ sHei, suffix); |
184 | 181 | ||
185 | // increment indices | 182 | // increment indices |
186 | y += mCellHeight; | 183 | y += mCellHeight; |
187 | cell++; | 184 | cell++; |
188 | } | 185 | } |
189 | } | 186 | } |
190 | 187 | ||
191 | /** | 188 | /** |
192 | Calculates the minimum width. | 189 | Calculates the minimum width. |
193 | */ | 190 | */ |
194 | int TimeLabels::minimumWidth() const | 191 | int TimeLabels::minimumWidth() const |
195 | { | 192 | { |
196 | return mMiniWidth; | 193 | return mMiniWidth; |
197 | } | 194 | } |
198 | 195 | ||
199 | /** updates widget's internal state */ | 196 | /** updates widget's internal state */ |
200 | void TimeLabels::updateConfig() | 197 | void TimeLabels::updateConfig() |
201 | { | 198 | { |
202 | // set the font | 199 | // set the font |
203 | // config->setGroup("Fonts"); | 200 | // config->setGroup("Fonts"); |
204 | // QFont font = config->readFontEntry("TimeBar Font"); | 201 | // QFont font = config->readFontEntry("TimeBar Font"); |
205 | setFont(KOPrefs::instance()->mTimeBarFont); | 202 | setFont(KOPrefs::instance()->mTimeBarFont); |
206 | mMiniWidth = fontMetrics().width("88:88") + 2 ; | 203 | QString test = "88:88"; |
204 | if (KGlobal::locale()->use12Clock()) | ||
205 | test += "i"; | ||
206 | mMiniWidth = fontMetrics().width(test) + frameWidth()*2 +1 ; | ||
207 | // update geometry restrictions based on new settings | 207 | // update geometry restrictions based on new settings |
208 | setFixedWidth(minimumWidth()); | 208 | setFixedWidth(minimumWidth()); |
209 | 209 | ||
210 | // update HourSize | 210 | // update HourSize |
211 | mCellHeight = KOPrefs::instance()->mHourSize*4; | 211 | mCellHeight = KOPrefs::instance()->mHourSize*4; |
212 | resizeContents(50,mRows * mCellHeight); | 212 | resizeContents(50,mRows * mCellHeight); |
213 | } | 213 | } |
214 | 214 | ||
215 | /** update time label positions */ | 215 | /** update time label positions */ |
216 | void TimeLabels::positionChanged() | 216 | void TimeLabels::positionChanged() |
217 | { | 217 | { |
218 | int adjustment = mAgenda->contentsY(); | 218 | int adjustment = mAgenda->contentsY(); |
219 | setContentsPos(0, adjustment); | 219 | setContentsPos(0, adjustment); |
220 | } | 220 | } |
221 | 221 | ||
222 | /** */ | 222 | /** */ |
223 | void TimeLabels::setAgenda(KOAgenda* agenda) | 223 | void TimeLabels::setAgenda(KOAgenda* agenda) |
224 | { | 224 | { |
225 | mAgenda = agenda; | 225 | mAgenda = agenda; |
226 | } | 226 | } |
227 | 227 | ||
228 | void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) | 228 | void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) |
229 | { | 229 | { |
230 | mMouseDownY = e->pos().y(); | 230 | mMouseDownY = e->pos().y(); |
231 | mOrgCap = topLevelWidget()->caption(); | 231 | mOrgCap = topLevelWidget()->caption(); |
232 | } | 232 | } |
233 | 233 | ||
234 | void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) | 234 | void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) |
235 | { | 235 | { |
236 | int diff = mMouseDownY - e->pos().y(); | 236 | int diff = mMouseDownY - e->pos().y(); |
237 | if ( diff < 10 && diff > -10 ) | 237 | if ( diff < 10 && diff > -10 ) |
238 | return; | 238 | return; |
239 | int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; | 239 | int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; |
240 | if ( tSize < 4 ) | 240 | if ( tSize < 4 ) |
241 | tSize = 4; | 241 | tSize = 4; |
242 | if ( tSize > 22 ) | 242 | if ( tSize > 22 ) |
243 | tSize = 22; | 243 | tSize = 22; |
244 | tSize = (tSize-2)/2; | 244 | tSize = (tSize-2)/2; |
245 | topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); | 245 | topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); |
246 | 246 | ||
247 | } | 247 | } |
248 | void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) | 248 | void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) |
249 | { | 249 | { |
250 | topLevelWidget()->setCaption( mOrgCap ); | 250 | topLevelWidget()->setCaption( mOrgCap ); |
251 | int diff = mMouseDownY - e->pos().y(); | 251 | int diff = mMouseDownY - e->pos().y(); |
252 | if ( diff < 10 && diff > -10 ) | 252 | if ( diff < 10 && diff > -10 ) |
253 | return; | 253 | return; |
254 | int tSize = KOPrefs::instance()->mHourSize + (diff/10); | 254 | int tSize = KOPrefs::instance()->mHourSize + (diff/10); |
255 | if ( tSize < 4 ) | 255 | if ( tSize < 4 ) |
256 | tSize = 4; | 256 | tSize = 4; |
257 | if ( tSize > 22 ) | 257 | if ( tSize > 22 ) |
258 | tSize = 22; | 258 | tSize = 22; |
259 | tSize = (tSize/2)*2; | 259 | tSize = (tSize/2)*2; |
260 | if ( tSize == KOPrefs::instance()->mHourSize ) | 260 | if ( tSize == KOPrefs::instance()->mHourSize ) |
261 | return; | 261 | return; |
262 | KOPrefs::instance()->mHourSize = tSize; | 262 | KOPrefs::instance()->mHourSize = tSize; |
263 | emit scaleChanged(); | 263 | emit scaleChanged(); |
264 | } | 264 | } |
265 | 265 | ||
266 | /** This is called in response to repaint() */ | 266 | /** This is called in response to repaint() */ |
267 | void TimeLabels::paintEvent(QPaintEvent*) | 267 | void TimeLabels::paintEvent(QPaintEvent*) |
268 | { | 268 | { |
269 | 269 | ||
270 | // kdDebug() << "paintevent..." << endl; | 270 | // kdDebug() << "paintevent..." << endl; |
271 | // this is another hack! | 271 | // this is another hack! |
272 | // QPainter painter(this); | 272 | // QPainter painter(this); |
273 | //QString c | 273 | //QString c |
274 | repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); | 274 | repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); |
275 | } | 275 | } |
276 | 276 | ||
277 | //////////////////////////////////////////////////////////////////////////// | 277 | //////////////////////////////////////////////////////////////////////////// |
278 | 278 | ||
279 | EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) | 279 | EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) |
280 | : QFrame(parent,name) | 280 | : QFrame(parent,name) |
281 | { | 281 | { |
282 | mColumns = 1; | 282 | mColumns = 1; |
283 | mTopBox = 0; | 283 | mTopBox = 0; |
284 | mLocation = loc; | 284 | mLocation = loc; |
285 | mTopLayout = 0; | 285 | mTopLayout = 0; |
286 | mPaintWidget = 0; | 286 | mPaintWidget = 0; |
287 | mXOffset = 0; | 287 | mXOffset = 0; |
288 | if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); | 288 | if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); |
289 | else mPixmap = SmallIcon("1downarrow"); | 289 | else mPixmap = SmallIcon("1downarrow"); |
290 | mEnabled.resize(mColumns); | 290 | mEnabled.resize(mColumns); |
291 | mEnabled.fill( false ); | 291 | mEnabled.fill( false ); |
292 | setMinimumHeight(mPixmap.height()); | 292 | setMinimumHeight(mPixmap.height()); |
293 | } | 293 | } |
294 | 294 | ||
295 | EventIndicator::~EventIndicator() | 295 | EventIndicator::~EventIndicator() |
296 | { | 296 | { |
297 | } | 297 | } |
298 | 298 | ||
299 | void EventIndicator::drawContents(QPainter *p) | 299 | void EventIndicator::drawContents(QPainter *p) |
300 | { | 300 | { |
301 | 301 | ||
302 | // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; | 302 | // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; |
303 | KDGanttSplitterHandle* han = 0; | 303 | KDGanttSplitterHandle* han = 0; |
304 | if ( mPaintWidget ) | 304 | if ( mPaintWidget ) |
305 | han = mPaintWidget->firstHandle(); | 305 | han = mPaintWidget->firstHandle(); |
306 | if ( ! han ) { | 306 | if ( ! han ) { |
307 | int i; | 307 | int i; |
308 | for(i=0;i<mColumns;++i) { | 308 | for(i=0;i<mColumns;++i) { |
309 | if (mEnabled[i]) { | 309 | if (mEnabled[i]) { |
310 | int cellWidth = contentsRect().right()/mColumns; | 310 | int cellWidth = contentsRect().right()/mColumns; |
311 | int xOffset = KOGlobals::self()->reverseLayout() ? | 311 | int xOffset = KOGlobals::self()->reverseLayout() ? |
312 | (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 : | 312 | (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 : |
313 | i*cellWidth + (cellWidth -mPixmap.width()) /2; | 313 | i*cellWidth + (cellWidth -mPixmap.width()) /2; |
314 | p->drawPixmap(QPoint(1+xOffset,0),mPixmap); | 314 | p->drawPixmap(QPoint(1+xOffset,0),mPixmap); |
315 | } | 315 | } |
316 | } | 316 | } |
317 | } else { | 317 | } else { |
318 | han->repaint(); | 318 | han->repaint(); |
319 | //mPaintWidget->setBackgroundColor( red ); | 319 | //mPaintWidget->setBackgroundColor( red ); |
320 | 320 | ||
321 | QPainter pa( han ); | 321 | QPainter pa( han ); |
322 | int i; | 322 | int i; |
323 | bool setColor = false; | 323 | bool setColor = false; |
324 | for(i=0;i<mColumns;++i) { | 324 | for(i=0;i<mColumns;++i) { |
325 | if (mEnabled[i]) { | 325 | if (mEnabled[i]) { |
326 | setColor = true; | 326 | setColor = true; |
327 | 327 | ||
328 | int cellWidth = contentsRect().right()/mColumns; | 328 | int cellWidth = contentsRect().right()/mColumns; |
329 | int xOffset = KOGlobals::self()->reverseLayout() ? | 329 | int xOffset = KOGlobals::self()->reverseLayout() ? |
330 | (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : | 330 | (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : |
331 | i*cellWidth + cellWidth/2 -mPixmap.width()/2; | 331 | i*cellWidth + cellWidth/2 -mPixmap.width()/2; |
332 | pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); | 332 | pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); |
333 | //qDebug("222draw pix %d ",xOffset ); | 333 | //qDebug("222draw pix %d ",xOffset ); |
334 | 334 | ||
335 | } | 335 | } |
336 | 336 | ||
337 | } | 337 | } |
338 | pa.end(); | 338 | pa.end(); |
339 | 339 | ||
340 | } | 340 | } |
341 | } | 341 | } |
342 | 342 | ||
343 | void EventIndicator::setXOffset( int x ) | 343 | void EventIndicator::setXOffset( int x ) |
344 | { | 344 | { |
345 | mXOffset = x; | 345 | mXOffset = x; |
346 | } | 346 | } |
347 | void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) | 347 | void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) |
348 | { | 348 | { |
349 | mPaintWidget = w; | 349 | mPaintWidget = w; |
350 | setMaximumHeight(0); | 350 | setMaximumHeight(0); |
351 | setMinimumHeight(0); | 351 | setMinimumHeight(0); |
352 | } | 352 | } |
353 | void EventIndicator::changeColumns(int columns) | 353 | void EventIndicator::changeColumns(int columns) |
354 | { | 354 | { |
355 | mColumns = columns; | 355 | mColumns = columns; |
356 | mEnabled.resize(mColumns); | 356 | mEnabled.resize(mColumns); |
357 | 357 | ||
358 | update(); | 358 | update(); |
359 | } | 359 | } |
360 | 360 | ||
361 | void EventIndicator::enableColumn(int column, bool enable) | 361 | void EventIndicator::enableColumn(int column, bool enable) |
362 | { | 362 | { |
363 | mEnabled[column] = enable; | 363 | mEnabled[column] = enable; |
364 | } | 364 | } |
365 | 365 | ||
366 | 366 | ||
367 | //////////////////////////////////////////////////////////////////////////// | 367 | //////////////////////////////////////////////////////////////////////////// |
368 | //////////////////////////////////////////////////////////////////////////// | 368 | //////////////////////////////////////////////////////////////////////////// |
369 | //////////////////////////////////////////////////////////////////////////// | 369 | //////////////////////////////////////////////////////////////////////////// |
370 | 370 | ||
371 | KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : | 371 | KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : |
372 | KOEventView (cal,parent,name) | 372 | KOEventView (cal,parent,name) |
373 | { | 373 | { |
374 | mBlockUpdating = true; | 374 | mBlockUpdating = true; |
375 | mStartHour = 8; | 375 | mStartHour = 8; |
376 | mSelectedDates.append(QDate::currentDate()); | 376 | mSelectedDates.append(QDate::currentDate()); |
377 | 377 | ||
378 | mLayoutDayLabels = 0; | 378 | mLayoutDayLabels = 0; |
379 | mDayLabelsFrame = 0; | 379 | mDayLabelsFrame = 0; |
380 | mDayLabels = 0; | 380 | mDayLabels = 0; |
381 | bool isRTL = KOGlobals::self()->reverseLayout(); | 381 | bool isRTL = KOGlobals::self()->reverseLayout(); |
382 | QPixmap expandPix; | 382 | QPixmap expandPix; |
383 | if ( KOPrefs::instance()->mVerticalScreen ) { | 383 | if ( KOPrefs::instance()->mVerticalScreen ) { |
384 | expandPix = SmallIcon( "1updownarrow" ); | 384 | expandPix = SmallIcon( "1updownarrow" ); |
385 | } else { | 385 | } else { |
386 | expandPix = SmallIcon("1leftrightarrow" ); | 386 | expandPix = SmallIcon("1leftrightarrow" ); |
387 | } | 387 | } |
388 | 388 | ||
389 | QBoxLayout *topLayout = new QVBoxLayout(this); | 389 | QBoxLayout *topLayout = new QVBoxLayout(this); |
390 | 390 | ||
391 | // Create day name labels for agenda columns | 391 | // Create day name labels for agenda columns |
392 | // Create agenda splitter | 392 | // Create agenda splitter |
393 | 393 | ||
394 | mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); | 394 | mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); |
395 | mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); | 395 | mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); |
396 | topLayout->addWidget( mSplitterAgenda ); | 396 | topLayout->addWidget( mSplitterAgenda ); |
397 | mAllDayFrame = new QHBox(mSplitterAgenda); | 397 | mAllDayFrame = new QHBox(mSplitterAgenda); |
398 | mAllDayFrame->setFocusPolicy(NoFocus); | 398 | mAllDayFrame->setFocusPolicy(NoFocus); |
399 | QWidget *agendaFrame = new QWidget(mSplitterAgenda); | 399 | QWidget *agendaFrame = new QWidget(mSplitterAgenda); |
400 | agendaFrame->setFocusPolicy(NoFocus); | 400 | agendaFrame->setFocusPolicy(NoFocus); |
401 | 401 | ||
402 | // Create all-day agenda widget | 402 | // Create all-day agenda widget |
403 | mDummyAllDayLeft = new QVBox( mAllDayFrame ); | 403 | mDummyAllDayLeft = new QVBox( mAllDayFrame ); |
404 | 404 | ||
405 | mExpandButton = new QPushButton(mDummyAllDayLeft); | 405 | mExpandButton = new QPushButton(mDummyAllDayLeft); |
406 | mExpandButton->setPixmap( expandPix ); | 406 | mExpandButton->setPixmap( expandPix ); |
407 | int widebut = mExpandButton->sizeHint().width()+4; | 407 | int widebut = mExpandButton->sizeHint().width()+4; |
408 | int heibut = mExpandButton->sizeHint().height()+4; | 408 | int heibut = mExpandButton->sizeHint().height()+4; |
409 | if ( heibut > widebut ) | 409 | if ( heibut > widebut ) |
410 | widebut = heibut ; | 410 | widebut = heibut ; |
411 | if ( QApplication::desktop()->width() < 480 ) | 411 | if ( QApplication::desktop()->width() < 480 ) |
412 | widebut = widebut*3/2; | 412 | widebut = widebut*3/2; |
413 | //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, | 413 | //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, |
414 | // QSizePolicy::Fixed ) ); | 414 | // QSizePolicy::Fixed ) ); |
415 | mExpandButton->setFixedSize( widebut, widebut); | 415 | mExpandButton->setFixedSize( widebut, widebut); |
416 | connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); | 416 | connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); |
417 | mExpandButton->setFocusPolicy(NoFocus); | 417 | mExpandButton->setFocusPolicy(NoFocus); |
418 | mAllDayAgenda = new KOAgenda(1,mAllDayFrame); | 418 | mAllDayAgenda = new KOAgenda(1,mAllDayFrame); |
419 | mAllDayAgenda->setFocusPolicy(NoFocus); | 419 | mAllDayAgenda->setFocusPolicy(NoFocus); |
420 | QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); | 420 | QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); |
421 | 421 | ||
422 | // Create event context menu for all day agenda | 422 | // Create event context menu for all day agenda |
423 | mAllDayAgendaPopup = eventPopup(); | 423 | mAllDayAgendaPopup = eventPopup(); |
424 | connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), | 424 | connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), |
425 | mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); | 425 | mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); |
426 | 426 | ||
427 | // Create agenda frame | 427 | // Create agenda frame |
428 | QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3); | 428 | QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3); |
429 | // QHBox *agendaFrame = new QHBox(splitterAgenda); | 429 | // QHBox *agendaFrame = new QHBox(splitterAgenda); |
430 | 430 | ||
431 | // create event indicator bars | 431 | // create event indicator bars |
432 | mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); | 432 | mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); |
433 | #ifndef DESKTOP_VERSION | 433 | #ifndef DESKTOP_VERSION |
434 | // FIX | 434 | // FIX |
435 | mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); | 435 | mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); |
436 | #endif | 436 | #endif |
437 | mDayLabelsFrame = new QHBox(agendaFrame); | 437 | mDayLabelsFrame = new QHBox(agendaFrame); |
438 | //topLayout->addWidget(mDayLabelsFrame); | 438 | //topLayout->addWidget(mDayLabelsFrame); |
439 | mDayLabels = new QFrame (mDayLabelsFrame); | 439 | mDayLabels = new QFrame (mDayLabelsFrame); |
440 | mLayoutDayLabels = new QHBoxLayout(mDayLabels); | 440 | mLayoutDayLabels = new QHBoxLayout(mDayLabels); |
441 | agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2); | 441 | agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2); |
442 | agendaLayout->addWidget(mEventIndicatorTop,1,1); | 442 | agendaLayout->addWidget(mEventIndicatorTop,1,1); |
443 | 443 | ||
444 | mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, | 444 | mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, |
445 | agendaFrame); | 445 | agendaFrame); |
446 | agendaLayout->addWidget(mEventIndicatorBottom,3,1); | 446 | agendaLayout->addWidget(mEventIndicatorBottom,3,1); |
447 | QWidget *dummyAgendaRight = new QWidget(agendaFrame); | 447 | QWidget *dummyAgendaRight = new QWidget(agendaFrame); |
448 | agendaLayout->addWidget(dummyAgendaRight,1,2); | 448 | agendaLayout->addWidget(dummyAgendaRight,1,2); |
449 | 449 | ||
450 | // Create time labels | 450 | // Create time labels |
451 | mTimeLabels = new TimeLabels(24,agendaFrame); | 451 | mTimeLabels = new TimeLabels(24,agendaFrame); |
452 | agendaLayout->addWidget(mTimeLabels,2,0); | 452 | agendaLayout->addWidget(mTimeLabels,2,0); |
453 | connect(mTimeLabels,SIGNAL( scaleChanged()), | 453 | connect(mTimeLabels,SIGNAL( scaleChanged()), |
454 | this,SLOT(updateConfig())); | 454 | this,SLOT(updateConfig())); |
455 | 455 | ||
456 | // Create agenda | 456 | // Create agenda |
457 | mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); | 457 | mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); |
458 | agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2); | 458 | agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2); |
459 | agendaLayout->setColStretch(1,1); | 459 | agendaLayout->setColStretch(1,1); |
460 | mAgenda->setFocusPolicy(NoFocus); | 460 | mAgenda->setFocusPolicy(NoFocus); |
461 | // Create event context menu for agenda | 461 | // Create event context menu for agenda |
462 | mAgendaPopup = eventPopup(); | 462 | mAgendaPopup = eventPopup(); |
463 | 463 | ||
464 | mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), | 464 | mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), |
465 | i18n("Toggle Alarm"),mAgenda, | 465 | i18n("Toggle Alarm"),mAgenda, |
466 | SLOT(popupAlarm()),true); | 466 | SLOT(popupAlarm()),true); |
467 | 467 | ||
468 | 468 | ||
469 | connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), | 469 | connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), |
470 | mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); | 470 | mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); |
471 | 471 | ||
472 | // make connections between dependent widgets | 472 | // make connections between dependent widgets |
473 | mTimeLabels->setAgenda(mAgenda); | 473 | mTimeLabels->setAgenda(mAgenda); |
474 | 474 | ||
475 | // Update widgets to reflect user preferences | 475 | // Update widgets to reflect user preferences |
476 | // updateConfig(); | 476 | // updateConfig(); |
477 | 477 | ||
478 | // createDayLabels(); | 478 | // createDayLabels(); |
479 | 479 | ||
480 | // these blank widgets make the All Day Event box line up with the agenda | 480 | // these blank widgets make the All Day Event box line up with the agenda |
481 | dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); | 481 | dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); |
482 | dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); | 482 | dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); |
483 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); | 483 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); |
484 | 484 | ||
485 | // Scrolling | 485 | // Scrolling |
486 | connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), | 486 | connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), |
487 | mTimeLabels, SLOT(positionChanged())); | 487 | mTimeLabels, SLOT(positionChanged())); |
488 | connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), | 488 | connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), |
489 | SLOT(setContentsPos(int))); | 489 | SLOT(setContentsPos(int))); |
490 | 490 | ||
491 | connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); | 491 | connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); |
492 | connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); | 492 | connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); |
493 | 493 | ||
494 | // Create/Show/Edit/Delete Event | 494 | // Create/Show/Edit/Delete Event |
495 | connect(mAgenda,SIGNAL(newEventSignal(int,int)), | 495 | connect(mAgenda,SIGNAL(newEventSignal(int,int)), |
496 | SLOT(newEvent(int,int))); | 496 | SLOT(newEvent(int,int))); |
497 | connect(mAgenda,SIGNAL(newTodoSignal(int,int)), | 497 | connect(mAgenda,SIGNAL(newTodoSignal(int,int)), |
498 | SLOT(newTodo(int,int))); | 498 | SLOT(newTodo(int,int))); |
499 | connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), | 499 | connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), |
500 | SLOT(newEvent(int,int,int,int))); | 500 | SLOT(newEvent(int,int,int,int))); |
501 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), | 501 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), |
502 | SLOT(newEventAllDay(int,int))); | 502 | SLOT(newEventAllDay(int,int))); |
503 | connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), | 503 | connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), |
504 | SLOT(newTodoAllDay(int,int))); | 504 | SLOT(newTodoAllDay(int,int))); |
505 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), | 505 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), |
506 | SLOT(newEventAllDay(int,int))); | 506 | SLOT(newEventAllDay(int,int))); |
507 | connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), | 507 | connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), |
508 | SLOT(newTimeSpanSelected(int,int,int,int))); | 508 | SLOT(newTimeSpanSelected(int,int,int,int))); |
509 | connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), | 509 | connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), |
510 | SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); | 510 | SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); |
511 | connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); | 511 | connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); |
512 | connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); | 512 | connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); |
513 | 513 | ||
514 | connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), | 514 | connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), |
515 | SIGNAL(editIncidenceSignal(Incidence *))); | 515 | SIGNAL(editIncidenceSignal(Incidence *))); |
516 | connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), | 516 | connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), |
517 | SIGNAL(editIncidenceSignal(Incidence *))); | 517 | SIGNAL(editIncidenceSignal(Incidence *))); |
518 | connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), | 518 | connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), |
519 | SIGNAL(showIncidenceSignal(Incidence *))); | 519 | SIGNAL(showIncidenceSignal(Incidence *))); |
520 | connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), | 520 | connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), |
521 | SIGNAL(showIncidenceSignal(Incidence *))); | 521 | SIGNAL(showIncidenceSignal(Incidence *))); |
522 | connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), | 522 | connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), |
523 | SIGNAL(deleteIncidenceSignal(Incidence *))); | 523 | SIGNAL(deleteIncidenceSignal(Incidence *))); |
524 | connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), | 524 | connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), |
525 | SIGNAL(deleteIncidenceSignal(Incidence *))); | 525 | SIGNAL(deleteIncidenceSignal(Incidence *))); |
526 | 526 | ||
527 | connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), | 527 | connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), |
528 | SLOT(updateEventDates(KOAgendaItem *, int ))); | 528 | SLOT(updateEventDates(KOAgendaItem *, int ))); |
529 | connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), | 529 | connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), |
530 | SLOT(updateEventDates(KOAgendaItem *, int))); | 530 | SLOT(updateEventDates(KOAgendaItem *, int))); |
531 | 531 | ||
532 | // event indicator update | 532 | // event indicator update |
533 | connect(mAgenda,SIGNAL(lowerYChanged(int)), | 533 | connect(mAgenda,SIGNAL(lowerYChanged(int)), |
534 | SLOT(updateEventIndicatorTop(int))); | 534 | SLOT(updateEventIndicatorTop(int))); |
535 | connect(mAgenda,SIGNAL(upperYChanged(int)), | 535 | connect(mAgenda,SIGNAL(upperYChanged(int)), |
536 | SLOT(updateEventIndicatorBottom(int))); | 536 | SLOT(updateEventIndicatorBottom(int))); |
537 | // drag signals | 537 | // drag signals |
538 | /* | 538 | /* |
539 | connect(mAgenda,SIGNAL(startDragSignal(Event *)), | 539 | connect(mAgenda,SIGNAL(startDragSignal(Event *)), |
540 | SLOT(startDrag(Event *))); | 540 | SLOT(startDrag(Event *))); |
541 | connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), | 541 | connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), |
542 | SLOT(startDrag(Event *))); | 542 | SLOT(startDrag(Event *))); |
543 | */ | 543 | */ |
544 | // synchronize selections | 544 | // synchronize selections |
545 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 545 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
546 | mAllDayAgenda, SLOT( deselectItem() ) ); | 546 | mAllDayAgenda, SLOT( deselectItem() ) ); |
547 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 547 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
548 | mAgenda, SLOT( deselectItem() ) ); | 548 | mAgenda, SLOT( deselectItem() ) ); |
549 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 549 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
550 | SIGNAL( incidenceSelected( Incidence * ) ) ); | 550 | SIGNAL( incidenceSelected( Incidence * ) ) ); |
551 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 551 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
552 | SIGNAL( incidenceSelected( Incidence * ) ) ); | 552 | SIGNAL( incidenceSelected( Incidence * ) ) ); |
553 | connect( mAgenda, SIGNAL( resizedSignal() ), | 553 | connect( mAgenda, SIGNAL( resizedSignal() ), |
554 | SLOT( updateConfig( ) ) ); | 554 | SLOT( updateConfig( ) ) ); |
555 | connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), | 555 | connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), |
556 | SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); | 556 | SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); |
557 | connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), | 557 | connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), |
558 | SLOT( addToCalSlot(Incidence * , Incidence *) ) ); | 558 | SLOT( addToCalSlot(Incidence * , Incidence *) ) ); |
559 | // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); | 559 | // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); |
560 | //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); | 560 | //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); |
561 | 561 | ||
562 | 562 | ||
563 | } | 563 | } |
564 | 564 | ||
565 | void KOAgendaView::toggleAllDay() | 565 | void KOAgendaView::toggleAllDay() |
566 | { | 566 | { |
567 | if ( mSplitterAgenda->firstHandle() ) | 567 | if ( mSplitterAgenda->firstHandle() ) |
568 | mSplitterAgenda->firstHandle()->toggle(); | 568 | mSplitterAgenda->firstHandle()->toggle(); |
569 | } | 569 | } |
570 | void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) | 570 | void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) |
571 | { | 571 | { |
572 | calendar()->addIncidence( inc ); | 572 | calendar()->addIncidence( inc ); |
573 | 573 | ||
574 | if ( incOld ) { | 574 | if ( incOld ) { |
575 | if ( incOld->type() == "Todo" ) | 575 | if ( incOld->type() == "Todo" ) |
576 | emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); | 576 | emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); |
577 | else | 577 | else |
578 | emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); | 578 | emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); |
579 | } | 579 | } |
580 | 580 | ||
581 | } | 581 | } |
582 | 582 | ||
583 | KOAgendaView::~KOAgendaView() | 583 | KOAgendaView::~KOAgendaView() |
584 | { | 584 | { |
585 | delete mAgendaPopup; | 585 | delete mAgendaPopup; |
586 | delete mAllDayAgendaPopup; | 586 | delete mAllDayAgendaPopup; |
587 | delete KOAgendaItem::paintPix(); | 587 | delete KOAgendaItem::paintPix(); |
588 | delete KOAgendaItem::paintPixSel(); | 588 | delete KOAgendaItem::paintPixSel(); |
589 | } | 589 | } |
590 | void KOAgendaView::resizeEvent( QResizeEvent* e ) | 590 | void KOAgendaView::resizeEvent( QResizeEvent* e ) |
591 | { | 591 | { |
592 | //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); | 592 | //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); |
593 | bool uc = false; | 593 | bool uc = false; |
594 | int ow = e->oldSize().width(); | 594 | int ow = e->oldSize().width(); |
595 | int oh = e->oldSize().height(); | 595 | int oh = e->oldSize().height(); |
596 | int w = e->size().width(); | 596 | int w = e->size().width(); |
597 | int h = e->size().height(); | 597 | int h = e->size().height(); |
598 | if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { | 598 | if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { |
599 | if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) | 599 | if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) |
600 | uc = true; | 600 | uc = true; |
601 | //qDebug("view changed %d %d %d %d ", ow, oh , w , h); | 601 | //qDebug("view changed %d %d %d %d ", ow, oh , w , h); |
602 | } | 602 | } |
603 | mUpcomingWidth = e->size().width() ; | 603 | mUpcomingWidth = e->size().width() ; |
604 | if ( mBlockUpdating || uc ) { | 604 | if ( mBlockUpdating || uc ) { |
605 | mBlockUpdating = false; | 605 | mBlockUpdating = false; |
606 | //mAgenda->setMinimumSize(800 , 600 ); | 606 | //mAgenda->setMinimumSize(800 , 600 ); |
607 | //qDebug("mAgenda->resize+++++++++++++++ "); | 607 | //qDebug("mAgenda->resize+++++++++++++++ "); |
608 | updateConfig(); | 608 | updateConfig(); |
609 | //qDebug("KOAgendaView::Updating now possible "); | 609 | //qDebug("KOAgendaView::Updating now possible "); |
610 | } else | 610 | } else |
611 | createDayLabels(); | 611 | createDayLabels(); |
612 | //qDebug("resizeEvent end "); | 612 | //qDebug("resizeEvent end "); |
613 | 613 | ||
614 | } | 614 | } |
615 | void KOAgendaView::slotDaylabelClicked( int num ) | 615 | void KOAgendaView::slotDaylabelClicked( int num ) |
616 | { | 616 | { |
617 | 617 | ||
618 | QDate firstDate = mSelectedDates.first(); | 618 | QDate firstDate = mSelectedDates.first(); |
619 | if ( num == -1 ) | 619 | if ( num == -1 ) |
620 | emit showDateView( 6, firstDate ); | 620 | emit showDateView( 6, firstDate ); |
621 | else if (num >= 0 ) { | 621 | else if (num >= 0 ) { |
622 | if ( mSelectedDates.count() == 1) | 622 | if ( mSelectedDates.count() == 1) |
623 | emit showDateView( 9, firstDate.addDays( num ) ); | 623 | emit showDateView( 9, firstDate.addDays( num ) ); |
624 | else | 624 | else |
625 | emit showDateView( 3, firstDate.addDays( num ) ); | 625 | emit showDateView( 3, firstDate.addDays( num ) ); |
626 | } | 626 | } |
627 | else | 627 | else |
628 | showDateView( 10, firstDate.addDays(1) ); | 628 | showDateView( 10, firstDate.addDays(1) ); |
629 | } | 629 | } |
630 | 630 | ||
631 | KOAgendaButton* KOAgendaView::getNewDaylabel() | 631 | KOAgendaButton* KOAgendaView::getNewDaylabel() |
632 | { | 632 | { |
633 | 633 | ||
634 | KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); | 634 | KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); |
635 | connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); | 635 | connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); |
636 | mDayLabelsList.append( dayLabel ); | 636 | mDayLabelsList.append( dayLabel ); |
637 | mLayoutDayLabels->addWidget(dayLabel); | 637 | mLayoutDayLabels->addWidget(dayLabel); |
638 | return dayLabel ; | 638 | return dayLabel ; |
639 | } | 639 | } |
640 | 640 | ||
641 | void KOAgendaView::createDayLabels() | 641 | void KOAgendaView::createDayLabels() |
642 | { | 642 | { |
643 | 643 | ||
644 | if ( mBlockUpdating || globalFlagBlockLabel == 1) { | 644 | if ( mBlockUpdating || globalFlagBlockLabel == 1) { |
645 | // qDebug(" KOAgendaView::createDayLabels() blocked "); | 645 | // qDebug(" KOAgendaView::createDayLabels() blocked "); |
646 | return; | 646 | return; |
647 | 647 | ||
648 | } | 648 | } |
649 | int newHight; | 649 | int newHight; |
650 | 650 | ||
651 | // ### Before deleting and recreating we could check if mSelectedDates changed... | 651 | // ### Before deleting and recreating we could check if mSelectedDates changed... |
652 | // It would remove some flickering and gain speed (since this is called by | 652 | // It would remove some flickering and gain speed (since this is called by |
653 | // each updateView() call) | 653 | // each updateView() call) |
654 | 654 | ||
655 | int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2; | 655 | int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2; |
656 | mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); | 656 | mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); |
657 | if ( maxWid < 0 ) | 657 | if ( maxWid < 0 ) |
658 | maxWid = 20; | 658 | maxWid = 20; |
659 | 659 | ||
660 | QFont dlf = KOPrefs::instance()->mTimeLabelsFont; | 660 | QFont dlf = KOPrefs::instance()->mTimeLabelsFont; |
661 | QFontMetrics fm ( dlf ); | 661 | QFontMetrics fm ( dlf ); |
662 | int selCount = mSelectedDates.count(); | 662 | int selCount = mSelectedDates.count(); |
663 | QString dayTest = "Mon 20"; | 663 | QString dayTest = "Mon 20"; |
664 | //QString dayTest = "Mon 20"; | 664 | //QString dayTest = "Mon 20"; |
665 | int wid = fm.width( dayTest ); | 665 | int wid = fm.width( dayTest ); |
666 | //maxWid -= ( selCount * 3 ); //working for QLabels | 666 | //maxWid -= ( selCount * 3 ); //working for QLabels |
667 | maxWid -= ( selCount * 3 ); //working for QPushButton | 667 | maxWid -= ( selCount * 3 ); //working for QPushButton |
668 | if ( maxWid < 0 ) | 668 | if ( maxWid < 0 ) |
669 | maxWid = 20; | 669 | maxWid = 20; |
670 | int needWid = wid * selCount; | 670 | int needWid = wid * selCount; |
671 | //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); | 671 | //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); |
672 | //if ( needWid > maxWid ) | 672 | //if ( needWid > maxWid ) |
673 | // qDebug("DAYLABELS TOOOOOOO BIG "); | 673 | // qDebug("DAYLABELS TOOOOOOO BIG "); |
674 | while ( needWid > maxWid ) { | 674 | while ( needWid > maxWid ) { |
675 | dayTest = dayTest.left( dayTest.length() - 1 ); | 675 | dayTest = dayTest.left( dayTest.length() - 1 ); |
676 | wid = fm.width( dayTest ); | 676 | wid = fm.width( dayTest ); |
677 | needWid = wid * selCount; | 677 | needWid = wid * selCount; |
678 | } | 678 | } |
679 | int maxLen = dayTest.length(); | 679 | int maxLen = dayTest.length(); |
680 | int fontPoint = dlf.pointSize(); | 680 | int fontPoint = dlf.pointSize(); |
681 | if ( maxLen < 2 ) { | 681 | if ( maxLen < 2 ) { |
682 | int fontPoint = dlf.pointSize(); | 682 | int fontPoint = dlf.pointSize(); |
683 | while ( fontPoint > 4 ) { | 683 | while ( fontPoint > 4 ) { |
684 | --fontPoint; | 684 | --fontPoint; |
685 | dlf.setPointSize( fontPoint ); | 685 | dlf.setPointSize( fontPoint ); |
686 | QFontMetrics f( dlf ); | 686 | QFontMetrics f( dlf ); |
687 | wid = f.width( "30" ); | 687 | wid = f.width( "30" ); |
688 | needWid = wid * selCount; | 688 | needWid = wid * selCount; |
689 | if ( needWid < maxWid ) | 689 | if ( needWid < maxWid ) |
690 | break; | 690 | break; |
691 | } | 691 | } |
692 | maxLen = 2; | 692 | maxLen = 2; |
693 | } | 693 | } |
694 | //qDebug("Max len %d ", dayTest.length() ); | 694 | //qDebug("Max len %d ", dayTest.length() ); |
695 | 695 | ||
696 | QFontMetrics tempF( dlf ); | 696 | QFontMetrics tempF( dlf ); |
697 | newHight = tempF.height(); | 697 | newHight = tempF.height(); |
698 | mDayLabels->setFont( dlf ); | 698 | mDayLabels->setFont( dlf ); |
699 | // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; | 699 | // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; |
700 | // mLayoutDayLabels->addSpacing(mTimeLabels->width()); | 700 | // mLayoutDayLabels->addSpacing(mTimeLabels->width()); |
701 | //mLayoutDayLabels->addSpacing( 2 ); | 701 | //mLayoutDayLabels->addSpacing( 2 ); |
702 | // QFont lFont = dlf; | 702 | // QFont lFont = dlf; |
703 | bool appendLabels = false; | 703 | bool appendLabels = false; |
704 | KOAgendaButton *dayLabel; | 704 | KOAgendaButton *dayLabel; |
705 | dayLabel = mDayLabelsList.first(); | 705 | dayLabel = mDayLabelsList.first(); |
706 | if ( !dayLabel ) { | 706 | if ( !dayLabel ) { |
707 | appendLabels = true; | 707 | appendLabels = true; |
708 | dayLabel = getNewDaylabel(); | 708 | dayLabel = getNewDaylabel(); |
709 | } | 709 | } |
710 | dayLabel->setFixedWidth( mTimeLabels->width()+2 ); | 710 | dayLabel->setFixedWidth( mTimeLabels->width()+2 ); |
711 | dayLabel->setFont( dlf ); | 711 | dayLabel->setFont( dlf ); |
712 | dayLabel->setNum( -1 ); | 712 | dayLabel->setNum( -1 ); |
713 | //dayLabel->setAlignment(QLabel::AlignHCenter); | 713 | //dayLabel->setAlignment(QLabel::AlignHCenter); |
714 | dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); | 714 | dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); |
715 | dayLabel->show(); | 715 | dayLabel->show(); |
716 | DateList::ConstIterator dit; | 716 | DateList::ConstIterator dit; |
717 | bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); | 717 | bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); |
718 | int counter = -1; | 718 | int counter = -1; |
719 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { | 719 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { |
720 | ++counter; | 720 | ++counter; |
721 | QDate date = *dit; | 721 | QDate date = *dit; |
722 | // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); | 722 | // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); |
723 | if ( ! appendLabels ) { | 723 | if ( ! appendLabels ) { |
724 | dayLabel = mDayLabelsList.next(); | 724 | dayLabel = mDayLabelsList.next(); |
725 | if ( !dayLabel ) | 725 | if ( !dayLabel ) |
726 | appendLabels = true; | 726 | appendLabels = true; |
727 | } | 727 | } |
728 | if ( appendLabels ) { | 728 | if ( appendLabels ) { |
729 | dayLabel = getNewDaylabel(); | 729 | dayLabel = getNewDaylabel(); |
730 | } | 730 | } |
731 | dayLabel->setMinimumWidth( 1 ); | 731 | dayLabel->setMinimumWidth( 1 ); |
732 | dayLabel->setMaximumWidth( 10240 ); | 732 | dayLabel->setMaximumWidth( 10240 ); |
733 | dayLabel->setFont( dlf ); | 733 | dayLabel->setFont( dlf ); |
734 | dayLabel->show(); | 734 | dayLabel->show(); |
735 | dayLabel->setNum( counter ); | 735 | dayLabel->setNum( counter ); |
736 | QString str; | 736 | QString str; |
737 | int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); | 737 | int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); |
738 | QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); | 738 | QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); |
739 | switch ( maxLen ) { | 739 | switch ( maxLen ) { |
740 | case 2: | 740 | case 2: |
741 | str = QString::number( date.day() ); | 741 | str = QString::number( date.day() ); |
742 | break; | 742 | break; |
743 | 743 | ||
744 | case 3: | 744 | case 3: |
745 | str = dayName.left( 1 ) +QString::number( date.day()); | 745 | str = dayName.left( 1 ) +QString::number( date.day()); |
746 | 746 | ||
747 | break; | 747 | break; |
748 | case 4: | 748 | case 4: |
749 | str = dayName.left( 1 ) + " " +QString::number( date.day()); | 749 | str = dayName.left( 1 ) + " " +QString::number( date.day()); |
750 | 750 | ||
751 | break; | 751 | break; |
752 | case 5: | 752 | case 5: |
753 | str = dayName.left( 2 ) + " " +QString::number( date.day()); | 753 | str = dayName.left( 2 ) + " " +QString::number( date.day()); |
754 | 754 | ||
755 | break; | 755 | break; |
756 | case 6: | 756 | case 6: |
757 | str = dayName.left( 3 ) + " " +QString::number( date.day()); | 757 | str = dayName.left( 3 ) + " " +QString::number( date.day()); |
758 | break; | 758 | break; |
759 | 759 | ||
760 | default: | 760 | default: |
761 | break; | 761 | break; |
762 | } | 762 | } |
763 | if ( oneday ) { | 763 | if ( oneday ) { |
764 | QString addString; | 764 | QString addString; |
765 | if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) | 765 | if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) |
766 | addString = i18n("Today"); | 766 | addString = i18n("Today"); |
767 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) | 767 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) |
768 | addString = i18n("Tomorrow"); | 768 | addString = i18n("Tomorrow"); |
769 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) | 769 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) |
770 | addString = i18n("Yesterday"); | 770 | addString = i18n("Yesterday"); |
771 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) | 771 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) |
772 | addString = i18n("Day before yesterday"); | 772 | addString = i18n("Day before yesterday"); |
773 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) | 773 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) |
774 | addString = i18n("Day after tomorrow"); | 774 | addString = i18n("Day after tomorrow"); |
775 | if ( !addString.isEmpty() ) { | 775 | if ( !addString.isEmpty() ) { |
776 | str = addString+", " + str; | 776 | str = addString+", " + str; |
777 | } else { | 777 | } else { |
778 | str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer); | 778 | str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer); |
779 | } | 779 | } |
780 | } | 780 | } |
781 | dayLabel->setText(str); | 781 | dayLabel->setText(str); |
782 | //dayLabel->setAlignment(QLabel::AlignHCenter); | 782 | //dayLabel->setAlignment(QLabel::AlignHCenter); |
783 | if (date == QDate::currentDate()) { | 783 | if (date == QDate::currentDate()) { |
784 | QFont bFont = dlf; | 784 | QFont bFont = dlf; |
785 | bFont.setBold( true ); | 785 | bFont.setBold( true ); |
786 | dayLabel->setFont(bFont); | 786 | dayLabel->setFont(bFont); |
787 | } | 787 | } |
788 | //dayLayout->addWidget(dayLabel); | 788 | //dayLayout->addWidget(dayLabel); |
789 | 789 | ||
790 | #ifndef KORG_NOPLUGINS | 790 | #ifndef KORG_NOPLUGINS |
791 | CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); | 791 | CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); |
792 | CalendarDecoration *it; | 792 | CalendarDecoration *it; |
793 | for(it = cds.first(); it; it = cds.next()) { | 793 | for(it = cds.first(); it; it = cds.next()) { |
794 | QString text = it->shortText( date ); | 794 | QString text = it->shortText( date ); |
795 | if ( !text.isEmpty() ) { | 795 | if ( !text.isEmpty() ) { |
796 | QLabel *label = new QLabel(text,mDayLabels); | 796 | QLabel *label = new QLabel(text,mDayLabels); |
797 | label->setAlignment(AlignCenter); | 797 | label->setAlignment(AlignCenter); |
798 | dayLayout->addWidget(label); | 798 | dayLayout->addWidget(label); |
799 | } | 799 | } |
800 | } | 800 | } |
801 | 801 | ||
802 | for(it = cds.first(); it; it = cds.next()) { | 802 | for(it = cds.first(); it; it = cds.next()) { |
803 | QWidget *wid = it->smallWidget(mDayLabels,date); | 803 | QWidget *wid = it->smallWidget(mDayLabels,date); |
804 | if ( wid ) { | 804 | if ( wid ) { |
805 | // wid->setHeight(20); | 805 | // wid->setHeight(20); |
806 | dayLayout->addWidget(wid); | 806 | dayLayout->addWidget(wid); |
807 | } | 807 | } |
808 | } | 808 | } |
809 | #endif | 809 | #endif |
810 | } | 810 | } |
811 | if ( ! appendLabels ) { | 811 | if ( ! appendLabels ) { |
812 | dayLabel = mDayLabelsList.next(); | 812 | dayLabel = mDayLabelsList.next(); |
813 | if ( !dayLabel ) | 813 | if ( !dayLabel ) |
814 | appendLabels = true; | 814 | appendLabels = true; |
815 | } | 815 | } |
816 | if ( appendLabels ) { | 816 | if ( appendLabels ) { |
817 | dayLabel = getNewDaylabel(); | 817 | dayLabel = getNewDaylabel(); |
818 | } | 818 | } |
819 | //dayLabel->hide();//test only | 819 | //dayLabel->hide();//test only |
820 | 820 | ||
821 | int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; | 821 | int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; |
822 | if ( offset < 0 ) offset = 0; | 822 | if ( offset < 0 ) offset = 0; |
823 | //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); | 823 | //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); |
824 | dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) ); | 824 | dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) ); |
825 | dayLabel->setFont( dlf ); | 825 | dayLabel->setFont( dlf ); |
826 | dayLabel->show(); | 826 | dayLabel->show(); |
827 | dayLabel->setNum( -2 ); | 827 | dayLabel->setNum( -2 ); |
828 | dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); | 828 | dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); |
829 | //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); | 829 | //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); |
830 | //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); | 830 | //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); |
831 | if ( !appendLabels ) { | 831 | if ( !appendLabels ) { |
832 | dayLabel = mDayLabelsList.next(); | 832 | dayLabel = mDayLabelsList.next(); |
833 | while ( dayLabel ) { | 833 | while ( dayLabel ) { |
834 | //qDebug("!dayLabel %d",dayLabel ); | 834 | //qDebug("!dayLabel %d",dayLabel ); |
835 | dayLabel->hide(); | 835 | dayLabel->hide(); |
836 | dayLabel = mDayLabelsList.next(); | 836 | dayLabel = mDayLabelsList.next(); |
837 | } | 837 | } |
838 | } | 838 | } |
839 | //mDayLabelsFrame->show(); | 839 | |
840 | //mDayLabels->show(); | 840 | mDayLabelsFrame->setFixedHeight( newHight + 4 ); |
841 | //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight); | ||
842 | //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight ); | ||
843 | mDayLabelsFrame->setFixedHeight( newHight ); | ||
844 | } | 841 | } |
845 | 842 | ||
846 | int KOAgendaView::maxDatesHint() | 843 | int KOAgendaView::maxDatesHint() |
847 | { | 844 | { |
848 | // Not sure about the max number of events, so return 0 for now. | 845 | // Not sure about the max number of events, so return 0 for now. |
849 | return 0; | 846 | return 0; |
850 | } | 847 | } |
851 | 848 | ||
852 | int KOAgendaView::currentDateCount() | 849 | int KOAgendaView::currentDateCount() |
853 | { | 850 | { |
854 | return mSelectedDates.count(); | 851 | return mSelectedDates.count(); |
855 | } | 852 | } |
856 | 853 | ||
857 | QPtrList<Incidence> KOAgendaView::selectedIncidences() | 854 | QPtrList<Incidence> KOAgendaView::selectedIncidences() |
858 | { | 855 | { |
859 | QPtrList<Incidence> selected; | 856 | QPtrList<Incidence> selected; |
860 | Incidence *incidence; | 857 | Incidence *incidence; |
861 | 858 | ||
862 | incidence = mAgenda->selectedIncidence(); | 859 | incidence = mAgenda->selectedIncidence(); |
863 | if (incidence) selected.append(incidence); | 860 | if (incidence) selected.append(incidence); |
864 | 861 | ||
865 | incidence = mAllDayAgenda->selectedIncidence(); | 862 | incidence = mAllDayAgenda->selectedIncidence(); |
866 | if (incidence) selected.append(incidence); | 863 | if (incidence) selected.append(incidence); |
867 | 864 | ||
868 | return selected; | 865 | return selected; |
869 | } | 866 | } |
870 | 867 | ||
871 | DateList KOAgendaView::selectedDates() | 868 | DateList KOAgendaView::selectedDates() |
872 | { | 869 | { |
873 | DateList selected; | 870 | DateList selected; |
874 | QDate qd; | 871 | QDate qd; |
875 | 872 | ||
876 | qd = mAgenda->selectedIncidenceDate(); | 873 | qd = mAgenda->selectedIncidenceDate(); |
877 | if (qd.isValid()) selected.append(qd); | 874 | if (qd.isValid()) selected.append(qd); |
878 | 875 | ||
879 | qd = mAllDayAgenda->selectedIncidenceDate(); | 876 | qd = mAllDayAgenda->selectedIncidenceDate(); |
880 | if (qd.isValid()) selected.append(qd); | 877 | if (qd.isValid()) selected.append(qd); |
881 | 878 | ||
882 | return selected; | 879 | return selected; |
883 | } | 880 | } |
884 | 881 | ||
885 | 882 | ||
886 | void KOAgendaView::updateView() | 883 | void KOAgendaView::updateView() |
887 | { | 884 | { |
888 | if ( mBlockUpdating ) | 885 | if ( mBlockUpdating ) |
889 | return; | 886 | return; |
890 | // kdDebug() << "KOAgendaView::updateView()" << endl; | 887 | // kdDebug() << "KOAgendaView::updateView()" << endl; |
891 | fillAgenda(); | 888 | fillAgenda(); |
892 | 889 | ||
893 | } | 890 | } |
894 | 891 | ||
895 | 892 | ||
896 | /* | 893 | /* |
897 | Update configuration settings for the agenda view. This method is not | 894 | Update configuration settings for the agenda view. This method is not |
898 | complete. | 895 | complete. |
899 | */ | 896 | */ |
900 | void KOAgendaView::updateConfig() | 897 | void KOAgendaView::updateConfig() |
901 | { | 898 | { |
902 | if ( mBlockUpdating ) | 899 | if ( mBlockUpdating ) |
903 | return; | 900 | return; |
904 | if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) { | 901 | if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) { |
905 | int old = KOPrefs::instance()->mHourSize; | 902 | int old = KOPrefs::instance()->mHourSize; |
906 | KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1; | 903 | KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1; |
907 | qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize ); | 904 | qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize ); |
908 | } | 905 | } |
909 | 906 | ||
910 | 907 | ||
911 | // update config for children | 908 | // update config for children |
912 | mTimeLabels->updateConfig(); | 909 | mTimeLabels->updateConfig(); |
913 | mAgenda->storePosition(); | 910 | mAgenda->storePosition(); |
914 | mAgenda->updateConfig(); | 911 | mAgenda->updateConfig(); |
915 | mAllDayAgenda->updateConfig(); | 912 | mAllDayAgenda->updateConfig(); |
916 | // widget synchronization | 913 | // widget synchronization |
917 | //TODO: find a better way, maybe signal/slot | 914 | //TODO: find a better way, maybe signal/slot |
918 | mTimeLabels->positionChanged(); | 915 | mTimeLabels->positionChanged(); |
919 | 916 | ||
920 | // for some reason, this needs to be called explicitly | 917 | // for some reason, this needs to be called explicitly |
921 | mTimeLabels->repaint(); | 918 | mTimeLabels->repaint(); |
922 | 919 | ||
923 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); | 920 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); |
924 | 921 | ||
925 | // ToolTips displaying summary of events | 922 | // ToolTips displaying summary of events |
926 | KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() | 923 | KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() |
927 | ->mEnableToolTips); | 924 | ->mEnableToolTips); |
928 | 925 | ||
929 | //setHolidayMasks(); | 926 | //setHolidayMasks(); |
930 | 927 | ||
931 | //createDayLabels(); called by via updateView(); | 928 | //createDayLabels(); called by via updateView(); |
932 | mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); | 929 | mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); |
933 | updateView(); | 930 | updateView(); |
934 | mAgenda->restorePosition(); | 931 | mAgenda->restorePosition(); |
935 | } | 932 | } |
936 | 933 | ||
937 | 934 | ||
938 | void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) | 935 | void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) |
939 | { | 936 | { |
940 | // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; | 937 | // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; |
941 | //qDebug("KOAgendaView::updateEventDates "); | 938 | //qDebug("KOAgendaView::updateEventDates "); |
942 | QDateTime startDt,endDt; | 939 | QDateTime startDt,endDt; |
943 | QDate startDate; | 940 | QDate startDate; |
944 | int lenInSecs; | 941 | int lenInSecs; |
945 | // if ( type == KOAgenda::RESIZETOP ) | 942 | // if ( type == KOAgenda::RESIZETOP ) |
946 | // qDebug("RESIZETOP "); | 943 | // qDebug("RESIZETOP "); |
947 | // if ( type == KOAgenda::RESIZEBOTTOM ) | 944 | // if ( type == KOAgenda::RESIZEBOTTOM ) |
948 | // qDebug("RESIZEBOTTOM "); | 945 | // qDebug("RESIZEBOTTOM "); |
949 | // if ( type == KOAgenda::MOVE ) | 946 | // if ( type == KOAgenda::MOVE ) |
950 | // qDebug("MOVE "); | 947 | // qDebug("MOVE "); |
951 | if ( item->incidence()->type() == "Event" ) { | 948 | if ( item->incidence()->type() == "Event" ) { |
952 | startDt =item->incidence()->dtStart(); | 949 | startDt =item->incidence()->dtStart(); |
953 | endDt = item->incidence()->dtEnd(); | 950 | endDt = item->incidence()->dtEnd(); |
954 | lenInSecs = startDt.secsTo( endDt ); | 951 | lenInSecs = startDt.secsTo( endDt ); |
955 | } | 952 | } |
956 | 953 | ||
957 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); | 954 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); |
958 | 955 | ||
959 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { | 956 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { |
960 | startDate = mSelectedDates[item->mLastMoveXPos]; | 957 | startDate = mSelectedDates[item->mLastMoveXPos]; |
961 | } else { | 958 | } else { |
962 | if (item->cellX() < 0) { | 959 | if (item->cellX() < 0) { |
963 | startDate = (mSelectedDates.first()).addDays(item->cellX()); | 960 | startDate = (mSelectedDates.first()).addDays(item->cellX()); |
964 | } else { | 961 | } else { |
965 | startDate = mSelectedDates[item->cellX()]; | 962 | startDate = mSelectedDates[item->cellX()]; |
966 | } | 963 | } |
967 | } | 964 | } |
968 | startDt.setDate(startDate); | 965 | startDt.setDate(startDate); |
969 | 966 | ||
970 | if (item->incidence()->doesFloat()) { | 967 | if (item->incidence()->doesFloat()) { |
971 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); | 968 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); |
972 | } else { | 969 | } else { |
973 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) | 970 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) |
974 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); | 971 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); |
975 | if ( item->incidence()->type() == "Event" ) { | 972 | if ( item->incidence()->type() == "Event" ) { |
976 | if ( type == KOAgenda::MOVE ) { | 973 | if ( type == KOAgenda::MOVE ) { |
977 | endDt = startDt.addSecs(lenInSecs); | 974 | endDt = startDt.addSecs(lenInSecs); |
978 | 975 | ||
979 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { | 976 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { |
980 | if (item->lastMultiItem()) { | 977 | if (item->lastMultiItem()) { |
981 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 978 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
982 | endDt.setDate(startDate. | 979 | endDt.setDate(startDate. |
983 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 980 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
984 | } else { | 981 | } else { |
985 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 982 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
986 | endDt.setDate(startDate); | 983 | endDt.setDate(startDate); |
987 | } | 984 | } |
988 | } | 985 | } |
989 | } else { | 986 | } else { |
990 | // todo | 987 | // todo |
991 | if (item->lastMultiItem()) { | 988 | if (item->lastMultiItem()) { |
992 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 989 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
993 | endDt.setDate(startDate. | 990 | endDt.setDate(startDate. |
994 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 991 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
995 | } else { | 992 | } else { |
996 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); | 993 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); |
997 | if ( item->cellYBottom() > 0 ) | 994 | if ( item->cellYBottom() > 0 ) |
998 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 995 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
999 | else | 996 | else |
1000 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); | 997 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); |
1001 | endDt.setDate(startDate); | 998 | endDt.setDate(startDate); |
1002 | } | 999 | } |
1003 | } | 1000 | } |
1004 | } | 1001 | } |
1005 | if ( item->incidence()->type() == "Event" ) { | 1002 | if ( item->incidence()->type() == "Event" ) { |
1006 | item->incidence()->setDtStart(startDt); | 1003 | item->incidence()->setDtStart(startDt); |
1007 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); | 1004 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); |
1008 | } else if ( item->incidence()->type() == "Todo" ) { | 1005 | } else if ( item->incidence()->type() == "Todo" ) { |
1009 | Todo* to = static_cast<Todo*>(item->incidence()); | 1006 | Todo* to = static_cast<Todo*>(item->incidence()); |
1010 | 1007 | ||
1011 | to->setDtDue(endDt); | 1008 | to->setDtDue(endDt); |
1012 | if ( to->hasStartDate() ) { | 1009 | if ( to->hasStartDate() ) { |
1013 | if (to->dtStart() >= to->dtDue() ) | 1010 | if (to->dtStart() >= to->dtDue() ) |
1014 | to->setDtStart(to->dtDue().addDays( -2 )); | 1011 | to->setDtStart(to->dtDue().addDays( -2 )); |
1015 | } | 1012 | } |
1016 | 1013 | ||
1017 | } | 1014 | } |
1018 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); | 1015 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); |
1019 | item->incidence()->setRevision(item->incidence()->revision()+1); | 1016 | item->incidence()->setRevision(item->incidence()->revision()+1); |
1020 | item->setItemDate(startDt.date()); | 1017 | item->setItemDate(startDt.date()); |
1021 | //item->updateItem(); | 1018 | //item->updateItem(); |
1022 | if ( item->incidence()->type() == "Todo" ) { | 1019 | if ( item->incidence()->type() == "Todo" ) { |
1023 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); | 1020 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); |
1024 | 1021 | ||
1025 | } | 1022 | } |
1026 | else | 1023 | else |
1027 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); | 1024 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); |
1028 | item->updateItem(); | 1025 | item->updateItem(); |
1029 | } | 1026 | } |
1030 | 1027 | ||
1031 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) | 1028 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) |
1032 | { | 1029 | { |
1033 | // kdDebug() << "KOAgendaView::selectDates" << endl; | 1030 | // kdDebug() << "KOAgendaView::selectDates" << endl; |
1034 | 1031 | ||
1035 | mSelectedDates.clear(); | 1032 | mSelectedDates.clear(); |
1036 | // qDebug("KOAgendaView::showDates "); | 1033 | // qDebug("KOAgendaView::showDates "); |
1037 | QDate d = start; | 1034 | QDate d = start; |
1038 | while (d <= end) { | 1035 | while (d <= end) { |
1039 | mSelectedDates.append(d); | 1036 | mSelectedDates.append(d); |
1040 | d = d.addDays( 1 ); | 1037 | d = d.addDays( 1 ); |
1041 | } | 1038 | } |
1042 | 1039 | ||
1043 | // and update the view | 1040 | // and update the view |
1044 | fillAgenda(); | 1041 | fillAgenda(); |
1045 | } | 1042 | } |
1046 | 1043 | ||
1047 | 1044 | ||
1048 | void KOAgendaView::showEvents(QPtrList<Event>) | 1045 | void KOAgendaView::showEvents(QPtrList<Event>) |
1049 | { | 1046 | { |
1050 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; | 1047 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; |
1051 | } | 1048 | } |
1052 | 1049 | ||
1053 | void KOAgendaView::changeEventDisplay(Event *, int) | 1050 | void KOAgendaView::changeEventDisplay(Event *, int) |
1054 | { | 1051 | { |
1055 | // qDebug("KOAgendaView::changeEventDisplay "); | 1052 | // qDebug("KOAgendaView::changeEventDisplay "); |
1056 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; | 1053 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; |
1057 | // this should be re-written to be MUCH smarter. Right now we | 1054 | // this should be re-written to be MUCH smarter. Right now we |
1058 | // are just playing dumb. | 1055 | // are just playing dumb. |
1059 | fillAgenda(); | 1056 | fillAgenda(); |
1060 | } | 1057 | } |
1061 | 1058 | ||
1062 | void KOAgendaView::fillAgenda(const QDate &) | 1059 | void KOAgendaView::fillAgenda(const QDate &) |
1063 | { | 1060 | { |
1064 | // qDebug("KOAgendaView::fillAgenda "); | 1061 | // qDebug("KOAgendaView::fillAgenda "); |
1065 | fillAgenda(); | 1062 | fillAgenda(); |
1066 | } | 1063 | } |
1067 | 1064 | ||
1068 | void KOAgendaView::fillAgenda() | 1065 | void KOAgendaView::fillAgenda() |
1069 | { | 1066 | { |
1070 | if ( globalFlagBlockStartup ) | 1067 | if ( globalFlagBlockStartup ) |
1071 | return; | 1068 | return; |
1072 | if ( globalFlagBlockAgenda == 1 ) | 1069 | if ( globalFlagBlockAgenda == 1 ) |
1073 | return; | 1070 | return; |
1074 | //if ( globalFlagBlockAgenda == 2 ) | 1071 | //if ( globalFlagBlockAgenda == 2 ) |
1075 | //globalFlagBlockAgenda = 0; | 1072 | //globalFlagBlockAgenda = 0; |
1076 | // globalFlagBlockPainting = false; | 1073 | // globalFlagBlockPainting = false; |
1077 | if ( globalFlagBlockAgenda == 0 ) | 1074 | if ( globalFlagBlockAgenda == 0 ) |
1078 | globalFlagBlockAgenda = 1; | 1075 | globalFlagBlockAgenda = 1; |
1079 | // clearView(); | 1076 | // clearView(); |
1080 | //qDebug("fillAgenda()++++ "); | 1077 | //qDebug("fillAgenda()++++ "); |
1081 | globalFlagBlockAgendaItemPaint = 1; | 1078 | globalFlagBlockAgendaItemPaint = 1; |
1082 | 1079 | ||
1083 | mAllDayAgenda->changeColumns(mSelectedDates.count()); | 1080 | mAllDayAgenda->changeColumns(mSelectedDates.count()); |
1084 | mAgenda->changeColumns(mSelectedDates.count()); | 1081 | mAgenda->changeColumns(mSelectedDates.count()); |
1085 | qApp->processEvents(); | 1082 | qApp->processEvents(); |
1086 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); | 1083 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); |
1087 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); | 1084 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); |
1088 | setHolidayMasks(); | 1085 | setHolidayMasks(); |
1089 | 1086 | ||
1090 | //mAgenda->hideUnused(); | 1087 | //mAgenda->hideUnused(); |
1091 | //mAllDayAgenda->hideUnused(); | 1088 | //mAllDayAgenda->hideUnused(); |
1092 | 1089 | ||
1093 | // mAgenda->blockNextRepaint( false ); | 1090 | // mAgenda->blockNextRepaint( false ); |
1094 | // mAgenda->viewport()->repaint(); | 1091 | // mAgenda->viewport()->repaint(); |
1095 | // mAgenda->blockNextRepaint( true ); | 1092 | // mAgenda->blockNextRepaint( true ); |
1096 | mMinY.resize(mSelectedDates.count()); | 1093 | mMinY.resize(mSelectedDates.count()); |
1097 | mMaxY.resize(mSelectedDates.count()); | 1094 | mMaxY.resize(mSelectedDates.count()); |
1098 | 1095 | ||
1099 | QPtrList<Event> dayEvents; | 1096 | QPtrList<Event> dayEvents; |
1100 | 1097 | ||
1101 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1098 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1102 | // Therefore, gtodoset all of them. | 1099 | // Therefore, gtodoset all of them. |
1103 | QPtrList<Todo> todos = calendar()->todos(); | 1100 | QPtrList<Todo> todos = calendar()->todos(); |
1104 | 1101 | ||
1105 | mAgenda->setDateList(mSelectedDates); | 1102 | mAgenda->setDateList(mSelectedDates); |
1106 | 1103 | ||
1107 | QDate today = QDate::currentDate(); | 1104 | QDate today = QDate::currentDate(); |
1108 | 1105 | ||
1109 | DateList::ConstIterator dit; | 1106 | DateList::ConstIterator dit; |
1110 | int curCol = 0; | 1107 | int curCol = 0; |
1111 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { | 1108 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { |
1112 | QDate currentDate = *dit; | 1109 | QDate currentDate = *dit; |
1113 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() | 1110 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() |
1114 | // << endl; | 1111 | // << endl; |
1115 | 1112 | ||
1116 | dayEvents = calendar()->events(currentDate,true); | 1113 | dayEvents = calendar()->events(currentDate,true); |
1117 | 1114 | ||
1118 | // Default values, which can never be reached | 1115 | // Default values, which can never be reached |
1119 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; | 1116 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; |
1120 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; | 1117 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; |
1121 | 1118 | ||
1122 | unsigned int numEvent; | 1119 | unsigned int numEvent; |
1123 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { | 1120 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { |
1124 | Event *event = dayEvents.at(numEvent); | 1121 | Event *event = dayEvents.at(numEvent); |
1125 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) | 1122 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) |
1126 | if ( event->uid().left(15) == QString("last-syncEvent-") ) | 1123 | if ( event->uid().left(15) == QString("last-syncEvent-") ) |
1127 | continue; | 1124 | continue; |
1128 | // kdDebug() << " Event: " << event->summary() << endl; | 1125 | // kdDebug() << " Event: " << event->summary() << endl; |
1129 | 1126 | ||
1130 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; | 1127 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; |
1131 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; | 1128 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; |
1132 | 1129 | ||
1133 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; | 1130 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; |
1134 | 1131 | ||
1135 | if (event->doesFloat()) { | 1132 | if (event->doesFloat()) { |
1136 | if (event->recurrence()->doesRecur()) { | 1133 | if (event->recurrence()->doesRecur()) { |
1137 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); | 1134 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); |
1138 | } else { | 1135 | } else { |
1139 | if (beginX <= 0 && curCol == 0) { | 1136 | if (beginX <= 0 && curCol == 0) { |
1140 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1137 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1141 | } else if (beginX == curCol) { | 1138 | } else if (beginX == curCol) { |
1142 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1139 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1143 | } | 1140 | } |
1144 | } | 1141 | } |
1145 | } else if (event->isMultiDay()) { | 1142 | } else if (event->isMultiDay()) { |
1146 | if ( event->doesRecur () ) { | 1143 | if ( event->doesRecur () ) { |
1147 | QDate dateit = currentDate; | 1144 | QDate dateit = currentDate; |
1148 | int count = 0; | 1145 | int count = 0; |
1149 | int max = event->dtStart().daysTo( event->dtEnd() ) +2; | 1146 | int max = event->dtStart().daysTo( event->dtEnd() ) +2; |
1150 | while (! event->recursOn( dateit ) && count <= max ) { | 1147 | while (! event->recursOn( dateit ) && count <= max ) { |
1151 | ++count; | 1148 | ++count; |
1152 | dateit = dateit.addDays( -1 ); | 1149 | dateit = dateit.addDays( -1 ); |
1153 | } | 1150 | } |
1154 | bool ok; | 1151 | bool ok; |
1155 | QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); | 1152 | QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); |
1156 | if ( ok ) | 1153 | if ( ok ) |
1157 | { | 1154 | { |
1158 | int secs = event->dtStart().secsTo( event->dtEnd() ); | 1155 | int secs = event->dtStart().secsTo( event->dtEnd() ); |
1159 | QDateTime nextOcend =nextOcstart.addSecs( secs ); ; | 1156 | QDateTime nextOcend =nextOcstart.addSecs( secs ); ; |
1160 | beginX = currentDate.daysTo(nextOcstart.date()) + curCol; | 1157 | beginX = currentDate.daysTo(nextOcstart.date()) + curCol; |
1161 | endX = currentDate.daysTo(nextOcend.date()) + curCol; | 1158 | endX = currentDate.daysTo(nextOcend.date()) + curCol; |
1162 | 1159 | ||
1163 | } | 1160 | } |
1164 | } | 1161 | } |
1165 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1162 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1166 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1163 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1167 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); | 1164 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); |
1168 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { | 1165 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { |
1169 | //qDebug("insert!!! "); | 1166 | //qDebug("insert!!! "); |
1170 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); | 1167 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); |
1171 | } | 1168 | } |
1172 | if (beginX == curCol) { | 1169 | if (beginX == curCol) { |
1173 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1170 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1174 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1171 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1175 | } else if (endX == curCol) { | 1172 | } else if (endX == curCol) { |
1176 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1173 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1177 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1174 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1178 | } else { | 1175 | } else { |
1179 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1176 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1180 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1177 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1181 | } | 1178 | } |
1182 | } else { | 1179 | } else { |
1183 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1180 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1184 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1181 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1185 | if (endY < startY) endY = startY; | 1182 | if (endY < startY) endY = startY; |
1186 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); | 1183 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); |
1187 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1184 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1188 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1185 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1189 | } | 1186 | } |
1190 | } | 1187 | } |
1191 | // ---------- [display Todos -------------- | 1188 | // ---------- [display Todos -------------- |
1192 | unsigned int numTodo; | 1189 | unsigned int numTodo; |
1193 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { | 1190 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { |
1194 | Todo *todo = todos.at(numTodo); | 1191 | Todo *todo = todos.at(numTodo); |
1195 | 1192 | ||
1196 | if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date | 1193 | if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date |
1197 | 1194 | ||
1198 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1195 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1199 | // Already completed items can be displayed on their original due date | 1196 | // Already completed items can be displayed on their original due date |
1200 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda | 1197 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda |
1201 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; | 1198 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; |
1202 | bool fillIn = false; | 1199 | bool fillIn = false; |
1203 | if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) | 1200 | if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) |
1204 | fillIn = true; | 1201 | fillIn = true; |
1205 | if ( ! fillIn && !todo->hasCompletedDate() ) | 1202 | if ( ! fillIn && !todo->hasCompletedDate() ) |
1206 | fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); | 1203 | fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); |
1207 | if ( fillIn ) { | 1204 | if ( fillIn ) { |
1208 | if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue | 1205 | if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue |
1209 | if ( KOPrefs::instance()->mShowTodoInAgenda ) | 1206 | if ( KOPrefs::instance()->mShowTodoInAgenda ) |
1210 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); | 1207 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); |
1211 | } | 1208 | } |
1212 | else { | 1209 | else { |
1213 | QDateTime dt; | 1210 | QDateTime dt; |
1214 | if ( todo->hasCompletedDate() ) | 1211 | if ( todo->hasCompletedDate() ) |
1215 | dt = todo->completed(); | 1212 | dt = todo->completed(); |
1216 | else | 1213 | else |
1217 | dt = todo->dtDue();; | 1214 | dt = todo->dtDue();; |
1218 | 1215 | ||
1219 | 1216 | ||
1220 | int endY = mAgenda->timeToY(dt.time()) - 1; | 1217 | int endY = mAgenda->timeToY(dt.time()) - 1; |
1221 | int hi = (18/KOPrefs::instance()->mHourSize); | 1218 | int hi = (18/KOPrefs::instance()->mHourSize); |
1222 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); | 1219 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); |
1223 | int startY = endY -hi; | 1220 | int startY = endY -hi; |
1224 | 1221 | ||
1225 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); | 1222 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); |
1226 | 1223 | ||
1227 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1224 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 7a4275b..ca0d542 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp | |||
@@ -1342,770 +1342,774 @@ void MainWindow::keyBindings() | |||
1342 | i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + | 1342 | i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + |
1343 | i18n("<p><b>White</b>: Item readonly</p>\n"); | 1343 | i18n("<p><b>White</b>: Item readonly</p>\n"); |
1344 | displayText( text, cap); | 1344 | displayText( text, cap); |
1345 | } | 1345 | } |
1346 | void MainWindow::aboutAutoSaving() | 1346 | void MainWindow::aboutAutoSaving() |
1347 | { | 1347 | { |
1348 | QString text = i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"); | 1348 | QString text = i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"); |
1349 | 1349 | ||
1350 | KApplication::showText( i18n("Auto Saving in KOrganizer/Pi"), text); | 1350 | KApplication::showText( i18n("Auto Saving in KOrganizer/Pi"), text); |
1351 | 1351 | ||
1352 | } | 1352 | } |
1353 | void MainWindow::aboutKnownBugs() | 1353 | void MainWindow::aboutKnownBugs() |
1354 | { | 1354 | { |
1355 | QMessageBox* msg; | 1355 | QMessageBox* msg; |
1356 | msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), | 1356 | msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), |
1357 | i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ | 1357 | i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ |
1358 | i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ | 1358 | i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ |
1359 | i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n") + | 1359 | i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n") + |
1360 | i18n("\nor report them in the bugtracker on\n") + | 1360 | i18n("\nor report them in the bugtracker on\n") + |
1361 | i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), | 1361 | i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), |
1362 | QMessageBox::NoIcon, | 1362 | QMessageBox::NoIcon, |
1363 | QMessageBox::Ok, | 1363 | QMessageBox::Ok, |
1364 | QMessageBox::NoButton, | 1364 | QMessageBox::NoButton, |
1365 | QMessageBox::NoButton); | 1365 | QMessageBox::NoButton); |
1366 | msg->exec(); | 1366 | msg->exec(); |
1367 | delete msg; | 1367 | delete msg; |
1368 | 1368 | ||
1369 | } | 1369 | } |
1370 | 1370 | ||
1371 | QString MainWindow::defaultFileName() | 1371 | QString MainWindow::defaultFileName() |
1372 | { | 1372 | { |
1373 | return locateLocal( "data", "korganizer/mycalendar.ics" ); | 1373 | return locateLocal( "data", "korganizer/mycalendar.ics" ); |
1374 | } | 1374 | } |
1375 | QString MainWindow::syncFileName() | 1375 | QString MainWindow::syncFileName() |
1376 | { | 1376 | { |
1377 | #ifdef DESKTOP_VERSION | 1377 | #ifdef DESKTOP_VERSION |
1378 | return locateLocal( "tmp", "synccalendar.ics" ); | 1378 | return locateLocal( "tmp", "synccalendar.ics" ); |
1379 | #else | 1379 | #else |
1380 | return QString( "/tmp/synccalendar.ics" ); | 1380 | return QString( "/tmp/synccalendar.ics" ); |
1381 | #endif | 1381 | #endif |
1382 | } | 1382 | } |
1383 | void MainWindow::updateWeek(QDate seda) | 1383 | void MainWindow::updateWeek(QDate seda) |
1384 | { | 1384 | { |
1385 | int weekNum = 0; | 1385 | int weekNum = 0; |
1386 | QDate d = QDate ( seda.year(), 1,1); | 1386 | QDate d = QDate ( seda.year(), 1,1); |
1387 | seda = seda.addDays( 1-seda.dayOfWeek() );//we are on monday | 1387 | seda = seda.addDays( 1-seda.dayOfWeek() );//we are on monday |
1388 | if ( seda.addDays(6).year() != seda.year() ) { | 1388 | if ( seda.addDays(6).year() != seda.year() ) { |
1389 | if ( seda.year() != d.year() ) { | 1389 | if ( seda.year() != d.year() ) { |
1390 | if ( d.dayOfWeek() > 4 ) | 1390 | if ( d.dayOfWeek() > 4 ) |
1391 | d = QDate ( seda.year(), 1,1); | 1391 | d = QDate ( seda.year(), 1,1); |
1392 | else | 1392 | else |
1393 | weekNum = 1; | 1393 | weekNum = 1; |
1394 | } else { | 1394 | } else { |
1395 | QDate dd( seda.year()+1, 1,1); | 1395 | QDate dd( seda.year()+1, 1,1); |
1396 | if ( dd.dayOfWeek() <= 4 ) | 1396 | if ( dd.dayOfWeek() <= 4 ) |
1397 | weekNum = 1; | 1397 | weekNum = 1; |
1398 | } | 1398 | } |
1399 | } | 1399 | } |
1400 | if ( weekNum == 0 ){ | 1400 | if ( weekNum == 0 ){ |
1401 | int dow = d.dayOfWeek(); | 1401 | int dow = d.dayOfWeek(); |
1402 | if ( dow <= 4 ) | 1402 | if ( dow <= 4 ) |
1403 | d = d.addDays( 1-dow ); | 1403 | d = d.addDays( 1-dow ); |
1404 | else // 5,6,7 | 1404 | else // 5,6,7 |
1405 | d = d.addDays( 8-dow ); | 1405 | d = d.addDays( 8-dow ); |
1406 | // we have the first week of the year.we are on monday | 1406 | // we have the first week of the year.we are on monday |
1407 | weekNum = d.daysTo( seda ) / 7 +1; | 1407 | weekNum = d.daysTo( seda ) / 7 +1; |
1408 | } | 1408 | } |
1409 | 1409 | ||
1410 | mWeekPixmap.fill( mWeekBgColor ); | 1410 | mWeekPixmap.fill( mWeekBgColor ); |
1411 | QPainter p ( &mWeekPixmap ); | 1411 | QPainter p ( &mWeekPixmap ); |
1412 | p.setFont( mWeekFont ); | 1412 | p.setFont( mWeekFont ); |
1413 | p.drawText( 0,0,mWeekPixmap.width(), mWeekPixmap.height(),AlignCenter, QString::number( weekNum) ); | 1413 | p.drawText( 0,0,mWeekPixmap.width(), mWeekPixmap.height(),AlignCenter, QString::number( weekNum) ); |
1414 | p.end(); | 1414 | p.end(); |
1415 | QIconSet icon3 ( mWeekPixmap ); | 1415 | QIconSet icon3 ( mWeekPixmap ); |
1416 | mWeekAction->setIconSet ( icon3 ); | 1416 | mWeekAction->setIconSet ( icon3 ); |
1417 | 1417 | ||
1418 | } | 1418 | } |
1419 | void MainWindow::updateWeekNum(const DateList &selectedDates) | 1419 | void MainWindow::updateWeekNum(const DateList &selectedDates) |
1420 | { | 1420 | { |
1421 | updateWeek( selectedDates.first() ); | 1421 | updateWeek( selectedDates.first() ); |
1422 | } | 1422 | } |
1423 | void MainWindow::processIncidenceSelection( Incidence *incidence ) | 1423 | void MainWindow::processIncidenceSelection( Incidence *incidence ) |
1424 | { | 1424 | { |
1425 | 1425 | ||
1426 | if ( !incidence ) { | 1426 | if ( !incidence ) { |
1427 | enableIncidenceActions( false ); | 1427 | enableIncidenceActions( false ); |
1428 | 1428 | ||
1429 | mNewSubTodoAction->setEnabled( false ); | 1429 | mNewSubTodoAction->setEnabled( false ); |
1430 | setCaptionToDates(); | 1430 | setCaptionToDates(); |
1431 | return; | 1431 | return; |
1432 | 1432 | ||
1433 | } | 1433 | } |
1434 | 1434 | ||
1435 | //KGlobal::locale()->formatDateTime(nextA, true); | 1435 | //KGlobal::locale()->formatDateTime(nextA, true); |
1436 | QString startString = ""; | 1436 | QString startString = ""; |
1437 | if ( incidence->type() != "Todo" ) { | 1437 | if ( incidence->type() != "Todo" ) { |
1438 | if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { | 1438 | if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { |
1439 | if ( incidence->doesFloat() ) { | 1439 | if ( incidence->doesFloat() ) { |
1440 | startString += ": "+incidence->dtStartDateStr( true ); | 1440 | startString += ": "+incidence->dtStartDateStr( true ); |
1441 | startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); | 1441 | startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); |
1442 | 1442 | ||
1443 | } else { | 1443 | } else { |
1444 | startString = ": "+incidence->dtStartStr(true); | 1444 | startString = ": "+incidence->dtStartStr(true); |
1445 | startString += " --- "+((Event*)incidence)->dtEndStr(true); | 1445 | startString += " --- "+((Event*)incidence)->dtEndStr(true); |
1446 | 1446 | ||
1447 | } | 1447 | } |
1448 | 1448 | ||
1449 | } else { | 1449 | } else { |
1450 | if ( incidence->dtStart().time() != incidence->dtEnd().time() ) | 1450 | if ( incidence->dtStart().time() != incidence->dtEnd().time() ) |
1451 | startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ | 1451 | startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ |
1452 | "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); | 1452 | "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); |
1453 | if ( incidence->categories().contains( i18n("Birthday") ) || incidence->categories().contains( i18n("Anniversary") ) ) { | 1453 | if ( incidence->categories().contains( i18n("Birthday") ) || incidence->categories().contains( i18n("Anniversary") ) ) { |
1454 | bool ok; | 1454 | bool ok; |
1455 | QDateTime noc = incidence->getNextOccurence( mView->startDate().addDays(-1), &ok ); | 1455 | QDateTime noc = incidence->getNextOccurence( mView->startDate().addDays(-1), &ok ); |
1456 | if ( ok ) { | 1456 | if ( ok ) { |
1457 | int years = noc.date().year() - incidence->dtStart().date().year(); | 1457 | int years = noc.date().year() - incidence->dtStart().date().year(); |
1458 | startString += i18n(" (%1 y.)"). arg( years ); | 1458 | startString += i18n(" (%1 y.)"). arg( years ); |
1459 | } | 1459 | } |
1460 | } | 1460 | } |
1461 | else | 1461 | else |
1462 | startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); | 1462 | startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); |
1463 | } | 1463 | } |
1464 | 1464 | ||
1465 | } | 1465 | } |
1466 | else | 1466 | else |
1467 | startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); | 1467 | startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); |
1468 | if ( !incidence->location().isEmpty() ) | 1468 | if ( !incidence->location().isEmpty() ) |
1469 | startString += " (" +incidence->location()+")"; | 1469 | startString += " (" +incidence->location()+")"; |
1470 | setCaption( incidence->summary()+startString); | 1470 | setCaption( incidence->summary()+startString); |
1471 | 1471 | ||
1472 | enableIncidenceActions( true ); | 1472 | enableIncidenceActions( true ); |
1473 | 1473 | ||
1474 | if ( incidence->type() == "Event" ) { | 1474 | if ( incidence->type() == "Event" ) { |
1475 | mShowAction->setText( i18n("Show Event...") ); | 1475 | mShowAction->setText( i18n("Show Event...") ); |
1476 | mEditAction->setText( i18n("Edit Event...") ); | 1476 | mEditAction->setText( i18n("Edit Event...") ); |
1477 | mDeleteAction->setText( i18n("Delete Event...") ); | 1477 | mDeleteAction->setText( i18n("Delete Event...") ); |
1478 | 1478 | ||
1479 | mNewSubTodoAction->setEnabled( false ); | 1479 | mNewSubTodoAction->setEnabled( false ); |
1480 | } else if ( incidence->type() == "Todo" ) { | 1480 | } else if ( incidence->type() == "Todo" ) { |
1481 | mShowAction->setText( i18n("Show Todo...") ); | 1481 | mShowAction->setText( i18n("Show Todo...") ); |
1482 | mEditAction->setText( i18n("Edit Todo...") ); | 1482 | mEditAction->setText( i18n("Edit Todo...") ); |
1483 | mDeleteAction->setText( i18n("Delete Todo...") ); | 1483 | mDeleteAction->setText( i18n("Delete Todo...") ); |
1484 | 1484 | ||
1485 | mNewSubTodoAction->setEnabled( true ); | 1485 | mNewSubTodoAction->setEnabled( true ); |
1486 | } else { | 1486 | } else { |
1487 | mShowAction->setText( i18n("Show...") ); | 1487 | mShowAction->setText( i18n("Show...") ); |
1488 | mShowAction->setText( i18n("Edit...") ); | 1488 | mShowAction->setText( i18n("Edit...") ); |
1489 | mShowAction->setText( i18n("Delete...") ); | 1489 | mShowAction->setText( i18n("Delete...") ); |
1490 | 1490 | ||
1491 | mNewSubTodoAction->setEnabled( false ); | 1491 | mNewSubTodoAction->setEnabled( false ); |
1492 | } | 1492 | } |
1493 | } | 1493 | } |
1494 | 1494 | ||
1495 | void MainWindow::enableIncidenceActions( bool enabled ) | 1495 | void MainWindow::enableIncidenceActions( bool enabled ) |
1496 | { | 1496 | { |
1497 | mShowAction->setEnabled( enabled ); | 1497 | mShowAction->setEnabled( enabled ); |
1498 | mEditAction->setEnabled( enabled ); | 1498 | mEditAction->setEnabled( enabled ); |
1499 | mDeleteAction->setEnabled( enabled ); | 1499 | mDeleteAction->setEnabled( enabled ); |
1500 | 1500 | ||
1501 | mCloneAction->setEnabled( enabled ); | 1501 | mCloneAction->setEnabled( enabled ); |
1502 | mMoveAction->setEnabled( enabled ); | 1502 | mMoveAction->setEnabled( enabled ); |
1503 | mBeamAction->setEnabled( enabled ); | 1503 | mBeamAction->setEnabled( enabled ); |
1504 | mCancelAction->setEnabled( enabled ); | 1504 | mCancelAction->setEnabled( enabled ); |
1505 | } | 1505 | } |
1506 | 1506 | ||
1507 | void MainWindow::importOL() | 1507 | void MainWindow::importOL() |
1508 | { | 1508 | { |
1509 | #ifdef _OL_IMPORT_ | 1509 | #ifdef _OL_IMPORT_ |
1510 | KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); | 1510 | KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); |
1511 | id->exec(); | 1511 | id->exec(); |
1512 | delete id; | 1512 | delete id; |
1513 | mView->updateView(); | 1513 | mView->updateView(); |
1514 | #endif | 1514 | #endif |
1515 | } | 1515 | } |
1516 | void MainWindow::importBday() | 1516 | void MainWindow::importBday() |
1517 | { | 1517 | { |
1518 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 1518 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
1519 | i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), | 1519 | i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), |
1520 | i18n("Import!"), i18n("Cancel"), 0, | 1520 | i18n("Import!"), i18n("Cancel"), 0, |
1521 | 0, 1 ); | 1521 | 0, 1 ); |
1522 | if ( result == 0 ) { | 1522 | if ( result == 0 ) { |
1523 | mView->importBday(); | 1523 | mView->importBday(); |
1524 | 1524 | ||
1525 | } | 1525 | } |
1526 | 1526 | ||
1527 | 1527 | ||
1528 | } | 1528 | } |
1529 | void MainWindow::importQtopia() | 1529 | void MainWindow::importQtopia() |
1530 | { | 1530 | { |
1531 | //#ifndef DESKTOP_VERSION | 1531 | //#ifndef DESKTOP_VERSION |
1532 | QString mess = i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"); | 1532 | QString mess = i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"); |
1533 | #ifdef DESKTOP_VERSION | 1533 | #ifdef DESKTOP_VERSION |
1534 | mess += i18n("The content of the following files will be\nimported (located in your home directory (hd)):\n(hd)/Applications/datebook/datebook.xml\n(hd)/Applications/todolist/todolist.xml\nThe following category file will be used:\n(hd)/Settings/Categories.xml"); | 1534 | mess += i18n("The content of the following files will be\nimported (located in your home directory (hd)):\n(hd)/Applications/datebook/datebook.xml\n(hd)/Applications/todolist/todolist.xml\nThe following category file will be used:\n(hd)/Settings/Categories.xml"); |
1535 | #endif | 1535 | #endif |
1536 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mess, | 1536 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mess, |
1537 | i18n("Import!"), i18n("Cancel"), 0, | 1537 | i18n("Import!"), i18n("Cancel"), 0, |
1538 | 0, 1 ); | 1538 | 0, 1 ); |
1539 | if ( result == 0 ) { | 1539 | if ( result == 0 ) { |
1540 | #ifndef DESKTOP_VERSION | 1540 | #ifndef DESKTOP_VERSION |
1541 | QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); | 1541 | QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); |
1542 | QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); | 1542 | QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); |
1543 | QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; | 1543 | QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; |
1544 | #else | 1544 | #else |
1545 | QString datebook = QDir::homeDirPath()+ "/Applications/datebook/datebook.xml"; | 1545 | QString datebook = QDir::homeDirPath()+ "/Applications/datebook/datebook.xml"; |
1546 | QString todolist = QDir::homeDirPath()+ "/Applications/todolist/todolist.xml"; | 1546 | QString todolist = QDir::homeDirPath()+ "/Applications/todolist/todolist.xml"; |
1547 | QString categories = QDir::homeDirPath()+ "/Settings/Categories.xml"; | 1547 | QString categories = QDir::homeDirPath()+ "/Settings/Categories.xml"; |
1548 | #endif | 1548 | #endif |
1549 | mView->importQtopia( categories, datebook, todolist ); | 1549 | mView->importQtopia( categories, datebook, todolist ); |
1550 | } | 1550 | } |
1551 | #if 0 | 1551 | #if 0 |
1552 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 1552 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
1553 | i18n("Not supported \non desktop!\n"), | 1553 | i18n("Not supported \non desktop!\n"), |
1554 | i18n("Ok"), i18n("Cancel"), 0, | 1554 | i18n("Ok"), i18n("Cancel"), 0, |
1555 | 0, 1 ); | 1555 | 0, 1 ); |
1556 | 1556 | ||
1557 | #endif | 1557 | #endif |
1558 | } | 1558 | } |
1559 | 1559 | ||
1560 | void MainWindow::saveOnClose() | 1560 | void MainWindow::saveOnClose() |
1561 | { | 1561 | { |
1562 | KOPrefs *p = KOPrefs::instance(); | 1562 | KOPrefs *p = KOPrefs::instance(); |
1563 | p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); | 1563 | p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); |
1564 | p->mToolBarUp = iconToolBar->x() > width()/2 || | 1564 | p->mToolBarUp = iconToolBar->x() > width()/2 || |
1565 | iconToolBar->y() > height()/2; | 1565 | iconToolBar->y() > height()/2; |
1566 | mView->writeSettings(); | 1566 | mView->writeSettings(); |
1567 | if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) | 1567 | if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) |
1568 | save(); | 1568 | save(); |
1569 | } | 1569 | } |
1570 | void MainWindow::slotModifiedChanged( bool changed ) | 1570 | void MainWindow::slotModifiedChanged( bool changed ) |
1571 | { | 1571 | { |
1572 | if ( mBlockAtStartup ) | 1572 | if ( mBlockAtStartup ) |
1573 | return; | 1573 | return; |
1574 | 1574 | ||
1575 | int msec; | 1575 | int msec; |
1576 | // we store the changes after 1 minute, | 1576 | // we store the changes after 1 minute, |
1577 | // and for safety reasons after 10 minutes again | 1577 | // and for safety reasons after 10 minutes again |
1578 | if ( !mSyncManager->blockSave() ) | 1578 | if ( !mSyncManager->blockSave() ) |
1579 | msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; | 1579 | msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; |
1580 | else | 1580 | else |
1581 | msec = 1000 * 600; | 1581 | msec = 1000 * 600; |
1582 | mSaveTimer.start( msec, true ); // 1 minute | 1582 | mSaveTimer.start( msec, true ); // 1 minute |
1583 | qDebug("KO: Saving File in %d secs!", msec/1000); | 1583 | qDebug("KO: Saving File in %d secs!", msec/1000); |
1584 | mCalendarModifiedFlag = true; | 1584 | mCalendarModifiedFlag = true; |
1585 | } | 1585 | } |
1586 | void MainWindow::saveStopTimer() | 1586 | void MainWindow::saveStopTimer() |
1587 | { | 1587 | { |
1588 | mSaveTimer.stop(); | 1588 | mSaveTimer.stop(); |
1589 | if (mSaveTimer.isActive() ) | 1589 | if (mSaveTimer.isActive() ) |
1590 | qDebug("ti active "); | 1590 | qDebug("ti active "); |
1591 | else | 1591 | else |
1592 | qDebug("KO: Save timer stopped"); | 1592 | qDebug("KO: Save timer stopped"); |
1593 | } | 1593 | } |
1594 | void MainWindow::save() | 1594 | void MainWindow::save() |
1595 | { | 1595 | { |
1596 | if ( !mCalendarModifiedFlag ) { | 1596 | if ( !mCalendarModifiedFlag ) { |
1597 | qDebug("KO: Calendar not modified. Nothing saved."); | 1597 | qDebug("KO: Calendar not modified. Nothing saved."); |
1598 | return; | 1598 | return; |
1599 | } | 1599 | } |
1600 | if ( mSyncManager->blockSave() ) | 1600 | if ( mSyncManager->blockSave() ) |
1601 | return; | 1601 | return; |
1602 | mSyncManager->setBlockSave(true); | 1602 | mSyncManager->setBlockSave(true); |
1603 | if ( mView->checkFileVersion( defaultFileName()) ) { | 1603 | if ( mView->checkFileVersion( defaultFileName()) ) { |
1604 | QTime neededSaveTime = QDateTime::currentDateTime().time(); | 1604 | QTime neededSaveTime = QDateTime::currentDateTime().time(); |
1605 | setCaption(i18n("KO/Pi:Saving Data to File ..." )); | 1605 | setCaption(i18n("KO/Pi:Saving Data to File ..." )); |
1606 | qDebug("KO: Start saving data to file!"); | 1606 | qDebug("KO: Start saving data to file!"); |
1607 | mView->saveCalendar( defaultFileName() ); | 1607 | mView->saveCalendar( defaultFileName() ); |
1608 | mCalendarModifiedFlag = false; | 1608 | mCalendarModifiedFlag = false; |
1609 | int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); | 1609 | int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); |
1610 | qDebug("KO: Needed %d ms for saving.",msNeeded ); | 1610 | qDebug("KO: Needed %d ms for saving.",msNeeded ); |
1611 | QString savemes; | 1611 | QString savemes; |
1612 | savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); | 1612 | savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); |
1613 | setCaption(savemes); | 1613 | setCaption(savemes); |
1614 | } else | 1614 | } else |
1615 | setCaption(i18n("Saving cancelled!")); | 1615 | setCaption(i18n("Saving cancelled!")); |
1616 | mSyncManager->setBlockSave( false ); | 1616 | mSyncManager->setBlockSave( false ); |
1617 | } | 1617 | } |
1618 | 1618 | ||
1619 | void MainWindow::keyReleaseEvent ( QKeyEvent * e) | 1619 | void MainWindow::keyReleaseEvent ( QKeyEvent * e) |
1620 | { | 1620 | { |
1621 | if ( !e->isAutoRepeat() ) { | 1621 | if ( !e->isAutoRepeat() ) { |
1622 | mFlagKeyPressed = false; | 1622 | mFlagKeyPressed = false; |
1623 | } | 1623 | } |
1624 | } | 1624 | } |
1625 | void MainWindow::keyPressEvent ( QKeyEvent * e ) | 1625 | void MainWindow::keyPressEvent ( QKeyEvent * e ) |
1626 | { | 1626 | { |
1627 | qApp->processEvents(); | 1627 | qApp->processEvents(); |
1628 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | 1628 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { |
1629 | e->ignore(); | 1629 | e->ignore(); |
1630 | // qDebug(" ignore %d",e->isAutoRepeat() ); | 1630 | // qDebug(" ignore %d",e->isAutoRepeat() ); |
1631 | return; | 1631 | return; |
1632 | } | 1632 | } |
1633 | if (! e->isAutoRepeat() ) | 1633 | if (! e->isAutoRepeat() ) |
1634 | mFlagKeyPressed = true; | 1634 | mFlagKeyPressed = true; |
1635 | KOPrefs *p = KOPrefs::instance(); | 1635 | KOPrefs *p = KOPrefs::instance(); |
1636 | bool showSelectedDates = false; | 1636 | bool showSelectedDates = false; |
1637 | int size; | 1637 | int size; |
1638 | int pro = 0; | 1638 | int pro = 0; |
1639 | //qDebug("MainWindow::keyPressEvent "); | 1639 | //qDebug("MainWindow::keyPressEvent "); |
1640 | switch ( e->key() ) { | 1640 | switch ( e->key() ) { |
1641 | case Qt::Key_Right: | 1641 | case Qt::Key_Right: |
1642 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) | 1642 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) |
1643 | mView->goNextMonth(); | 1643 | mView->goNextMonth(); |
1644 | else | 1644 | else |
1645 | mView->goNext(); | 1645 | mView->goNext(); |
1646 | showSelectedDates = true; | 1646 | showSelectedDates = true; |
1647 | break; | 1647 | break; |
1648 | case Qt::Key_Left: | 1648 | case Qt::Key_Left: |
1649 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1649 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1650 | mView->goPreviousMonth(); | 1650 | mView->goPreviousMonth(); |
1651 | else | 1651 | else |
1652 | mView->goPrevious(); | 1652 | mView->goPrevious(); |
1653 | showSelectedDates = true; | 1653 | showSelectedDates = true; |
1654 | break; | 1654 | break; |
1655 | case Qt::Key_Down: | 1655 | case Qt::Key_Down: |
1656 | mView->viewManager()->agendaView()->scrollOneHourDown(); | 1656 | mView->viewManager()->agendaView()->scrollOneHourDown(); |
1657 | break; | 1657 | break; |
1658 | case Qt::Key_Up: | 1658 | case Qt::Key_Up: |
1659 | mView->viewManager()->agendaView()->scrollOneHourUp(); | 1659 | mView->viewManager()->agendaView()->scrollOneHourUp(); |
1660 | break; | 1660 | break; |
1661 | case Qt::Key_K: | 1661 | case Qt::Key_K: |
1662 | mView->viewManager()->showMonthViewWeek(); | 1662 | mView->viewManager()->showMonthViewWeek(); |
1663 | break; | 1663 | break; |
1664 | case Qt::Key_I: | 1664 | case Qt::Key_I: |
1665 | mView->showIncidence(); | 1665 | mView->showIncidence(); |
1666 | break; | 1666 | break; |
1667 | case Qt::Key_Delete: | 1667 | case Qt::Key_Delete: |
1668 | case Qt::Key_Backspace: | 1668 | case Qt::Key_Backspace: |
1669 | mView->deleteIncidence(); | 1669 | mView->deleteIncidence(); |
1670 | break; | 1670 | break; |
1671 | case Qt::Key_D: | 1671 | case Qt::Key_D: |
1672 | mView->viewManager()->showDayView(); | 1672 | mView->viewManager()->showDayView(); |
1673 | showSelectedDates = true; | 1673 | showSelectedDates = true; |
1674 | break; | 1674 | break; |
1675 | case Qt::Key_O: | 1675 | case Qt::Key_O: |
1676 | mView->toggleFilerEnabled( ); | 1676 | mView->toggleFilerEnabled( ); |
1677 | break; | 1677 | break; |
1678 | case Qt::Key_0: | 1678 | case Qt::Key_0: |
1679 | case Qt::Key_1: | 1679 | case Qt::Key_1: |
1680 | case Qt::Key_2: | 1680 | case Qt::Key_2: |
1681 | case Qt::Key_3: | 1681 | case Qt::Key_3: |
1682 | case Qt::Key_4: | 1682 | case Qt::Key_4: |
1683 | case Qt::Key_5: | 1683 | case Qt::Key_5: |
1684 | case Qt::Key_6: | 1684 | case Qt::Key_6: |
1685 | case Qt::Key_7: | 1685 | case Qt::Key_7: |
1686 | case Qt::Key_8: | 1686 | case Qt::Key_8: |
1687 | case Qt::Key_9: | 1687 | case Qt::Key_9: |
1688 | pro = e->key()-48; | 1688 | pro = e->key()-48; |
1689 | if ( pro == 0 ) | 1689 | if ( pro == 0 ) |
1690 | pro = 10; | 1690 | pro = 10; |
1691 | if ( e->state() == Qt::ControlButton) | 1691 | if ( e->state() == Qt::ControlButton) |
1692 | pro += 10; | 1692 | pro += 10; |
1693 | break; | 1693 | break; |
1694 | case Qt::Key_M: | 1694 | case Qt::Key_M: |
1695 | mView->viewManager()->showMonthView(); | 1695 | mView->viewManager()->showMonthView(); |
1696 | showSelectedDates = true; | 1696 | showSelectedDates = true; |
1697 | break; | 1697 | break; |
1698 | case Qt::Key_Insert: | 1698 | case Qt::Key_Insert: |
1699 | mView->newEvent(); | 1699 | mView->newEvent(); |
1700 | break; | 1700 | break; |
1701 | case Qt::Key_S : | 1701 | case Qt::Key_S : |
1702 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) | 1702 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) |
1703 | mView->newSubTodo(); | 1703 | mView->newSubTodo(); |
1704 | else | 1704 | else |
1705 | mView->dialogManager()->showSearchDialog(); | 1705 | mView->dialogManager()->showSearchDialog(); |
1706 | break; | 1706 | break; |
1707 | case Qt::Key_Y : | 1707 | case Qt::Key_Y : |
1708 | case Qt::Key_Z : | 1708 | case Qt::Key_Z : |
1709 | mView->viewManager()->showWorkWeekView(); | 1709 | mView->viewManager()->showWorkWeekView(); |
1710 | showSelectedDates = true; | 1710 | showSelectedDates = true; |
1711 | break; | 1711 | break; |
1712 | case Qt::Key_U : | 1712 | case Qt::Key_U : |
1713 | mView->viewManager()->showWeekView(); | 1713 | mView->viewManager()->showWeekView(); |
1714 | showSelectedDates = true; | 1714 | showSelectedDates = true; |
1715 | break; | 1715 | break; |
1716 | case Qt::Key_H : | 1716 | case Qt::Key_H : |
1717 | keyBindings(); | 1717 | keyBindings(); |
1718 | break; | 1718 | break; |
1719 | case Qt::Key_W: | 1719 | case Qt::Key_W: |
1720 | mView->viewManager()->showWhatsNextView(); | 1720 | mView->viewManager()->showWhatsNextView(); |
1721 | break; | 1721 | break; |
1722 | case Qt::Key_L: | 1722 | case Qt::Key_L: |
1723 | mView->viewManager()->showListView(); | 1723 | mView->viewManager()->showListView(); |
1724 | break; | 1724 | break; |
1725 | case Qt::Key_N: | 1725 | case Qt::Key_N: |
1726 | mView->viewManager()->showNextXView(); | 1726 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) |
1727 | showSelectedDates = true; | 1727 | mView->viewManager()->showNextView(); |
1728 | else { | ||
1729 | mView->viewManager()->showNextXView(); | ||
1730 | showSelectedDates = true; | ||
1731 | } | ||
1728 | break; | 1732 | break; |
1729 | case Qt::Key_V: | 1733 | case Qt::Key_V: |
1730 | mView->viewManager()->showTodoView(); | 1734 | mView->viewManager()->showTodoView(); |
1731 | break; | 1735 | break; |
1732 | case Qt::Key_C: | 1736 | case Qt::Key_C: |
1733 | mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); | 1737 | mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); |
1734 | break; | 1738 | break; |
1735 | case Qt::Key_P: | 1739 | case Qt::Key_P: |
1736 | mView->showDatePicker( ); | 1740 | mView->showDatePicker( ); |
1737 | break; | 1741 | break; |
1738 | case Qt::Key_F: | 1742 | case Qt::Key_F: |
1739 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1743 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1740 | mView->editFilters(); | 1744 | mView->editFilters(); |
1741 | else | 1745 | else |
1742 | mView->toggleFilter(); | 1746 | mView->toggleFilter(); |
1743 | break; | 1747 | break; |
1744 | case Qt::Key_X: | 1748 | case Qt::Key_X: |
1745 | mView->toggleDateNavigatorWidget(); | 1749 | mView->toggleDateNavigatorWidget(); |
1746 | break; | 1750 | break; |
1747 | case Qt::Key_Space: | 1751 | case Qt::Key_Space: |
1748 | mView->toggleExpand(); | 1752 | mView->toggleExpand(); |
1749 | break; | 1753 | break; |
1750 | case Qt::Key_A: | 1754 | case Qt::Key_A: |
1751 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) | 1755 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) |
1752 | mView->showNextAlarms(); | 1756 | mView->showNextAlarms(); |
1753 | else | 1757 | else |
1754 | mView->toggleAllDaySize(); | 1758 | mView->toggleAllDaySize(); |
1755 | break; | 1759 | break; |
1756 | case Qt::Key_T: | 1760 | case Qt::Key_T: |
1757 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1761 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1758 | mView->newTodo(); | 1762 | mView->newTodo(); |
1759 | else { | 1763 | else { |
1760 | mView->goToday(); | 1764 | mView->goToday(); |
1761 | showSelectedDates = true; | 1765 | showSelectedDates = true; |
1762 | } | 1766 | } |
1763 | break; | 1767 | break; |
1764 | case Qt::Key_J: | 1768 | case Qt::Key_J: |
1765 | mView->viewManager()->showJournalView(); | 1769 | mView->viewManager()->showJournalView(); |
1766 | break; | 1770 | break; |
1767 | case Qt::Key_B: | 1771 | case Qt::Key_B: |
1768 | mView->editIncidenceDescription();; | 1772 | mView->editIncidenceDescription();; |
1769 | break; | 1773 | break; |
1770 | // case Qt::Key_Return: | 1774 | // case Qt::Key_Return: |
1771 | case Qt::Key_E: | 1775 | case Qt::Key_E: |
1772 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1776 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1773 | mView->newEvent(); | 1777 | mView->newEvent(); |
1774 | else | 1778 | else |
1775 | mView->editIncidence(); | 1779 | mView->editIncidence(); |
1776 | break; | 1780 | break; |
1777 | case Qt::Key_Plus: | 1781 | case Qt::Key_Plus: |
1778 | size = p->mHourSize +2; | 1782 | size = p->mHourSize +2; |
1779 | if ( size <= 22 ) | 1783 | if ( size <= 22 ) |
1780 | configureAgenda( size ); | 1784 | configureAgenda( size ); |
1781 | break; | 1785 | break; |
1782 | case Qt::Key_Minus: | 1786 | case Qt::Key_Minus: |
1783 | size = p->mHourSize - 2; | 1787 | size = p->mHourSize - 2; |
1784 | if ( size >= 4 ) | 1788 | if ( size >= 4 ) |
1785 | configureAgenda( size ); | 1789 | configureAgenda( size ); |
1786 | break; | 1790 | break; |
1787 | 1791 | ||
1788 | 1792 | ||
1789 | default: | 1793 | default: |
1790 | e->ignore(); | 1794 | e->ignore(); |
1791 | } | 1795 | } |
1792 | if ( pro > 0 ) { | 1796 | if ( pro > 0 ) { |
1793 | mView->selectFilter( pro-1 ); | 1797 | mView->selectFilter( pro-1 ); |
1794 | } | 1798 | } |
1795 | if ( showSelectedDates ) { | 1799 | if ( showSelectedDates ) { |
1796 | ;// setCaptionToDates(); | 1800 | ;// setCaptionToDates(); |
1797 | } | 1801 | } |
1798 | 1802 | ||
1799 | } | 1803 | } |
1800 | 1804 | ||
1801 | void MainWindow::fillFilterMenu() | 1805 | void MainWindow::fillFilterMenu() |
1802 | { | 1806 | { |
1803 | selectFilterMenu->clear(); | 1807 | selectFilterMenu->clear(); |
1804 | bool disable = false; | 1808 | bool disable = false; |
1805 | selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); | 1809 | selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); |
1806 | selectFilterMenu->insertSeparator(); | 1810 | selectFilterMenu->insertSeparator(); |
1807 | if ( mView->filterView()->filtersEnabled() ) { | 1811 | if ( mView->filterView()->filtersEnabled() ) { |
1808 | selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 ); | 1812 | selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 ); |
1809 | } | 1813 | } |
1810 | else { | 1814 | else { |
1811 | selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 ); | 1815 | selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 ); |
1812 | disable = true; | 1816 | disable = true; |
1813 | } | 1817 | } |
1814 | selectFilterMenu->insertSeparator(); | 1818 | selectFilterMenu->insertSeparator(); |
1815 | QPtrList<CalFilter> fili = mView->filters(); | 1819 | QPtrList<CalFilter> fili = mView->filters(); |
1816 | CalFilter *curfilter = mView->filterView()->selectedFilter(); | 1820 | CalFilter *curfilter = mView->filterView()->selectedFilter(); |
1817 | CalFilter *filter = fili.first(); | 1821 | CalFilter *filter = fili.first(); |
1818 | int iii = 2; | 1822 | int iii = 2; |
1819 | while(filter) { | 1823 | while(filter) { |
1820 | selectFilterMenu->insertItem( filter->name(), iii ); | 1824 | selectFilterMenu->insertItem( filter->name(), iii ); |
1821 | if ( filter == curfilter) | 1825 | if ( filter == curfilter) |
1822 | selectFilterMenu->setItemChecked( iii, true ); | 1826 | selectFilterMenu->setItemChecked( iii, true ); |
1823 | if ( disable ) | 1827 | if ( disable ) |
1824 | selectFilterMenu->setItemEnabled( iii, false ); | 1828 | selectFilterMenu->setItemEnabled( iii, false ); |
1825 | filter = fili.next(); | 1829 | filter = fili.next(); |
1826 | ++iii; | 1830 | ++iii; |
1827 | } | 1831 | } |
1828 | } | 1832 | } |
1829 | void MainWindow::selectFilter( int fil ) | 1833 | void MainWindow::selectFilter( int fil ) |
1830 | { | 1834 | { |
1831 | if ( fil == 0 ) { | 1835 | if ( fil == 0 ) { |
1832 | mView->editFilters( ); | 1836 | mView->editFilters( ); |
1833 | } else if ( fil == 1 ){ | 1837 | } else if ( fil == 1 ){ |
1834 | mView->toggleFilerEnabled( ); | 1838 | mView->toggleFilerEnabled( ); |
1835 | } else { | 1839 | } else { |
1836 | mView->selectFilter( fil-2 ); | 1840 | mView->selectFilter( fil-2 ); |
1837 | } | 1841 | } |
1838 | } | 1842 | } |
1839 | void MainWindow::configureToolBar( int item ) | 1843 | void MainWindow::configureToolBar( int item ) |
1840 | { | 1844 | { |
1841 | 1845 | ||
1842 | configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); | 1846 | configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); |
1843 | KOPrefs *p = KOPrefs::instance(); | 1847 | KOPrefs *p = KOPrefs::instance(); |
1844 | p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); | 1848 | p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); |
1845 | p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); | 1849 | p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); |
1846 | p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); | 1850 | p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); |
1847 | p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); | 1851 | p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); |
1848 | p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); | 1852 | p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); |
1849 | p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); | 1853 | p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); |
1850 | p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); | 1854 | p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); |
1851 | p-> mShowIconDay6= configureToolBarMenu->isItemChecked( 75 ); | 1855 | p-> mShowIconDay6= configureToolBarMenu->isItemChecked( 75 ); |
1852 | p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); | 1856 | p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); |
1853 | p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); | 1857 | p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); |
1854 | p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); | 1858 | p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); |
1855 | p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); | 1859 | p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); |
1856 | p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); | 1860 | p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); |
1857 | p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); | 1861 | p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); |
1858 | p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); | 1862 | p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); |
1859 | p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); | 1863 | p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); |
1860 | p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); | 1864 | p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); |
1861 | p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); | 1865 | p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); |
1862 | p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); | 1866 | p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); |
1863 | p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); | 1867 | p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); |
1864 | p-> mShowIconWeekNum= configureToolBarMenu->isItemChecked( 400 ); | 1868 | p-> mShowIconWeekNum= configureToolBarMenu->isItemChecked( 400 ); |
1865 | // initActions(); | 1869 | // initActions(); |
1866 | } | 1870 | } |
1867 | void MainWindow::setCaption ( const QString & c ) | 1871 | void MainWindow::setCaption ( const QString & c ) |
1868 | { | 1872 | { |
1869 | QString cap = c; | 1873 | QString cap = c; |
1870 | cap.replace( QRegExp("\n"), " " ); | 1874 | cap.replace( QRegExp("\n"), " " ); |
1871 | cap = cap.stripWhiteSpace(); | 1875 | cap = cap.stripWhiteSpace(); |
1872 | if ( cap.isEmpty() ) | 1876 | if ( cap.isEmpty() ) |
1873 | cap = "KO/Pi"; | 1877 | cap = "KO/Pi"; |
1874 | QWidget::setCaption( cap ); | 1878 | QWidget::setCaption( cap ); |
1875 | } | 1879 | } |
1876 | void MainWindow::setCaptionToDates() | 1880 | void MainWindow::setCaptionToDates() |
1877 | { | 1881 | { |
1878 | QString selDates; | 1882 | QString selDates; |
1879 | QDate date = mView->startDate(); | 1883 | QDate date = mView->startDate(); |
1880 | if ( ! date.isValid() ) { | 1884 | if ( ! date.isValid() ) { |
1881 | setCaption(""); | 1885 | setCaption(""); |
1882 | return; | 1886 | return; |
1883 | } | 1887 | } |
1884 | selDates = KGlobal::locale()->formatDate( date, true); | 1888 | selDates = KGlobal::locale()->formatDate( date, true); |
1885 | if (mView->startDate() < mView->endDate() ) | 1889 | if (mView->startDate() < mView->endDate() ) |
1886 | selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); | 1890 | selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); |
1887 | else { | 1891 | else { |
1888 | QString addString; | 1892 | QString addString; |
1889 | if ( date == QDateTime::currentDateTime().date() ) | 1893 | if ( date == QDateTime::currentDateTime().date() ) |
1890 | addString = i18n("Today"); | 1894 | addString = i18n("Today"); |
1891 | else if ( date == QDateTime::currentDateTime().date().addDays(1) ) | 1895 | else if ( date == QDateTime::currentDateTime().date().addDays(1) ) |
1892 | addString = i18n("Tomorrow"); | 1896 | addString = i18n("Tomorrow"); |
1893 | if ( !addString.isEmpty() ) | 1897 | if ( !addString.isEmpty() ) |
1894 | selDates = addString+", "+selDates ; | 1898 | selDates = addString+", "+selDates ; |
1895 | } | 1899 | } |
1896 | setCaption( i18n("Dates: ") + selDates ); | 1900 | setCaption( i18n("Dates: ") + selDates ); |
1897 | 1901 | ||
1898 | } | 1902 | } |
1899 | void MainWindow::showConfigureAgenda( ) | 1903 | void MainWindow::showConfigureAgenda( ) |
1900 | { | 1904 | { |
1901 | int iii; | 1905 | int iii; |
1902 | for ( iii = 1;iii<= 10 ;++iii ){ | 1906 | for ( iii = 1;iii<= 10 ;++iii ){ |
1903 | configureAgendaMenu->setItemChecked( (iii+1)*2, false ); | 1907 | configureAgendaMenu->setItemChecked( (iii+1)*2, false ); |
1904 | } | 1908 | } |
1905 | configureAgendaMenu->setItemChecked( (KOPrefs::instance()->mHourSize/2)*2, true ); | 1909 | configureAgendaMenu->setItemChecked( (KOPrefs::instance()->mHourSize/2)*2, true ); |
1906 | } | 1910 | } |
1907 | void MainWindow::configureAgenda( int item ) | 1911 | void MainWindow::configureAgenda( int item ) |
1908 | { | 1912 | { |
1909 | if ( KOPrefs::instance()->mHourSize == item ) | 1913 | if ( KOPrefs::instance()->mHourSize == item ) |
1910 | return; | 1914 | return; |
1911 | KOPrefs::instance()->mHourSize=item; | 1915 | KOPrefs::instance()->mHourSize=item; |
1912 | mView->viewManager()->agendaView()->updateConfig(); | 1916 | mView->viewManager()->agendaView()->updateConfig(); |
1913 | } | 1917 | } |
1914 | 1918 | ||
1915 | void MainWindow::saveCalendar() | 1919 | void MainWindow::saveCalendar() |
1916 | { | 1920 | { |
1917 | QString fn = KOPrefs::instance()->mLastSaveFile; | 1921 | QString fn = KOPrefs::instance()->mLastSaveFile; |
1918 | fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this ); | 1922 | fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this ); |
1919 | 1923 | ||
1920 | if ( fn == "" ) | 1924 | if ( fn == "" ) |
1921 | return; | 1925 | return; |
1922 | QFileInfo info; | 1926 | QFileInfo info; |
1923 | info.setFile( fn ); | 1927 | info.setFile( fn ); |
1924 | QString mes; | 1928 | QString mes; |
1925 | bool createbup = true; | 1929 | bool createbup = true; |
1926 | if ( info. exists() ) { | 1930 | if ( info. exists() ) { |
1927 | mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ; | 1931 | mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ; |
1928 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 1932 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
1929 | i18n("Overwrite!"), i18n("Cancel"), 0, | 1933 | i18n("Overwrite!"), i18n("Cancel"), 0, |
1930 | 0, 1 ); | 1934 | 0, 1 ); |
1931 | if ( result != 0 ) { | 1935 | if ( result != 0 ) { |
1932 | createbup = false; | 1936 | createbup = false; |
1933 | } | 1937 | } |
1934 | } | 1938 | } |
1935 | if ( createbup ) { | 1939 | if ( createbup ) { |
1936 | mView->saveCalendar( fn ); | 1940 | mView->saveCalendar( fn ); |
1937 | mes = i18n("KO/Pi:Saved %1").arg(fn); | 1941 | mes = i18n("KO/Pi:Saved %1").arg(fn); |
1938 | KOPrefs::instance()->mLastSaveFile = fn; | 1942 | KOPrefs::instance()->mLastSaveFile = fn; |
1939 | setCaption(mes); | 1943 | setCaption(mes); |
1940 | } | 1944 | } |
1941 | } | 1945 | } |
1942 | void MainWindow::loadCalendar() | 1946 | void MainWindow::loadCalendar() |
1943 | { | 1947 | { |
1944 | 1948 | ||
1945 | QString fn = KOPrefs::instance()->mLastLoadFile; | 1949 | QString fn = KOPrefs::instance()->mLastLoadFile; |
1946 | fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); | 1950 | fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); |
1947 | 1951 | ||
1948 | if ( fn == "" ) | 1952 | if ( fn == "" ) |
1949 | return; | 1953 | return; |
1950 | QFileInfo info; | 1954 | QFileInfo info; |
1951 | info.setFile( fn ); | 1955 | info.setFile( fn ); |
1952 | QString mess; | 1956 | QString mess; |
1953 | bool loadbup = true; | 1957 | bool loadbup = true; |
1954 | if ( info. exists() ) { | 1958 | if ( info. exists() ) { |
1955 | mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); | 1959 | mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); |
1956 | int result = QMessageBox::warning( this, "KO/Pi: Warning!", | 1960 | int result = QMessageBox::warning( this, "KO/Pi: Warning!", |
1957 | mess, | 1961 | mess, |
1958 | i18n("Load!"), i18n("Cancel"), 0, | 1962 | i18n("Load!"), i18n("Cancel"), 0, |
1959 | 0, 1 ); | 1963 | 0, 1 ); |
1960 | if ( result != 0 ) { | 1964 | if ( result != 0 ) { |
1961 | loadbup = false; | 1965 | loadbup = false; |
1962 | } | 1966 | } |
1963 | } else { | 1967 | } else { |
1964 | QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 1968 | QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
1965 | i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, | 1969 | i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, |
1966 | 0, 1 ); | 1970 | 0, 1 ); |
1967 | 1971 | ||
1968 | return; | 1972 | return; |
1969 | } | 1973 | } |
1970 | if ( loadbup ) { | 1974 | if ( loadbup ) { |
1971 | mView->openCalendar( fn ); | 1975 | mView->openCalendar( fn ); |
1972 | KOPrefs::instance()->mLastLoadFile = fn; | 1976 | KOPrefs::instance()->mLastLoadFile = fn; |
1973 | mess = i18n("KO/Pi:Loaded %1").arg(fn) ; | 1977 | mess = i18n("KO/Pi:Loaded %1").arg(fn) ; |
1974 | setCaption(mess); | 1978 | setCaption(mess); |
1975 | } | 1979 | } |
1976 | 1980 | ||
1977 | } | 1981 | } |
1978 | void MainWindow::quickImportIcal() | 1982 | void MainWindow::quickImportIcal() |
1979 | { | 1983 | { |
1980 | importFile( KOPrefs::instance()->mLastImportFile, false ); | 1984 | importFile( KOPrefs::instance()->mLastImportFile, false ); |
1981 | } | 1985 | } |
1982 | void MainWindow::importFile( QString fn, bool quick ) | 1986 | void MainWindow::importFile( QString fn, bool quick ) |
1983 | { | 1987 | { |
1984 | QFileInfo info; | 1988 | QFileInfo info; |
1985 | info.setFile( fn ); | 1989 | info.setFile( fn ); |
1986 | QString mess; | 1990 | QString mess; |
1987 | bool loadbup = true; | 1991 | bool loadbup = true; |
1988 | if ( !info. exists() ) { | 1992 | if ( !info. exists() ) { |
1989 | mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); | 1993 | mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); |
1990 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 1994 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
1991 | mess ); | 1995 | mess ); |
1992 | return; | 1996 | return; |
1993 | } | 1997 | } |
1994 | int result = 0; | 1998 | int result = 0; |
1995 | if ( !quick ) { | 1999 | if ( !quick ) { |
1996 | mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); | 2000 | mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); |
1997 | result = QMessageBox::warning( this, "KO/Pi: Warning!", | 2001 | result = QMessageBox::warning( this, "KO/Pi: Warning!", |
1998 | mess, | 2002 | mess, |
1999 | "Import", "Cancel", 0, | 2003 | "Import", "Cancel", 0, |
2000 | 0, 1 ); | 2004 | 0, 1 ); |
2001 | } | 2005 | } |
2002 | if ( result == 0 ) { | 2006 | if ( result == 0 ) { |
2003 | if ( mView->openCalendar( fn, true )) { | 2007 | if ( mView->openCalendar( fn, true )) { |
2004 | KOPrefs::instance()->mLastImportFile = fn; | 2008 | KOPrefs::instance()->mLastImportFile = fn; |
2005 | setCaption(i18n("Imported file successfully")); | 2009 | setCaption(i18n("Imported file successfully")); |
2006 | } else { | 2010 | } else { |
2007 | setCaption(i18n("Error importing file")); | 2011 | setCaption(i18n("Error importing file")); |
2008 | } | 2012 | } |
2009 | } | 2013 | } |
2010 | } | 2014 | } |
2011 | 2015 | ||
2012 | void MainWindow::importIcal() | 2016 | void MainWindow::importIcal() |
2013 | { | 2017 | { |
2014 | 2018 | ||
2015 | QString fn =KOPrefs::instance()->mLastImportFile; | 2019 | QString fn =KOPrefs::instance()->mLastImportFile; |
2016 | 2020 | ||
2017 | fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); | 2021 | fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); |
2018 | if ( fn == "" ) | 2022 | if ( fn == "" ) |
2019 | return; | 2023 | return; |
2020 | importFile( fn, true ); | 2024 | importFile( fn, true ); |
2021 | 2025 | ||
2022 | } | 2026 | } |
2023 | 2027 | ||
2024 | void MainWindow::exportVCalendar() | 2028 | void MainWindow::exportVCalendar() |
2025 | { | 2029 | { |
2026 | QString fn = KOPrefs::instance()->mLastVcalFile; | 2030 | QString fn = KOPrefs::instance()->mLastVcalFile; |
2027 | fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); | 2031 | fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); |
2028 | if ( fn == "" ) | 2032 | if ( fn == "" ) |
2029 | return; | 2033 | return; |
2030 | QFileInfo info; | 2034 | QFileInfo info; |
2031 | info.setFile( fn ); | 2035 | info.setFile( fn ); |
2032 | QString mes; | 2036 | QString mes; |
2033 | bool createbup = true; | 2037 | bool createbup = true; |
2034 | if ( info. exists() ) { | 2038 | if ( info. exists() ) { |
2035 | mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); | 2039 | mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); |
2036 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 2040 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
2037 | i18n("Overwrite!"), i18n("Cancel"), 0, | 2041 | i18n("Overwrite!"), i18n("Cancel"), 0, |
2038 | 0, 1 ); | 2042 | 0, 1 ); |
2039 | if ( result != 0 ) { | 2043 | if ( result != 0 ) { |
2040 | createbup = false; | 2044 | createbup = false; |
2041 | } | 2045 | } |
2042 | } | 2046 | } |
2043 | if ( createbup ) { | 2047 | if ( createbup ) { |
2044 | if ( mView->exportVCalendar( fn ) ) { | 2048 | if ( mView->exportVCalendar( fn ) ) { |
2045 | KOPrefs::instance()->mLastVcalFile = fn; | 2049 | KOPrefs::instance()->mLastVcalFile = fn; |
2046 | if ( fn.length() > 20 ) | 2050 | if ( fn.length() > 20 ) |
2047 | mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; | 2051 | mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; |
2048 | else | 2052 | else |
2049 | mes = i18n("KO/Pi:Exported to %1").arg(fn ); | 2053 | mes = i18n("KO/Pi:Exported to %1").arg(fn ); |
2050 | setCaption(mes); | 2054 | setCaption(mes); |
2051 | } | 2055 | } |
2052 | } | 2056 | } |
2053 | 2057 | ||
2054 | } | 2058 | } |
2055 | QString MainWindow::sentSyncFile() | 2059 | QString MainWindow::sentSyncFile() |
2056 | { | 2060 | { |
2057 | #ifdef DESKTOP_VERSION | 2061 | #ifdef DESKTOP_VERSION |
2058 | return locateLocal( "tmp", "copysynccal.ics" ); | 2062 | return locateLocal( "tmp", "copysynccal.ics" ); |
2059 | #else | 2063 | #else |
2060 | return QString( "/tmp/copysynccal.ics" ); | 2064 | return QString( "/tmp/copysynccal.ics" ); |
2061 | #endif | 2065 | #endif |
2062 | } | 2066 | } |
2063 | 2067 | ||
2064 | void MainWindow::syncFileRequest() | 2068 | void MainWindow::syncFileRequest() |
2065 | { | 2069 | { |
2066 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { | 2070 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { |
2067 | mSyncManager->slotSyncMenu( 999 ); | 2071 | mSyncManager->slotSyncMenu( 999 ); |
2068 | } | 2072 | } |
2069 | 2073 | ||
2070 | setCaption(i18n("Saving Data to temp file ..." )); | 2074 | setCaption(i18n("Saving Data to temp file ..." )); |
2071 | mView->saveCalendar( sentSyncFile() ); | 2075 | mView->saveCalendar( sentSyncFile() ); |
2072 | setCaption(i18n("Data saved to temp file!" )); | 2076 | setCaption(i18n("Data saved to temp file!" )); |
2073 | 2077 | ||
2074 | } | 2078 | } |
2075 | void MainWindow::getFile( bool success ) | 2079 | void MainWindow::getFile( bool success ) |
2076 | { | 2080 | { |
2077 | if ( ! success ) { | 2081 | if ( ! success ) { |
2078 | setCaption( i18n("Error receiving file. Nothing changed!") ); | 2082 | setCaption( i18n("Error receiving file. Nothing changed!") ); |
2079 | return; | 2083 | return; |
2080 | } | 2084 | } |
2081 | mView->openCalendar( sentSyncFile() ); | 2085 | mView->openCalendar( sentSyncFile() ); |
2082 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { | 2086 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { |
2083 | mSyncManager->slotSyncMenu( 999 ); | 2087 | mSyncManager->slotSyncMenu( 999 ); |
2084 | } | 2088 | } |
2085 | setCaption( i18n("Pi-Sync successful!") ); | 2089 | setCaption( i18n("Pi-Sync successful!") ); |
2086 | } | 2090 | } |
2087 | 2091 | ||
2088 | void MainWindow::printSel( ) | 2092 | void MainWindow::printSel( ) |
2089 | { | 2093 | { |
2090 | mView->viewManager()->agendaView()->agenda()->printSelection(); | 2094 | mView->viewManager()->agendaView()->agenda()->printSelection(); |
2091 | } | 2095 | } |
2092 | 2096 | ||
2093 | void MainWindow::printCal() | 2097 | void MainWindow::printCal() |
2094 | { | 2098 | { |
2095 | mView->print();//mCp->showDialog(); | 2099 | mView->print();//mCp->showDialog(); |
2096 | } | 2100 | } |
2097 | 2101 | ||
2098 | 2102 | ||
2099 | #include "libkdepim/kdatepicker.h" | 2103 | #include "libkdepim/kdatepicker.h" |
2100 | #include <kdatetbl.h> | 2104 | #include <kdatetbl.h> |
2101 | void MainWindow::weekAction() | 2105 | void MainWindow::weekAction() |
2102 | { | 2106 | { |
2103 | int month; | 2107 | int month; |
2104 | KPopupFrame* popup = new KPopupFrame(this); | 2108 | KPopupFrame* popup = new KPopupFrame(this); |
2105 | KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup); | 2109 | KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup); |
2106 | // ----- | 2110 | // ----- |
2107 | picker->resize(picker->sizeHint()); | 2111 | picker->resize(picker->sizeHint()); |
2108 | popup->setMainWidget(picker); | 2112 | popup->setMainWidget(picker); |
2109 | picker->setFocus(); | 2113 | picker->setFocus(); |
2110 | connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); | 2114 | connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); |
2111 | int x = 0; | 2115 | int x = 0; |
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp index 52c298b..5c889c3 100644 --- a/libkcal/calendarlocal.cpp +++ b/libkcal/calendarlocal.cpp | |||
@@ -1,684 +1,685 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of libkcal. | 2 | This file is part of libkcal. |
3 | 3 | ||
4 | Copyright (c) 1998 Preston Brown | 4 | Copyright (c) 1998 Preston Brown |
5 | Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> | 5 | Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> |
6 | 6 | ||
7 | This library is free software; you can redistribute it and/or | 7 | This library is free software; you can redistribute it and/or |
8 | modify it under the terms of the GNU Library General Public | 8 | modify it under the terms of the GNU Library General Public |
9 | License as published by the Free Software Foundation; either | 9 | License as published by the Free Software Foundation; either |
10 | version 2 of the License, or (at your option) any later version. | 10 | version 2 of the License, or (at your option) any later version. |
11 | 11 | ||
12 | This library is distributed in the hope that it will be useful, | 12 | This library is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | Library General Public License for more details. | 15 | Library General Public License for more details. |
16 | 16 | ||
17 | You should have received a copy of the GNU Library General Public License | 17 | You should have received a copy of the GNU Library General Public License |
18 | along with this library; see the file COPYING.LIB. If not, write to | 18 | along with this library; see the file COPYING.LIB. If not, write to |
19 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 19 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
20 | Boston, MA 02111-1307, USA. | 20 | Boston, MA 02111-1307, USA. |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #include <qdatetime.h> | 23 | #include <qdatetime.h> |
24 | #include <qstring.h> | 24 | #include <qstring.h> |
25 | #include <qptrlist.h> | 25 | #include <qptrlist.h> |
26 | 26 | ||
27 | #include <kdebug.h> | 27 | #include <kdebug.h> |
28 | #include <kconfig.h> | 28 | #include <kconfig.h> |
29 | #include <kglobal.h> | 29 | #include <kglobal.h> |
30 | #include <klocale.h> | 30 | #include <klocale.h> |
31 | 31 | ||
32 | #include "vcaldrag.h" | 32 | #include "vcaldrag.h" |
33 | #include "vcalformat.h" | 33 | #include "vcalformat.h" |
34 | #include "icalformat.h" | 34 | #include "icalformat.h" |
35 | #include "exceptions.h" | 35 | #include "exceptions.h" |
36 | #include "incidence.h" | 36 | #include "incidence.h" |
37 | #include "journal.h" | 37 | #include "journal.h" |
38 | #include "filestorage.h" | 38 | #include "filestorage.h" |
39 | #include "calfilter.h" | 39 | #include "calfilter.h" |
40 | 40 | ||
41 | #include "calendarlocal.h" | 41 | #include "calendarlocal.h" |
42 | 42 | ||
43 | // #ifndef DESKTOP_VERSION | 43 | // #ifndef DESKTOP_VERSION |
44 | // #include <qtopia/alarmserver.h> | 44 | // #include <qtopia/alarmserver.h> |
45 | // #endif | 45 | // #endif |
46 | using namespace KCal; | 46 | using namespace KCal; |
47 | 47 | ||
48 | CalendarLocal::CalendarLocal() | 48 | CalendarLocal::CalendarLocal() |
49 | : Calendar() | 49 | : Calendar() |
50 | { | 50 | { |
51 | init(); | 51 | init(); |
52 | } | 52 | } |
53 | 53 | ||
54 | CalendarLocal::CalendarLocal(const QString &timeZoneId) | 54 | CalendarLocal::CalendarLocal(const QString &timeZoneId) |
55 | : Calendar(timeZoneId) | 55 | : Calendar(timeZoneId) |
56 | { | 56 | { |
57 | init(); | 57 | init(); |
58 | } | 58 | } |
59 | 59 | ||
60 | void CalendarLocal::init() | 60 | void CalendarLocal::init() |
61 | { | 61 | { |
62 | mNextAlarmIncidence = 0; | 62 | mNextAlarmIncidence = 0; |
63 | } | 63 | } |
64 | 64 | ||
65 | 65 | ||
66 | CalendarLocal::~CalendarLocal() | 66 | CalendarLocal::~CalendarLocal() |
67 | { | 67 | { |
68 | close(); | 68 | close(); |
69 | } | 69 | } |
70 | 70 | ||
71 | bool CalendarLocal::load( const QString &fileName ) | 71 | bool CalendarLocal::load( const QString &fileName ) |
72 | { | 72 | { |
73 | FileStorage storage( this, fileName ); | 73 | FileStorage storage( this, fileName ); |
74 | return storage.load(); | 74 | return storage.load(); |
75 | } | 75 | } |
76 | 76 | ||
77 | bool CalendarLocal::save( const QString &fileName, CalFormat *format ) | 77 | bool CalendarLocal::save( const QString &fileName, CalFormat *format ) |
78 | { | 78 | { |
79 | FileStorage storage( this, fileName, format ); | 79 | FileStorage storage( this, fileName, format ); |
80 | return storage.save(); | 80 | return storage.save(); |
81 | } | 81 | } |
82 | 82 | ||
83 | void CalendarLocal::close() | 83 | void CalendarLocal::close() |
84 | { | 84 | { |
85 | mEventList.setAutoDelete( true ); | 85 | mEventList.setAutoDelete( true ); |
86 | mTodoList.setAutoDelete( true ); | 86 | mTodoList.setAutoDelete( true ); |
87 | mJournalList.setAutoDelete( false ); | 87 | mJournalList.setAutoDelete( false ); |
88 | 88 | ||
89 | mEventList.clear(); | 89 | mEventList.clear(); |
90 | mTodoList.clear(); | 90 | mTodoList.clear(); |
91 | mJournalList.clear(); | 91 | mJournalList.clear(); |
92 | 92 | ||
93 | mEventList.setAutoDelete( false ); | 93 | mEventList.setAutoDelete( false ); |
94 | mTodoList.setAutoDelete( false ); | 94 | mTodoList.setAutoDelete( false ); |
95 | mJournalList.setAutoDelete( false ); | 95 | mJournalList.setAutoDelete( false ); |
96 | 96 | ||
97 | setModified( false ); | 97 | setModified( false ); |
98 | } | 98 | } |
99 | 99 | ||
100 | bool CalendarLocal::addAnniversaryNoDup( Event *event ) | 100 | bool CalendarLocal::addAnniversaryNoDup( Event *event ) |
101 | { | 101 | { |
102 | QString cat; | 102 | QString cat; |
103 | bool isBirthday = true; | 103 | bool isBirthday = true; |
104 | if( event->categoriesStr() == i18n( "Anniversary" ) ) { | 104 | if( event->categoriesStr() == i18n( "Anniversary" ) ) { |
105 | isBirthday = false; | 105 | isBirthday = false; |
106 | cat = i18n( "Anniversary" ); | 106 | cat = i18n( "Anniversary" ); |
107 | } else if( event->categoriesStr() == i18n( "Birthday" ) ) { | 107 | } else if( event->categoriesStr() == i18n( "Birthday" ) ) { |
108 | isBirthday = true; | 108 | isBirthday = true; |
109 | cat = i18n( "Birthday" ); | 109 | cat = i18n( "Birthday" ); |
110 | } else { | 110 | } else { |
111 | qDebug("addAnniversaryNoDup called without fitting category! "); | 111 | qDebug("addAnniversaryNoDup called without fitting category! "); |
112 | return false; | 112 | return false; |
113 | } | 113 | } |
114 | Event * eve; | 114 | Event * eve; |
115 | for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { | 115 | for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { |
116 | if ( !(eve->categories().contains( cat ) )) | 116 | if ( !(eve->categories().contains( cat ) )) |
117 | continue; | 117 | continue; |
118 | // now we have an event with fitting category | 118 | // now we have an event with fitting category |
119 | if ( eve->dtStart().date() != event->dtStart().date() ) | 119 | if ( eve->dtStart().date() != event->dtStart().date() ) |
120 | continue; | 120 | continue; |
121 | // now we have an event with fitting category+date | 121 | // now we have an event with fitting category+date |
122 | if ( eve->summary() != event->summary() ) | 122 | if ( eve->summary() != event->summary() ) |
123 | continue; | 123 | continue; |
124 | // now we have an event with fitting category+date+summary | 124 | // now we have an event with fitting category+date+summary |
125 | return false; | 125 | return false; |
126 | } | 126 | } |
127 | return addEvent( event ); | 127 | return addEvent( event ); |
128 | 128 | ||
129 | } | 129 | } |
130 | bool CalendarLocal::addEventNoDup( Event *event ) | 130 | bool CalendarLocal::addEventNoDup( Event *event ) |
131 | { | 131 | { |
132 | Event * eve; | 132 | Event * eve; |
133 | for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { | 133 | for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { |
134 | if ( *eve == *event ) { | 134 | if ( *eve == *event ) { |
135 | //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); | 135 | //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); |
136 | return false; | 136 | return false; |
137 | } | 137 | } |
138 | } | 138 | } |
139 | return addEvent( event ); | 139 | return addEvent( event ); |
140 | } | 140 | } |
141 | 141 | ||
142 | bool CalendarLocal::addEvent( Event *event ) | 142 | bool CalendarLocal::addEvent( Event *event ) |
143 | { | 143 | { |
144 | insertEvent( event ); | 144 | insertEvent( event ); |
145 | 145 | ||
146 | event->registerObserver( this ); | 146 | event->registerObserver( this ); |
147 | 147 | ||
148 | setModified( true ); | 148 | setModified( true ); |
149 | 149 | ||
150 | return true; | 150 | return true; |
151 | } | 151 | } |
152 | 152 | ||
153 | void CalendarLocal::deleteEvent( Event *event ) | 153 | void CalendarLocal::deleteEvent( Event *event ) |
154 | { | 154 | { |
155 | if ( mUndoIncidence ) delete mUndoIncidence; | 155 | if ( mUndoIncidence ) delete mUndoIncidence; |
156 | mUndoIncidence = event->clone(); | 156 | mUndoIncidence = event->clone(); |
157 | if ( mEventList.removeRef( event ) ) { | 157 | if ( mEventList.removeRef( event ) ) { |
158 | setModified( true ); | 158 | setModified( true ); |
159 | } | 159 | } |
160 | } | 160 | } |
161 | 161 | ||
162 | 162 | ||
163 | Event *CalendarLocal::event( const QString &uid ) | 163 | Event *CalendarLocal::event( const QString &uid ) |
164 | { | 164 | { |
165 | 165 | ||
166 | Event *event; | 166 | Event *event; |
167 | 167 | ||
168 | for ( event = mEventList.first(); event; event = mEventList.next() ) { | 168 | for ( event = mEventList.first(); event; event = mEventList.next() ) { |
169 | if ( event->uid() == uid ) { | 169 | if ( event->uid() == uid ) { |
170 | return event; | 170 | return event; |
171 | } | 171 | } |
172 | } | 172 | } |
173 | 173 | ||
174 | return 0; | 174 | return 0; |
175 | } | 175 | } |
176 | bool CalendarLocal::addTodoNoDup( Todo *todo ) | 176 | bool CalendarLocal::addTodoNoDup( Todo *todo ) |
177 | { | 177 | { |
178 | Todo * eve; | 178 | Todo * eve; |
179 | for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { | 179 | for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { |
180 | if ( *eve == *todo ) { | 180 | if ( *eve == *todo ) { |
181 | //qDebug("duplicate todo found! not inserted! "); | 181 | //qDebug("duplicate todo found! not inserted! "); |
182 | return false; | 182 | return false; |
183 | } | 183 | } |
184 | } | 184 | } |
185 | return addTodo( todo ); | 185 | return addTodo( todo ); |
186 | } | 186 | } |
187 | bool CalendarLocal::addTodo( Todo *todo ) | 187 | bool CalendarLocal::addTodo( Todo *todo ) |
188 | { | 188 | { |
189 | mTodoList.append( todo ); | 189 | mTodoList.append( todo ); |
190 | 190 | ||
191 | todo->registerObserver( this ); | 191 | todo->registerObserver( this ); |
192 | 192 | ||
193 | // Set up subtask relations | 193 | // Set up subtask relations |
194 | setupRelations( todo ); | 194 | setupRelations( todo ); |
195 | 195 | ||
196 | setModified( true ); | 196 | setModified( true ); |
197 | 197 | ||
198 | return true; | 198 | return true; |
199 | } | 199 | } |
200 | 200 | ||
201 | void CalendarLocal::deleteTodo( Todo *todo ) | 201 | void CalendarLocal::deleteTodo( Todo *todo ) |
202 | { | 202 | { |
203 | // Handle orphaned children | 203 | // Handle orphaned children |
204 | if ( mUndoIncidence ) delete mUndoIncidence; | 204 | if ( mUndoIncidence ) delete mUndoIncidence; |
205 | removeRelations( todo ); | 205 | removeRelations( todo ); |
206 | mUndoIncidence = todo->clone(); | 206 | mUndoIncidence = todo->clone(); |
207 | 207 | ||
208 | if ( mTodoList.removeRef( todo ) ) { | 208 | if ( mTodoList.removeRef( todo ) ) { |
209 | setModified( true ); | 209 | setModified( true ); |
210 | } | 210 | } |
211 | } | 211 | } |
212 | 212 | ||
213 | QPtrList<Todo> CalendarLocal::rawTodos() | 213 | QPtrList<Todo> CalendarLocal::rawTodos() |
214 | { | 214 | { |
215 | return mTodoList; | 215 | return mTodoList; |
216 | } | 216 | } |
217 | Todo *CalendarLocal::todo( QString syncProf, QString id ) | 217 | Todo *CalendarLocal::todo( QString syncProf, QString id ) |
218 | { | 218 | { |
219 | Todo *todo; | 219 | Todo *todo; |
220 | for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { | 220 | for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { |
221 | if ( todo->getID( syncProf ) == id ) return todo; | 221 | if ( todo->getID( syncProf ) == id ) return todo; |
222 | } | 222 | } |
223 | 223 | ||
224 | return 0; | 224 | return 0; |
225 | } | 225 | } |
226 | void CalendarLocal::removeSyncInfo( QString syncProfile) | 226 | void CalendarLocal::removeSyncInfo( QString syncProfile) |
227 | { | 227 | { |
228 | QPtrList<Incidence> all = rawIncidences() ; | 228 | QPtrList<Incidence> all = rawIncidences() ; |
229 | Incidence *inc; | 229 | Incidence *inc; |
230 | for ( inc = all.first(); inc; inc = all.next() ) { | 230 | for ( inc = all.first(); inc; inc = all.next() ) { |
231 | inc->removeID( syncProfile ); | 231 | inc->removeID( syncProfile ); |
232 | } | 232 | } |
233 | if ( syncProfile.isEmpty() ) { | 233 | if ( syncProfile.isEmpty() ) { |
234 | QPtrList<Event> el; | 234 | QPtrList<Event> el; |
235 | Event *todo; | 235 | Event *todo; |
236 | for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { | 236 | for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { |
237 | if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) | 237 | if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) |
238 | el.append( todo ); | 238 | el.append( todo ); |
239 | } | 239 | } |
240 | for ( todo = el.first(); todo; todo = el.next() ) { | 240 | for ( todo = el.first(); todo; todo = el.next() ) { |
241 | deleteIncidence ( todo ); | 241 | deleteIncidence ( todo ); |
242 | } | 242 | } |
243 | } else { | 243 | } else { |
244 | Event *lse = event( "last-syncEvent-"+ syncProfile); | 244 | Event *lse = event( "last-syncEvent-"+ syncProfile); |
245 | if ( lse ) | 245 | if ( lse ) |
246 | deleteIncidence ( lse ); | 246 | deleteIncidence ( lse ); |
247 | } | 247 | } |
248 | } | 248 | } |
249 | QPtrList<Event> CalendarLocal::getExternLastSyncEvents() | 249 | QPtrList<Event> CalendarLocal::getExternLastSyncEvents() |
250 | { | 250 | { |
251 | QPtrList<Event> el; | 251 | QPtrList<Event> el; |
252 | Event *todo; | 252 | Event *todo; |
253 | for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { | 253 | for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { |
254 | if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) | 254 | if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) |
255 | if ( todo->summary().left(3) == "E: " ) | 255 | if ( todo->summary().left(3) == "E: " ) |
256 | el.append( todo ); | 256 | el.append( todo ); |
257 | } | 257 | } |
258 | 258 | ||
259 | return el; | 259 | return el; |
260 | 260 | ||
261 | } | 261 | } |
262 | Event *CalendarLocal::event( QString syncProf, QString id ) | 262 | Event *CalendarLocal::event( QString syncProf, QString id ) |
263 | { | 263 | { |
264 | Event *todo; | 264 | Event *todo; |
265 | for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { | 265 | for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { |
266 | if ( todo->getID( syncProf ) == id ) return todo; | 266 | if ( todo->getID( syncProf ) == id ) return todo; |
267 | } | 267 | } |
268 | 268 | ||
269 | return 0; | 269 | return 0; |
270 | } | 270 | } |
271 | Todo *CalendarLocal::todo( const QString &uid ) | 271 | Todo *CalendarLocal::todo( const QString &uid ) |
272 | { | 272 | { |
273 | Todo *todo; | 273 | Todo *todo; |
274 | for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { | 274 | for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { |
275 | if ( todo->uid() == uid ) return todo; | 275 | if ( todo->uid() == uid ) return todo; |
276 | } | 276 | } |
277 | 277 | ||
278 | return 0; | 278 | return 0; |
279 | } | 279 | } |
280 | QString CalendarLocal::nextSummary() const | 280 | QString CalendarLocal::nextSummary() const |
281 | { | 281 | { |
282 | return mNextSummary; | 282 | return mNextSummary; |
283 | } | 283 | } |
284 | QDateTime CalendarLocal::nextAlarmEventDateTime() const | 284 | QDateTime CalendarLocal::nextAlarmEventDateTime() const |
285 | { | 285 | { |
286 | return mNextAlarmEventDateTime; | 286 | return mNextAlarmEventDateTime; |
287 | } | 287 | } |
288 | void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) | 288 | void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) |
289 | { | 289 | { |
290 | //mNextAlarmIncidence | 290 | //mNextAlarmIncidence |
291 | //mNextAlarmDateTime | 291 | //mNextAlarmDateTime |
292 | //return mNextSummary; | 292 | //return mNextSummary; |
293 | //return mNextAlarmEventDateTime; | 293 | //return mNextAlarmEventDateTime; |
294 | bool newNextAlarm = false; | 294 | bool newNextAlarm = false; |
295 | bool computeNextAlarm = false; | 295 | bool computeNextAlarm = false; |
296 | bool ok; | 296 | bool ok; |
297 | int offset; | 297 | int offset; |
298 | QDateTime nextA; | 298 | QDateTime nextA; |
299 | // QString nextSum; | 299 | // QString nextSum; |
300 | //QDateTime nextEvent; | 300 | //QDateTime nextEvent; |
301 | mNextAlarmEventDateTime = QDateTime(); | ||
301 | if ( mNextAlarmIncidence == 0 || incidence == 0 ) { | 302 | if ( mNextAlarmIncidence == 0 || incidence == 0 ) { |
302 | computeNextAlarm = true; | 303 | computeNextAlarm = true; |
303 | } else { | 304 | } else { |
304 | if ( ! deleted ) { | 305 | if ( ! deleted ) { |
305 | nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ; | 306 | nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ; |
306 | if ( ok ) { | 307 | if ( ok ) { |
307 | if ( nextA < mNextAlarmDateTime ) { | 308 | if ( nextA < mNextAlarmDateTime ) { |
308 | deRegisterAlarm(); | 309 | deRegisterAlarm(); |
309 | mNextAlarmDateTime = nextA; | 310 | mNextAlarmDateTime = nextA; |
310 | mNextSummary = incidence->summary(); | 311 | mNextSummary = incidence->summary(); |
311 | mNextAlarmEventDateTime = nextA.addSecs(offset ) ; | 312 | mNextAlarmEventDateTime = nextA.addSecs(offset ) ; |
312 | mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); | 313 | mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); |
313 | newNextAlarm = true; | 314 | newNextAlarm = true; |
314 | mNextAlarmIncidence = incidence; | 315 | mNextAlarmIncidence = incidence; |
315 | } else { | 316 | } else { |
316 | if ( incidence == mNextAlarmIncidence ) { | 317 | if ( incidence == mNextAlarmIncidence ) { |
317 | computeNextAlarm = true; | 318 | computeNextAlarm = true; |
318 | } | 319 | } |
319 | } | 320 | } |
320 | } else { | 321 | } else { |
321 | if ( mNextAlarmIncidence == incidence ) { | 322 | if ( mNextAlarmIncidence == incidence ) { |
322 | computeNextAlarm = true; | 323 | computeNextAlarm = true; |
323 | } | 324 | } |
324 | } | 325 | } |
325 | } else { // deleted | 326 | } else { // deleted |
326 | if ( incidence == mNextAlarmIncidence ) { | 327 | if ( incidence == mNextAlarmIncidence ) { |
327 | computeNextAlarm = true; | 328 | computeNextAlarm = true; |
328 | } | 329 | } |
329 | } | 330 | } |
330 | } | 331 | } |
331 | if ( computeNextAlarm ) { | 332 | if ( computeNextAlarm ) { |
332 | deRegisterAlarm(); | 333 | deRegisterAlarm(); |
333 | nextA = nextAlarm( 1000 ); | 334 | nextA = nextAlarm( 1000 ); |
334 | if (! mNextAlarmIncidence ) { | 335 | if (! mNextAlarmIncidence ) { |
335 | return; | 336 | return; |
336 | } | 337 | } |
337 | newNextAlarm = true; | 338 | newNextAlarm = true; |
338 | } | 339 | } |
339 | if ( newNextAlarm ) | 340 | if ( newNextAlarm ) |
340 | registerAlarm(); | 341 | registerAlarm(); |
341 | } | 342 | } |
342 | QString CalendarLocal:: getAlarmNotification() | 343 | QString CalendarLocal:: getAlarmNotification() |
343 | { | 344 | { |
344 | QString ret; | 345 | QString ret; |
345 | // this should not happen | 346 | // this should not happen |
346 | if (! mNextAlarmIncidence ) | 347 | if (! mNextAlarmIncidence ) |
347 | return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; | 348 | return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; |
348 | Alarm* alarm = mNextAlarmIncidence->alarms().first(); | 349 | Alarm* alarm = mNextAlarmIncidence->alarms().first(); |
349 | if ( alarm->type() == Alarm::Procedure ) { | 350 | if ( alarm->type() == Alarm::Procedure ) { |
350 | ret = "proc_alarm" + alarm->programFile()+"+++"; | 351 | ret = "proc_alarm" + alarm->programFile()+"+++"; |
351 | } else { | 352 | } else { |
352 | ret = "audio_alarm" +alarm->audioFile() +"+++"; | 353 | ret = "audio_alarm" +alarm->audioFile() +"+++"; |
353 | } | 354 | } |
354 | ret += "cal_alarm"+ mNextSummary.left( 25 ); | 355 | ret += "cal_alarm"+ mNextSummary.left( 25 ); |
355 | if ( mNextSummary.length() > 25 ) | 356 | if ( mNextSummary.length() > 25 ) |
356 | ret += "\n" + mNextSummary.mid(25, 25 ); | 357 | ret += "\n" + mNextSummary.mid(25, 25 ); |
357 | ret+= "\n"+mNextAlarmEventDateTimeString; | 358 | ret+= "\n"+mNextAlarmEventDateTimeString; |
358 | return ret; | 359 | return ret; |
359 | } | 360 | } |
360 | void CalendarLocal::registerAlarm() | 361 | void CalendarLocal::registerAlarm() |
361 | { | 362 | { |
362 | mLastAlarmNotificationString = getAlarmNotification(); | 363 | mLastAlarmNotificationString = getAlarmNotification(); |
363 | // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); | 364 | // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); |
364 | emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); | 365 | emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); |
365 | // #ifndef DESKTOP_VERSION | 366 | // #ifndef DESKTOP_VERSION |
366 | // AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); | 367 | // AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); |
367 | // #endif | 368 | // #endif |
368 | } | 369 | } |
369 | void CalendarLocal::deRegisterAlarm() | 370 | void CalendarLocal::deRegisterAlarm() |
370 | { | 371 | { |
371 | if ( mLastAlarmNotificationString.isNull() ) | 372 | if ( mLastAlarmNotificationString.isNull() ) |
372 | return; | 373 | return; |
373 | //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); | 374 | //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); |
374 | 375 | ||
375 | emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); | 376 | emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); |
376 | // #ifndef DESKTOP_VERSION | 377 | // #ifndef DESKTOP_VERSION |
377 | // AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); | 378 | // AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); |
378 | // #endif | 379 | // #endif |
379 | } | 380 | } |
380 | 381 | ||
381 | QPtrList<Todo> CalendarLocal::todos( const QDate &date ) | 382 | QPtrList<Todo> CalendarLocal::todos( const QDate &date ) |
382 | { | 383 | { |
383 | QPtrList<Todo> todos; | 384 | QPtrList<Todo> todos; |
384 | 385 | ||
385 | Todo *todo; | 386 | Todo *todo; |
386 | for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { | 387 | for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { |
387 | if ( todo->hasDueDate() && todo->dtDue().date() == date ) { | 388 | if ( todo->hasDueDate() && todo->dtDue().date() == date ) { |
388 | todos.append( todo ); | 389 | todos.append( todo ); |
389 | } | 390 | } |
390 | } | 391 | } |
391 | 392 | ||
392 | filter()->apply( &todos ); | 393 | filter()->apply( &todos ); |
393 | return todos; | 394 | return todos; |
394 | } | 395 | } |
395 | void CalendarLocal::reInitAlarmSettings() | 396 | void CalendarLocal::reInitAlarmSettings() |
396 | { | 397 | { |
397 | if ( !mNextAlarmIncidence ) { | 398 | if ( !mNextAlarmIncidence ) { |
398 | nextAlarm( 1000 ); | 399 | nextAlarm( 1000 ); |
399 | } | 400 | } |
400 | deRegisterAlarm(); | 401 | deRegisterAlarm(); |
401 | mNextAlarmIncidence = 0; | 402 | mNextAlarmIncidence = 0; |
402 | checkAlarmForIncidence( 0, false ); | 403 | checkAlarmForIncidence( 0, false ); |
403 | 404 | ||
404 | } | 405 | } |
405 | 406 | ||
406 | 407 | ||
407 | 408 | ||
408 | QDateTime CalendarLocal::nextAlarm( int daysTo ) | 409 | QDateTime CalendarLocal::nextAlarm( int daysTo ) |
409 | { | 410 | { |
410 | QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); | 411 | QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); |
411 | QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); | 412 | QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); |
412 | QDateTime next; | 413 | QDateTime next; |
413 | Event *e; | 414 | Event *e; |
414 | bool ok; | 415 | bool ok; |
415 | bool found = false; | 416 | bool found = false; |
416 | int offset; | 417 | int offset; |
417 | mNextAlarmIncidence = 0; | 418 | mNextAlarmIncidence = 0; |
418 | for( e = mEventList.first(); e; e = mEventList.next() ) { | 419 | for( e = mEventList.first(); e; e = mEventList.next() ) { |
419 | next = e->getNextAlarmDateTime(& ok, &offset ) ; | 420 | next = e->getNextAlarmDateTime(& ok, &offset ) ; |
420 | if ( ok ) { | 421 | if ( ok ) { |
421 | if ( next < nextA ) { | 422 | if ( next < nextA ) { |
422 | nextA = next; | 423 | nextA = next; |
423 | found = true; | 424 | found = true; |
424 | mNextSummary = e->summary(); | 425 | mNextSummary = e->summary(); |
425 | mNextAlarmEventDateTime = next.addSecs(offset ) ; | 426 | mNextAlarmEventDateTime = next.addSecs(offset ) ; |
426 | mNextAlarmIncidence = (Incidence *) e; | 427 | mNextAlarmIncidence = (Incidence *) e; |
427 | } | 428 | } |
428 | } | 429 | } |
429 | } | 430 | } |
430 | Todo *t; | 431 | Todo *t; |
431 | for( t = mTodoList.first(); t; t = mTodoList.next() ) { | 432 | for( t = mTodoList.first(); t; t = mTodoList.next() ) { |
432 | next = t->getNextAlarmDateTime(& ok, &offset ) ; | 433 | next = t->getNextAlarmDateTime(& ok, &offset ) ; |
433 | if ( ok ) { | 434 | if ( ok ) { |
434 | if ( next < nextA ) { | 435 | if ( next < nextA ) { |
435 | nextA = next; | 436 | nextA = next; |
436 | found = true; | 437 | found = true; |
437 | mNextSummary = t->summary(); | 438 | mNextSummary = t->summary(); |
438 | mNextAlarmEventDateTime = next.addSecs(offset ); | 439 | mNextAlarmEventDateTime = next.addSecs(offset ); |
439 | mNextAlarmIncidence = (Incidence *) t; | 440 | mNextAlarmIncidence = (Incidence *) t; |
440 | } | 441 | } |
441 | } | 442 | } |
442 | } | 443 | } |
443 | if ( mNextAlarmIncidence ) { | 444 | if ( mNextAlarmIncidence ) { |
444 | mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); | 445 | mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); |
445 | mNextAlarmDateTime = nextA; | 446 | mNextAlarmDateTime = nextA; |
446 | } | 447 | } |
447 | return nextA; | 448 | return nextA; |
448 | } | 449 | } |
449 | Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) | 450 | Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) |
450 | { | 451 | { |
451 | return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); | 452 | return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); |
452 | } | 453 | } |
453 | 454 | ||
454 | Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) | 455 | Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) |
455 | { | 456 | { |
456 | kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - " | 457 | kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - " |
457 | << to.toString() << ")\n"; | 458 | << to.toString() << ")\n"; |
458 | 459 | ||
459 | Alarm::List alarms; | 460 | Alarm::List alarms; |
460 | 461 | ||
461 | Event *e; | 462 | Event *e; |
462 | 463 | ||
463 | for( e = mEventList.first(); e; e = mEventList.next() ) { | 464 | for( e = mEventList.first(); e; e = mEventList.next() ) { |
464 | if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); | 465 | if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); |
465 | else appendAlarms( alarms, e, from, to ); | 466 | else appendAlarms( alarms, e, from, to ); |
466 | } | 467 | } |
467 | 468 | ||
468 | Todo *t; | 469 | Todo *t; |
469 | for( t = mTodoList.first(); t; t = mTodoList.next() ) { | 470 | for( t = mTodoList.first(); t; t = mTodoList.next() ) { |
470 | appendAlarms( alarms, t, from, to ); | 471 | appendAlarms( alarms, t, from, to ); |
471 | } | 472 | } |
472 | 473 | ||
473 | return alarms; | 474 | return alarms; |
474 | } | 475 | } |
475 | 476 | ||
476 | void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, | 477 | void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, |
477 | const QDateTime &from, const QDateTime &to ) | 478 | const QDateTime &from, const QDateTime &to ) |
478 | { | 479 | { |
479 | QPtrList<Alarm> alarmList = incidence->alarms(); | 480 | QPtrList<Alarm> alarmList = incidence->alarms(); |
480 | Alarm *alarm; | 481 | Alarm *alarm; |
481 | for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { | 482 | for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { |
482 | // kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() | 483 | // kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() |
483 | // << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; | 484 | // << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; |
484 | if ( alarm->enabled() ) { | 485 | if ( alarm->enabled() ) { |
485 | if ( alarm->time() >= from && alarm->time() <= to ) { | 486 | if ( alarm->time() >= from && alarm->time() <= to ) { |
486 | kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary() | 487 | kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary() |
487 | << "': " << alarm->time().toString() << endl; | 488 | << "': " << alarm->time().toString() << endl; |
488 | alarms.append( alarm ); | 489 | alarms.append( alarm ); |
489 | } | 490 | } |
490 | } | 491 | } |
491 | } | 492 | } |
492 | } | 493 | } |
493 | 494 | ||
494 | void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, | 495 | void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, |
495 | Incidence *incidence, | 496 | Incidence *incidence, |
496 | const QDateTime &from, | 497 | const QDateTime &from, |
497 | const QDateTime &to ) | 498 | const QDateTime &to ) |
498 | { | 499 | { |
499 | 500 | ||
500 | QPtrList<Alarm> alarmList = incidence->alarms(); | 501 | QPtrList<Alarm> alarmList = incidence->alarms(); |
501 | Alarm *alarm; | 502 | Alarm *alarm; |
502 | QDateTime qdt; | 503 | QDateTime qdt; |
503 | for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { | 504 | for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { |
504 | if (incidence->recursOn(from.date())) { | 505 | if (incidence->recursOn(from.date())) { |
505 | qdt.setTime(alarm->time().time()); | 506 | qdt.setTime(alarm->time().time()); |
506 | qdt.setDate(from.date()); | 507 | qdt.setDate(from.date()); |
507 | } | 508 | } |
508 | else qdt = alarm->time(); | 509 | else qdt = alarm->time(); |
509 | // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); | 510 | // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); |
510 | if ( alarm->enabled() ) { | 511 | if ( alarm->enabled() ) { |
511 | if ( qdt >= from && qdt <= to ) { | 512 | if ( qdt >= from && qdt <= to ) { |
512 | alarms.append( alarm ); | 513 | alarms.append( alarm ); |
513 | } | 514 | } |
514 | } | 515 | } |
515 | } | 516 | } |
516 | } | 517 | } |
517 | 518 | ||
518 | 519 | ||
519 | /****************************** PROTECTED METHODS ****************************/ | 520 | /****************************** PROTECTED METHODS ****************************/ |
520 | 521 | ||
521 | // after changes are made to an event, this should be called. | 522 | // after changes are made to an event, this should be called. |
522 | void CalendarLocal::update( IncidenceBase *incidence ) | 523 | void CalendarLocal::update( IncidenceBase *incidence ) |
523 | { | 524 | { |
524 | incidence->setSyncStatus( Event::SYNCMOD ); | 525 | incidence->setSyncStatus( Event::SYNCMOD ); |
525 | incidence->setLastModified( QDateTime::currentDateTime() ); | 526 | incidence->setLastModified( QDateTime::currentDateTime() ); |
526 | // we should probably update the revision number here, | 527 | // we should probably update the revision number here, |
527 | // or internally in the Event itself when certain things change. | 528 | // or internally in the Event itself when certain things change. |
528 | // need to verify with ical documentation. | 529 | // need to verify with ical documentation. |
529 | 530 | ||
530 | setModified( true ); | 531 | setModified( true ); |
531 | } | 532 | } |
532 | 533 | ||
533 | void CalendarLocal::insertEvent( Event *event ) | 534 | void CalendarLocal::insertEvent( Event *event ) |
534 | { | 535 | { |
535 | if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); | 536 | if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); |
536 | } | 537 | } |
537 | 538 | ||
538 | 539 | ||
539 | QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) | 540 | QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) |
540 | { | 541 | { |
541 | QPtrList<Event> eventList; | 542 | QPtrList<Event> eventList; |
542 | 543 | ||
543 | Event *event; | 544 | Event *event; |
544 | for( event = mEventList.first(); event; event = mEventList.next() ) { | 545 | for( event = mEventList.first(); event; event = mEventList.next() ) { |
545 | if ( event->doesRecur() ) { | 546 | if ( event->doesRecur() ) { |
546 | if ( event->isMultiDay() ) { | 547 | if ( event->isMultiDay() ) { |
547 | int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); | 548 | int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); |
548 | int i; | 549 | int i; |
549 | for ( i = 0; i <= extraDays; i++ ) { | 550 | for ( i = 0; i <= extraDays; i++ ) { |
550 | if ( event->recursOn( qd.addDays( -i ) ) ) { | 551 | if ( event->recursOn( qd.addDays( -i ) ) ) { |
551 | eventList.append( event ); | 552 | eventList.append( event ); |
552 | break; | 553 | break; |
553 | } | 554 | } |
554 | } | 555 | } |
555 | } else { | 556 | } else { |
556 | if ( event->recursOn( qd ) ) | 557 | if ( event->recursOn( qd ) ) |
557 | eventList.append( event ); | 558 | eventList.append( event ); |
558 | } | 559 | } |
559 | } else { | 560 | } else { |
560 | if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { | 561 | if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { |
561 | eventList.append( event ); | 562 | eventList.append( event ); |
562 | } | 563 | } |
563 | } | 564 | } |
564 | } | 565 | } |
565 | 566 | ||
566 | if ( !sorted ) { | 567 | if ( !sorted ) { |
567 | return eventList; | 568 | return eventList; |
568 | } | 569 | } |
569 | 570 | ||
570 | // kdDebug(5800) << "Sorting events for date\n" << endl; | 571 | // kdDebug(5800) << "Sorting events for date\n" << endl; |
571 | // now, we have to sort it based on dtStart.time() | 572 | // now, we have to sort it based on dtStart.time() |
572 | QPtrList<Event> eventListSorted; | 573 | QPtrList<Event> eventListSorted; |
573 | Event *sortEvent; | 574 | Event *sortEvent; |
574 | for ( event = eventList.first(); event; event = eventList.next() ) { | 575 | for ( event = eventList.first(); event; event = eventList.next() ) { |
575 | sortEvent = eventListSorted.first(); | 576 | sortEvent = eventListSorted.first(); |
576 | int i = 0; | 577 | int i = 0; |
577 | while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) | 578 | while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) |
578 | { | 579 | { |
579 | i++; | 580 | i++; |
580 | sortEvent = eventListSorted.next(); | 581 | sortEvent = eventListSorted.next(); |
581 | } | 582 | } |
582 | eventListSorted.insert( i, event ); | 583 | eventListSorted.insert( i, event ); |
583 | } | 584 | } |
584 | return eventListSorted; | 585 | return eventListSorted; |
585 | } | 586 | } |
586 | 587 | ||
587 | 588 | ||
588 | QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, | 589 | QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, |
589 | bool inclusive ) | 590 | bool inclusive ) |
590 | { | 591 | { |
591 | Event *event = 0; | 592 | Event *event = 0; |
592 | 593 | ||
593 | QPtrList<Event> eventList; | 594 | QPtrList<Event> eventList; |
594 | 595 | ||
595 | // Get non-recurring events | 596 | // Get non-recurring events |
596 | for( event = mEventList.first(); event; event = mEventList.next() ) { | 597 | for( event = mEventList.first(); event; event = mEventList.next() ) { |
597 | if ( event->doesRecur() ) { | 598 | if ( event->doesRecur() ) { |
598 | QDate rStart = event->dtStart().date(); | 599 | QDate rStart = event->dtStart().date(); |
599 | bool found = false; | 600 | bool found = false; |
600 | if ( inclusive ) { | 601 | if ( inclusive ) { |
601 | if ( rStart >= start && rStart <= end ) { | 602 | if ( rStart >= start && rStart <= end ) { |
602 | // Start date of event is in range. Now check for end date. | 603 | // Start date of event is in range. Now check for end date. |
603 | // if duration is negative, event recurs forever, so do not include it. | 604 | // if duration is negative, event recurs forever, so do not include it. |
604 | if ( event->recurrence()->duration() == 0 ) { // End date set | 605 | if ( event->recurrence()->duration() == 0 ) { // End date set |
605 | QDate rEnd = event->recurrence()->endDate(); | 606 | QDate rEnd = event->recurrence()->endDate(); |
606 | if ( rEnd >= start && rEnd <= end ) { // End date within range | 607 | if ( rEnd >= start && rEnd <= end ) { // End date within range |
607 | found = true; | 608 | found = true; |
608 | } | 609 | } |
609 | } else if ( event->recurrence()->duration() > 0 ) { // Duration set | 610 | } else if ( event->recurrence()->duration() > 0 ) { // Duration set |
610 | // TODO: Calculate end date from duration. Should be done in Event | 611 | // TODO: Calculate end date from duration. Should be done in Event |
611 | // For now exclude all events with a duration. | 612 | // For now exclude all events with a duration. |
612 | } | 613 | } |
613 | } | 614 | } |
614 | } else { | 615 | } else { |
615 | bool founOne; | 616 | bool founOne; |
616 | QDate next = event->getNextOccurence( start, &founOne ).date(); | 617 | QDate next = event->getNextOccurence( start, &founOne ).date(); |
617 | if ( founOne ) { | 618 | if ( founOne ) { |
618 | if ( next <= end ) { | 619 | if ( next <= end ) { |
619 | found = true; | 620 | found = true; |
620 | } | 621 | } |
621 | } | 622 | } |
622 | 623 | ||
623 | /* | 624 | /* |
624 | // crap !!! | 625 | // crap !!! |
625 | if ( rStart <= end ) { // Start date not after range | 626 | if ( rStart <= end ) { // Start date not after range |
626 | if ( rStart >= start ) { // Start date within range | 627 | if ( rStart >= start ) { // Start date within range |
627 | found = true; | 628 | found = true; |
628 | } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever | 629 | } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever |
629 | found = true; | 630 | found = true; |
630 | } else if ( event->recurrence()->duration() == 0 ) { // End date set | 631 | } else if ( event->recurrence()->duration() == 0 ) { // End date set |
631 | QDate rEnd = event->recurrence()->endDate(); | 632 | QDate rEnd = event->recurrence()->endDate(); |
632 | if ( rEnd >= start && rEnd <= end ) { // End date within range | 633 | if ( rEnd >= start && rEnd <= end ) { // End date within range |
633 | found = true; | 634 | found = true; |
634 | } | 635 | } |
635 | } else { // Duration set | 636 | } else { // Duration set |
636 | // TODO: Calculate end date from duration. Should be done in Event | 637 | // TODO: Calculate end date from duration. Should be done in Event |
637 | // For now include all events with a duration. | 638 | // For now include all events with a duration. |
638 | found = true; | 639 | found = true; |
639 | } | 640 | } |
640 | } | 641 | } |
641 | */ | 642 | */ |
642 | 643 | ||
643 | } | 644 | } |
644 | 645 | ||
645 | if ( found ) eventList.append( event ); | 646 | if ( found ) eventList.append( event ); |
646 | } else { | 647 | } else { |
647 | QDate s = event->dtStart().date(); | 648 | QDate s = event->dtStart().date(); |
648 | QDate e = event->dtEnd().date(); | 649 | QDate e = event->dtEnd().date(); |
649 | 650 | ||
650 | if ( inclusive ) { | 651 | if ( inclusive ) { |
651 | if ( s >= start && e <= end ) { | 652 | if ( s >= start && e <= end ) { |
652 | eventList.append( event ); | 653 | eventList.append( event ); |
653 | } | 654 | } |
654 | } else { | 655 | } else { |
655 | if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { | 656 | if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { |
656 | eventList.append( event ); | 657 | eventList.append( event ); |
657 | } | 658 | } |
658 | } | 659 | } |
659 | } | 660 | } |
660 | } | 661 | } |
661 | 662 | ||
662 | return eventList; | 663 | return eventList; |
663 | } | 664 | } |
664 | 665 | ||
665 | QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) | 666 | QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) |
666 | { | 667 | { |
667 | return rawEventsForDate( qdt.date() ); | 668 | return rawEventsForDate( qdt.date() ); |
668 | } | 669 | } |
669 | 670 | ||
670 | QPtrList<Event> CalendarLocal::rawEvents() | 671 | QPtrList<Event> CalendarLocal::rawEvents() |
671 | { | 672 | { |
672 | return mEventList; | 673 | return mEventList; |
673 | } | 674 | } |
674 | 675 | ||
675 | bool CalendarLocal::addJournal(Journal *journal) | 676 | bool CalendarLocal::addJournal(Journal *journal) |
676 | { | 677 | { |
677 | if ( journal->dtStart().isValid()) | 678 | if ( journal->dtStart().isValid()) |
678 | kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; | 679 | kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; |
679 | else | 680 | else |
680 | kdDebug(5800) << "Adding Journal without a DTSTART" << endl; | 681 | kdDebug(5800) << "Adding Journal without a DTSTART" << endl; |
681 | 682 | ||
682 | mJournalList.append(journal); | 683 | mJournalList.append(journal); |
683 | 684 | ||
684 | journal->registerObserver( this ); | 685 | journal->registerObserver( this ); |