-rw-r--r-- | korganizer/calendarview.cpp | 73 | ||||
-rw-r--r-- | korganizer/koprefs.cpp | 10 | ||||
-rw-r--r-- | korganizer/koprefs.h | 9 | ||||
-rw-r--r-- | korganizer/koprefsdialog.cpp | 52 | ||||
-rw-r--r-- | korganizer/koprefsdialog.h | 2 |
5 files changed, 128 insertions, 18 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 26323b1..898da6c 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -3038,3 +3038,12 @@ void CalendarView::changeEventDisplay(Event *which, int action) #endif - QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); + 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() ) ); } @@ -3057,2 +3066,17 @@ void CalendarView::checkConflictForEvent() } + 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(); @@ -3063,2 +3087,8 @@ void CalendarView::checkConflictForEvent() 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") ); @@ -3066,19 +3096,28 @@ void CalendarView::checkConflictForEvent() qApp->processEvents(); - bool skip = false; - if ( found ) - skip = !test->matchTime( ¤t, &conflict ); - else - skip = !test->matchTime( ¤t, 0 ); - if ( !skip && !test->doesFloat() ) { - if ( conflictingEvent->isOverlapping ( test, &retVal, ¤t ) ) { - if ( ! found ) { - conflict = retVal; - cE = test; - } else { - if ( retVal < conflict ) { - conflict = retVal; - cE = test; + 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 ) { + if ( conflictingEvent->isOverlapping ( test, &retVal, ¤t ) ) { + if ( ! found ) { + conflict = retVal; + cE = test; + } else { + if ( retVal < conflict ) { + conflict = retVal; + cE = test; + } + } + found = true; } } - found = true; } @@ -3092,3 +3131,3 @@ void CalendarView::checkConflictForEvent() 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 ) { diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index 77f572c..571ca11 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp @@ -232,3 +232,11 @@ KOPrefs::KOPrefs() : - + 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"); diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index 9749ba3..576edf9 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h @@ -351,2 +351,11 @@ class KOPrefs : public KPimPrefs + + bool mDetectConflicts; + bool mCheckConflictsAllDayAllDay; + bool mCheckConflictsAllDayNonAD; + bool mCheckConflictsNonADAllDay; + bool mCheckConflictsNonADNonAD; + QString mFilterConflictEditItem; + QString mFilterConflictAllItem; + private: diff --git a/korganizer/koprefsdialog.cpp b/korganizer/koprefsdialog.cpp index 9e2378a..bbdf508 100644 --- a/korganizer/koprefsdialog.cpp +++ b/korganizer/koprefsdialog.cpp @@ -924,2 +924,37 @@ dummy = + 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); + + + @@ -1437,2 +1472,16 @@ void KOPrefsDialog::usrReadConfig() 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 ); } @@ -1481,2 +1530,5 @@ void KOPrefsDialog::usrWriteConfig() KOPrefs::instance()->mAlarmBeepInterval= mAlarmBeepInterval->value() ; + + KOPrefs::instance()->mFilterConflictEditItem = mFilterEditItem->currentText(); + KOPrefs::instance()->mFilterConflictAllItem = mFilterAllItem->currentText(); } diff --git a/korganizer/koprefsdialog.h b/korganizer/koprefsdialog.h index baa6cf9..ee7a7aa 100644 --- a/korganizer/koprefsdialog.h +++ b/korganizer/koprefsdialog.h @@ -149,2 +149,4 @@ class KOPrefsDialog : public KPrefsDialog + QComboBox * mFilterEditItem, *mFilterAllItem; + QLineEdit * mDefaultAlarmFile; |