-rw-r--r-- | bin/kdepim/WhatsNew.txt | 2 | ||||
-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 14 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 80 | ||||
-rw-r--r-- | korganizer/calendarview.h | 4 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 71 |
5 files changed, 142 insertions, 29 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index 79de197..814c541 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt | |||
@@ -1,39 +1,41 @@ | |||
1 | Info about the changes in new versions of KDE-Pim/Pi | 1 | Info about the changes in new versions of KDE-Pim/Pi |
2 | 2 | ||
3 | ********** VERSION 2.1.14 ************ | 3 | ********** VERSION 2.1.14 ************ |
4 | 4 | ||
5 | Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done. | 5 | Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done. |
6 | Added a button to add a subtodo quickly. | 6 | Added a button to add a subtodo quickly. |
7 | 7 | ||
8 | Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q" ). | ||
9 | |||
8 | 10 | ||
9 | ********** VERSION 2.1.13 ************ | 11 | ********** VERSION 2.1.13 ************ |
10 | 12 | ||
11 | Fixed a problem in KA/Pi search. | 13 | Fixed a problem in KA/Pi search. |
12 | Fixed some minor problems in KO/Pi. | 14 | Fixed some minor problems in KO/Pi. |
13 | Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. | 15 | Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. |
14 | 16 | ||
15 | Fixed memory usage problems in KA/Pi: | 17 | Fixed memory usage problems in KA/Pi: |
16 | When loading data KA/Pi did load the file data twice. | 18 | When loading data KA/Pi did load the file data twice. |
17 | Example: | 19 | Example: |
18 | A 600k file did consume 1200k memory during loading process. | 20 | A 600k file did consume 1200k memory during loading process. |
19 | This is fixed, it does now consume only 600k during loading process. | 21 | This is fixed, it does now consume only 600k during loading process. |
20 | When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. | 22 | When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. |
21 | This is fixed. | 23 | This is fixed. |
22 | Example: | 24 | Example: |
23 | Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram. | 25 | Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram. |
24 | When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system. | 26 | When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system. |
25 | Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process. | 27 | Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process. |
26 | Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. | 28 | Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. |
27 | The saving of data may be a bit slower now. | 29 | The saving of data may be a bit slower now. |
28 | 30 | ||
29 | Fixed memory usage problems in KO/Pi: | 31 | Fixed memory usage problems in KO/Pi: |
30 | When KO/Pi did save the data to file, it did not release the used buffers after saving. | 32 | When KO/Pi did save the data to file, it did not release the used buffers after saving. |
31 | The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. | 33 | The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. |
32 | This is fixed. | 34 | This is fixed. |
33 | Example: | 35 | Example: |
34 | When saving a 400k file KO/Pi do now use 400k less memory now. | 36 | When saving a 400k file KO/Pi do now use 400k less memory now. |
35 | 37 | ||
36 | Optimized memory usage in KO/Pi Agenda view: | 38 | Optimized memory usage in KO/Pi Agenda view: |
37 | KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view. | 39 | KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view. |
38 | These buffers were not made smaller (i.e. downsized) because of performance reasons. | 40 | These buffers were not made smaller (i.e. downsized) because of performance reasons. |
39 | The handling of these buffers are now much smarter: | 41 | The handling of these buffers are now much smarter: |
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index bcc23dc..b225594 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt | |||
@@ -1465,42 +1465,56 @@ | |||
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" }, | ||
1498 | { "All events","Alle Termine" }, | ||
1499 | { "Allday events","Ganztagestermine" }, | ||
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" }, | ||
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 " }, | ||
1504 | { "","" }, | ||
1505 | { "","" }, | ||
1506 | { "","" }, | ||
1507 | { "","" }, | ||
1508 | { "","" }, | ||
1509 | { "","" }, | ||
1510 | { "","" }, | ||
1497 | { "","" }, | 1511 | { "","" }, |
1498 | { "","" }, | 1512 | { "","" }, |
1499 | { "","" }, | 1513 | { "","" }, |
1500 | { "","" }, | 1514 | { "","" }, |
1501 | { "","" }, | 1515 | { "","" }, |
1502 | { "","" }, | 1516 | { "","" }, |
1503 | { "","" }, | 1517 | { "","" }, |
1504 | 1518 | ||
1505 | 1519 | ||
1506 | 1520 | ||
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index bc1c0c7..9a114d0 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -625,64 +625,130 @@ void CalendarView::init() | |||
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 ) | ||
658 | { | ||
659 | QDate start = mNavigator->selectedDates().first().addDays(1); | ||
660 | QDate end = start.addDays( 365*2); | ||
661 | while ( start < end ) { | ||
662 | QPtrList<Event> eventList = calendar()->events( start ); | ||
663 | Event * ev = eventList.first(); | ||
664 | QPtrList<Event> test = eventList; | ||
665 | while ( ev ) { | ||
666 | //qDebug("found %d on %s ", eventList.count(), start.toString().latin1()); | ||
667 | Event * t_ev = test.first(); | ||
668 | QDateTime es = ev->dtStart(); | ||
669 | QDateTime ee = ev->dtEnd(); | ||
670 | if ( ev->doesFloat() ) | ||
671 | ee = ee.addDays( 1 ); | ||
672 | if ( ! all ) { | ||
673 | if ( ev->doesFloat() != allday ) | ||
674 | t_ev = 0; | ||
675 | } | ||
676 | while ( t_ev ) { | ||
677 | bool skip = false; | ||
678 | if ( ! all ) { | ||
679 | if ( t_ev->doesFloat() != allday ) | ||
680 | skip = true; | ||
681 | } | ||
682 | if ( !skip && ev != t_ev ) { | ||
683 | QDateTime ets = t_ev->dtStart(); | ||
684 | QDateTime ete = t_ev->dtEnd(); | ||
685 | if ( t_ev->doesFloat() ) | ||
686 | ete = ete.addDays( 1 ); | ||
687 | //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() ); | ||
688 | if ( es < ete && ets < ee ) { | ||
689 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
690 | mViewManager->showDayView(); | ||
691 | mNavigator->slotDaySelect( start ); | ||
692 | int hour = es.time().hour(); | ||
693 | if ( ets > es ) | ||
694 | hour = ets.time().hour(); | ||
695 | mViewManager->agendaView()->setStartHour( hour ); | ||
696 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) ); | ||
697 | return; | ||
698 | } | ||
699 | } | ||
700 | t_ev = test.next(); | ||
701 | } | ||
702 | ev = eventList.next(); | ||
703 | } | ||
704 | start = start.addDays( 1 ); | ||
705 | } | ||
706 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); | ||
707 | qDebug("No conflict found "); | ||
708 | } | ||
709 | |||
710 | void CalendarView::conflictAll() | ||
711 | { | ||
712 | nextConflict ( true, true ); | ||
713 | } | ||
714 | void CalendarView::conflictAllday() | ||
715 | { | ||
716 | nextConflict ( false, true ); | ||
717 | } | ||
718 | void CalendarView::conflictNotAll() | ||
719 | { | ||
720 | nextConflict ( false, false ); | ||
721 | } | ||
722 | |||
657 | void CalendarView::setCalReadOnly( int id, bool readO ) | 723 | void CalendarView::setCalReadOnly( int id, bool readO ) |
658 | { | 724 | { |
659 | if ( readO ) { | 725 | if ( readO ) { |
660 | emit save(); | 726 | emit save(); |
661 | } | 727 | } |
662 | mCalendar->setReadOnly( id, readO ); | 728 | mCalendar->setReadOnly( id, readO ); |
663 | } | 729 | } |
664 | void CalendarView::setScrollBarStep(int val ) | 730 | void CalendarView::setScrollBarStep(int val ) |
665 | { | 731 | { |
666 | #ifdef DESKTOP_VERSION | 732 | #ifdef DESKTOP_VERSION |
667 | mDateScrollBar->setLineStep ( val ); | 733 | mDateScrollBar->setLineStep ( val ); |
668 | #endif | 734 | #endif |
669 | } | 735 | } |
670 | void CalendarView::scrollBarValue(int val ) | 736 | void CalendarView::scrollBarValue(int val ) |
671 | { | 737 | { |
672 | #ifdef DESKTOP_VERSION | 738 | #ifdef DESKTOP_VERSION |
673 | if ( QApplication::desktop()->width() < 800 ) return; | 739 | if ( QApplication::desktop()->width() < 800 ) return; |
674 | static bool block = false; | 740 | static bool block = false; |
675 | if ( block ) return; | 741 | if ( block ) return; |
676 | block = true; | 742 | block = true; |
677 | int count = mNavigator->selectedDates().count(); | 743 | int count = mNavigator->selectedDates().count(); |
678 | int day = mNavigator->selectedDates().first().dayOfYear(); | 744 | int day = mNavigator->selectedDates().first().dayOfYear(); |
679 | int stepdays = val; | 745 | int stepdays = val; |
680 | if ( mDateScrollBar->lineStep () <= count ) { | 746 | if ( mDateScrollBar->lineStep () <= count ) { |
681 | //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); | 747 | //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); |
682 | //qDebug("VAL %d ",val ); | 748 | //qDebug("VAL %d ",val ); |
683 | stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); | 749 | stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); |
684 | stepdays = day+stepdays; | 750 | stepdays = day+stepdays; |
685 | if ( stepdays < 0 ) stepdays = 0; | 751 | if ( stepdays < 0 ) stepdays = 0; |
686 | } | 752 | } |
687 | if ( stepdays == day ) { | 753 | if ( stepdays == day ) { |
688 | block = false; | 754 | block = false; |
@@ -3133,65 +3199,65 @@ void CalendarView::beamIncidence() | |||
3133 | Incidence *incidence = currentSelection(); | 3199 | Incidence *incidence = currentSelection(); |
3134 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 3200 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
3135 | if ( incidence ) { | 3201 | if ( incidence ) { |
3136 | beamIncidence(incidence); | 3202 | beamIncidence(incidence); |
3137 | } | 3203 | } |
3138 | } | 3204 | } |
3139 | void CalendarView::toggleCancelIncidence() | 3205 | void CalendarView::toggleCancelIncidence() |
3140 | { | 3206 | { |
3141 | Incidence *incidence = currentSelection(); | 3207 | Incidence *incidence = currentSelection(); |
3142 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 3208 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
3143 | if ( incidence ) { | 3209 | if ( incidence ) { |
3144 | cancelIncidence(incidence); | 3210 | cancelIncidence(incidence); |
3145 | } | 3211 | } |
3146 | } | 3212 | } |
3147 | 3213 | ||
3148 | 3214 | ||
3149 | void CalendarView::cancelIncidence(Incidence * inc ) | 3215 | void CalendarView::cancelIncidence(Incidence * inc ) |
3150 | { | 3216 | { |
3151 | inc->setCancelled( ! inc->cancelled() ); | 3217 | inc->setCancelled( ! inc->cancelled() ); |
3152 | changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); | 3218 | changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); |
3153 | updateView(); | 3219 | updateView(); |
3154 | } | 3220 | } |
3155 | void CalendarView::cloneIncidence(Incidence * orgInc ) | 3221 | void CalendarView::cloneIncidence(Incidence * orgInc ) |
3156 | { | 3222 | { |
3157 | Incidence * newInc = orgInc->clone(); | 3223 | Incidence * newInc = orgInc->clone(); |
3158 | newInc->recreate(); | 3224 | newInc->recreate(); |
3159 | 3225 | ||
3160 | if ( newInc->typeID() == todoID ) { | 3226 | if ( newInc->typeID() == todoID ) { |
3161 | Todo* t = (Todo*) newInc; | 3227 | Todo* t = (Todo*) newInc; |
3162 | bool cloneSub = false; | 3228 | bool cloneSub = false; |
3163 | if ( orgInc->relations().count() ) { | 3229 | if ( orgInc->relations().count() ) { |
3164 | int result = KMessageBox::warningYesNoCancel(this, | 3230 | int result = KMessageBox::warningYesNoCancel(this, |
3165 | i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( newInc->summary().left ( 25 ) ), | 3231 | i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), |
3166 | i18n("Todo has subtodos"), | 3232 | i18n("Todo has subtodos"), |
3167 | i18n("Yes"), | 3233 | i18n("Yes"), |
3168 | i18n("No")); | 3234 | i18n("No")); |
3169 | 3235 | ||
3170 | if ( result == KMessageBox::Cancel ) { | 3236 | if ( result == KMessageBox::Cancel ) { |
3171 | delete t; | 3237 | delete t; |
3172 | return; | 3238 | return; |
3173 | } | 3239 | } |
3174 | if (result == KMessageBox::Yes) cloneSub = true; | 3240 | if (result == KMessageBox::Yes) cloneSub = true; |
3175 | } | 3241 | } |
3176 | showTodoEditor(); | 3242 | showTodoEditor(); |
3177 | mTodoEditor->editTodo( t ); | 3243 | mTodoEditor->editTodo( t ); |
3178 | if ( mTodoEditor->exec() ) { | 3244 | if ( mTodoEditor->exec() ) { |
3179 | if ( cloneSub ) { | 3245 | if ( cloneSub ) { |
3180 | orgInc->cloneRelations( t ); | 3246 | orgInc->cloneRelations( t ); |
3181 | mCalendar->addIncidenceBranch( t ); | 3247 | mCalendar->addIncidenceBranch( t ); |
3182 | updateView(); | 3248 | updateView(); |
3183 | 3249 | ||
3184 | } else { | 3250 | } else { |
3185 | mCalendar->addTodo( t ); | 3251 | mCalendar->addTodo( t ); |
3186 | updateView(); | 3252 | updateView(); |
3187 | } | 3253 | } |
3188 | } else { | 3254 | } else { |
3189 | delete t; | 3255 | delete t; |
3190 | } | 3256 | } |
3191 | } | 3257 | } |
3192 | else if ( newInc->typeID() == eventID ) { | 3258 | else if ( newInc->typeID() == eventID ) { |
3193 | Event* e = (Event*) newInc; | 3259 | Event* e = (Event*) newInc; |
3194 | showEventEditor(); | 3260 | showEventEditor(); |
3195 | mEventEditor->editEvent( e ); | 3261 | mEventEditor->editEvent( e ); |
3196 | if ( mEventEditor->exec() ) { | 3262 | if ( mEventEditor->exec() ) { |
3197 | mCalendar->addEvent( e ); | 3263 | mCalendar->addEvent( e ); |
@@ -3471,186 +3537,186 @@ void CalendarView::appointment_delete() | |||
3471 | } | 3537 | } |
3472 | 3538 | ||
3473 | if (!anEvent) { | 3539 | if (!anEvent) { |
3474 | KNotifyClient::beep(); | 3540 | KNotifyClient::beep(); |
3475 | return; | 3541 | return; |
3476 | } | 3542 | } |
3477 | 3543 | ||
3478 | deleteEvent(anEvent); | 3544 | deleteEvent(anEvent); |
3479 | } | 3545 | } |
3480 | 3546 | ||
3481 | void CalendarView::todo_resub( Todo * parent, Todo * sub ) | 3547 | void CalendarView::todo_resub( Todo * parent, Todo * sub ) |
3482 | { | 3548 | { |
3483 | if (!sub) return; | 3549 | if (!sub) return; |
3484 | if ( sub->relatedTo() == parent ) | 3550 | if ( sub->relatedTo() == parent ) |
3485 | return; | 3551 | return; |
3486 | sub->setRelatedTo(parent); | 3552 | sub->setRelatedTo(parent); |
3487 | sub->updated(); | 3553 | sub->updated(); |
3488 | setModified(true); | 3554 | setModified(true); |
3489 | updateView(); | 3555 | updateView(); |
3490 | } | 3556 | } |
3491 | void CalendarView::todo_unsub(Todo *anTodo ) | 3557 | void CalendarView::todo_unsub(Todo *anTodo ) |
3492 | { | 3558 | { |
3493 | todo_resub( 0, anTodo ); | 3559 | todo_resub( 0, anTodo ); |
3494 | } | 3560 | } |
3495 | 3561 | ||
3496 | void CalendarView::deleteTodo(Todo *todo) | 3562 | void CalendarView::deleteTodo(Todo *todo) |
3497 | { | 3563 | { |
3498 | if (!todo) { | 3564 | if (!todo) { |
3499 | KNotifyClient::beep(); | 3565 | KNotifyClient::beep(); |
3500 | return; | 3566 | return; |
3501 | } | 3567 | } |
3502 | if (KOPrefs::instance()->mConfirm) { | 3568 | if (KOPrefs::instance()->mConfirm) { |
3503 | QString text = todo->summary().left(20); | 3569 | QString text = KGlobal::formatMessage ( todo->summary(),0 ); |
3504 | if (!todo->relations().isEmpty()) { | 3570 | if (!todo->relations().isEmpty()) { |
3505 | text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); | 3571 | text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); |
3506 | 3572 | ||
3507 | } | 3573 | } |
3508 | switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { | 3574 | switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { |
3509 | case KMessageBox::Continue: // OK | 3575 | case KMessageBox::Continue: // OK |
3510 | bool deleteT = false; | 3576 | bool deleteT = false; |
3511 | if (!todo->relations().isEmpty()) { | 3577 | if (!todo->relations().isEmpty()) { |
3512 | deleteT = removeCompletedSubTodos( todo ); | 3578 | deleteT = removeCompletedSubTodos( todo ); |
3513 | } | 3579 | } |
3514 | // deleteT == true: todo already deleted in removeCompletedSubTodos | 3580 | // deleteT == true: todo already deleted in removeCompletedSubTodos |
3515 | if ( !deleteT ) { | 3581 | if ( !deleteT ) { |
3516 | checkExternalId( todo ); | 3582 | checkExternalId( todo ); |
3517 | calendar()->deleteTodo(todo); | 3583 | calendar()->deleteTodo(todo); |
3518 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); | 3584 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); |
3519 | updateView(); | 3585 | updateView(); |
3520 | } | 3586 | } |
3521 | break; | 3587 | break; |
3522 | } // switch | 3588 | } // switch |
3523 | } else { | 3589 | } else { |
3524 | checkExternalId( todo ); | 3590 | checkExternalId( todo ); |
3525 | mCalendar->deleteTodo(todo); | 3591 | mCalendar->deleteTodo(todo); |
3526 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); | 3592 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); |
3527 | updateView(); | 3593 | updateView(); |
3528 | } | 3594 | } |
3529 | 3595 | ||
3530 | emit updateSearchDialog(); | 3596 | emit updateSearchDialog(); |
3531 | } | 3597 | } |
3532 | void CalendarView::deleteJournal(Journal *jour) | 3598 | void CalendarView::deleteJournal(Journal *jour) |
3533 | { | 3599 | { |
3534 | if (!jour) { | 3600 | if (!jour) { |
3535 | KNotifyClient::beep(); | 3601 | KNotifyClient::beep(); |
3536 | return; | 3602 | return; |
3537 | } | 3603 | } |
3538 | if (KOPrefs::instance()->mConfirm) { | 3604 | if (KOPrefs::instance()->mConfirm) { |
3539 | 3605 | ||
3540 | QString des; | 3606 | QString des; |
3541 | if ( !jour->summary().isEmpty() ) { | 3607 | if ( !jour->summary().isEmpty() ) { |
3542 | des = jour->summary(); | 3608 | des = jour->summary(); |
3543 | } else { | 3609 | } else { |
3544 | des = jour->description().left(30); | 3610 | des = jour->description().left(30); |
3545 | des = des.simplifyWhiteSpace (); | 3611 | des = des.simplifyWhiteSpace (); |
3546 | des.replace (QRegExp ("\\n"),"" ); | 3612 | des.replace (QRegExp ("\\n"),"" ); |
3547 | des.replace (QRegExp ("\\r"),"" ); | 3613 | des.replace (QRegExp ("\\r"),"" ); |
3548 | } | 3614 | } |
3549 | switch (msgItemDelete( i18n("Journal:") +"\n"+des.left(20))) { | 3615 | switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { |
3550 | case KMessageBox::Continue: // OK | 3616 | case KMessageBox::Continue: // OK |
3551 | calendar()->deleteJournal(jour); | 3617 | calendar()->deleteJournal(jour); |
3552 | updateView(); | 3618 | updateView(); |
3553 | break; | 3619 | break; |
3554 | } // switch | 3620 | } // switch |
3555 | } else { | 3621 | } else { |
3556 | calendar()->deleteJournal(jour);; | 3622 | calendar()->deleteJournal(jour);; |
3557 | updateView(); | 3623 | updateView(); |
3558 | } | 3624 | } |
3559 | emit updateSearchDialog(); | 3625 | emit updateSearchDialog(); |
3560 | } | 3626 | } |
3561 | 3627 | ||
3562 | void CalendarView::deleteEvent(Event *anEvent) | 3628 | void CalendarView::deleteEvent(Event *anEvent) |
3563 | { | 3629 | { |
3564 | if (!anEvent) { | 3630 | if (!anEvent) { |
3565 | KNotifyClient::beep(); | 3631 | KNotifyClient::beep(); |
3566 | return; | 3632 | return; |
3567 | } | 3633 | } |
3568 | 3634 | ||
3569 | if (anEvent->recurrence()->doesRecur()) { | 3635 | if (anEvent->recurrence()->doesRecur()) { |
3570 | QDate itemDate = mViewManager->currentSelectionDate(); | 3636 | QDate itemDate = mViewManager->currentSelectionDate(); |
3571 | int km; | 3637 | int km; |
3572 | if (!itemDate.isValid()) { | 3638 | if (!itemDate.isValid()) { |
3573 | //kdDebug() << "Date Not Valid" << endl; | 3639 | //kdDebug() << "Date Not Valid" << endl; |
3574 | if (KOPrefs::instance()->mConfirm) { | 3640 | if (KOPrefs::instance()->mConfirm) { |
3575 | km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + | 3641 | km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + |
3576 | i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), | 3642 | i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), |
3577 | i18n("KO/Pi Confirmation"),i18n("Delete All")); | 3643 | i18n("KO/Pi Confirmation"),i18n("Delete All")); |
3578 | if ( km == KMessageBox::Continue ) | 3644 | if ( km == KMessageBox::Continue ) |
3579 | km = KMessageBox::No; // No = all below | 3645 | km = KMessageBox::No; // No = all below |
3580 | } else | 3646 | } else |
3581 | km = KMessageBox::No; | 3647 | km = KMessageBox::No; |
3582 | } else { | 3648 | } else { |
3583 | km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + | 3649 | km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + |
3584 | i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ | 3650 | i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ |
3585 | KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), | 3651 | KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), |
3586 | i18n("KO/Pi Confirmation"),i18n("Current"), | 3652 | i18n("KO/Pi Confirmation"),i18n("Current"), |
3587 | i18n("All")); | 3653 | i18n("All")); |
3588 | } | 3654 | } |
3589 | switch(km) { | 3655 | switch(km) { |
3590 | 3656 | ||
3591 | case KMessageBox::No: // Continue // all | 3657 | case KMessageBox::No: // Continue // all |
3592 | //qDebug("KMessageBox::No "); | 3658 | //qDebug("KMessageBox::No "); |
3593 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) | 3659 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) |
3594 | schedule(Scheduler::Cancel,anEvent); | 3660 | schedule(Scheduler::Cancel,anEvent); |
3595 | 3661 | ||
3596 | checkExternalId( anEvent); | 3662 | checkExternalId( anEvent); |
3597 | mCalendar->deleteEvent(anEvent); | 3663 | mCalendar->deleteEvent(anEvent); |
3598 | changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); | 3664 | changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); |
3599 | break; | 3665 | break; |
3600 | 3666 | ||
3601 | // Disabled because it does not work | 3667 | // Disabled because it does not work |
3602 | //#if 0 | 3668 | //#if 0 |
3603 | case KMessageBox::Yes: // just this one | 3669 | case KMessageBox::Yes: // just this one |
3604 | //QDate qd = mNavigator->selectedDates().first(); | 3670 | //QDate qd = mNavigator->selectedDates().first(); |
3605 | //if (!qd.isValid()) { | 3671 | //if (!qd.isValid()) { |
3606 | // kdDebug() << "no date selected, or invalid date" << endl; | 3672 | // kdDebug() << "no date selected, or invalid date" << endl; |
3607 | // KNotifyClient::beep(); | 3673 | // KNotifyClient::beep(); |
3608 | // return; | 3674 | // return; |
3609 | //} | 3675 | //} |
3610 | //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); | 3676 | //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); |
3611 | if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { | 3677 | if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { |
3612 | anEvent->addExDate(itemDate); | 3678 | anEvent->addExDate(itemDate); |
3613 | int duration = anEvent->recurrence()->duration(); | 3679 | int duration = anEvent->recurrence()->duration(); |
3614 | if ( duration > 0 ) { | 3680 | if ( duration > 0 ) { |
3615 | anEvent->recurrence()->setDuration( duration - 1 ); | 3681 | anEvent->recurrence()->setDuration( duration - 1 ); |
3616 | } | 3682 | } |
3617 | changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); | 3683 | changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); |
3618 | } | 3684 | } |
3619 | break; | 3685 | break; |
3620 | //#endif | 3686 | //#endif |
3621 | } // switch | 3687 | } // switch |
3622 | } else { | 3688 | } else { |
3623 | if (KOPrefs::instance()->mConfirm) { | 3689 | if (KOPrefs::instance()->mConfirm) { |
3624 | switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + | 3690 | switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + |
3625 | i18n("\nAre you sure you want\nto delete this event?"), | 3691 | i18n("\nAre you sure you want\nto delete this event?"), |
3626 | i18n("KO/Pi Confirmation"),i18n("Delete"))) { | 3692 | i18n("KO/Pi Confirmation"),i18n("Delete"))) { |
3627 | case KMessageBox::Continue: // OK | 3693 | case KMessageBox::Continue: // OK |
3628 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) | 3694 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) |
3629 | schedule(Scheduler::Cancel,anEvent); | 3695 | schedule(Scheduler::Cancel,anEvent); |
3630 | checkExternalId( anEvent); | 3696 | checkExternalId( anEvent); |
3631 | mCalendar->deleteEvent(anEvent); | 3697 | mCalendar->deleteEvent(anEvent); |
3632 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); | 3698 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); |
3633 | break; | 3699 | break; |
3634 | } // switch | 3700 | } // switch |
3635 | } else { | 3701 | } else { |
3636 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) | 3702 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) |
3637 | schedule(Scheduler::Cancel,anEvent); | 3703 | schedule(Scheduler::Cancel,anEvent); |
3638 | checkExternalId( anEvent); | 3704 | checkExternalId( anEvent); |
3639 | mCalendar->deleteEvent(anEvent); | 3705 | mCalendar->deleteEvent(anEvent); |
3640 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); | 3706 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); |
3641 | } | 3707 | } |
3642 | } // if-else | 3708 | } // if-else |
3643 | emit updateSearchDialog(); | 3709 | emit updateSearchDialog(); |
3644 | } | 3710 | } |
3645 | 3711 | ||
3646 | bool CalendarView::deleteEvent(const QString &uid) | 3712 | bool CalendarView::deleteEvent(const QString &uid) |
3647 | { | 3713 | { |
3648 | Event *ev = mCalendar->event(uid); | 3714 | Event *ev = mCalendar->event(uid); |
3649 | if (ev) { | 3715 | if (ev) { |
3650 | deleteEvent(ev); | 3716 | deleteEvent(ev); |
3651 | return true; | 3717 | return true; |
3652 | } else { | 3718 | } else { |
3653 | return false; | 3719 | return false; |
3654 | } | 3720 | } |
3655 | } | 3721 | } |
3656 | 3722 | ||
@@ -4551,65 +4617,65 @@ bool CalendarView::syncExternal(KSyncManager* manager, QString resource) | |||
4551 | if ( manager != mSyncManager) | 4617 | if ( manager != mSyncManager) |
4552 | qDebug("KO: Internal error-2. SyncManager mismatch "); | 4618 | qDebug("KO: Internal error-2. SyncManager mismatch "); |
4553 | mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); | 4619 | mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); |
4554 | mCurrentSyncName = mSyncManager->getCurrentSyncName(); | 4620 | mCurrentSyncName = mSyncManager->getCurrentSyncName(); |
4555 | if ( resource == "sharp" ) | 4621 | if ( resource == "sharp" ) |
4556 | syncExternal( 0 ); | 4622 | syncExternal( 0 ); |
4557 | if ( resource == "phone" ) | 4623 | if ( resource == "phone" ) |
4558 | syncExternal( 1 ); | 4624 | syncExternal( 1 ); |
4559 | // pending setmodified | 4625 | // pending setmodified |
4560 | return true; | 4626 | return true; |
4561 | } | 4627 | } |
4562 | void CalendarView::setSyncManager(KSyncManager* manager) | 4628 | void CalendarView::setSyncManager(KSyncManager* manager) |
4563 | { | 4629 | { |
4564 | mSyncManager = manager; | 4630 | mSyncManager = manager; |
4565 | } | 4631 | } |
4566 | 4632 | ||
4567 | void CalendarView::removeSyncInfo( QString syncProfile) | 4633 | void CalendarView::removeSyncInfo( QString syncProfile) |
4568 | { | 4634 | { |
4569 | qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); | 4635 | qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); |
4570 | mCalendar->removeSyncInfo( syncProfile ); | 4636 | mCalendar->removeSyncInfo( syncProfile ); |
4571 | 4637 | ||
4572 | } | 4638 | } |
4573 | 4639 | ||
4574 | void CalendarView::undo_delete() | 4640 | void CalendarView::undo_delete() |
4575 | { | 4641 | { |
4576 | //qDebug("undo_delete() "); | 4642 | //qDebug("undo_delete() "); |
4577 | Incidence* undo = mCalendar->undoIncidence(); | 4643 | Incidence* undo = mCalendar->undoIncidence(); |
4578 | if ( !undo ) { | 4644 | if ( !undo ) { |
4579 | KMessageBox::sorry(this,i18n("There is nothing to undo!"), | 4645 | KMessageBox::sorry(this,i18n("There is nothing to undo!"), |
4580 | i18n("KO/Pi")); | 4646 | i18n("KO/Pi")); |
4581 | return; | 4647 | return; |
4582 | } | 4648 | } |
4583 | if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + | 4649 | if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + |
4584 | i18n("\nAre you sure you want\nto restore this?"), | 4650 | i18n("\nAre you sure you want\nto restore this?"), |
4585 | i18n("KO/Pi Confirmation"),i18n("Restore"))) { | 4651 | i18n("KO/Pi Confirmation"),i18n("Restore"))) { |
4586 | mCalendar->undoDeleteIncidence(); | 4652 | mCalendar->undoDeleteIncidence(); |
4587 | updateView(); | 4653 | updateView(); |
4588 | } | 4654 | } |
4589 | } | 4655 | } |
4590 | 4656 | ||
4591 | void CalendarView::slotViewerClosed() | 4657 | void CalendarView::slotViewerClosed() |
4592 | { | 4658 | { |
4593 | QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); | 4659 | QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); |
4594 | } | 4660 | } |
4595 | 4661 | ||
4596 | void CalendarView::resetFocus() | 4662 | void CalendarView::resetFocus() |
4597 | { | 4663 | { |
4598 | if ( mViewerCallerIsSearchDialog ) { | 4664 | if ( mViewerCallerIsSearchDialog ) { |
4599 | if ( mDialogManager->getSearchDialog()->isVisible() ){ | 4665 | if ( mDialogManager->getSearchDialog()->isVisible() ){ |
4600 | mDialogManager->getSearchDialog()->raise(); | 4666 | mDialogManager->getSearchDialog()->raise(); |
4601 | mDialogManager->getSearchDialog()->setActiveWindow(); | 4667 | mDialogManager->getSearchDialog()->setActiveWindow(); |
4602 | mDialogManager->getSearchDialog()->listview()->resetFocus(); | 4668 | mDialogManager->getSearchDialog()->listview()->resetFocus(); |
4603 | } else | 4669 | } else |
4604 | mViewerCallerIsSearchDialog = false; | 4670 | mViewerCallerIsSearchDialog = false; |
4605 | } | 4671 | } |
4606 | if ( !mViewerCallerIsSearchDialog ) { | 4672 | if ( !mViewerCallerIsSearchDialog ) { |
4607 | //mViewManager->currentView()->setFocus(); | 4673 | //mViewManager->currentView()->setFocus(); |
4608 | //qDebug("sssssssssssssssset focus "); | 4674 | //qDebug("sssssssssssssssset focus "); |
4609 | topLevelWidget()->raise(); | 4675 | topLevelWidget()->raise(); |
4610 | setActiveWindow(); | 4676 | setActiveWindow(); |
4611 | //setFocus(); | 4677 | //setFocus(); |
4612 | } | 4678 | } |
4613 | mViewerCallerIsSearchDialog = false; | 4679 | mViewerCallerIsSearchDialog = false; |
4614 | } | 4680 | } |
4615 | 4681 | ||
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index a5f230a..51eb1d4 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h | |||
@@ -171,64 +171,68 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser | |||
171 | void organizerEventsSelected(bool); | 171 | void organizerEventsSelected(bool); |
172 | /** Emitted when state of events selection has changed and user is attendee*/ | 172 | /** Emitted when state of events selection has changed and user is attendee*/ |
173 | void groupEventsSelected(bool); | 173 | void groupEventsSelected(bool); |
174 | /** | 174 | /** |
175 | Emitted when an incidence gets selected. If the selection is cleared the | 175 | Emitted when an incidence gets selected. If the selection is cleared the |
176 | signal is emitted with 0 as argument. | 176 | signal is emitted with 0 as argument. |
177 | */ | 177 | */ |
178 | void incidenceSelected( Incidence * ); | 178 | void incidenceSelected( Incidence * ); |
179 | /** Emitted, when a todoitem is selected or deselected. */ | 179 | /** Emitted, when a todoitem is selected or deselected. */ |
180 | void todoSelected( bool ); | 180 | void todoSelected( bool ); |
181 | 181 | ||
182 | /** | 182 | /** |
183 | Emitted, when clipboard content changes. Parameter indicates if paste | 183 | Emitted, when clipboard content changes. Parameter indicates if paste |
184 | is possible or not. | 184 | is possible or not. |
185 | */ | 185 | */ |
186 | void pasteEnabled(bool); | 186 | void pasteEnabled(bool); |
187 | 187 | ||
188 | /** Emitted, when the number of incoming messages has changed. */ | 188 | /** Emitted, when the number of incoming messages has changed. */ |
189 | void numIncomingChanged(int); | 189 | void numIncomingChanged(int); |
190 | 190 | ||
191 | /** Emitted, when the number of outgoing messages has changed. */ | 191 | /** Emitted, when the number of outgoing messages has changed. */ |
192 | void numOutgoingChanged(int); | 192 | void numOutgoingChanged(int); |
193 | 193 | ||
194 | /** Send status message, which can e.g. be displayed in the status bar. */ | 194 | /** Send status message, which can e.g. be displayed in the status bar. */ |
195 | void statusMessage(const QString &); | 195 | void statusMessage(const QString &); |
196 | 196 | ||
197 | void calendarViewExpanded( bool ); | 197 | void calendarViewExpanded( bool ); |
198 | void updateSearchDialog(); | 198 | void updateSearchDialog(); |
199 | void filtersUpdated(); | 199 | void filtersUpdated(); |
200 | 200 | ||
201 | 201 | ||
202 | public slots: | 202 | public slots: |
203 | void nextConflict( bool all, bool allday ); | ||
204 | void conflictAll(); | ||
205 | void conflictAllday(); | ||
206 | void conflictNotAll(); | ||
203 | void setCalReadOnly( int id, bool readO ); | 207 | void setCalReadOnly( int id, bool readO ); |
204 | void checkAlarms(); | 208 | void checkAlarms(); |
205 | void checkFiles(); | 209 | void checkFiles(); |
206 | void slotprintSelInc(); | 210 | void slotprintSelInc(); |
207 | void showNextAlarms(); | 211 | void showNextAlarms(); |
208 | void showOpenError(); | 212 | void showOpenError(); |
209 | void watchSavedFile(); | 213 | void watchSavedFile(); |
210 | void recheckTimerAlarm(); | 214 | void recheckTimerAlarm(); |
211 | void checkNextTimerAlarm(); | 215 | void checkNextTimerAlarm(); |
212 | void addAlarm(const QDateTime &qdt, const QString ¬i ); | 216 | void addAlarm(const QDateTime &qdt, const QString ¬i ); |
213 | void addSuspendAlarm(const QDateTime &qdt, const QString ¬i ); | 217 | void addSuspendAlarm(const QDateTime &qdt, const QString ¬i ); |
214 | void removeAlarm(const QDateTime &qdt, const QString ¬i ); | 218 | void removeAlarm(const QDateTime &qdt, const QString ¬i ); |
215 | 219 | ||
216 | /** options dialog made a changed to the configuration. we catch this | 220 | /** options dialog made a changed to the configuration. we catch this |
217 | * and notify all widgets which need to update their configuration. */ | 221 | * and notify all widgets which need to update their configuration. */ |
218 | void updateConfig(); | 222 | void updateConfig(); |
219 | 223 | ||
220 | void insertBirthdays(const QString& uid, const QStringList& birthdayList, | 224 | void insertBirthdays(const QString& uid, const QStringList& birthdayList, |
221 | const QStringList& anniversaryList, const QStringList& realNameList, | 225 | const QStringList& anniversaryList, const QStringList& realNameList, |
222 | const QStringList& emailList, const QStringList& assembledNameList, | 226 | const QStringList& emailList, const QStringList& assembledNameList, |
223 | const QStringList& uidList); | 227 | const QStringList& uidList); |
224 | 228 | ||
225 | /** | 229 | /** |
226 | Load calendar from file \a filename. If \a merge is true, load | 230 | Load calendar from file \a filename. If \a merge is true, load |
227 | calendar into existing one, if it is false, clear calendar, before | 231 | calendar into existing one, if it is false, clear calendar, before |
228 | loading. Return true, if calendar could be successfully loaded. | 232 | loading. Return true, if calendar could be successfully loaded. |
229 | */ | 233 | */ |
230 | bool openCalendar(QString filename, bool merge=false); | 234 | bool openCalendar(QString filename, bool merge=false); |
231 | bool loadCalendars(); | 235 | bool loadCalendars(); |
232 | bool saveCalendars(); | 236 | bool saveCalendars(); |
233 | bool restoreCalendarSettings(); | 237 | bool restoreCalendarSettings(); |
234 | bool addCalendar( KopiCalendarFile * ); | 238 | bool addCalendar( KopiCalendarFile * ); |
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 9c2ac82..bfae1b5 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp | |||
@@ -630,64 +630,65 @@ void MainWindow::startMultiSync() | |||
630 | question, | 630 | question, |
631 | i18n("Yes"), i18n("No"), | 631 | i18n("Yes"), i18n("No"), |
632 | 0, 0 ) != 0 ) { | 632 | 0, 0 ) != 0 ) { |
633 | setCaption(i18n("Aborted! Nothing synced!")); | 633 | setCaption(i18n("Aborted! Nothing synced!")); |
634 | return; | 634 | return; |
635 | } | 635 | } |
636 | mSyncManager->multiSync( false ); | 636 | mSyncManager->multiSync( false ); |
637 | #ifndef DESKTOP_VERSION | 637 | #ifndef DESKTOP_VERSION |
638 | QCopEnvelope e("QPE/Application/kapi", "doRingSync"); | 638 | QCopEnvelope e("QPE/Application/kapi", "doRingSync"); |
639 | #endif | 639 | #endif |
640 | } | 640 | } |
641 | QPixmap MainWindow::loadPixmap( QString name ) | 641 | QPixmap MainWindow::loadPixmap( QString name ) |
642 | { | 642 | { |
643 | return SmallIcon( name ); | 643 | return SmallIcon( name ); |
644 | 644 | ||
645 | } | 645 | } |
646 | void MainWindow::setUsesBigPixmaps ( bool b ) | 646 | void MainWindow::setUsesBigPixmaps ( bool b ) |
647 | { | 647 | { |
648 | qDebug("KO: MainWindow::setUsesBigPixmaps %d called", b); | 648 | qDebug("KO: MainWindow::setUsesBigPixmaps %d called", b); |
649 | if ( b ) | 649 | if ( b ) |
650 | qDebug("KO: BigPixmaps are not supported "); | 650 | qDebug("KO: BigPixmaps are not supported "); |
651 | } | 651 | } |
652 | void MainWindow::initActions() | 652 | void MainWindow::initActions() |
653 | { | 653 | { |
654 | //KOPrefs::instance()->mShowFullMenu | 654 | //KOPrefs::instance()->mShowFullMenu |
655 | iconToolBar->clear(); | 655 | iconToolBar->clear(); |
656 | KOPrefs *p = KOPrefs::instance(); | 656 | KOPrefs *p = KOPrefs::instance(); |
657 | //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar ); | 657 | //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar ); |
658 | 658 | ||
659 | QPopupMenu *viewMenu = new QPopupMenu( this ); | 659 | QPopupMenu *viewMenu = new QPopupMenu( this ); |
660 | QPopupMenu *actionMenu = new QPopupMenu( this ); | 660 | QPopupMenu *actionMenu = new QPopupMenu( this ); |
661 | mCurrentItemMenu = new QPopupMenu ( this ); | 661 | mCurrentItemMenu = new QPopupMenu ( this ); |
662 | QPopupMenu *nextConflictMenu = new QPopupMenu ( this ); | ||
662 | QPopupMenu *importMenu = new QPopupMenu( this ); | 663 | QPopupMenu *importMenu = new QPopupMenu( this ); |
663 | QPopupMenu *importMenu_X = new QPopupMenu( this ); | 664 | QPopupMenu *importMenu_X = new QPopupMenu( this ); |
664 | QPopupMenu *exportMenu_X = new QPopupMenu( this ); | 665 | QPopupMenu *exportMenu_X = new QPopupMenu( this ); |
665 | QPopupMenu *beamMenu_X = new QPopupMenu( this ); | 666 | QPopupMenu *beamMenu_X = new QPopupMenu( this ); |
666 | selectFilterMenu = new QPopupMenu( this ); | 667 | selectFilterMenu = new QPopupMenu( this ); |
667 | selectFilterMenu->setCheckable( true ); | 668 | selectFilterMenu->setCheckable( true ); |
668 | syncMenu = new QPopupMenu( this ); | 669 | syncMenu = new QPopupMenu( this ); |
669 | configureAgendaMenu = new QPopupMenu( this ); | 670 | configureAgendaMenu = new QPopupMenu( this ); |
670 | configureToolBarMenu = new QPopupMenu( this ); | 671 | configureToolBarMenu = new QPopupMenu( this ); |
671 | QPopupMenu *helpMenu = new QPopupMenu( this ); | 672 | QPopupMenu *helpMenu = new QPopupMenu( this ); |
672 | QIconSet icon; | 673 | QIconSet icon; |
673 | int pixWid = 22, pixHei = 22; | 674 | int pixWid = 22, pixHei = 22; |
674 | QString pathString = ""; | 675 | QString pathString = ""; |
675 | if ( !p->mToolBarMiniIcons ) { | 676 | if ( !p->mToolBarMiniIcons ) { |
676 | if ( QApplication::desktop()->width() < 480 /*|| QApplication::desktop()->height() < 320*/) { | 677 | if ( QApplication::desktop()->width() < 480 /*|| QApplication::desktop()->height() < 320*/) { |
677 | pathString += "icons16/"; | 678 | pathString += "icons16/"; |
678 | pixWid = 18; pixHei = 16; | 679 | pixWid = 18; pixHei = 16; |
679 | } | 680 | } |
680 | } else { | 681 | } else { |
681 | pathString += "iconsmini/"; | 682 | pathString += "iconsmini/"; |
682 | pixWid = 18; pixHei = 16; | 683 | pixWid = 18; pixHei = 16; |
683 | } | 684 | } |
684 | if ( KOPrefs::instance()->mShowFullMenu ) { | 685 | if ( KOPrefs::instance()->mShowFullMenu ) { |
685 | QMenuBar *menuBar1; | 686 | QMenuBar *menuBar1; |
686 | menuBar1 = menuBar(); | 687 | menuBar1 = menuBar(); |
687 | menuBar1->insertItem( i18n("File"), importMenu ); | 688 | menuBar1->insertItem( i18n("File"), importMenu ); |
688 | menuBar1->insertItem( i18n("View"), viewMenu ); | 689 | menuBar1->insertItem( i18n("View"), viewMenu ); |
689 | menuBar1->insertItem( i18n("Edit"), mCurrentItemMenu ); | 690 | menuBar1->insertItem( i18n("Edit"), mCurrentItemMenu ); |
690 | menuBar1->insertItem( i18n("Action"), actionMenu ); | 691 | menuBar1->insertItem( i18n("Action"), actionMenu ); |
691 | #ifdef DESKTOP_VERSION | 692 | #ifdef DESKTOP_VERSION |
692 | menuBar1->insertItem( i18n("Synchronize"), syncMenu ); | 693 | menuBar1->insertItem( i18n("Synchronize"), syncMenu ); |
693 | menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu ); | 694 | menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu ); |
@@ -760,131 +761,152 @@ void MainWindow::initActions() | |||
760 | // ****************** | 761 | // ****************** |
761 | QAction *action; | 762 | QAction *action; |
762 | // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); | 763 | // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); |
763 | configureToolBarMenu->setCheckable( true ); | 764 | configureToolBarMenu->setCheckable( true ); |
764 | 765 | ||
765 | 766 | ||
766 | configureAgendaMenu->setCheckable( true ); | 767 | configureAgendaMenu->setCheckable( true ); |
767 | int iii ; | 768 | int iii ; |
768 | for ( iii = 1;iii<= 10 ;++iii ){ | 769 | for ( iii = 1;iii<= 10 ;++iii ){ |
769 | configureAgendaMenu->insertItem(i18n("Size %1").arg(iii), (iii+1)*2 ); | 770 | configureAgendaMenu->insertItem(i18n("Size %1").arg(iii), (iii+1)*2 ); |
770 | } | 771 | } |
771 | //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); | 772 | //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); |
772 | 773 | ||
773 | connect( configureAgendaMenu, SIGNAL( aboutToShow()), | 774 | connect( configureAgendaMenu, SIGNAL( aboutToShow()), |
774 | this, SLOT( showConfigureAgenda( ) ) ); | 775 | this, SLOT( showConfigureAgenda( ) ) ); |
775 | icon = loadPixmap( pathString + "today" ); | 776 | icon = loadPixmap( pathString + "today" ); |
776 | QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); | 777 | QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); |
777 | today_action->addTo( actionMenu ); | 778 | today_action->addTo( actionMenu ); |
778 | connect( today_action, SIGNAL( activated() ), | 779 | connect( today_action, SIGNAL( activated() ), |
779 | mView, SLOT( goToday() ) ); | 780 | mView, SLOT( goToday() ) ); |
780 | 781 | ||
781 | icon = loadPixmap( pathString + "picker" ); | 782 | icon = loadPixmap( pathString + "picker" ); |
782 | QAction* dPickerAction = new QAction( i18n("Select Date..."), icon, i18n("Select Date..."), 0, this ); | 783 | QAction* dPickerAction = new QAction( i18n("Select Date..."), icon, i18n("Select Date..."), 0, this ); |
783 | dPickerAction->addTo( actionMenu ); | 784 | dPickerAction->addTo( actionMenu ); |
784 | connect( dPickerAction, SIGNAL( activated() ), | 785 | connect( dPickerAction, SIGNAL( activated() ), |
785 | mView, SLOT( showDatePicker() ) ); | 786 | mView, SLOT( showDatePicker() ) ); |
786 | 787 | ||
787 | icon = loadPixmap( pathString + "search" ); | 788 | icon = loadPixmap( pathString + "search" ); |
788 | QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); | 789 | QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); |
789 | search_action->addTo( actionMenu ); | 790 | search_action->addTo( actionMenu ); |
790 | connect( search_action, SIGNAL( activated() ), | 791 | connect( search_action, SIGNAL( activated() ), |
791 | mView->dialogManager(), SLOT( showSearchDialog() ) ); | 792 | mView->dialogManager(), SLOT( showSearchDialog() ) ); |
793 | actionMenu->insertItem( i18n("Show next conflict for"), nextConflictMenu ); | ||
792 | 794 | ||
795 | action = new QAction( "Undo Delete", i18n("All events"), 0, this ); | ||
796 | action->addTo( nextConflictMenu ); | ||
797 | connect( action, SIGNAL( activated() ), | ||
798 | mView, SLOT( conflictAll() ) ); | ||
799 | |||
800 | action = new QAction( "Undo Delete", i18n("Allday events"), 0, this ); | ||
801 | action->addTo( nextConflictMenu ); | ||
802 | connect( action, SIGNAL( activated() ), | ||
803 | mView, SLOT( conflictAllday() ) ); | ||
804 | |||
805 | action = new QAction( "Undo Delete", i18n("Events with time"), 0, this ); | ||
806 | action->addTo( nextConflictMenu ); | ||
807 | connect( action, SIGNAL( activated() ), | ||
808 | mView, SLOT( conflictNotAll() ) ); | ||
809 | |||
793 | actionMenu->insertSeparator(); | 810 | actionMenu->insertSeparator(); |
794 | 811 | ||
812 | icon = loadPixmap( pathString + "newevent" ); | ||
813 | QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); | ||
814 | ne_action->addTo( mCurrentItemMenu ); | ||
815 | connect( ne_action, SIGNAL( activated() ), | ||
816 | mView, SLOT( newEvent() ) ); | ||
817 | icon = loadPixmap( pathString + "newtodo" ); | ||
818 | configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); | ||
819 | QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); | ||
820 | nt_action->addTo( mCurrentItemMenu ); | ||
821 | connect( nt_action, SIGNAL( activated() ), | ||
822 | mView, SLOT( newTodo() ) ); | ||
823 | mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, | ||
824 | this ); | ||
825 | mNewSubTodoAction->addTo( mCurrentItemMenu ); | ||
826 | connect( mNewSubTodoAction, SIGNAL( activated() ), | ||
827 | mView, SLOT( newSubTodo() ) ); | ||
795 | 828 | ||
796 | |||
797 | action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); | ||
798 | action->addTo( mCurrentItemMenu ); | ||
799 | connect( action, SIGNAL( activated() ), | ||
800 | mView, SLOT( undo_delete() ) ); | ||
801 | mCurrentItemMenu->insertSeparator(); | 829 | mCurrentItemMenu->insertSeparator(); |
802 | icon = loadPixmap( pathString + "newevent" ); | 830 | icon = loadPixmap( pathString + "newevent" ); |
803 | configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); | 831 | configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); |
804 | configureToolBarMenu->insertItem(i18n("Only one toolbar"), 6 ); | 832 | configureToolBarMenu->insertItem(i18n("Only one toolbar"), 6 ); |
805 | configureToolBarMenu->insertSeparator(); | 833 | configureToolBarMenu->insertSeparator(); |
806 | configureToolBarMenu->insertItem(i18n("Filtermenu"), 7 ); | 834 | configureToolBarMenu->insertItem(i18n("Filtermenu"), 7 ); |
807 | configureToolBarMenu->insertSeparator(); | 835 | configureToolBarMenu->insertSeparator(); |
808 | configureToolBarMenu->insertItem(i18n("Week Number"), 400); | 836 | configureToolBarMenu->insertItem(i18n("Week Number"), 400); |
809 | configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 ); | 837 | configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 ); |
810 | 838 | ||
811 | //actionMenu->insertItem ( i18n("Selected Item"), mCurrentItemMenu); | 839 | //actionMenu->insertItem ( i18n("Selected Item"), mCurrentItemMenu); |
812 | mShowAction = new QAction( "show_incidence", i18n("Show"), 0, this ); | 840 | mShowAction = new QAction( "show_incidence", i18n("Show"), 0, this ); |
813 | mShowAction->addTo( mCurrentItemMenu ); | 841 | mShowAction->addTo( mCurrentItemMenu ); |
814 | connect( mShowAction, SIGNAL( activated() ), | 842 | connect( mShowAction, SIGNAL( activated() ), |
815 | mView, SLOT( showIncidence() ) ); | 843 | mView, SLOT( showIncidence() ) ); |
816 | 844 | ||
817 | mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this ); | 845 | mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this ); |
818 | mEditAction->addTo( mCurrentItemMenu ); | 846 | mEditAction->addTo( mCurrentItemMenu ); |
819 | connect( mEditAction, SIGNAL( activated() ), | 847 | connect( mEditAction, SIGNAL( activated() ), |
820 | mView, SLOT( editIncidence() ) ); | 848 | mView, SLOT( editIncidence() ) ); |
821 | 849 | ||
822 | mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this ); | 850 | mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this ); |
823 | mDeleteAction->addTo( mCurrentItemMenu ); | 851 | mDeleteAction->addTo( mCurrentItemMenu ); |
824 | connect( mDeleteAction, SIGNAL( activated() ), | 852 | connect( mDeleteAction, SIGNAL( activated() ), |
825 | mView, SLOT( deleteIncidence() ) ); | 853 | mView, SLOT( deleteIncidence() ) ); |
826 | 854 | ||
827 | 855 | ||
828 | mCloneAction = new QAction( "clone_incidence", i18n("Clone..."), 0, this ); | 856 | mCloneAction = new QAction( "clone_incidence", i18n("Clone..."), 0, this ); |
829 | mCloneAction->addTo( mCurrentItemMenu ); | 857 | mCloneAction->addTo( mCurrentItemMenu ); |
830 | connect( mCloneAction, SIGNAL( activated() ), | 858 | connect( mCloneAction, SIGNAL( activated() ), |
831 | mView, SLOT( cloneIncidence() ) ); | 859 | mView, SLOT( cloneIncidence() ) ); |
832 | mMoveAction = new QAction( "Move_incidence", i18n("Move..."), 0, this ); | 860 | mMoveAction = new QAction( "Move_incidence", i18n("Move..."), 0, this ); |
833 | mMoveAction->addTo( mCurrentItemMenu ); | 861 | mMoveAction->addTo( mCurrentItemMenu ); |
834 | connect( mMoveAction, SIGNAL( activated() ), | 862 | connect( mMoveAction, SIGNAL( activated() ), |
835 | mView, SLOT( moveIncidence() ) ); | 863 | mView, SLOT( moveIncidence() ) ); |
836 | #ifndef DESKTOP_VERSION | 864 | #ifndef DESKTOP_VERSION |
837 | mBeamAction = new QAction( "Beam_incidence", i18n("Beam..."), 0, this ); | 865 | mBeamAction = new QAction( "Beam_incidence", i18n("Beam..."), 0, this ); |
838 | mBeamAction->addTo(mCurrentItemMenu ); | 866 | mBeamAction->addTo(mCurrentItemMenu ); |
839 | connect( mBeamAction, SIGNAL( activated() ), | 867 | connect( mBeamAction, SIGNAL( activated() ), |
840 | mView, SLOT( beamIncidence() ) ); | 868 | mView, SLOT( beamIncidence() ) ); |
841 | #endif | 869 | #endif |
842 | mCancelAction = new QAction( "Cancel_incidence", i18n("Toggle Cancel"), 0, this ); | 870 | mCancelAction = new QAction( "Cancel_incidence", i18n("Toggle Cancel"), 0, this ); |
843 | mCancelAction->addTo( mCurrentItemMenu ); | 871 | mCancelAction->addTo( mCurrentItemMenu ); |
844 | connect( mCancelAction, SIGNAL( activated() ), | 872 | connect( mCancelAction, SIGNAL( activated() ), |
845 | mView, SLOT( toggleCancelIncidence() ) ); | 873 | mView, SLOT( toggleCancelIncidence() ) ); |
846 | 874 | ||
847 | QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); | 875 | |
848 | ne_action->addTo( actionMenu ); | 876 | mCurrentItemMenu->insertSeparator(); |
849 | connect( ne_action, SIGNAL( activated() ), | 877 | action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); |
850 | mView, SLOT( newEvent() ) ); | 878 | action->addTo( mCurrentItemMenu ); |
851 | icon = loadPixmap( pathString + "newtodo" ); | 879 | connect( action, SIGNAL( activated() ), |
852 | configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); | 880 | mView, SLOT( undo_delete() ) ); |
853 | QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); | ||
854 | nt_action->addTo( actionMenu ); | ||
855 | connect( nt_action, SIGNAL( activated() ), | ||
856 | mView, SLOT( newTodo() ) ); | ||
857 | |||
858 | |||
859 | 881 | ||
860 | // *********************** | 882 | // *********************** |
861 | if ( KOPrefs::instance()->mVerticalScreen ) { | 883 | if ( KOPrefs::instance()->mVerticalScreen ) { |
862 | icon = SmallIcon( "1updownarrow" ); | 884 | icon = SmallIcon( "1updownarrow" ); |
863 | } else { | 885 | } else { |
864 | icon = SmallIcon("1leftrightarrow" ); | 886 | icon = SmallIcon("1leftrightarrow" ); |
865 | } | 887 | } |
866 | configureToolBarMenu->insertItem(icon, i18n("Toggle Fullscreen"), 28 ); | 888 | configureToolBarMenu->insertItem(icon, i18n("Toggle Fullscreen"), 28 ); |
867 | QAction* FSaction = new QAction( i18n("Toggle Fullscreen"), icon, i18n("Toggle Fullscreen"), 0, this ); | 889 | QAction* FSaction = new QAction( i18n("Toggle Fullscreen"), icon, i18n("Toggle Fullscreen"), 0, this ); |
868 | FSaction->addTo( viewMenu ); | 890 | FSaction->addTo( viewMenu ); |
869 | connect( FSaction, SIGNAL( activated() ), mView, SLOT( toggleExpand() )); | 891 | connect( FSaction, SIGNAL( activated() ), mView, SLOT( toggleExpand() )); |
870 | 892 | ||
871 | 893 | ||
872 | icon = loadPixmap( pathString + "filter" ); | 894 | icon = loadPixmap( pathString + "filter" ); |
873 | configureToolBarMenu->insertItem(icon, i18n("Filter menu icon"), 26 ); | 895 | configureToolBarMenu->insertItem(icon, i18n("Filter menu icon"), 26 ); |
874 | icon = loadPixmap( pathString + "configure" ); | 896 | icon = loadPixmap( pathString + "configure" ); |
875 | action = new QAction( i18n("Toggle Resource View"), icon, i18n("Toggle Resource View"), 0, this ); | 897 | action = new QAction( i18n("Toggle Resource View"), icon, i18n("Toggle Resource View"), 0, this ); |
876 | action->addTo( viewMenu ); | 898 | action->addTo( viewMenu ); |
877 | connect( action, SIGNAL( activated() ), | 899 | connect( action, SIGNAL( activated() ), |
878 | mView, SLOT( toggleFilter() ) ); | 900 | mView, SLOT( toggleFilter() ) ); |
879 | mToggleFilter = action; | 901 | mToggleFilter = action; |
880 | icon = loadPixmap( pathString + "navi" ); | 902 | icon = loadPixmap( pathString + "navi" ); |
881 | configureToolBarMenu->insertItem(icon, i18n("Toggle DateNavigator"), 22 ); | 903 | configureToolBarMenu->insertItem(icon, i18n("Toggle DateNavigator"), 22 ); |
882 | action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this ); | 904 | action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this ); |
883 | action->addTo( viewMenu ); | 905 | action->addTo( viewMenu ); |
884 | connect( action, SIGNAL( activated() ), | 906 | connect( action, SIGNAL( activated() ), |
885 | mView, SLOT( toggleDateNavigatorWidget() ) ); | 907 | mView, SLOT( toggleDateNavigatorWidget() ) ); |
886 | mToggleNav = action ; | 908 | mToggleNav = action ; |
887 | icon = loadPixmap( pathString + "allday" ); | 909 | icon = loadPixmap( pathString + "allday" ); |
888 | configureToolBarMenu->insertItem(icon, i18n("Toggle Allday"), 24 ); | 910 | configureToolBarMenu->insertItem(icon, i18n("Toggle Allday"), 24 ); |
889 | action = new QAction( i18n("Toggle Allday"), icon,i18n("Toggle Allday"), 0, this ); | 911 | action = new QAction( i18n("Toggle Allday"), icon,i18n("Toggle Allday"), 0, this ); |
890 | action->addTo( viewMenu ); | 912 | action->addTo( viewMenu ); |
@@ -967,69 +989,65 @@ void MainWindow::initActions() | |||
967 | mView->viewManager(), SLOT( showMonthViewWeek() ) ); | 989 | mView->viewManager(), SLOT( showMonthViewWeek() ) ); |
968 | 990 | ||
969 | icon = loadPixmap( pathString + "month" ); | 991 | icon = loadPixmap( pathString + "month" ); |
970 | configureToolBarMenu->insertItem(icon, i18n("Month"), 70 ); | 992 | configureToolBarMenu->insertItem(icon, i18n("Month"), 70 ); |
971 | QAction* month_action = new QAction( i18n("Month"), icon, i18n("Month"), 0, this ); | 993 | QAction* month_action = new QAction( i18n("Month"), icon, i18n("Month"), 0, this ); |
972 | month_action->addTo( viewMenu ); | 994 | month_action->addTo( viewMenu ); |
973 | connect( month_action, SIGNAL( activated() ), | 995 | connect( month_action, SIGNAL( activated() ), |
974 | mView->viewManager(), SLOT( showMonthView() ) ); | 996 | mView->viewManager(), SLOT( showMonthView() ) ); |
975 | 997 | ||
976 | icon = loadPixmap( pathString + "list" ); | 998 | icon = loadPixmap( pathString + "list" ); |
977 | configureToolBarMenu->insertItem(icon, i18n("List View"), 30 ); | 999 | configureToolBarMenu->insertItem(icon, i18n("List View"), 30 ); |
978 | QAction* showlist_action = new QAction( i18n("List View"), icon, i18n("List View"), 0, this ); | 1000 | QAction* showlist_action = new QAction( i18n("List View"), icon, i18n("List View"), 0, this ); |
979 | showlist_action->addTo( viewMenu ); | 1001 | showlist_action->addTo( viewMenu ); |
980 | connect( showlist_action, SIGNAL( activated() ), | 1002 | connect( showlist_action, SIGNAL( activated() ), |
981 | mView->viewManager(), SLOT( showListView() ) ); | 1003 | mView->viewManager(), SLOT( showListView() ) ); |
982 | 1004 | ||
983 | icon = loadPixmap( pathString + "todo" ); | 1005 | icon = loadPixmap( pathString + "todo" ); |
984 | configureToolBarMenu->insertItem(icon, i18n("Todo View"), 80 ); | 1006 | configureToolBarMenu->insertItem(icon, i18n("Todo View"), 80 ); |
985 | QAction* todoview_action = new QAction( i18n("Todo View"), icon, i18n("Todo View"), 0, this ); | 1007 | QAction* todoview_action = new QAction( i18n("Todo View"), icon, i18n("Todo View"), 0, this ); |
986 | todoview_action->addTo( viewMenu ); | 1008 | todoview_action->addTo( viewMenu ); |
987 | connect( todoview_action, SIGNAL( activated() ), | 1009 | connect( todoview_action, SIGNAL( activated() ), |
988 | mView->viewManager(), SLOT( showTodoView() ) ); | 1010 | mView->viewManager(), SLOT( showTodoView() ) ); |
989 | 1011 | ||
990 | 1012 | ||
991 | 1013 | ||
992 | #if 0 | 1014 | #if 0 |
993 | action = new QAction( "view_timespan", "Time Span", 0, this ); | 1015 | action = new QAction( "view_timespan", "Time Span", 0, this ); |
994 | action->addTo( viewMenu ); | 1016 | action->addTo( viewMenu ); |
995 | connect( action, SIGNAL( activated() ), | 1017 | connect( action, SIGNAL( activated() ), |
996 | mView->viewManager(), SLOT( showTimeSpanView() ) ); | 1018 | mView->viewManager(), SLOT( showTimeSpanView() ) ); |
997 | #endif | 1019 | #endif |
998 | 1020 | ||
999 | mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, | 1021 | |
1000 | this ); | ||
1001 | mNewSubTodoAction->addTo( actionMenu ); | ||
1002 | connect( mNewSubTodoAction, SIGNAL( activated() ), | ||
1003 | mView, SLOT( newSubTodo() ) ); | ||
1004 | 1022 | ||
1005 | action = new QAction( "purge_completed", i18n("Purge Completed..."), 0, | 1023 | action = new QAction( "purge_completed", i18n("Purge Completed..."), 0, |
1006 | this ); | 1024 | this ); |
1007 | action->addTo( actionMenu ); | 1025 | action->addTo( actionMenu ); |
1008 | connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); | 1026 | connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); |
1009 | 1027 | ||
1010 | 1028 | ||
1011 | configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 5); | 1029 | configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 5); |
1012 | 1030 | ||
1013 | 1031 | ||
1014 | 1032 | ||
1015 | actionMenu->insertSeparator(); | 1033 | actionMenu->insertSeparator(); |
1016 | action = new QAction( "manage cat", i18n("Edit category list..."), 0, | 1034 | action = new QAction( "manage cat", i18n("Edit category list..."), 0, |
1017 | this ); | 1035 | this ); |
1018 | action->addTo( actionMenu ); | 1036 | action->addTo( actionMenu ); |
1019 | connect( action, SIGNAL( activated() ), mView, SLOT( editCategories() ) ); | 1037 | connect( action, SIGNAL( activated() ), mView, SLOT( editCategories() ) ); |
1020 | 1038 | ||
1021 | action = new QAction( "manage cat", i18n("Manage new categories..."), 0, | 1039 | action = new QAction( "manage cat", i18n("Manage new categories..."), 0, |
1022 | this ); | 1040 | this ); |
1023 | action->addTo( actionMenu ); | 1041 | action->addTo( actionMenu ); |
1024 | connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) ); | 1042 | connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) ); |
1025 | 1043 | ||
1026 | 1044 | ||
1027 | actionMenu->insertSeparator(); | 1045 | actionMenu->insertSeparator(); |
1028 | icon = loadPixmap( pathString + "configure" ); | 1046 | icon = loadPixmap( pathString + "configure" ); |
1029 | action = new QAction( i18n("Configure"),icon, i18n("Configure KO/Pi..."), 0, this ); | 1047 | action = new QAction( i18n("Configure"),icon, i18n("Configure KO/Pi..."), 0, this ); |
1030 | action->addTo( actionMenu ); | 1048 | action->addTo( actionMenu ); |
1031 | connect( action, SIGNAL( activated() ), | 1049 | connect( action, SIGNAL( activated() ), |
1032 | mView, SLOT( edit_options() ) ); | 1050 | mView, SLOT( edit_options() ) ); |
1033 | action = new QAction( i18n("Configure"),icon, i18n("Configure Calendar Files..."), 0, this ); | 1051 | action = new QAction( i18n("Configure"),icon, i18n("Configure Calendar Files..."), 0, this ); |
1034 | action->addTo( actionMenu ); | 1052 | action->addTo( actionMenu ); |
1035 | connect( action, SIGNAL( activated() ), | 1053 | connect( action, SIGNAL( activated() ), |
@@ -1536,64 +1554,65 @@ void MainWindow::licence() | |||
1536 | { | 1554 | { |
1537 | KApplication::showLicence(); | 1555 | KApplication::showLicence(); |
1538 | 1556 | ||
1539 | } | 1557 | } |
1540 | void MainWindow::about() | 1558 | void MainWindow::about() |
1541 | { | 1559 | { |
1542 | QString version; | 1560 | QString version; |
1543 | #include <../version> | 1561 | #include <../version> |
1544 | QMessageBox::about( this, i18n("About KOrganizer/Pi"), | 1562 | QMessageBox::about( this, i18n("About KOrganizer/Pi"), |
1545 | i18n("KOrganizer/Platform-independent\n") + | 1563 | i18n("KOrganizer/Platform-independent\n") + |
1546 | "(KO/Pi) " + version + " - " + | 1564 | "(KO/Pi) " + version + " - " + |
1547 | 1565 | ||
1548 | #ifdef DESKTOP_VERSION | 1566 | #ifdef DESKTOP_VERSION |
1549 | i18n("Desktop Edition\n") + | 1567 | i18n("Desktop Edition\n") + |
1550 | #else | 1568 | #else |
1551 | i18n("PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n") + | 1569 | i18n("PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n") + |
1552 | #endif | 1570 | #endif |
1553 | i18n("(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!") ); | 1571 | i18n("(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!") ); |
1554 | } | 1572 | } |
1555 | void MainWindow::keyBindings() | 1573 | void MainWindow::keyBindings() |
1556 | { | 1574 | { |
1557 | QString cap = i18n("KO/Pi Keys + Colors"); | 1575 | QString cap = i18n("KO/Pi Keys + Colors"); |
1558 | QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + | 1576 | QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + |
1559 | i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ | 1577 | i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ |
1560 | i18n("<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n") + | 1578 | i18n("<p><b>N</b>: Switch to next view which has a toolbar icon</p>\n") + |
1561 | i18n("<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n") + | 1579 | i18n("<p><b>A+(shift or ctrl)</b>: Show occurence of next alarm</p>\n") + |
1562 | i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + | 1580 | i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + |
1563 | i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ | 1581 | i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ |
1564 | i18n("<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n")+ | 1582 | i18n("<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n")+ |
1565 | i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ | 1583 | i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ |
1566 | i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ | 1584 | i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ |
1567 | i18n("<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ")+ | 1585 | i18n("<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ")+ |
1586 | i18n("<p><b>Q</b>: Show next date with conflicting events\n ")+ | ||
1568 | i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ | 1587 | i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ |
1569 | i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ | 1588 | i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ |
1570 | i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ | 1589 | i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ |
1571 | i18n("<p><b>K</b>: Week view in Month view syle</p>\n")+ | 1590 | i18n("<p><b>K</b>: Week view in Month view syle</p>\n")+ |
1572 | i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ | 1591 | i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ |
1573 | i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ | 1592 | i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ |
1574 | i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n")+ | 1593 | i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n")+ |
1575 | i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ | 1594 | i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ |
1576 | i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ | 1595 | i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ |
1577 | i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ | 1596 | i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ |
1578 | i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ | 1597 | i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ |
1579 | i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ | 1598 | i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ |
1580 | i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ | 1599 | i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ |
1581 | i18n("<p><h3>In agenda view:</h3></p>\n") + | 1600 | i18n("<p><h3>In agenda view:</h3></p>\n") + |
1582 | i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ | 1601 | i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ |
1583 | i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ | 1602 | i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ |
1584 | i18n("<p><h3>In todo view:</h3></p>\n") + | 1603 | i18n("<p><h3>In todo view:</h3></p>\n") + |
1585 | i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+ | 1604 | i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+ |
1586 | i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+ | 1605 | i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+ |
1587 | i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+ | 1606 | i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+ |
1588 | i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ | 1607 | i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ |
1589 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ | 1608 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ |
1590 | i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ | 1609 | i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ |
1591 | i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ | 1610 | i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ |
1592 | i18n("<p><h3>In list view:</h3></p>\n") + | 1611 | i18n("<p><h3>In list view:</h3></p>\n") + |
1593 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ | 1612 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ |
1594 | i18n("<p><b>return</b>: Select item+one step down</p>\n")+ | 1613 | i18n("<p><b>return</b>: Select item+one step down</p>\n")+ |
1595 | i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ | 1614 | i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ |
1596 | i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ | 1615 | i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ |
1597 | i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ | 1616 | i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ |
1598 | i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ | 1617 | i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ |
1599 | i18n("<p><h3>In event/todo viewer:</h3></p>\n") + | 1618 | i18n("<p><h3>In event/todo viewer:</h3></p>\n") + |
@@ -2070,64 +2089,72 @@ void MainWindow::keyPressEvent ( QKeyEvent * e ) | |||
2070 | break; | 2089 | break; |
2071 | case Qt::Key_F: | 2090 | case Qt::Key_F: |
2072 | mView->editFilters(); | 2091 | mView->editFilters(); |
2073 | break; | 2092 | break; |
2074 | case Qt::Key_R: | 2093 | case Qt::Key_R: |
2075 | mView->toggleFilter(); | 2094 | mView->toggleFilter(); |
2076 | break; | 2095 | break; |
2077 | case Qt::Key_X: | 2096 | case Qt::Key_X: |
2078 | if ( e->state() == Qt::ControlButton ) | 2097 | if ( e->state() == Qt::ControlButton ) |
2079 | mView->toggleDateNavigatorWidget(); | 2098 | mView->toggleDateNavigatorWidget(); |
2080 | else { | 2099 | else { |
2081 | mView->viewManager()->showNextXView(); | 2100 | mView->viewManager()->showNextXView(); |
2082 | showSelectedDates = true; | 2101 | showSelectedDates = true; |
2083 | } | 2102 | } |
2084 | break; | 2103 | break; |
2085 | case Qt::Key_Space: | 2104 | case Qt::Key_Space: |
2086 | mView->toggleExpand(); | 2105 | mView->toggleExpand(); |
2087 | break; | 2106 | break; |
2088 | case Qt::Key_A: | 2107 | case Qt::Key_A: |
2089 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) | 2108 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) |
2090 | mView->showNextAlarms(); | 2109 | mView->showNextAlarms(); |
2091 | else | 2110 | else |
2092 | mView->toggleAllDaySize(); | 2111 | mView->toggleAllDaySize(); |
2093 | break; | 2112 | break; |
2094 | case Qt::Key_T: | 2113 | case Qt::Key_T: |
2095 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 2114 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
2096 | mView->newTodo(); | 2115 | mView->newTodo(); |
2097 | else { | 2116 | else { |
2098 | mView->goToday(); | 2117 | mView->goToday(); |
2099 | showSelectedDates = true; | 2118 | showSelectedDates = true; |
2100 | } | 2119 | } |
2101 | break; | 2120 | break; |
2121 | case Qt::Key_Q: | ||
2122 | if ( e->state() == Qt::ControlButton ) | ||
2123 | mView->conflictNotAll(); | ||
2124 | else if ( e->state() == Qt::ShiftButton ) | ||
2125 | mView->conflictAllday(); | ||
2126 | else | ||
2127 | mView->conflictAll(); | ||
2128 | break; | ||
2102 | case Qt::Key_J: | 2129 | case Qt::Key_J: |
2103 | mView->viewManager()->showJournalView(); | 2130 | mView->viewManager()->showJournalView(); |
2104 | break; | 2131 | break; |
2105 | case Qt::Key_B: | 2132 | case Qt::Key_B: |
2106 | mView->editIncidenceDescription();; | 2133 | mView->editIncidenceDescription();; |
2107 | break; | 2134 | break; |
2108 | // case Qt::Key_Return: | 2135 | // case Qt::Key_Return: |
2109 | case Qt::Key_E: | 2136 | case Qt::Key_E: |
2110 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 2137 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
2111 | mView->newEvent(); | 2138 | mView->newEvent(); |
2112 | else | 2139 | else |
2113 | mView->editIncidence(); | 2140 | mView->editIncidence(); |
2114 | break; | 2141 | break; |
2115 | case Qt::Key_Plus: | 2142 | case Qt::Key_Plus: |
2116 | size = p->mHourSize +2; | 2143 | size = p->mHourSize +2; |
2117 | if ( size <= 22 ) | 2144 | if ( size <= 22 ) |
2118 | configureAgenda( size ); | 2145 | configureAgenda( size ); |
2119 | break; | 2146 | break; |
2120 | case Qt::Key_Minus: | 2147 | case Qt::Key_Minus: |
2121 | size = p->mHourSize - 2; | 2148 | size = p->mHourSize - 2; |
2122 | if ( size >= 4 ) | 2149 | if ( size >= 4 ) |
2123 | configureAgenda( size ); | 2150 | configureAgenda( size ); |
2124 | break; | 2151 | break; |
2125 | 2152 | ||
2126 | 2153 | ||
2127 | default: | 2154 | default: |
2128 | e->ignore(); | 2155 | e->ignore(); |
2129 | } | 2156 | } |
2130 | if ( pro > 0 ) { | 2157 | if ( pro > 0 ) { |
2131 | selectFilter( pro+1 ); | 2158 | selectFilter( pro+1 ); |
2132 | } | 2159 | } |
2133 | if ( showSelectedDates ) { | 2160 | if ( showSelectedDates ) { |