summaryrefslogtreecommitdiffabout
path: root/korganizer
Side-by-side diff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/komonthview.cpp165
-rw-r--r--korganizer/komonthview.h5
2 files changed, 144 insertions, 26 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 770a42b..6646b98 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -396,8 +396,10 @@ void MonthViewCell::clear()
QApplication::removePostedEvents ( mLabel );
QApplication::removePostedEvents ( this );
}
-void MonthViewCell::updateCell()
+
+void MonthViewCell::startUpdateCell()
{
+
if ( !mMonthView->isUpdatePossible() )
return;
/*
@@ -418,25 +420,24 @@ void MonthViewCell::updateCell()
#ifdef DESKTOP_VERSION
QToolTip::remove(this);
#endif
- QString tipText("");
+ mToolTip = "";
//qApp->processEvents();
if ( !mHolidayString.isEmpty() ) {
MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
item->setPalette( mHolidayPalette );
mItemList->insertItem( item );
- tipText += mHolidayString+"\n";
+ mToolTip += mHolidayString+"\n";
}
- //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
- QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
- Event *event;
- for( event = events.first(); event; event = events.next() ) { // for event
+}
+void MonthViewCell::insertEvent(Event *event)
+{
if ( !(event->doesRecur() == Recurrence::rNone) ) {
if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
- continue;
+ return;
else
if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
- continue;
+ return;
}
if ( event->categories().contains("Holiday") ||
@@ -465,16 +466,16 @@ void MonthViewCell::updateCell()
}
}
text = prefix + event->summary();
- tipText += text;
+ mToolTip += text;
} else {
if (event->doesFloat()) {
text = event->summary();
- tipText += text;
+ mToolTip += text;
}
else {
text = KGlobal::locale()->formatTime(event->dtStart().time());
text += " " + event->summary();
- tipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
+ mToolTip += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
}
}
@@ -518,15 +519,11 @@ void MonthViewCell::updateCell()
item->setReply(false);
#endif
mItemList->insertItem( item );
- tipText += "\n";
-
- }
-
- // insert due todos
- QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
- Todo *todo;
- for(todo = todos.first(); todo; todo = todos.next()) {
- QString text;
+ mToolTip += "\n";
+}
+void MonthViewCell::insertTodo(Todo *todo)
+{
+ QString text;
if (todo->hasDueDate()) {
if (!todo->doesFloat()) {
text += KGlobal::locale()->formatTime(todo->dtDue().time());
@@ -562,11 +559,13 @@ void MonthViewCell::updateCell()
}
item->setPalette( pal );
mItemList->insertItem( item );
- tipText += text+"\n";
- }
+ mToolTip += text+"\n";
+}
+void MonthViewCell::finishUpdateCell()
+{
#ifdef DESKTOP_VERSION
- if (tipText != "")
- QToolTip::add(this,tipText,toolTipGroup(),"");
+ if (mToolTip != "")
+ QToolTip::add(this,mToolTip,toolTipGroup(),"");
#endif
//setMyPalette();
@@ -584,13 +583,32 @@ void MonthViewCell::updateCell()
mLabel->setText( text );
resizeEvent( 0 );
+}
+void MonthViewCell::updateCell()
+{
+ if ( !mMonthView->isUpdatePossible() )
+ return;
+ startUpdateCell();
+ //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
+ QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
+ Event *event;
+ for( event = events.first(); event; event = events.next() ) { // for event
+ insertEvent(event);
+ }
+ // insert due todos
+ QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
+ Todo *todo;
+ for(todo = todos.first(); todo; todo = todos.next()) {
+ insertTodo( todo );
+ }
+ finishUpdateCell();
// if ( isVisible())
//qApp->processEvents();
}
void MonthViewCell::updateConfig()
{
-
+ qDebug("MonthViewCell::updateConfig() ");
setFont( KOPrefs::instance()->mMonthViewFont );
QFontMetrics fm( font() );
@@ -958,6 +976,98 @@ void KOMonthView::updateView()
if ( !updatePossible )
return;
+ QTime ti;
+ ti.start();
+#if 1
+ int i;
+ for( i = 0; i < mCells.count(); ++i ) {
+ mCells[i]->startUpdateCell();
+ }
+
+ QPtrList<Event> events = calendar()->events();
+ Event *event;
+ QDateTime dt;
+ bool ok;
+ int timeSpan = mCells.size()-1;
+ QDate endDate = mStartDate.addDays( timeSpan );
+ for( event = events.first(); event; event = events.next() ) { // for event
+ if ( event->doesRecur() ) {
+ bool last;
+ QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
+ QDateTime incidenceEnd;
+ int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
+ bool invalid = false;
+ while( true ) {
+ if ( incidenceStart.isValid() ) {
+ incidenceEnd = incidenceStart.addDays( eventlen );
+ int st = incidenceStart.date().daysTo( endDate );
+ if ( st >= 0 ) { // start before timeend
+ int end = mStartDate.daysTo( incidenceEnd.date() );
+ if ( end >= 0 ) { // end after timestart --- got one!
+ //normalize
+ st = timeSpan - st;
+ if ( st < 0 ) st = 0;
+ if ( end > timeSpan ) end = timeSpan;
+ int iii;
+ //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
+ for ( iii = st;iii<= end;++iii)
+ mCells[iii]->insertEvent( event );
+ }
+ }
+ } else {
+ if ( invalid )
+ break;
+ invalid = true;
+ //qDebug("invalid %s", event->summary().latin1());
+ incidenceStart = QDateTime( mStartDate );
+ }
+ if ( last )
+ break;
+ bool ok;
+ incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
+ if ( ! ok )
+ break;
+ if ( incidenceStart.date() > endDate )
+ break;
+ }
+ } else { // no recur
+ int st = event->dtStart().date().daysTo( endDate );
+ if ( st >= 0 ) { // start before timeend
+ int end = mStartDate.daysTo( event->dtEnd().date() );
+ if ( end >= 0 ) { // end after timestart --- got one!
+ //normalize
+ st = timeSpan - st;
+ if ( st < 0 ) st = 0;
+ if ( end > timeSpan ) end = timeSpan;
+ int iii;
+ for ( iii = st;iii<= end;++iii)
+ mCells[iii]->insertEvent( event );
+ }
+ }
+ }
+ }
+ // insert due todos
+ QPtrList<Todo> todos = calendar()->todos( );
+ Todo *todo;
+ for(todo = todos.first(); todo; todo = todos.next()) {
+ //insertTodo( todo );
+ if ( todo->hasDueDate() ) {
+ int day = mStartDate.daysTo( todo->dtDue().date() );
+ if ( day >= 0 && day < mCells.size() ) {
+ mCells[day]->insertTodo( todo );
+ }
+ }
+ }
+
+ for( i = 0; i < mCells.count(); ++i ) {
+ mCells[i]->finishUpdateCell();
+ }
+ processSelectionChange();
+ mCells[0]->setFocus();
+
+
+#else
+ // old code
//qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
int i;
for( i = 0; i < mCells.count(); ++i ) {
@@ -968,6 +1078,9 @@ void KOMonthView::updateView()
processSelectionChange();
// qDebug("---------------------------------------------------------------------+ ");
mCells[0]->setFocus();
+#endif
+
+ qDebug("update time %d ", ti.elapsed());
}
void KOMonthView::resizeEvent(QResizeEvent * e)
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index 50903b3..b84065e 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -137,6 +137,10 @@ class MonthViewCell : public QWidget
void setHoliday( const QString & );
void updateCell();
+ void startUpdateCell();
+ void finishUpdateCell();
+ void insertEvent(Event *);
+ void insertTodo(Todo *);
void updateConfig();
@@ -158,6 +162,7 @@ class MonthViewCell : public QWidget
void showDaySignal( QDate );
protected:
+ QString mToolTip;
void resizeEvent( QResizeEvent * );
protected slots: