summaryrefslogtreecommitdiffabout
path: root/korganizer
Side-by-side diff
Diffstat (limited to 'korganizer') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/calendarview.cpp42
1 files changed, 34 insertions, 8 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index a9e402e..427d71b 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -646,101 +646,118 @@ void CalendarView::init()
CalendarView::~CalendarView()
{
// kdDebug() << "~CalendarView()" << endl;
//qDebug("CalendarView::~CalendarView() ");
delete mDialogManager;
delete mViewManager;
delete mStorage;
delete mDateFrame ;
delete mEventViewerDialog;
//kdDebug() << "~CalendarView() done" << endl;
}
void CalendarView::nextConflict( bool all, bool allday )
{
-
+ static bool block = false;
+ if ( block ) return;
+ block = true;
QPtrList<Event> testlist = mCalendar->events();
Event * test = testlist.first();
while ( test ) {
test->setTagged( false );
test = testlist.next();
}
QTime st ( 0,0,0);
if ( mViewManager->currentView() == mViewManager->agendaView() )
st = mViewManager->agendaView()->agenda()->getEndTime();
//qDebug("time %s ", st.toString().latin1());
QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
QDateTime conflict;
QDateTime retVal;
bool found = false;
Event * cE = 0;
Event * cE2 = 0;
QPtrList<Event> testlist2 = testlist;
test = testlist.first();
bool skip = false;
topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
+ //QTime tm;
+ //tm.start();
while ( test ) {
qApp->processEvents();
skip = false;
if ( !all ) skip = ( allday != test->doesFloat() );
if ( !skip ) {
+ if ( found )
+ skip = !test->matchTime( &startDT, &conflict );
+ else
+ skip = !test->matchTime( &startDT, 0 );
+ }
+ if ( !skip ) {
Event * test2 = testlist2.first();
while ( test2 ) {
- skip = false;
- if ( !all ) skip = ( allday != test2->doesFloat() );
+ skip = test2->isTagged();
+ if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
+ if ( !skip ) {
+ if ( found )
+ skip = !test2->matchTime( &startDT, &conflict );
+ else
+ skip = !test2->matchTime( &startDT, 0 );
+ }
if ( !skip ) {
- if ( !test2->isTagged() ) {
if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
//qDebug("overlap ");
if ( ! found ) {
if ( retVal >= startDT ) {
conflict = retVal;
cE = test;
cE2 = test2;
found = true;
}
} else {
if ( retVal >= startDT && retVal < conflict ) {
conflict = retVal;
cE = test;
cE2 = test2;
}
}
}
}
- }
test2 = testlist2.next();
}
}
test->setTagged( true );
test = testlist.next();
}
+ //qDebug("Search time : %d", tm.elapsed());
if ( found ) {
if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
mViewManager->showDayView();
mNavigator->slotDaySelect( conflict.date() );
int hour = conflict.time().hour();
mViewManager->agendaView()->setStartHour( hour );
topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
+ block = false;
return;
}
topLevelWidget()->setCaption( i18n("No conflict found") );
qDebug("No conflict found ");
+ block = false;
return;
}
void CalendarView::conflictAll()
{
nextConflict ( true, true );
}
void CalendarView::conflictAllday()
{
nextConflict ( false, true );
}
void CalendarView::conflictNotAll()
{
nextConflict ( false, false );
}
@@ -2759,43 +2776,52 @@ void CalendarView::changeEventDisplay(Event *which, int action)
mTodoList->updateView();
if ( action != KOGlobals::EVENTDELETED ) {
mConflictingEvent = which ;
QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) );
}
// }
} else {
mViewManager->currentView()->updateView();
}
}
void CalendarView::checkConflictForEvent()
{
if (!KOPrefs::instance()->mConfirm)
return;
if ( ! mConflictingEvent ) return;
- topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
+ QDateTime current = QDateTime::currentDateTime();
+ if ( ! mConflictingEvent->matchTime( &current, 0 ) ) {
+ mConflictingEvent = 0;
+ return;
+ }
QPtrList<Event> testlist = mCalendar->events();
Event * test = testlist.first();
QDateTime conflict;
QDateTime retVal;
bool found = false;
Event * cE = 0;
- QDateTime current = QDateTime::currentDateTime();
+ topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
while ( test ) {
qApp->processEvents();
- if ( !test->doesFloat() ) {
+ bool skip = false;
+ if ( found )
+ skip = !test->matchTime( &current, &conflict );
+ else
+ skip = !test->matchTime( &current, 0 );
+ if ( !skip && !test->doesFloat() ) {
if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
if ( ! found ) {
conflict = retVal;
cE = test;
} else {
if ( retVal < conflict ) {
conflict = retVal;
cE = test;
}
}
found = true;
}
}
test = testlist.next();
}
if ( found ) {