summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/komonthview.cpp40
-rw-r--r--korganizer/komonthview.h11
2 files changed, 45 insertions, 6 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 08232e2..9344567 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -1,1062 +1,1092 @@
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#include <qpopupmenu.h> 20#include <qpopupmenu.h>
21#include <qfont.h> 21#include <qfont.h>
22#include <qfontmetrics.h> 22#include <qfontmetrics.h>
23#include <qkeycode.h> 23#include <qkeycode.h>
24#include <qhbox.h> 24#include <qhbox.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qpushbutton.h> 26#include <qpushbutton.h>
27#include <qtooltip.h> 27#include <qtooltip.h>
28#include <qpainter.h> 28#include <qpainter.h>
29#include <qwhatsthis.h> 29#include <qwhatsthis.h>
30#ifndef DESKTOP_VERSION 30#ifndef DESKTOP_VERSION
31#include <qpe/qpeapplication.h> 31#include <qpe/qpeapplication.h>
32#else 32#else
33#include <qapplication.h> 33#include <qapplication.h>
34#endif 34#endif
35 35
36#include <kdebug.h> 36#include <kdebug.h>
37#include <klocale.h> 37#include <klocale.h>
38#include <kglobal.h> 38#include <kglobal.h>
39#include <kconfig.h> 39#include <kconfig.h>
40#include <kiconloader.h> 40#include <kiconloader.h>
41 41
42#include <kcalendarsystem.h> 42#include <kcalendarsystem.h>
43 43
44#ifndef KORG_NOPRINTER 44#ifndef KORG_NOPRINTER
45#include "calprinter.h" 45#include "calprinter.h"
46#endif 46#endif
47#include "koprefs.h" 47#include "koprefs.h"
48#ifndef KORG_NOPLUGINS 48#ifndef KORG_NOPLUGINS
49#include "kocore.h" 49#include "kocore.h"
50#endif 50#endif
51#include "koglobals.h" 51#include "koglobals.h"
52#include <libkcal/kincidenceformatter.h> 52#include <libkcal/kincidenceformatter.h>
53 53
54#include "komonthview.h" 54#include "komonthview.h"
55 55
56#define PIXMAP_SIZE 5 56#define PIXMAP_SIZE 5
57 57#ifdef DESKTOP_VERSION
58 QToolTipGroup *MonthViewCell::mToolTipGroup = 0;
59#endif
58class KNOWhatsThis :public QWhatsThis 60class KNOWhatsThis :public QWhatsThis
59{ 61{
60public: 62public:
61 KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { }; 63 KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { };
62 64
63protected: 65protected:
64 virtual QString text( const QPoint& p) 66 virtual QString text( const QPoint& p)
65 { 67 {
66 return _wid->getWhatsThisText(p) ; 68 return _wid->getWhatsThisText(p) ;
67 }; 69 };
68private: 70private:
69 KNoScrollListBox* _wid; 71 KNoScrollListBox* _wid;
70 72
71}; 73};
72 74
73 75
74KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name) 76KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name)
75 : QListBox(parent, name) 77 : QListBox(parent, name)
76{ 78{
77#ifndef DESKTOP_VERSION 79#ifndef DESKTOP_VERSION
78 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 80 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
79#endif 81#endif
80 new KNOWhatsThis(this); 82 new KNOWhatsThis(this);
81} 83}
82 84
83QString KNoScrollListBox::getWhatsThisText(QPoint p) 85QString KNoScrollListBox::getWhatsThisText(QPoint p)
84{ 86{
85 QListBoxItem* item = itemAt ( p ); 87 QListBoxItem* item = itemAt ( p );
86 if ( ! item ) { 88 if ( ! item ) {
87 return i18n("Click in the cell or\non the date label\nto add an event!"); 89 return i18n("Click in the cell\nto add an event!");
88 } 90 }
89 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence()); 91 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence());
90} 92}
91void KNoScrollListBox::keyPressEvent(QKeyEvent *e) 93void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
92{ 94{
93 95
94 switch(e->key()) { 96 switch(e->key()) {
95 case Key_Right: 97 case Key_Right:
96 // if ( e->state() == Qt::ControlButton ) 98 // if ( e->state() == Qt::ControlButton )
97 { 99 {
98 e->ignore(); 100 e->ignore();
99 return; 101 return;
100 } 102 }
101 scrollBy(4,0); 103 scrollBy(4,0);
102 break; 104 break;
103 case Key_Left: 105 case Key_Left:
104 // if ( e->state() == Qt::ControlButton ) 106 // if ( e->state() == Qt::ControlButton )
105 { 107 {
106 e->ignore(); 108 e->ignore();
107 return; 109 return;
108 } 110 }
109 scrollBy(-4,0); 111 scrollBy(-4,0);
110 break; 112 break;
111 case Key_Up: 113 case Key_Up:
112 if(!count()) break; 114 if(!count()) break;
113 setCurrentItem((currentItem()+count()-1)%count()); 115 setCurrentItem((currentItem()+count()-1)%count());
114 if(!itemVisible(currentItem())) { 116 if(!itemVisible(currentItem())) {
115 if((unsigned int) currentItem() == (count()-1)) { 117 if((unsigned int) currentItem() == (count()-1)) {
116 setTopItem(currentItem()-numItemsVisible()+1); 118 setTopItem(currentItem()-numItemsVisible()+1);
117 } else { 119 } else {
118 setTopItem(topItem()-1); 120 setTopItem(topItem()-1);
119 } 121 }
120 } 122 }
121 break; 123 break;
122 case Key_Down: 124 case Key_Down:
123 if(!count()) break; 125 if(!count()) break;
124 setCurrentItem((currentItem()+1)%count()); 126 setCurrentItem((currentItem()+1)%count());
125 if(!itemVisible(currentItem())) { 127 if(!itemVisible(currentItem())) {
126 if(currentItem() == 0) { 128 if(currentItem() == 0) {
127 setTopItem(0); 129 setTopItem(0);
128 } else { 130 } else {
129 setTopItem(topItem()+1); 131 setTopItem(topItem()+1);
130 } 132 }
131 } 133 }
132 break; 134 break;
133 case Key_Shift: 135 case Key_Shift:
134 emit shiftDown(); 136 emit shiftDown();
135 break; 137 break;
136 default: 138 default:
137 e->ignore(); 139 e->ignore();
138 break; 140 break;
139 } 141 }
140} 142}
141 143
142void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) 144void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e)
143{ 145{
144 switch(e->key()) { 146 switch(e->key()) {
145 case Key_Shift: 147 case Key_Shift:
146 emit shiftUp(); 148 emit shiftUp();
147 break; 149 break;
148 default: 150 default:
149 break; 151 break;
150 } 152 }
151} 153}
152 154
153void KNoScrollListBox::mousePressEvent(QMouseEvent *e) 155void KNoScrollListBox::mousePressEvent(QMouseEvent *e)
154{ 156{
155 QListBox::mousePressEvent(e); 157 QListBox::mousePressEvent(e);
156 158
157 if(e->button() == RightButton) { 159 if(e->button() == RightButton) {
158 emit rightClick(); 160 emit rightClick();
159 } 161 }
160} 162}
161 163
162MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) 164MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s)
163 : QListBoxItem() 165 : QListBoxItem()
164{ 166{
165 setText( s ); 167 setText( s );
166 168
167 mIncidence = incidence; 169 mIncidence = incidence;
168 mDate = qd; 170 mDate = qd;
169 // QWhatsThis::add(this,KIncidenceFormatter::instance()->getFormattedText( mIncidence )); 171 // QWhatsThis::add(this,KIncidenceFormatter::instance()->getFormattedText( mIncidence ));
170 mRecur = false; 172 mRecur = false;
171 mAlarm = false; 173 mAlarm = false;
172 mReply = false; 174 mReply = false;
173 mInfo = false; 175 mInfo = false;
174} 176}
175 177
176void MonthViewItem::paint(QPainter *p) 178void MonthViewItem::paint(QPainter *p)
177{ 179{
178#if QT_VERSION >= 0x030000 180#if QT_VERSION >= 0x030000
179 bool sel = isSelected(); 181 bool sel = isSelected();
180#else 182#else
181 bool sel = selected(); 183 bool sel = selected();
182#endif 184#endif
183 185
184 186
185 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) 187 if (KOPrefs::instance()->mMonthViewUsesCategoryColor)
186 { 188 {
187 p->setBackgroundColor( palette().color( QPalette::Normal, \ 189 p->setBackgroundColor( palette().color( QPalette::Normal, \
188 sel ? QColorGroup::Highlight : QColorGroup::Background ) ); 190 sel ? QColorGroup::Highlight : QColorGroup::Background ) );
189 p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); 191 p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) );
190 } 192 }
191 int x = 1; 193 int x = 1;
192 int y = 3;//(height() - mRecurPixmap.height()) /2; 194 int y = 3;//(height() - mRecurPixmap.height()) /2;
193 int size = PIXMAP_SIZE; 195 int size = PIXMAP_SIZE;
194 if ( QApplication::desktop()->width() < 300 ) 196 if ( QApplication::desktop()->width() < 300 )
195 size = 3; 197 size = 3;
196 if ( KOPrefs::instance()->mMonthShowIcons ) { 198 if ( KOPrefs::instance()->mMonthShowIcons ) {
197 if ( mInfo ) { 199 if ( mInfo ) {
198 p->fillRect ( x, y,size,size, Qt::darkGreen ); 200 p->fillRect ( x, y,size,size, Qt::darkGreen );
199 x += size + 1; 201 x += size + 1;
200 } 202 }
201 if ( mRecur ) { 203 if ( mRecur ) {
202 p->fillRect ( x, y,size,size, Qt::blue ); 204 p->fillRect ( x, y,size,size, Qt::blue );
203 x += size + 1; 205 x += size + 1;
204 } 206 }
205 if ( mAlarm ) { 207 if ( mAlarm ) {
206 p->fillRect ( x, y,size,size, Qt::red ); 208 p->fillRect ( x, y,size,size, Qt::red );
207 x += size + 1; 209 x += size + 1;
208 } 210 }
209 if ( mReply ) { 211 if ( mReply ) {
210 p->fillRect ( x, y,size,size, Qt::yellow ); 212 p->fillRect ( x, y,size,size, Qt::yellow );
211 x += size + 1; 213 x += size + 1;
212 } 214 }
213 } 215 }
214 QFontMetrics fm = p->fontMetrics(); 216 QFontMetrics fm = p->fontMetrics();
215 int yPos; 217 int yPos;
216 int pmheight = size; 218 int pmheight = size;
217 if( pmheight < fm.height() ) 219 if( pmheight < fm.height() )
218 yPos = fm.ascent() + fm.leading()/2; 220 yPos = fm.ascent() + fm.leading()/2;
219 else 221 else
220 yPos = pmheight/2 - fm.height()/2 + fm.ascent(); 222 yPos = pmheight/2 - fm.height()/2 + fm.ascent();
221 p->setPen( palette().color( QPalette::Normal, sel ? \ 223 p->setPen( palette().color( QPalette::Normal, sel ? \
222 QColorGroup::HighlightedText : QColorGroup::Foreground ) ); 224 QColorGroup::HighlightedText : QColorGroup::Foreground ) );
223 p->drawText( x, yPos, text() ); 225 p->drawText( x, yPos, text() );
224 if ( mIncidence->cancelled() ) { 226 if ( mIncidence->cancelled() ) {
225 int wid = fm.width( text() ); 227 int wid = fm.width( text() );
226 p->drawLine( x, yPos- fm.height()/2+2,x+wid, yPos- fm.height()/2 +2); 228 p->drawLine( x, yPos- fm.height()/2+2,x+wid, yPos- fm.height()/2 +2);
227 } 229 }
228 230
229} 231}
230 232
231int MonthViewItem::height(const QListBox *lb) const 233int MonthViewItem::height(const QListBox *lb) const
232{ 234{
233 return lb->fontMetrics().lineSpacing()+1; 235 return lb->fontMetrics().lineSpacing()+1;
234} 236}
235 237
236int MonthViewItem::width(const QListBox *lb) const 238int MonthViewItem::width(const QListBox *lb) const
237{ 239{
238 int size = PIXMAP_SIZE; 240 int size = PIXMAP_SIZE;
239 if ( QApplication::desktop()->width() < 300 ) 241 if ( QApplication::desktop()->width() < 300 )
240 size = 3; 242 size = 3;
241 int x = 1; 243 int x = 1;
242 if ( mInfo ) { 244 if ( mInfo ) {
243 x += size + 1; 245 x += size + 1;
244 } 246 }
245 if( mRecur ) { 247 if( mRecur ) {
246 x += size+1; 248 x += size+1;
247 } 249 }
248 if( mAlarm ) { 250 if( mAlarm ) {
249 x += size+1; 251 x += size+1;
250 } 252 }
251 if( mReply ) { 253 if( mReply ) {
252 x += size+1; 254 x += size+1;
253 } 255 }
254 256
255 return( x + lb->fontMetrics().width( text() ) + 1 ); 257 return( x + lb->fontMetrics().width( text() ) + 1 );
256} 258}
257 259
258 260
259MonthViewCell::MonthViewCell( KOMonthView *parent) 261MonthViewCell::MonthViewCell( KOMonthView *parent)
260 : QWidget( parent ), 262 : QWidget( parent ),
261 mMonthView( parent ) 263 mMonthView( parent )
262{ 264{
263 265
264 QVBoxLayout *topLayout = new QVBoxLayout( this ); 266 QVBoxLayout *topLayout = new QVBoxLayout( this );
265 267
266 // mLabel = new QLabel( this );QPushButton 268 // mLabel = new QLabel( this );QPushButton
267 mLabel = new QPushButton( this ); 269 mLabel = new QPushButton( this );
268 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); 270 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain );
269 //mLabel->setLineWidth( 1 ); 271 //mLabel->setLineWidth( 1 );
270 //mLabel->setAlignment( AlignCenter ); 272 //mLabel->setAlignment( AlignCenter );
271 mLabel->setFlat( true ); 273 mLabel->setFlat( true );
272 mItemList = new KNoScrollListBox( this ); 274 mItemList = new KNoScrollListBox( this );
273 mItemList->setMinimumSize( 10, 10 ); 275 mItemList->setMinimumSize( 10, 10 );
274 mItemList->setFrameStyle( QFrame::Panel | QFrame::Plain ); 276 mItemList->setFrameStyle( QFrame::Panel | QFrame::Plain );
275 mItemList->setLineWidth( 1 ); 277 mItemList->setLineWidth( 1 );
276 topLayout->addWidget( mItemList ); 278 topLayout->addWidget( mItemList );
277 mLabel->raise(); 279 mLabel->raise();
278 // QColor( 0,0,255 ) QColor( 160,1600,255 ) 280 // QColor( 0,0,255 ) QColor( 160,1600,255 )
279 mStandardPalette = palette(); 281 mStandardPalette = palette();
280 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); 282 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) );
281 283
282 enableScrollBars( false ); 284 enableScrollBars( false );
283 updateConfig(); 285 updateConfig();
284 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); 286 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
285 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); 287 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
286 connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ), 288 connect( mItemList, SIGNAL( doubleClicked( QListBoxItem *) ),
287 SLOT( defaultAction( QListBoxItem * ) ) ); 289 SLOT( defaultAction( QListBoxItem * ) ) );
288 connect( mItemList, SIGNAL( rightButtonPressed( QListBoxItem *, 290 connect( mItemList, SIGNAL( rightButtonPressed( QListBoxItem *,
289 const QPoint &) ), 291 const QPoint &) ),
290 SLOT( contextMenu( QListBoxItem * ) ) ); 292 SLOT( contextMenu( QListBoxItem * ) ) );
291 connect( mItemList, SIGNAL( highlighted( QListBoxItem *) ), 293 connect( mItemList, SIGNAL( highlighted( QListBoxItem *) ),
292 SLOT( selection( QListBoxItem * ) ) ); 294 SLOT( selection( QListBoxItem * ) ) );
293 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ), 295 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ),
294 SLOT( cellClicked( QListBoxItem * ) ) ); 296 SLOT( cellClicked( QListBoxItem * ) ) );
295 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ), 297 connect( mItemList, SIGNAL( clicked( QListBoxItem * ) ),
296 SLOT( selection( QListBoxItem * ) ) ); 298 SLOT( selection( QListBoxItem * ) ) );
297} 299}
298 300#ifdef DESKTOP_VERSION
301QToolTipGroup *MonthViewCell::toolTipGroup()
302{
303 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0);
304 return mToolTipGroup;
305}
306#endif
307
299void MonthViewCell::setDate( const QDate &date ) 308void MonthViewCell::setDate( const QDate &date )
300{ 309{
301// kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; 310// kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl;
302 311
303 mDate = date; 312 mDate = date;
304 313
305 QString text; 314 QString text;
306 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; 315 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog;
307 if ( KOGlobals::self()->calendarSystem()->day( date ) == 1 || (date.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { 316 if ( KOGlobals::self()->calendarSystem()->day( date ) == 1 || (date.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) {
308 text = KOGlobals::self()->calendarSystem()->monthName( date, true ) + " "; 317 text = KOGlobals::self()->calendarSystem()->monthName( date, true ) + " ";
309 mLabel->resize( mLabelBigSize ); 318 mLabel->resize( mLabelBigSize );
310 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 319 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
311 } else { 320 } else {
312 mLabel->resize( mLabelSize ); 321 mLabel->resize( mLabelSize );
313 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 322 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
314 } 323 }
315 mLabel->setText( text ); 324 mLabel->setText( text );
316 325
317 //resizeEvent( 0 ); 326 //resizeEvent( 0 );
318} 327}
319 328
320QDate MonthViewCell::date() const 329QDate MonthViewCell::date() const
321{ 330{
322 return mDate; 331 return mDate;
323} 332}
324 333
325void MonthViewCell::setPrimary( bool primary ) 334void MonthViewCell::setPrimary( bool primary )
326{ 335{
327 mPrimary = primary; 336 mPrimary = primary;
328 //setMyPalette(); 337 //setMyPalette();
329} 338}
330void MonthViewCell::setMyPalette() 339void MonthViewCell::setMyPalette()
331{ 340{
332 341
333 if ( mHoliday) { 342 if ( mHoliday) {
334 setPalette( mHolidayPalette ); 343 setPalette( mHolidayPalette );
335 } else { 344 } else {
336 if ( mPrimary ) { 345 if ( mPrimary ) {
337 setPalette( mPrimaryPalette ); 346 setPalette( mPrimaryPalette );
338 } else { 347 } else {
339 setPalette( mNonPrimaryPalette ); 348 setPalette( mNonPrimaryPalette );
340 } 349 }
341 } 350 }
342 QPalette pal = palette(); 351 QPalette pal = palette();
343 352
344 mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); 353 mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) ));
345} 354}
346QPalette MonthViewCell::getPalette () 355QPalette MonthViewCell::getPalette ()
347{ 356{
348 if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) 357 if ( !KOPrefs::instance()->mMonthViewUsesDayColors )
349 return mStandardPalette; 358 return mStandardPalette;
350 if ( mHoliday) { 359 if ( mHoliday) {
351 return mHolidayPalette ; 360 return mHolidayPalette ;
352 } else { 361 } else {
353 if ( mPrimary ) { 362 if ( mPrimary ) {
354 return mPrimaryPalette ; 363 return mPrimaryPalette ;
355 } 364 }
356 } 365 }
357 return mNonPrimaryPalette; 366 return mNonPrimaryPalette;
358} 367}
359bool MonthViewCell::isPrimary() const 368bool MonthViewCell::isPrimary() const
360{ 369{
361 return mPrimary; 370 return mPrimary;
362} 371}
363 372
364void MonthViewCell::setHoliday( bool holiday ) 373void MonthViewCell::setHoliday( bool holiday )
365{ 374{
366 mHoliday = holiday; 375 mHoliday = holiday;
367 //setMyPalette(); 376 //setMyPalette();
368} 377}
369 378
370void MonthViewCell::setHoliday( const QString &holiday ) 379void MonthViewCell::setHoliday( const QString &holiday )
371{ 380{
372 mHolidayString = holiday; 381 mHolidayString = holiday;
373 382
374 if ( !holiday.isEmpty() ) { 383 if ( !holiday.isEmpty() ) {
375 setHoliday( true ); 384 setHoliday( true );
376 } 385 }
377} 386}
378void MonthViewCell::keyPressEvent ( QKeyEvent * e ) 387void MonthViewCell::keyPressEvent ( QKeyEvent * e )
379{ 388{
380 389
381 e->ignore(); 390 e->ignore();
382 391
383} 392}
384void MonthViewCell::updateCell() 393void MonthViewCell::updateCell()
385{ 394{
386 395
387 setPrimary( mDate.month()%2 ); 396 setPrimary( mDate.month()%2 );
388 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); 397 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays);
389 if ( mDate == QDate::currentDate() ) { 398 if ( mDate == QDate::currentDate() ) {
390 mItemList->setLineWidth( 3 ); 399 mItemList->setLineWidth( 3 );
391 } else { 400 } else {
392 mItemList->setLineWidth( 1 ); 401 mItemList->setLineWidth( 1 );
393 } 402 }
394 mItemList->clear(); 403 mItemList->clear();
404#ifdef DESKTOP_VERSION
405 QToolTip::remove(this);
406#endif
407 QString tipText("");
395 //qApp->processEvents(); 408 //qApp->processEvents();
396 if ( !mHolidayString.isEmpty() ) { 409 if ( !mHolidayString.isEmpty() ) {
397 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); 410 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
398 item->setPalette( mHolidayPalette ); 411 item->setPalette( mHolidayPalette );
399 mItemList->insertItem( item ); 412 mItemList->insertItem( item );
413 tipText += mHolidayString+"\n";
400 } 414 }
401 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 415 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
402 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true ); 416 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
403 Event *event; 417 Event *event;
404 for( event = events.first(); event; event = events.next() ) { 418 for( event = events.first(); event; event = events.next() ) {
405 if ( event->categories().contains("Holiday") || 419 if ( event->categories().contains("Holiday") ||
406 event->categories().contains(i18n("Holiday"))) { 420 event->categories().contains(i18n("Holiday"))) {
407 setHoliday( true ); 421 setHoliday( true );
408 if ( mDate.dayOfWeek() == 7 ) 422 if ( mDate.dayOfWeek() == 7 )
409 mItemList->setLineWidth( 3 ); 423 mItemList->setLineWidth( 3 );
410 } 424 }
411 QString text; 425 QString text;
412 if (event->isMultiDay()) { 426 if (event->isMultiDay()) {
413 QString prefix = "<->"; 427 QString prefix = "<->";
414 if ( event->doesRecur() ) { 428 if ( event->doesRecur() ) {
415 if ( event->recursOn( mDate) ) 429 if ( event->recursOn( mDate) )
416 prefix ="->" ; 430 prefix ="->" ;
417 else { 431 else {
418 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 432 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
419 if ( event->recursOn( mDate.addDays( -days)) ) 433 if ( event->recursOn( mDate.addDays( -days)) )
420 prefix ="<-" ; 434 prefix ="<-" ;
421 } 435 }
422 436
423 } else { 437 } else {
424 if (mDate == event->dtStart().date()) { 438 if (mDate == event->dtStart().date()) {
425 prefix ="->" ; 439 prefix ="->" ;
426 } else if (mDate == event->dtEnd().date()) { 440 } else if (mDate == event->dtEnd().date()) {
427 prefix ="<-" ; 441 prefix ="<-" ;
428 } 442 }
429 } 443 }
430 text = prefix + event->summary(); 444 text = prefix + event->summary();
445 tipText += text;
431 } else { 446 } else {
432 if (event->doesFloat()) 447 if (event->doesFloat()) {
433 text = event->summary(); 448 text = event->summary();
449 tipText += text;
450 }
434 else { 451 else {
435 text = KGlobal::locale()->formatTime(event->dtStart().time()); 452 text = KGlobal::locale()->formatTime(event->dtStart().time());
436 text += " " + event->summary(); 453 text += " " + event->summary();
454 tipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
437 } 455 }
438 } 456 }
439 457
440 MonthViewItem *item = new MonthViewItem( event, mDate, text ); 458 MonthViewItem *item = new MonthViewItem( event, mDate, text );
441 QPalette pal; 459 QPalette pal;
442 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 460 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
443 QStringList categories = event->categories(); 461 QStringList categories = event->categories();
444 QString cat = categories.first(); 462 QString cat = categories.first();
445 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 463 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
446 pal = getPalette(); 464 pal = getPalette();
447 if (cat.isEmpty()) { 465 if (cat.isEmpty()) {
448 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 466 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
449 } else { 467 } else {
450 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 468 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
451 } 469 }
452 470
453 } else { 471 } else {
454 if (cat.isEmpty()) { 472 if (cat.isEmpty()) {
455 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 473 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
456 } else { 474 } else {
457 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 475 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
458 } 476 }
459 } 477 }
460 478
461 } else { 479 } else {
462 pal = mStandardPalette ; 480 pal = mStandardPalette ;
463 } 481 }
464 item->setPalette( pal ); 482 item->setPalette( pal );
465 item->setRecur( event->recurrence()->doesRecur() ); 483 item->setRecur( event->recurrence()->doesRecur() );
466 item->setAlarm( event->isAlarmEnabled() ); 484 item->setAlarm( event->isAlarmEnabled() );
467 item->setMoreInfo( event->description().length() > 0 ); 485 item->setMoreInfo( event->description().length() > 0 );
468 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, 486 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails,
469 KOPrefs::instance()->email()); 487 KOPrefs::instance()->email());
470 if ( me != 0 ) { 488 if ( me != 0 ) {
471 if ( me->status() == Attendee::NeedsAction && me->RSVP()) 489 if ( me->status() == Attendee::NeedsAction && me->RSVP())
472 item->setReply(true); 490 item->setReply(true);
473 else 491 else
474 item->setReply(false); 492 item->setReply(false);
475 } else 493 } else
476 item->setReply(false); 494 item->setReply(false);
477 bool insert = true; 495 bool insert = true;
478 if ( !(event->doesRecur() == Recurrence::rNone) ) { 496 if ( !(event->doesRecur() == Recurrence::rNone) ) {
479 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) 497 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
480 insert = false; 498 insert = false;
481 else 499 else
482 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) 500 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
483 insert = false; 501 insert = false;
484 502
485 } 503 }
486 if ( insert ) 504 if ( insert ) {
487 mItemList->insertItem( item ); 505 mItemList->insertItem( item );
506 tipText += "\n";
507 } else
508 tipText = "";
488 } 509 }
489 510
490 // insert due todos 511 // insert due todos
491 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate ); 512 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
492 Todo *todo; 513 Todo *todo;
493 for(todo = todos.first(); todo; todo = todos.next()) { 514 for(todo = todos.first(); todo; todo = todos.next()) {
494 QString text; 515 QString text;
495 if (todo->hasDueDate()) { 516 if (todo->hasDueDate()) {
496 if (!todo->doesFloat()) { 517 if (!todo->doesFloat()) {
497 text += KGlobal::locale()->formatTime(todo->dtDue().time()); 518 text += KGlobal::locale()->formatTime(todo->dtDue().time());
498 text += " "; 519 text += " ";
499 } 520 }
500 } 521 }
501 text += i18n("To-Do: %1").arg(todo->summary()); 522 text += i18n("To-Do: %1").arg(todo->summary());
502 523
503 MonthViewItem *item = new MonthViewItem( todo, mDate, text ); 524 MonthViewItem *item = new MonthViewItem( todo, mDate, text );
504 //item->setPalette( mStandardPalette ); 525 //item->setPalette( mStandardPalette );
505 QPalette pal; 526 QPalette pal;
506 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 527 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
507 QStringList categories = todo->categories(); 528 QStringList categories = todo->categories();
508 QString cat = categories.first(); 529 QString cat = categories.first();
509 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 530 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
510 pal = getPalette(); 531 pal = getPalette();
511 if (cat.isEmpty()) { 532 if (cat.isEmpty()) {
512 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 533 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
513 } else { 534 } else {
514 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 535 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
515 } 536 }
516 537
517 } else { 538 } else {
518 if (cat.isEmpty()) { 539 if (cat.isEmpty()) {
519 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 540 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
520 } else { 541 } else {
521 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 542 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
522 } 543 }
523 } 544 }
524 545
525 } else { 546 } else {
526 pal = mStandardPalette ; 547 pal = mStandardPalette ;
527 } 548 }
528 item->setPalette( pal ); 549 item->setPalette( pal );
529 mItemList->insertItem( item ); 550 mItemList->insertItem( item );
551 tipText += text+"\n";
530 } 552 }
553#ifdef DESKTOP_VERSION
554 if (tipText != "")
555 QToolTip::add(this,tipText,toolTipGroup(),"");
556#endif
557
531 //setMyPalette(); 558 //setMyPalette();
532 setMyPalette(); 559 setMyPalette();
533 resizeEvent( 0 ); 560 resizeEvent( 0 );
534 // if ( isVisible()) 561 // if ( isVisible())
535 // qApp->processEvents(); 562 // qApp->processEvents();
536} 563}
537 564
538void MonthViewCell::updateConfig() 565void MonthViewCell::updateConfig()
539{ 566{
540 567
541 setFont( KOPrefs::instance()->mMonthViewFont ); 568 setFont( KOPrefs::instance()->mMonthViewFont );
542 569
543 QFontMetrics fm( font() ); 570 QFontMetrics fm( font() );
544 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); 571 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 );
545 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); 572 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 );
546 mHolidayPalette = mStandardPalette; 573 mHolidayPalette = mStandardPalette;
547 mPrimaryPalette = mStandardPalette; 574 mPrimaryPalette = mStandardPalette;
548 mNonPrimaryPalette = mStandardPalette; 575 mNonPrimaryPalette = mStandardPalette;
549 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { 576 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) {
550 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); 577 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor );
551 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); 578 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor );
552 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); 579 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark());
553 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); 580 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark());
554 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); 581 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor);
555 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); 582 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor);
556 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); 583 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark());
557 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); 584 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor);
558 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); 585 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor);
559 } 586 }
560 updateCell(); 587 updateCell();
561} 588}
562 589
563void MonthViewCell::enableScrollBars( bool enabled ) 590void MonthViewCell::enableScrollBars( bool enabled )
564{ 591{
565 if ( enabled ) { 592 if ( enabled ) {
566 mItemList->setVScrollBarMode(QScrollView::Auto); 593 mItemList->setVScrollBarMode(QScrollView::Auto);
567 mItemList->setHScrollBarMode(QScrollView::Auto); 594 mItemList->setHScrollBarMode(QScrollView::Auto);
568 } else { 595 } else {
569 mItemList->setVScrollBarMode(QScrollView::AlwaysOff); 596 mItemList->setVScrollBarMode(QScrollView::AlwaysOff);
570 mItemList->setHScrollBarMode(QScrollView::AlwaysOff); 597 mItemList->setHScrollBarMode(QScrollView::AlwaysOff);
571 } 598 }
572} 599}
573 600
574Incidence *MonthViewCell::selectedIncidence() 601Incidence *MonthViewCell::selectedIncidence()
575{ 602{
576 int index = mItemList->currentItem(); 603 int index = mItemList->currentItem();
577 if ( index < 0 ) return 0; 604 if ( index < 0 ) return 0;
578 605
579 MonthViewItem *item = 606 MonthViewItem *item =
580 static_cast<MonthViewItem *>( mItemList->item( index ) ); 607 static_cast<MonthViewItem *>( mItemList->item( index ) );
581 608
582 if ( !item ) return 0; 609 if ( !item ) return 0;
583 610
584 return item->incidence(); 611 return item->incidence();
585} 612}
586 613
587QDate MonthViewCell::selectedIncidenceDate() 614QDate MonthViewCell::selectedIncidenceDate()
588{ 615{
589 QDate qd; 616 QDate qd;
590 int index = mItemList->currentItem(); 617 int index = mItemList->currentItem();
591 if ( index < 0 ) return qd; 618 if ( index < 0 ) return qd;
592 619
593 MonthViewItem *item = 620 MonthViewItem *item =
594 static_cast<MonthViewItem *>( mItemList->item( index ) ); 621 static_cast<MonthViewItem *>( mItemList->item( index ) );
595 622
596 if ( !item ) return qd; 623 if ( !item ) return qd;
597 624
598 return item->incidenceDate(); 625 return item->incidenceDate();
599} 626}
600 627
601void MonthViewCell::deselect() 628void MonthViewCell::deselect()
602{ 629{
603 mItemList->clearSelection(); 630 mItemList->clearSelection();
604 enableScrollBars( false ); 631 enableScrollBars( false );
605 // updateCell(); 632 // updateCell();
606} 633}
607void MonthViewCell::select() 634void MonthViewCell::select()
608{ 635{
609 ;// updateCell(); 636 ;// updateCell();
610} 637}
611 638
612void MonthViewCell::resizeEvent ( QResizeEvent * ) 639void MonthViewCell::resizeEvent ( QResizeEvent * )
613{ 640{
614 int size = height() - mLabel->height(); 641 int size = height() - mLabel->height();
615 if ( size > 0 ) 642 if ( size > 0 )
616 mItemList->verticalScrollBar()->setMaximumHeight( size ); 643 mItemList->verticalScrollBar()->setMaximumHeight( size );
617 size = width() - mLabel->width(); 644 size = width() - mLabel->width();
618 if ( size > 0 ) 645 if ( size > 0 )
619 mItemList->horizontalScrollBar()->setMaximumWidth( size ); 646 mItemList->horizontalScrollBar()->setMaximumWidth( size );
620 mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() ); 647 mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() );
621 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 648 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
622} 649}
623 650
624void MonthViewCell::defaultAction( QListBoxItem *item ) 651void MonthViewCell::defaultAction( QListBoxItem *item )
625{ 652{
626 if ( !item ) return; 653 if ( !item ) return;
627 654
628 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 655 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
629 Incidence *incidence = eventItem->incidence(); 656 Incidence *incidence = eventItem->incidence();
630 if ( incidence ) mMonthView->defaultAction( incidence ); 657 if ( incidence ) mMonthView->defaultAction( incidence );
631} 658}
632void MonthViewCell::showDay() 659void MonthViewCell::showDay()
633{ 660{
634 emit showDaySignal( date() ); 661 emit showDaySignal( date() );
635} 662}
636void MonthViewCell::newEvent() 663void MonthViewCell::newEvent()
637{ 664{
638 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 665 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
639 emit newEventSignal( dt ); 666 emit newEventSignal( dt );
640} 667}
641void MonthViewCell::cellClicked( QListBoxItem *item ) 668void MonthViewCell::cellClicked( QListBoxItem *item )
642{ 669{
643 static QListBoxItem * lastClicked = 0; 670 static QListBoxItem * lastClicked = 0;
644 if ( item == 0 ) { 671 if ( item == 0 ) {
645 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 672 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
646 emit newEventSignal( dt ); 673 emit newEventSignal( dt );
647 return; 674 return;
648 } 675 }
649 /* 676 /*
650 if ( lastClicked ) 677 if ( lastClicked )
651 if ( ! item ) { 678 if ( ! item ) {
652 if ( lastClicked->listBox() != item->listBox() ) 679 if ( lastClicked->listBox() != item->listBox() )
653 lastClicked->listBox()->clearSelection(); 680 lastClicked->listBox()->clearSelection();
654 } 681 }
655 */ 682 */
656 683
657 mMonthView->setSelectedCell( this ); 684 mMonthView->setSelectedCell( this );
658 if( KOPrefs::instance()->mEnableMonthScroll ) enableScrollBars( true ); 685 if( KOPrefs::instance()->mEnableMonthScroll ) enableScrollBars( true );
659 select(); 686 select();
660} 687}
661 688
662void MonthViewCell::contextMenu( QListBoxItem *item ) 689void MonthViewCell::contextMenu( QListBoxItem *item )
663{ 690{
664 if ( !item ) return; 691 if ( !item ) return;
665 692
666 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 693 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
667 Incidence *incidence = eventItem->incidence(); 694 Incidence *incidence = eventItem->incidence();
668 if ( incidence ) mMonthView->showContextMenu( incidence ); 695 if ( incidence ) mMonthView->showContextMenu( incidence );
669} 696}
670 697
671void MonthViewCell::selection( QListBoxItem *item ) 698void MonthViewCell::selection( QListBoxItem *item )
672{ 699{
673 if ( !item ) return; 700 if ( !item ) return;
674 701
675 mMonthView->setSelectedCell( this ); 702 mMonthView->setSelectedCell( this );
676} 703}
677 704
678 705
679// ******************************************************************************* 706// *******************************************************************************
680// ******************************************************************************* 707// *******************************************************************************
681// ******************************************************************************* 708// *******************************************************************************
682 709
683 710
684KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) 711KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
685 : KOEventView( calendar, parent, name ), 712 : KOEventView( calendar, parent, name ),
686 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), 713 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
687 mShortDayLabels( false ), mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) 714 mShortDayLabels( false ), mWidthLongDayLabel( 0 ), mSelectedCell( 0 )
688{ 715{
689 mCells.setAutoDelete( true ); 716 mCells.setAutoDelete( true );
690 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 717 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
691 // mDayLayout = new QGridLayout( this ); 718 // mDayLayout = new QGridLayout( this );
692 // create the day of the week labels (Sun, Mon, etc) and add them to 719 // create the day of the week labels (Sun, Mon, etc) and add them to
693 // the layout. 720 // the layout.
694 mDayLabels.resize( mDaysPerWeek ); 721 mDayLabels.resize( mDaysPerWeek );
695 QFont bfont = font(); 722 QFont bfont = font();
696 if ( QApplication::desktop()->width() < 650 ) { 723 if ( QApplication::desktop()->width() < 650 ) {
697 bfont.setPointSize( bfont.pointSize() - 2 ); 724 bfont.setPointSize( bfont.pointSize() - 2 );
698 } 725 }
699 bfont.setBold( true ); 726 bfont.setBold( true );
700 int i; 727 int i;
701 728
702 for( i = 0; i < mDaysPerWeek; i++ ) { 729 for( i = 0; i < mDaysPerWeek; i++ ) {
703 QLabel *label = new QLabel( this ); 730 QLabel *label = new QLabel( this );
704 label->setFont(bfont); 731 label->setFont(bfont);
705 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 732 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
706 label->setLineWidth(1); 733 label->setLineWidth(1);
707 label->setAlignment(AlignCenter); 734 label->setAlignment(AlignCenter);
708 mDayLabels.insert( i, label ); 735 mDayLabels.insert( i, label );
709 } 736 }
710 737
711 bfont.setBold( false ); 738 bfont.setBold( false );
712 mWeekLabels.resize( mNumWeeks+1 ); 739 mWeekLabels.resize( mNumWeeks+1 );
713 for( i = 0; i < mNumWeeks+1; i++ ) { 740 for( i = 0; i < mNumWeeks+1; i++ ) {
714 KOWeekButton *label = new KOWeekButton( this ); 741 KOWeekButton *label = new KOWeekButton( this );
715 label->setFont(bfont); 742 label->setFont(bfont);
716 connect( label, SIGNAL( selectWeekNum ( int )),this, SIGNAL( selectWeekNum ( int )) ); 743 connect( label, SIGNAL( selectWeekNum ( int )),this, SIGNAL( selectWeekNum ( int )) );
717 label->setFlat(true); 744 label->setFlat(true);
718 QWhatsThis::add(label,i18n("Click on the week number to\nshow week in agenda view")); 745 QWhatsThis::add(label,i18n("Click on the week number to\nshow week in agenda view"));
719 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 746 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
720 //label->setLineWidth(1); 747 //label->setLineWidth(1);
721 //label->setAlignment(AlignCenter); 748 //label->setAlignment(AlignCenter);
722 mWeekLabels.insert( i, label ); 749 mWeekLabels.insert( i, label );
723 } 750 }
724 mWeekLabels[mNumWeeks]->setText( i18n("W")); 751 mWeekLabels[mNumWeeks]->setText( i18n("W"));
725 int row, col; 752 int row, col;
726 mCells.resize( mNumCells ); 753 mCells.resize( mNumCells );
727 for( row = 0; row < mNumWeeks; ++row ) { 754 for( row = 0; row < mNumWeeks; ++row ) {
728 for( col = 0; col < mDaysPerWeek; ++col ) { 755 for( col = 0; col < mDaysPerWeek; ++col ) {
729 MonthViewCell *cell = new MonthViewCell( this ); 756 MonthViewCell *cell = new MonthViewCell( this );
730 mCells.insert( row * mDaysPerWeek + col, cell ); 757 mCells.insert( row * mDaysPerWeek + col, cell );
731 758
732 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 759 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
733 SLOT( defaultAction( Incidence * ) ) ); 760 SLOT( defaultAction( Incidence * ) ) );
734 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 761 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
735 SIGNAL( newEventSignal( QDateTime ) ) ); 762 SIGNAL( newEventSignal( QDateTime ) ) );
736 connect( cell, SIGNAL( showDaySignal( QDate ) ), 763 connect( cell, SIGNAL( showDaySignal( QDate ) ),
737 SIGNAL( showDaySignal( QDate ) ) ); 764 SIGNAL( showDaySignal( QDate ) ) );
738 } 765 }
739 } 766 }
740 767
741 mContextMenu = eventPopup(); 768 mContextMenu = eventPopup();
742 // updateConfig(); //useless here 769 // updateConfig(); //useless here
743 770
744 emit incidenceSelected( 0 ); 771 emit incidenceSelected( 0 );
745} 772}
746 773
747KOMonthView::~KOMonthView() 774KOMonthView::~KOMonthView()
748{ 775{
749 delete mContextMenu; 776 delete mContextMenu;
750} 777}
751 778
752int KOMonthView::maxDatesHint() 779int KOMonthView::maxDatesHint()
753{ 780{
754 return mNumCells; 781 return mNumCells;
755} 782}
756 783
757int KOMonthView::currentDateCount() 784int KOMonthView::currentDateCount()
758{ 785{
759 return mNumCells; 786 return mNumCells;
760} 787}
761 788
762QPtrList<Incidence> KOMonthView::selectedIncidences() 789QPtrList<Incidence> KOMonthView::selectedIncidences()
763{ 790{
764 QPtrList<Incidence> selected; 791 QPtrList<Incidence> selected;
765 792
766 if ( mSelectedCell ) { 793 if ( mSelectedCell ) {
767 Incidence *incidence = mSelectedCell->selectedIncidence(); 794 Incidence *incidence = mSelectedCell->selectedIncidence();
768 if ( incidence ) selected.append( incidence ); 795 if ( incidence ) selected.append( incidence );
769 } 796 }
770 797
771 return selected; 798 return selected;
772} 799}
773 800
774DateList KOMonthView::selectedDates() 801DateList KOMonthView::selectedDates()
775{ 802{
776 DateList selected; 803 DateList selected;
777 804
778 if ( mSelectedCell ) { 805 if ( mSelectedCell ) {
779 QDate qd = mSelectedCell->selectedIncidenceDate(); 806 QDate qd = mSelectedCell->selectedIncidenceDate();
780 if ( qd.isValid() ) selected.append( qd ); 807 if ( qd.isValid() ) selected.append( qd );
781 } 808 }
782 809
783 return selected; 810 return selected;
784} 811}
785 812
786void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, 813void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd,
787 const QDate &td) 814 const QDate &td)
788{ 815{
789#ifndef KORG_NOPRINTER 816#ifndef KORG_NOPRINTER
790 calPrinter->preview(CalPrinter::Month, fd, td); 817 calPrinter->preview(CalPrinter::Month, fd, td);
791#endif 818#endif
792} 819}
793 820
794void KOMonthView::updateConfig() 821void KOMonthView::updateConfig()
795{ 822{
796 823
797 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 824 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
798 825
799 QFontMetrics fontmetric(mDayLabels[0]->font()); 826 QFontMetrics fontmetric(mDayLabels[0]->font());
800 mWidthLongDayLabel = 0; 827 mWidthLongDayLabel = 0;
801 828
802 for (int i = 0; i < 7; i++) { 829 for (int i = 0; i < 7; i++) {
803 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 830 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
804 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 831 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
805 } 832 }
806 bool temp = mShowSatSunComp ; 833 bool temp = mShowSatSunComp ;
807 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 834 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
808 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) 835 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog )
809 computeLayout(); 836 computeLayout();
810 updateDayLabels(); 837 updateDayLabels();
811 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); 838 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks);
812 int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; 839 int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks;
813 //resizeEvent( 0 ); 840 //resizeEvent( 0 );
814 for (uint i = 0; i < mCells.count(); ++i) { 841 for (uint i = 0; i < mCells.count(); ++i) {
815 mCells[i]->updateConfig(); 842 mCells[i]->updateConfig();
816 } 843 }
844#ifdef DESKTOP_VERSION
845 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips);
846#endif
817} 847}
818 848
819void KOMonthView::updateDayLabels() 849void KOMonthView::updateDayLabels()
820{ 850{
821 851
822 for (int i = 0; i < 7; i++) { 852 for (int i = 0; i < 7; i++) {
823 if (mWeekStartsMonday) { 853 if (mWeekStartsMonday) {
824 bool show = mShortDayLabels; 854 bool show = mShortDayLabels;
825 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > mDayLabels[i]->width() ) 855 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > mDayLabels[i]->width() )
826 show = true; 856 show = true;
827 mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 857 mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
828 } else { 858 } else {
829 if (i==0) mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels)); 859 if (i==0) mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels));
830 else mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels)); 860 else mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels));
831 861
832 } 862 }
833 } 863 }
834} 864}
835 865
836void KOMonthView::showDates(const QDate &start, const QDate &) 866void KOMonthView::showDates(const QDate &start, const QDate &)
837{ 867{
838// kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; 868// kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl;
839 869
840 870
841 mStartDate = start; 871 mStartDate = start;
842 872
843 int startWeekDay = mWeekStartsMonday ? 1 : 7; 873 int startWeekDay = mWeekStartsMonday ? 1 : 7;
844 874
845 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { 875 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) {
846 mStartDate = mStartDate.addDays( -1 ); 876 mStartDate = mStartDate.addDays( -1 );
847 } 877 }
848 878
849 bool primary = false; 879 bool primary = false;
850 uint i; 880 uint i;
851 for( i = 0; i < mCells.size(); ++i ) { 881 for( i = 0; i < mCells.size(); ++i ) {
852 QDate date = mStartDate.addDays( i ); 882 QDate date = mStartDate.addDays( i );
853 mCells[i]->setDate( date ); 883 mCells[i]->setDate( date );
854 884
855#ifndef KORG_NOPLUGINS 885#ifndef KORG_NOPLUGINS
856 // add holiday, if present 886 // add holiday, if present
857 QString hstring(KOCore::self()->holiday(date)); 887 QString hstring(KOCore::self()->holiday(date));
858 mCells[i]->setHoliday( hstring ); 888 mCells[i]->setHoliday( hstring );
859#endif 889#endif
860 890
861 } 891 }
862 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); 892 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 );
863 for( i = 0; i < 6; ++i ) { 893 for( i = 0; i < 6; ++i ) {
864 int wno; 894 int wno;
865 // remember, according to ISO 8601, the first week of the year is the 895 // remember, according to ISO 8601, the first week of the year is the
866 // first week that contains a thursday. Thus we must subtract off 4, 896 // first week that contains a thursday. Thus we must subtract off 4,
867 // not just 1. 897 // not just 1.
868 int dayOfYear = date.dayOfYear(); 898 int dayOfYear = date.dayOfYear();
869 if (dayOfYear % 7 != 0) 899 if (dayOfYear % 7 != 0)
870 wno = dayOfYear / 7 + 1; 900 wno = dayOfYear / 7 + 1;
871 else 901 else
872 wno =dayOfYear / 7; 902 wno =dayOfYear / 7;
873 mWeekLabels[i]->setWeekNum( wno ); 903 mWeekLabels[i]->setWeekNum( wno );
874 date = date.addDays( 7 ); 904 date = date.addDays( 7 );
875 } 905 }
876 updateView(); 906 updateView();
877} 907}
878 908
879void KOMonthView::showEvents(QPtrList<Event>) 909void KOMonthView::showEvents(QPtrList<Event>)
880{ 910{
881 qDebug("KOMonthView::selectEvents is not implemented yet. "); 911 qDebug("KOMonthView::selectEvents is not implemented yet. ");
882} 912}
883 913
884void KOMonthView::changeEventDisplay(Event *, int) 914void KOMonthView::changeEventDisplay(Event *, int)
885{ 915{
886 // this should be re-written to be much more efficient, but this 916 // this should be re-written to be much more efficient, but this
887 // quick-and-dirty-hack gets the job done for right now. 917 // quick-and-dirty-hack gets the job done for right now.
888 updateView(); 918 updateView();
889} 919}
890 920
891void KOMonthView::updateView() 921void KOMonthView::updateView()
892{ 922{
893 923
894 uint i; 924 uint i;
895 for( i = 0; i < mCells.count(); ++i ) { 925 for( i = 0; i < mCells.count(); ++i ) {
896 mCells[i]->updateCell(); 926 mCells[i]->updateCell();
897 } 927 }
898 //qDebug("KOMonthView::updateView() "); 928 //qDebug("KOMonthView::updateView() ");
899 processSelectionChange(); 929 processSelectionChange();
900} 930}
901 931
902void KOMonthView::resizeEvent(QResizeEvent * e) 932void KOMonthView::resizeEvent(QResizeEvent * e)
903{ 933{
904 computeLayout(); 934 computeLayout();
905} 935}
906void KOMonthView::computeLayout() 936void KOMonthView::computeLayout()
907{ 937{
908 // select the appropriate heading string size. E.g. "Wednesday" or "Wed". 938 // select the appropriate heading string size. E.g. "Wednesday" or "Wed".
909 // note this only changes the text if the requested size crosses the 939 // note this only changes the text if the requested size crosses the
910 // threshold between big enough to support the full name and not big 940 // threshold between big enough to support the full name and not big
911 // enough. 941 // enough.
912 942
913 int daysToShow = 7; 943 int daysToShow = 7;
914 bool combinedSatSun = false; 944 bool combinedSatSun = false;
915 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 945 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
916 daysToShow = 6; 946 daysToShow = 6;
917 combinedSatSun = true; 947 combinedSatSun = true;
918 } 948 }
919 int tWid = topLevelWidget()->size().width(); 949 int tWid = topLevelWidget()->size().width();
920 int tHei = topLevelWidget()->size().height(); 950 int tHei = topLevelWidget()->size().height();
921 951
922 int wid = size().width();//e 952 int wid = size().width();//e
923 int hei = size().height()-1; 953 int hei = size().height()-1;
924 954
925 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) 955 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei )
926 return; 956 return;
927 957
928 QFontMetrics fm ( mWeekLabels[0]->font() ); 958 QFontMetrics fm ( mWeekLabels[0]->font() );
929 int weeklabelwid = fm.width( "888" ); 959 int weeklabelwid = fm.width( "888" );
930 wid -= weeklabelwid; 960 wid -= weeklabelwid;
931 961
932 int colWid = wid / daysToShow; 962 int colWid = wid / daysToShow;
933 int lastCol = wid - ( colWid*6 ); 963 int lastCol = wid - ( colWid*6 );
934 int dayLabelHei = mDayLabels[0]->sizeHint().height(); 964 int dayLabelHei = mDayLabels[0]->sizeHint().height();
935 int cellHei = (hei - dayLabelHei) /6; 965 int cellHei = (hei - dayLabelHei) /6;
936 int colModulo = wid % daysToShow; 966 int colModulo = wid % daysToShow;
937 int rowModulo = (hei- dayLabelHei) % 6; 967 int rowModulo = (hei- dayLabelHei) % 6;
938 //qDebug("rowmod %d ", rowModulo); 968 //qDebug("rowmod %d ", rowModulo);
939 int i; 969 int i;
940 int x,y,w,h; 970 int x,y,w,h;
941 x= 0; 971 x= 0;
942 y= 0; 972 y= 0;
943 w = colWid; 973 w = colWid;
944 h = dayLabelHei ; 974 h = dayLabelHei ;
945 for ( i = 0; i < 7; i++) { 975 for ( i = 0; i < 7; i++) {
946 if ( i == daysToShow-colModulo ) 976 if ( i == daysToShow-colModulo )
947 ++w; 977 ++w;
948 if ( combinedSatSun ) { 978 if ( combinedSatSun ) {
949 if ( i >= daysToShow-1 ) { 979 if ( i >= daysToShow-1 ) {
950 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); 980 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h);
951 x -= w/2 ; 981 x -= w/2 ;
952 } 982 }
953 else 983 else
954 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 984 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
955 } else 985 } else
956 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 986 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
957 x += w; 987 x += w;
958 } 988 }
959 x= 0; 989 x= 0;
960 y= dayLabelHei; 990 y= dayLabelHei;
961 w = colWid; 991 w = colWid;
962 h = cellHei ; 992 h = cellHei ;
963 for ( i = 0; i < mCells.count(); ++i) { 993 for ( i = 0; i < mCells.count(); ++i) {
964 994
965 w = colWid; 995 w = colWid;
966 if ( ((i) % 7) >= 7-colModulo ) { 996 if ( ((i) % 7) >= 7-colModulo ) {
967 ++w; 997 ++w;
968 } 998 }
969 if ( i == (6-rowModulo)*7) 999 if ( i == (6-rowModulo)*7)
970 ++h; 1000 ++h;
971 if ( combinedSatSun ) { 1001 if ( combinedSatSun ) {
972 if ( (i)%7 >= daysToShow-1 ) { 1002 if ( (i)%7 >= daysToShow-1 ) {
973 if ( (i)%7 == daysToShow-1 ) { 1003 if ( (i)%7 == daysToShow-1 ) {
974 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); 1004 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 );
975 x -= w ;y += h/2; 1005 x -= w ;y += h/2;
976 } else { 1006 } else {
977 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); 1007 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 );
978 y -= h/2; 1008 y -= h/2;
979 } 1009 }
980 } else 1010 } else
981 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1011 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
982 1012
983 } 1013 }
984 else 1014 else
985 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1015 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
986 x += w; 1016 x += w;
987 if ( x + w/2 > wid ) { 1017 if ( x + w/2 > wid ) {
988 x = 0; 1018 x = 0;
989 y += h; 1019 y += h;
990 } 1020 }
991 } 1021 }
992 y= dayLabelHei; 1022 y= dayLabelHei;
993 h = cellHei ; 1023 h = cellHei ;
994 for ( i = 0; i < 6; i++) { 1024 for ( i = 0; i < 6; i++) {
995 if ( i == (6-rowModulo)) 1025 if ( i == (6-rowModulo))
996 ++h; 1026 ++h;
997 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); 1027 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h);
998 y += h; 1028 y += h;
999 } 1029 }
1000 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1030 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1001 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1031 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1002 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1032 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1003 mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ; 1033 mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ;
1004 updateDayLabels(); 1034 updateDayLabels();
1005} 1035}
1006 1036
1007void KOMonthView::showContextMenu( Incidence *incidence ) 1037void KOMonthView::showContextMenu( Incidence *incidence )
1008{ 1038{
1009 mContextMenu->showIncidencePopup(incidence); 1039 mContextMenu->showIncidencePopup(incidence);
1010 /* 1040 /*
1011 if( incidence && incidence->type() == "Event" ) { 1041 if( incidence && incidence->type() == "Event" ) {
1012 Event *event = static_cast<Event *>(incidence); 1042 Event *event = static_cast<Event *>(incidence);
1013 mContextMenu->showEventPopup(event); 1043 mContextMenu->showEventPopup(event);
1014 } else { 1044 } else {
1015 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl; 1045 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl;
1016 } 1046 }
1017 */ 1047 */
1018} 1048}
1019MonthViewCell * KOMonthView::selectedCell( ) 1049MonthViewCell * KOMonthView::selectedCell( )
1020{ 1050{
1021 return mSelectedCell; 1051 return mSelectedCell;
1022} 1052}
1023void KOMonthView::setSelectedCell( MonthViewCell *cell ) 1053void KOMonthView::setSelectedCell( MonthViewCell *cell )
1024{ 1054{
1025 // qDebug("KOMonthView::setSelectedCell "); 1055 // qDebug("KOMonthView::setSelectedCell ");
1026 if ( mSelectedCell && mSelectedCell != cell ) { 1056 if ( mSelectedCell && mSelectedCell != cell ) {
1027 MonthViewCell * mvc = mSelectedCell; 1057 MonthViewCell * mvc = mSelectedCell;
1028 mSelectedCell = cell; 1058 mSelectedCell = cell;
1029 mvc->deselect(); 1059 mvc->deselect();
1030 } else 1060 } else
1031 mSelectedCell = cell; 1061 mSelectedCell = cell;
1032 // if ( mSelectedCell ) 1062 // if ( mSelectedCell )
1033// mSelectedCell->select(); 1063// mSelectedCell->select();
1034 if ( !mSelectedCell ) 1064 if ( !mSelectedCell )
1035 emit incidenceSelected( 0 ); 1065 emit incidenceSelected( 0 );
1036 else 1066 else
1037 emit incidenceSelected( mSelectedCell->selectedIncidence() ); 1067 emit incidenceSelected( mSelectedCell->selectedIncidence() );
1038} 1068}
1039 1069
1040void KOMonthView::processSelectionChange() 1070void KOMonthView::processSelectionChange()
1041{ 1071{
1042 QPtrList<Incidence> incidences = selectedIncidences(); 1072 QPtrList<Incidence> incidences = selectedIncidences();
1043 if (incidences.count() > 0) { 1073 if (incidences.count() > 0) {
1044 emit incidenceSelected( incidences.first() ); 1074 emit incidenceSelected( incidences.first() );
1045 } else { 1075 } else {
1046 emit incidenceSelected( 0 ); 1076 emit incidenceSelected( 0 );
1047 } 1077 }
1048} 1078}
1049 1079
1050void KOMonthView::clearSelection() 1080void KOMonthView::clearSelection()
1051{ 1081{
1052 if ( mSelectedCell ) { 1082 if ( mSelectedCell ) {
1053 mSelectedCell->deselect(); 1083 mSelectedCell->deselect();
1054 mSelectedCell = 0; 1084 mSelectedCell = 0;
1055 } 1085 }
1056} 1086}
1057void KOMonthView::keyPressEvent ( QKeyEvent * e ) 1087void KOMonthView::keyPressEvent ( QKeyEvent * e )
1058{ 1088{
1059 1089
1060 e->ignore(); 1090 e->ignore();
1061 1091
1062} 1092}
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index 5124057..4c1567c 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -1,256 +1,265 @@
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 <qlayout.h> 28#include <qlayout.h>
29#include <qintdict.h> 29#include <qintdict.h>
30#include <qpushbutton.h> 30#include <qpushbutton.h>
31#include <qvaluelist.h> 31#include <qvaluelist.h>
32#include <qptrvector.h> 32#include <qptrvector.h>
33 33
34#include <libkcal/calendar.h> 34#include <libkcal/calendar.h>
35#include <libkcal/event.h> 35#include <libkcal/event.h>
36 36
37#include "koeventview.h" 37#include "koeventview.h"
38 38
39#ifdef DESKTOP_VERSION
40class QToolTipGroup;
41#endif
42
39class KOWeekButton : public QPushButton 43class KOWeekButton : public QPushButton
40{ 44{
41 Q_OBJECT 45 Q_OBJECT
42 public: 46 public:
43 KOWeekButton( QWidget *parent=0, const char *name=0 ) : 47 KOWeekButton( QWidget *parent=0, const char *name=0 ) :
44 QPushButton( parent, name) 48 QPushButton( parent, name)
45 { 49 {
46 connect( this, SIGNAL( clicked() ), 50 connect( this, SIGNAL( clicked() ),
47 SLOT( bottonClicked() )); 51 SLOT( bottonClicked() ));
48 mNumber = -1; 52 mNumber = -1;
49 } 53 }
50 void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));} 54 void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));}
51 signals: 55 signals:
52 void selectWeekNum ( int ); 56 void selectWeekNum ( int );
53private: 57private:
54 int mNumber; 58 int mNumber;
55private slots : 59private slots :
56 void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); } 60 void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); }
57}; 61};
58 62
59class KNoScrollListBox: public QListBox 63class KNoScrollListBox: public QListBox
60{ 64{
61 Q_OBJECT 65 Q_OBJECT
62 public: 66 public:
63 KNoScrollListBox(QWidget *parent=0, const char *name=0); 67 KNoScrollListBox(QWidget *parent=0, const char *name=0);
64 ~KNoScrollListBox() {} 68 ~KNoScrollListBox() {}
65 QString getWhatsThisText(QPoint p) ; 69 QString getWhatsThisText(QPoint p) ;
66 70
67 signals: 71 signals:
68 void shiftDown(); 72 void shiftDown();
69 void shiftUp(); 73 void shiftUp();
70 void rightClick(); 74 void rightClick();
71 75
72 protected slots: 76 protected slots:
73 void keyPressEvent(QKeyEvent *); 77 void keyPressEvent(QKeyEvent *);
74 void keyReleaseEvent(QKeyEvent *); 78 void keyReleaseEvent(QKeyEvent *);
75 void mousePressEvent(QMouseEvent *); 79 void mousePressEvent(QMouseEvent *);
76}; 80};
77 81
78 82
79class MonthViewItem: public QListBoxItem 83class MonthViewItem: public QListBoxItem
80{ 84{
81 public: 85 public:
82 MonthViewItem( Incidence *, QDate qd, const QString & title ); 86 MonthViewItem( Incidence *, QDate qd, const QString & title );
83 87
84 void setRecur(bool on) { mRecur = on; } 88 void setRecur(bool on) { mRecur = on; }
85 void setAlarm(bool on) { mAlarm = on; } 89 void setAlarm(bool on) { mAlarm = on; }
86 void setReply(bool on) { mReply = on; } 90 void setReply(bool on) { mReply = on; }
87 void setMoreInfo(bool on) { mInfo = on; } 91 void setMoreInfo(bool on) { mInfo = on; }
88 92
89 93
90 void setPalette(const QPalette &p) { mPalette = p; } 94 void setPalette(const QPalette &p) { mPalette = p; }
91 QPalette palette() const { return mPalette; } 95 QPalette palette() const { return mPalette; }
92 96
93 Incidence *incidence() const { return mIncidence; } 97 Incidence *incidence() const { return mIncidence; }
94 QDate incidenceDate() { return mDate; } 98 QDate incidenceDate() { return mDate; }
95 99
96 protected: 100 protected:
97 virtual void paint(QPainter *); 101 virtual void paint(QPainter *);
98 virtual int height(const QListBox *) const; 102 virtual int height(const QListBox *) const;
99 virtual int width(const QListBox *) const; 103 virtual int width(const QListBox *) const;
100 104
101 private: 105 private:
102 bool mRecur; 106 bool mRecur;
103 bool mAlarm; 107 bool mAlarm;
104 bool mReply; 108 bool mReply;
105 bool mInfo; 109 bool mInfo;
106 110
107 QPalette mPalette; 111 QPalette mPalette;
108 QDate mDate; 112 QDate mDate;
109 113
110 Incidence *mIncidence; 114 Incidence *mIncidence;
111}; 115};
112 116
113 117
114class KOMonthView; 118class KOMonthView;
115 119
116class MonthViewCell : public QWidget 120class MonthViewCell : public QWidget
117{ 121{
118 Q_OBJECT 122 Q_OBJECT
119 public: 123 public:
120 MonthViewCell( KOMonthView * ); 124 MonthViewCell( KOMonthView * );
121 125
122 void setDate( const QDate & ); 126 void setDate( const QDate & );
123 QDate date() const; 127 QDate date() const;
124 128
125 void setPrimary( bool ); 129 void setPrimary( bool );
126 bool isPrimary() const; 130 bool isPrimary() const;
127 131
128 void setHoliday( bool ); 132 void setHoliday( bool );
129 void setHoliday( const QString & ); 133 void setHoliday( const QString & );
130 134
131 void updateCell(); 135 void updateCell();
132 136
133 void updateConfig(); 137 void updateConfig();
134 138
135 void enableScrollBars( bool ); 139 void enableScrollBars( bool );
136 140
137 Incidence *selectedIncidence(); 141 Incidence *selectedIncidence();
138 QDate selectedIncidenceDate(); 142 QDate selectedIncidenceDate();
139 143
140 void deselect(); 144 void deselect();
141 void select(); 145 void select();
142 146
147#ifdef DESKTOP_VERSION
148 static QToolTipGroup *toolTipGroup();
149#endif
143 signals: 150 signals:
144 void defaultAction( Incidence * ); 151 void defaultAction( Incidence * );
145 void newEventSignal( QDateTime ); 152 void newEventSignal( QDateTime );
146 void showDaySignal( QDate ); 153 void showDaySignal( QDate );
147 154
148 protected: 155 protected:
149 void resizeEvent( QResizeEvent * ); 156 void resizeEvent( QResizeEvent * );
150 157
151 protected slots: 158 protected slots:
152 void defaultAction( QListBoxItem * ); 159 void defaultAction( QListBoxItem * );
153 void contextMenu( QListBoxItem * ); 160 void contextMenu( QListBoxItem * );
154 void selection( QListBoxItem * ); 161 void selection( QListBoxItem * );
155 void cellClicked( QListBoxItem * ); 162 void cellClicked( QListBoxItem * );
156 void newEvent(); 163 void newEvent();
157 void showDay(); 164 void showDay();
158 165
159 private: 166 private:
160 KOMonthView *mMonthView; 167 KOMonthView *mMonthView;
161 168
162 QDate mDate; 169 QDate mDate;
163 bool mPrimary; 170 bool mPrimary;
164 bool mHoliday; 171 bool mHoliday;
165 QString mHolidayString; 172 QString mHolidayString;
166 173
167 //QLabel *mLabel; 174 //QLabel *mLabel;
168 QPushButton *mLabel; 175 QPushButton *mLabel;
169 QListBox *mItemList; 176 QListBox *mItemList;
170 177#ifdef DESKTOP_VERSION
178 static QToolTipGroup *mToolTipGroup;
179#endif
171 QSize mLabelSize; 180 QSize mLabelSize;
172 QSize mLabelBigSize; 181 QSize mLabelBigSize;
173 QPalette mHolidayPalette; 182 QPalette mHolidayPalette;
174 QPalette mStandardPalette; 183 QPalette mStandardPalette;
175 QPalette mPrimaryPalette; 184 QPalette mPrimaryPalette;
176 QPalette mNonPrimaryPalette; 185 QPalette mNonPrimaryPalette;
177 void setMyPalette(); 186 void setMyPalette();
178 QPalette getPalette (); 187 QPalette getPalette ();
179 void keyPressEvent ( QKeyEvent * ) ; 188 void keyPressEvent ( QKeyEvent * ) ;
180 189
181}; 190};
182 191
183 192
184class KOMonthView: public KOEventView 193class KOMonthView: public KOEventView
185{ 194{
186 Q_OBJECT 195 Q_OBJECT
187 public: 196 public:
188 KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 ); 197 KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 );
189 ~KOMonthView(); 198 ~KOMonthView();
190 199
191 /** Returns maximum number of days supported by the komonthview */ 200 /** Returns maximum number of days supported by the komonthview */
192 virtual int maxDatesHint(); 201 virtual int maxDatesHint();
193 202
194 /** Returns number of currently shown dates. */ 203 /** Returns number of currently shown dates. */
195 virtual int currentDateCount(); 204 virtual int currentDateCount();
196 205
197 /** returns the currently selected events */ 206 /** returns the currently selected events */
198 virtual QPtrList<Incidence> selectedIncidences(); 207 virtual QPtrList<Incidence> selectedIncidences();
199 208
200 /** returns dates of the currently selected events */ 209 /** returns dates of the currently selected events */
201 virtual DateList selectedDates(); 210 virtual DateList selectedDates();
202 211
203 virtual void printPreview(CalPrinter *calPrinter, 212 virtual void printPreview(CalPrinter *calPrinter,
204 const QDate &, const QDate &); 213 const QDate &, const QDate &);
205 bool isMonthView() { return true; } 214 bool isMonthView() { return true; }
206 215
207 MonthViewCell * selectedCell(); 216 MonthViewCell * selectedCell();
208 public slots: 217 public slots:
209 virtual void updateView(); 218 virtual void updateView();
210 virtual void updateConfig(); 219 virtual void updateConfig();
211 virtual void showDates(const QDate &start, const QDate &end); 220 virtual void showDates(const QDate &start, const QDate &end);
212 virtual void showEvents(QPtrList<Event> eventList); 221 virtual void showEvents(QPtrList<Event> eventList);
213 222
214 void changeEventDisplay(Event *, int); 223 void changeEventDisplay(Event *, int);
215 224
216 void clearSelection(); 225 void clearSelection();
217 226
218 void showContextMenu( Incidence * ); 227 void showContextMenu( Incidence * );
219 228
220 void setSelectedCell( MonthViewCell * ); 229 void setSelectedCell( MonthViewCell * );
221 230
222 protected slots: 231 protected slots:
223 void processSelectionChange(); 232 void processSelectionChange();
224 signals: 233 signals:
225 void selectWeekNum ( int ); 234 void selectWeekNum ( int );
226 void showDaySignal( QDate ); 235 void showDaySignal( QDate );
227 protected: 236 protected:
228 void resizeEvent(QResizeEvent *); 237 void resizeEvent(QResizeEvent *);
229 void viewChanged(); 238 void viewChanged();
230 void updateDayLabels(); 239 void updateDayLabels();
231 240
232 private: 241 private:
233 int mDaysPerWeek; 242 int mDaysPerWeek;
234 int mNumWeeks; 243 int mNumWeeks;
235 int mNumCells; 244 int mNumCells;
236 bool mWeekStartsMonday; 245 bool mWeekStartsMonday;
237 bool mShowSatSunComp; 246 bool mShowSatSunComp;
238 void computeLayout(); 247 void computeLayout();
239 248
240 QPtrVector<MonthViewCell> mCells; 249 QPtrVector<MonthViewCell> mCells;
241 QPtrVector<QLabel> mDayLabels; 250 QPtrVector<QLabel> mDayLabels;
242 QPtrVector<KOWeekButton> mWeekLabels; 251 QPtrVector<KOWeekButton> mWeekLabels;
243 252
244 bool mShortDayLabels; 253 bool mShortDayLabels;
245 int mWidthLongDayLabel; 254 int mWidthLongDayLabel;
246 255
247 QDate mStartDate; 256 QDate mStartDate;
248 257
249 MonthViewCell *mSelectedCell; 258 MonthViewCell *mSelectedCell;
250 259
251 KOEventPopupMenu *mContextMenu; 260 KOEventPopupMenu *mContextMenu;
252 void keyPressEvent ( QKeyEvent * ) ; 261 void keyPressEvent ( QKeyEvent * ) ;
253 262
254}; 263};
255 264
256#endif 265#endif