-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 13 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 153 | ||||
-rw-r--r-- | korganizer/kotodoview.cpp | 16 | ||||
-rw-r--r-- | libkcal/event.cpp | 115 | ||||
-rw-r--r-- | libkcal/event.h | 2 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 8 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 4 |
7 files changed, 243 insertions, 68 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index b225594..43bc343 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt | |||
@@ -1498,23 +1498,20 @@ | |||
1498 | { "All events","Alle Termine" }, | 1498 | { "All events","Alle Termine" }, |
1499 | { "Allday events","Ganztagestermine" }, | 1499 | { "Allday events","Ganztagestermine" }, |
1500 | { "Events with time","Termine mit Zeit" }, | 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" }, | 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" }, | 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 " }, | 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 | { "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, | ||
1505 | { "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" }, | ||
1506 | { "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" }, | ||
1507 | { "Show date","Zeige Datum" }, | ||
1508 | { "No problem!","Kein Problem!" }, | ||
1504 | { "","" }, | 1509 | { "","" }, |
1505 | { "","" }, | 1510 | { "","" }, |
1506 | { "","" }, | 1511 | { "","" }, |
1507 | { "","" }, | 1512 | { "","" }, |
1508 | { "","" }, | 1513 | { "","" }, |
1509 | { "","" }, | 1514 | { "","" }, |
1510 | { "","" }, | 1515 | { "","" }, |
1511 | { "","" }, | 1516 | { "","" }, |
1512 | { "","" }, | 1517 | { "","" }, |
1513 | { "","" }, | ||
1514 | { "","" }, | ||
1515 | { "","" }, | ||
1516 | { "","" }, | ||
1517 | { "","" }, | ||
1518 | |||
1519 | |||
1520 | |||
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index e766b8f..65750af 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -653,13 +653,69 @@ CalendarView::~CalendarView() | |||
653 | delete mDateFrame ; | 653 | delete mDateFrame ; |
654 | delete mEventViewerDialog; | 654 | delete mEventViewerDialog; |
655 | //kdDebug() << "~CalendarView() done" << endl; | 655 | //kdDebug() << "~CalendarView() done" << endl; |
656 | } | 656 | } |
657 | void CalendarView::nextConflict( bool all, bool allday ) | 657 | void CalendarView::nextConflict( bool all, bool allday ) |
658 | { | 658 | { |
659 | QDate start = mNavigator->selectedDates().first().addDays(1); | 659 | |
660 | QPtrList<Event> testlist = mCalendar->events(); | ||
661 | Event * test = testlist.first(); | ||
662 | while ( test ) { | ||
663 | test->setTagged( false ); | ||
664 | } | ||
665 | QDateTime startDT = QDateTime (mNavigator->selectedDates().first().addDays(1), QTime ( 0,0,0)); | ||
666 | QDateTime conflict; | ||
667 | QDateTime retVal; | ||
668 | bool found = false; | ||
669 | Event * cE = 0; | ||
670 | QPtrList<Event> testlist2 = testlist; | ||
671 | while ( test ) { | ||
672 | Event * test2 = testlist2.first(); | ||
673 | while ( test2 ) { | ||
674 | if ( !test2->isTagged() ) { | ||
675 | if ( test->isOverlapping ( test2, &retVal, true ) ) { | ||
676 | if ( ! found ) { | ||
677 | if ( retVal >= startDT ) { | ||
678 | conflict = retVal; | ||
679 | cE = test; | ||
680 | found = true; | ||
681 | } | ||
682 | } else { | ||
683 | if ( retVal >= startDT && retVal < conflict ) { | ||
684 | conflict = retVal; | ||
685 | cE = test; | ||
686 | } | ||
687 | } | ||
688 | } | ||
689 | } | ||
690 | test2 = testlist2.next(); | ||
691 | } | ||
692 | test->setTagged( true ); | ||
693 | test = testlist.next(); | ||
694 | } | ||
695 | if ( found ) { | ||
696 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
697 | mViewManager->showDayView(); | ||
698 | mNavigator->slotDaySelect( conflict.date() ); | ||
699 | int hour = conflict.time().hour(); | ||
700 | mViewManager->agendaView()->setStartHour( hour ); | ||
701 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); | ||
702 | return; | ||
703 | } | ||
704 | |||
705 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); | ||
706 | qDebug("No conflict found "); | ||
707 | return; | ||
708 | |||
709 | |||
710 | |||
711 | |||
712 | |||
713 | #if 0 | ||
714 | |||
715 | |||
660 | QDate end = start.addDays( 365*2); | 716 | QDate end = start.addDays( 365*2); |
661 | while ( start < end ) { | 717 | while ( start < end ) { |
662 | QPtrList<Event> eventList = calendar()->events( start ); | 718 | QPtrList<Event> eventList = calendar()->events( start ); |
663 | Event * ev = eventList.first(); | 719 | Event * ev = eventList.first(); |
664 | QPtrList<Event> test = eventList; | 720 | QPtrList<Event> test = eventList; |
665 | while ( ev ) { | 721 | while ( ev ) { |
@@ -702,12 +758,13 @@ void CalendarView::nextConflict( bool all, bool allday ) | |||
702 | ev = eventList.next(); | 758 | ev = eventList.next(); |
703 | } | 759 | } |
704 | start = start.addDays( 1 ); | 760 | start = start.addDays( 1 ); |
705 | } | 761 | } |
706 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); | 762 | topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); |
707 | qDebug("No conflict found "); | 763 | qDebug("No conflict found "); |
764 | #endif | ||
708 | } | 765 | } |
709 | 766 | ||
710 | void CalendarView::conflictAll() | 767 | void CalendarView::conflictAll() |
711 | { | 768 | { |
712 | nextConflict ( true, true ); | 769 | nextConflict ( true, true ); |
713 | } | 770 | } |
@@ -2692,29 +2749,23 @@ void CalendarView::changeIncidenceDisplay(Incidence *which, int action) | |||
2692 | // most of the changeEventDisplays() right now just call the view's | 2749 | // most of the changeEventDisplays() right now just call the view's |
2693 | // total update mode, but they SHOULD be recoded to be more refresh-efficient. | 2750 | // total update mode, but they SHOULD be recoded to be more refresh-efficient. |
2694 | void CalendarView::changeEventDisplay(Event *which, int action) | 2751 | void CalendarView::changeEventDisplay(Event *which, int action) |
2695 | { | 2752 | { |
2696 | // kdDebug() << "CalendarView::changeEventDisplay" << endl; | 2753 | // kdDebug() << "CalendarView::changeEventDisplay" << endl; |
2697 | changeIncidenceDisplay((Incidence *)which, action); | 2754 | changeIncidenceDisplay((Incidence *)which, action); |
2698 | |||
2699 | |||
2700 | static bool clearallviews = false; | 2755 | static bool clearallviews = false; |
2701 | if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { | 2756 | if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { |
2702 | if ( clearallviews ) { | 2757 | if ( clearallviews ) { |
2703 | clearAllViews(); | 2758 | clearAllViews(); |
2704 | clearallviews = false; | 2759 | clearallviews = false; |
2705 | } | 2760 | } |
2706 | return; | 2761 | return; |
2707 | } | 2762 | } |
2708 | clearallviews = true; | 2763 | clearallviews = true; |
2709 | |||
2710 | |||
2711 | |||
2712 | mDateNavigator->updateView(); | 2764 | mDateNavigator->updateView(); |
2713 | //mDialogManager->updateSearchDialog(); | 2765 | //mDialogManager->updateSearchDialog(); |
2714 | |||
2715 | if (which) { | 2766 | if (which) { |
2716 | // If there is an event view visible update the display | 2767 | // If there is an event view visible update the display |
2717 | mViewManager->currentView()->changeEventDisplay(which,action); | 2768 | mViewManager->currentView()->changeEventDisplay(which,action); |
2718 | // TODO: check, if update needed | 2769 | // TODO: check, if update needed |
2719 | // if (which->getTodoStatus()) { | 2770 | // if (which->getTodoStatus()) { |
2720 | mTodoList->updateView(); | 2771 | mTodoList->updateView(); |
@@ -2734,68 +2785,54 @@ void CalendarView::checkConflictForEvent() | |||
2734 | return; | 2785 | return; |
2735 | if ( ! mConflictingEvent ) return; | 2786 | if ( ! mConflictingEvent ) return; |
2736 | if ( mConflictingEvent->doesFloat() ) { | 2787 | if ( mConflictingEvent->doesFloat() ) { |
2737 | mConflictingEvent = 0; | 2788 | mConflictingEvent = 0; |
2738 | return; | 2789 | return; |
2739 | } | 2790 | } |
2740 | bool all = false; | 2791 | QPtrList<Event> testlist = mCalendar->events(); |
2741 | bool allday = false; | 2792 | Event * test = testlist.first(); |
2742 | Event * ev = mConflictingEvent; | 2793 | QDateTime conflict; |
2743 | mConflictingEvent = 0; | 2794 | QDateTime retVal; |
2744 | QDate start = ev->dtStart().date(); | 2795 | bool found = false; |
2745 | QDate end = ev->dtEnd().date().addDays(1); | 2796 | Event * cE = 0; |
2746 | while ( start < end ) { | 2797 | while ( test ) { |
2747 | QPtrList<Event> test = calendar()->events( start ); | 2798 | if ( !test->doesFloat() ) { |
2748 | //qDebug("found %d on %s ", eventList.count(), start.toString().latin1()); | 2799 | if ( mConflictingEvent->isOverlapping ( test, &retVal, true ) ) { |
2749 | Event * t_ev = test.first(); | 2800 | if ( ! found ) { |
2750 | QDateTime es = ev->dtStart(); | 2801 | conflict = retVal; |
2751 | QDateTime ee = ev->dtEnd(); | 2802 | cE = test; |
2752 | if ( ev->doesFloat() ) | 2803 | } else { |
2753 | ee = ee.addDays( 1 ); | 2804 | if ( retVal < conflict ) { |
2754 | if ( ! all ) { | 2805 | conflict = retVal; |
2755 | if ( ev->doesFloat() != allday ) | 2806 | cE = test; |
2756 | t_ev = 0; | 2807 | } |
2757 | } | ||
2758 | while ( t_ev ) { | ||
2759 | bool skip = false; | ||
2760 | if ( ! all ) { | ||
2761 | if ( t_ev->doesFloat() != allday ) | ||
2762 | skip = true; | ||
2763 | } | ||
2764 | if ( !skip && ev != t_ev ) { | ||
2765 | QDateTime ets = t_ev->dtStart(); | ||
2766 | QDateTime ete = t_ev->dtEnd(); | ||
2767 | if ( t_ev->doesFloat() ) | ||
2768 | ete = ete.addDays( 1 ); | ||
2769 | //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() ); | ||
2770 | if ( es < ete && ets < ee ) { | ||
2771 | QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( ev->summary(),0 ) ).arg( KGlobal::formatMessage ( t_ev->summary(),0 )).arg(KGlobal::locale()->formatDate(start) ) ; | ||
2772 | qApp->processEvents(); | ||
2773 | int km = KMessageBox::warningContinueCancel(this,mess, | ||
2774 | i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); | ||
2775 | if ( km != KMessageBox::Continue ) | ||
2776 | return; | ||
2777 | |||
2778 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
2779 | mViewManager->showDayView(); | ||
2780 | mNavigator->slotDaySelect( start ); | ||
2781 | int hour = es.time().hour(); | ||
2782 | if ( ets > es ) | ||
2783 | hour = ets.time().hour(); | ||
2784 | mViewManager->agendaView()->setStartHour( hour ); | ||
2785 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) ); | ||
2786 | return; | ||
2787 | } | 2808 | } |
2809 | found = true; | ||
2788 | } | 2810 | } |
2789 | t_ev = test.next(); | ||
2790 | } | 2811 | } |
2791 | start = start.addDays( 1 ); | 2812 | test = testlist.next(); |
2792 | } | 2813 | } |
2793 | qDebug("No conflict found "); | 2814 | if ( found ) { |
2794 | 2815 | QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( mConflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; | |
2816 | qApp->processEvents(); | ||
2817 | int km = KMessageBox::warningContinueCancel(this,mess, | ||
2818 | i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); | ||
2819 | if ( km != KMessageBox::Continue ) | ||
2820 | return; | ||
2795 | 2821 | ||
2822 | if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) | ||
2823 | mViewManager->showDayView(); | ||
2824 | mNavigator->slotDaySelect( conflict.date() ); | ||
2825 | int hour = conflict.time().hour(); | ||
2826 | mViewManager->agendaView()->setStartHour( hour ); | ||
2827 | topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); | ||
2828 | return; | ||
2829 | } | ||
2830 | |||
2831 | return; | ||
2832 | |||
2796 | } | 2833 | } |
2797 | 2834 | ||
2798 | void CalendarView::updateTodoViews() | 2835 | void CalendarView::updateTodoViews() |
2799 | { | 2836 | { |
2800 | mTodoList->updateView(); | 2837 | mTodoList->updateView(); |
2801 | mViewManager->currentView()->updateView(); | 2838 | mViewManager->currentView()->updateView(); |
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index 2c017e1..c2ad886 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -399,12 +399,16 @@ void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) | |||
399 | } | 399 | } |
400 | 400 | ||
401 | 401 | ||
402 | void KOTodoListView::keyPressEvent ( QKeyEvent * e ) | 402 | void KOTodoListView::keyPressEvent ( QKeyEvent * e ) |
403 | { | 403 | { |
404 | qApp->processEvents(); | 404 | qApp->processEvents(); |
405 | if ( !isVisible() ) { | ||
406 | e->ignore(); | ||
407 | return; | ||
408 | } | ||
405 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | 409 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { |
406 | e->ignore(); | 410 | e->ignore(); |
407 | // qDebug(" ignore %d",e->isAutoRepeat() ); | 411 | // qDebug(" ignore %d",e->isAutoRepeat() ); |
408 | return; | 412 | return; |
409 | } | 413 | } |
410 | if (! e->isAutoRepeat() ) | 414 | if (! e->isAutoRepeat() ) |
@@ -1596,20 +1600,30 @@ void KOTodoView::addQuickTodoPar( Todo * parentTodo) | |||
1596 | 1600 | ||
1597 | } | 1601 | } |
1598 | void KOTodoView::keyPressEvent ( QKeyEvent * e ) | 1602 | void KOTodoView::keyPressEvent ( QKeyEvent * e ) |
1599 | { | 1603 | { |
1600 | // e->ignore(); | 1604 | // e->ignore(); |
1601 | //return; | 1605 | //return; |
1602 | //qDebug("KOTodoView::keyPressEvent "); | 1606 | //qDebug("KOTodoView::keyPressEvent "); |
1607 | if ( !isVisible() ) { | ||
1608 | e->ignore(); | ||
1609 | return; | ||
1610 | } | ||
1603 | switch ( e->key() ) { | 1611 | switch ( e->key() ) { |
1604 | case Qt::Key_Down: | 1612 | case Qt::Key_Down: |
1605 | case Qt::Key_Up: | 1613 | case Qt::Key_Up: |
1606 | QWidget::keyPressEvent ( e ); | 1614 | QWidget::keyPressEvent ( e ); |
1607 | break; | 1615 | break; |
1608 | 1616 | ||
1609 | case Qt::Key_Q: | 1617 | case Qt::Key_Q: |
1618 | |||
1619 | |||
1620 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) { | ||
1621 | e->ignore(); | ||
1622 | break; | ||
1623 | } | ||
1610 | toggleQuickTodo(); | 1624 | toggleQuickTodo(); |
1611 | break; | 1625 | break; |
1612 | case Qt::Key_U: | 1626 | case Qt::Key_U: |
1613 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { | 1627 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { |
1614 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | 1628 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); |
1615 | unparentTodo(); | 1629 | unparentTodo(); |
diff --git a/libkcal/event.cpp b/libkcal/event.cpp index 7cd81fa..235ae55 100644 --- a/libkcal/event.cpp +++ b/libkcal/event.cpp | |||
@@ -168,12 +168,127 @@ Event::Transparency Event::transparency() const | |||
168 | 168 | ||
169 | void Event::setDuration(int seconds) | 169 | void Event::setDuration(int seconds) |
170 | { | 170 | { |
171 | setHasEndDate(false); | 171 | setHasEndDate(false); |
172 | Incidence::setDuration(seconds); | 172 | Incidence::setDuration(seconds); |
173 | } | 173 | } |
174 | bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, bool inFutureOnly ) | ||
175 | { | ||
176 | if ( testEvent == this ) | ||
177 | return false; | ||
178 | if ( ! doesRecur() && !testEvent->doesRecur() ) { | ||
179 | QDateTime te; | ||
180 | if ( testEvent->doesFloat() ) | ||
181 | te = testEvent->mDtEnd.addDays( 1 ); | ||
182 | else | ||
183 | te = testEvent->mDtEnd; | ||
184 | QDateTime e; | ||
185 | if ( doesFloat() ) | ||
186 | e = mDtEnd.addDays( 1 ); | ||
187 | else | ||
188 | e = mDtEnd; | ||
189 | if ( mDtStart < te && testEvent->mDtStart < e ) { | ||
190 | if ( mDtStart < testEvent->mDtStart ) | ||
191 | *overlapDT = testEvent->mDtStart; | ||
192 | else | ||
193 | *overlapDT = mDtStart; | ||
194 | if ( inFutureOnly ) | ||
195 | return (*overlapDT >= QDateTime::currentDateTime() ); | ||
196 | return true; | ||
197 | } | ||
198 | return false; | ||
199 | } | ||
200 | Event *nonRecur = 0; | ||
201 | Event *recurEvent = 0; | ||
202 | if ( ! doesRecur() ) { | ||
203 | nonRecur = this; | ||
204 | recurEvent = testEvent; | ||
205 | } | ||
206 | else if ( !testEvent->doesRecur() ) { | ||
207 | nonRecur = testEvent; | ||
208 | recurEvent = this; | ||
209 | } | ||
210 | if ( nonRecur ) { | ||
211 | QDateTime enr; | ||
212 | if ( nonRecur->doesFloat() ) | ||
213 | enr = nonRecur->mDtEnd.addDays( 1 ); | ||
214 | else | ||
215 | enr = nonRecur->mDtEnd; | ||
216 | if ( enr < recurEvent->mDtStart ) | ||
217 | return false; | ||
218 | if ( inFutureOnly && enr < QDateTime::currentDateTime() ) | ||
219 | return false; | ||
220 | int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd ); | ||
221 | if ( recurEvent->doesFloat() ) | ||
222 | recDuration += 86400; | ||
223 | bool ok = true; | ||
224 | QDateTime recStart = recurEvent->mDtStart.addSecs( -300);; | ||
225 | while ( ok ) { | ||
226 | recStart = recurEvent->getNextOccurence( recStart.addSecs( 60 ), &ok ); | ||
227 | if ( ok ) { | ||
228 | if ( recStart > enr ) | ||
229 | return false; | ||
230 | QDateTime recEnd = recStart.addSecs( recDuration ); | ||
231 | if ( nonRecur->mDtStart < recEnd && recStart < nonRecur->mDtEnd ) { | ||
232 | if ( nonRecur->mDtStart < recStart ) | ||
233 | *overlapDT = recStart; | ||
234 | else | ||
235 | *overlapDT = nonRecur->mDtStart; | ||
236 | if ( inFutureOnly ) { | ||
237 | if ( *overlapDT >= QDateTime::currentDateTime() ) | ||
238 | return true; | ||
239 | } else | ||
240 | return true; | ||
241 | } | ||
242 | } | ||
243 | } | ||
244 | return false; | ||
245 | } | ||
246 | |||
247 | QDateTime incidenceStart = mDtStart; | ||
248 | int duration = mDtStart.secsTo( mDtEnd ); | ||
249 | if ( doesFloat() ) | ||
250 | duration += 86400; | ||
251 | QDateTime testincidenceStart = testEvent->mDtStart; | ||
252 | int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd ); | ||
253 | if ( testEvent->doesFloat() ) | ||
254 | testduration += 86400; | ||
255 | bool computeThis = false; | ||
256 | if ( incidenceStart < testincidenceStart ) | ||
257 | computeThis = true; | ||
258 | bool ok = true; | ||
259 | if ( computeThis ) | ||
260 | incidenceStart = incidenceStart.addSecs( -300 ); | ||
261 | else | ||
262 | testincidenceStart = testincidenceStart.addSecs( -300 ); | ||
263 | int count = 0; | ||
264 | while ( ok ) { | ||
265 | ++count; | ||
266 | if ( count > 1000 ) break; | ||
267 | if ( computeThis ) | ||
268 | incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok ); | ||
269 | else | ||
270 | testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok ); | ||
271 | if ( ok ) { | ||
272 | if ( incidenceStart < testincidenceStart.addSecs( testduration ) && testincidenceStart < incidenceStart.addSecs( duration ) ) { | ||
273 | if ( incidenceStart < testincidenceStart ) | ||
274 | *overlapDT = testincidenceStart; | ||
275 | else | ||
276 | *overlapDT = incidenceStart; | ||
277 | if ( inFutureOnly ) { | ||
278 | if ( *overlapDT >= QDateTime::currentDateTime() ) | ||
279 | return true; | ||
280 | } else | ||
281 | return true; | ||
282 | } | ||
283 | computeThis = ( incidenceStart < testincidenceStart ); | ||
284 | } | ||
285 | |||
286 | } | ||
287 | return false; | ||
288 | } | ||
174 | QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const | 289 | QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const |
175 | { | 290 | { |
176 | *ok = false; | 291 | *ok = false; |
177 | if ( !alarmEnabled() ) | 292 | if ( !alarmEnabled() ) |
178 | return QDateTime (); | 293 | return QDateTime (); |
179 | bool yes; | 294 | bool yes; |
diff --git a/libkcal/event.h b/libkcal/event.h index 287d403..80c11c4 100644 --- a/libkcal/event.h +++ b/libkcal/event.h | |||
@@ -71,12 +71,14 @@ class Event : public Incidence | |||
71 | Transparency transparency() const; | 71 | Transparency transparency() const; |
72 | 72 | ||
73 | void setDuration(int seconds); | 73 | void setDuration(int seconds); |
74 | 74 | ||
75 | bool contains ( Event*); | 75 | bool contains ( Event*); |
76 | 76 | ||
77 | bool isOverlapping ( Event*, QDateTime*, bool inFutureOnly ); | ||
78 | |||
77 | private: | 79 | private: |
78 | bool accept(Visitor &v) { return v.visit(this); } | 80 | bool accept(Visitor &v) { return v.visit(this); } |
79 | 81 | ||
80 | QDateTime mDtEnd; | 82 | QDateTime mDtEnd; |
81 | bool mHasEndDate; | 83 | bool mHasEndDate; |
82 | Transparency mTransparency; | 84 | Transparency mTransparency; |
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 96039df..dcead02 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp | |||
@@ -136,12 +136,20 @@ QDateTime IncidenceBase::getEvenTime( QDateTime dt ) | |||
136 | { | 136 | { |
137 | QTime t = dt.time(); | 137 | QTime t = dt.time(); |
138 | dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); | 138 | dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); |
139 | return dt; | 139 | return dt; |
140 | } | 140 | } |
141 | 141 | ||
142 | bool IncidenceBase::isTagged() const | ||
143 | { | ||
144 | return mIsTagged; | ||
145 | } | ||
146 | void IncidenceBase::setTagged( bool b) | ||
147 | { | ||
148 | mIsTagged = b; | ||
149 | } | ||
142 | void IncidenceBase::setCalID( int id ) | 150 | void IncidenceBase::setCalID( int id ) |
143 | { | 151 | { |
144 | if ( mCalID > 0 ) | 152 | if ( mCalID > 0 ) |
145 | updated(); | 153 | updated(); |
146 | mCalID = id; | 154 | mCalID = id; |
147 | } | 155 | } |
diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index dc6024a..bccf287 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h | |||
@@ -144,14 +144,16 @@ class IncidenceBase : public CustomProperties | |||
144 | void setCalID( int id ); | 144 | void setCalID( int id ); |
145 | int calID() const; | 145 | int calID() const; |
146 | void setCalEnabled( bool ); | 146 | void setCalEnabled( bool ); |
147 | bool calEnabled() const; | 147 | bool calEnabled() const; |
148 | void setAlarmEnabled( bool ); | 148 | void setAlarmEnabled( bool ); |
149 | bool alarmEnabled() const; | 149 | bool alarmEnabled() const; |
150 | 150 | bool isTagged() const; | |
151 | void setTagged( bool ); | ||
151 | protected: | 152 | protected: |
153 | bool mIsTagged; | ||
152 | QDateTime mDtStart; | 154 | QDateTime mDtStart; |
153 | bool mReadOnly; | 155 | bool mReadOnly; |
154 | QDateTime getEvenTime( QDateTime ); | 156 | QDateTime getEvenTime( QDateTime ); |
155 | 157 | ||
156 | private: | 158 | private: |
157 | // base components | 159 | // base components |