-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 13 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 153 | ||||
-rw-r--r-- | korganizer/kotodoview.cpp | 16 | ||||
-rw-r--r-- | libkcal/event.cpp | 115 | ||||
-rw-r--r-- | libkcal/event.h | 2 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 8 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 4 |
7 files changed, 243 insertions, 68 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index b225594..43bc343 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt | |||
@@ -1376,145 +1376,142 @@ | |||
1376 | { "Global Settings...","Globale Einstellungen..." }, | 1376 | { "Global Settings...","Globale Einstellungen..." }, |
1377 | { "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" }, | 1377 | { "<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n","<p><b>R</b>: Zeige Resource Ansicht | <b>F</b>: Editiere Filter </p>\n" }, |
1378 | { "(disabled)","(abgeschaltet)" }, | 1378 | { "(disabled)","(abgeschaltet)" }, |
1379 | { "New Calendar","Neuer Kalender" }, | 1379 | { "New Calendar","Neuer Kalender" }, |
1380 | { "Calendar","Kalender" }, | 1380 | { "Calendar","Kalender" }, |
1381 | { "Filter selector","Filterauswahl" }, | 1381 | { "Filter selector","Filterauswahl" }, |
1382 | { "Filtermenu","Filtermenu" }, | 1382 | { "Filtermenu","Filtermenu" }, |
1383 | { "Toggle Fullscreen","Vollbild umschalten" }, | 1383 | { "Toggle Fullscreen","Vollbild umschalten" }, |
1384 | { "Toggle Resource View","Resourcenansicht umschalten" }, | 1384 | { "Toggle Resource View","Resourcenansicht umschalten" }, |
1385 | { "Storage HowTo...","Speicherort HowTo..." }, | 1385 | { "Storage HowTo...","Speicherort HowTo..." }, |
1386 | { "Timetracking HowTo...","Timetracking HowTo..." }, | 1386 | { "Timetracking HowTo...","Timetracking HowTo..." }, |
1387 | { "Juni","Juni" }, | 1387 | { "Juni","Juni" }, |
1388 | { "Juli","Juli" }, | 1388 | { "Juli","Juli" }, |
1389 | { "ToDo:","ToDo:" }, | 1389 | { "ToDo:","ToDo:" }, |
1390 | { "Set Calendar","Setze Kalender" }, | 1390 | { "Set Calendar","Setze Kalender" }, |
1391 | { "Todo: %1","Todo: %1" }, | 1391 | { "Todo: %1","Todo: %1" }, |
1392 | { ": (Prio ",": (Prio " }, | 1392 | { ": (Prio ",": (Prio " }, |
1393 | { "Todos","Todos" }, | 1393 | { "Todos","Todos" }, |
1394 | { "Todo Viewer","Todo Anzeige" }, | 1394 | { "Todo Viewer","Todo Anzeige" }, |
1395 | { "Todo ","Todo " }, | 1395 | { "Todo ","Todo " }, |
1396 | { " Calendar \n Resource "," Kalender \n Resource " }, | 1396 | { " Calendar \n Resource "," Kalender \n Resource " }, |
1397 | { " Color "," Farbe " }, | 1397 | { " Color "," Farbe " }, |
1398 | { "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, | 1398 | { "The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>. Möchten Sie diesen Kalender aus KO/Pi entfernen? (Die Datei wird dabei nicht gelöscht!)" }, |
1399 | { "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, | 1399 | { "The calendar <b>%1</b> is displaying file <b>%2</b>","Der Kalender <b>%1</b> zeigt die Datei <b>%2</b>" }, |
1400 | { "Add new Calendar","Füge Kalender hinzu" }, | 1400 | { "Add new Calendar","Füge Kalender hinzu" }, |
1401 | { "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, | 1401 | { "<b>Name of new calendar:</b>","<b>Name des Kalenders:</b>" }, |
1402 | { "<b>Local ical (*.ics) file:</b>","<b>Lokale ical (*.ics) Datei:</b>" }, | 1402 | { "<b>Local ical (*.ics) file:</b>","<b>Lokale ical (*.ics) Datei:</b>" }, |
1403 | { "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, | 1403 | { "Sorry, the calendar name is empty!","Sorry, der Kalendername ist leer!" }, |
1404 | { "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, | 1404 | { "Sorry, the file name is empty!","Sorry, der Dateiname ist leer!" }, |
1405 | { "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, | 1405 | { "Error loading calendar file\n%1.","Fehler beim Laden der Kalenderdatei\n%1." }, |
1406 | { "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, | 1406 | { "The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>","Der Kalender <b>%1</b> ist nicht geladen! Das Laden der Datei <b>%2</b> schlug fehl! <b>Soll erneut versucht werden den Kalender zu laden?</b>" }, |
1407 | { "Global application font for all apps:","Globale Schriftart:" }, | 1407 | { "Global application font for all apps:","Globale Schriftart:" }, |
1408 | { "Application Font","Applikationsschriftart" }, | 1408 | { "Application Font","Applikationsschriftart" }, |
1409 | { "Kx/Pi","Kx/Pi" }, | 1409 | { "Kx/Pi","Kx/Pi" }, |
1410 | { "Backup","Backup" }, | 1410 | { "Backup","Backup" }, |
1411 | { "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, | 1411 | { "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, |
1412 | { "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, | 1412 | { "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, |
1413 | { "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, | 1413 | { "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, |
1414 | { "Choose Color","Wähle Farbe" }, | 1414 | { "Choose Color","Wähle Farbe" }, |
1415 | { " OK "," OK " }, | 1415 | { " OK "," OK " }, |
1416 | { " Cancel "," Abbrechen " }, | 1416 | { " Cancel "," Abbrechen " }, |
1417 | { "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, | 1417 | { "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, |
1418 | { "Matching items will be removed from list","Passende werden von der Liste entfernt" }, | 1418 | { "Matching items will be removed from list","Passende werden von der Liste entfernt" }, |
1419 | { "Search on displayed list only","Suche auf der dargestellten Liste" }, | 1419 | { "Search on displayed list only","Suche auf der dargestellten Liste" }, |
1420 | { "List will be cleared before search","Liste wird vor der Suche gelöscht" }, | 1420 | { "List will be cleared before search","Liste wird vor der Suche gelöscht" }, |
1421 | { "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, | 1421 | { "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, |
1422 | { "%1\nis running!","%1\nist am Laufen!" }, | 1422 | { "%1\nis running!","%1\nist am Laufen!" }, |
1423 | { "Additional Comment:","Zusätzlicher Kommentar:" }, | 1423 | { "Additional Comment:","Zusätzlicher Kommentar:" }, |
1424 | { "Stop and save","Stopp und Speichern" }, | 1424 | { "Stop and save","Stopp und Speichern" }, |
1425 | { "Continue running","Weiter laufen lassen" }, | 1425 | { "Continue running","Weiter laufen lassen" }, |
1426 | { "Stop - do not save","Stopp - nicht Speichern" }, | 1426 | { "Stop - do not save","Stopp - nicht Speichern" }, |
1427 | { "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, | 1427 | { "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, |
1428 | { "Time mismatch!","Zeiten stimmen nicht!" }, | 1428 | { "Time mismatch!","Zeiten stimmen nicht!" }, |
1429 | { "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, | 1429 | { "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, |
1430 | { "Yes, stop todo","Ja, stoppe Todo" }, | 1430 | { "Yes, stop todo","Ja, stoppe Todo" }, |
1431 | { "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, | 1431 | { "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, |
1432 | { "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, | 1432 | { "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, |
1433 | { "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, | 1433 | { "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, |
1434 | { "Spouse","Ehegatte" }, | 1434 | { "Spouse","Ehegatte" }, |
1435 | { "Notes","Notizen" }, | 1435 | { "Notes","Notizen" }, |
1436 | { "Messanger","Messanger" }, | 1436 | { "Messanger","Messanger" }, |
1437 | { "Assistant","Assistent" }, | 1437 | { "Assistant","Assistent" }, |
1438 | { "Manager","Manager" }, | 1438 | { "Manager","Manager" }, |
1439 | { "Secrecy","Sichtbar" }, | 1439 | { "Secrecy","Sichtbar" }, |
1440 | { "male","männlich" }, | 1440 | { "male","männlich" }, |
1441 | { "female","weiblich" }, | 1441 | { "female","weiblich" }, |
1442 | { "Hide!","Verbergen!" }, | 1442 | { "Hide!","Verbergen!" }, |
1443 | { "Show!","Anzeigen!" }, | 1443 | { "Show!","Anzeigen!" }, |
1444 | { "Details","Details" }, | 1444 | { "Details","Details" }, |
1445 | { "Profession","Beruf" }, | 1445 | { "Profession","Beruf" }, |
1446 | { "Children","Kinder" }, | 1446 | { "Children","Kinder" }, |
1447 | { "Department","Abteilung" }, | 1447 | { "Department","Abteilung" }, |
1448 | { "Backup cancelled","Backup abgebrochen" }, | 1448 | { "Backup cancelled","Backup abgebrochen" }, |
1449 | { "Backup globally disabled","Backup global abgeschaltet" }, | 1449 | { "Backup globally disabled","Backup global abgeschaltet" }, |
1450 | { "Backup succesfully finished","Backup erfolgreich beendet" }, | 1450 | { "Backup succesfully finished","Backup erfolgreich beendet" }, |
1451 | { "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, | 1451 | { "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, |
1452 | { "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, | 1452 | { "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, |
1453 | { "Birthdays","Geburtstage" }, | 1453 | { "Birthdays","Geburtstage" }, |
1454 | { "KO/Pi import information!","KO/Pi Import Information!" }, | 1454 | { "KO/Pi import information!","KO/Pi Import Information!" }, |
1455 | { "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, | 1455 | { "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, |
1456 | { "Cancel - do not start"," Abbrechen - Todo nicht starten" }, | 1456 | { "Cancel - do not start"," Abbrechen - Todo nicht starten" }, |
1457 | { "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, | 1457 | { "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, |
1458 | { "Reload","Neu laden" }, | 1458 | { "Reload","Neu laden" }, |
1459 | { "Timezone settings","Zeitzoneneinstellung" }, | 1459 | { "Timezone settings","Zeitzoneneinstellung" }, |
1460 | { "Title: ","Titel: " }, | 1460 | { "Title: ","Titel: " }, |
1461 | { "Journal from: ","Journal vom: " }, | 1461 | { "Journal from: ","Journal vom: " }, |
1462 | { "Journal: %1 from ","Journal: %1 vom " }, | 1462 | { "Journal: %1 from ","Journal: %1 vom " }, |
1463 | { "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, | 1463 | { "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, |
1464 | { "Selected Item","Ausgewähltes Item" }, | 1464 | { "Selected Item","Ausgewähltes Item" }, |
1465 | { "Select Date...","Wähle Datum..." }, | 1465 | { "Select Date...","Wähle Datum..." }, |
1466 | { "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, | 1466 | { "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, |
1467 | { "Change category list now!","Ändere Kategorieliste jetzt!" }, | 1467 | { "Change category list now!","Ändere Kategorieliste jetzt!" }, |
1468 | { "Edit category list...","Ändere Kategorieliste..." }, | 1468 | { "Edit category list...","Ändere Kategorieliste..." }, |
1469 | { "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, | 1469 | { "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, |
1470 | { "Filepath: ","Dateipfad: " }, | 1470 | { "Filepath: ","Dateipfad: " }, |
1471 | { "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, | 1471 | { "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, |
1472 | { "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, | 1472 | { "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, |
1473 | { "Pending Suspend Alarm","Laufender Suspend Alarm" }, | 1473 | { "Pending Suspend Alarm","Laufender Suspend Alarm" }, |
1474 | { "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, | 1474 | { "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, |
1475 | { "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, | 1475 | { "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, |
1476 | { "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, | 1476 | { "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, |
1477 | { "Alarm Options","Alarm Einstellungen" }, | 1477 | { "Alarm Options","Alarm Einstellungen" }, |
1478 | { "Delete selected...","Lösche Ausgewählte..." }, | 1478 | { "Delete selected...","Lösche Ausgewählte..." }, |
1479 | { "None","Nichts" }, | 1479 | { "None","Nichts" }, |
1480 | { "Selection","Auswahl" }, | 1480 | { "Selection","Auswahl" }, |
1481 | { "Set categories","Setze Kategorien" }, | 1481 | { "Set categories","Setze Kategorien" }, |
1482 | { "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, | 1482 | { "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, |
1483 | { "Reset","Neu setzen" }, | 1483 | { "Reset","Neu setzen" }, |
1484 | { "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, | 1484 | { "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, |
1485 | { "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, | 1485 | { "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, |
1486 | { "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, | 1486 | { "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, |
1487 | { "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, | 1487 | { "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, |
1488 | { "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, | 1488 | { "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, |
1489 | { "Edit","Edit" }, | 1489 | { "Edit","Edit" }, |
1490 | { "Last Modified","Zuletzt geändert" }, | 1490 | { "Last Modified","Zuletzt geändert" }, |
1491 | { "Journal viewer","Journal Anzeige" }, | 1491 | { "Journal viewer","Journal Anzeige" }, |
1492 | { "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, | 1492 | { "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, |
1493 | { "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, | 1493 | { "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, |
1494 | { "Hide Completed","Verstecke erledigte Todos" }, | 1494 | { "Hide Completed","Verstecke erledigte Todos" }, |
1495 | { "Show not Running","Zeige nicht Laufende" }, | 1495 | { "Show not Running","Zeige nicht Laufende" }, |
1496 | { "Click to add new Todo","Klick für neues Todo!" }, | 1496 | { "Click to add new Todo","Klick für neues Todo!" }, |
1497 | { "Show next conflict for","Zeige nächsten Konflikt für" }, | 1497 | { "Show next conflict for","Zeige nächsten Konflikt für" }, |
1498 | { "All events","Alle Termine" }, | 1498 | { "All events","Alle Termine" }, |
1499 | { "Allday events","Ganztagestermine" }, | 1499 | { "Allday events","Ganztagestermine" }, |
1500 | { "Events with time","Termine mit Zeit" }, | 1500 | { "Events with time","Termine mit Zeit" }, |
1501 | { "No conflict found within the next two years","Kein Konflikt innerhalb der nächsten zwei Jahre gefunden" }, | 1501 | { "No conflict found within the next two years","Kein Konflikt innerhalb der nächsten zwei Jahre gefunden" }, |
1502 | { "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, | 1502 | { "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, |
1503 | { "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, | 1503 | { "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, |
1504 | { "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, | ||
1505 | { "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, | ||
1506 | { "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" }, | ||
1507 | { "Show date","Zeige Datum" }, | ||
1508 | { "No problem!","Kein Problem!" }, | ||
1504 | { "","" }, | 1509 | { "","" }, |
1505 | { "","" }, | 1510 | { "","" }, |
1506 | { "","" }, | 1511 | { "","" }, |
1507 | { "","" }, | 1512 | { "","" }, |
1508 | { "","" }, | 1513 | { "","" }, |
1509 | { "","" }, | 1514 | { "","" }, |
1510 | { "","" }, | 1515 | { "","" }, |
1511 | { "","" }, | 1516 | { "","" }, |
1512 | { "","" }, | 1517 | { "","" }, |
1513 | { "","" }, | ||
1514 | { "","" }, | ||
1515 | { "","" }, | ||
1516 | { "","" }, | ||
1517 | { "","" }, | ||
1518 | |||
1519 | |||
1520 | |||
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index e766b8f..65750af 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -531,305 +531,362 @@ void CalendarView::init() | |||
531 | connect( mDateNavigator, SIGNAL( goNextYear() ), | 531 | connect( mDateNavigator, SIGNAL( goNextYear() ), |
532 | mNavigator, SLOT( selectNextYear() ) ); | 532 | mNavigator, SLOT( selectNextYear() ) ); |
533 | connect( mDateNavigator, SIGNAL( goPrevMonth() ), | 533 | connect( mDateNavigator, SIGNAL( goPrevMonth() ), |
534 | mNavigator, SLOT( selectPreviousMonth() ) ); | 534 | mNavigator, SLOT( selectPreviousMonth() ) ); |
535 | connect( mDateNavigator, SIGNAL( goNextMonth() ), | 535 | connect( mDateNavigator, SIGNAL( goNextMonth() ), |
536 | mNavigator, SLOT( selectNextMonth() ) ); | 536 | mNavigator, SLOT( selectNextMonth() ) ); |
537 | 537 | ||
538 | connect( mDateNavigator, SIGNAL( goPrevious() ), | 538 | connect( mDateNavigator, SIGNAL( goPrevious() ), |
539 | mNavigator, SLOT( selectPrevious() ) ); | 539 | mNavigator, SLOT( selectPrevious() ) ); |
540 | connect( mDateNavigator, SIGNAL( goNext() ), | 540 | connect( mDateNavigator, SIGNAL( goNext() ), |
541 | mNavigator, SLOT( selectNext() ) ); | 541 | mNavigator, SLOT( selectNext() ) ); |
542 | connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), | 542 | connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), |
543 | mNavigator, SLOT( slotMonthSelect( int ) ) ); | 543 | mNavigator, SLOT( slotMonthSelect( int ) ) ); |
544 | 544 | ||
545 | connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), | 545 | connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), |
546 | mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); | 546 | mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); |
547 | #if 0 | 547 | #if 0 |
548 | connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), | 548 | connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), |
549 | SLOT( incidenceAdded( Incidence *) ) ); | 549 | SLOT( incidenceAdded( Incidence *) ) ); |
550 | #endif | 550 | #endif |
551 | // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); | 551 | // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); |
552 | 552 | ||
553 | connect( this, SIGNAL( configChanged() ), | 553 | connect( this, SIGNAL( configChanged() ), |
554 | mDateNavigator, SLOT( updateConfig() ) ); | 554 | mDateNavigator, SLOT( updateConfig() ) ); |
555 | 555 | ||
556 | connect( mTodoList, SIGNAL( newTodoSignal() ), | 556 | connect( mTodoList, SIGNAL( newTodoSignal() ), |
557 | SLOT( newTodo() ) ); | 557 | SLOT( newTodo() ) ); |
558 | connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), | 558 | connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), |
559 | SLOT( newSubTodo( Todo * ) ) ); | 559 | SLOT( newSubTodo( Todo * ) ) ); |
560 | connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), | 560 | connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), |
561 | SLOT( editTodo( Todo * ) ) ); | 561 | SLOT( editTodo( Todo * ) ) ); |
562 | connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), | 562 | connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), |
563 | SLOT( showTodo( Todo *) ) ); | 563 | SLOT( showTodo( Todo *) ) ); |
564 | connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), | 564 | connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), |
565 | SLOT( deleteTodo( Todo *) ) ); | 565 | SLOT( deleteTodo( Todo *) ) ); |
566 | connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); | 566 | connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); |
567 | connect( mTodoList, SIGNAL( purgeCompletedSignal() ), | 567 | connect( mTodoList, SIGNAL( purgeCompletedSignal() ), |
568 | SLOT( purgeCompleted() ) ); | 568 | SLOT( purgeCompleted() ) ); |
569 | connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), | 569 | connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), |
570 | SIGNAL( todoModified( Todo *, int ) ) ); | 570 | SIGNAL( todoModified( Todo *, int ) ) ); |
571 | 571 | ||
572 | connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), | 572 | connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), |
573 | this, SLOT ( cloneIncidence( Incidence * ) ) ); | 573 | this, SLOT ( cloneIncidence( Incidence * ) ) ); |
574 | connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), | 574 | connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), |
575 | this, SLOT (cancelIncidence( Incidence * ) ) ); | 575 | this, SLOT (cancelIncidence( Incidence * ) ) ); |
576 | 576 | ||
577 | connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), | 577 | connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), |
578 | this, SLOT ( moveIncidence( Incidence * ) ) ); | 578 | this, SLOT ( moveIncidence( Incidence * ) ) ); |
579 | connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), | 579 | connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), |
580 | this, SLOT ( beamIncidence( Incidence * ) ) ); | 580 | this, SLOT ( beamIncidence( Incidence * ) ) ); |
581 | 581 | ||
582 | connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), | 582 | connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), |
583 | this, SLOT ( todo_unsub( Todo * ) ) ); | 583 | this, SLOT ( todo_unsub( Todo * ) ) ); |
584 | 584 | ||
585 | connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), | 585 | connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), |
586 | this, SLOT ( todo_resub( Todo *,Todo * ) ) ); | 586 | this, SLOT ( todo_resub( Todo *,Todo * ) ) ); |
587 | connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, | 587 | connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, |
588 | SLOT( updateTodo( Todo *, int ) ) ); | 588 | SLOT( updateTodo( Todo *, int ) ) ); |
589 | connect( this, SIGNAL( todoModified( Todo *, int )), this, | 589 | connect( this, SIGNAL( todoModified( Todo *, int )), this, |
590 | SLOT( changeTodoDisplay( Todo *, int ) ) ); | 590 | SLOT( changeTodoDisplay( Todo *, int ) ) ); |
591 | 591 | ||
592 | 592 | ||
593 | connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); | 593 | connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); |
594 | connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); | 594 | connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); |
595 | connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); | 595 | connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); |
596 | connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); | 596 | connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); |
597 | 597 | ||
598 | 598 | ||
599 | 599 | ||
600 | 600 | ||
601 | 601 | ||
602 | connect(QApplication::clipboard(),SIGNAL(dataChanged()), | 602 | connect(QApplication::clipboard(),SIGNAL(dataChanged()), |
603 | SLOT(checkClipboard())); | 603 | SLOT(checkClipboard())); |
604 | connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), | 604 | connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), |
605 | SLOT( processTodoListSelection( Incidence * ) ) ); | 605 | SLOT( processTodoListSelection( Incidence * ) ) ); |
606 | connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); | 606 | connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); |
607 | 607 | ||
608 | // kdDebug() << "CalendarView::CalendarView() done" << endl; | 608 | // kdDebug() << "CalendarView::CalendarView() done" << endl; |
609 | 609 | ||
610 | mDateFrame = new QVBox(0,0,WType_Popup); | 610 | mDateFrame = new QVBox(0,0,WType_Popup); |
611 | //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); | 611 | //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); |
612 | mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); | 612 | mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); |
613 | mDateFrame->setLineWidth(3); | 613 | mDateFrame->setLineWidth(3); |
614 | mDateFrame->hide(); | 614 | mDateFrame->hide(); |
615 | mDateFrame->setCaption( i18n( "Pick a date to display")); | 615 | mDateFrame->setCaption( i18n( "Pick a date to display")); |
616 | mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); | 616 | mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); |
617 | 617 | ||
618 | connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); | 618 | connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); |
619 | 619 | ||
620 | mEventEditor = mDialogManager->getEventEditor(); | 620 | mEventEditor = mDialogManager->getEventEditor(); |
621 | mTodoEditor = mDialogManager->getTodoEditor(); | 621 | mTodoEditor = mDialogManager->getTodoEditor(); |
622 | 622 | ||
623 | mFlagEditDescription = false; | 623 | mFlagEditDescription = false; |
624 | 624 | ||
625 | mSuspendTimer = new QTimer( this ); | 625 | mSuspendTimer = new QTimer( this ); |
626 | mAlarmTimer = new QTimer( this ); | 626 | mAlarmTimer = new QTimer( this ); |
627 | mRecheckAlarmTimer = new QTimer( this ); | 627 | mRecheckAlarmTimer = new QTimer( this ); |
628 | connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); | 628 | connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); |
629 | connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); | 629 | connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); |
630 | connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); | 630 | connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); |
631 | mAlarmDialog = new AlarmDialog( this ); | 631 | mAlarmDialog = new AlarmDialog( this ); |
632 | connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); | 632 | connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); |
633 | mAlarmDialog->setServerNotification( false ); | 633 | mAlarmDialog->setServerNotification( false ); |
634 | mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); | 634 | mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); |
635 | 635 | ||
636 | 636 | ||
637 | #ifndef DESKTOP_VERSION | 637 | #ifndef DESKTOP_VERSION |
638 | //US listen for arriving address resultsets | 638 | //US listen for arriving address resultsets |
639 | connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), | 639 | connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), |
640 | this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); | 640 | this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); |
641 | #endif | 641 | #endif |
642 | mDateNavigator->setCalendar( mCalendar ); | 642 | mDateNavigator->setCalendar( mCalendar ); |
643 | } | 643 | } |
644 | 644 | ||
645 | 645 | ||
646 | CalendarView::~CalendarView() | 646 | CalendarView::~CalendarView() |
647 | { | 647 | { |
648 | // kdDebug() << "~CalendarView()" << endl; | 648 | // kdDebug() << "~CalendarView()" << endl; |
649 | //qDebug("CalendarView::~CalendarView() "); | 649 | //qDebug("CalendarView::~CalendarView() "); |
650 | delete mDialogManager; | 650 | delete mDialogManager; |
651 | delete mViewManager; | 651 | delete mViewManager; |
652 | delete mStorage; | 652 | delete mStorage; |
653 | delete mDateFrame ; | 653 | delete mDateFrame ; |
654 | delete mEventViewerDialog; | 654 | delete mEventViewerDialog; |
655 | //kdDebug() << "~CalendarView() done" << endl; | 655 | //kdDebug() << "~CalendarView() done" << endl; |
656 | } | 656 | } |
657 | void CalendarView::nextConflict( bool all, bool allday ) | 657 | void CalendarView::nextConflict( bool all, bool allday ) |
658 | { | 658 | { |
659 | QDate start = mNavigator->selectedDates().first().addDays(1); | 659 | |
660 | QPtrList<Event> testlist = mCalendar->events(); | ||
661 | Event * test = testlist.first(); | ||
662 | while ( test ) { | ||
663 | test->setTagged( false ); | ||
664 | } | ||
665 | QDateTime startDT = QDateTime (mNavigator->selectedDates().first().addDays(1), QTime ( 0,0,0)); | ||
666 | QDateTime conflict; | ||
667 | QDateTime retVal; | ||
668 | bool found = false; | ||
669 | Event * cE = 0; | ||
670 | QPtrList<Event> testlist2 = testlist; | ||
671 | while ( test ) { | ||
672 | Event * test2 = testlist2.first(); | ||
673 | while ( test2 ) { | ||
674 | if ( !test2->isTagged() ) { | ||
675 | if ( test->isOverlapping ( test2, &retVal, true ) ) { | ||
676 | if ( ! found ) { | ||
677 | if ( retVal >= startDT ) { | ||
678 | conflict = retVal; | ||
679 | cE = test; | ||
680 | found = true; | ||
681 | } | ||
682 | } else { | ||
683 | if ( retVal >= startDT && retVal < conflict ) { | ||
684 | conflict = retVal; | ||
685 | cE = test; | ||
686 | } | ||
687 | } | ||
688 | } | ||
689 | } | ||
690 | test2 = testlist2.next(); | ||
691 | } | ||
692 | test->setTagged( true ); | ||
693 | test = testlist.next(); | ||
694 | } | ||
695 | if ( found ) { | ||
696 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
697 | mViewManager->showDayView(); | ||
698 | mNavigator->slotDaySelect( conflict.date() ); | ||
699 | int hour = conflict.time().hour(); | ||
700 | mViewManager->agendaView()->setStartHour( hour ); | ||
701 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); | ||
702 | return; | ||
703 | } | ||
704 | |||
705 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); | ||
706 | qDebug("No conflict found "); | ||
707 | return; | ||
708 | |||
709 | |||
710 | |||
711 | |||
712 | |||
713 | #if 0 | ||
714 | |||
715 | |||
660 | QDate end = start.addDays( 365*2); | 716 | QDate end = start.addDays( 365*2); |
661 | while ( start < end ) { | 717 | while ( start < end ) { |
662 | QPtrList<Event> eventList = calendar()->events( start ); | 718 | QPtrList<Event> eventList = calendar()->events( start ); |
663 | Event * ev = eventList.first(); | 719 | Event * ev = eventList.first(); |
664 | QPtrList<Event> test = eventList; | 720 | QPtrList<Event> test = eventList; |
665 | while ( ev ) { | 721 | while ( ev ) { |
666 | //qDebug("found %d on %s ", eventList.count(), start.toString().latin1()); | 722 | //qDebug("found %d on %s ", eventList.count(), start.toString().latin1()); |
667 | Event * t_ev = test.first(); | 723 | Event * t_ev = test.first(); |
668 | QDateTime es = ev->dtStart(); | 724 | QDateTime es = ev->dtStart(); |
669 | QDateTime ee = ev->dtEnd(); | 725 | QDateTime ee = ev->dtEnd(); |
670 | if ( ev->doesFloat() ) | 726 | if ( ev->doesFloat() ) |
671 | ee = ee.addDays( 1 ); | 727 | ee = ee.addDays( 1 ); |
672 | if ( ! all ) { | 728 | if ( ! all ) { |
673 | if ( ev->doesFloat() != allday ) | 729 | if ( ev->doesFloat() != allday ) |
674 | t_ev = 0; | 730 | t_ev = 0; |
675 | } | 731 | } |
676 | while ( t_ev ) { | 732 | while ( t_ev ) { |
677 | bool skip = false; | 733 | bool skip = false; |
678 | if ( ! all ) { | 734 | if ( ! all ) { |
679 | if ( t_ev->doesFloat() != allday ) | 735 | if ( t_ev->doesFloat() != allday ) |
680 | skip = true; | 736 | skip = true; |
681 | } | 737 | } |
682 | if ( !skip && ev != t_ev ) { | 738 | if ( !skip && ev != t_ev ) { |
683 | QDateTime ets = t_ev->dtStart(); | 739 | QDateTime ets = t_ev->dtStart(); |
684 | QDateTime ete = t_ev->dtEnd(); | 740 | QDateTime ete = t_ev->dtEnd(); |
685 | if ( t_ev->doesFloat() ) | 741 | if ( t_ev->doesFloat() ) |
686 | ete = ete.addDays( 1 ); | 742 | ete = ete.addDays( 1 ); |
687 | //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() ); | 743 | //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() ); |
688 | if ( es < ete && ets < ee ) { | 744 | if ( es < ete && ets < ee ) { |
689 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | 745 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) |
690 | mViewManager->showDayView(); | 746 | mViewManager->showDayView(); |
691 | mNavigator->slotDaySelect( start ); | 747 | mNavigator->slotDaySelect( start ); |
692 | int hour = es.time().hour(); | 748 | int hour = es.time().hour(); |
693 | if ( ets > es ) | 749 | if ( ets > es ) |
694 | hour = ets.time().hour(); | 750 | hour = ets.time().hour(); |
695 | mViewManager->agendaView()->setStartHour( hour ); | 751 | mViewManager->agendaView()->setStartHour( hour ); |
696 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) ); | 752 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) ); |
697 | return; | 753 | return; |
698 | } | 754 | } |
699 | } | 755 | } |
700 | t_ev = test.next(); | 756 | t_ev = test.next(); |
701 | } | 757 | } |
702 | ev = eventList.next(); | 758 | ev = eventList.next(); |
703 | } | 759 | } |
704 | start = start.addDays( 1 ); | 760 | start = start.addDays( 1 ); |
705 | } | 761 | } |
706 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); | 762 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); |
707 | qDebug("No conflict found "); | 763 | qDebug("No conflict found "); |
764 | #endif | ||
708 | } | 765 | } |
709 | 766 | ||
710 | void CalendarView::conflictAll() | 767 | void CalendarView::conflictAll() |
711 | { | 768 | { |
712 | nextConflict ( true, true ); | 769 | nextConflict ( true, true ); |
713 | } | 770 | } |
714 | void CalendarView::conflictAllday() | 771 | void CalendarView::conflictAllday() |
715 | { | 772 | { |
716 | nextConflict ( false, true ); | 773 | nextConflict ( false, true ); |
717 | } | 774 | } |
718 | void CalendarView::conflictNotAll() | 775 | void CalendarView::conflictNotAll() |
719 | { | 776 | { |
720 | nextConflict ( false, false ); | 777 | nextConflict ( false, false ); |
721 | } | 778 | } |
722 | 779 | ||
723 | void CalendarView::setCalReadOnly( int id, bool readO ) | 780 | void CalendarView::setCalReadOnly( int id, bool readO ) |
724 | { | 781 | { |
725 | if ( readO ) { | 782 | if ( readO ) { |
726 | emit save(); | 783 | emit save(); |
727 | } | 784 | } |
728 | mCalendar->setReadOnly( id, readO ); | 785 | mCalendar->setReadOnly( id, readO ); |
729 | } | 786 | } |
730 | void CalendarView::setScrollBarStep(int val ) | 787 | void CalendarView::setScrollBarStep(int val ) |
731 | { | 788 | { |
732 | #ifdef DESKTOP_VERSION | 789 | #ifdef DESKTOP_VERSION |
733 | mDateScrollBar->setLineStep ( val ); | 790 | mDateScrollBar->setLineStep ( val ); |
734 | #endif | 791 | #endif |
735 | } | 792 | } |
736 | void CalendarView::scrollBarValue(int val ) | 793 | void CalendarView::scrollBarValue(int val ) |
737 | { | 794 | { |
738 | #ifdef DESKTOP_VERSION | 795 | #ifdef DESKTOP_VERSION |
739 | if ( QApplication::desktop()->width() < 800 ) return; | 796 | if ( QApplication::desktop()->width() < 800 ) return; |
740 | static bool block = false; | 797 | static bool block = false; |
741 | if ( block ) return; | 798 | if ( block ) return; |
742 | block = true; | 799 | block = true; |
743 | int count = mNavigator->selectedDates().count(); | 800 | int count = mNavigator->selectedDates().count(); |
744 | int day = mNavigator->selectedDates().first().dayOfYear(); | 801 | int day = mNavigator->selectedDates().first().dayOfYear(); |
745 | int stepdays = val; | 802 | int stepdays = val; |
746 | if ( mDateScrollBar->lineStep () <= count ) { | 803 | if ( mDateScrollBar->lineStep () <= count ) { |
747 | //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); | 804 | //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); |
748 | //qDebug("VAL %d ",val ); | 805 | //qDebug("VAL %d ",val ); |
749 | stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); | 806 | stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); |
750 | stepdays = day+stepdays; | 807 | stepdays = day+stepdays; |
751 | if ( stepdays < 0 ) stepdays = 0; | 808 | if ( stepdays < 0 ) stepdays = 0; |
752 | } | 809 | } |
753 | if ( stepdays == day ) { | 810 | if ( stepdays == day ) { |
754 | block = false; | 811 | block = false; |
755 | return; | 812 | return; |
756 | } | 813 | } |
757 | int year = mNavigator->selectedDates().first().year(); | 814 | int year = mNavigator->selectedDates().first().year(); |
758 | QDate d ( year,1,1 ); | 815 | QDate d ( year,1,1 ); |
759 | mNavigator->selectDates( d.addDays( stepdays-1) , count ); | 816 | mNavigator->selectDates( d.addDays( stepdays-1) , count ); |
760 | block = false; | 817 | block = false; |
761 | #endif | 818 | #endif |
762 | 819 | ||
763 | } | 820 | } |
764 | void CalendarView::updateView(const QDate &start, const QDate &end) | 821 | void CalendarView::updateView(const QDate &start, const QDate &end) |
765 | { | 822 | { |
766 | #ifdef DESKTOP_VERSION | 823 | #ifdef DESKTOP_VERSION |
767 | if ( ! mDateScrollBar->draggingSlider () ) { | 824 | if ( ! mDateScrollBar->draggingSlider () ) { |
768 | int dof = start.dayOfYear(); | 825 | int dof = start.dayOfYear(); |
769 | //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); | 826 | //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); |
770 | if ( dof != mDateScrollBar->value() ) { | 827 | if ( dof != mDateScrollBar->value() ) { |
771 | mDateScrollBar->blockSignals( true ); | 828 | mDateScrollBar->blockSignals( true ); |
772 | mDateScrollBar->setValue( start.dayOfYear()); | 829 | mDateScrollBar->setValue( start.dayOfYear()); |
773 | mDateScrollBar->blockSignals( false ); | 830 | mDateScrollBar->blockSignals( false ); |
774 | } | 831 | } |
775 | } | 832 | } |
776 | #endif | 833 | #endif |
777 | mTodoList->updateView(); | 834 | mTodoList->updateView(); |
778 | mViewManager->updateView(start, end); | 835 | mViewManager->updateView(start, end); |
779 | //mDateNavigator->updateView(); | 836 | //mDateNavigator->updateView(); |
780 | } | 837 | } |
781 | 838 | ||
782 | 839 | ||
783 | 840 | ||
784 | void CalendarView::checkFiles() | 841 | void CalendarView::checkFiles() |
785 | { | 842 | { |
786 | QString message; | 843 | QString message; |
787 | QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; | 844 | QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; |
788 | KopiCalendarFile * cal = calendars.first(); | 845 | KopiCalendarFile * cal = calendars.first(); |
789 | while ( cal ) { | 846 | while ( cal ) { |
790 | if ( cal->mErrorOnLoad ) { | 847 | if ( cal->mErrorOnLoad ) { |
791 | message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; | 848 | message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; |
792 | } | 849 | } |
793 | cal = calendars.next(); | 850 | cal = calendars.next(); |
794 | } | 851 | } |
795 | if ( !message.isEmpty() ) { | 852 | if ( !message.isEmpty() ) { |
796 | message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); | 853 | message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); |
797 | KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); | 854 | KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); |
798 | } | 855 | } |
799 | QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); | 856 | QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); |
800 | } | 857 | } |
801 | void CalendarView::checkAlarms() | 858 | void CalendarView::checkAlarms() |
802 | { | 859 | { |
803 | 860 | ||
804 | 861 | ||
805 | KConfig *config = KOGlobals::config(); | 862 | KConfig *config = KOGlobals::config(); |
806 | config->setGroup( "AppRun" ); | 863 | config->setGroup( "AppRun" ); |
807 | QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); | 864 | QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); |
808 | int daysto = dt.daysTo( QDate::currentDate() ); | 865 | int daysto = dt.daysTo( QDate::currentDate() ); |
809 | int days = config->readNumEntry( "LatestProgramStopDays" , daysto); | 866 | int days = config->readNumEntry( "LatestProgramStopDays" , daysto); |
810 | dt = dt.addDays( days ); | 867 | dt = dt.addDays( days ); |
811 | int secto = dt.secsTo( QDateTime::currentDateTime() ); | 868 | int secto = dt.secsTo( QDateTime::currentDateTime() ); |
812 | int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; | 869 | int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; |
813 | //qDebug("KO: Reading program stop %d ", secs); | 870 | //qDebug("KO: Reading program stop %d ", secs); |
814 | //secs -= ( 3600 * 24*3 ); // debug only | 871 | //secs -= ( 3600 * 24*3 ); // debug only |
815 | QDateTime latest = dt.addSecs ( secs ); | 872 | QDateTime latest = dt.addSecs ( secs ); |
816 | qDebug("KO: Last termination on %s ", latest.toString().latin1()); | 873 | qDebug("KO: Last termination on %s ", latest.toString().latin1()); |
817 | //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); | 874 | //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); |
818 | QPtrList<Incidence> el = mCalendar->rawIncidences(); | 875 | QPtrList<Incidence> el = mCalendar->rawIncidences(); |
819 | QPtrList<Incidence> al; | 876 | QPtrList<Incidence> al; |
820 | Incidence* inL = el.first(); | 877 | Incidence* inL = el.first(); |
821 | QDateTime cur = QDateTime::currentDateTime().addSecs(-59); | 878 | QDateTime cur = QDateTime::currentDateTime().addSecs(-59); |
822 | qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); | 879 | qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); |
823 | while ( inL ) { | 880 | while ( inL ) { |
824 | bool ok = false; | 881 | bool ok = false; |
825 | int offset = 0; | 882 | int offset = 0; |
826 | QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; | 883 | QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; |
827 | if ( ok ) { | 884 | if ( ok ) { |
828 | //qDebug("OK %s",next.toString().latin1()); | 885 | //qDebug("OK %s",next.toString().latin1()); |
829 | if ( next < cur ) { | 886 | if ( next < cur ) { |
830 | al.append( inL ); | 887 | al.append( inL ); |
831 | //qDebug("found missed alarm: %s ", inL->summary().latin1() ); | 888 | //qDebug("found missed alarm: %s ", inL->summary().latin1() ); |
832 | } | 889 | } |
833 | } | 890 | } |
834 | inL = el.next(); | 891 | inL = el.next(); |
835 | } | 892 | } |
@@ -2570,354 +2627,334 @@ void CalendarView::readFilterSettings(KConfig *config) | |||
2570 | } | 2627 | } |
2571 | mFilterView->updateFilters(); | 2628 | mFilterView->updateFilters(); |
2572 | config->setGroup("FilterView"); | 2629 | config->setGroup("FilterView"); |
2573 | 2630 | ||
2574 | mFilterView->blockSignals(true); | 2631 | mFilterView->blockSignals(true); |
2575 | mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); | 2632 | mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); |
2576 | mFilterView->setSelectedFilter(config->readEntry("Current Filter")); | 2633 | mFilterView->setSelectedFilter(config->readEntry("Current Filter")); |
2577 | mFilterView->blockSignals(false); | 2634 | mFilterView->blockSignals(false); |
2578 | // We do it manually to avoid it being done twice by the above calls | 2635 | // We do it manually to avoid it being done twice by the above calls |
2579 | updateFilter(); | 2636 | updateFilter(); |
2580 | } | 2637 | } |
2581 | 2638 | ||
2582 | void CalendarView::writeFilterSettings(KConfig *config) | 2639 | void CalendarView::writeFilterSettings(KConfig *config) |
2583 | { | 2640 | { |
2584 | // kdDebug() << "CalendarView::writeFilterSettings()" << endl; | 2641 | // kdDebug() << "CalendarView::writeFilterSettings()" << endl; |
2585 | 2642 | ||
2586 | QStringList filterList; | 2643 | QStringList filterList; |
2587 | 2644 | ||
2588 | CalFilter *filter = mFilters.first(); | 2645 | CalFilter *filter = mFilters.first(); |
2589 | while(filter) { | 2646 | while(filter) { |
2590 | // kdDebug() << " fn: " << filter->name() << endl; | 2647 | // kdDebug() << " fn: " << filter->name() << endl; |
2591 | filterList << filter->name(); | 2648 | filterList << filter->name(); |
2592 | config->setGroup("Filter_" + filter->name().utf8()); | 2649 | config->setGroup("Filter_" + filter->name().utf8()); |
2593 | config->writeEntry("Criteria",filter->criteria()); | 2650 | config->writeEntry("Criteria",filter->criteria()); |
2594 | config->writeEntry("CategoryList",filter->categoryList()); | 2651 | config->writeEntry("CategoryList",filter->categoryList()); |
2595 | filter = mFilters.next(); | 2652 | filter = mFilters.next(); |
2596 | } | 2653 | } |
2597 | config->setGroup("General"); | 2654 | config->setGroup("General"); |
2598 | config->writeEntry("CalendarFilters",filterList); | 2655 | config->writeEntry("CalendarFilters",filterList); |
2599 | 2656 | ||
2600 | config->setGroup("FilterView"); | 2657 | config->setGroup("FilterView"); |
2601 | config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); | 2658 | config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); |
2602 | config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); | 2659 | config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); |
2603 | } | 2660 | } |
2604 | 2661 | ||
2605 | 2662 | ||
2606 | void CalendarView::goToday() | 2663 | void CalendarView::goToday() |
2607 | { | 2664 | { |
2608 | if ( mViewManager->currentView()->isMonthView() ) | 2665 | if ( mViewManager->currentView()->isMonthView() ) |
2609 | mNavigator->selectTodayMonth(); | 2666 | mNavigator->selectTodayMonth(); |
2610 | else | 2667 | else |
2611 | mNavigator->selectToday(); | 2668 | mNavigator->selectToday(); |
2612 | } | 2669 | } |
2613 | 2670 | ||
2614 | void CalendarView::goNext() | 2671 | void CalendarView::goNext() |
2615 | { | 2672 | { |
2616 | mNavigator->selectNext(); | 2673 | mNavigator->selectNext(); |
2617 | } | 2674 | } |
2618 | 2675 | ||
2619 | void CalendarView::goPrevious() | 2676 | void CalendarView::goPrevious() |
2620 | { | 2677 | { |
2621 | mNavigator->selectPrevious(); | 2678 | mNavigator->selectPrevious(); |
2622 | } | 2679 | } |
2623 | void CalendarView::goNextMonth() | 2680 | void CalendarView::goNextMonth() |
2624 | { | 2681 | { |
2625 | mNavigator->selectNextMonth(); | 2682 | mNavigator->selectNextMonth(); |
2626 | } | 2683 | } |
2627 | 2684 | ||
2628 | void CalendarView::goPreviousMonth() | 2685 | void CalendarView::goPreviousMonth() |
2629 | { | 2686 | { |
2630 | mNavigator->selectPreviousMonth(); | 2687 | mNavigator->selectPreviousMonth(); |
2631 | } | 2688 | } |
2632 | 2689 | ||
2633 | void CalendarView::updateConfig() | 2690 | void CalendarView::updateConfig() |
2634 | { | 2691 | { |
2635 | if ( KOPrefs::instance()->mUseAppColors ) | 2692 | if ( KOPrefs::instance()->mUseAppColors ) |
2636 | QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); | 2693 | QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); |
2637 | emit configChanged(); | 2694 | emit configChanged(); |
2638 | mTodoList->updateConfig(); | 2695 | mTodoList->updateConfig(); |
2639 | // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); | 2696 | // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); |
2640 | mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); | 2697 | mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); |
2641 | // To make the "fill window" configurations work | 2698 | // To make the "fill window" configurations work |
2642 | //mViewManager->raiseCurrentView(); | 2699 | //mViewManager->raiseCurrentView(); |
2643 | } | 2700 | } |
2644 | 2701 | ||
2645 | 2702 | ||
2646 | void CalendarView::eventChanged(Event *event) | 2703 | void CalendarView::eventChanged(Event *event) |
2647 | { | 2704 | { |
2648 | changeEventDisplay(event,KOGlobals::EVENTEDITED); | 2705 | changeEventDisplay(event,KOGlobals::EVENTEDITED); |
2649 | //updateUnmanagedViews(); | 2706 | //updateUnmanagedViews(); |
2650 | } | 2707 | } |
2651 | 2708 | ||
2652 | void CalendarView::eventAdded(Event *event) | 2709 | void CalendarView::eventAdded(Event *event) |
2653 | { | 2710 | { |
2654 | changeEventDisplay(event,KOGlobals::EVENTADDED); | 2711 | changeEventDisplay(event,KOGlobals::EVENTADDED); |
2655 | } | 2712 | } |
2656 | 2713 | ||
2657 | void CalendarView::eventToBeDeleted(Event *) | 2714 | void CalendarView::eventToBeDeleted(Event *) |
2658 | { | 2715 | { |
2659 | kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; | 2716 | kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; |
2660 | } | 2717 | } |
2661 | 2718 | ||
2662 | void CalendarView::eventDeleted() | 2719 | void CalendarView::eventDeleted() |
2663 | { | 2720 | { |
2664 | changeEventDisplay(0,KOGlobals::EVENTDELETED); | 2721 | changeEventDisplay(0,KOGlobals::EVENTDELETED); |
2665 | } | 2722 | } |
2666 | void CalendarView::changeTodoDisplay(Todo *which, int action) | 2723 | void CalendarView::changeTodoDisplay(Todo *which, int action) |
2667 | { | 2724 | { |
2668 | changeIncidenceDisplay((Incidence *)which, action); | 2725 | changeIncidenceDisplay((Incidence *)which, action); |
2669 | mDateNavigator->updateView(); //LR | 2726 | mDateNavigator->updateView(); //LR |
2670 | //mDialogManager->updateSearchDialog(); | 2727 | //mDialogManager->updateSearchDialog(); |
2671 | 2728 | ||
2672 | if (which) { | 2729 | if (which) { |
2673 | mViewManager->updateWNview(); | 2730 | mViewManager->updateWNview(); |
2674 | //mTodoList->updateView(); | 2731 | //mTodoList->updateView(); |
2675 | } | 2732 | } |
2676 | 2733 | ||
2677 | } | 2734 | } |
2678 | 2735 | ||
2679 | void CalendarView::changeIncidenceDisplay(Incidence *which, int action) | 2736 | void CalendarView::changeIncidenceDisplay(Incidence *which, int action) |
2680 | { | 2737 | { |
2681 | updateUnmanagedViews(); | 2738 | updateUnmanagedViews(); |
2682 | //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); | 2739 | //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); |
2683 | if ( action == KOGlobals::EVENTDELETED ) { //delete | 2740 | if ( action == KOGlobals::EVENTDELETED ) { //delete |
2684 | mCalendar->checkAlarmForIncidence( 0, true ); | 2741 | mCalendar->checkAlarmForIncidence( 0, true ); |
2685 | if ( mEventViewerDialog ) | 2742 | if ( mEventViewerDialog ) |
2686 | mEventViewerDialog->hide(); | 2743 | mEventViewerDialog->hide(); |
2687 | } | 2744 | } |
2688 | else | 2745 | else |
2689 | mCalendar->checkAlarmForIncidence( which , false ); | 2746 | mCalendar->checkAlarmForIncidence( which , false ); |
2690 | } | 2747 | } |
2691 | 2748 | ||
2692 | // most of the changeEventDisplays() right now just call the view's | 2749 | // most of the changeEventDisplays() right now just call the view's |
2693 | // total update mode, but they SHOULD be recoded to be more refresh-efficient. | 2750 | // total update mode, but they SHOULD be recoded to be more refresh-efficient. |
2694 | void CalendarView::changeEventDisplay(Event *which, int action) | 2751 | void CalendarView::changeEventDisplay(Event *which, int action) |
2695 | { | 2752 | { |
2696 | // kdDebug() << "CalendarView::changeEventDisplay" << endl; | 2753 | // kdDebug() << "CalendarView::changeEventDisplay" << endl; |
2697 | changeIncidenceDisplay((Incidence *)which, action); | 2754 | changeIncidenceDisplay((Incidence *)which, action); |
2698 | |||
2699 | |||
2700 | static bool clearallviews = false; | 2755 | static bool clearallviews = false; |
2701 | if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { | 2756 | if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { |
2702 | if ( clearallviews ) { | 2757 | if ( clearallviews ) { |
2703 | clearAllViews(); | 2758 | clearAllViews(); |
2704 | clearallviews = false; | 2759 | clearallviews = false; |
2705 | } | 2760 | } |
2706 | return; | 2761 | return; |
2707 | } | 2762 | } |
2708 | clearallviews = true; | 2763 | clearallviews = true; |
2709 | |||
2710 | |||
2711 | |||
2712 | mDateNavigator->updateView(); | 2764 | mDateNavigator->updateView(); |
2713 | //mDialogManager->updateSearchDialog(); | 2765 | //mDialogManager->updateSearchDialog(); |
2714 | |||
2715 | if (which) { | 2766 | if (which) { |
2716 | // If there is an event view visible update the display | 2767 | // If there is an event view visible update the display |
2717 | mViewManager->currentView()->changeEventDisplay(which,action); | 2768 | mViewManager->currentView()->changeEventDisplay(which,action); |
2718 | // TODO: check, if update needed | 2769 | // TODO: check, if update needed |
2719 | // if (which->getTodoStatus()) { | 2770 | // if (which->getTodoStatus()) { |
2720 | mTodoList->updateView(); | 2771 | mTodoList->updateView(); |
2721 | if ( action != KOGlobals::EVENTDELETED ) { | 2772 | if ( action != KOGlobals::EVENTDELETED ) { |
2722 | mConflictingEvent = which ; | 2773 | mConflictingEvent = which ; |
2723 | QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) ); | 2774 | QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) ); |
2724 | } | 2775 | } |
2725 | // } | 2776 | // } |
2726 | } else { | 2777 | } else { |
2727 | mViewManager->currentView()->updateView(); | 2778 | mViewManager->currentView()->updateView(); |
2728 | } | 2779 | } |
2729 | } | 2780 | } |
2730 | void CalendarView::checkConflictForEvent() | 2781 | void CalendarView::checkConflictForEvent() |
2731 | { | 2782 | { |
2732 | 2783 | ||
2733 | if (!KOPrefs::instance()->mConfirm) | 2784 | if (!KOPrefs::instance()->mConfirm) |
2734 | return; | 2785 | return; |
2735 | if ( ! mConflictingEvent ) return; | 2786 | if ( ! mConflictingEvent ) return; |
2736 | if ( mConflictingEvent->doesFloat() ) { | 2787 | if ( mConflictingEvent->doesFloat() ) { |
2737 | mConflictingEvent = 0; | 2788 | mConflictingEvent = 0; |
2738 | return; | 2789 | return; |
2739 | } | 2790 | } |
2740 | bool all = false; | 2791 | QPtrList<Event> testlist = mCalendar->events(); |
2741 | bool allday = false; | 2792 | Event * test = testlist.first(); |
2742 | Event * ev = mConflictingEvent; | 2793 | QDateTime conflict; |
2743 | mConflictingEvent = 0; | 2794 | QDateTime retVal; |
2744 | QDate start = ev->dtStart().date(); | 2795 | bool found = false; |
2745 | QDate end = ev->dtEnd().date().addDays(1); | 2796 | Event * cE = 0; |
2746 | while ( start < end ) { | 2797 | while ( test ) { |
2747 | QPtrList<Event> test = calendar()->events( start ); | 2798 | if ( !test->doesFloat() ) { |
2748 | //qDebug("found %d on %s ", eventList.count(), start.toString().latin1()); | 2799 | if ( mConflictingEvent->isOverlapping ( test, &retVal, true ) ) { |
2749 | Event * t_ev = test.first(); | 2800 | if ( ! found ) { |
2750 | QDateTime es = ev->dtStart(); | 2801 | conflict = retVal; |
2751 | QDateTime ee = ev->dtEnd(); | 2802 | cE = test; |
2752 | if ( ev->doesFloat() ) | 2803 | } else { |
2753 | ee = ee.addDays( 1 ); | 2804 | if ( retVal < conflict ) { |
2754 | if ( ! all ) { | 2805 | conflict = retVal; |
2755 | if ( ev->doesFloat() != allday ) | 2806 | cE = test; |
2756 | t_ev = 0; | 2807 | } |
2757 | } | ||
2758 | while ( t_ev ) { | ||
2759 | bool skip = false; | ||
2760 | if ( ! all ) { | ||
2761 | if ( t_ev->doesFloat() != allday ) | ||
2762 | skip = true; | ||
2763 | } | ||
2764 | if ( !skip && ev != t_ev ) { | ||
2765 | QDateTime ets = t_ev->dtStart(); | ||
2766 | QDateTime ete = t_ev->dtEnd(); | ||
2767 | if ( t_ev->doesFloat() ) | ||
2768 | ete = ete.addDays( 1 ); | ||
2769 | //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() ); | ||
2770 | if ( es < ete && ets < ee ) { | ||
2771 | QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( ev->summary(),0 ) ).arg( KGlobal::formatMessage ( t_ev->summary(),0 )).arg(KGlobal::locale()->formatDate(start) ) ; | ||
2772 | qApp->processEvents(); | ||
2773 | int km = KMessageBox::warningContinueCancel(this,mess, | ||
2774 | i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); | ||
2775 | if ( km != KMessageBox::Continue ) | ||
2776 | return; | ||
2777 | |||
2778 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
2779 | mViewManager->showDayView(); | ||
2780 | mNavigator->slotDaySelect( start ); | ||
2781 | int hour = es.time().hour(); | ||
2782 | if ( ets > es ) | ||
2783 | hour = ets.time().hour(); | ||
2784 | mViewManager->agendaView()->setStartHour( hour ); | ||
2785 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) ); | ||
2786 | return; | ||
2787 | } | 2808 | } |
2809 | found = true; | ||
2788 | } | 2810 | } |
2789 | t_ev = test.next(); | ||
2790 | } | 2811 | } |
2791 | start = start.addDays( 1 ); | 2812 | test = testlist.next(); |
2792 | } | 2813 | } |
2793 | qDebug("No conflict found "); | 2814 | if ( found ) { |
2794 | 2815 | QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( mConflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; | |
2816 | qApp->processEvents(); | ||
2817 | int km = KMessageBox::warningContinueCancel(this,mess, | ||
2818 | i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); | ||
2819 | if ( km != KMessageBox::Continue ) | ||
2820 | return; | ||
2795 | 2821 | ||
2822 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
2823 | mViewManager->showDayView(); | ||
2824 | mNavigator->slotDaySelect( conflict.date() ); | ||
2825 | int hour = conflict.time().hour(); | ||
2826 | mViewManager->agendaView()->setStartHour( hour ); | ||
2827 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); | ||
2828 | return; | ||
2829 | } | ||
2830 | |||
2831 | return; | ||
2832 | |||
2796 | } | 2833 | } |
2797 | 2834 | ||
2798 | void CalendarView::updateTodoViews() | 2835 | void CalendarView::updateTodoViews() |
2799 | { | 2836 | { |
2800 | mTodoList->updateView(); | 2837 | mTodoList->updateView(); |
2801 | mViewManager->currentView()->updateView(); | 2838 | mViewManager->currentView()->updateView(); |
2802 | 2839 | ||
2803 | } | 2840 | } |
2804 | 2841 | ||
2805 | 2842 | ||
2806 | 2843 | ||
2807 | void CalendarView::clearAllViews() | 2844 | void CalendarView::clearAllViews() |
2808 | { | 2845 | { |
2809 | mTodoList->clearList(); | 2846 | mTodoList->clearList(); |
2810 | mViewManager->clearAllViews(); | 2847 | mViewManager->clearAllViews(); |
2811 | SearchDialog * sd = mDialogManager->getSearchDialog(); | 2848 | SearchDialog * sd = mDialogManager->getSearchDialog(); |
2812 | if ( sd ) { | 2849 | if ( sd ) { |
2813 | KOListView* kol = sd->listview(); | 2850 | KOListView* kol = sd->listview(); |
2814 | if ( kol ) | 2851 | if ( kol ) |
2815 | kol->clearList(); | 2852 | kol->clearList(); |
2816 | } | 2853 | } |
2817 | } | 2854 | } |
2818 | void CalendarView::updateView() | 2855 | void CalendarView::updateView() |
2819 | { | 2856 | { |
2820 | static bool clearallviews = false; | 2857 | static bool clearallviews = false; |
2821 | if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { | 2858 | if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { |
2822 | if ( clearallviews ) { | 2859 | if ( clearallviews ) { |
2823 | clearAllViews(); | 2860 | clearAllViews(); |
2824 | clearallviews = false; | 2861 | clearallviews = false; |
2825 | } | 2862 | } |
2826 | return; | 2863 | return; |
2827 | } | 2864 | } |
2828 | clearallviews = true; | 2865 | clearallviews = true; |
2829 | DateList tmpList = mNavigator->selectedDates(); | 2866 | DateList tmpList = mNavigator->selectedDates(); |
2830 | 2867 | ||
2831 | if ( KOPrefs::instance()->mHideNonStartedTodos ) | 2868 | if ( KOPrefs::instance()->mHideNonStartedTodos ) |
2832 | mTodoList->updateView(); | 2869 | mTodoList->updateView(); |
2833 | // We assume that the navigator only selects consecutive days. | 2870 | // We assume that the navigator only selects consecutive days. |
2834 | updateView( tmpList.first(), tmpList.last() ); | 2871 | updateView( tmpList.first(), tmpList.last() ); |
2835 | } | 2872 | } |
2836 | 2873 | ||
2837 | void CalendarView::updateUnmanagedViews() | 2874 | void CalendarView::updateUnmanagedViews() |
2838 | { | 2875 | { |
2839 | mDateNavigator->updateDayMatrix(); | 2876 | mDateNavigator->updateDayMatrix(); |
2840 | } | 2877 | } |
2841 | 2878 | ||
2842 | int CalendarView::msgItemDelete(const QString name) | 2879 | int CalendarView::msgItemDelete(const QString name) |
2843 | { | 2880 | { |
2844 | return KMessageBox::warningContinueCancel(this,name +"\n\n"+ | 2881 | return KMessageBox::warningContinueCancel(this,name +"\n\n"+ |
2845 | i18n("This item will be\npermanently deleted."), | 2882 | i18n("This item will be\npermanently deleted."), |
2846 | i18n("KO/Pi Confirmation"),i18n("Delete")); | 2883 | i18n("KO/Pi Confirmation"),i18n("Delete")); |
2847 | } | 2884 | } |
2848 | 2885 | ||
2849 | 2886 | ||
2850 | void CalendarView::edit_cut() | 2887 | void CalendarView::edit_cut() |
2851 | { | 2888 | { |
2852 | Event *anEvent=0; | 2889 | Event *anEvent=0; |
2853 | 2890 | ||
2854 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2891 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2855 | 2892 | ||
2856 | if (mViewManager->currentView()->isEventView()) { | 2893 | if (mViewManager->currentView()->isEventView()) { |
2857 | if ( incidence && incidence->typeID() == eventID ) { | 2894 | if ( incidence && incidence->typeID() == eventID ) { |
2858 | anEvent = static_cast<Event *>(incidence); | 2895 | anEvent = static_cast<Event *>(incidence); |
2859 | } | 2896 | } |
2860 | } | 2897 | } |
2861 | 2898 | ||
2862 | if (!anEvent) { | 2899 | if (!anEvent) { |
2863 | KNotifyClient::beep(); | 2900 | KNotifyClient::beep(); |
2864 | return; | 2901 | return; |
2865 | } | 2902 | } |
2866 | DndFactory factory( mCalendar ); | 2903 | DndFactory factory( mCalendar ); |
2867 | factory.cutIncidence(anEvent); | 2904 | factory.cutIncidence(anEvent); |
2868 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); | 2905 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); |
2869 | } | 2906 | } |
2870 | 2907 | ||
2871 | void CalendarView::edit_copy() | 2908 | void CalendarView::edit_copy() |
2872 | { | 2909 | { |
2873 | Event *anEvent=0; | 2910 | Event *anEvent=0; |
2874 | 2911 | ||
2875 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2912 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2876 | 2913 | ||
2877 | if (mViewManager->currentView()->isEventView()) { | 2914 | if (mViewManager->currentView()->isEventView()) { |
2878 | if ( incidence && incidence->typeID() == eventID ) { | 2915 | if ( incidence && incidence->typeID() == eventID ) { |
2879 | anEvent = static_cast<Event *>(incidence); | 2916 | anEvent = static_cast<Event *>(incidence); |
2880 | } | 2917 | } |
2881 | } | 2918 | } |
2882 | 2919 | ||
2883 | if (!anEvent) { | 2920 | if (!anEvent) { |
2884 | KNotifyClient::beep(); | 2921 | KNotifyClient::beep(); |
2885 | return; | 2922 | return; |
2886 | } | 2923 | } |
2887 | DndFactory factory( mCalendar ); | 2924 | DndFactory factory( mCalendar ); |
2888 | factory.copyIncidence(anEvent); | 2925 | factory.copyIncidence(anEvent); |
2889 | } | 2926 | } |
2890 | 2927 | ||
2891 | void CalendarView::edit_paste() | 2928 | void CalendarView::edit_paste() |
2892 | { | 2929 | { |
2893 | QDate date = mNavigator->selectedDates().first(); | 2930 | QDate date = mNavigator->selectedDates().first(); |
2894 | 2931 | ||
2895 | DndFactory factory( mCalendar ); | 2932 | DndFactory factory( mCalendar ); |
2896 | Event *pastedEvent = (Event *)factory.pasteIncidence( date ); | 2933 | Event *pastedEvent = (Event *)factory.pasteIncidence( date ); |
2897 | 2934 | ||
2898 | changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); | 2935 | changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); |
2899 | } | 2936 | } |
2900 | void CalendarView::edit_global_options() | 2937 | void CalendarView::edit_global_options() |
2901 | { | 2938 | { |
2902 | QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; | 2939 | QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; |
2903 | emit save(); | 2940 | emit save(); |
2904 | emit saveStopTimer(); | 2941 | emit saveStopTimer(); |
2905 | mDialogManager->showGlobalOptionsDialog(); | 2942 | mDialogManager->showGlobalOptionsDialog(); |
2906 | if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { | 2943 | if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { |
2907 | emit saveStopTimer(); | 2944 | emit saveStopTimer(); |
2908 | if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), | 2945 | if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), |
2909 | i18n("Timezone settings"),i18n("Reload"))) { | 2946 | i18n("Timezone settings"),i18n("Reload"))) { |
2910 | qDebug("KO: TZ reload cancelled "); | 2947 | qDebug("KO: TZ reload cancelled "); |
2911 | mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); | 2948 | mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); |
2912 | return; | 2949 | return; |
2913 | } | 2950 | } |
2914 | qDebug("KO: Timezone change "); | 2951 | qDebug("KO: Timezone change "); |
2915 | loadCalendars(); | 2952 | loadCalendars(); |
2916 | setModified(true); | 2953 | setModified(true); |
2917 | } | 2954 | } |
2918 | else | 2955 | else |
2919 | qDebug("KO: No tz change "); | 2956 | qDebug("KO: No tz change "); |
2920 | } | 2957 | } |
2921 | void CalendarView::edit_options() | 2958 | void CalendarView::edit_options() |
2922 | { | 2959 | { |
2923 | mDialogManager->showOptionsDialog(); | 2960 | mDialogManager->showOptionsDialog(); |
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index 2c017e1..c2ad886 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -277,256 +277,260 @@ void KOTodoListView::contentsDropEvent(QDropEvent *e) | |||
277 | to = to->relatedTo(); | 277 | to = to->relatedTo(); |
278 | } | 278 | } |
279 | internalDrop = true; | 279 | internalDrop = true; |
280 | if ( destinationEvent ) | 280 | if ( destinationEvent ) |
281 | reparentTodoSignal( destinationEvent, existingTodo ); | 281 | reparentTodoSignal( destinationEvent, existingTodo ); |
282 | else | 282 | else |
283 | unparentTodoSignal(existingTodo); | 283 | unparentTodoSignal(existingTodo); |
284 | delete todo; | 284 | delete todo; |
285 | } else { | 285 | } else { |
286 | mCalendar->addTodo(todo); | 286 | mCalendar->addTodo(todo); |
287 | emit todoDropped(todo, KOGlobals::EVENTADDED); | 287 | emit todoDropped(todo, KOGlobals::EVENTADDED); |
288 | if ( destinationEvent ) | 288 | if ( destinationEvent ) |
289 | reparentTodoSignal( destinationEvent, todo ); | 289 | reparentTodoSignal( destinationEvent, todo ); |
290 | } | 290 | } |
291 | } | 291 | } |
292 | else { | 292 | else { |
293 | QString text; | 293 | QString text; |
294 | if (QTextDrag::decode(e,text)) { | 294 | if (QTextDrag::decode(e,text)) { |
295 | //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); | 295 | //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); |
296 | KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); | 296 | KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); |
297 | qDebug("Dropped : " + text); | 297 | qDebug("Dropped : " + text); |
298 | QStringList emails = QStringList::split(",",text); | 298 | QStringList emails = QStringList::split(",",text); |
299 | for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { | 299 | for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { |
300 | int pos = (*it).find("<"); | 300 | int pos = (*it).find("<"); |
301 | QString name = (*it).left(pos); | 301 | QString name = (*it).left(pos); |
302 | QString email = (*it).mid(pos); | 302 | QString email = (*it).mid(pos); |
303 | if (!email.isEmpty() && todoi) { | 303 | if (!email.isEmpty() && todoi) { |
304 | todoi->todo()->addAttendee(new Attendee(name,email)); | 304 | todoi->todo()->addAttendee(new Attendee(name,email)); |
305 | } | 305 | } |
306 | } | 306 | } |
307 | } | 307 | } |
308 | else { | 308 | else { |
309 | qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); | 309 | qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); |
310 | e->ignore(); | 310 | e->ignore(); |
311 | } | 311 | } |
312 | } | 312 | } |
313 | #endif | 313 | #endif |
314 | } | 314 | } |
315 | void KOTodoListView::wheelEvent (QWheelEvent *e) | 315 | void KOTodoListView::wheelEvent (QWheelEvent *e) |
316 | { | 316 | { |
317 | QListView::wheelEvent (e); | 317 | QListView::wheelEvent (e); |
318 | } | 318 | } |
319 | 319 | ||
320 | void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) | 320 | void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) |
321 | { | 321 | { |
322 | 322 | ||
323 | QPoint p(contentsToViewport(e->pos())); | 323 | QPoint p(contentsToViewport(e->pos())); |
324 | QListViewItem *i = itemAt(p); | 324 | QListViewItem *i = itemAt(p); |
325 | bool rootClicked = true; | 325 | bool rootClicked = true; |
326 | if (i) { | 326 | if (i) { |
327 | // if the user clicked into the root decoration of the item, don't | 327 | // if the user clicked into the root decoration of the item, don't |
328 | // try to start a drag! | 328 | // try to start a drag! |
329 | int X = p.x(); | 329 | int X = p.x(); |
330 | //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() ); | 330 | //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() ); |
331 | if (X > header()->sectionPos(0) + | 331 | if (X > header()->sectionPos(0) + |
332 | treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + | 332 | treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + |
333 | itemMargin() +i->height()|| | 333 | itemMargin() +i->height()|| |
334 | X < header()->sectionPos(0)) { | 334 | X < header()->sectionPos(0)) { |
335 | rootClicked = false; | 335 | rootClicked = false; |
336 | } | 336 | } |
337 | } else { | 337 | } else { |
338 | rootClicked = false; | 338 | rootClicked = false; |
339 | } | 339 | } |
340 | #ifndef KORG_NODND | 340 | #ifndef KORG_NODND |
341 | mMousePressed = false; | 341 | mMousePressed = false; |
342 | if (! rootClicked && !( e->button() == RightButton) ) { | 342 | if (! rootClicked && !( e->button() == RightButton) ) { |
343 | mPressPos = e->pos(); | 343 | mPressPos = e->pos(); |
344 | mMousePressed = true; | 344 | mMousePressed = true; |
345 | } else { | 345 | } else { |
346 | mMousePressed = false; | 346 | mMousePressed = false; |
347 | } | 347 | } |
348 | #endif | 348 | #endif |
349 | //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); | 349 | //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); |
350 | #ifndef DESKTOP_VERSION | 350 | #ifndef DESKTOP_VERSION |
351 | if (!( e->button() == RightButton && rootClicked) ) | 351 | if (!( e->button() == RightButton && rootClicked) ) |
352 | QListView::contentsMousePressEvent(e); | 352 | QListView::contentsMousePressEvent(e); |
353 | #else | 353 | #else |
354 | QListView::contentsMousePressEvent(e); | 354 | QListView::contentsMousePressEvent(e); |
355 | #endif | 355 | #endif |
356 | } | 356 | } |
357 | void KOTodoListView::paintEvent(QPaintEvent* e) | 357 | void KOTodoListView::paintEvent(QPaintEvent* e) |
358 | { | 358 | { |
359 | emit paintNeeded(); | 359 | emit paintNeeded(); |
360 | QListView::paintEvent( e); | 360 | QListView::paintEvent( e); |
361 | } | 361 | } |
362 | void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) | 362 | void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) |
363 | { | 363 | { |
364 | 364 | ||
365 | #ifndef KORG_NODND | 365 | #ifndef KORG_NODND |
366 | //QListView::contentsMouseMoveEvent(e); | 366 | //QListView::contentsMouseMoveEvent(e); |
367 | if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > | 367 | if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > |
368 | QApplication::startDragDistance()*3) { | 368 | QApplication::startDragDistance()*3) { |
369 | mMousePressed = false; | 369 | mMousePressed = false; |
370 | QListViewItem *item = itemAt(contentsToViewport(mPressPos)); | 370 | QListViewItem *item = itemAt(contentsToViewport(mPressPos)); |
371 | if (item) { | 371 | if (item) { |
372 | DndFactory factory( mCalendar ); | 372 | DndFactory factory( mCalendar ); |
373 | ICalDrag *vd = factory.createDrag( | 373 | ICalDrag *vd = factory.createDrag( |
374 | ((KOTodoViewItem *)item)->todo(),viewport()); | 374 | ((KOTodoViewItem *)item)->todo(),viewport()); |
375 | internalDrop = false; | 375 | internalDrop = false; |
376 | // we cannot do any senseful here, because the DnD is still broken in Qt | 376 | // we cannot do any senseful here, because the DnD is still broken in Qt |
377 | if (vd->drag()) { | 377 | if (vd->drag()) { |
378 | if ( !internalDrop ) { | 378 | if ( !internalDrop ) { |
379 | //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); | 379 | //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); |
380 | qDebug("Dnd: External move: Delete drag source "); | 380 | qDebug("Dnd: External move: Delete drag source "); |
381 | } else | 381 | } else |
382 | qDebug("Dnd: Internal move "); | 382 | qDebug("Dnd: Internal move "); |
383 | 383 | ||
384 | } else { | 384 | } else { |
385 | if ( !internalDrop ) { | 385 | if ( !internalDrop ) { |
386 | qDebug("Dnd: External Copy"); | 386 | qDebug("Dnd: External Copy"); |
387 | } else | 387 | } else |
388 | qDebug("DnD: Internal copy: Copy pending"); | 388 | qDebug("DnD: Internal copy: Copy pending"); |
389 | } | 389 | } |
390 | } | 390 | } |
391 | } | 391 | } |
392 | #endif | 392 | #endif |
393 | } | 393 | } |
394 | void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) | 394 | void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) |
395 | { | 395 | { |
396 | if ( !e->isAutoRepeat() ) { | 396 | if ( !e->isAutoRepeat() ) { |
397 | mFlagKeyPressed = false; | 397 | mFlagKeyPressed = false; |
398 | } | 398 | } |
399 | } | 399 | } |
400 | 400 | ||
401 | 401 | ||
402 | void KOTodoListView::keyPressEvent ( QKeyEvent * e ) | 402 | void KOTodoListView::keyPressEvent ( QKeyEvent * e ) |
403 | { | 403 | { |
404 | qApp->processEvents(); | 404 | qApp->processEvents(); |
405 | if ( !isVisible() ) { | ||
406 | e->ignore(); | ||
407 | return; | ||
408 | } | ||
405 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | 409 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { |
406 | e->ignore(); | 410 | e->ignore(); |
407 | // qDebug(" ignore %d",e->isAutoRepeat() ); | 411 | // qDebug(" ignore %d",e->isAutoRepeat() ); |
408 | return; | 412 | return; |
409 | } | 413 | } |
410 | if (! e->isAutoRepeat() ) | 414 | if (! e->isAutoRepeat() ) |
411 | mFlagKeyPressed = true; | 415 | mFlagKeyPressed = true; |
412 | QListViewItem* cn; | 416 | QListViewItem* cn; |
413 | if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { | 417 | if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { |
414 | cn = currentItem(); | 418 | cn = currentItem(); |
415 | if ( cn ) { | 419 | if ( cn ) { |
416 | KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); | 420 | KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); |
417 | if ( ci ){ | 421 | if ( ci ){ |
418 | if ( e->state() == ShiftButton ) | 422 | if ( e->state() == ShiftButton ) |
419 | ci->setOn( false ); | 423 | ci->setOn( false ); |
420 | else | 424 | else |
421 | ci->setOn( true ); | 425 | ci->setOn( true ); |
422 | cn = cn->itemBelow(); | 426 | cn = cn->itemBelow(); |
423 | if ( cn ) { | 427 | if ( cn ) { |
424 | setCurrentItem ( cn ); | 428 | setCurrentItem ( cn ); |
425 | ensureItemVisible ( cn ); | 429 | ensureItemVisible ( cn ); |
426 | } | 430 | } |
427 | 431 | ||
428 | } | 432 | } |
429 | } | 433 | } |
430 | 434 | ||
431 | return; | 435 | return; |
432 | } | 436 | } |
433 | 437 | ||
434 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { | 438 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { |
435 | switch ( e->key() ) { | 439 | switch ( e->key() ) { |
436 | case Qt::Key_Down: | 440 | case Qt::Key_Down: |
437 | case Qt::Key_Up: | 441 | case Qt::Key_Up: |
438 | QListView::keyPressEvent ( e ); | 442 | QListView::keyPressEvent ( e ); |
439 | break; | 443 | break; |
440 | case Qt::Key_Left: | 444 | case Qt::Key_Left: |
441 | case Qt::Key_Right: | 445 | case Qt::Key_Right: |
442 | QListView::keyPressEvent ( e ); | 446 | QListView::keyPressEvent ( e ); |
443 | e->accept(); | 447 | e->accept(); |
444 | return; | 448 | return; |
445 | break; | 449 | break; |
446 | default: | 450 | default: |
447 | e->ignore(); | 451 | e->ignore(); |
448 | break; | 452 | break; |
449 | } | 453 | } |
450 | return; | 454 | return; |
451 | } | 455 | } |
452 | e->ignore(); | 456 | e->ignore(); |
453 | } | 457 | } |
454 | void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) | 458 | void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) |
455 | { | 459 | { |
456 | QListView::contentsMouseReleaseEvent(e); | 460 | QListView::contentsMouseReleaseEvent(e); |
457 | mMousePressed = false; | 461 | mMousePressed = false; |
458 | } | 462 | } |
459 | 463 | ||
460 | void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) | 464 | void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) |
461 | { | 465 | { |
462 | if (!e) return; | 466 | if (!e) return; |
463 | 467 | ||
464 | QPoint vp = contentsToViewport(e->pos()); | 468 | QPoint vp = contentsToViewport(e->pos()); |
465 | 469 | ||
466 | QListViewItem *item = itemAt(vp); | 470 | QListViewItem *item = itemAt(vp); |
467 | 471 | ||
468 | emit double_Clicked(item); | 472 | emit double_Clicked(item); |
469 | if (!item) return; | 473 | if (!item) return; |
470 | 474 | ||
471 | emit doubleClicked(item,vp,0); | 475 | emit doubleClicked(item,vp,0); |
472 | } | 476 | } |
473 | 477 | ||
474 | ///////////////////////////////////////////////////////////////////////////// | 478 | ///////////////////////////////////////////////////////////////////////////// |
475 | 479 | ||
476 | KOQuickTodo::KOQuickTodo(QWidget *parent) : | 480 | KOQuickTodo::KOQuickTodo(QWidget *parent) : |
477 | QLineEdit(parent) | 481 | QLineEdit(parent) |
478 | { | 482 | { |
479 | setText(i18n("Click to add new Todo")); | 483 | setText(i18n("Click to add new Todo")); |
480 | } | 484 | } |
481 | 485 | ||
482 | void KOQuickTodo::focusInEvent(QFocusEvent *ev) | 486 | void KOQuickTodo::focusInEvent(QFocusEvent *ev) |
483 | { | 487 | { |
484 | if ( text()==i18n("Click to add new Todo") ) | 488 | if ( text()==i18n("Click to add new Todo") ) |
485 | setText(""); | 489 | setText(""); |
486 | QLineEdit::focusInEvent(ev); | 490 | QLineEdit::focusInEvent(ev); |
487 | } | 491 | } |
488 | 492 | ||
489 | void KOQuickTodo::focusOutEvent(QFocusEvent *ev) | 493 | void KOQuickTodo::focusOutEvent(QFocusEvent *ev) |
490 | { | 494 | { |
491 | setText(i18n("Click to add new Todo")); | 495 | setText(i18n("Click to add new Todo")); |
492 | QLineEdit::focusOutEvent(ev); | 496 | QLineEdit::focusOutEvent(ev); |
493 | } | 497 | } |
494 | 498 | ||
495 | ///////////////////////////////////////////////////////////////////////////// | 499 | ///////////////////////////////////////////////////////////////////////////// |
496 | 500 | ||
497 | KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : | 501 | KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : |
498 | KOrg::BaseView(calendar,parent,name) | 502 | KOrg::BaseView(calendar,parent,name) |
499 | { | 503 | { |
500 | mCategoryPopupMenu = 0; | 504 | mCategoryPopupMenu = 0; |
501 | mPendingUpdateBeforeRepaint = false; | 505 | mPendingUpdateBeforeRepaint = false; |
502 | isFlatDisplay = false; | 506 | isFlatDisplay = false; |
503 | mNavigator = 0; | 507 | mNavigator = 0; |
504 | QBoxLayout *topLayout = new QVBoxLayout(this); | 508 | QBoxLayout *topLayout = new QVBoxLayout(this); |
505 | mName = QString ( name ); | 509 | mName = QString ( name ); |
506 | mBlockUpdate = false; | 510 | mBlockUpdate = false; |
507 | mQuickBar = new QWidget( this ); | 511 | mQuickBar = new QWidget( this ); |
508 | topLayout->addWidget(mQuickBar); | 512 | topLayout->addWidget(mQuickBar); |
509 | 513 | ||
510 | mQuickAdd = new KOQuickTodo(mQuickBar); | 514 | mQuickAdd = new KOQuickTodo(mQuickBar); |
511 | QBoxLayout *quickLayout = new QHBoxLayout(mQuickBar); | 515 | QBoxLayout *quickLayout = new QHBoxLayout(mQuickBar); |
512 | quickLayout->addWidget( mQuickAdd ); | 516 | quickLayout->addWidget( mQuickAdd ); |
513 | QPushButton * flat = new QPushButton( "F",mQuickBar ); | 517 | QPushButton * flat = new QPushButton( "F",mQuickBar ); |
514 | int fixwid = flat->sizeHint().height(); | 518 | int fixwid = flat->sizeHint().height(); |
515 | if ( QApplication::desktop()->width() > 320 ) | 519 | if ( QApplication::desktop()->width() > 320 ) |
516 | fixwid *= 2; | 520 | fixwid *= 2; |
517 | flat->setFixedWidth( fixwid ); | 521 | flat->setFixedWidth( fixwid ); |
518 | connect ( flat, SIGNAL ( clicked()), SLOT ( setAllFlat())); | 522 | connect ( flat, SIGNAL ( clicked()), SLOT ( setAllFlat())); |
519 | QPushButton * allopen = new QPushButton( "O",mQuickBar ); | 523 | QPushButton * allopen = new QPushButton( "O",mQuickBar ); |
520 | allopen->setFixedWidth( fixwid ); | 524 | allopen->setFixedWidth( fixwid ); |
521 | connect ( allopen, SIGNAL ( clicked()), SLOT ( setAllOpen())); | 525 | connect ( allopen, SIGNAL ( clicked()), SLOT ( setAllOpen())); |
522 | QPushButton * allclose = new QPushButton( "C",mQuickBar ); | 526 | QPushButton * allclose = new QPushButton( "C",mQuickBar ); |
523 | allclose->setFixedWidth( fixwid ); | 527 | allclose->setFixedWidth( fixwid ); |
524 | connect ( allclose, SIGNAL ( clicked()), SLOT ( setAllClose())); | 528 | connect ( allclose, SIGNAL ( clicked()), SLOT ( setAllClose())); |
525 | QPushButton * s_done = new QPushButton( "D",mQuickBar ); | 529 | QPushButton * s_done = new QPushButton( "D",mQuickBar ); |
526 | s_done->setPixmap( SmallIcon("greenhook16")); | 530 | s_done->setPixmap( SmallIcon("greenhook16")); |
527 | s_done->setFixedWidth( fixwid ); | 531 | s_done->setFixedWidth( fixwid ); |
528 | s_done->setFixedHeight( flat->sizeHint().height() ); | 532 | s_done->setFixedHeight( flat->sizeHint().height() ); |
529 | connect ( s_done, SIGNAL ( clicked()), SLOT ( toggleCompleted())); | 533 | connect ( s_done, SIGNAL ( clicked()), SLOT ( toggleCompleted())); |
530 | QPushButton * s_run = new QPushButton( "R",mQuickBar ); | 534 | QPushButton * s_run = new QPushButton( "R",mQuickBar ); |
531 | s_run->setPixmap( SmallIcon("ko16old")); | 535 | s_run->setPixmap( SmallIcon("ko16old")); |
532 | s_run->setFixedWidth( fixwid ); | 536 | s_run->setFixedWidth( fixwid ); |
@@ -1474,224 +1478,234 @@ void KOTodoView::setAllClose() | |||
1474 | storeCurrentItem(); | 1478 | storeCurrentItem(); |
1475 | } | 1479 | } |
1476 | setOpen(mTodoListView->firstChild(), false); | 1480 | setOpen(mTodoListView->firstChild(), false); |
1477 | resetCurrentItem(); | 1481 | resetCurrentItem(); |
1478 | } | 1482 | } |
1479 | void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) | 1483 | void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) |
1480 | { | 1484 | { |
1481 | 1485 | ||
1482 | while ( item ) { | 1486 | while ( item ) { |
1483 | setOpen( item->firstChild(), setOpenI ); | 1487 | setOpen( item->firstChild(), setOpenI ); |
1484 | item->setOpen( setOpenI ); | 1488 | item->setOpen( setOpenI ); |
1485 | item = item->nextSibling(); | 1489 | item = item->nextSibling(); |
1486 | } | 1490 | } |
1487 | } | 1491 | } |
1488 | 1492 | ||
1489 | void KOTodoView::displayAllFlat() | 1493 | void KOTodoView::displayAllFlat() |
1490 | { | 1494 | { |
1491 | storeCurrentItem(); | 1495 | storeCurrentItem(); |
1492 | pendingSubtodo = 0; | 1496 | pendingSubtodo = 0; |
1493 | if ( mBlockUpdate ) { | 1497 | if ( mBlockUpdate ) { |
1494 | return; | 1498 | return; |
1495 | } | 1499 | } |
1496 | mPopupMenu->setItemChecked( 8,true ); | 1500 | mPopupMenu->setItemChecked( 8,true ); |
1497 | isFlatDisplay = true; | 1501 | isFlatDisplay = true; |
1498 | QPtrList<Todo> todoList = calendar()->todos(); | 1502 | QPtrList<Todo> todoList = calendar()->todos(); |
1499 | mTodoMap.clear(); | 1503 | mTodoMap.clear(); |
1500 | mTodoListView->clear(); | 1504 | mTodoListView->clear(); |
1501 | Todo *todo; | 1505 | Todo *todo; |
1502 | for(todo = todoList.first(); todo; todo = todoList.next()) { | 1506 | for(todo = todoList.first(); todo; todo = todoList.next()) { |
1503 | if ( checkTodo( todo ) ) { | 1507 | if ( checkTodo( todo ) ) { |
1504 | KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); | 1508 | KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); |
1505 | mTodoMap.insert(todo,todoItem); | 1509 | mTodoMap.insert(todo,todoItem); |
1506 | } | 1510 | } |
1507 | } | 1511 | } |
1508 | resetCurrentItem(); | 1512 | resetCurrentItem(); |
1509 | } | 1513 | } |
1510 | 1514 | ||
1511 | void KOTodoView::setAllFlat() | 1515 | void KOTodoView::setAllFlat() |
1512 | { | 1516 | { |
1513 | if ( isFlatDisplay ) { | 1517 | if ( isFlatDisplay ) { |
1514 | isFlatDisplay = false; | 1518 | isFlatDisplay = false; |
1515 | mPopupMenu->setItemChecked( 8,false ); | 1519 | mPopupMenu->setItemChecked( 8,false ); |
1516 | updateView(); | 1520 | updateView(); |
1517 | return; | 1521 | return; |
1518 | } | 1522 | } |
1519 | displayAllFlat(); | 1523 | displayAllFlat(); |
1520 | } | 1524 | } |
1521 | 1525 | ||
1522 | void KOTodoView::purgeCompleted() | 1526 | void KOTodoView::purgeCompleted() |
1523 | { | 1527 | { |
1524 | emit purgeCompletedSignal(); | 1528 | emit purgeCompletedSignal(); |
1525 | 1529 | ||
1526 | } | 1530 | } |
1527 | void KOTodoView::toggleQuickTodo() | 1531 | void KOTodoView::toggleQuickTodo() |
1528 | { | 1532 | { |
1529 | if ( mQuickBar->isVisible() ) { | 1533 | if ( mQuickBar->isVisible() ) { |
1530 | mQuickBar->hide(); | 1534 | mQuickBar->hide(); |
1531 | KOPrefs::instance()->mEnableQuickTodo = false; | 1535 | KOPrefs::instance()->mEnableQuickTodo = false; |
1532 | } | 1536 | } |
1533 | else { | 1537 | else { |
1534 | mQuickBar->show(); | 1538 | mQuickBar->show(); |
1535 | KOPrefs::instance()->mEnableQuickTodo = true; | 1539 | KOPrefs::instance()->mEnableQuickTodo = true; |
1536 | } | 1540 | } |
1537 | mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); | 1541 | mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); |
1538 | mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); | 1542 | mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); |
1539 | } | 1543 | } |
1540 | 1544 | ||
1541 | void KOTodoView::toggleRunning() | 1545 | void KOTodoView::toggleRunning() |
1542 | { | 1546 | { |
1543 | KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; | 1547 | KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; |
1544 | mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); | 1548 | mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); |
1545 | mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); | 1549 | mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); |
1546 | updateView(); | 1550 | updateView(); |
1547 | if ( KOPrefs::instance()->mHideNonStartedTodos ) | 1551 | if ( KOPrefs::instance()->mHideNonStartedTodos ) |
1548 | topLevelWidget()->setCaption(i18n("Hide not Running")); | 1552 | topLevelWidget()->setCaption(i18n("Hide not Running")); |
1549 | else | 1553 | else |
1550 | topLevelWidget()->setCaption(i18n("Show not Running")); | 1554 | topLevelWidget()->setCaption(i18n("Show not Running")); |
1551 | } | 1555 | } |
1552 | 1556 | ||
1553 | void KOTodoView::toggleCompleted() | 1557 | void KOTodoView::toggleCompleted() |
1554 | { | 1558 | { |
1555 | KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; | 1559 | KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; |
1556 | mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); | 1560 | mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); |
1557 | mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); | 1561 | mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); |
1558 | updateView(); | 1562 | updateView(); |
1559 | if ( KOPrefs::instance()->mShowCompletedTodo ) | 1563 | if ( KOPrefs::instance()->mShowCompletedTodo ) |
1560 | topLevelWidget()->setCaption(i18n("Show Completed")); | 1564 | topLevelWidget()->setCaption(i18n("Show Completed")); |
1561 | else | 1565 | else |
1562 | topLevelWidget()->setCaption(i18n("Hide Completed")); | 1566 | topLevelWidget()->setCaption(i18n("Hide Completed")); |
1563 | } | 1567 | } |
1564 | 1568 | ||
1565 | void KOTodoView::addQuickTodo() | 1569 | void KOTodoView::addQuickTodo() |
1566 | { | 1570 | { |
1567 | addQuickTodoPar( 0 ); | 1571 | addQuickTodoPar( 0 ); |
1568 | } | 1572 | } |
1569 | void KOTodoView::addQuickTodoPar( Todo * parentTodo) | 1573 | void KOTodoView::addQuickTodoPar( Todo * parentTodo) |
1570 | { | 1574 | { |
1571 | Todo *todo = new Todo(); | 1575 | Todo *todo = new Todo(); |
1572 | todo->setSummary(mQuickAdd->text()); | 1576 | todo->setSummary(mQuickAdd->text()); |
1573 | todo->setOrganizer(KOPrefs::instance()->email()); | 1577 | todo->setOrganizer(KOPrefs::instance()->email()); |
1574 | if ( parentTodo ) { | 1578 | if ( parentTodo ) { |
1575 | todo->setRelatedTo(parentTodo); | 1579 | todo->setRelatedTo(parentTodo); |
1576 | 1580 | ||
1577 | todo->setCategories (parentTodo->categoriesStr ()); | 1581 | todo->setCategories (parentTodo->categoriesStr ()); |
1578 | todo->setSecrecy (parentTodo->secrecy ()); | 1582 | todo->setSecrecy (parentTodo->secrecy ()); |
1579 | if ( parentTodo->priority() < 3 ) | 1583 | if ( parentTodo->priority() < 3 ) |
1580 | todo->setPriority( parentTodo->priority() ); | 1584 | todo->setPriority( parentTodo->priority() ); |
1581 | todo->setCalID( parentTodo->calID() ); | 1585 | todo->setCalID( parentTodo->calID() ); |
1582 | } else { | 1586 | } else { |
1583 | CalFilter * cf = mCalendar->filter(); | 1587 | CalFilter * cf = mCalendar->filter(); |
1584 | if ( cf ) { | 1588 | if ( cf ) { |
1585 | if ( cf->isEnabled()&& cf->showCategories()) { | 1589 | if ( cf->isEnabled()&& cf->showCategories()) { |
1586 | todo->setCategories(cf->categoryList()); | 1590 | todo->setCategories(cf->categoryList()); |
1587 | } | 1591 | } |
1588 | if ( cf->isEnabled() ) | 1592 | if ( cf->isEnabled() ) |
1589 | todo->setSecrecy( cf->getSecrecy()); | 1593 | todo->setSecrecy( cf->getSecrecy()); |
1590 | } | 1594 | } |
1591 | } | 1595 | } |
1592 | mCalendar->addTodo(todo); | 1596 | mCalendar->addTodo(todo); |
1593 | mQuickAdd->setText(""); | 1597 | mQuickAdd->setText(""); |
1594 | todoModified (todo, KOGlobals::EVENTADDED ); | 1598 | todoModified (todo, KOGlobals::EVENTADDED ); |
1595 | updateView(); | 1599 | updateView(); |
1596 | 1600 | ||
1597 | } | 1601 | } |
1598 | void KOTodoView::keyPressEvent ( QKeyEvent * e ) | 1602 | void KOTodoView::keyPressEvent ( QKeyEvent * e ) |
1599 | { | 1603 | { |
1600 | // e->ignore(); | 1604 | // e->ignore(); |
1601 | //return; | 1605 | //return; |
1602 | //qDebug("KOTodoView::keyPressEvent "); | 1606 | //qDebug("KOTodoView::keyPressEvent "); |
1607 | if ( !isVisible() ) { | ||
1608 | e->ignore(); | ||
1609 | return; | ||
1610 | } | ||
1603 | switch ( e->key() ) { | 1611 | switch ( e->key() ) { |
1604 | case Qt::Key_Down: | 1612 | case Qt::Key_Down: |
1605 | case Qt::Key_Up: | 1613 | case Qt::Key_Up: |
1606 | QWidget::keyPressEvent ( e ); | 1614 | QWidget::keyPressEvent ( e ); |
1607 | break; | 1615 | break; |
1608 | 1616 | ||
1609 | case Qt::Key_Q: | 1617 | case Qt::Key_Q: |
1618 | |||
1619 | |||
1620 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) { | ||
1621 | e->ignore(); | ||
1622 | break; | ||
1623 | } | ||
1610 | toggleQuickTodo(); | 1624 | toggleQuickTodo(); |
1611 | break; | 1625 | break; |
1612 | case Qt::Key_U: | 1626 | case Qt::Key_U: |
1613 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { | 1627 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { |
1614 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | 1628 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); |
1615 | unparentTodo(); | 1629 | unparentTodo(); |
1616 | e->accept(); | 1630 | e->accept(); |
1617 | } else | 1631 | } else |
1618 | e->ignore(); | 1632 | e->ignore(); |
1619 | break; | 1633 | break; |
1620 | case Qt::Key_S: | 1634 | case Qt::Key_S: |
1621 | if ( e->state() == Qt::ControlButton ) { | 1635 | if ( e->state() == Qt::ControlButton ) { |
1622 | e->ignore(); | 1636 | e->ignore(); |
1623 | break; | 1637 | break; |
1624 | } | 1638 | } |
1625 | if ( e->state() == Qt::ShiftButton ) { | 1639 | if ( e->state() == Qt::ShiftButton ) { |
1626 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | 1640 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); |
1627 | reparentTodo(); | 1641 | reparentTodo(); |
1628 | e->accept(); | 1642 | e->accept(); |
1629 | } else | 1643 | } else |
1630 | e->ignore(); | 1644 | e->ignore(); |
1631 | break; | 1645 | break; |
1632 | case Qt::Key_P: | 1646 | case Qt::Key_P: |
1633 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { | 1647 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { |
1634 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | 1648 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); |
1635 | if ( pendingSubtodo ) | 1649 | if ( pendingSubtodo ) |
1636 | itemClicked(mActiveItem); | 1650 | itemClicked(mActiveItem); |
1637 | e->accept(); | 1651 | e->accept(); |
1638 | } else | 1652 | } else |
1639 | e->ignore(); | 1653 | e->ignore(); |
1640 | break; | 1654 | break; |
1641 | case Qt::Key_Escape: | 1655 | case Qt::Key_Escape: |
1642 | if ( pendingSubtodo ) { | 1656 | if ( pendingSubtodo ) { |
1643 | itemClicked(0); | 1657 | itemClicked(0); |
1644 | e->accept(); | 1658 | e->accept(); |
1645 | } else | 1659 | } else |
1646 | e->ignore(); | 1660 | e->ignore(); |
1647 | break; | 1661 | break; |
1648 | default: | 1662 | default: |
1649 | e->ignore(); | 1663 | e->ignore(); |
1650 | } | 1664 | } |
1651 | 1665 | ||
1652 | if ( true ) { | 1666 | if ( true ) { |
1653 | if ( e->key() == Qt::Key_I ) { | 1667 | if ( e->key() == Qt::Key_I ) { |
1654 | KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); | 1668 | KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); |
1655 | if ( cn ) { | 1669 | if ( cn ) { |
1656 | mActiveItem = cn; | 1670 | mActiveItem = cn; |
1657 | KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); | 1671 | KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); |
1658 | if ( ci ){ | 1672 | if ( ci ){ |
1659 | showTodo(); | 1673 | showTodo(); |
1660 | cn = (KOTodoViewItem*)cn->itemBelow(); | 1674 | cn = (KOTodoViewItem*)cn->itemBelow(); |
1661 | if ( cn ) { | 1675 | if ( cn ) { |
1662 | mTodoListView->setCurrentItem ( cn ); | 1676 | mTodoListView->setCurrentItem ( cn ); |
1663 | mTodoListView->ensureItemVisible ( cn ); | 1677 | mTodoListView->ensureItemVisible ( cn ); |
1664 | } | 1678 | } |
1665 | 1679 | ||
1666 | } | 1680 | } |
1667 | } | 1681 | } |
1668 | e->accept(); | 1682 | e->accept(); |
1669 | 1683 | ||
1670 | } | 1684 | } |
1671 | 1685 | ||
1672 | } | 1686 | } |
1673 | 1687 | ||
1674 | } | 1688 | } |
1675 | void KOTodoView::updateTodo( Todo * t, int type ) | 1689 | void KOTodoView::updateTodo( Todo * t, int type ) |
1676 | { | 1690 | { |
1677 | if ( mBlockUpdate) | 1691 | if ( mBlockUpdate) |
1678 | return; | 1692 | return; |
1679 | 1693 | ||
1680 | QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; | 1694 | QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; |
1681 | itemIterator = mTodoMap.find(t); | 1695 | itemIterator = mTodoMap.find(t); |
1682 | if (itemIterator != mTodoMap.end()) { | 1696 | if (itemIterator != mTodoMap.end()) { |
1683 | (*itemIterator)->construct(); | 1697 | (*itemIterator)->construct(); |
1684 | } else { | 1698 | } else { |
1685 | if ( type == KOGlobals::EVENTADDED ) { | 1699 | if ( type == KOGlobals::EVENTADDED ) { |
1686 | insertTodoItem( t ); | 1700 | insertTodoItem( t ); |
1687 | } | 1701 | } |
1688 | } | 1702 | } |
1689 | 1703 | ||
1690 | } | 1704 | } |
1691 | 1705 | ||
1692 | void KOTodoView::todoModified(Todo * t , int p ) | 1706 | void KOTodoView::todoModified(Todo * t , int p ) |
1693 | { | 1707 | { |
1694 | mBlockUpdate = true; | 1708 | mBlockUpdate = true; |
1695 | emit todoModifiedSignal ( t, p ); | 1709 | emit todoModifiedSignal ( t, p ); |
1696 | mBlockUpdate = false; | 1710 | mBlockUpdate = false; |
1697 | } | 1711 | } |
diff --git a/libkcal/event.cpp b/libkcal/event.cpp index 7cd81fa..235ae55 100644 --- a/libkcal/event.cpp +++ b/libkcal/event.cpp | |||
@@ -46,178 +46,293 @@ Incidence *Event::clone() | |||
46 | { | 46 | { |
47 | return new Event(*this); | 47 | return new Event(*this); |
48 | } | 48 | } |
49 | 49 | ||
50 | bool KCal::operator==( const Event& e1, const Event& e2 ) | 50 | bool KCal::operator==( const Event& e1, const Event& e2 ) |
51 | { | 51 | { |
52 | return operator==( (const Incidence&)e1, (const Incidence&)e2 ) && | 52 | return operator==( (const Incidence&)e1, (const Incidence&)e2 ) && |
53 | e1.dtEnd() == e2.dtEnd() && | 53 | e1.dtEnd() == e2.dtEnd() && |
54 | e1.hasEndDate() == e2.hasEndDate() && | 54 | e1.hasEndDate() == e2.hasEndDate() && |
55 | e1.transparency() == e2.transparency(); | 55 | e1.transparency() == e2.transparency(); |
56 | } | 56 | } |
57 | 57 | ||
58 | 58 | ||
59 | bool Event::contains ( Event* from ) | 59 | bool Event::contains ( Event* from ) |
60 | { | 60 | { |
61 | 61 | ||
62 | if ( !from->summary().isEmpty() ) | 62 | if ( !from->summary().isEmpty() ) |
63 | if ( !summary().startsWith( from->summary() )) | 63 | if ( !summary().startsWith( from->summary() )) |
64 | return false; | 64 | return false; |
65 | if ( from->dtStart().isValid() ) | 65 | if ( from->dtStart().isValid() ) |
66 | if (dtStart() != from->dtStart() ) | 66 | if (dtStart() != from->dtStart() ) |
67 | return false; | 67 | return false; |
68 | if ( from->dtEnd().isValid() ) | 68 | if ( from->dtEnd().isValid() ) |
69 | if ( dtEnd() != from->dtEnd() ) | 69 | if ( dtEnd() != from->dtEnd() ) |
70 | return false; | 70 | return false; |
71 | if ( !from->location().isEmpty() ) | 71 | if ( !from->location().isEmpty() ) |
72 | if ( !location().startsWith( from->location() ) ) | 72 | if ( !location().startsWith( from->location() ) ) |
73 | return false; | 73 | return false; |
74 | if ( !from->description().isEmpty() ) | 74 | if ( !from->description().isEmpty() ) |
75 | if ( !description().startsWith( from->description() )) | 75 | if ( !description().startsWith( from->description() )) |
76 | return false; | 76 | return false; |
77 | if ( from->alarms().count() ) { | 77 | if ( from->alarms().count() ) { |
78 | Alarm *a = from->alarms().first(); | 78 | Alarm *a = from->alarms().first(); |
79 | if ( a->enabled() ){ | 79 | if ( a->enabled() ){ |
80 | if ( !alarms().count() ) | 80 | if ( !alarms().count() ) |
81 | return false; | 81 | return false; |
82 | Alarm *b = alarms().first(); | 82 | Alarm *b = alarms().first(); |
83 | if( ! b->enabled() ) | 83 | if( ! b->enabled() ) |
84 | return false; | 84 | return false; |
85 | if ( ! (a->offset() == b->offset() )) | 85 | if ( ! (a->offset() == b->offset() )) |
86 | return false; | 86 | return false; |
87 | } | 87 | } |
88 | } | 88 | } |
89 | QStringList cat = categories(); | 89 | QStringList cat = categories(); |
90 | QStringList catFrom = from->categories(); | 90 | QStringList catFrom = from->categories(); |
91 | QString nCat; | 91 | QString nCat; |
92 | unsigned int iii; | 92 | unsigned int iii; |
93 | for ( iii = 0; iii < catFrom.count();++iii ) { | 93 | for ( iii = 0; iii < catFrom.count();++iii ) { |
94 | nCat = catFrom[iii]; | 94 | nCat = catFrom[iii]; |
95 | if ( !nCat.isEmpty() ) | 95 | if ( !nCat.isEmpty() ) |
96 | if ( !cat.contains( nCat )) { | 96 | if ( !cat.contains( nCat )) { |
97 | return false; | 97 | return false; |
98 | } | 98 | } |
99 | } | 99 | } |
100 | if ( from->doesRecur() ) | 100 | if ( from->doesRecur() ) |
101 | if ( from->doesRecur() != doesRecur() && ! (from->doesRecur()== Recurrence::rYearlyMonth && doesRecur()== Recurrence::rYearlyDay) ) | 101 | if ( from->doesRecur() != doesRecur() && ! (from->doesRecur()== Recurrence::rYearlyMonth && doesRecur()== Recurrence::rYearlyDay) ) |
102 | return false; | 102 | return false; |
103 | return true; | 103 | return true; |
104 | } | 104 | } |
105 | 105 | ||
106 | void Event::setDtEnd(const QDateTime &dtEnd) | 106 | void Event::setDtEnd(const QDateTime &dtEnd) |
107 | { | 107 | { |
108 | if (mReadOnly) return; | 108 | if (mReadOnly) return; |
109 | 109 | ||
110 | mDtEnd = getEvenTime( dtEnd ); | 110 | mDtEnd = getEvenTime( dtEnd ); |
111 | 111 | ||
112 | setHasEndDate(true); | 112 | setHasEndDate(true); |
113 | setHasDuration(false); | 113 | setHasDuration(false); |
114 | 114 | ||
115 | updated(); | 115 | updated(); |
116 | } | 116 | } |
117 | 117 | ||
118 | QDateTime Event::dtEnd() const | 118 | QDateTime Event::dtEnd() const |
119 | { | 119 | { |
120 | if (hasEndDate()) return mDtEnd; | 120 | if (hasEndDate()) return mDtEnd; |
121 | if (hasDuration()) return dtStart().addSecs(duration()); | 121 | if (hasDuration()) return dtStart().addSecs(duration()); |
122 | 122 | ||
123 | return dtStart(); | 123 | return dtStart(); |
124 | } | 124 | } |
125 | 125 | ||
126 | QString Event::dtEndTimeStr() const | 126 | QString Event::dtEndTimeStr() const |
127 | { | 127 | { |
128 | return KGlobal::locale()->formatTime(mDtEnd.time()); | 128 | return KGlobal::locale()->formatTime(mDtEnd.time()); |
129 | } | 129 | } |
130 | 130 | ||
131 | QString Event::dtEndDateStr(bool shortfmt) const | 131 | QString Event::dtEndDateStr(bool shortfmt) const |
132 | { | 132 | { |
133 | return KGlobal::locale()->formatDate(mDtEnd.date(),shortfmt); | 133 | return KGlobal::locale()->formatDate(mDtEnd.date(),shortfmt); |
134 | } | 134 | } |
135 | 135 | ||
136 | QString Event::dtEndStr(bool shortfmt) const | 136 | QString Event::dtEndStr(bool shortfmt) const |
137 | { | 137 | { |
138 | return KGlobal::locale()->formatDateTime(mDtEnd, shortfmt); | 138 | return KGlobal::locale()->formatDateTime(mDtEnd, shortfmt); |
139 | } | 139 | } |
140 | 140 | ||
141 | void Event::setHasEndDate(bool b) | 141 | void Event::setHasEndDate(bool b) |
142 | { | 142 | { |
143 | mHasEndDate = b; | 143 | mHasEndDate = b; |
144 | } | 144 | } |
145 | 145 | ||
146 | bool Event::hasEndDate() const | 146 | bool Event::hasEndDate() const |
147 | { | 147 | { |
148 | return mHasEndDate; | 148 | return mHasEndDate; |
149 | } | 149 | } |
150 | 150 | ||
151 | bool Event::isMultiDay() const | 151 | bool Event::isMultiDay() const |
152 | { | 152 | { |
153 | bool multi = !(dtStart().date() == dtEnd().date()); | 153 | bool multi = !(dtStart().date() == dtEnd().date()); |
154 | return multi; | 154 | return multi; |
155 | } | 155 | } |
156 | 156 | ||
157 | void Event::setTransparency(Event::Transparency transparency) | 157 | void Event::setTransparency(Event::Transparency transparency) |
158 | { | 158 | { |
159 | if (mReadOnly) return; | 159 | if (mReadOnly) return; |
160 | mTransparency = transparency; | 160 | mTransparency = transparency; |
161 | updated(); | 161 | updated(); |
162 | } | 162 | } |
163 | 163 | ||
164 | Event::Transparency Event::transparency() const | 164 | Event::Transparency Event::transparency() const |
165 | { | 165 | { |
166 | return mTransparency; | 166 | return mTransparency; |
167 | } | 167 | } |
168 | 168 | ||
169 | void Event::setDuration(int seconds) | 169 | void Event::setDuration(int seconds) |
170 | { | 170 | { |
171 | setHasEndDate(false); | 171 | setHasEndDate(false); |
172 | Incidence::setDuration(seconds); | 172 | Incidence::setDuration(seconds); |
173 | } | 173 | } |
174 | bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, bool inFutureOnly ) | ||
175 | { | ||
176 | if ( testEvent == this ) | ||
177 | return false; | ||
178 | if ( ! doesRecur() && !testEvent->doesRecur() ) { | ||
179 | QDateTime te; | ||
180 | if ( testEvent->doesFloat() ) | ||
181 | te = testEvent->mDtEnd.addDays( 1 ); | ||
182 | else | ||
183 | te = testEvent->mDtEnd; | ||
184 | QDateTime e; | ||
185 | if ( doesFloat() ) | ||
186 | e = mDtEnd.addDays( 1 ); | ||
187 | else | ||
188 | e = mDtEnd; | ||
189 | if ( mDtStart < te && testEvent->mDtStart < e ) { | ||
190 | if ( mDtStart < testEvent->mDtStart ) | ||
191 | *overlapDT = testEvent->mDtStart; | ||
192 | else | ||
193 | *overlapDT = mDtStart; | ||
194 | if ( inFutureOnly ) | ||
195 | return (*overlapDT >= QDateTime::currentDateTime() ); | ||
196 | return true; | ||
197 | } | ||
198 | return false; | ||
199 | } | ||
200 | Event *nonRecur = 0; | ||
201 | Event *recurEvent = 0; | ||
202 | if ( ! doesRecur() ) { | ||
203 | nonRecur = this; | ||
204 | recurEvent = testEvent; | ||
205 | } | ||
206 | else if ( !testEvent->doesRecur() ) { | ||
207 | nonRecur = testEvent; | ||
208 | recurEvent = this; | ||
209 | } | ||
210 | if ( nonRecur ) { | ||
211 | QDateTime enr; | ||
212 | if ( nonRecur->doesFloat() ) | ||
213 | enr = nonRecur->mDtEnd.addDays( 1 ); | ||
214 | else | ||
215 | enr = nonRecur->mDtEnd; | ||
216 | if ( enr < recurEvent->mDtStart ) | ||
217 | return false; | ||
218 | if ( inFutureOnly && enr < QDateTime::currentDateTime() ) | ||
219 | return false; | ||
220 | int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd ); | ||
221 | if ( recurEvent->doesFloat() ) | ||
222 | recDuration += 86400; | ||
223 | bool ok = true; | ||
224 | QDateTime recStart = recurEvent->mDtStart.addSecs( -300);; | ||
225 | while ( ok ) { | ||
226 | recStart = recurEvent->getNextOccurence( recStart.addSecs( 60 ), &ok ); | ||
227 | if ( ok ) { | ||
228 | if ( recStart > enr ) | ||
229 | return false; | ||
230 | QDateTime recEnd = recStart.addSecs( recDuration ); | ||
231 | if ( nonRecur->mDtStart < recEnd && recStart < nonRecur->mDtEnd ) { | ||
232 | if ( nonRecur->mDtStart < recStart ) | ||
233 | *overlapDT = recStart; | ||
234 | else | ||
235 | *overlapDT = nonRecur->mDtStart; | ||
236 | if ( inFutureOnly ) { | ||
237 | if ( *overlapDT >= QDateTime::currentDateTime() ) | ||
238 | return true; | ||
239 | } else | ||
240 | return true; | ||
241 | } | ||
242 | } | ||
243 | } | ||
244 | return false; | ||
245 | } | ||
246 | |||
247 | QDateTime incidenceStart = mDtStart; | ||
248 | int duration = mDtStart.secsTo( mDtEnd ); | ||
249 | if ( doesFloat() ) | ||
250 | duration += 86400; | ||
251 | QDateTime testincidenceStart = testEvent->mDtStart; | ||
252 | int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd ); | ||
253 | if ( testEvent->doesFloat() ) | ||
254 | testduration += 86400; | ||
255 | bool computeThis = false; | ||
256 | if ( incidenceStart < testincidenceStart ) | ||
257 | computeThis = true; | ||
258 | bool ok = true; | ||
259 | if ( computeThis ) | ||
260 | incidenceStart = incidenceStart.addSecs( -300 ); | ||
261 | else | ||
262 | testincidenceStart = testincidenceStart.addSecs( -300 ); | ||
263 | int count = 0; | ||
264 | while ( ok ) { | ||
265 | ++count; | ||
266 | if ( count > 1000 ) break; | ||
267 | if ( computeThis ) | ||
268 | incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok ); | ||
269 | else | ||
270 | testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok ); | ||
271 | if ( ok ) { | ||
272 | if ( incidenceStart < testincidenceStart.addSecs( testduration ) && testincidenceStart < incidenceStart.addSecs( duration ) ) { | ||
273 | if ( incidenceStart < testincidenceStart ) | ||
274 | *overlapDT = testincidenceStart; | ||
275 | else | ||
276 | *overlapDT = incidenceStart; | ||
277 | if ( inFutureOnly ) { | ||
278 | if ( *overlapDT >= QDateTime::currentDateTime() ) | ||
279 | return true; | ||
280 | } else | ||
281 | return true; | ||
282 | } | ||
283 | computeThis = ( incidenceStart < testincidenceStart ); | ||
284 | } | ||
285 | |||
286 | } | ||
287 | return false; | ||
288 | } | ||
174 | QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const | 289 | QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const |
175 | { | 290 | { |
176 | *ok = false; | 291 | *ok = false; |
177 | if ( !alarmEnabled() ) | 292 | if ( !alarmEnabled() ) |
178 | return QDateTime (); | 293 | return QDateTime (); |
179 | bool yes; | 294 | bool yes; |
180 | QDateTime incidenceStart = getNextOccurence( start_dt, &yes ); | 295 | QDateTime incidenceStart = getNextOccurence( start_dt, &yes ); |
181 | if ( ! yes || cancelled() ) { | 296 | if ( ! yes || cancelled() ) { |
182 | *ok = false; | 297 | *ok = false; |
183 | return QDateTime (); | 298 | return QDateTime (); |
184 | } | 299 | } |
185 | 300 | ||
186 | bool enabled = false; | 301 | bool enabled = false; |
187 | Alarm* alarm; | 302 | Alarm* alarm; |
188 | int off = 0; | 303 | int off = 0; |
189 | QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );; | 304 | QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );; |
190 | // if ( QDateTime::currentDateTime() > incidenceStart ){ | 305 | // if ( QDateTime::currentDateTime() > incidenceStart ){ |
191 | // *ok = false; | 306 | // *ok = false; |
192 | // return incidenceStart; | 307 | // return incidenceStart; |
193 | // } | 308 | // } |
194 | for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { | 309 | for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { |
195 | if (alarm->enabled()) { | 310 | if (alarm->enabled()) { |
196 | if ( alarm->hasTime () ) { | 311 | if ( alarm->hasTime () ) { |
197 | if ( alarm->time() < alarmStart ) { | 312 | if ( alarm->time() < alarmStart ) { |
198 | alarmStart = alarm->time(); | 313 | alarmStart = alarm->time(); |
199 | enabled = true; | 314 | enabled = true; |
200 | off = alarmStart.secsTo( incidenceStart ); | 315 | off = alarmStart.secsTo( incidenceStart ); |
201 | } | 316 | } |
202 | 317 | ||
203 | } else { | 318 | } else { |
204 | int secs = alarm->startOffset().asSeconds(); | 319 | int secs = alarm->startOffset().asSeconds(); |
205 | if ( incidenceStart.addSecs( secs ) < alarmStart ) { | 320 | if ( incidenceStart.addSecs( secs ) < alarmStart ) { |
206 | alarmStart = incidenceStart.addSecs( secs ); | 321 | alarmStart = incidenceStart.addSecs( secs ); |
207 | enabled = true; | 322 | enabled = true; |
208 | off = -secs; | 323 | off = -secs; |
209 | } | 324 | } |
210 | } | 325 | } |
211 | } | 326 | } |
212 | } | 327 | } |
213 | if ( enabled ) { | 328 | if ( enabled ) { |
214 | if ( alarmStart > start_dt ) { | 329 | if ( alarmStart > start_dt ) { |
215 | *ok = true; | 330 | *ok = true; |
216 | * offset = off; | 331 | * offset = off; |
217 | return alarmStart; | 332 | return alarmStart; |
218 | } | 333 | } |
219 | } | 334 | } |
220 | *ok = false; | 335 | *ok = false; |
221 | return QDateTime (); | 336 | return QDateTime (); |
222 | 337 | ||
223 | } | 338 | } |
diff --git a/libkcal/event.h b/libkcal/event.h index 287d403..80c11c4 100644 --- a/libkcal/event.h +++ b/libkcal/event.h | |||
@@ -1,91 +1,93 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of libkcal. | 2 | This file is part of libkcal. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Library General Public | 6 | modify it under the terms of the GNU Library General Public |
7 | License as published by the Free Software Foundation; either | 7 | License as published by the Free Software Foundation; either |
8 | version 2 of the License, or (at your option) any later version. | 8 | version 2 of the License, or (at your option) any later version. |
9 | 9 | ||
10 | This library is distributed in the hope that it will be useful, | 10 | This library is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | Library General Public License for more details. | 13 | Library General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU Library General Public License | 15 | You should have received a copy of the GNU Library General Public License |
16 | along with this library; see the file COPYING.LIB. If not, write to | 16 | along with this library; see the file COPYING.LIB. If not, write to |
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 | Boston, MA 02111-1307, USA. | 18 | Boston, MA 02111-1307, USA. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #ifndef EVENT_H | 21 | #ifndef EVENT_H |
22 | #define EVENT_H | 22 | #define EVENT_H |
23 | // | 23 | // |
24 | // Event component, representing a VEVENT object | 24 | // Event component, representing a VEVENT object |
25 | // | 25 | // |
26 | 26 | ||
27 | #include "incidence.h" | 27 | #include "incidence.h" |
28 | namespace KCal { | 28 | namespace KCal { |
29 | 29 | ||
30 | /** | 30 | /** |
31 | This class provides an Event in the sense of RFC2445. | 31 | This class provides an Event in the sense of RFC2445. |
32 | */ | 32 | */ |
33 | class Event : public Incidence | 33 | class Event : public Incidence |
34 | { | 34 | { |
35 | public: | 35 | public: |
36 | enum Transparency { Opaque, Transparent }; | 36 | enum Transparency { Opaque, Transparent }; |
37 | typedef ListBase<Event> List; | 37 | typedef ListBase<Event> List; |
38 | Event(); | 38 | Event(); |
39 | Event(const Event &); | 39 | Event(const Event &); |
40 | ~Event(); | 40 | ~Event(); |
41 | 41 | ||
42 | QCString type() const { return "Event"; } | 42 | QCString type() const { return "Event"; } |
43 | IncTypeID typeID() const { return eventID; } | 43 | IncTypeID typeID() const { return eventID; } |
44 | 44 | ||
45 | Incidence *clone(); | 45 | Incidence *clone(); |
46 | QDateTime getNextAlarmDateTime( bool * ok, int * offset ,QDateTime start_dt ) const; | 46 | QDateTime getNextAlarmDateTime( bool * ok, int * offset ,QDateTime start_dt ) const; |
47 | 47 | ||
48 | /** for setting an event's ending date/time with a QDateTime. */ | 48 | /** for setting an event's ending date/time with a QDateTime. */ |
49 | void setDtEnd(const QDateTime &dtEnd); | 49 | void setDtEnd(const QDateTime &dtEnd); |
50 | /** Return the event's ending date/time as a QDateTime. */ | 50 | /** Return the event's ending date/time as a QDateTime. */ |
51 | virtual QDateTime dtEnd() const; | 51 | virtual QDateTime dtEnd() const; |
52 | /** returns an event's end time as a string formatted according to the | 52 | /** returns an event's end time as a string formatted according to the |
53 | users locale settings */ | 53 | users locale settings */ |
54 | QString dtEndTimeStr() const; | 54 | QString dtEndTimeStr() const; |
55 | /** returns an event's end date as a string formatted according to the | 55 | /** returns an event's end date as a string formatted according to the |
56 | users locale settings */ | 56 | users locale settings */ |
57 | QString dtEndDateStr(bool shortfmt=true) const; | 57 | QString dtEndDateStr(bool shortfmt=true) const; |
58 | /** returns an event's end date and time as a string formatted according | 58 | /** returns an event's end date and time as a string formatted according |
59 | to the users locale settings */ | 59 | to the users locale settings */ |
60 | QString dtEndStr(bool shortfmt=true) const; | 60 | QString dtEndStr(bool shortfmt=true) const; |
61 | void setHasEndDate(bool); | 61 | void setHasEndDate(bool); |
62 | /** Return whether the event has an end date/time. */ | 62 | /** Return whether the event has an end date/time. */ |
63 | bool hasEndDate() const; | 63 | bool hasEndDate() const; |
64 | 64 | ||
65 | /** Return true if the event spans multiple days, otherwise return false. */ | 65 | /** Return true if the event spans multiple days, otherwise return false. */ |
66 | bool isMultiDay() const; | 66 | bool isMultiDay() const; |
67 | 67 | ||
68 | /** set the event's time transparency level. */ | 68 | /** set the event's time transparency level. */ |
69 | void setTransparency(Transparency transparency); | 69 | void setTransparency(Transparency transparency); |
70 | /** get the event's time transparency level. */ | 70 | /** get the event's time transparency level. */ |
71 | Transparency transparency() const; | 71 | Transparency transparency() const; |
72 | 72 | ||
73 | void setDuration(int seconds); | 73 | void setDuration(int seconds); |
74 | 74 | ||
75 | bool contains ( Event*); | 75 | bool contains ( Event*); |
76 | 76 | ||
77 | bool isOverlapping ( Event*, QDateTime*, bool inFutureOnly ); | ||
78 | |||
77 | private: | 79 | private: |
78 | bool accept(Visitor &v) { return v.visit(this); } | 80 | bool accept(Visitor &v) { return v.visit(this); } |
79 | 81 | ||
80 | QDateTime mDtEnd; | 82 | QDateTime mDtEnd; |
81 | bool mHasEndDate; | 83 | bool mHasEndDate; |
82 | Transparency mTransparency; | 84 | Transparency mTransparency; |
83 | }; | 85 | }; |
84 | 86 | ||
85 | bool operator==( const Event&, const Event& ); | 87 | bool operator==( const Event&, const Event& ); |
86 | 88 | ||
87 | 89 | ||
88 | } | 90 | } |
89 | 91 | ||
90 | 92 | ||
91 | #endif | 93 | #endif |
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 96039df..dcead02 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp | |||
@@ -14,256 +14,264 @@ | |||
14 | 14 | ||
15 | You should have received a copy of the GNU Library General Public License | 15 | You should have received a copy of the GNU Library General Public License |
16 | along with this library; see the file COPYING.LIB. If not, write to | 16 | along with this library; see the file COPYING.LIB. If not, write to |
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 | Boston, MA 02111-1307, USA. | 18 | Boston, MA 02111-1307, USA. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <kglobal.h> | 21 | #include <kglobal.h> |
22 | #include <klocale.h> | 22 | #include <klocale.h> |
23 | #include <kdebug.h> | 23 | #include <kdebug.h> |
24 | #include <kidmanager.h> | 24 | #include <kidmanager.h> |
25 | 25 | ||
26 | #include "calformat.h" | 26 | #include "calformat.h" |
27 | #include "syncdefines.h" | 27 | #include "syncdefines.h" |
28 | 28 | ||
29 | #include "incidencebase.h" | 29 | #include "incidencebase.h" |
30 | 30 | ||
31 | using namespace KCal; | 31 | using namespace KCal; |
32 | 32 | ||
33 | IncidenceBase::IncidenceBase() : | 33 | IncidenceBase::IncidenceBase() : |
34 | mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), | 34 | mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), |
35 | mPilotId(0), mSyncStatus(SYNCMOD) | 35 | mPilotId(0), mSyncStatus(SYNCMOD) |
36 | { | 36 | { |
37 | setUid(CalFormat::createUniqueId()); | 37 | setUid(CalFormat::createUniqueId()); |
38 | mOrganizer = ""; | 38 | mOrganizer = ""; |
39 | mFloats = false; | 39 | mFloats = false; |
40 | mDuration = 0; | 40 | mDuration = 0; |
41 | mHasDuration = false; | 41 | mHasDuration = false; |
42 | mPilotId = 0; | 42 | mPilotId = 0; |
43 | mExternalId = ":"; | 43 | mExternalId = ":"; |
44 | mTempSyncStat = SYNC_TEMPSTATE_INITIAL; | 44 | mTempSyncStat = SYNC_TEMPSTATE_INITIAL; |
45 | mSyncStatus = 0; | 45 | mSyncStatus = 0; |
46 | mAttendees.setAutoDelete( true ); | 46 | mAttendees.setAutoDelete( true ); |
47 | mCalEnabled = true; | 47 | mCalEnabled = true; |
48 | mAlarmEnabled = true; | 48 | mAlarmEnabled = true; |
49 | mCalID = 0; | 49 | mCalID = 0; |
50 | } | 50 | } |
51 | 51 | ||
52 | IncidenceBase::IncidenceBase(const IncidenceBase &i) : | 52 | IncidenceBase::IncidenceBase(const IncidenceBase &i) : |
53 | CustomProperties( i ) | 53 | CustomProperties( i ) |
54 | { | 54 | { |
55 | 55 | ||
56 | mReadOnly = i.mReadOnly; | 56 | mReadOnly = i.mReadOnly; |
57 | mDtStart = i.mDtStart; | 57 | mDtStart = i.mDtStart; |
58 | mDuration = i.mDuration; | 58 | mDuration = i.mDuration; |
59 | mHasDuration = i.mHasDuration; | 59 | mHasDuration = i.mHasDuration; |
60 | mOrganizer = i.mOrganizer; | 60 | mOrganizer = i.mOrganizer; |
61 | mUid = i.mUid; | 61 | mUid = i.mUid; |
62 | mCalEnabled = i.mCalEnabled; | 62 | mCalEnabled = i.mCalEnabled; |
63 | mAlarmEnabled = i.mAlarmEnabled; | 63 | mAlarmEnabled = i.mAlarmEnabled; |
64 | mCalID = i.mCalID; | 64 | mCalID = i.mCalID; |
65 | QPtrList<Attendee> attendees = i.attendees(); | 65 | QPtrList<Attendee> attendees = i.attendees(); |
66 | for( Attendee *a = attendees.first(); a; a = attendees.next() ) { | 66 | for( Attendee *a = attendees.first(); a; a = attendees.next() ) { |
67 | mAttendees.append( new Attendee( *a ) ); | 67 | mAttendees.append( new Attendee( *a ) ); |
68 | } | 68 | } |
69 | mFloats = i.mFloats; | 69 | mFloats = i.mFloats; |
70 | mLastModified = i.mLastModified; | 70 | mLastModified = i.mLastModified; |
71 | mPilotId = i.mPilotId; | 71 | mPilotId = i.mPilotId; |
72 | mTempSyncStat = i.mTempSyncStat; | 72 | mTempSyncStat = i.mTempSyncStat; |
73 | mSyncStatus = i.mSyncStatus; | 73 | mSyncStatus = i.mSyncStatus; |
74 | mExternalId = i.mExternalId; | 74 | mExternalId = i.mExternalId; |
75 | // The copied object is a new one, so it isn't observed by the observer | 75 | // The copied object is a new one, so it isn't observed by the observer |
76 | // of the original object. | 76 | // of the original object. |
77 | mObservers.clear(); | 77 | mObservers.clear(); |
78 | 78 | ||
79 | mAttendees.setAutoDelete( true ); | 79 | mAttendees.setAutoDelete( true ); |
80 | } | 80 | } |
81 | 81 | ||
82 | IncidenceBase::~IncidenceBase() | 82 | IncidenceBase::~IncidenceBase() |
83 | { | 83 | { |
84 | } | 84 | } |
85 | 85 | ||
86 | 86 | ||
87 | bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) | 87 | bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) |
88 | { | 88 | { |
89 | // do not compare mSyncStatus and mExternalId | 89 | // do not compare mSyncStatus and mExternalId |
90 | if( i1.attendees().count() != i2.attendees().count() ) { | 90 | if( i1.attendees().count() != i2.attendees().count() ) { |
91 | return false; // no need to check further | 91 | return false; // no need to check further |
92 | } | 92 | } |
93 | if ( i1.attendees().count() > 0 ) { | 93 | if ( i1.attendees().count() > 0 ) { |
94 | Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; | 94 | Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; |
95 | while ( a1 ) { | 95 | while ( a1 ) { |
96 | if ( !( (*a1) == (*a2)) ) | 96 | if ( !( (*a1) == (*a2)) ) |
97 | { | 97 | { |
98 | //qDebug("Attendee not equal "); | 98 | //qDebug("Attendee not equal "); |
99 | return false; | 99 | return false; |
100 | } | 100 | } |
101 | a1 = i1.attendees().next(); | 101 | a1 = i1.attendees().next(); |
102 | a2 = i2.attendees().next(); | 102 | a2 = i2.attendees().next(); |
103 | } | 103 | } |
104 | } | 104 | } |
105 | //if ( i1.dtStart() != i2.dtStart() ) | 105 | //if ( i1.dtStart() != i2.dtStart() ) |
106 | // return false; | 106 | // return false; |
107 | #if 0 | 107 | #if 0 |
108 | qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); | 108 | qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); |
109 | qDebug("1 %d ",i1.duration() == i2.duration() ); | 109 | qDebug("1 %d ",i1.duration() == i2.duration() ); |
110 | qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); | 110 | qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); |
111 | qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); | 111 | qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); |
112 | qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); | 112 | qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); |
113 | qDebug("6 %d ",i1.organizer() == i2.organizer() ); | 113 | qDebug("6 %d ",i1.organizer() == i2.organizer() ); |
114 | 114 | ||
115 | #endif | 115 | #endif |
116 | if ( i1.hasDuration() == i2.hasDuration() ) { | 116 | if ( i1.hasDuration() == i2.hasDuration() ) { |
117 | if ( i1.hasDuration() ) { | 117 | if ( i1.hasDuration() ) { |
118 | if ( i1.duration() != i2.duration() ) | 118 | if ( i1.duration() != i2.duration() ) |
119 | return false; | 119 | return false; |
120 | } | 120 | } |
121 | } else { | 121 | } else { |
122 | return false; | 122 | return false; |
123 | } | 123 | } |
124 | 124 | ||
125 | return ( i1.organizer() == i2.organizer() && | 125 | return ( i1.organizer() == i2.organizer() && |
126 | // i1.uid() == i2.uid() && | 126 | // i1.uid() == i2.uid() && |
127 | // Don't compare lastModified, otherwise the operator is not | 127 | // Don't compare lastModified, otherwise the operator is not |
128 | // of much use. We are not comparing for identity, after all. | 128 | // of much use. We are not comparing for identity, after all. |
129 | i1.doesFloat() == i2.doesFloat() && | 129 | i1.doesFloat() == i2.doesFloat() && |
130 | i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); | 130 | i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); |
131 | // no need to compare mObserver | 131 | // no need to compare mObserver |
132 | } | 132 | } |
133 | 133 | ||
134 | 134 | ||
135 | QDateTime IncidenceBase::getEvenTime( QDateTime dt ) | 135 | QDateTime IncidenceBase::getEvenTime( QDateTime dt ) |
136 | { | 136 | { |
137 | QTime t = dt.time(); | 137 | QTime t = dt.time(); |
138 | dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); | 138 | dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); |
139 | return dt; | 139 | return dt; |
140 | } | 140 | } |
141 | 141 | ||
142 | bool IncidenceBase::isTagged() const | ||
143 | { | ||
144 | return mIsTagged; | ||
145 | } | ||
146 | void IncidenceBase::setTagged( bool b) | ||
147 | { | ||
148 | mIsTagged = b; | ||
149 | } | ||
142 | void IncidenceBase::setCalID( int id ) | 150 | void IncidenceBase::setCalID( int id ) |
143 | { | 151 | { |
144 | if ( mCalID > 0 ) | 152 | if ( mCalID > 0 ) |
145 | updated(); | 153 | updated(); |
146 | mCalID = id; | 154 | mCalID = id; |
147 | } | 155 | } |
148 | int IncidenceBase::calID() const | 156 | int IncidenceBase::calID() const |
149 | { | 157 | { |
150 | return mCalID; | 158 | return mCalID; |
151 | } | 159 | } |
152 | void IncidenceBase::setCalEnabled( bool b ) | 160 | void IncidenceBase::setCalEnabled( bool b ) |
153 | { | 161 | { |
154 | mCalEnabled = b; | 162 | mCalEnabled = b; |
155 | } | 163 | } |
156 | bool IncidenceBase::calEnabled() const | 164 | bool IncidenceBase::calEnabled() const |
157 | { | 165 | { |
158 | return mCalEnabled; | 166 | return mCalEnabled; |
159 | } | 167 | } |
160 | 168 | ||
161 | void IncidenceBase::setAlarmEnabled( bool b ) | 169 | void IncidenceBase::setAlarmEnabled( bool b ) |
162 | { | 170 | { |
163 | mAlarmEnabled = b; | 171 | mAlarmEnabled = b; |
164 | } | 172 | } |
165 | bool IncidenceBase::alarmEnabled() const | 173 | bool IncidenceBase::alarmEnabled() const |
166 | { | 174 | { |
167 | return mAlarmEnabled; | 175 | return mAlarmEnabled; |
168 | } | 176 | } |
169 | 177 | ||
170 | 178 | ||
171 | void IncidenceBase::setUid(const QString &uid) | 179 | void IncidenceBase::setUid(const QString &uid) |
172 | { | 180 | { |
173 | mUid = uid; | 181 | mUid = uid; |
174 | updated(); | 182 | updated(); |
175 | } | 183 | } |
176 | 184 | ||
177 | QString IncidenceBase::uid() const | 185 | QString IncidenceBase::uid() const |
178 | { | 186 | { |
179 | return mUid; | 187 | return mUid; |
180 | } | 188 | } |
181 | 189 | ||
182 | void IncidenceBase::setLastModified(const QDateTime &lm) | 190 | void IncidenceBase::setLastModified(const QDateTime &lm) |
183 | { | 191 | { |
184 | // DON'T! updated() because we call this from | 192 | // DON'T! updated() because we call this from |
185 | // Calendar::updateEvent(). | 193 | // Calendar::updateEvent(). |
186 | mLastModified = getEvenTime(lm); | 194 | mLastModified = getEvenTime(lm); |
187 | //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); | 195 | //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); |
188 | } | 196 | } |
189 | 197 | ||
190 | QDateTime IncidenceBase::lastModified() const | 198 | QDateTime IncidenceBase::lastModified() const |
191 | { | 199 | { |
192 | return mLastModified; | 200 | return mLastModified; |
193 | } | 201 | } |
194 | 202 | ||
195 | void IncidenceBase::setOrganizer(const QString &o) | 203 | void IncidenceBase::setOrganizer(const QString &o) |
196 | { | 204 | { |
197 | // we don't check for readonly here, because it is | 205 | // we don't check for readonly here, because it is |
198 | // possible that by setting the organizer we are changing | 206 | // possible that by setting the organizer we are changing |
199 | // the event's readonly status... | 207 | // the event's readonly status... |
200 | mOrganizer = o; | 208 | mOrganizer = o; |
201 | if (mOrganizer.left(7).upper() == "MAILTO:") | 209 | if (mOrganizer.left(7).upper() == "MAILTO:") |
202 | mOrganizer = mOrganizer.remove(0,7); | 210 | mOrganizer = mOrganizer.remove(0,7); |
203 | 211 | ||
204 | updated(); | 212 | updated(); |
205 | } | 213 | } |
206 | 214 | ||
207 | QString IncidenceBase::organizer() const | 215 | QString IncidenceBase::organizer() const |
208 | { | 216 | { |
209 | return mOrganizer; | 217 | return mOrganizer; |
210 | } | 218 | } |
211 | 219 | ||
212 | void IncidenceBase::setReadOnly( bool readOnly ) | 220 | void IncidenceBase::setReadOnly( bool readOnly ) |
213 | { | 221 | { |
214 | mReadOnly = readOnly; | 222 | mReadOnly = readOnly; |
215 | } | 223 | } |
216 | 224 | ||
217 | void IncidenceBase::setDtStart(const QDateTime &dtStart) | 225 | void IncidenceBase::setDtStart(const QDateTime &dtStart) |
218 | { | 226 | { |
219 | // if (mReadOnly) return; | 227 | // if (mReadOnly) return; |
220 | mDtStart = getEvenTime(dtStart); | 228 | mDtStart = getEvenTime(dtStart); |
221 | updated(); | 229 | updated(); |
222 | } | 230 | } |
223 | 231 | ||
224 | 232 | ||
225 | QDateTime IncidenceBase::dtStart() const | 233 | QDateTime IncidenceBase::dtStart() const |
226 | { | 234 | { |
227 | return mDtStart; | 235 | return mDtStart; |
228 | } | 236 | } |
229 | 237 | ||
230 | QString IncidenceBase::dtStartTimeStr() const | 238 | QString IncidenceBase::dtStartTimeStr() const |
231 | { | 239 | { |
232 | return KGlobal::locale()->formatTime(dtStart().time()); | 240 | return KGlobal::locale()->formatTime(dtStart().time()); |
233 | } | 241 | } |
234 | 242 | ||
235 | QString IncidenceBase::dtStartDateStr(bool shortfmt) const | 243 | QString IncidenceBase::dtStartDateStr(bool shortfmt) const |
236 | { | 244 | { |
237 | return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); | 245 | return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); |
238 | } | 246 | } |
239 | 247 | ||
240 | QString IncidenceBase::dtStartStr(bool shortfmt) const | 248 | QString IncidenceBase::dtStartStr(bool shortfmt) const |
241 | { | 249 | { |
242 | if ( doesFloat() ) | 250 | if ( doesFloat() ) |
243 | return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); | 251 | return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); |
244 | return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); | 252 | return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); |
245 | } | 253 | } |
246 | 254 | ||
247 | 255 | ||
248 | bool IncidenceBase::doesFloat() const | 256 | bool IncidenceBase::doesFloat() const |
249 | { | 257 | { |
250 | return mFloats; | 258 | return mFloats; |
251 | } | 259 | } |
252 | 260 | ||
253 | void IncidenceBase::setFloats(bool f) | 261 | void IncidenceBase::setFloats(bool f) |
254 | { | 262 | { |
255 | if (mReadOnly) return; | 263 | if (mReadOnly) return; |
256 | mFloats = f; | 264 | mFloats = f; |
257 | updated(); | 265 | updated(); |
258 | } | 266 | } |
259 | 267 | ||
260 | 268 | ||
261 | bool IncidenceBase::addAttendee(Attendee *a, bool doupdate) | 269 | bool IncidenceBase::addAttendee(Attendee *a, bool doupdate) |
262 | { | 270 | { |
263 | if (mReadOnly) return false; | 271 | if (mReadOnly) return false; |
264 | if (a->name().left(7).upper() == "MAILTO:") | 272 | if (a->name().left(7).upper() == "MAILTO:") |
265 | a->setName(a->name().remove(0,7)); | 273 | a->setName(a->name().remove(0,7)); |
266 | 274 | ||
267 | QPtrListIterator<Attendee> qli(mAttendees); | 275 | QPtrListIterator<Attendee> qli(mAttendees); |
268 | 276 | ||
269 | qli.toFirst(); | 277 | qli.toFirst(); |
diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index dc6024a..bccf287 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h | |||
@@ -22,162 +22,164 @@ | |||
22 | // | 22 | // |
23 | // Incidence - base class of calendaring components | 23 | // Incidence - base class of calendaring components |
24 | // | 24 | // |
25 | 25 | ||
26 | #include <qdatetime.h> | 26 | #include <qdatetime.h> |
27 | #include <qstringlist.h> | 27 | #include <qstringlist.h> |
28 | #include <qvaluelist.h> | 28 | #include <qvaluelist.h> |
29 | #include <qptrlist.h> | 29 | #include <qptrlist.h> |
30 | 30 | ||
31 | #include "customproperties.h" | 31 | #include "customproperties.h" |
32 | #include "attendee.h" | 32 | #include "attendee.h" |
33 | 33 | ||
34 | namespace KCal { | 34 | namespace KCal { |
35 | 35 | ||
36 | typedef QValueList<QDate> DateList; | 36 | typedef QValueList<QDate> DateList; |
37 | enum IncTypeID { eventID,todoID,journalID,freebusyID }; | 37 | enum IncTypeID { eventID,todoID,journalID,freebusyID }; |
38 | 38 | ||
39 | /** | 39 | /** |
40 | This class provides the base class common to all calendar components. | 40 | This class provides the base class common to all calendar components. |
41 | */ | 41 | */ |
42 | class IncidenceBase : public CustomProperties | 42 | class IncidenceBase : public CustomProperties |
43 | { | 43 | { |
44 | public: | 44 | public: |
45 | class Observer { | 45 | class Observer { |
46 | public: | 46 | public: |
47 | virtual void incidenceUpdated( IncidenceBase * ) = 0; | 47 | virtual void incidenceUpdated( IncidenceBase * ) = 0; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | IncidenceBase(); | 50 | IncidenceBase(); |
51 | IncidenceBase(const IncidenceBase &); | 51 | IncidenceBase(const IncidenceBase &); |
52 | virtual ~IncidenceBase(); | 52 | virtual ~IncidenceBase(); |
53 | 53 | ||
54 | virtual QCString type() const = 0; | 54 | virtual QCString type() const = 0; |
55 | virtual IncTypeID typeID() const = 0; | 55 | virtual IncTypeID typeID() const = 0; |
56 | 56 | ||
57 | /** Set the unique id for the event */ | 57 | /** Set the unique id for the event */ |
58 | void setUid(const QString &); | 58 | void setUid(const QString &); |
59 | /** Return the unique id for the event */ | 59 | /** Return the unique id for the event */ |
60 | QString uid() const; | 60 | QString uid() const; |
61 | 61 | ||
62 | /** Sets the time the incidence was last modified. */ | 62 | /** Sets the time the incidence was last modified. */ |
63 | void setLastModified(const QDateTime &lm); | 63 | void setLastModified(const QDateTime &lm); |
64 | /** Return the time the incidence was last modified. */ | 64 | /** Return the time the incidence was last modified. */ |
65 | QDateTime lastModified() const; | 65 | QDateTime lastModified() const; |
66 | 66 | ||
67 | /** sets the organizer for the event */ | 67 | /** sets the organizer for the event */ |
68 | void setOrganizer(const QString &o); | 68 | void setOrganizer(const QString &o); |
69 | QString organizer() const; | 69 | QString organizer() const; |
70 | 70 | ||
71 | /** Set readonly status. */ | 71 | /** Set readonly status. */ |
72 | virtual void setReadOnly( bool ); | 72 | virtual void setReadOnly( bool ); |
73 | /** Return if the object is read-only. */ | 73 | /** Return if the object is read-only. */ |
74 | bool isReadOnly() const { return mReadOnly; } | 74 | bool isReadOnly() const { return mReadOnly; } |
75 | 75 | ||
76 | /** for setting the event's starting date/time with a QDateTime. */ | 76 | /** for setting the event's starting date/time with a QDateTime. */ |
77 | virtual void setDtStart(const QDateTime &dtStart); | 77 | virtual void setDtStart(const QDateTime &dtStart); |
78 | /** returns an event's starting date/time as a QDateTime. */ | 78 | /** returns an event's starting date/time as a QDateTime. */ |
79 | virtual QDateTime dtStart() const; | 79 | virtual QDateTime dtStart() const; |
80 | /** returns an event's starting time as a string formatted according to the | 80 | /** returns an event's starting time as a string formatted according to the |
81 | users locale settings */ | 81 | users locale settings */ |
82 | QString dtStartTimeStr() const; | 82 | QString dtStartTimeStr() const; |
83 | /** returns an event's starting date as a string formatted according to the | 83 | /** returns an event's starting date as a string formatted according to the |
84 | users locale settings */ | 84 | users locale settings */ |
85 | QString dtStartDateStr(bool shortfmt=true) const; | 85 | QString dtStartDateStr(bool shortfmt=true) const; |
86 | /** returns an event's starting date and time as a string formatted according | 86 | /** returns an event's starting date and time as a string formatted according |
87 | to the users locale settings */ | 87 | to the users locale settings */ |
88 | QString dtStartStr(bool shortfmt=true) const; | 88 | QString dtStartStr(bool shortfmt=true) const; |
89 | 89 | ||
90 | virtual void setDuration(int seconds); | 90 | virtual void setDuration(int seconds); |
91 | int duration() const; | 91 | int duration() const; |
92 | void setHasDuration(bool); | 92 | void setHasDuration(bool); |
93 | bool hasDuration() const; | 93 | bool hasDuration() const; |
94 | 94 | ||
95 | /** Return true or false depending on whether the incidence "floats," | 95 | /** Return true or false depending on whether the incidence "floats," |
96 | * i.e. has a date but no time attached to it. */ | 96 | * i.e. has a date but no time attached to it. */ |
97 | bool doesFloat() const; | 97 | bool doesFloat() const; |
98 | /** Set whether the incidence floats, i.e. has a date but no time attached to it. */ | 98 | /** Set whether the incidence floats, i.e. has a date but no time attached to it. */ |
99 | void setFloats(bool f); | 99 | void setFloats(bool f); |
100 | 100 | ||
101 | /** | 101 | /** |
102 | Add Attendee to this incidence. IncidenceBase takes ownership of the | 102 | Add Attendee to this incidence. IncidenceBase takes ownership of the |
103 | Attendee object. | 103 | Attendee object. |
104 | */ | 104 | */ |
105 | bool addAttendee(Attendee *a, bool doupdate=true ); | 105 | bool addAttendee(Attendee *a, bool doupdate=true ); |
106 | // void removeAttendee(Attendee *a); | 106 | // void removeAttendee(Attendee *a); |
107 | // void removeAttendee(const char *n); | 107 | // void removeAttendee(const char *n); |
108 | /** Remove all Attendees. */ | 108 | /** Remove all Attendees. */ |
109 | void clearAttendees(); | 109 | void clearAttendees(); |
110 | /** Return list of attendees. */ | 110 | /** Return list of attendees. */ |
111 | QPtrList<Attendee> attendees() const { return mAttendees; }; | 111 | QPtrList<Attendee> attendees() const { return mAttendees; }; |
112 | /** Return number of attendees. */ | 112 | /** Return number of attendees. */ |
113 | int attendeeCount() const { return mAttendees.count(); }; | 113 | int attendeeCount() const { return mAttendees.count(); }; |
114 | /** Return the Attendee with this email */ | 114 | /** Return the Attendee with this email */ |
115 | Attendee* attendeeByMail(const QString &); | 115 | Attendee* attendeeByMail(const QString &); |
116 | /** Return first Attendee with one of this emails */ | 116 | /** Return first Attendee with one of this emails */ |
117 | Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null); | 117 | Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null); |
118 | 118 | ||
119 | /** pilot syncronization states */ | 119 | /** pilot syncronization states */ |
120 | enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 }; | 120 | enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 }; |
121 | /** Set synchronisation satus. */ | 121 | /** Set synchronisation satus. */ |
122 | void setSyncStatus(int stat); | 122 | void setSyncStatus(int stat); |
123 | /** Return synchronisation status. */ | 123 | /** Return synchronisation status. */ |
124 | int syncStatus() const; | 124 | int syncStatus() const; |
125 | 125 | ||
126 | /** Set Pilot Id. */ | 126 | /** Set Pilot Id. */ |
127 | void setPilotId(int id); | 127 | void setPilotId(int id); |
128 | /** Return Pilot Id. */ | 128 | /** Return Pilot Id. */ |
129 | int pilotId() const; | 129 | int pilotId() const; |
130 | 130 | ||
131 | void setTempSyncStat(int id); | 131 | void setTempSyncStat(int id); |
132 | int tempSyncStat() const; | 132 | int tempSyncStat() const; |
133 | void setIDStr( const QString & ); | 133 | void setIDStr( const QString & ); |
134 | QString IDStr() const; | 134 | QString IDStr() const; |
135 | void setID( const QString &, const QString & ); | 135 | void setID( const QString &, const QString & ); |
136 | QString getID( const QString & ); | 136 | QString getID( const QString & ); |
137 | void setCsum( const QString &, const QString & ); | 137 | void setCsum( const QString &, const QString & ); |
138 | QString getCsum( const QString & ); | 138 | QString getCsum( const QString & ); |
139 | void removeID(const QString &); | 139 | void removeID(const QString &); |
140 | 140 | ||
141 | void registerObserver( Observer * ); | 141 | void registerObserver( Observer * ); |
142 | void unRegisterObserver( Observer * ); | 142 | void unRegisterObserver( Observer * ); |
143 | void updated(); | 143 | void updated(); |
144 | void setCalID( int id ); | 144 | void setCalID( int id ); |
145 | int calID() const; | 145 | int calID() const; |
146 | void setCalEnabled( bool ); | 146 | void setCalEnabled( bool ); |
147 | bool calEnabled() const; | 147 | bool calEnabled() const; |
148 | void setAlarmEnabled( bool ); | 148 | void setAlarmEnabled( bool ); |
149 | bool alarmEnabled() const; | 149 | bool alarmEnabled() const; |
150 | 150 | bool isTagged() const; | |
151 | void setTagged( bool ); | ||
151 | protected: | 152 | protected: |
153 | bool mIsTagged; | ||
152 | QDateTime mDtStart; | 154 | QDateTime mDtStart; |
153 | bool mReadOnly; | 155 | bool mReadOnly; |
154 | QDateTime getEvenTime( QDateTime ); | 156 | QDateTime getEvenTime( QDateTime ); |
155 | 157 | ||
156 | private: | 158 | private: |
157 | // base components | 159 | // base components |
158 | QString mOrganizer; | 160 | QString mOrganizer; |
159 | QString mUid; | 161 | QString mUid; |
160 | int mCalID; | 162 | int mCalID; |
161 | bool mCalEnabled; | 163 | bool mCalEnabled; |
162 | bool mAlarmEnabled; | 164 | bool mAlarmEnabled; |
163 | QDateTime mLastModified; | 165 | QDateTime mLastModified; |
164 | QPtrList<Attendee> mAttendees; | 166 | QPtrList<Attendee> mAttendees; |
165 | 167 | ||
166 | bool mFloats; | 168 | bool mFloats; |
167 | 169 | ||
168 | int mDuration; | 170 | int mDuration; |
169 | bool mHasDuration; | 171 | bool mHasDuration; |
170 | QString mExternalId; | 172 | QString mExternalId; |
171 | int mTempSyncStat; | 173 | int mTempSyncStat; |
172 | 174 | ||
173 | // PILOT SYNCHRONIZATION STUFF | 175 | // PILOT SYNCHRONIZATION STUFF |
174 | int mPilotId; // unique id for pilot sync | 176 | int mPilotId; // unique id for pilot sync |
175 | int mSyncStatus; // status (for sync) | 177 | int mSyncStatus; // status (for sync) |
176 | 178 | ||
177 | QPtrList<Observer> mObservers; | 179 | QPtrList<Observer> mObservers; |
178 | }; | 180 | }; |
179 | 181 | ||
180 | bool operator==( const IncidenceBase&, const IncidenceBase& ); | 182 | bool operator==( const IncidenceBase&, const IncidenceBase& ); |
181 | } | 183 | } |
182 | 184 | ||
183 | #endif | 185 | #endif |