author | zautrix <zautrix> | 2005-07-07 04:18:11 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-07-07 04:18:11 (UTC) |
commit | b4d85da57e2d558ec088af6f3b2a34b1854462c0 (patch) (side-by-side diff) | |
tree | 0860bfaae1d15aae6cd24861eaa87d0331fb364a /korganizer | |
parent | cb350dbe9151db2ded62942d29d11d6c8b88eabd (diff) | |
download | kdepimpi-b4d85da57e2d558ec088af6f3b2a34b1854462c0.zip kdepimpi-b4d85da57e2d558ec088af6f3b2a34b1854462c0.tar.gz kdepimpi-b4d85da57e2d558ec088af6f3b2a34b1854462c0.tar.bz2 |
conflict
-rw-r--r-- | korganizer/calendarview.cpp | 80 | ||||
-rw-r--r-- | korganizer/calendarview.h | 4 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 71 |
3 files changed, 126 insertions, 29 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index bc1c0c7..9a114d0 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -653,8 +653,74 @@ CalendarView::~CalendarView() delete mDateFrame ; delete mEventViewerDialog; //kdDebug() << "~CalendarView() done" << endl; } +void CalendarView::nextConflict( bool all, bool allday ) +{ + QDate start = mNavigator->selectedDates().first().addDays(1); + QDate end = start.addDays( 365*2); + while ( start < end ) { + QPtrList<Event> eventList = calendar()->events( start ); + Event * ev = eventList.first(); + QPtrList<Event> test = eventList; + while ( ev ) { + //qDebug("found %d on %s ", eventList.count(), start.toString().latin1()); + Event * t_ev = test.first(); + QDateTime es = ev->dtStart(); + QDateTime ee = ev->dtEnd(); + if ( ev->doesFloat() ) + ee = ee.addDays( 1 ); + if ( ! all ) { + if ( ev->doesFloat() != allday ) + t_ev = 0; + } + while ( t_ev ) { + bool skip = false; + if ( ! all ) { + if ( t_ev->doesFloat() != allday ) + skip = true; + } + if ( !skip && ev != t_ev ) { + QDateTime ets = t_ev->dtStart(); + QDateTime ete = t_ev->dtEnd(); + if ( t_ev->doesFloat() ) + ete = ete.addDays( 1 ); + //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() ); + if ( es < ete && ets < ee ) { + if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) + mViewManager->showDayView(); + mNavigator->slotDaySelect( start ); + int hour = es.time().hour(); + if ( ets > es ) + hour = ets.time().hour(); + mViewManager->agendaView()->setStartHour( hour ); + topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) ); + return; + } + } + t_ev = test.next(); + } + ev = eventList.next(); + } + start = start.addDays( 1 ); + } + topLevelWidget()->setCaption( i18n("No conflict found within the next two years") ); + qDebug("No conflict found "); +} + +void CalendarView::conflictAll() +{ + nextConflict ( true, true ); +} +void CalendarView::conflictAllday() +{ + nextConflict ( false, true ); +} +void CalendarView::conflictNotAll() +{ + nextConflict ( false, false ); +} + void CalendarView::setCalReadOnly( int id, bool readO ) { if ( readO ) { emit save(); @@ -3161,9 +3227,9 @@ void CalendarView::cloneIncidence(Incidence * orgInc ) Todo* t = (Todo*) newInc; bool cloneSub = false; if ( orgInc->relations().count() ) { int result = KMessageBox::warningYesNoCancel(this, - i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( newInc->summary().left ( 25 ) ), + i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), i18n("Todo has subtodos"), i18n("Yes"), i18n("No")); @@ -3499,9 +3565,9 @@ void CalendarView::deleteTodo(Todo *todo) KNotifyClient::beep(); return; } if (KOPrefs::instance()->mConfirm) { - QString text = todo->summary().left(20); + QString text = KGlobal::formatMessage ( todo->summary(),0 ); if (!todo->relations().isEmpty()) { text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); } @@ -3545,9 +3611,9 @@ void CalendarView::deleteJournal(Journal *jour) des = des.simplifyWhiteSpace (); des.replace (QRegExp ("\\n"),"" ); des.replace (QRegExp ("\\r"),"" ); } - switch (msgItemDelete( i18n("Journal:") +"\n"+des.left(20))) { + switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { case KMessageBox::Continue: // OK calendar()->deleteJournal(jour); updateView(); break; @@ -3571,17 +3637,17 @@ void CalendarView::deleteEvent(Event *anEvent) int km; if (!itemDate.isValid()) { //kdDebug() << "Date Not Valid" << endl; if (KOPrefs::instance()->mConfirm) { - km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + + km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), i18n("KO/Pi Confirmation"),i18n("Delete All")); if ( km == KMessageBox::Continue ) km = KMessageBox::No; // No = all below } else km = KMessageBox::No; } else { - km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + + km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), i18n("KO/Pi Confirmation"),i18n("Current"), i18n("All")); @@ -3620,9 +3686,9 @@ void CalendarView::deleteEvent(Event *anEvent) //#endif } // switch } else { if (KOPrefs::instance()->mConfirm) { - switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + + switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + i18n("\nAre you sure you want\nto delete this event?"), i18n("KO/Pi Confirmation"),i18n("Delete"))) { case KMessageBox::Continue: // OK if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) @@ -4579,9 +4645,9 @@ void CalendarView::undo_delete() KMessageBox::sorry(this,i18n("There is nothing to undo!"), i18n("KO/Pi")); return; } - if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + + if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + i18n("\nAre you sure you want\nto restore this?"), i18n("KO/Pi Confirmation"),i18n("Restore"))) { mCalendar->undoDeleteIncidence(); updateView(); diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index a5f230a..51eb1d4 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h @@ -199,8 +199,12 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser void filtersUpdated(); public slots: + void nextConflict( bool all, bool allday ); + void conflictAll(); + void conflictAllday(); + void conflictNotAll(); void setCalReadOnly( int id, bool readO ); void checkAlarms(); void checkFiles(); void slotprintSelInc(); diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 9c2ac82..bfae1b5 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -658,8 +658,9 @@ void MainWindow::initActions() QPopupMenu *viewMenu = new QPopupMenu( this ); QPopupMenu *actionMenu = new QPopupMenu( this ); mCurrentItemMenu = new QPopupMenu ( this ); + QPopupMenu *nextConflictMenu = new QPopupMenu ( this ); QPopupMenu *importMenu = new QPopupMenu( this ); QPopupMenu *importMenu_X = new QPopupMenu( this ); QPopupMenu *exportMenu_X = new QPopupMenu( this ); QPopupMenu *beamMenu_X = new QPopupMenu( this ); @@ -788,17 +789,44 @@ void MainWindow::initActions() QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); search_action->addTo( actionMenu ); connect( search_action, SIGNAL( activated() ), mView->dialogManager(), SLOT( showSearchDialog() ) ); + actionMenu->insertItem( i18n("Show next conflict for"), nextConflictMenu ); + action = new QAction( "Undo Delete", i18n("All events"), 0, this ); + action->addTo( nextConflictMenu ); + connect( action, SIGNAL( activated() ), + mView, SLOT( conflictAll() ) ); + + action = new QAction( "Undo Delete", i18n("Allday events"), 0, this ); + action->addTo( nextConflictMenu ); + connect( action, SIGNAL( activated() ), + mView, SLOT( conflictAllday() ) ); + + action = new QAction( "Undo Delete", i18n("Events with time"), 0, this ); + action->addTo( nextConflictMenu ); + connect( action, SIGNAL( activated() ), + mView, SLOT( conflictNotAll() ) ); + actionMenu->insertSeparator(); + icon = loadPixmap( pathString + "newevent" ); + QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); + ne_action->addTo( mCurrentItemMenu ); + connect( ne_action, SIGNAL( activated() ), + mView, SLOT( newEvent() ) ); + icon = loadPixmap( pathString + "newtodo" ); + configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); + QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); + nt_action->addTo( mCurrentItemMenu ); + connect( nt_action, SIGNAL( activated() ), + mView, SLOT( newTodo() ) ); + mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, + this ); + mNewSubTodoAction->addTo( mCurrentItemMenu ); + connect( mNewSubTodoAction, SIGNAL( activated() ), + mView, SLOT( newSubTodo() ) ); - - action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); - action->addTo( mCurrentItemMenu ); - connect( action, SIGNAL( activated() ), - mView, SLOT( undo_delete() ) ); mCurrentItemMenu->insertSeparator(); icon = loadPixmap( pathString + "newevent" ); configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); configureToolBarMenu->insertItem(i18n("Only one toolbar"), 6 ); @@ -843,20 +871,14 @@ void MainWindow::initActions() mCancelAction->addTo( mCurrentItemMenu ); connect( mCancelAction, SIGNAL( activated() ), mView, SLOT( toggleCancelIncidence() ) ); - QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); - ne_action->addTo( actionMenu ); - connect( ne_action, SIGNAL( activated() ), - mView, SLOT( newEvent() ) ); - icon = loadPixmap( pathString + "newtodo" ); - configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); - QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); - nt_action->addTo( actionMenu ); - connect( nt_action, SIGNAL( activated() ), - mView, SLOT( newTodo() ) ); - - + + mCurrentItemMenu->insertSeparator(); + action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); + action->addTo( mCurrentItemMenu ); + connect( action, SIGNAL( activated() ), + mView, SLOT( undo_delete() ) ); // *********************** if ( KOPrefs::instance()->mVerticalScreen ) { icon = SmallIcon( "1updownarrow" ); @@ -995,13 +1017,9 @@ void MainWindow::initActions() connect( action, SIGNAL( activated() ), mView->viewManager(), SLOT( showTimeSpanView() ) ); #endif - mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, - this ); - mNewSubTodoAction->addTo( actionMenu ); - connect( mNewSubTodoAction, SIGNAL( activated() ), - mView, SLOT( newSubTodo() ) ); + action = new QAction( "purge_completed", i18n("Purge Completed..."), 0, this ); action->addTo( actionMenu ); @@ -1564,8 +1582,9 @@ void MainWindow::keyBindings() i18n("<p><b>R</b>: Toggle Resource View |<b>F</b>: Edit filter </p>\n")+ i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ i18n("<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ")+ + i18n("<p><b>Q</b>: Show next date with conflicting events\n ")+ i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ i18n("<p><b>K</b>: Week view in Month view syle</p>\n")+ @@ -2098,8 +2117,16 @@ void MainWindow::keyPressEvent ( QKeyEvent * e ) mView->goToday(); showSelectedDates = true; } break; + case Qt::Key_Q: + if ( e->state() == Qt::ControlButton ) + mView->conflictNotAll(); + else if ( e->state() == Qt::ShiftButton ) + mView->conflictAllday(); + else + mView->conflictAll(); + break; case Qt::Key_J: mView->viewManager()->showJournalView(); break; case Qt::Key_B: |