summaryrefslogtreecommitdiffabout
path: root/korganizer
Side-by-side diff
Diffstat (limited to 'korganizer') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/calendarview.cpp70
-rw-r--r--korganizer/calendarview.h2
-rw-r--r--korganizer/kolistview.cpp13
-rw-r--r--korganizer/komonthview.cpp116
-rw-r--r--korganizer/komonthview.h2
-rw-r--r--korganizer/koprefs.cpp1
-rw-r--r--korganizer/koprefs.h1
-rw-r--r--korganizer/koprefsdialog.cpp4
8 files changed, 175 insertions, 34 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 9a114d0..e766b8f 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -2718,12 +2718,82 @@ void CalendarView::changeEventDisplay(Event *which, int action)
// TODO: check, if update needed
// if (which->getTodoStatus()) {
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;
+ 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
@@ -508,6 +508,7 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
/** Select a view or adapt the current view to display the specified dates. */
void showDates( const KCal::DateList & );
void selectWeekNum ( int );
+ void checkConflictForEvent();
public:
// show a standard warning
@@ -534,6 +535,7 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
void setScrollBarStep(int val );
protected:
+ Event *mConflictingEvent;
void schedule(Scheduler::Method, Incidence *incidence = 0);
// returns KMsgBox::OKCandel()
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 7783dd4..d25f671 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -517,9 +517,7 @@ void KOListView::setAlarm()
if (kap.mAlarmButton->isChecked()) {
if (inc->alarms().count() == 0)
inc->newAlarm();
- QPtrList<Alarm> alarms = inc->alarms();
- Alarm *alarm;
- for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
+ Alarm *alarm = inc->alarms().first();
alarm->setEnabled(true);
int j = kap.mAlarmTimeEdit->value()* -60;
if (kap.mAlarmIncrCombo->currentItem() == 1)
@@ -535,13 +533,10 @@ void KOListView::setAlarm()
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 ) {
+ QPtrList<Alarm> alarms = inc->alarms();
+ Alarm *alarm;
+ for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
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
@@ -1524,7 +1524,8 @@ void KOMonthView::updateConfig()
if ( ! mShowWeekView ) {
if ( temp != KOPrefs::instance()->mMonthViewSatSunTog )
computeLayout();
- }
+ } else
+ doComputeLayoutWeek();
updateDayLabels();
//qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks);
//int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks;
@@ -1815,6 +1816,7 @@ void KOMonthView::resizeEvent(QResizeEvent * e)
slotComputeLayout();
} else
mComputeLayoutTimer->start( 100 );
+ if ( e )
KOEventView::resizeEvent( e );
}
@@ -1826,37 +1828,27 @@ void KOMonthView::slotComputeLayout()
clPending = true;
setKeyBFocus();
}
-void KOMonthView::computeLayoutWeek()
+
+void KOMonthView::doComputeLayoutWeek()
{
- static int lastWid = 0;
- static int lastHei = 0;
+
int daysToShow;
bool combinedSatSun = false;
if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
daysToShow = 6;
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 ( !KOPrefs::instance()->mMonthViewWeekRowlayout ) {
+ daysToShow = 2;
+ } else {
if ( wid < hei )
daysToShow = 2;
else
daysToShow = 3;
+ }
+ bool landscape = (daysToShow == 3);
mShowSatSunComp = true;
combinedSatSun = true;
@@ -1886,12 +1878,19 @@ void KOMonthView::computeLayoutWeek()
if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
++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 );
}
@@ -1900,8 +1899,14 @@ void KOMonthView::computeLayoutWeek()
if ( !(( i+1) % daysToShow)) {
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;
}
x= 0;
@@ -1923,23 +1928,34 @@ void KOMonthView::computeLayoutWeek()
if ( i == (daysToShow-1-rowModulo)*7)
++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 {
if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) {
++w;
}
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 );
x += w;
@@ -1963,6 +1979,56 @@ void KOMonthView::computeLayoutWeek()
//if ( forceUpdate )
// 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
@@ -302,6 +302,7 @@ class KOMonthView: public KOEventView
void resizeEvent(QResizeEvent *);
void viewChanged();
void updateDayLabels();
+ int mapWeekLayout( int, bool );
private:
int mKBFcounter;
@@ -321,6 +322,7 @@ class KOMonthView: public KOEventView
bool mShowSatSunComp;
void computeLayout();
void computeLayoutWeek();
+ void doComputeLayoutWeek();
QPtrVector<MonthViewCell> mCells;
QPtrVector<QLabel> mDayLabels;
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp
index a63297e..9e7f18c 100644
--- a/korganizer/koprefs.cpp
+++ b/korganizer/koprefs.cpp
@@ -264,6 +264,7 @@ KOPrefs::KOPrefs() :
addItemBool("TodoViewShowsPercentage",&mTodoViewShowsPercentage,false);
addItemBool("TodoViewUsesSmallFont",&mTodoViewUsesSmallFont,true);
addItemBool("MonthViewUsesBigFont",&mMonthViewUsesBigFont,true);
+ addItemBool("MonthViewWeekRowlayout",&mMonthViewWeekRowlayout,true);
addItemBool("TodoViewUsesForegroundColor",&mTodoViewUsesForegroundColor,false);
addItemBool("MonthViewUsesForegroundColor",&mMonthViewUsesForegroundColor,false);
#ifdef DESKTOP_VERSION
diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h
index 392360d..2ff03fa 100644
--- a/korganizer/koprefs.h
+++ b/korganizer/koprefs.h
@@ -183,6 +183,7 @@ class KOPrefs : public KPimPrefs
bool mMonthViewUsesDayColors;
bool mMonthViewSatSunTog;
bool mMonthViewWeek;
+ bool mMonthViewWeekRowlayout;
QColor mAppColor1;
QColor mAppColor2;
bool mUseAppColors;
diff --git a/korganizer/koprefsdialog.cpp b/korganizer/koprefsdialog.cpp
index ebcff33..05bd73f 100644
--- a/korganizer/koprefsdialog.cpp
+++ b/korganizer/koprefsdialog.cpp
@@ -703,6 +703,10 @@ void KOPrefsDialog::setupViewsTab()
&(KOPrefs::instance()->mMonthViewUsesBigFont),topFrame);
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);
topLayout->addWidget(dummy->checkBox(),ii++,0);