summaryrefslogtreecommitdiffabout
path: root/korganizer
Side-by-side diff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp144
-rw-r--r--korganizer/kodaymatrix.h2
-rw-r--r--korganizer/komonthview.cpp34
-rw-r--r--korganizer/komonthview.h6
4 files changed, 173 insertions, 13 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index c7e1b45..322131f 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -114,16 +114,17 @@ KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const
oldH = 0;
myPix.resize( 150, 120 );
mRedrawNeeded = true;
mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this);
mPendingUpdateBeforeRepaint = false;
mouseDown = false;
// initialize dynamic arrays
bDays.resize ( NUMDAYS );
+ pDays.resize ( NUMDAYS );
hDays.resize ( NUMDAYS );
eDays.resize ( NUMDAYS );
days = new QDate[NUMDAYS];
daylbls = new QString[NUMDAYS];
//events = new int[NUMDAYS];
mToolTip = new DynamicTip(this);
// set default values used for drawing the matrix
@@ -335,39 +336,173 @@ void KODayMatrix::recalculateToday()
void KODayMatrix::updateView()
{
updateView(startdate);
}
void KODayMatrix::repaintViewTimed()
{
mRedrawNeeded = true;
bDays.fill( false);
+ pDays.fill( false);
hDays.fill( false);
eDays.fill( false);
mRepaintTimer->stop();
+ int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday
+ int i;
+ for(i = 0; i < NUMDAYS; i++) {
+ if ( ( (i+startDay) % 7 == 0 ) ) {
+ pDays.setBit(i);
+ }
+ }
repaint(false);
}
+void KODayMatrix::computeEvent(Event *event, int i )
+{
+ QString holiStr = mHolidays[i];
+ if ( event->isHoliday()) {
+ pDays.setBit(i);
+ hDays.setBit(i);
+ if ( !holiStr.isEmpty() )
+ holiStr += "\n";
+ holiStr += event->summary();
+ if ( !event->location().isEmpty() )
+ holiStr += " (" + event->location() + ")";
+ mHolidays[i] =holiStr ;
+ }
+ if ( event->isBirthday()) {
+ pDays.setBit(i);
+ if ( !holiStr.isEmpty() )
+ holiStr += "\n";
+ holiStr += i18n("Birthday") + ": "+event->summary();
+ if ( !event->location().isEmpty() )
+ holiStr += " (" + event->location() + ")";
+ bDays.setBit(i);
+ mHolidays[i] =holiStr ;
+ }
+ eDays.setBit(i);
+}
void KODayMatrix::updateViewTimed()
{
mUpdateTimer->stop();
if ( !mCalendar ) {
qDebug("NOT CAL ");
return;
}
+#if 1
+
+ int i;
+ int timeSpan = NUMDAYS-1;
+ QPtrList<Event> events = mCalendar->events();
+ Event *event;
+ QDateTime dt;
+ bool ok;
+ bDays.fill( false);
+ pDays.fill( false);
+ hDays.fill( false);
+ eDays.fill( false);
+ mHolidays.clear();
+ QDate mStartDate = days[0];
+ QDate endDate = mStartDate.addDays( timeSpan );
+ for( event = events.first(); event; event = events.next() ) { // for event
+ ushort recurType = event->recurrence()->doesRecur();
+ if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
+ (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
+ continue;
+ }
+ 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) {
+ computeEvent( event, iii );
+ }
+ }
+ }
+ } else {
+ if ( invalid )
+ break;
+ invalid = true;
+ //qDebug("invalid %s", event->summary().latin1());
+ incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
+ }
+ 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)
+ computeEvent( event, iii );
+ }
+ }
+ }
+ }
+ int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday
+ for(i = 0; i < NUMDAYS; i++) {
+ if ( ( (i+startDay) % 7 == 0 ) ) {
+ pDays.setBit(i);
+ }
+ }
+
+#if 0
+ // 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 < timeSpan + 1) {
+ (*cells)[day]->insertTodo( todo );
+ }
+ }
+ }
+#endif
+
+#else
//qDebug("KODayMatrix::updateViewTimed ");
for(int i = 0; i < NUMDAYS; i++) {
// if events are set for the day then remember to draw it bold
QPtrList<Event> eventlist = mCalendar->events(days[i]);
Event *event;
int numEvents = eventlist.count();
QString holiStr = "";
bDays.clearBit(i);
hDays.clearBit(i);
eDays.clearBit(i);
for(event=eventlist.first();event != 0;event=eventlist.next()) {
+ qDebug("FFFFFFFFFFFFFFFFFFFFFFFFF ");
ushort recurType = event->recurrence()->doesRecur();
if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
(recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
numEvents--;
}
if ( event->isHoliday()) {
hDays.setBit(i);
if ( !holiStr.isEmpty() )
@@ -390,16 +525,17 @@ void KODayMatrix::updateViewTimed()
//if it is a holy day then draw it red. Sundays are consider holidays, too
if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
!holiStr.isEmpty()) {
mHolidays[i] = holiStr;
} else {
mHolidays[i] = QString::null;
}
}
+#endif
mRedrawNeeded = true;
if ( ! mPendingUpdateBeforeRepaint )
repaint(false);
}
void KODayMatrix::updateView(QDate actdate)
{
if ( ! actdate.isValid() ) {
@@ -437,17 +573,17 @@ void KODayMatrix::updateView(QDate actdate)
mPendingUpdateBeforeRepaint = true;
} else {
#ifdef DESKTOP_VERSION
//mRepaintTimer->start( 100 );
//updateViewTimed();
mUpdateTimer->start( 50 );
#else
mRepaintTimer->start( 350 );
- mUpdateTimer->start( 1200 );
+ mUpdateTimer->start( 800 );
#endif
}
}
void KODayMatrix::updateEvents()
{
if ( !mCalendar ) return;
for( int i = 0; i < NUMDAYS; i++ ) {
@@ -868,17 +1004,17 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
if (today == i) {
tmppen = p.pen();
QPen mTodayPen(p.pen());
if ( daysize.width() < 20 )
mTodayPen.setWidth(1);
else
mTodayPen.setWidth(mTodayMarginWidth);
//draw red rectangle for holidays
- if (!mHolidays[i].isNull()) {
+ if (pDays.testBit(i)) {
if (actcol == mDefaultTextColor) {
mTodayPen.setColor(KOPrefs::instance()->mHolidayColor);
} else {
mTodayPen.setColor(mHolidayColorShaded);
}
}
//draw gray rectangle for today if in selection
if (i >= mSelStartT && i <= mSelEndT) {
@@ -909,17 +1045,17 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
// if any events are on that day then draw it using a bold font
if ( eDays.testBit(i) ) {
QFont myFont = font();
myFont.setBold(true);
p.setFont(myFont);
}
// if it is a holiday then use the default holiday color
- if ( !mHolidays[i].isNull()) {
+ if ( pDays.testBit(i)) {
if ( bDays.testBit(i) ) {
if ( hDays.testBit(i) )
p.setPen(QColor(Qt::green));
else
p.setPen(QColor(Qt::green).dark());
} else {
if (actcol == mDefaultTextColor ) {
p.setPen(KOPrefs::instance()->mHolidayColor);
@@ -948,17 +1084,17 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
//qDebug("add %d %d -- %d %d ", col, addCol, row, addRow);
++addCol;//++addCol;
if ( row == 0)
addRow = 1;
p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight,
Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
// reset color to actual color
- if (!mHolidays[i].isNull()) {
+ if (pDays.testBit(i)) {
p.setPen(actcol);
}
// reset bold font to plain font
if ( eDays.testBit(i)) {
QFont myFont = font();
myFont.setBold(false);
p.setFont(myFont);
}
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index d725ead..b686bd7 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -222,23 +222,25 @@ protected:
void dragLeaveEvent(QDragLeaveEvent *);
void dropEvent(QDropEvent *);
void resizeEvent(QResizeEvent *);
private:
+ void computeEvent(Event *even, int dayindex );
int oldW, oldH;
bool mRedrawNeeded;
KODaymatrixWhatsThis* mKODaymatrixWhatsThis;
bool mouseDown;
QBitArray bDays;
QBitArray hDays;
QBitArray eDays;
+ QBitArray pDays;
QPixmap myPix;
QTimer* mUpdateTimer;
QTimer* mRepaintTimer;
bool mDayChanged;
bool mPendingUpdateBeforeRepaint;
/** returns the index of the day located at the matrix's widget (x,y) position.
*
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 1ed288b..425496a 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -264,29 +264,31 @@ MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s)
setText( s );
mMultiday = 0;
mIncidence = incidence;
mDate = qd;
mRecur = false;
mAlarm = false;
mReply = false;
mInfo = false;
+ mdayPos = 0;
isWeekItem = KOPrefs::instance()->mMonthViewWeek;
//qDebug("NEWWWWWWWWWWWWW ");
}
void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s)
{
setText( s );
mMultiday = 0;
mIncidence = incidence;
mDate = qd;
mRecur = false;
mAlarm = false;
mReply = false;
- mInfo = false;
+ mInfo = false;
+ mdayPos = 0;
//qDebug("recucleeeeeeeeeeeeeeeee ");
}
void MonthViewItem::paint(QPainter *p)
{
if ( mblockRepaint ) {
//qDebug("block ");
return;
@@ -565,17 +567,17 @@ void MonthViewCell::setHoliday( const QString &holiday )
if ( !holiday.isEmpty() ) {
setHoliday( true );
}
}
void MonthViewCell::startUpdateCell()
{
-
+ mdayCount = 0;
setFocusPolicy(NoFocus);
if ( !mMonthView->isUpdatePossible() )
return;
MonthViewItem *mitem = (MonthViewItem*) firstItem ();
while ( mitem ) {
mitem->setBlockRepaint( true );
mitem = (MonthViewItem *)mitem->next();
}
@@ -616,26 +618,26 @@ void MonthViewCell::startUpdateCell()
MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
item->setPalette( mHolidayPalette );
insertItem( item );
mToolTip.append ( mHolidayString );
}
#endif
}
-void MonthViewCell::insertEvent(Event *event)
+int MonthViewCell::insertEvent(Event *event)
{
QString mToolTipText;
setFocusPolicy(WheelFocus);
if ( !(event->doesRecur() == Recurrence::rNone) ) {
if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
- return;
+ return mdayCount;
else
if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
- return;
+ return mdayCount;
}
if ( event->isHoliday()) {
setHoliday( true );
if ( mDate.dayOfWeek() == 7 )
setLineWidth( 3 );
}
QString text;
@@ -725,18 +727,34 @@ void MonthViewCell::insertEvent(Event *event)
if ( me->status() == Attendee::NeedsAction && me->RSVP())
item->setReply(true && multiday < 2);
else
item->setReply(false);
} else
item->setReply(false);
#endif
item->setMultiDay( multiday );
- insertItem( item );
+ if ( multiday ) {
+ insertItem( item ,mdayCount);
+ ++mdayCount;
+ } else {
+ uint i;
+ int pos = mdayCount;
+ for ( i = mdayCount; i < count();++i ) {
+ QListBoxItem* it = this->item ( i );
+ if ( text < it->text() ) {
+ pos = i;
+ break;
+ }
+ ++pos;
+ }
+ insertItem( item ,pos);
+ }
mToolTip.append( mToolTipText );
+ return mdayCount;
}
void MonthViewCell::insertTodo(Todo *todo)
{
setFocusPolicy(WheelFocus);
QString text;
if (todo->hasDueDate()) {
if (!todo->doesFloat()) {
text += KGlobal::locale()->formatTime(todo->dtDue().time());
@@ -776,17 +794,17 @@ void MonthViewCell::insertTodo(Todo *todo)
} else {
pal = mStandardPalette ;
}
item->setPalette( pal );
item->setRecur( todo->recurrence()->doesRecur() );
item->setAlarm( todo->isAlarmEnabled() );
item->setMoreInfo( todo->description().length() > 0 );
- insertItem( item );
+ insertItem( item , count());
mToolTip.append( text );
}
void MonthViewCell::repaintfinishUpdateCell()
{
MonthViewItem *mitem = (MonthViewItem*) firstItem ();
while ( mitem ) {
mitem->setBlockRepaint( false );
updateItem ( mitem );
@@ -799,17 +817,17 @@ void MonthViewCell::finishUpdateCell()
#ifdef DESKTOP_VERSION
if (mToolTip.count() > 0 ) {
mToolTip.sort();
QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),"");
}
#endif
- sort();
+ //sort();
//setMyPalette();
setMyPalette();
resizeEvent( 0 );
}
void MonthViewCell::updateCell()
{
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index e962756..e39eeb0 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -103,31 +103,34 @@ class MonthViewItem: public QListBoxItem
public:
MonthViewItem( Incidence *, QDate qd, const QString & title );
void recycle( Incidence *incidence, QDate qd, const QString & s);
void setRecur(bool on) { mRecur = on; }
void setAlarm(bool on) { mAlarm = on; }
void setReply(bool on) { mReply = on; }
void setMoreInfo(bool on) { mInfo = on; }
void setMultiDay(int type) { mMultiday = type; }
+ void setMultiDayPos(int type) { mdayPos = type; }
+ int gettMultiDayPos() { return mdayPos; }
void setBlockRepaint(bool on) { mblockRepaint = on; }
void setPalette(const QPalette &p) { mPalette = p; }
QPalette palette() const { return mPalette; }
Incidence *incidence() const { return mIncidence; }
QDate incidenceDate() { return mDate; }
protected:
virtual void paint(QPainter *);
virtual int height(const QListBox *) const;
virtual int width(const QListBox *) const;
private:
+ int mdayPos;
bool isWeekItem;
bool mblockRepaint;
int mMultiday;
bool mRecur;
bool mAlarm;
bool mReply;
bool mInfo;
@@ -155,17 +158,17 @@ class MonthViewCell : public KNoScrollListBox
void setHoliday( bool );
void setHoliday( const QString & );
void updateCell();
void startUpdateCell();
void finishUpdateCell();
void repaintfinishUpdateCell();
- void insertEvent(Event *);
+ int insertEvent(Event *);
void insertTodo(Todo *);
void updateConfig( bool bigFont = false );
void enableScrollBars( bool );
Incidence *selectedIncidence();
QDate selectedIncidenceDate();
@@ -192,16 +195,17 @@ public slots:
protected slots:
void defaultAction( QListBoxItem * );
void contextMenu( QListBoxItem * );
void selection( QListBoxItem * );
void cellClicked( QListBoxItem * );
void newEvent();
private:
+ int mdayCount;
QPtrList <MonthViewItem> mAvailItemList;
KOMonthView *mMonthView;
int currentPalette;
QDate mDate;
bool mPrimary;
bool mHoliday;
QString mHolidayString;