summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-07-07 04:18:11 (UTC)
committer zautrix <zautrix>2005-07-07 04:18:11 (UTC)
commitb4d85da57e2d558ec088af6f3b2a34b1854462c0 (patch) (side-by-side diff)
tree0860bfaae1d15aae6cd24861eaa87d0331fb364a
parentcb350dbe9151db2ded62942d29d11d6c8b88eabd (diff)
downloadkdepimpi-b4d85da57e2d558ec088af6f3b2a34b1854462c0.zip
kdepimpi-b4d85da57e2d558ec088af6f3b2a34b1854462c0.tar.gz
kdepimpi-b4d85da57e2d558ec088af6f3b2a34b1854462c0.tar.bz2
conflict
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt2
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt14
-rw-r--r--korganizer/calendarview.cpp80
-rw-r--r--korganizer/calendarview.h4
-rw-r--r--korganizer/mainwindow.cpp69
5 files changed, 141 insertions, 28 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 79de197..814c541 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -6,4 +6,6 @@ Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly a
Added a button to add a subtodo quickly.
+Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q" ).
+
********** VERSION 2.1.13 ************
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index bcc23dc..b225594 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1495,4 +1495,18 @@
{ "Show not Running","Zeige nicht Laufende" },
{ "Click to add new Todo","Klick für neues Todo!" },
+{ "Show next conflict for","Zeige nächsten Konflikt für" },
+{ "All events","Alle Termine" },
+{ "Allday events","Ganztagestermine" },
+{ "Events with time","Termine mit Zeit" },
+{ "No conflict found within the next two years","Kein Konflikt innerhalb der nächsten zwei Jahre gefunden" },
+{ "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 " },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
{ "","" },
{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index bc1c0c7..9a114d0 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -655,4 +655,70 @@ CalendarView::~CalendarView()
//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 )
{
@@ -3163,5 +3229,5 @@ void CalendarView::cloneIncidence(Incidence * orgInc )
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"),
@@ -3501,5 +3567,5 @@ void CalendarView::deleteTodo(Todo *todo)
}
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!");
@@ -3547,5 +3613,5 @@ void CalendarView::deleteJournal(Journal *jour)
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);
@@ -3573,5 +3639,5 @@ void CalendarView::deleteEvent(Event *anEvent)
//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"));
@@ -3581,5 +3647,5 @@ void CalendarView::deleteEvent(Event *anEvent)
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"),
@@ -3622,5 +3688,5 @@ void CalendarView::deleteEvent(Event *anEvent)
} 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"))) {
@@ -4581,5 +4647,5 @@ void CalendarView::undo_delete()
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"))) {
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index a5f230a..51eb1d4 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -201,4 +201,8 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
public slots:
+ void nextConflict( bool all, bool allday );
+ void conflictAll();
+ void conflictAllday();
+ void conflictNotAll();
void setCalReadOnly( int id, bool readO );
void checkAlarms();
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 9c2ac82..bfae1b5 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -660,4 +660,5 @@ void MainWindow::initActions()
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 );
@@ -790,13 +791,40 @@ void MainWindow::initActions()
connect( search_action, SIGNAL( activated() ),
mView->dialogManager(), SLOT( showSearchDialog() ) );
+ actionMenu->insertItem( i18n("Show next conflict for"), nextConflictMenu );
- actionMenu->insertSeparator();
-
+ 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( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this );
- action->addTo( mCurrentItemMenu );
+ action = new QAction( "Undo Delete", i18n("Events with time"), 0, this );
+ action->addTo( nextConflictMenu );
connect( action, SIGNAL( activated() ),
- mView, SLOT( undo_delete() ) );
+ 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() ) );
+
mCurrentItemMenu->insertSeparator();
icon = loadPixmap( pathString + "newevent" );
@@ -845,16 +873,10 @@ void MainWindow::initActions()
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() ) );
// ***********************
@@ -997,9 +1019,5 @@ void MainWindow::initActions()
#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,
@@ -1566,4 +1584,5 @@ void MainWindow::keyBindings()
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")+
@@ -2100,4 +2119,12 @@ void MainWindow::keyPressEvent ( QKeyEvent * e )
}
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();