summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/datenavigatorcontainer.cpp6
-rw-r--r--korganizer/kdatenavigator.cpp2
-rw-r--r--korganizer/kodaymatrix.cpp32
-rw-r--r--korganizer/kodaymatrix.h1
4 files changed, 33 insertions, 8 deletions
diff --git a/korganizer/datenavigatorcontainer.cpp b/korganizer/datenavigatorcontainer.cpp
index 92abae6..e57daa4 100644
--- a/korganizer/datenavigatorcontainer.cpp
+++ b/korganizer/datenavigatorcontainer.cpp
@@ -378,62 +378,66 @@ void DateNavigatorContainer::selectDates( const DateList &dateList )
378 QDate fDate = dateList.first(); 378 QDate fDate = dateList.first();
379 QDate lDate = dateList.last(); 379 QDate lDate = dateList.last();
380 //qDebug("%s %s ", lastAvailableDate().toString().latin1(), firstAvailableDate().toString().latin1() ); 380 //qDebug("%s %s ", lastAvailableDate().toString().latin1(), firstAvailableDate().toString().latin1() );
381 //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() ); 381 //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() );
382 if ( lDate <= lastAvailableDate() && firstAvailableDate() <= fDate) { 382 if ( lDate <= lastAvailableDate() && firstAvailableDate() <= fDate) {
383 updateDayMatrixDates(); 383 updateDayMatrixDates();
384 return; 384 return;
385 } 385 }
386 mNavigatorView->selectDates( dateList ); 386 mNavigatorView->selectDates( dateList );
387 setBaseDates(); 387 setBaseDates();
388 if ( mLastDisplayedDN ) { 388 if ( mLastDisplayedDN ) {
389 KDateNavigator *view = mExtraViews.at( 0 ); 389 KDateNavigator *view = mExtraViews.at( 0 );
390 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end())); 390 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end()));
391 view->dayMatrix()->repaint( false ); 391 view->dayMatrix()->repaint( false );
392 if ( mLastDisplayedDN > 1 ) { 392 if ( mLastDisplayedDN > 1 ) {
393 KDateNavigator *view = mExtraViews.at( 1 ); 393 KDateNavigator *view = mExtraViews.at( 1 );
394 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end())); 394 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end()));
395 view->dayMatrix()->repaint( false ); 395 view->dayMatrix()->repaint( false );
396 } 396 }
397 } 397 }
398} 398}
399 399
400void DateNavigatorContainer::setBaseDates() 400void DateNavigatorContainer::setBaseDates()
401{ 401{
402 QDate baseDate = mNavigatorView->baseDate(); 402 QDate baseDate = mNavigatorView->baseDate();
403 bool doRepaint = true; 403 bool doRepaint = true;
404 for( uint i = 0; i < mLastDisplayedDN; ++i ) { 404 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
405 KDateNavigator *n = mExtraViews.at( i ); 405 KDateNavigator *n = mExtraViews.at( i );
406 baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 ); 406 baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 );
407 n->setBaseDate( baseDate, doRepaint ); 407 n->setBaseDate( baseDate, doRepaint );
408 } 408 }
409} 409}
410void DateNavigatorContainer::setResizeEnabled() 410void DateNavigatorContainer::setResizeEnabled()
411{ 411{
412 mResizeEnabled = true; 412 mResizeEnabled = true;
413 //qDebug("DateNavigatorContainer::setResizeEnabled "); 413 //qDebug("DateNavigatorContainer::setResizeEnabled ");
414 checkUpdateDayMatrixDates(); 414 checkUpdateDayMatrixDates();
415} 415}
416void DateNavigatorContainer::resizeEvent( QResizeEvent * e ) 416void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
417{ 417{
418 418
419 //qDebug("DateNavigatorContainer::resizeEvent %d %d ", width(), height()); 419 //qDebug("DateNavigatorContainer::resizeEvent %d %d ", width(), height());
420 //qDebug("COUNT %d ", mExtraViews.count()); 420 //qDebug("COUNT %d ", mExtraViews.count());
421 if ( ! mResizeEnabled ) { 421 if ( ! mResizeEnabled ) {
422 //qDebug("NOT ResizeEnabled"); 422 //qDebug("NOT ResizeEnabled");
423 return; 423 return;
424 } 424 }
425 else 425 else
426 mUpdateTimer->start( 250 ); 426#ifdef DESKTOP_VERSION
427 mUpdateTimer->start( 100 );
428#else
429 mUpdateTimer->start( 50 );
430#endif
427 431
428 //updateDayMatrixDates(); 432 //updateDayMatrixDates();
429} 433}
430 434
431QSize DateNavigatorContainer::minimumSizeHint() const 435QSize DateNavigatorContainer::minimumSizeHint() const
432{ 436{
433 return mNavigatorView->minimumSizeHint(); 437 return mNavigatorView->minimumSizeHint();
434} 438}
435 439
436QSize DateNavigatorContainer::sizeHint() const 440QSize DateNavigatorContainer::sizeHint() const
437{ 441{
438 return mNavigatorView->yourSizeHint(); 442 return mNavigatorView->yourSizeHint();
439} 443}
diff --git a/korganizer/kdatenavigator.cpp b/korganizer/kdatenavigator.cpp
index 1d09f40..5aa1c9b 100644
--- a/korganizer/kdatenavigator.cpp
+++ b/korganizer/kdatenavigator.cpp
@@ -45,97 +45,97 @@
45 45
46#include "kdatenavigator.h" 46#include "kdatenavigator.h"
47 47
48KDateNavigator::KDateNavigator( QWidget *parent, const char *name ) 48KDateNavigator::KDateNavigator( QWidget *parent, const char *name )
49 : QFrame(parent, name), 49 : QFrame(parent, name),
50 updateTimer(0L) 50 updateTimer(0L)
51{ 51{
52 setFrameStyle(QFrame::NoFrame); 52 setFrameStyle(QFrame::NoFrame);
53 QDate startDate = QDate::currentDate(); 53 QDate startDate = QDate::currentDate();
54 QGridLayout *topLayout = new QGridLayout(this,8,8); 54 QGridLayout *topLayout = new QGridLayout(this,8,8);
55 55
56 if (! startDate.isValid()) { 56 if (! startDate.isValid()) {
57 qDebug("KDateNavigator::invalid startdate "); 57 qDebug("KDateNavigator::invalid startdate ");
58 startDate = QDate::currentDate(); 58 startDate = QDate::currentDate();
59 } 59 }
60 mMonthSignalOffset = 0; 60 mMonthSignalOffset = 0;
61 mSelectedDates.append(startDate); 61 mSelectedDates.append(startDate);
62 m_MthYr = startDate; 62 m_MthYr = startDate;
63 m_bShowWeekNums = true; 63 m_bShowWeekNums = true;
64 setFont( KOPrefs::instance()->mDateNavigatorFont ); 64 setFont( KOPrefs::instance()->mDateNavigatorFont );
65 mNavigatorBar = new NavigatorBar( startDate, this ); 65 mNavigatorBar = new NavigatorBar( startDate, this );
66 topLayout->addMultiCellWidget( mNavigatorBar, 0, 0, 0, 7 ); 66 topLayout->addMultiCellWidget( mNavigatorBar, 0, 0, 0, 7 );
67 //mNavigatorBar->resize( 1,1); 67 //mNavigatorBar->resize( 1,1);
68 connect( mNavigatorBar, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) ); 68 connect( mNavigatorBar, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) );
69 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) ); 69 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) );
70 connect( mNavigatorBar, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) ); 70 connect( mNavigatorBar, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) );
71 connect( mNavigatorBar, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) ); 71 connect( mNavigatorBar, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) );
72 connect( mNavigatorBar, SIGNAL( monthSelected( int ) ), SLOT( slotMonthSelected( int ) ) ); 72 connect( mNavigatorBar, SIGNAL( monthSelected( int ) ), SLOT( slotMonthSelected( int ) ) );
73 73
74 // get the day of the week on the first day 74 // get the day of the week on the first day
75 QDate dayone(m_MthYr.year(), m_MthYr.month(), 1); 75 QDate dayone(m_MthYr.year(), m_MthYr.month(), 1);
76 m_fstDayOfWk = dayone.dayOfWeek(); 76 m_fstDayOfWk = dayone.dayOfWeek();
77 77
78 int i; 78 int i;
79 79
80 // Set up the heading fields. 80 // Set up the heading fields.
81 for( i = 0; i < 7; i++ ) { 81 for( i = 0; i < 7; i++ ) {
82 headings[i] = new QLabel("",this); 82 headings[i] = new QLabel("",this);
83 //headings[i]->setFont(QFont("Arial", 10, QFont::Bold)); 83 //headings[i]->setFont(QFont("Arial", 10, QFont::Bold));
84 headings[i]->setAlignment(AlignCenter); 84 headings[i]->setAlignment(AlignCenter);
85 headings[i]->installEventFilter(this); 85 headings[i]->installEventFilter(this);
86 86
87 topLayout->addWidget(headings[i],1,i+1); 87 topLayout->addWidget(headings[i],1,i+1);
88 } 88 }
89 89
90 // Create the weeknumber labels 90 // Create the weeknumber labels
91 for( i = 0; i < 6; i++ ) { 91 for( i = 0; i < 6; i++ ) {
92 weeknos[i] = new QLabel(this); 92 weeknos[i] = new QLabel(this);
93 weeknos[i]->setAlignment(AlignCenter); 93 weeknos[i]->setAlignment(AlignCenter );
94 //weeknos[i]->setFont(QFont("Arial", 10)); 94 //weeknos[i]->setFont(QFont("Arial", 10));
95 if(!m_bShowWeekNums) { 95 if(!m_bShowWeekNums) {
96 weeknos[i]->hide(); 96 weeknos[i]->hide();
97 } 97 }
98 weeknos[i]->installEventFilter(this); 98 weeknos[i]->installEventFilter(this);
99 99
100 topLayout->addWidget(weeknos[i],i+2,0); 100 topLayout->addWidget(weeknos[i],i+2,0);
101 } 101 }
102 102
103 daymatrix = new KODayMatrix( this, "KDateNavigator::DayMatrix"); 103 daymatrix = new KODayMatrix( this, "KDateNavigator::DayMatrix");
104 daymatrix->setFrameStyle(QFrame::Panel|QFrame::Sunken); 104 daymatrix->setFrameStyle(QFrame::Panel|QFrame::Sunken);
105 daymatrix->setLineWidth(1); 105 daymatrix->setLineWidth(1);
106 106
107 connect( daymatrix, SIGNAL( selected( const KCal::DateList & ) ), 107 connect( daymatrix, SIGNAL( selected( const KCal::DateList & ) ),
108 SIGNAL( datesSelected( const KCal::DateList & ) ) ); 108 SIGNAL( datesSelected( const KCal::DateList & ) ) );
109 109
110 connect( daymatrix, SIGNAL( eventDropped( Event * ) ), 110 connect( daymatrix, SIGNAL( eventDropped( Event * ) ),
111 SIGNAL( eventDropped( Event * ) ) ); 111 SIGNAL( eventDropped( Event * ) ) );
112 112
113 topLayout->addMultiCellWidget(daymatrix,2,7,1,7); 113 topLayout->addMultiCellWidget(daymatrix,2,7,1,7);
114 114
115 // read settings from configuration file. 115 // read settings from configuration file.
116 updateConfig(); 116 updateConfig();
117 enableRollover(FollowMonth); 117 enableRollover(FollowMonth);
118 mySizeHint = sizeHintTwoButtons(); 118 mySizeHint = sizeHintTwoButtons();
119 myFullSizeHint = sizeHintTwoButtons( 4 ); 119 myFullSizeHint = sizeHintTwoButtons( 4 );
120 mFontChanged = false; 120 mFontChanged = false;
121 //resize ( 3,3 ); 121 //resize ( 3,3 );
122 122
123} 123}
124void KDateNavigator::changeFont ( QFont fo ) 124void KDateNavigator::changeFont ( QFont fo )
125{ 125{
126 setFont( fo ); 126 setFont( fo );
127 mNavigatorBar->resetFont( fo ); 127 mNavigatorBar->resetFont( fo );
128} 128}
129QFont KDateNavigator::yourFontHint( QSize si , bool *b) 129QFont KDateNavigator::yourFontHint( QSize si , bool *b)
130{ 130{
131 QFont fo = KOPrefs::instance()->mDateNavigatorFont; 131 QFont fo = KOPrefs::instance()->mDateNavigatorFont;
132 *b = false; 132 *b = false;
133 int fontPoint = fo.pointSize(); 133 int fontPoint = fo.pointSize();
134 while ( fontPoint > 5 ) { 134 while ( fontPoint > 5 ) {
135 --fontPoint; 135 --fontPoint;
136 fo.setPointSize( fontPoint ); 136 fo.setPointSize( fontPoint );
137 setFont( fo ); 137 setFont( fo );
138 mFontChanged = true; 138 mFontChanged = true;
139 mNavigatorBar->resetFont( fo ); 139 mNavigatorBar->resetFont( fo );
140 QSize sh = sizeHintTwoButtons( 2 ); 140 QSize sh = sizeHintTwoButtons( 2 );
141 //qDebug("fp %d %d %d %d %d", fontPoint, si.width() , sh.width() , si.height() , sh.height() ); 141 //qDebug("fp %d %d %d %d %d", fontPoint, si.width() , sh.width() , si.height() , sh.height() );
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 8affe50..c7e1b45 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -64,105 +64,108 @@ class KODaymatrixWhatsThis :public QWhatsThis
64public: 64public:
65 KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;}; 65 KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;};
66 ~KODaymatrixWhatsThis() { ; }; 66 ~KODaymatrixWhatsThis() { ; };
67 67
68protected: 68protected:
69 virtual QString text( const QPoint& p ) 69 virtual QString text( const QPoint& p )
70 { 70 {
71 return _view->getWhatsThisText( p ) ; 71 return _view->getWhatsThisText( p ) ;
72 } 72 }
73private: 73private:
74 KODayMatrix * _view; 74 KODayMatrix * _view;
75}; 75};
76 76
77void DynamicTip::maybeTip( const QPoint &pos ) 77void DynamicTip::maybeTip( const QPoint &pos )
78{ 78{
79 //calculate which cell of the matrix the mouse is in 79 //calculate which cell of the matrix the mouse is in
80 QRect sz = matrix->frameRect(); 80 QRect sz = matrix->frameRect();
81 int dheight = sz.height()*7 / 42; 81 int dheight = sz.height()*7 / 42;
82 int dwidth = sz.width() / 7; 82 int dwidth = sz.width() / 7;
83 int row = pos.y()/dheight; 83 int row = pos.y()/dheight;
84 int col = pos.x()/dwidth; 84 int col = pos.x()/dwidth;
85 85
86 QRect rct(col*dwidth, row*dheight, dwidth, dheight); 86 QRect rct(col*dwidth, row*dheight, dwidth, dheight);
87 87
88// kdDebug() << "DynamicTip::maybeTip matrix cell index [" << 88// kdDebug() << "DynamicTip::maybeTip matrix cell index [" <<
89// col << "][" << row << "] => " <<(col+row*7) << endl; 89// col << "][" << row << "] => " <<(col+row*7) << endl;
90 90
91 //show holiday names only 91 //show holiday names only
92 QString str = matrix->getHolidayLabel(col+row*7); 92 QString str = matrix->getHolidayLabel(col+row*7);
93 if (str.isEmpty()) return; 93 if (str.isEmpty()) return;
94 tip(rct, str); 94 tip(rct, str);
95} 95}
96 96
97 97
98// ============================================================================ 98// ============================================================================
99// K O D A Y M A T R I X 99// K O D A Y M A T R I X
100// ============================================================================ 100// ============================================================================
101 101
102const int KODayMatrix::NOSELECTION = -1000; 102const int KODayMatrix::NOSELECTION = -1000;
103const int KODayMatrix::NUMDAYS = 42; 103const int KODayMatrix::NUMDAYS = 42;
104 104
105KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) 105KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
106 : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 ) 106 : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 )
107 107
108#if 0 108#if 0
109KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) : 109KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) :
110 QFrame(parent, name) 110 QFrame(parent, name)
111#endif 111#endif
112{ 112{
113 oldW = 0;
114 oldH = 0;
115 myPix.resize( 150, 120 );
113 mRedrawNeeded = true; 116 mRedrawNeeded = true;
114 mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this); 117 mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this);
115 mPendingUpdateBeforeRepaint = false; 118 mPendingUpdateBeforeRepaint = false;
116 mouseDown = false; 119 mouseDown = false;
117 // initialize dynamic arrays 120 // initialize dynamic arrays
118 bDays.resize ( NUMDAYS ); 121 bDays.resize ( NUMDAYS );
119 hDays.resize ( NUMDAYS );; 122 hDays.resize ( NUMDAYS );
120 eDays.resize ( NUMDAYS );; 123 eDays.resize ( NUMDAYS );
121 days = new QDate[NUMDAYS]; 124 days = new QDate[NUMDAYS];
122 daylbls = new QString[NUMDAYS]; 125 daylbls = new QString[NUMDAYS];
123 //events = new int[NUMDAYS]; 126 //events = new int[NUMDAYS];
124 mToolTip = new DynamicTip(this); 127 mToolTip = new DynamicTip(this);
125 128
126 // set default values used for drawing the matrix 129 // set default values used for drawing the matrix
127 mDefaultBackColor = palette().active().base(); 130 mDefaultBackColor = palette().active().base();
128 mDefaultTextColor = palette().active().foreground(); 131 mDefaultTextColor = palette().active().foreground();
129 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); 132 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor);
130 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); 133 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor);
131 mSelectedDaysColor = QColor("white"); 134 mSelectedDaysColor = QColor("white");
132 mTodayMarginWidth = 2; 135 mTodayMarginWidth = 2;
133 mSelEnd = mSelStart = NOSELECTION; 136 mSelEnd = mSelStart = NOSELECTION;
134 137
135 setAcceptDrops(true); 138 setAcceptDrops(true);
136 //setFont( QFont("Arial", 10) ); 139 //setFont( QFont("Arial", 10) );
137 140
138 mUpdateTimer = new QTimer( this ); 141 mUpdateTimer = new QTimer( this );
139 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); 142 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() ));
140 mRepaintTimer = new QTimer( this ); 143 mRepaintTimer = new QTimer( this );
141 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); 144 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() ));
142 mDayChanged = false; 145 mDayChanged = false;
143 updateView(); 146 updateView();
144} 147}
145QString KODayMatrix::getWhatsThisText( QPoint p ) 148QString KODayMatrix::getWhatsThisText( QPoint p )
146{ 149{
147 150
148 int tmp = getDayIndexFrom(p.x(), p.y()); 151 int tmp = getDayIndexFrom(p.x(), p.y());
149 if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) 152 if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar )
150 return QString(); 153 return QString();
151 QDate mDate = days[tmp]; 154 QDate mDate = days[tmp];
152 QPtrList<Event> eventlist = mCalendar->events(mDate); 155 QPtrList<Event> eventlist = mCalendar->events(mDate);
153 Event *event; 156 Event *event;
154 QStringList mToolTip; 157 QStringList mToolTip;
155 for(event=eventlist.first();event != 0;event=eventlist.next()) { 158 for(event=eventlist.first();event != 0;event=eventlist.next()) {
156 QString mToolTipText; 159 QString mToolTipText;
157 QString text; 160 QString text;
158 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day 161 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day
159 if (event->isMultiDay()) { 162 if (event->isMultiDay()) {
160 QString prefix = "<->";multiday = 2; 163 QString prefix = "<->";multiday = 2;
161 QString time; 164 QString time;
162 if ( event->doesRecur() ) { 165 if ( event->doesRecur() ) {
163 if ( event->recursOn( mDate) ) { 166 if ( event->recursOn( mDate) ) {
164 prefix ="->" ;multiday = 1; 167 prefix ="->" ;multiday = 1;
165 } 168 }
166 else { 169 else {
167 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 170 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
168 if ( event->recursOn( mDate.addDays( -days)) ) { 171 if ( event->recursOn( mDate.addDays( -days)) ) {
@@ -289,97 +292,101 @@ void KODayMatrix::addSelectedDaysTo(DateList& selDays)
289 292
290bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 293bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
291{ 294{
292 mRedrawNeeded = true; 295 mRedrawNeeded = true;
293 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); 296 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION );
294 mSelStart = startdate.daysTo(start); 297 mSelStart = startdate.daysTo(start);
295 if ( mSelStart < 0 ) 298 if ( mSelStart < 0 )
296 mSelStart = 0; 299 mSelStart = 0;
297 mSelEnd = startdate.daysTo(end); 300 mSelEnd = startdate.daysTo(end);
298 if ( mSelEnd > NUMDAYS-1 ) 301 if ( mSelEnd > NUMDAYS-1 )
299 mSelEnd = NUMDAYS-1; 302 mSelEnd = NUMDAYS-1;
300 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { 303 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) {
301 clearSelection(); 304 clearSelection();
302 if ( noSel ) 305 if ( noSel )
303 return false; 306 return false;
304 } 307 }
305 308
306 return true; 309 return true;
307} 310}
308void KODayMatrix::clearSelection() 311void KODayMatrix::clearSelection()
309{ 312{
310 mSelEnd = mSelStart = NOSELECTION; 313 mSelEnd = mSelStart = NOSELECTION;
311} 314}
312 315
313 316
314void KODayMatrix::recalculateToday() 317void KODayMatrix::recalculateToday()
315{ 318{
316 today = -1; 319 today = -1;
317 for (int i=0; i<NUMDAYS; i++) { 320 for (int i=0; i<NUMDAYS; i++) {
318 //events[i] = 0; 321 //events[i] = 0;
319 days[i] = startdate.addDays(i); 322 days[i] = startdate.addDays(i);
320 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); 323 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
321 324
322 // if today is in the currently displayed month, hilight today 325 // if today is in the currently displayed month, hilight today
323 if (days[i].year() == QDate::currentDate().year() && 326 if (days[i].year() == QDate::currentDate().year() &&
324 days[i].month() == QDate::currentDate().month() && 327 days[i].month() == QDate::currentDate().month() &&
325 days[i].day() == QDate::currentDate().day()) { 328 days[i].day() == QDate::currentDate().day()) {
326 today = i; 329 today = i;
327 } 330 }
328 } 331 }
329 // qDebug(QString("Today is visible at %1.").arg(today)); 332 // qDebug(QString("Today is visible at %1.").arg(today));
330} 333}
331 334
332void KODayMatrix::updateView() 335void KODayMatrix::updateView()
333{ 336{
334 updateView(startdate); 337 updateView(startdate);
335} 338}
336void KODayMatrix::repaintViewTimed() 339void KODayMatrix::repaintViewTimed()
337{ 340{
341 mRedrawNeeded = true;
342 bDays.fill( false);
343 hDays.fill( false);
344 eDays.fill( false);
338 mRepaintTimer->stop(); 345 mRepaintTimer->stop();
339 repaint(false); 346 repaint(false);
340} 347}
341void KODayMatrix::updateViewTimed() 348void KODayMatrix::updateViewTimed()
342{ 349{
343 mUpdateTimer->stop(); 350 mUpdateTimer->stop();
344 if ( !mCalendar ) { 351 if ( !mCalendar ) {
345 qDebug("NOT CAL "); 352 qDebug("NOT CAL ");
346 return; 353 return;
347 } 354 }
348 //qDebug("KODayMatrix::updateViewTimed "); 355 //qDebug("KODayMatrix::updateViewTimed ");
349 for(int i = 0; i < NUMDAYS; i++) { 356 for(int i = 0; i < NUMDAYS; i++) {
350 // if events are set for the day then remember to draw it bold 357 // if events are set for the day then remember to draw it bold
351 QPtrList<Event> eventlist = mCalendar->events(days[i]); 358 QPtrList<Event> eventlist = mCalendar->events(days[i]);
352 Event *event; 359 Event *event;
353 int numEvents = eventlist.count(); 360 int numEvents = eventlist.count();
354 QString holiStr = ""; 361 QString holiStr = "";
355 bDays.clearBit(i); 362 bDays.clearBit(i);
356 hDays.clearBit(i); 363 hDays.clearBit(i);
357 eDays.clearBit(i); 364 eDays.clearBit(i);
358 for(event=eventlist.first();event != 0;event=eventlist.next()) { 365 for(event=eventlist.first();event != 0;event=eventlist.next()) {
359 ushort recurType = event->recurrence()->doesRecur(); 366 ushort recurType = event->recurrence()->doesRecur();
360 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 367 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
361 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 368 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
362 numEvents--; 369 numEvents--;
363 } 370 }
364 if ( event->isHoliday()) { 371 if ( event->isHoliday()) {
365 hDays.setBit(i); 372 hDays.setBit(i);
366 if ( !holiStr.isEmpty() ) 373 if ( !holiStr.isEmpty() )
367 holiStr += "\n"; 374 holiStr += "\n";
368 holiStr += event->summary(); 375 holiStr += event->summary();
369 if ( !event->location().isEmpty() ) 376 if ( !event->location().isEmpty() )
370 holiStr += " (" + event->location() + ")"; 377 holiStr += " (" + event->location() + ")";
371 } 378 }
372 if ( event->isBirthday()) { 379 if ( event->isBirthday()) {
373 if ( !holiStr.isEmpty() ) 380 if ( !holiStr.isEmpty() )
374 holiStr += "\n"; 381 holiStr += "\n";
375 holiStr += i18n("Birthday") + ": "+event->summary(); 382 holiStr += i18n("Birthday") + ": "+event->summary();
376 if ( !event->location().isEmpty() ) 383 if ( !event->location().isEmpty() )
377 holiStr += " (" + event->location() + ")"; 384 holiStr += " (" + event->location() + ")";
378 bDays.setBit(i); 385 bDays.setBit(i);
379 } 386 }
380 } 387 }
381 if ( numEvents ) 388 if ( numEvents )
382 eDays.setBit(i); 389 eDays.setBit(i);
383 //if it is a holy day then draw it red. Sundays are consider holidays, too 390 //if it is a holy day then draw it red. Sundays are consider holidays, too
384 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || 391 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
385 !holiStr.isEmpty()) { 392 !holiStr.isEmpty()) {
@@ -638,101 +645,113 @@ void KODayMatrix::dropEvent(QDropEvent *e)
638 Event *existingEvent = mCalendar->event(event->uid()); 645 Event *existingEvent = mCalendar->event(event->uid());
639 646
640 if(existingEvent) { 647 if(existingEvent) {
641 // uniquify event 648 // uniquify event
642 event->recreate(); 649 event->recreate();
643/* 650/*
644 KMessageBox::sorry(this, 651 KMessageBox::sorry(this,
645 i18n("Event already exists in this calendar."), 652 i18n("Event already exists in this calendar."),
646 i18n("Drop Event")); 653 i18n("Drop Event"));
647 delete event; 654 delete event;
648 return; 655 return;
649*/ 656*/
650 } 657 }
651// kdDebug() << "Drop new Event" << endl; 658// kdDebug() << "Drop new Event" << endl;
652 // Adjust date 659 // Adjust date
653 QDateTime start = event->dtStart(); 660 QDateTime start = event->dtStart();
654 QDateTime end = event->dtEnd(); 661 QDateTime end = event->dtEnd();
655 int duration = start.daysTo(end); 662 int duration = start.daysTo(end);
656 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 663 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
657 664
658 start.setDate(days[idx]); 665 start.setDate(days[idx]);
659 end.setDate(days[idx].addDays(duration)); 666 end.setDate(days[idx].addDays(duration));
660 667
661 event->setDtStart(start); 668 event->setDtStart(start);
662 event->setDtEnd(end); 669 event->setDtEnd(end);
663 mCalendar->addEvent(event); 670 mCalendar->addEvent(event);
664 671
665 emit eventDropped(event); 672 emit eventDropped(event);
666 } else { 673 } else {
667// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 674// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
668 e->ignore(); 675 e->ignore();
669 } 676 }
670#endif 677#endif
671} 678}
672 679
673// ---------------------------------------------------------------------------- 680// ----------------------------------------------------------------------------
674// P A I N T E V E N T H A N D L I N G 681// P A I N T E V E N T H A N D L I N G
675// ---------------------------------------------------------------------------- 682// ----------------------------------------------------------------------------
676 683
677void KODayMatrix::paintEvent(QPaintEvent * pevent) 684void KODayMatrix::paintEvent(QPaintEvent * pevent)
678{ 685{
679 686
680 if ( width() <= 0 || height() <= 0 ) 687 if ( width() <= 0 || height() <= 0 )
681 return; 688 return;
682 if ( mPendingUpdateBeforeRepaint ) { 689 if ( mPendingUpdateBeforeRepaint ) {
683 updateViewTimed(); 690 updateViewTimed();
684 mPendingUpdateBeforeRepaint = false; 691 mPendingUpdateBeforeRepaint = false;
685 } 692 }
693#if 0
686 if ( myPix.width() != width() || myPix.height()!=height() ) { 694 if ( myPix.width() != width() || myPix.height()!=height() ) {
687 myPix.resize(size() ); 695 myPix.resize(size() );
688 mRedrawNeeded = true; 696 mRedrawNeeded = true;
689 } 697 }
690 698#endif
699 if ( oldW != width() || oldH !=height() )
700 mRedrawNeeded = true;
701
702 oldH = height() ;
703 oldW = width();
704 if ( myPix.width() < width() || myPix.height() < height() ) {
705 myPix.resize(size() );
706 mRedrawNeeded = true;
707
708 }
709
691 if ( mRedrawNeeded ) { 710 if ( mRedrawNeeded ) {
692 //qDebug("REDRAW "); 711 //qDebug("REDRAW ");
693 QPainter p(&myPix); 712 QPainter p(&myPix);
694 p.setFont(font()); 713 p.setFont(font());
695 714
696 715
697 int dheight = daysize.height(); 716 int dheight = daysize.height();
698 int dwidth = daysize.width(); 717 int dwidth = daysize.width();
699 int row,col; 718 int row,col;
700 int selw, selh; 719 int selw, selh;
701 int xyOff = frameWidth(); 720 int xyOff = frameWidth();
702 int colModulo = (width()-2) % 7; 721 int colModulo = (width()-2) % 7;
703 int rowModulo = (height()-2) % 6; 722 int rowModulo = (height()-2) % 6;
704 //qDebug("col %d row %d ",colModulo,rowModulo ); 723 //qDebug("col %d row %d ",colModulo,rowModulo );
705 724
706 bool isRTL = KOGlobals::self()->reverseLayout(); 725 bool isRTL = KOGlobals::self()->reverseLayout();
707 726
708 // draw background and topleft frame 727 // draw background and topleft frame
709 p.fillRect(0,0,width(),height(), mDefaultBackColor); 728 p.fillRect(0,0,width(),height(), mDefaultBackColor);
710 p.setPen(mDefaultTextColor); 729 p.setPen(mDefaultTextColor);
711 p.drawRect(0, 0, width(), height()); 730 p.drawRect(0, 0, width(), height());
712 int mSelStartT = mSelStart; 731 int mSelStartT = mSelStart;
713 int mSelEndT = mSelEnd; 732 int mSelEndT = mSelEnd;
714 if ( mSelEndT >= NUMDAYS ) 733 if ( mSelEndT >= NUMDAYS )
715 mSelEndT = NUMDAYS-1; 734 mSelEndT = NUMDAYS-1;
716 // draw selected days with highlighted background color 735 // draw selected days with highlighted background color
717 if (mSelStart != NOSELECTION) { 736 if (mSelStart != NOSELECTION) {
718 bool skip = false; 737 bool skip = false;
719 if ( ! mouseDown ) { 738 if ( ! mouseDown ) {
720 int mo = days[20].month(); 739 int mo = days[20].month();
721 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 740 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
722 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 741 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
723 int startMo = days[mSelStartT].month(); 742 int startMo = days[mSelStartT].month();
724 int endMo = days[mSelEndT].month(); 743 int endMo = days[mSelEndT].month();
725 if ( startMo == 12 && mo == 1 && endMo <= 2 ) 744 if ( startMo == 12 && mo == 1 && endMo <= 2 )
726 startMo = 1; 745 startMo = 1;
727 if ( endMo == 1 && mo == 12 ) 746 if ( endMo == 1 && mo == 12 )
728 endMo = 12; 747 endMo = 12;
729 if ( mo == 12 && startMo == 1 ) 748 if ( mo == 12 && startMo == 1 )
730 startMo = 13; 749 startMo = 13;
731 if ( (startMo > mo || endMo < mo) ) { 750 if ( (startMo > mo || endMo < mo) ) {
732 skip = true; 751 skip = true;
733 } else { 752 } else {
734 if ( days[mSelStartT].month() != mo ) { 753 if ( days[mSelStartT].month() != mo ) {
735 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 754 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
736 mSelStartT += add +1; 755 mSelStartT += add +1;
737 } 756 }
738 if ( days[mSelEndT].month() != mo ) { 757 if ( days[mSelEndT].month() != mo ) {
@@ -902,73 +921,74 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
902 else 921 else
903 p.setPen(QColor(Qt::green).dark()); 922 p.setPen(QColor(Qt::green).dark());
904 } else { 923 } else {
905 if (actcol == mDefaultTextColor ) { 924 if (actcol == mDefaultTextColor ) {
906 p.setPen(KOPrefs::instance()->mHolidayColor); 925 p.setPen(KOPrefs::instance()->mHolidayColor);
907 } else { 926 } else {
908 p.setPen(mHolidayColorShaded); 927 p.setPen(mHolidayColorShaded);
909 } 928 }
910 } 929 }
911 } 930 }
912 931
913 // draw selected days with special color 932 // draw selected days with special color
914 // DO NOT specially highlight holidays in selection ! 933 // DO NOT specially highlight holidays in selection !
915 if (i >= mSelStartT && i <= mSelEndT) { 934 if (i >= mSelStartT && i <= mSelEndT) {
916 ;//p.setPen(mSelectedDaysColor); 935 ;//p.setPen(mSelectedDaysColor);
917 } 936 }
918 937
919 int addCol = 0; 938 int addCol = 0;
920 int addRow = 0; 939 int addRow = 0;
921 if ( colModulo ) { 940 if ( colModulo ) {
922 if ( col >= 7 - colModulo ) 941 if ( col >= 7 - colModulo )
923 addCol = col - 7 + colModulo; 942 addCol = col - 7 + colModulo;
924 } 943 }
925 if ( rowModulo ) { 944 if ( rowModulo ) {
926 if ( row >= 6 - rowModulo ) 945 if ( row >= 6 - rowModulo )
927 addRow = row - 5 + rowModulo; 946 addRow = row - 5 + rowModulo;
928 } 947 }
929 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); 948 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow);
930 ++addCol;//++addCol; 949 ++addCol;//++addCol;
931 if ( row == 0) 950 if ( row == 0)
932 addRow = 1; 951 addRow = 1;
933 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, 952 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight,
934 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); 953 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
935 954
936 // reset color to actual color 955 // reset color to actual color
937 if (!mHolidays[i].isNull()) { 956 if (!mHolidays[i].isNull()) {
938 p.setPen(actcol); 957 p.setPen(actcol);
939 } 958 }
940 // reset bold font to plain font 959 // reset bold font to plain font
941 if ( eDays.testBit(i)) { 960 if ( eDays.testBit(i)) {
942 QFont myFont = font(); 961 QFont myFont = font();
943 myFont.setBold(false); 962 myFont.setBold(false);
944 p.setFont(myFont); 963 p.setFont(myFont);
945 } 964 }
946 } 965 }
947 } else { 966 } else {
948 //qDebug("NO redraw "); 967 //qDebug("NO redraw ");
949 } 968 }
950 bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); 969
970 bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP);
951 mRedrawNeeded = false; 971 mRedrawNeeded = false;
952} 972}
953 973
954// ---------------------------------------------------------------------------- 974// ----------------------------------------------------------------------------
955// R E SI Z E E V E N T H A N D L I N G 975// R E SI Z E E V E N T H A N D L I N G
956// ---------------------------------------------------------------------------- 976// ----------------------------------------------------------------------------
957 977
958void KODayMatrix::resizeEvent(QResizeEvent *) 978void KODayMatrix::resizeEvent(QResizeEvent *)
959{ 979{
960 QRect sz = frameRect(); 980 QRect sz = frameRect();
961 daysize.setHeight(sz.height()*7 / NUMDAYS); 981 daysize.setHeight(sz.height()*7 / NUMDAYS);
962 daysize.setWidth(sz.width() / 7); 982 daysize.setWidth(sz.width() / 7);
963} 983}
964 984
965QSize KODayMatrix::sizeHint() const 985QSize KODayMatrix::sizeHint() const
966{ 986{
967 987
968 QFontMetrics fm ( font() ); 988 QFontMetrics fm ( font() );
969 int wid = fm.width( "30") *7+3; 989 int wid = fm.width( "30") *7+3;
970 int hei = fm.height() * 6+3; 990 int hei = fm.height() * 6+3;
971 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); 991 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei);
972 return QSize ( wid, hei ); 992 return QSize ( wid, hei );
973 993
974} 994}
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index 731117c..d725ead 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -182,96 +182,97 @@ public slots:
182 void repaintViewTimed(); 182 void repaintViewTimed();
183 183
184 /** 184 /**
185 * Calculate which square in the matrix should be 185 * Calculate which square in the matrix should be
186 * hilighted to indicate it's today. 186 * hilighted to indicate it's today.
187 */ 187 */
188 void recalculateToday(); 188 void recalculateToday();
189 189
190/* 190/*
191 void setStartDate(QDate); 191 void setStartDate(QDate);
192*/ 192*/
193 193
194signals: 194signals:
195 195
196 /** emitted if the user selects a block of days with the mouse by dragging a rectangle 196 /** emitted if the user selects a block of days with the mouse by dragging a rectangle
197 * inside the matrix 197 * inside the matrix
198 * 198 *
199 * @param daylist list of days that have been selected by the user 199 * @param daylist list of days that have been selected by the user
200 */ 200 */
201 void selected( const KCal::DateList &daylist ); 201 void selected( const KCal::DateList &daylist );
202 202
203 /** emitted if the user has dropped an event inside the matrix 203 /** emitted if the user has dropped an event inside the matrix
204 * 204 *
205 * @param event the dropped calendar event 205 * @param event the dropped calendar event
206 */ 206 */
207 void eventDropped(Event *event); 207 void eventDropped(Event *event);
208 208
209protected: 209protected:
210 210
211 void paintEvent(QPaintEvent *ev); 211 void paintEvent(QPaintEvent *ev);
212 212
213 void mousePressEvent (QMouseEvent* e); 213 void mousePressEvent (QMouseEvent* e);
214 214
215 void mouseReleaseEvent (QMouseEvent* e); 215 void mouseReleaseEvent (QMouseEvent* e);
216 216
217 void mouseMoveEvent (QMouseEvent* e); 217 void mouseMoveEvent (QMouseEvent* e);
218 218
219 void dragEnterEvent(QDragEnterEvent *); 219 void dragEnterEvent(QDragEnterEvent *);
220 220
221 void dragMoveEvent(QDragMoveEvent *); 221 void dragMoveEvent(QDragMoveEvent *);
222 222
223 void dragLeaveEvent(QDragLeaveEvent *); 223 void dragLeaveEvent(QDragLeaveEvent *);
224 224
225 void dropEvent(QDropEvent *); 225 void dropEvent(QDropEvent *);
226 226
227 void resizeEvent(QResizeEvent *); 227 void resizeEvent(QResizeEvent *);
228 228
229private: 229private:
230 int oldW, oldH;
230 bool mRedrawNeeded; 231 bool mRedrawNeeded;
231 KODaymatrixWhatsThis* mKODaymatrixWhatsThis; 232 KODaymatrixWhatsThis* mKODaymatrixWhatsThis;
232 bool mouseDown; 233 bool mouseDown;
233 QBitArray bDays; 234 QBitArray bDays;
234 QBitArray hDays; 235 QBitArray hDays;
235 QBitArray eDays; 236 QBitArray eDays;
236 QPixmap myPix; 237 QPixmap myPix;
237 QTimer* mUpdateTimer; 238 QTimer* mUpdateTimer;
238 QTimer* mRepaintTimer; 239 QTimer* mRepaintTimer;
239 bool mDayChanged; 240 bool mDayChanged;
240 bool mPendingUpdateBeforeRepaint; 241 bool mPendingUpdateBeforeRepaint;
241 242
242 /** returns the index of the day located at the matrix's widget (x,y) position. 243 /** returns the index of the day located at the matrix's widget (x,y) position.
243 * 244 *
244 * @param x horizontal coordinate 245 * @param x horizontal coordinate
245 * @param y vertical coordinate 246 * @param y vertical coordinate
246 */ 247 */
247 int getDayIndexFrom(int x, int y); 248 int getDayIndexFrom(int x, int y);
248 249
249 /** calculates a "shaded" color from the supplied color object. 250 /** calculates a "shaded" color from the supplied color object.
250 * (Copied from Cornelius's kdpdatebutton.cpp) 251 * (Copied from Cornelius's kdpdatebutton.cpp)
251 * 252 *
252 * @param color source based on which a shaded color should be calculated. 253 * @param color source based on which a shaded color should be calculated.
253 */ 254 */
254 QColor getShadedColor(QColor color); 255 QColor getShadedColor(QColor color);
255 256
256 /** number of days to be displayed. For now there is no support for any other number then 42. 257 /** number of days to be displayed. For now there is no support for any other number then 42.
257 so change it at your own risk :o) */ 258 so change it at your own risk :o) */
258 static const int NUMDAYS; 259 static const int NUMDAYS;
259 260
260 /** calendar instance to be queried for holidays, events, ... */ 261 /** calendar instance to be queried for holidays, events, ... */
261 Calendar *mCalendar; 262 Calendar *mCalendar;
262 263
263 /** starting date of the matrix */ 264 /** starting date of the matrix */
264 QDate startdate; 265 QDate startdate;
265 266
266 /** array of day labels to optimeize drawing performance. */ 267 /** array of day labels to optimeize drawing performance. */
267 QString *daylbls; 268 QString *daylbls;
268 269
269 /** array of days displayed to reduce memory consumption by 270 /** array of days displayed to reduce memory consumption by
270 subsequently calling QDate::addDays(). */ 271 subsequently calling QDate::addDays(). */
271 QDate *days; 272 QDate *days;
272 273
273 /** array of storing the number of events on a given day. 274 /** array of storing the number of events on a given day.
274 * used for drawing a bold font if there is at least one event on that day. 275 * used for drawing a bold font if there is at least one event on that day.
275 */ 276 */
276 //int *events; 277 //int *events;
277 278