-rw-r--r-- | korganizer/calendarview.cpp | 70 | ||||
-rw-r--r-- | korganizer/calendarview.h | 2 | ||||
-rw-r--r-- | korganizer/kolistview.cpp | 39 | ||||
-rw-r--r-- | korganizer/komonthview.cpp | 124 | ||||
-rw-r--r-- | korganizer/komonthview.h | 2 | ||||
-rw-r--r-- | korganizer/koprefs.cpp | 1 | ||||
-rw-r--r-- | korganizer/koprefs.h | 1 | ||||
-rw-r--r-- | korganizer/koprefsdialog.cpp | 4 |
8 files changed, 192 insertions, 51 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 9a114d0..e766b8f 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -2719,4 +2719,8 @@ void CalendarView::changeEventDisplay(Event *which, int action) // if (which->getTodoStatus()) { mTodoList->updateView(); + if ( action != KOGlobals::EVENTDELETED ) { + mConflictingEvent = which ; + QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) ); + } // } } else { @@ -2724,5 +2728,71 @@ void CalendarView::changeEventDisplay(Event *which, int action) } } +void CalendarView::checkConflictForEvent() +{ + + if (!KOPrefs::instance()->mConfirm) + return; + if ( ! mConflictingEvent ) return; + if ( mConflictingEvent->doesFloat() ) { + mConflictingEvent = 0; + return; + } + bool all = false; + bool allday = false; + Event * ev = mConflictingEvent; + mConflictingEvent = 0; + QDate start = ev->dtStart().date(); + QDate end = ev->dtEnd().date().addDays(1); + while ( start < end ) { + QPtrList<Event> test = calendar()->events( start ); + //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 ) { + 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) ) ; + qApp->processEvents(); + int km = KMessageBox::warningContinueCancel(this,mess, + i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); + if ( km != KMessageBox::Continue ) + return; + + 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(); + } + start = start.addDays( 1 ); + } + qDebug("No conflict found "); + +} void CalendarView::updateTodoViews() diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index 51eb1d4..706d05d 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h @@ -509,4 +509,5 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser void showDates( const KCal::DateList & ); void selectWeekNum ( int ); + void checkConflictForEvent(); public: @@ -535,4 +536,5 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser protected: + Event *mConflictingEvent; void schedule(Scheduler::Method, Incidence *incidence = 0); diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp index 7783dd4..d25f671 100644 --- a/korganizer/kolistview.cpp +++ b/korganizer/kolistview.cpp @@ -518,29 +518,24 @@ void KOListView::setAlarm() if (inc->alarms().count() == 0) inc->newAlarm(); + Alarm *alarm = inc->alarms().first(); + alarm->setEnabled(true); + int j = kap.mAlarmTimeEdit->value()* -60; + if (kap.mAlarmIncrCombo->currentItem() == 1) + j = j * 60; + else if (kap.mAlarmIncrCombo->currentItem() == 2) + j = j * (60 * 24); + alarm->setStartOffset( j ); + + if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { + alarm->setProcedureAlarm(kap.mAlarmProgram); + } + else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) + alarm->setAudioAlarm(kap.mAlarmSound); + else + alarm->setType(Alarm::Invalid); + } else { QPtrList<Alarm> alarms = inc->alarms(); Alarm *alarm; for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { - alarm->setEnabled(true); - int j = kap.mAlarmTimeEdit->value()* -60; - if (kap.mAlarmIncrCombo->currentItem() == 1) - j = j * 60; - else if (kap.mAlarmIncrCombo->currentItem() == 2) - j = j * (60 * 24); - alarm->setStartOffset( j ); - - if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { - alarm->setProcedureAlarm(kap.mAlarmProgram); - } - else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) - alarm->setAudioAlarm(kap.mAlarmSound); - else - alarm->setType(Alarm::Invalid); - //alarm->setAudioAlarm("default"); - // TODO: Deal with multiple alarms - break; // For now, stop after the first alarm - } - } else { - Alarm* alarm = inc->alarms().first(); - if ( alarm ) { alarm->setEnabled(false); alarm->setType(Alarm::Invalid); diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index 2289977..53bbe28 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp @@ -1525,5 +1525,6 @@ void KOMonthView::updateConfig() if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) computeLayout(); - } + } else + doComputeLayoutWeek(); updateDayLabels(); //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); @@ -1816,5 +1817,6 @@ void KOMonthView::resizeEvent(QResizeEvent * e) } else mComputeLayoutTimer->start( 100 ); - KOEventView::resizeEvent( e ); + if ( e ) + KOEventView::resizeEvent( e ); } @@ -1827,8 +1829,8 @@ void KOMonthView::slotComputeLayout() setKeyBFocus(); } -void KOMonthView::computeLayoutWeek() + +void KOMonthView::doComputeLayoutWeek() { - static int lastWid = 0; - static int lastHei = 0; + int daysToShow; bool combinedSatSun = false; @@ -1837,25 +1839,15 @@ void KOMonthView::computeLayoutWeek() combinedSatSun = true; } - int tWid = topLevelWidget()->size().width(); - int tHei = topLevelWidget()->size().height(); - int wid = width();//e int hei = height()-1-mNavigatorBar->height(); - - if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) - return; - - if ( lastWid == width() && lastHei == height() ) { - //qDebug("KOListWeekView::No compute layout needed "); - return; - } - lastWid = width(); - lastHei = height(); - - - if ( wid < hei ) + if ( !KOPrefs::instance()->mMonthViewWeekRowlayout ) { daysToShow = 2; - else - daysToShow = 3; + } else { + if ( wid < hei ) + daysToShow = 2; + else + daysToShow = 3; + } + bool landscape = (daysToShow == 3); mShowSatSunComp = true; combinedSatSun = true; @@ -1887,10 +1879,17 @@ void KOMonthView::computeLayoutWeek() ++w; } + int xC,yC,wC,hC; if ( i >= 5 ) { int wi = width() - x - weeklabelwid; if ( i == 5 ) { - mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi/2+wi%2,h); + xC = x+weeklabelwid; + yC = y; + wC = wi/2+wi%2; + hC = h; } else { - mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi,h); + xC = x+weeklabelwid; + yC = y; + wC = wi; + hC = h; } x = x - w + wi - (wi/2 ); @@ -1901,6 +1900,12 @@ void KOMonthView::computeLayoutWeek() wi = width() - x - weeklabelwid; } - mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi,h); + xC = x+weeklabelwid; + yC = y; + wC = wi; + hC = h; } + mDayLabelsW[mapWeekLayout(i,landscape)]->setGeometry( xC,yC,wC,hC); + + x += w; } @@ -1924,8 +1929,12 @@ void KOMonthView::computeLayoutWeek() ++h; + int xC,yC,wC,hC; if ( i >= 5 ) { if ( i ==5 ) { max = h/2; - mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); + xC = x+weeklabelwid; + yC = y; + wC = w; + hC = max; x -= w ;y += h/2; } else { @@ -1934,11 +1943,18 @@ void KOMonthView::computeLayoutWeek() } max = h-h/2; - mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); + xC = x+weeklabelwid; + yC = y; + wC = w; + hC = max; y -= h/2; } } else { max = h; - mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h ); + xC = x+weeklabelwid; + yC = y; + wC = w; + hC = h; } + mCellsW[mapWeekLayout(i,landscape)]->setGeometry ( xC,yC,wC,hC ); @@ -1964,4 +1980,54 @@ void KOMonthView::computeLayoutWeek() // updateView(); } +void KOMonthView::computeLayoutWeek() +{ + static int lastWid = 0; + static int lastHei = 0; + int tWid = topLevelWidget()->size().width(); + int tHei = topLevelWidget()->size().height(); + int wid = width();//e + int hei = height()-1-mNavigatorBar->height(); + if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) + return; + + if ( lastWid == width() && lastHei == height() ) { + //qDebug("KOListWeekView::No compute layout needed "); + return; + } + lastWid = width(); + lastHei = height(); + doComputeLayoutWeek(); +} +int KOMonthView::mapWeekLayout( int index, bool landscape ) +{ + if ( KOPrefs::instance()->mMonthViewWeekRowlayout ) + return index; + int diff = 0; + if ( !landscape ) diff = 1; + switch( index ) { + case 0: + case 5: + case 6: + return index; + break; + case 1: + return 2+diff; + break; + case 2: + return 4-(3*diff); + break; + case 3: + return 1+(3*diff); + break; + case 4: + return 3-diff; + break; + default: + qDebug("KO: Error in mapping week layout "); + return index; + break; + } + return index; +} void KOMonthView::computeLayout() { diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h index 4d62e9b..61a141a 100644 --- a/korganizer/komonthview.h +++ b/korganizer/komonthview.h @@ -303,4 +303,5 @@ class KOMonthView: public KOEventView void viewChanged(); void updateDayLabels(); + int mapWeekLayout( int, bool ); private: @@ -322,4 +323,5 @@ class KOMonthView: public KOEventView void computeLayout(); void computeLayoutWeek(); + void doComputeLayoutWeek(); QPtrVector<MonthViewCell> mCells; diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index a63297e..9e7f18c 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp @@ -265,4 +265,5 @@ KOPrefs::KOPrefs() : addItemBool("TodoViewUsesSmallFont",&mTodoViewUsesSmallFont,true); addItemBool("MonthViewUsesBigFont",&mMonthViewUsesBigFont,true); + addItemBool("MonthViewWeekRowlayout",&mMonthViewWeekRowlayout,true); addItemBool("TodoViewUsesForegroundColor",&mTodoViewUsesForegroundColor,false); addItemBool("MonthViewUsesForegroundColor",&mMonthViewUsesForegroundColor,false); diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index 392360d..2ff03fa 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h @@ -184,4 +184,5 @@ class KOPrefs : public KPimPrefs bool mMonthViewSatSunTog; bool mMonthViewWeek; + bool mMonthViewWeekRowlayout; QColor mAppColor1; QColor mAppColor2; diff --git a/korganizer/koprefsdialog.cpp b/korganizer/koprefsdialog.cpp index ebcff33..05bd73f 100644 --- a/korganizer/koprefsdialog.cpp +++ b/korganizer/koprefsdialog.cpp @@ -704,4 +704,8 @@ void KOPrefsDialog::setupViewsTab() topLayout->addWidget(dummy->checkBox(),ii++,0); dummy = + addWidBool(i18n("Week view mode uses row layout"), + &(KOPrefs::instance()->mMonthViewWeekRowlayout),topFrame); + topLayout->addWidget(dummy->checkBox(),ii++,0); + dummy = addWidBool(i18n("Show Sat/Sun together"), &(KOPrefs::instance()->mMonthViewSatSunTog),topFrame); |