summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt2
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt14
-rw-r--r--korganizer/calendarview.cpp80
-rw-r--r--korganizer/calendarview.h4
-rw-r--r--korganizer/mainwindow.cpp71
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 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.1.14 ************ 3********** VERSION 2.1.14 ************
4 4
5Added 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. 5Added 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.
6Added a button to add a subtodo quickly. 6Added a button to add a subtodo quickly.
7 7
8Added 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
11Fixed a problem in KA/Pi search. 13Fixed a problem in KA/Pi search.
12Fixed some minor problems in KO/Pi. 14Fixed some minor problems in KO/Pi.
13Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. 15Added calendar selection possibility to the todo view popup and to the event/todo/journal editor.
14 16
15Fixed memory usage problems in KA/Pi: 17Fixed memory usage problems in KA/Pi:
16When loading data KA/Pi did load the file data twice. 18When loading data KA/Pi did load the file data twice.
17Example: 19Example:
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.
20When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. 22When saving data KA/Pi did consume a lot of memory for the data parsing during the save process.
21This is fixed. 23This is fixed.
22Example: 24Example:
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.
26Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. 28Note: The memory usage of KA/Pi after the data is loaded/saved has not changed.
27The saving of data may be a bit slower now. 29The saving of data may be a bit slower now.
28 30
29Fixed memory usage problems in KO/Pi: 31Fixed memory usage problems in KO/Pi:
30When KO/Pi did save the data to file, it did not release the used buffers after saving. 32When KO/Pi did save the data to file, it did not release the used buffers after saving.
31The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. 33The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation.
32This is fixed. 34This is fixed.
33Example: 35Example:
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
36Optimized memory usage in KO/Pi Agenda view: 38Optimized memory usage in KO/Pi Agenda view:
37KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view. 39KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view.
38These buffers were not made smaller (i.e. downsized) because of performance reasons. 40These buffers were not made smaller (i.e. downsized) because of performance reasons.
39The handling of these buffers are now much smarter: 41The 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
646CalendarView::~CalendarView() 646CalendarView::~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}
657void 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
710void CalendarView::conflictAll()
711{
712 nextConflict ( true, true );
713}
714void CalendarView::conflictAllday()
715{
716 nextConflict ( false, true );
717}
718void CalendarView::conflictNotAll()
719{
720 nextConflict ( false, false );
721}
722
657void CalendarView::setCalReadOnly( int id, bool readO ) 723void 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}
664void CalendarView::setScrollBarStep(int val ) 730void 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}
670void CalendarView::scrollBarValue(int val ) 736void 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}
3139void CalendarView::toggleCancelIncidence() 3205void 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
3149void CalendarView::cancelIncidence(Incidence * inc ) 3215void 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}
3155void CalendarView::cloneIncidence(Incidence * orgInc ) 3221void 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
3481void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3547void 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}
3491void CalendarView::todo_unsub(Todo *anTodo ) 3557void CalendarView::todo_unsub(Todo *anTodo )
3492{ 3558{
3493 todo_resub( 0, anTodo ); 3559 todo_resub( 0, anTodo );
3494} 3560}
3495 3561
3496void CalendarView::deleteTodo(Todo *todo) 3562void 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}
3532void CalendarView::deleteJournal(Journal *jour) 3598void 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
3562void CalendarView::deleteEvent(Event *anEvent) 3628void 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
3646bool CalendarView::deleteEvent(const QString &uid) 3712bool 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}
4562void CalendarView::setSyncManager(KSyncManager* manager) 4628void CalendarView::setSyncManager(KSyncManager* manager)
4563{ 4629{
4564 mSyncManager = manager; 4630 mSyncManager = manager;
4565} 4631}
4566 4632
4567void CalendarView::removeSyncInfo( QString syncProfile) 4633void 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
4574void CalendarView::undo_delete() 4640void 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
4591void CalendarView::slotViewerClosed() 4657void CalendarView::slotViewerClosed()
4592{ 4658{
4593 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 4659 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
4594} 4660}
4595 4661
4596void CalendarView::resetFocus() 4662void 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 &noti ); 216 void addAlarm(const QDateTime &qdt, const QString &noti );
213 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 217 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
214 void removeAlarm(const QDateTime &qdt, const QString &noti ); 218 void removeAlarm(const QDateTime &qdt, const QString &noti );
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}
641QPixmap MainWindow::loadPixmap( QString name ) 641QPixmap MainWindow::loadPixmap( QString name )
642{ 642{
643 return SmallIcon( name ); 643 return SmallIcon( name );
644 644
645} 645}
646void MainWindow::setUsesBigPixmaps ( bool b ) 646void 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}
652void MainWindow::initActions() 652void 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}
1540void MainWindow::about() 1558void 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}
1555void MainWindow::keyBindings() 1573void 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 ) {