summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt14
-rw-r--r--korganizer/calendarview.cpp73
-rw-r--r--korganizer/koprefs.cpp10
-rw-r--r--korganizer/koprefs.h9
-rw-r--r--korganizer/koprefsdialog.cpp52
-rw-r--r--korganizer/koprefsdialog.h2
6 files changed, 138 insertions, 22 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
@@ -1500,9 +1500,9 @@
{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
{ "<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" },
{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
@@ -1545,11 +1545,17 @@
{ "Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.","Klicken Sie diesen Knopf <b>um einen Kalender hinzuzufügen</b>. Sie können eine existierende Kalenderdatei hinzufügen oder einen neuen Kalender und KO/Pi legt dann eine neue leere Kalenderdatei für Sie an." },
{ "<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
@@ -3035,9 +3035,18 @@ void CalendarView::changeEventDisplay(Event *which, int action)
int time = 1000;
#ifdef DESKTOP_VERSION
time = 500;
#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() ) );
}
// }
} else {
mViewManager->currentView()->updateView();
@@ -3054,34 +3063,64 @@ void CalendarView::checkConflictForEvent()
QDateTime current = QDateTime::currentDateTime();
if ( ! conflictingEvent->matchTime( &current, 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;
- if ( found )
- skip = !test->matchTime( &current, &conflict );
- else
- skip = !test->matchTime( &current, 0 );
- if ( !skip && !test->doesFloat() ) {
- if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
- 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( &current, &conflict );
+ else
+ skip = !test->matchTime( &current, 0 );
+ if ( !skip ) {
+ if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
+ if ( ! found ) {
+ conflict = retVal;
+ cE = test;
+ } else {
+ if ( retVal < conflict ) {
+ conflict = retVal;
+ cE = test;
+ }
+ }
+ found = true;
}
}
- found = true;
}
}
test = testlist.next();
}
@@ -3089,9 +3128,9 @@ void CalendarView::checkConflictForEvent()
if ( found ) {
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;
}
if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp
index 77f572c..571ca11 100644
--- a/korganizer/koprefs.cpp
+++ b/korganizer/koprefs.cpp
@@ -229,9 +229,17 @@ KOPrefs::KOPrefs() :
addItemColor("AppColor2",&mAppColor2,QColor( 174,216,255 ));
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);
addItemBool("Show Date Navigator",&mShowDateNavigator,true);
addItemInt("Hour Size",&mHourSize,8);
diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h
index 9749ba3..576edf9 100644
--- a/korganizer/koprefs.h
+++ b/korganizer/koprefs.h
@@ -348,8 +348,17 @@ class KOPrefs : public KPimPrefs
QPtrList<KopiCalendarFile> mCalendars;
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;
QColor mDefaultCategoryColor;
diff --git a/korganizer/koprefsdialog.cpp b/korganizer/koprefsdialog.cpp
index 9e2378a..bbdf508 100644
--- a/korganizer/koprefsdialog.cpp
+++ b/korganizer/koprefsdialog.cpp
@@ -921,8 +921,43 @@ dummy =
dummy = addWidBool(i18n("Last modified time"),
&(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));
@@ -1434,8 +1469,22 @@ void KOPrefsDialog::usrReadConfig()
mAlarmSuspendTime->setValue(KOPrefs::instance()->mAlarmSuspendTime );
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 );
}
void KOPrefsDialog::usrWriteConfig()
@@ -1478,8 +1527,11 @@ void KOPrefsDialog::usrWriteConfig()
KOPrefs::instance()->mAlarmPlayBeeps = mAlarmPlayBeeps->value();
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
@@ -146,8 +146,10 @@ class KOPrefsDialog : public KPrefsDialog
QSpinBox * mAlarmSuspendTime;
QSpinBox * mAlarmSuspendCount;
QSpinBox * mAlarmBeepInterval;
+ QComboBox * mFilterEditItem, *mFilterAllItem;
+
QLineEdit * mDefaultAlarmFile;
int mSpacingHint;
int mMarginHint;
};