-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 14 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 45 | ||||
-rw-r--r-- | korganizer/koprefs.cpp | 8 | ||||
-rw-r--r-- | korganizer/koprefs.h | 9 | ||||
-rw-r--r-- | korganizer/koprefsdialog.cpp | 52 | ||||
-rw-r--r-- | korganizer/koprefsdialog.h | 2 |
6 files changed, 123 insertions, 7 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index 1a1fd0e..fcfa282 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt @@ -1501,7 +1501,7 @@ { "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, { "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, { "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, -{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" }, +{ "KO/Pi Conflict detected","KO/Pi Konflikt erkannt" }, { "Show date","Zeige Datum" }, { "No problem!","Null Problemo!" }, { "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, @@ -1546,9 +1546,15 @@ { "<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)","<b>iCal (*.ics) Datei:</b><br>(Datei wird angelegt, wenn sie nicht existiert)" }, { "Error saving data","Fehler beim Abspeichern" }, { "Calendar(s) not saved:","Nicht gespeicherte Kalender:" }, -{ "","" }, -{ "","" }, -{ "","" }, +{ "Enable conflict detection","Schalte Konflikterkennung an" }, +{ "Conflict detection checks an <b>edited event</b> with other <b>existing events</b> for overlapping. You can define which events are checked:","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>. Sie können einstellen welche Termine überprüft werden:" }, +{ "Filter for the edited event","Filter für den bearbeiteten Termin" }, +{ "Filter for other existing events","Filter für die anderen Termine" }, +{ "Check Allday with Allday","Prüfe GanzTag mit GanzTag" }, +{ "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" }, +{ "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" }, +{ "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" }, +{ "Conflict detection","Konflikterkennung" }, { "","" }, { "","" }, { "","" }, diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 26323b1..898da6c 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -3036,6 +3036,15 @@ void CalendarView::changeEventDisplay(Event *which, int action) #ifdef DESKTOP_VERSION time = 500; #endif + bool checkC = false; + if ( mConflictingEvent->doesFloat() ) { + checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay + || KOPrefs::instance()->mCheckConflictsAllDayNonAD; + } else { + checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay + || KOPrefs::instance()->mCheckConflictsNonADNonAD; + } + if ( checkC ) QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); } // } @@ -3055,21 +3064,49 @@ void CalendarView::checkConflictForEvent() if ( ! conflictingEvent->matchTime( ¤t, 0 ) ) { return; } + CalFilter *filterIN = 0; + CalFilter *filterALL = 0; + CalFilter *filter = mFilters.first(); + while(filter) { + if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem) + filterIN = filter; + if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem ) + filterALL = filter; + filter = mFilters.next(); + } + if ( filterIN ) { + if ( !filterIN->filterCalendarItem( conflictingEvent ) ) { + return; + } + } QPtrList<Event> testlist = mCalendar->events(); Event * test = testlist.first(); QDateTime conflict; QDateTime retVal; bool found = false; Event * cE = 0; + bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay; + bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD; + if ( !conflictingEvent->doesFloat() ) { + chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay; + chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD; + } topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); while ( test ) { qApp->processEvents(); - bool skip = false; + bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad ); + if ( !skip ) { + if ( filterALL ) { + if ( !filterALL->filterCalendarItem( test ) ) { + skip = true; + } + } + if ( !skip ) { if ( found ) skip = !test->matchTime( ¤t, &conflict ); else skip = !test->matchTime( ¤t, 0 ); - if ( !skip && !test->doesFloat() ) { + if ( !skip ) { if ( conflictingEvent->isOverlapping ( test, &retVal, ¤t ) ) { if ( ! found ) { conflict = retVal; @@ -3083,6 +3120,8 @@ void CalendarView::checkConflictForEvent() found = true; } } + } + } test = testlist.next(); } topLevelWidget()->setCaption( i18n("KO/Pi") ); @@ -3090,7 +3129,7 @@ void CalendarView::checkConflictForEvent() QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; qApp->processEvents(); int km = KMessageBox::warningContinueCancel(this,mess, - i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); + i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!")); if ( km != KMessageBox::Continue ) { return; } diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index 77f572c..571ca11 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp @@ -230,6 +230,14 @@ KOPrefs::KOPrefs() : addItemBool("UseAppColors",&mUseAppColors,false); + KPrefs::setCurrentGroup("Conflicts"); + addItemBool("EnableAutoDetect",&mDetectConflicts,true); + addItemBool("CheckConflictsAllDayAllDay",&mCheckConflictsAllDayAllDay,false); + addItemBool("CheckConflictsAllDayNonAD",&mCheckConflictsAllDayNonAD,false); + addItemBool("CheckConflictsNonADAllDay",&mCheckConflictsNonADAllDay,false); + addItemBool("CheckConflictsNonADNonAD",&mCheckConflictsNonADNonAD,true); + addItemString("FilterConflictEditItem", &mFilterConflictEditItem ,"nofilter" ); + addItemString("FilterConflictAllItem", &mFilterConflictAllItem ,"nofilter" ); KPrefs::setCurrentGroup("Views"); addItemBool("Block Popup Menu",&mBlockPopupMenu,false); diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index 9749ba3..576edf9 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h @@ -349,6 +349,15 @@ class KOPrefs : public KPimPrefs int mNextAvailableCalendar; bool mGlobalUpdateDisabled; + + bool mDetectConflicts; + bool mCheckConflictsAllDayAllDay; + bool mCheckConflictsAllDayNonAD; + bool mCheckConflictsNonADAllDay; + bool mCheckConflictsNonADNonAD; + QString mFilterConflictEditItem; + QString mFilterConflictAllItem; + private: QDict<QColor> mCategoryColors; QArray<KopiCalendarFile*> mDefCalColors; diff --git a/korganizer/koprefsdialog.cpp b/korganizer/koprefsdialog.cpp index 9e2378a..bbdf508 100644 --- a/korganizer/koprefsdialog.cpp +++ b/korganizer/koprefsdialog.cpp @@ -922,6 +922,41 @@ dummy = &(KOPrefs::instance()->mWTshowChanged),topFrame); topLayout->addWidget(dummy->checkBox(),ii++,0); + topFrame = addPage(i18n("Conflict detection"),0,0); + + topLayout = new QGridLayout(topFrame,2,1); + topLayout->setSpacing(mSpacingHint); + topLayout->setMargin(mMarginHint); + ii = 0; + dummy = addWidBool(i18n("Enable conflict detection"), + &(KOPrefs::instance()->mDetectConflicts),topFrame); + topLayout->addWidget(dummy->checkBox(), ii++,0); + topFrame = new QFrame( topFrame ); + topLayout->addWidget(topFrame ,ii++,0); + topLayout = new QGridLayout(topFrame,4,1); + connect ( dummy->checkBox(), SIGNAL( toggled( bool ) ), topFrame, SLOT ( setEnabled( bool ) ) ); + topLayout->addWidget( new QLabel ( i18n("Conflict detection checks an <b>edited event</b> with other <b>existing events</b> for overlapping. You can define which events are checked:"), topFrame ) , ii++,0); + topLayout->addWidget( new QLabel ( i18n("Filter for the edited event"), topFrame ) , ii++,0); + mFilterEditItem = new QComboBox( topFrame ); + topLayout->addWidget(mFilterEditItem,ii++,0); + topLayout->addWidget( new QLabel ( i18n("Filter for other existing events"), topFrame ) , ii++,0); + mFilterAllItem = new QComboBox( topFrame ); + topLayout->addWidget(mFilterAllItem,ii++,0); + dummy = addWidBool(i18n("Check Allday with Allday"), + &(KOPrefs::instance()->mCheckConflictsAllDayAllDay),topFrame); + topLayout->addWidget(dummy->checkBox(), ii++,0); + dummy = addWidBool(i18n("Check Allday with NonAllday"), + &(KOPrefs::instance()->mCheckConflictsAllDayNonAD),topFrame); + topLayout->addWidget(dummy->checkBox(), ii++,0); + dummy = addWidBool(i18n("Check NonAllday with Allday"), + &(KOPrefs::instance()->mCheckConflictsNonADAllDay),topFrame); + topLayout->addWidget(dummy->checkBox(), ii++,0); + dummy = addWidBool(i18n("Check NonAllday with NonAllday"), + &(KOPrefs::instance()->mCheckConflictsNonADNonAD),topFrame); + topLayout->addWidget(dummy->checkBox(), ii++,0); + + + topFrame = addPage(i18n("Alarm"),0,0); // DesktopIcon("viewmag",KIcon::SizeMedium)); @@ -1435,6 +1470,20 @@ void KOPrefsDialog::usrReadConfig() mAlarmSuspendCount->setValue(KOPrefs::instance()->mAlarmSuspendCount ); mAlarmBeepInterval->setValue(KOPrefs::instance()->mAlarmBeepInterval ); mCatDefaultColor = KOPrefs::instance()->mEventColor; + + + KConfig cfgko(locateLocal("config","korganizerrc")); + cfgko.setGroup("General"); + QStringList temp = cfgko.readListEntry("CalendarFilters"); + temp.prepend(i18n("No Filter") ); + mFilterEditItem->insertStringList( temp ); + mFilterAllItem->insertStringList( temp ); + int index = temp.findIndex( KOPrefs::instance()->mFilterConflictEditItem ); + if ( index >= 0 ) + mFilterEditItem->setCurrentItem( index ); + index = temp.findIndex( KOPrefs::instance()->mFilterConflictAllItem ); + if ( index >= 0 ) + mFilterAllItem->setCurrentItem( index ); } @@ -1479,6 +1528,9 @@ void KOPrefsDialog::usrWriteConfig() KOPrefs::instance()->mAlarmSuspendTime = mAlarmSuspendTime->value() ; KOPrefs::instance()->mAlarmSuspendCount= mAlarmSuspendCount->value() ; KOPrefs::instance()->mAlarmBeepInterval= mAlarmBeepInterval->value() ; + + KOPrefs::instance()->mFilterConflictEditItem = mFilterEditItem->currentText(); + KOPrefs::instance()->mFilterConflictAllItem = mFilterAllItem->currentText(); } void KOPrefsDialog::updateCategories() diff --git a/korganizer/koprefsdialog.h b/korganizer/koprefsdialog.h index baa6cf9..ee7a7aa 100644 --- a/korganizer/koprefsdialog.h +++ b/korganizer/koprefsdialog.h @@ -147,6 +147,8 @@ class KOPrefsDialog : public KPrefsDialog QSpinBox * mAlarmSuspendCount; QSpinBox * mAlarmBeepInterval; + QComboBox * mFilterEditItem, *mFilterAllItem; + QLineEdit * mDefaultAlarmFile; int mSpacingHint; int mMarginHint; |