summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/komonthview.cpp120
-rw-r--r--korganizer/komonthview.h13
2 files changed, 124 insertions, 9 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index cba85fa..9b0389d 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -97,96 +97,97 @@ KNoScrollListBox::~KNoScrollListBox()
97} 97}
98 98
99 99
100void KNoScrollListBox::focusInEvent ( QFocusEvent * e ) 100void KNoScrollListBox::focusInEvent ( QFocusEvent * e )
101{ 101{
102 QListBox::focusInEvent ( e ); 102 QListBox::focusInEvent ( e );
103 if ( count() ){ 103 if ( count() ){
104 int ci = currentItem(); 104 int ci = currentItem();
105 if ( ci < 0 ) ci = 0; 105 if ( ci < 0 ) ci = 0;
106 106
107 setCurrentItem( ci ); 107 setCurrentItem( ci );
108 setSelected ( ci, true ); 108 setSelected ( ci, true );
109 emit highlighted( item ( ci ) ); 109 emit highlighted( item ( ci ) );
110 110
111 resetOnFocusIn = true; 111 resetOnFocusIn = true;
112 112
113 if ( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) { 113 if ( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) {
114 QListBoxItem *fi = firstItem (); 114 QListBoxItem *fi = firstItem ();
115 if (fi ) { 115 if (fi ) {
116 int ihei = fi->height( this ); 116 int ihei = fi->height( this );
117 int hei = numRows () * ihei; 117 int hei = numRows () * ihei;
118 if ( hei < height() - horizontalScrollBar()->height () ) { 118 if ( hei < height() - horizontalScrollBar()->height () ) {
119 setVScrollBarMode(QScrollView::AlwaysOff); 119 setVScrollBarMode(QScrollView::AlwaysOff);
120 } 120 }
121 else 121 else
122 setVScrollBarMode(QScrollView::Auto); 122 setVScrollBarMode(QScrollView::Auto);
123 if ( ihei *3 > height() ) { 123 if ( ihei *3 > height() ) {
124 setHScrollBarMode(QScrollView::AlwaysOff); 124 setHScrollBarMode(QScrollView::AlwaysOff);
125 } 125 }
126 else { 126 else {
127 setHScrollBarMode(QScrollView::Auto); 127 setHScrollBarMode(QScrollView::Auto);
128 } 128 }
129 } else { 129 } else {
130 setVScrollBarMode(QScrollView::Auto); 130 setVScrollBarMode(QScrollView::Auto);
131 setHScrollBarMode(QScrollView::Auto); 131 setHScrollBarMode(QScrollView::Auto);
132 } 132 }
133 } 133 }
134 } 134 }
135} 135}
136void KNoScrollListBox::focusOutEvent ( QFocusEvent * e ) 136void KNoScrollListBox::focusOutEvent ( QFocusEvent * e )
137{ 137{
138 int i = currentItem (); 138 int i = currentItem ();
139 if ( i >= 0 ) { 139 if ( i >= 0 ) {
140 setSelected ( i, false ); 140 setSelected ( i, false );
141 } 141 }
142 QListBox::focusOutEvent ( e ); 142 QListBox::focusOutEvent ( e );
143 setVScrollBarMode(QScrollView::AlwaysOff); 143 setVScrollBarMode(QScrollView::AlwaysOff);
144 setHScrollBarMode(QScrollView::AlwaysOff); 144 setHScrollBarMode(QScrollView::AlwaysOff);
145 emit highligtIncidence( 0, (MonthViewCell*)this, 0 );
145} 146}
146 147
147QString KNoScrollListBox::getWhatsThisText(QPoint p) 148QString KNoScrollListBox::getWhatsThisText(QPoint p)
148{ 149{
149 QListBoxItem* item = itemAt ( p ); 150 QListBoxItem* item = itemAt ( p );
150 if ( ! item ) { 151 if ( ! item ) {
151 return i18n("Click in the cell\nto add an event!"); 152 return i18n("Click in the cell\nto add an event!");
152 } 153 }
153 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(), 154 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(),
154 KOPrefs::instance()->mWTshowDetails, 155 KOPrefs::instance()->mWTshowDetails,
155 KOPrefs::instance()->mWTshowCreated, 156 KOPrefs::instance()->mWTshowCreated,
156 KOPrefs::instance()->mWTshowChanged); 157 KOPrefs::instance()->mWTshowChanged);
157} 158}
158void KNoScrollListBox::keyPressEvent(QKeyEvent *e) 159void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
159{ 160{
160 //qDebug("KNoScrollListBox::keyPressEvent "); 161 //qDebug("KNoScrollListBox::keyPressEvent ");
161 switch(e->key()) { 162 switch(e->key()) {
162 case Key_Right: 163 case Key_Right:
163 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 164 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
164 { 165 {
165 e->ignore(); 166 e->ignore();
166 return; 167 return;
167 } 168 }
168 scrollBy(10,0); 169 scrollBy(10,0);
169 break; 170 break;
170 case Key_Left: 171 case Key_Left:
171 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 172 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
172 { 173 {
173 e->ignore(); 174 e->ignore();
174 return; 175 return;
175 } 176 }
176 scrollBy(-10,0); 177 scrollBy(-10,0);
177 break; 178 break;
178 case Key_Up: 179 case Key_Up:
179 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 180 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
180 e->ignore(); 181 e->ignore();
181 break; 182 break;
182 } 183 }
183 if ( count() ) { 184 if ( count() ) {
184 if ( currentItem() == 0 ) { 185 if ( currentItem() == 0 ) {
185 emit prevCell(); 186 emit prevCell();
186 } else { 187 } else {
187 setCurrentItem((currentItem()+count()-1)%count()); 188 setCurrentItem((currentItem()+count()-1)%count());
188 if(!itemVisible(currentItem())) { 189 if(!itemVisible(currentItem())) {
189 if((unsigned int) currentItem() == (count()-1)) { 190 if((unsigned int) currentItem() == (count()-1)) {
190 setTopItem(currentItem()-numItemsVisible()+1); 191 setTopItem(currentItem()-numItemsVisible()+1);
191 } else { 192 } else {
192 setTopItem(topItem()-1); 193 setTopItem(topItem()-1);
@@ -235,135 +236,161 @@ void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
235 break; 236 break;
236 default: 237 default:
237 e->ignore(); 238 e->ignore();
238 break; 239 break;
239 } 240 }
240} 241}
241 242
242void KNoScrollListBox::oneDown() 243void KNoScrollListBox::oneDown()
243{ 244{
244 if ( count () ) { 245 if ( count () ) {
245 if ( currentItem()+1 == count () ) { 246 if ( currentItem()+1 == count () ) {
246 emit nextCell(); 247 emit nextCell();
247 } else { 248 } else {
248 resetOnFocusIn = false; 249 resetOnFocusIn = false;
249 setCurrentItem((currentItem()+1)%count()); 250 setCurrentItem((currentItem()+1)%count());
250 if(!itemVisible(currentItem())) { 251 if(!itemVisible(currentItem())) {
251 if(currentItem() == 0) { 252 if(currentItem() == 0) {
252 setTopItem(0); 253 setTopItem(0);
253 } else { 254 } else {
254 setTopItem(topItem()+1); 255 setTopItem(topItem()+1);
255 } 256 }
256 } 257 }
257 } 258 }
258 } 259 }
259} 260}
260void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) 261void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e)
261{ 262{
262 switch(e->key()) { 263 switch(e->key()) {
263 case Key_Shift: 264 case Key_Shift:
264 emit shiftUp(); 265 emit shiftUp();
265 break; 266 break;
266 default: 267 default:
267 break; 268 break;
268 } 269 }
269} 270}
270 271
271void KNoScrollListBox::mousePressEvent(QMouseEvent *e) 272void KNoScrollListBox::mousePressEvent(QMouseEvent *e)
272{ 273{
273 QListBox::mousePressEvent(e); 274 QListBox::mousePressEvent(e);
274 275
275 if(e->button() == RightButton) { 276 if(e->button() == RightButton) {
276 emit rightClick(); 277 emit rightClick();
277 } 278 }
278} 279}
279 280
280MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) 281MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s)
281 : QListBoxItem() 282 : QListBoxItem()
282{ 283{
284 mDisplayHightlighted = false;
283 mblockRepaint = true; 285 mblockRepaint = true;
284 setText( s ); 286 setText( s );
285 mMultiday = 0; 287 mMultiday = 0;
286 mIncidence = incidence; 288 mIncidence = incidence;
287 mDate = qd; 289 mDate = qd;
288 mRecur = false; 290 mRecur = false;
289 mAlarm = false; 291 mAlarm = false;
290 mReply = false; 292 mReply = false;
291 mInfo = false; 293 mInfo = false;
292 mdayPos = 0; 294 mdayPos = 0;
293 isWeekItem = KOPrefs::instance()->mMonthViewWeek; 295 isWeekItem = KOPrefs::instance()->mMonthViewWeek;
294} 296}
295void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) 297void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s)
296{ 298{
299 mDisplayHightlighted = false;
297 setText( s ); 300 setText( s );
298 mMultiday = 0; 301 mMultiday = 0;
299 mIncidence = incidence; 302 mIncidence = incidence;
300 mDate = qd; 303 mDate = qd;
301 mRecur = false; 304 mRecur = false;
302 mAlarm = false; 305 mAlarm = false;
303 mReply = false; 306 mReply = false;
304 mInfo = false; 307 mInfo = false;
305 mdayPos = 0; 308 mdayPos = 0;
306} 309}
310bool MonthViewItem::setHighlightedFalse()
311{
312 if ( !mDisplayHightlighted )
313 return false;
314 mDisplayHightlighted = false;
315 return true;
316}
307 317
318bool MonthViewItem::setHighlighted( Incidence * inc )
319{
320 if ( inc == mIncidence ) {
321 if ( mDisplayHightlighted )
322 return false;
323 mDisplayHightlighted = true;
324 return true;
325 } else {
326 if ( !mDisplayHightlighted )
327 return false;
328 mDisplayHightlighted = false;
329 return true;
330 }
331 return false;
332}
308void MonthViewItem::paint(QPainter *p) 333void MonthViewItem::paint(QPainter *p)
309{ 334{
310 if ( mblockRepaint ) { 335 if ( mblockRepaint ) {
311 return; 336 return;
312 } 337 }
313#if QT_VERSION >= 0x030000 338#if QT_VERSION >= 0x030000
314 bool sel = isSelected(); 339 bool sel = isSelected();
315#else 340#else
316 bool sel = selected(); 341 bool sel = selected();
317#endif 342#endif
318 int heihei = height( listBox () ); 343 int heihei = height( listBox () );
319 int x = 1; 344 int x = 1;
320 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) 345 if (KOPrefs::instance()->mMonthViewUsesCategoryColor || mDisplayHightlighted )
321 { 346 {
347 if ( mDisplayHightlighted )
348 sel = true;
322 p->setBackgroundColor( palette().color( QPalette::Normal, \ 349 p->setBackgroundColor( palette().color( QPalette::Normal, \
323 sel ? QColorGroup::Highlight : QColorGroup::Background ) ); 350 sel ? QColorGroup::Highlight : QColorGroup::Background ) );
324 p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei ); 351 p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei );
325 } 352 }
326 353
327 //int y = 3;//(height() - mRecurPixmap.height()) /2; 354 //int y = 3;//(height() - mRecurPixmap.height()) /2;
328 int size = PIXMAP_SIZE; 355 int size = PIXMAP_SIZE;
329 if ( QApplication::desktop()->width() < 300 ) 356 if ( QApplication::desktop()->width() < 300 )
330 size = 3; 357 size = 3;
331 int y = (heihei - size -1 ) /2; 358 int y = (heihei - size -1 ) /2;
332 359
333 if ( mIncidence->calID() > 1 ) { 360 if ( mIncidence->calID() > 1 ) {
334 p->fillRect ( x, y-2,size,size+4, KOPrefs::instance()->defaultColor( mIncidence->calID() ) ); 361 p->fillRect ( x, y-2,size,size+4, KOPrefs::instance()->defaultColor( mIncidence->calID() ) );
335 p->drawRect ( x, y-2,size,size+4); 362 p->drawRect ( x, y-2,size,size+4);
336 x += size + 1; 363 x += size + 1;
337 } 364 }
338 if ( KOPrefs::instance()->mMonthShowIcons ) { 365 if ( KOPrefs::instance()->mMonthShowIcons ) {
339 if ( mInfo ) { 366 if ( mInfo ) {
340 p->fillRect ( x, y,size,size, Qt::darkGreen ); 367 p->fillRect ( x, y,size,size, Qt::darkGreen );
341 x += size + 1; 368 x += size + 1;
342 } 369 }
343 if ( mRecur ) { 370 if ( mRecur ) {
344 p->fillRect ( x, y,size,size, Qt::blue ); 371 p->fillRect ( x, y,size,size, Qt::blue );
345 x += size + 1; 372 x += size + 1;
346 } 373 }
347 if ( mAlarm ) { 374 if ( mAlarm ) {
348 p->fillRect ( x, y,size,size, Qt::red ); 375 p->fillRect ( x, y,size,size, Qt::red );
349 x += size + 1; 376 x += size + 1;
350 } 377 }
351 if ( mReply ) { 378 if ( mReply ) {
352 p->fillRect ( x, y,size,size, Qt::yellow ); 379 p->fillRect ( x, y,size,size, Qt::yellow );
353 x += size + 1; 380 x += size + 1;
354 } 381 }
355 } 382 }
356 if ( mMultiday ) { 383 if ( mMultiday ) {
357 int yyy = y+(size/2); 384 int yyy = y+(size/2);
358 int sizeM = size+2; 385 int sizeM = size+2;
359 p->setBrush( QBrush::SolidPattern ); 386 p->setBrush( QBrush::SolidPattern );
360 p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ; 387 p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ;
361 if ( mMultiday == 2 || mMultiday == 3 ) { 388 if ( mMultiday == 2 || mMultiday == 3 ) {
362 QPointArray pa ( 3 ); 389 QPointArray pa ( 3 );
363 pa.setPoint (0, x, yyy ); 390 pa.setPoint (0, x, yyy );
364 pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 ); 391 pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 );
365 pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 ); 392 pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 );
366 p->drawPolygon( pa ); 393 p->drawPolygon( pa );
367 } 394 }
368 if ( mMultiday == 2 || mMultiday == 1 ) { 395 if ( mMultiday == 2 || mMultiday == 1 ) {
369 QPointArray pa ( 3 ); 396 QPointArray pa ( 3 );
@@ -555,96 +582,97 @@ void MonthViewCell::setMyPalette()
555 582
556 } else { 583 } else {
557 if ( currentPalette == 3 ) return; 584 if ( currentPalette == 3 ) return;
558 setPalette( mNonPrimaryPalette ); 585 setPalette( mNonPrimaryPalette );
559 mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); 586 mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) ));
560 //mLabel->setPalette( mNonPrimaryPalette );; 587 //mLabel->setPalette( mNonPrimaryPalette );;
561 currentPalette = 3; 588 currentPalette = 3;
562 } 589 }
563 } 590 }
564 //QPalette pal = palette(); 591 //QPalette pal = palette();
565 592
566 //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); 593 //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) ));
567} 594}
568QPalette MonthViewCell::getPalette () 595QPalette MonthViewCell::getPalette ()
569{ 596{
570 if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) 597 if ( !KOPrefs::instance()->mMonthViewUsesDayColors )
571 return mStandardPalette; 598 return mStandardPalette;
572 if ( mHoliday) { 599 if ( mHoliday) {
573 return mHolidayPalette ; 600 return mHolidayPalette ;
574 } else { 601 } else {
575 if ( mPrimary ) { 602 if ( mPrimary ) {
576 return mPrimaryPalette ; 603 return mPrimaryPalette ;
577 } 604 }
578 } 605 }
579 return mNonPrimaryPalette; 606 return mNonPrimaryPalette;
580} 607}
581bool MonthViewCell::isPrimary() const 608bool MonthViewCell::isPrimary() const
582{ 609{
583 return mPrimary; 610 return mPrimary;
584} 611}
585 612
586void MonthViewCell::setHoliday( bool holiday ) 613void MonthViewCell::setHoliday( bool holiday )
587{ 614{
588 mHoliday = holiday; 615 mHoliday = holiday;
589 //setMyPalette(); 616 //setMyPalette();
590} 617}
591 618
592void MonthViewCell::setHoliday( const QString &holiday ) 619void MonthViewCell::setHoliday( const QString &holiday )
593{ 620{
594 mHolidayString = holiday; 621 mHolidayString = holiday;
595 622
596 if ( !holiday.isEmpty() ) { 623 if ( !holiday.isEmpty() ) {
597 setHoliday( true ); 624 setHoliday( true );
598 } 625 }
599} 626}
600 627
601void MonthViewCell::startUpdateCell() 628void MonthViewCell::startUpdateCell()
602{ 629{
630
603 mdayCount = 0; 631 mdayCount = 0;
604 setFocusPolicy(NoFocus); 632 setFocusPolicy(NoFocus);
605 if ( !mMonthView->isUpdatePossible() ) 633 if ( !mMonthView->isUpdatePossible() )
606 return; 634 return;
607 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 635 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
608 while ( mitem ) { 636 while ( mitem ) {
609 mitem->setBlockRepaint( true ); 637 mitem->setBlockRepaint( true );
610 mitem = (MonthViewItem *)mitem->next(); 638 mitem = (MonthViewItem *)mitem->next();
611 } 639 }
612 if ( mAvailItemList.count() > 20 ) { 640 if ( mAvailItemList.count() > 20 ) {
613 mAvailItemList.setAutoDelete( true ); 641 mAvailItemList.setAutoDelete( true );
614 mAvailItemList.clear(); 642 mAvailItemList.clear();
615 mAvailItemList.setAutoDelete( false ); 643 mAvailItemList.setAutoDelete( false );
616 clear(); 644 clear();
617 } 645 }
618 646
619 setPrimary( mDate.month()%2 ); 647 setPrimary( mDate.month()%2 );
620 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); 648 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays);
621 if ( mDate == QDate::currentDate() ) { 649 if ( mDate == QDate::currentDate() ) {
622 setLineWidth( 3 ); 650 setLineWidth( 3 );
623 } else { 651 } else {
624 setLineWidth( 1 ); 652 setLineWidth( 1 );
625 } 653 }
626 MonthViewItem* CurrentAvailItem = (MonthViewItem*) firstItem (); 654 MonthViewItem* CurrentAvailItem = (MonthViewItem*) firstItem ();
627 //clear(); 655 //clear();
628 while ( CurrentAvailItem ) { 656 while ( CurrentAvailItem ) {
629 MonthViewItem *item = CurrentAvailItem; 657 MonthViewItem *item = CurrentAvailItem;
630 CurrentAvailItem = (MonthViewItem *)item->next(); 658 CurrentAvailItem = (MonthViewItem *)item->next();
631 mAvailItemList.append( item ); 659 mAvailItemList.append( item );
632 takeItem ( item ); 660 takeItem ( item );
633 } 661 }
634 662
635#ifdef DESKTOP_VERSION 663#ifdef DESKTOP_VERSION
636 QToolTip::remove(this); 664 QToolTip::remove(this);
637#endif 665#endif
638 mToolTip.clear(); 666 mToolTip.clear();
639 //qApp->processEvents(); 667 //qApp->processEvents();
640#if 0 668#if 0
641 if ( !mHolidayString.isEmpty() ) { 669 if ( !mHolidayString.isEmpty() ) {
642 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); 670 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
643 item->setPalette( mHolidayPalette ); 671 item->setPalette( mHolidayPalette );
644 insertItem( item ); 672 insertItem( item );
645 mToolTip.append ( mHolidayString ); 673 mToolTip.append ( mHolidayString );
646 } 674 }
647#endif 675#endif
648} 676}
649 677
650int MonthViewCell::insertEvent(Event *event) 678int MonthViewCell::insertEvent(Event *event)
@@ -1038,102 +1066,129 @@ void MonthViewCell::resizeEvent ( QResizeEvent * e )
1038 1066
1039void MonthViewCell::defaultAction( QListBoxItem *item ) 1067void MonthViewCell::defaultAction( QListBoxItem *item )
1040{ 1068{
1041 1069
1042 if ( !item ) { 1070 if ( !item ) {
1043 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1071 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1044 emit newEventSignal( dt ); 1072 emit newEventSignal( dt );
1045 return; 1073 return;
1046 } 1074 }
1047 1075
1048 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1076 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1049 Incidence *incidence = eventItem->incidence(); 1077 Incidence *incidence = eventItem->incidence();
1050 if ( incidence ) mMonthView->defaultAction( incidence ); 1078 if ( incidence ) mMonthView->defaultAction( incidence );
1051} 1079}
1052void MonthViewCell::showDay() 1080void MonthViewCell::showDay()
1053{ 1081{
1054 emit showDaySignal( date() ); 1082 emit showDaySignal( date() );
1055} 1083}
1056void MonthViewCell::newEvent() 1084void MonthViewCell::newEvent()
1057{ 1085{
1058 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1086 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1059 emit newEventSignal( dt ); 1087 emit newEventSignal( dt );
1060} 1088}
1061void MonthViewCell::cellClicked( QListBoxItem *item ) 1089void MonthViewCell::cellClicked( QListBoxItem *item )
1062{ 1090{
1063 mMonthView->setSelectedCell( this ); 1091 mMonthView->setSelectedCell( this );
1064 if ( item == 0 ) { 1092 if ( item == 0 ) {
1065 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1093 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1066 emit newEventSignal( dt ); 1094 emit newEventSignal( dt );
1067 return; 1095 return;
1068 } 1096 }
1069 1097
1070} 1098}
1071 1099
1072void MonthViewCell::contextMenu( QListBoxItem *item ) 1100void MonthViewCell::contextMenu( QListBoxItem *item )
1073{ 1101{
1074 mMonthView->setPopupCell( this ); 1102 mMonthView->setPopupCell( this );
1075 if ( !item ) { 1103 if ( !item ) {
1076 mMonthView->showContextMenu( 0 ); 1104 mMonthView->showContextMenu( 0 );
1077 return; 1105 return;
1078 } 1106 }
1079 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1107 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1080 Incidence *incidence = eventItem->incidence(); 1108 Incidence *incidence = eventItem->incidence();
1081 if ( incidence ) mMonthView->showContextMenu( incidence ); 1109 if ( incidence ) mMonthView->showContextMenu( incidence );
1082} 1110}
1083 1111
1084void MonthViewCell::selection( QListBoxItem *item ) 1112void MonthViewCell::selection( QListBoxItem *item )
1085{ 1113{
1086 if ( !item ) return; 1114 if ( !item ) {
1087 1115 emit highligtIncidence( 0 , this, 0 );
1116 return;
1117 }
1118 MonthViewItem * it = (static_cast<MonthViewItem *>( item ));
1119 emit highligtIncidence( it->incidence(), this, it->multiDay() );
1088 mMonthView->setSelectedCell( this ); 1120 mMonthView->setSelectedCell( this );
1089} 1121}
1090 1122
1091 1123void MonthViewCell::deHightLight()
1124{
1125 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
1126 while ( mitem ) {
1127 if ( mitem->setHighlightedFalse() )
1128 updateItem ( mitem );
1129 mitem = (MonthViewItem *)mitem->next();
1130 }
1131}
1132// returns true if no inc found
1133bool MonthViewCell::doHightLight( Incidence * inc )
1134{
1135
1136 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
1137 while ( mitem ) {
1138 if ( mitem->incidence() == inc ) {
1139 if ( mitem->setHighlighted( inc ) )
1140 updateItem ( mitem );
1141 return false;
1142 }
1143 mitem = (MonthViewItem *)mitem->next();
1144 }
1145 return true;
1146}
1092// ******************************************************************************* 1147// *******************************************************************************
1093// ******************************************************************************* 1148// *******************************************************************************
1094// ******************************************************************************* 1149// *******************************************************************************
1095 1150
1096 1151
1097KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) 1152KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
1098 : KOEventView( calendar, parent, name ), 1153 : KOEventView( calendar, parent, name ),
1099 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), 1154 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
1100 mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) 1155 mWidthLongDayLabel( 0 ), mSelectedCell( 0 )
1101{ 1156{
1102 mFlagKeyPressed = false; 1157 mFlagKeyPressed = false;
1103 mShortDayLabelsM = false; 1158 mShortDayLabelsM = false;
1104 mShortDayLabelsW = false; 1159 mShortDayLabelsW = false;
1105 skipResize = false; 1160 skipResize = false;
1106 clPending = true; 1161 clPending = true;
1107 mPopupCell = 0; 1162 mPopupCell = 0;
1108 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" ); 1163 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" );
1109 mWidStack = new QWidgetStack( this ); 1164 mWidStack = new QWidgetStack( this );
1110 QVBoxLayout* hb = new QVBoxLayout( this ); 1165 QVBoxLayout* hb = new QVBoxLayout( this );
1111 mMonthView = new QWidget( mWidStack ); 1166 mMonthView = new QWidget( mWidStack );
1112 mWeekView = new QWidget( mWidStack ); 1167 mWeekView = new QWidget( mWidStack );
1113#if QT_VERSION >= 0x030000 1168#if QT_VERSION >= 0x030000
1114 mWidStack->addWidget(mMonthView ); 1169 mWidStack->addWidget(mMonthView );
1115 mWidStack->addWidget(mWeekView ); 1170 mWidStack->addWidget(mWeekView );
1116#else 1171#else
1117 mWidStack->addWidget( mMonthView, 1 ); 1172 mWidStack->addWidget( mMonthView, 1 );
1118 mWidStack->addWidget( mWeekView , 1 ); 1173 mWidStack->addWidget( mWeekView , 1 );
1119#endif 1174#endif
1120 hb->addWidget( mNavigatorBar ); 1175 hb->addWidget( mNavigatorBar );
1121 hb->addWidget( mWidStack ); 1176 hb->addWidget( mWidStack );
1122 mShowWeekView = KOPrefs::instance()->mMonthViewWeek; 1177 mShowWeekView = KOPrefs::instance()->mMonthViewWeek;
1123 updatePossible = false; 1178 updatePossible = false;
1124 //updatePossible = true; 1179 //updatePossible = true;
1125 mCells.setAutoDelete( true ); 1180 mCells.setAutoDelete( true );
1126 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 1181 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
1127 mDayLabels.resize( mDaysPerWeek ); 1182 mDayLabels.resize( mDaysPerWeek );
1128 mDayLabelsW.resize( mDaysPerWeek ); 1183 mDayLabelsW.resize( mDaysPerWeek );
1129 QFont bfont = font(); 1184 QFont bfont = font();
1130 if ( QApplication::desktop()->width() < 650 ) { 1185 if ( QApplication::desktop()->width() < 650 ) {
1131 bfont.setPointSize( bfont.pointSize() - 2 ); 1186 bfont.setPointSize( bfont.pointSize() - 2 );
1132 } 1187 }
1133 bfont.setBold( true ); 1188 bfont.setBold( true );
1134 int i; 1189 int i;
1135 1190
1136 for( i = 0; i < mDaysPerWeek; i++ ) { 1191 for( i = 0; i < mDaysPerWeek; i++ ) {
1137 QLabel *label = new QLabel( mMonthView ); 1192 QLabel *label = new QLabel( mMonthView );
1138 label->setFont(bfont); 1193 label->setFont(bfont);
1139 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1194 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
@@ -1155,184 +1210,239 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
1155 KOWeekButton *label = new KOWeekButton( mMonthView ); 1210 KOWeekButton *label = new KOWeekButton( mMonthView );
1156 label->setFocusPolicy(NoFocus); 1211 label->setFocusPolicy(NoFocus);
1157 label->setFont(bfont); 1212 label->setFont(bfont);
1158 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 1213 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
1159 label->setFlat(true); 1214 label->setFlat(true);
1160 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 1215 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
1161 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1216 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1162 //label->setLineWidth(1); 1217 //label->setLineWidth(1);
1163 //label->setAlignment(AlignCenter); 1218 //label->setAlignment(AlignCenter);
1164 mWeekLabels.insert( i, label ); 1219 mWeekLabels.insert( i, label );
1165 } 1220 }
1166 mWeekLabels[mNumWeeks]->setText( i18n("W")); 1221 mWeekLabels[mNumWeeks]->setText( i18n("W"));
1167 mWeekLabels[mNumWeeks]->setFocusPolicy(WheelFocus); 1222 mWeekLabels[mNumWeeks]->setFocusPolicy(WheelFocus);
1168 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); 1223 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number"));
1169 1224
1170 for( i = 0; i < 1+1; i++ ) { 1225 for( i = 0; i < 1+1; i++ ) {
1171 KOWeekButton *label = new KOWeekButton( mWeekView ); 1226 KOWeekButton *label = new KOWeekButton( mWeekView );
1172 label->setFocusPolicy(NoFocus); 1227 label->setFocusPolicy(NoFocus);
1173 label->setFont(bfont); 1228 label->setFont(bfont);
1174 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 1229 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
1175 label->setFlat(true); 1230 label->setFlat(true);
1176 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 1231 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
1177 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1232 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1178 //label->setLineWidth(1); 1233 //label->setLineWidth(1);
1179 //label->setAlignment(AlignCenter); 1234 //label->setAlignment(AlignCenter);
1180 mWeekLabelsW.insert( i, label ); 1235 mWeekLabelsW.insert( i, label );
1181 } 1236 }
1182 mWeekLabelsW[1]->setText( i18n("W")); 1237 mWeekLabelsW[1]->setText( i18n("W"));
1183 mWeekLabelsW[1]->setFocusPolicy(WheelFocus); 1238 mWeekLabelsW[1]->setFocusPolicy(WheelFocus);
1184 1239
1185 1240
1186 int row, col; 1241 int row, col;
1187 mCells.resize( mNumCells ); 1242 mCells.resize( mNumCells );
1188 for( row = 0; row < mNumWeeks; ++row ) { 1243 for( row = 0; row < mNumWeeks; ++row ) {
1189 for( col = 0; col < mDaysPerWeek; ++col ) { 1244 for( col = 0; col < mDaysPerWeek; ++col ) {
1190 MonthViewCell *cell = new MonthViewCell( this, mMonthView ); 1245 MonthViewCell *cell = new MonthViewCell( this, mMonthView );
1191 mCells.insert( row * mDaysPerWeek + col, cell ); 1246 mCells.insert( row * mDaysPerWeek + col, cell );
1192 1247
1193 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 1248 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
1194 SLOT( defaultAction( Incidence * ) ) ); 1249 SLOT( defaultAction( Incidence * ) ) );
1195 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 1250 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
1196 SIGNAL( newEventSignal( QDateTime ) ) ); 1251 SIGNAL( newEventSignal( QDateTime ) ) );
1197 connect( cell, SIGNAL( showDaySignal( QDate ) ), 1252 connect( cell, SIGNAL( showDaySignal( QDate ) ),
1198 SIGNAL( showDaySignal( QDate ) ) ); 1253 SIGNAL( showDaySignal( QDate ) ) );
1199 connect( cell, SIGNAL( nextCell() ), 1254 connect( cell, SIGNAL( nextCell() ),
1200 SLOT( nextCell() ) ); 1255 SLOT( nextCell() ) );
1201 connect( cell, SIGNAL( prevCell() ), 1256 connect( cell, SIGNAL( prevCell() ),
1202 SLOT( prevCell() ) ); 1257 SLOT( prevCell() ) );
1258 connect( cell, SIGNAL( highligtIncidence( Incidence * , MonthViewCell *, int ) ),
1259 SLOT( incidenceHighlighted( Incidence *, MonthViewCell *, int ) ));
1203 } 1260 }
1204 } 1261 }
1205 mCellsW.resize( mDaysPerWeek ); 1262 mCellsW.resize( mDaysPerWeek );
1206 for( col = 0; col < mDaysPerWeek; ++col ) { 1263 for( col = 0; col < mDaysPerWeek; ++col ) {
1207 MonthViewCell *cell = new MonthViewCell( this, mWeekView ); 1264 MonthViewCell *cell = new MonthViewCell( this, mWeekView );
1208 mCellsW.insert( col, cell ); 1265 mCellsW.insert( col, cell );
1209 1266
1210 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 1267 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
1211 SLOT( defaultAction( Incidence * ) ) ); 1268 SLOT( defaultAction( Incidence * ) ) );
1212 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 1269 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
1213 SIGNAL( newEventSignal( QDateTime ) ) ); 1270 SIGNAL( newEventSignal( QDateTime ) ) );
1214 connect( cell, SIGNAL( showDaySignal( QDate ) ), 1271 connect( cell, SIGNAL( showDaySignal( QDate ) ),
1215 SIGNAL( showDaySignal( QDate ) ) ); 1272 SIGNAL( showDaySignal( QDate ) ) );
1216 connect( cell, SIGNAL( nextCell() ), 1273 connect( cell, SIGNAL( nextCell() ),
1217 SLOT( nextCell() ) ); 1274 SLOT( nextCell() ) );
1218 connect( cell, SIGNAL( prevCell() ), 1275 connect( cell, SIGNAL( prevCell() ),
1219 SLOT( prevCell() ) ); 1276 SLOT( prevCell() ) );
1277 connect( cell, SIGNAL( highligtIncidence( Incidence * , MonthViewCell *, int ) ),
1278 SLOT( incidenceHighlighted( Incidence *, MonthViewCell *, int ) ));
1220 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); 1279 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont );
1221 } 1280 }
1222 1281
1223 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); 1282 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) );
1224 mContextMenu = eventPopup(); 1283 mContextMenu = eventPopup();
1225 mContextMenu->addAdditionalItem(QIconSet(QPixmap()), 1284 mContextMenu->addAdditionalItem(QIconSet(QPixmap()),
1226 i18n("New Event..."),this, 1285 i18n("New Event..."),this,
1227 SLOT(slotNewEvent()),false); 1286 SLOT(slotNewEvent()),false);
1228 mContextMenu->addAdditionalItem(QIconSet(QPixmap()), 1287 mContextMenu->addAdditionalItem(QIconSet(QPixmap()),
1229 i18n("New Todo..."),this, 1288 i18n("New Todo..."),this,
1230 SLOT(slotNewTodo()),false); 1289 SLOT(slotNewTodo()),false);
1231 mContextMenu->addAdditionalItem(QIconSet(QPixmap()), 1290 mContextMenu->addAdditionalItem(QIconSet(QPixmap()),
1232 i18n("Journal"),this, 1291 i18n("Journal"),this,
1233 SLOT(slotEditJournal()),false); 1292 SLOT(slotEditJournal()),false);
1234 1293
1235 1294
1236 1295
1237 QString pathString = ""; 1296 QString pathString = "";
1238 if ( !KOPrefs::instance()->mToolBarMiniIcons ) { 1297 if ( !KOPrefs::instance()->mToolBarMiniIcons ) {
1239 if ( QApplication::desktop()->width() < 480 ) 1298 if ( QApplication::desktop()->width() < 480 )
1240 pathString += "icons16/"; 1299 pathString += "icons16/";
1241 } else 1300 } else
1242 pathString += "iconsmini/"; 1301 pathString += "iconsmini/";
1243 mNewItemMenu = new QPopupMenu( this ); 1302 mNewItemMenu = new QPopupMenu( this );
1244 mNewItemMenu->insertItem( SmallIcon( pathString +"newevent" ), i18n("New Event..."),this, SLOT(slotNewEvent())); 1303 mNewItemMenu->insertItem( SmallIcon( pathString +"newevent" ), i18n("New Event..."),this, SLOT(slotNewEvent()));
1245 mNewItemMenu->insertItem( SmallIcon( pathString +"newtodo" ),i18n("New Todo..."),this,SLOT(slotNewTodo()),false); 1304 mNewItemMenu->insertItem( SmallIcon( pathString +"newtodo" ),i18n("New Todo..."),this,SLOT(slotNewTodo()),false);
1246 mNewItemMenu->insertItem( SmallIcon( pathString +"journal" ),i18n("Journal"),this,SLOT(slotEditJournal()),false); 1305 mNewItemMenu->insertItem( SmallIcon( pathString +"journal" ),i18n("Journal"),this,SLOT(slotEditJournal()),false);
1247 1306
1248 // updateConfig(); //useless here... 1307 // updateConfig(); //useless here...
1249 // ... but we need mWidthLongDayLabel computed 1308 // ... but we need mWidthLongDayLabel computed
1250 QFontMetrics fontmetric(mDayLabels[0]->font()); 1309 QFontMetrics fontmetric(mDayLabels[0]->font());
1251 mWidthLongDayLabel = 0; 1310 mWidthLongDayLabel = 0;
1252 for (int i = 0; i < 7; i++) { 1311 for (int i = 0; i < 7; i++) {
1253 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 1312 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
1254 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 1313 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
1255 } 1314 }
1256 1315
1257 //mWeekLabels[mNumWeeks]->setText( i18n("W")); 1316 //mWeekLabels[mNumWeeks]->setText( i18n("W"));
1258 1317
1259#if 0 1318#if 0
1260 if ( mShowWeekView ) 1319 if ( mShowWeekView )
1261 mWidStack->raiseWidget( mWeekView ); 1320 mWidStack->raiseWidget( mWeekView );
1262 else 1321 else
1263 mWidStack->raiseWidget( mMonthView ); 1322 mWidStack->raiseWidget( mMonthView );
1264#endif 1323#endif
1265 1324
1266 emit incidenceSelected( 0 ); 1325 emit incidenceSelected( 0 );
1267 1326
1268 mComputeLayoutTimer = new QTimer( this ); 1327 mComputeLayoutTimer = new QTimer( this );
1269 connect (mComputeLayoutTimer ,SIGNAL(timeout()), this, SLOT ( slotComputeLayout())); 1328 connect (mComputeLayoutTimer ,SIGNAL(timeout()), this, SLOT ( slotComputeLayout()));
1270 1329
1271 1330
1272#ifndef DESKTOP_VERSION 1331#ifndef DESKTOP_VERSION
1273 resize( QApplication::desktop()->size() ); 1332 resize( QApplication::desktop()->size() );
1274#else 1333#else
1275 resize(640, 480 ); 1334 resize(640, 480 );
1276 updatePossible = true; 1335 updatePossible = true;
1277#endif 1336#endif
1278 computeLayout(); 1337 computeLayout();
1279 1338
1280 if ( mShowWeekView ) 1339 if ( mShowWeekView )
1281 mWidStack->raiseWidget( mWeekView ); 1340 mWidStack->raiseWidget( mWeekView );
1282 else 1341 else
1283 mWidStack->raiseWidget( mMonthView ); 1342 mWidStack->raiseWidget( mMonthView );
1284} 1343}
1285 1344
1286KOMonthView::~KOMonthView() 1345KOMonthView::~KOMonthView()
1287{ 1346{
1288 delete mContextMenu; 1347 delete mContextMenu;
1289} 1348}
1290 1349
1350void KOMonthView::incidenceHighlighted( Incidence * inc , MonthViewCell* mc, int mday )
1351{
1352 //qDebug("KOMonthView::incidenceHighlighted %d %d %d", inc, mc, mday );
1353 static Incidence * lastInc = 0;
1354 static MonthViewCell * lastCell = 0;
1355
1356 if ( lastInc == inc && lastCell == mc )
1357 return;
1358 lastInc = inc;
1359 lastCell = mc;
1360 //qDebug("KOMonthView::incidenceHighlighted %d %d %d", inc, mc, mday );
1361
1362 bool weekview = false;
1363 int index = 0;
1364 for (uint i = 0; i < mCellsW.count(); ++i) {
1365 if ( mCellsW[i] == mc ) {
1366 weekview = true;
1367 index = i;
1368 break;
1369 }
1370 }
1371 QPtrVector<MonthViewCell> *cells;
1372 if ( weekview )
1373 cells = &mCellsW;
1374 else {
1375 for (uint i = 0; i < mCells.count(); ++i) {
1376 if ( mCells[i] == mc ) {
1377 index = i;
1378 break;
1379 }
1380 }
1381 cells = &mCells;
1382 }
1383 for (uint i = 0; i < (*cells).count(); ++i) {
1384 (*cells)[i]->deHightLight();
1385 }
1386 if ( ! inc )
1387 return;
1388 if ( mday > 1 && index > 0 )
1389 for (int i = index-1; i >= 0; --i) {
1390 //qDebug("index %d iii %d ", index, i);
1391 if ( (*cells)[(uint)i]->doHightLight(inc) )
1392 break;
1393 }
1394 if ( mday < 3 && mday > 0 && index < (*cells).count()-1)
1395 for (uint i = index+1; i < (*cells).count(); ++i) {
1396 if ( (*cells)[i]->doHightLight(inc) )
1397 break;
1398 }
1399
1400}
1291void KOMonthView::selectInternalWeekNum ( int n ) 1401void KOMonthView::selectInternalWeekNum ( int n )
1292{ 1402{
1293 switchView(); 1403 switchView();
1294 if ( !KOPrefs::instance()->mMonthViewWeek ) 1404 if ( !KOPrefs::instance()->mMonthViewWeek )
1295 emit selectMonth (); 1405 emit selectMonth ();
1296 else 1406 else
1297 emit selectWeekNum ( n ); 1407 emit selectWeekNum ( n );
1298} 1408}
1299 1409
1300int KOMonthView::currentWeek() 1410int KOMonthView::currentWeek()
1301{ 1411{
1302 if ( mShowWeekView ) 1412 if ( mShowWeekView )
1303 return mWeekLabelsW[0]->getWeekNum(); 1413 return mWeekLabelsW[0]->getWeekNum();
1304 return mWeekLabels[0]->getWeekNum(); 1414 return mWeekLabels[0]->getWeekNum();
1305} 1415}
1306void KOMonthView::switchView() 1416void KOMonthView::switchView()
1307{ 1417{
1308 if ( selectedCell( ) ) 1418 if ( selectedCell( ) )
1309 selectedCell()->deselect(); 1419 selectedCell()->deselect();
1310 mShowWeekView = !mShowWeekView; 1420 mShowWeekView = !mShowWeekView;
1311 KOPrefs::instance()->mMonthViewWeek = mShowWeekView; 1421 KOPrefs::instance()->mMonthViewWeek = mShowWeekView;
1312 if ( clPending ) { 1422 if ( clPending ) {
1313 computeLayout(); 1423 computeLayout();
1314 updateConfig(); 1424 updateConfig();
1315 } 1425 }
1316 if ( mShowWeekView ) 1426 if ( mShowWeekView )
1317 mWidStack->raiseWidget( mWeekView ); 1427 mWidStack->raiseWidget( mWeekView );
1318 else 1428 else
1319 mWidStack->raiseWidget( mMonthView ); 1429 mWidStack->raiseWidget( mMonthView );
1320 clPending = false; 1430 clPending = false;
1321} 1431}
1322 1432
1323int KOMonthView::maxDatesHint() 1433int KOMonthView::maxDatesHint()
1324{ 1434{
1325 return mNumCells; 1435 return mNumCells;
1326} 1436}
1327 1437
1328int KOMonthView::currentDateCount() 1438int KOMonthView::currentDateCount()
1329{ 1439{
1330 return mNumCells; 1440 return mNumCells;
1331} 1441}
1332 1442
1333QPtrList<Incidence> KOMonthView::selectedIncidences() 1443QPtrList<Incidence> KOMonthView::selectedIncidences()
1334{ 1444{
1335 QPtrList<Incidence> selected; 1445 QPtrList<Incidence> selected;
1336 1446
1337 if ( mSelectedCell ) { 1447 if ( mSelectedCell ) {
1338 Incidence *incidence = mSelectedCell->selectedIncidence(); 1448 Incidence *incidence = mSelectedCell->selectedIncidence();
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index 65b5e77..159af16 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -1,308 +1,313 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#ifndef _KOMONTHVIEW_H 20#ifndef _KOMONTHVIEW_H
21#define _KOMONTHVIEW_H 21#define _KOMONTHVIEW_H
22 22
23#include <qlabel.h> 23#include <qlabel.h>
24#include <qframe.h> 24#include <qframe.h>
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qlistbox.h> 26#include <qlistbox.h>
27#include <qpoint.h> 27#include <qpoint.h>
28#include <qwidgetstack.h> 28#include <qwidgetstack.h>
29#include <qlayout.h> 29#include <qlayout.h>
30#include <qtimer.h> 30#include <qtimer.h>
31#include <qintdict.h> 31#include <qintdict.h>
32#include <qpushbutton.h> 32#include <qpushbutton.h>
33#include <qvaluelist.h> 33#include <qvaluelist.h>
34#include <qptrvector.h> 34#include <qptrvector.h>
35 35
36#include <libkcal/calendar.h> 36#include <libkcal/calendar.h>
37#include <libkcal/event.h> 37#include <libkcal/event.h>
38 38
39#include "koeventview.h" 39#include "koeventview.h"
40#include "navigatorbar.h" 40#include "navigatorbar.h"
41 41
42#ifdef DESKTOP_VERSION 42#ifdef DESKTOP_VERSION
43class QToolTipGroup; 43class QToolTipGroup;
44#endif 44#endif
45 45
46class KNOWhatsThis; 46class KNOWhatsThis;
47class MonthViewCell;
47class KOWeekButton : public QPushButton 48class KOWeekButton : public QPushButton
48{ 49{
49 Q_OBJECT 50 Q_OBJECT
50 public: 51 public:
51 KOWeekButton( QWidget *parent=0, const char *name=0 ) : 52 KOWeekButton( QWidget *parent=0, const char *name=0 ) :
52 QPushButton( parent, name) 53 QPushButton( parent, name)
53 { 54 {
54 connect( this, SIGNAL( clicked() ), 55 connect( this, SIGNAL( clicked() ),
55 SLOT( bottonClicked() )); 56 SLOT( bottonClicked() ));
56 mNumber = -1; 57 mNumber = -1;
57 } 58 }
58 void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));} 59 void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));}
59 int getWeekNum() { return mNumber;} 60 int getWeekNum() { return mNumber;}
60 signals: 61 signals:
61 void selectWeekNum ( int ); 62 void selectWeekNum ( int );
62private: 63private:
63 void focusInEvent ( QFocusEvent * ){;} 64 void focusInEvent ( QFocusEvent * ){;}
64 int mNumber; 65 int mNumber;
65 void keyPressEvent ( QKeyEvent * e ) 66 void keyPressEvent ( QKeyEvent * e )
66 { 67 {
67 e->ignore(); 68 e->ignore();
68 } 69 }
69 70
70private slots : 71private slots :
71 void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); } 72 void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); }
72}; 73};
73 74
74class KNoScrollListBox: public QListBox 75class KNoScrollListBox: public QListBox
75{ 76{
76 Q_OBJECT 77 Q_OBJECT
77 public: 78 public:
78 KNoScrollListBox(QWidget *parent=0, const char *name=0); 79 KNoScrollListBox(QWidget *parent=0, const char *name=0);
79 ~KNoScrollListBox(); 80 ~KNoScrollListBox();
80 QString getWhatsThisText(QPoint p) ; 81 QString getWhatsThisText(QPoint p) ;
81 82
82 signals: 83 signals:
83 void shiftDown(); 84 void shiftDown();
84 void shiftUp(); 85 void shiftUp();
85 void rightClick(); 86 void rightClick();
86 void nextCell(); 87 void nextCell();
87 void prevCell(); 88 void prevCell();
89 void highligtIncidence( Incidence * , MonthViewCell*, int );
88 90
89 protected slots: 91 protected slots:
90 void oneDown(); 92 void oneDown();
91 void keyPressEvent(QKeyEvent *); 93 void keyPressEvent(QKeyEvent *);
92 void keyReleaseEvent(QKeyEvent *); 94 void keyReleaseEvent(QKeyEvent *);
93 void mousePressEvent(QMouseEvent *); 95 void mousePressEvent(QMouseEvent *);
94 void focusInEvent ( QFocusEvent * ); 96 void focusInEvent ( QFocusEvent * );
95 void focusOutEvent ( QFocusEvent * ); 97 void focusOutEvent ( QFocusEvent * );
96 98
97 private: 99 private:
98 bool resetOnFocusIn; 100 bool resetOnFocusIn;
99 KNOWhatsThis * mWT; 101 KNOWhatsThis * mWT;
100}; 102};
101 103
102 104
103class MonthViewItem: public QListBoxItem 105class MonthViewItem: public QListBoxItem
104{ 106{
105 public: 107 public:
106 MonthViewItem( Incidence *, QDate qd, const QString & title ); 108 MonthViewItem( Incidence *, QDate qd, const QString & title );
107 void recycle( Incidence *incidence, QDate qd, const QString & s); 109 void recycle( Incidence *incidence, QDate qd, const QString & s);
108 void setRecur(bool on) { mRecur = on; } 110 void setRecur(bool on) { mRecur = on; }
109 void setAlarm(bool on) { mAlarm = on; } 111 void setAlarm(bool on) { mAlarm = on; }
110 void setReply(bool on) { mReply = on; } 112 void setReply(bool on) { mReply = on; }
111 void setMoreInfo(bool on) { mInfo = on; } 113 void setMoreInfo(bool on) { mInfo = on; }
112 void setMultiDay(int type) { mMultiday = type; } 114 void setMultiDay(int type) { mMultiday = type; }
115 int multiDay() { return mMultiday; }
113 void setMultiDayPos(int type) { mdayPos = type; } 116 void setMultiDayPos(int type) { mdayPos = type; }
114 int gettMultiDayPos() { return mdayPos; } 117 int gettMultiDayPos() { return mdayPos; }
115 void setBlockRepaint(bool on) { mblockRepaint = on; } 118 void setBlockRepaint(bool on) { mblockRepaint = on; }
116 119 bool setHighlighted( Incidence * );
117 120
118 void setPalette(const QPalette &p) { mPalette = p; } 121 void setPalette(const QPalette &p) { mPalette = p; }
119 QPalette palette() const { return mPalette; } 122 QPalette palette() const { return mPalette; }
120 123 bool setHighlightedFalse();
121 Incidence *incidence() const { return mIncidence; } 124 Incidence *incidence() const { return mIncidence; }
122 QDate incidenceDate() { return mDate; } 125 QDate incidenceDate() { return mDate; }
123 126
124 protected: 127 protected:
125 virtual void paint(QPainter *); 128 virtual void paint(QPainter *);
126 virtual int height(const QListBox *) const; 129 virtual int height(const QListBox *) const;
127 virtual int width(const QListBox *) const; 130 virtual int width(const QListBox *) const;
128 131
129 private: 132 private:
130 int mdayPos; 133 int mdayPos;
131 bool isWeekItem; 134 bool isWeekItem;
132 bool mblockRepaint; 135 bool mblockRepaint;
133 int mMultiday; 136 int mMultiday;
134 bool mRecur; 137 bool mRecur;
135 bool mAlarm; 138 bool mAlarm;
136 bool mReply; 139 bool mReply;
137 bool mInfo; 140 bool mInfo;
141 bool mDisplayHightlighted;
138 142
139 QPalette mPalette; 143 QPalette mPalette;
140 QDate mDate; 144 QDate mDate;
141 145
142 Incidence *mIncidence; 146 Incidence *mIncidence;
143}; 147};
144 148
145 149
146class KOMonthView; 150class KOMonthView;
147 151
148class MonthViewCell : public KNoScrollListBox 152class MonthViewCell : public KNoScrollListBox
149{ 153{
150 Q_OBJECT 154 Q_OBJECT
151 public: 155 public:
152 MonthViewCell(KOMonthView *,QWidget* ); 156 MonthViewCell(KOMonthView *,QWidget* );
153 ~MonthViewCell() {mAvailItemList.setAutoDelete( true );} 157 ~MonthViewCell() {mAvailItemList.setAutoDelete( true );}
154 158
155 void setDate( const QDate & ); 159 void setDate( const QDate & );
156 QDate date() const; 160 QDate date() const;
157 161
158 void setPrimary( bool ); 162 void setPrimary( bool );
159 bool isPrimary() const; 163 bool isPrimary() const;
160 164
161 void setHoliday( bool ); 165 void setHoliday( bool );
162 void setHoliday( const QString & ); 166 void setHoliday( const QString & );
163 167
164 void updateCell(); 168 void updateCell();
165 void startUpdateCell(); 169 void startUpdateCell();
166 void finishUpdateCell(); 170 void finishUpdateCell();
167 void repaintfinishUpdateCell(); 171 void repaintfinishUpdateCell();
168 int insertEvent(Event *); 172 int insertEvent(Event *);
169 void insertTodo(Todo *); 173 void insertTodo(Todo *);
170 174
171 void updateConfig( bool bigFont = false ); 175 void updateConfig( bool bigFont = false );
172 176
173 void enableScrollBars( bool ); 177 void enableScrollBars( bool );
174 178
175 Incidence *selectedIncidence(); 179 Incidence *selectedIncidence();
176 QDate selectedIncidenceDate(); 180 QDate selectedIncidenceDate();
177 QPushButton * dateLabel() { return mLabel; } 181 QPushButton * dateLabel() { return mLabel; }
178 182 void deHightLight();
183 bool doHightLight( Incidence *);
179 void deselect(); 184 void deselect();
180 void select(); 185 void select();
181#ifdef DESKTOP_VERSION 186#ifdef DESKTOP_VERSION
182 static QToolTipGroup *toolTipGroup(); 187 static QToolTipGroup *toolTipGroup();
183#endif 188#endif
184 signals: 189 signals:
185 void defaultAction( Incidence * ); 190 void defaultAction( Incidence * );
186 void newEventSignal( QDateTime ); 191 void newEventSignal( QDateTime );
187 void showDaySignal( QDate ); 192 void showDaySignal( QDate );
188 193
189 protected: 194 protected:
190 QStringList mToolTip; 195 QStringList mToolTip;
191 void resizeEvent( QResizeEvent * ); 196 void resizeEvent( QResizeEvent * );
192 197
193public slots: 198public slots:
194 void showDay(); 199 void showDay();
195
196 protected slots: 200 protected slots:
197 void defaultAction( QListBoxItem * ); 201 void defaultAction( QListBoxItem * );
198 void contextMenu( QListBoxItem * ); 202 void contextMenu( QListBoxItem * );
199 void selection( QListBoxItem * ); 203 void selection( QListBoxItem * );
200 void cellClicked( QListBoxItem * ); 204 void cellClicked( QListBoxItem * );
201 void newEvent(); 205 void newEvent();
202 206
203 private: 207 private:
204 int mdayCount; 208 int mdayCount;
205 QPtrList <MonthViewItem> mAvailItemList; 209 QPtrList <MonthViewItem> mAvailItemList;
206 KOMonthView *mMonthView; 210 KOMonthView *mMonthView;
207 int currentPalette; 211 int currentPalette;
208 212
209 QDate mDate; 213 QDate mDate;
210 bool mPrimary; 214 bool mPrimary;
211 bool mHoliday; 215 bool mHoliday;
212 QString mHolidayString; 216 QString mHolidayString;
213 217
214 //QLabel *mLabel; 218 //QLabel *mLabel;
215 QPushButton *mLabel; 219 QPushButton *mLabel;
216 //QListBox *mItemList; 220 //QListBox *mItemList;
217#ifdef DESKTOP_VERSION 221#ifdef DESKTOP_VERSION
218 static QToolTipGroup *mToolTipGroup; 222 static QToolTipGroup *mToolTipGroup;
219#endif 223#endif
220 QSize mLabelSize; 224 QSize mLabelSize;
221 QSize mLabelBigSize; 225 QSize mLabelBigSize;
222 QPalette mHolidayPalette; 226 QPalette mHolidayPalette;
223 QPalette mStandardPalette; 227 QPalette mStandardPalette;
224 QPalette mPrimaryPalette; 228 QPalette mPrimaryPalette;
225 QPalette mNonPrimaryPalette; 229 QPalette mNonPrimaryPalette;
226 void setMyPalette(); 230 void setMyPalette();
227 QPalette getPalette (); 231 QPalette getPalette ();
228 232
229}; 233};
230 234
231 235
232class KOMonthView: public KOEventView 236class KOMonthView: public KOEventView
233{ 237{
234 Q_OBJECT 238 Q_OBJECT
235 public: 239 public:
236 KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 ); 240 KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 );
237 ~KOMonthView(); 241 ~KOMonthView();
238 242
239 /** Returns maximum number of days supported by the komonthview */ 243 /** Returns maximum number of days supported by the komonthview */
240 virtual int maxDatesHint(); 244 virtual int maxDatesHint();
241 245
242 /** Returns number of currently shown dates. */ 246 /** Returns number of currently shown dates. */
243 virtual int currentDateCount(); 247 virtual int currentDateCount();
244 248
245 /** returns the currently selected events */ 249 /** returns the currently selected events */
246 virtual QPtrList<Incidence> selectedIncidences(); 250 virtual QPtrList<Incidence> selectedIncidences();
247 251
248 /** returns dates of the currently selected events */ 252 /** returns dates of the currently selected events */
249 virtual DateList selectedDates(); 253 virtual DateList selectedDates();
250 254
251 virtual void printPreview(CalPrinter *calPrinter, 255 virtual void printPreview(CalPrinter *calPrinter,
252 const QDate &, const QDate &); 256 const QDate &, const QDate &);
253 bool isMonthView() { return !mShowWeekView; } 257 bool isMonthView() { return !mShowWeekView; }
254 bool isUpdatePossible() { return updatePossible; } 258 bool isUpdatePossible() { return updatePossible; }
255 259
256 MonthViewCell * selectedCell(); 260 MonthViewCell * selectedCell();
257 bool skipResize; 261 bool skipResize;
258 NavigatorBar* navigatorBar() { return mNavigatorBar ;} 262 NavigatorBar* navigatorBar() { return mNavigatorBar ;}
259 void clearList(); 263 void clearList();
260 public slots: 264 public slots:
265 void incidenceHighlighted( Incidence *, MonthViewCell*, int );
261 void nextCell(); 266 void nextCell();
262 void prevCell(); 267 void prevCell();
263 virtual void updateView(); 268 virtual void updateView();
264 virtual void updateConfig(); 269 virtual void updateConfig();
265 virtual void showDates(const QDate &start, const QDate &end); 270 virtual void showDates(const QDate &start, const QDate &end);
266 virtual void showEvents(QPtrList<Event> eventList); 271 virtual void showEvents(QPtrList<Event> eventList);
267 272
268 void changeEventDisplay(Event *, int); 273 void changeEventDisplay(Event *, int);
269 274
270 void clearSelection(); 275 void clearSelection();
271 276
272 void showContextMenu( Incidence * ); 277 void showContextMenu( Incidence * );
273 278
274 void setSelectedCell( MonthViewCell * ); 279 void setSelectedCell( MonthViewCell * );
275 void setPopupCell( MonthViewCell * ); 280 void setPopupCell( MonthViewCell * );
276 void switchView(); 281 void switchView();
277 void setKeyBoardFocus(); 282 void setKeyBoardFocus();
278 void setKeyBFocus(); 283 void setKeyBFocus();
279 284
280 protected slots: 285 protected slots:
281 void slotNewTodo(); 286 void slotNewTodo();
282 void slotNewEvent(); 287 void slotNewEvent();
283 void slotEditJournal(); 288 void slotEditJournal();
284 void slotComputeLayout(); 289 void slotComputeLayout();
285 void selectInternalWeekNum ( int ); 290 void selectInternalWeekNum ( int );
286 void processSelectionChange(); 291 void processSelectionChange();
287 signals: 292 signals:
288 void nextMonth(); 293 void nextMonth();
289 void prevMonth(); 294 void prevMonth();
290 void selectWeekNum ( int ); 295 void selectWeekNum ( int );
291 void selectMonth (); 296 void selectMonth ();
292 void showDaySignal( QDate ); 297 void showDaySignal( QDate );
293 void newTodoSignal( QDateTime, bool ); 298 void newTodoSignal( QDateTime, bool );
294 void showJournalSignal( int,QDate ); 299 void showJournalSignal( int,QDate );
295 protected: 300 protected:
296 void resizeEvent(QResizeEvent *); 301 void resizeEvent(QResizeEvent *);
297 void viewChanged(); 302 void viewChanged();
298 void updateDayLabels(); 303 void updateDayLabels();
299 304
300 private: 305 private:
301 QTimer* mComputeLayoutTimer; 306 QTimer* mComputeLayoutTimer;
302 NavigatorBar* mNavigatorBar; 307 NavigatorBar* mNavigatorBar;
303 int currentWeek(); 308 int currentWeek();
304 bool clPending; 309 bool clPending;
305 QWidgetStack * mWidStack; 310 QWidgetStack * mWidStack;
306 QWidget* mMonthView; 311 QWidget* mMonthView;
307 QWidget* mWeekView; 312 QWidget* mWeekView;
308 bool mShowWeekView; 313 bool mShowWeekView;