summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookday.cpp23
1 files changed, 9 insertions, 14 deletions
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index aaf3e16..a6a1be3 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -1,800 +1,795 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qmessagebox.h> 20#include <qmessagebox.h>
21 21
22#include "datebookday.h" 22#include "datebookday.h"
23#include "datebookdayheaderimpl.h" 23#include "datebookdayheaderimpl.h"
24 24
25#include <qpe/datebookdb.h> 25#include <qpe/datebookdb.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/event.h> 27#include <qpe/event.h>
28#include <qpe/qpeapplication.h> 28#include <qpe/qpeapplication.h>
29#include <qpe/timestring.h> 29#include <qpe/timestring.h>
30#include <qpe/qpedebug.h> 30#include <qpe/qpedebug.h>
31#include <qpe/ir.h> 31#include <qpe/ir.h>
32 32
33#include <qheader.h> 33#include <qheader.h>
34#include <qdatetime.h> 34#include <qdatetime.h>
35#include <qpainter.h> 35#include <qpainter.h>
36#include <qsimplerichtext.h> 36#include <qsimplerichtext.h>
37#include <qpopupmenu.h> 37#include <qpopupmenu.h>
38#include <qtextcodec.h> 38#include <qtextcodec.h>
39#include <qpalette.h> 39#include <qpalette.h>
40 40
41#include <qtimer.h> 41#include <qtimer.h>
42 42
43DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, 43DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent,
44 const char *name ) 44 const char *name )
45 : QTable( 24, 1, parent, name ), 45 : QTable( 24, 1, parent, name ),
46 ampm( whichClock ) 46 ampm( whichClock )
47{ 47{
48 enableClipper(TRUE); 48 enableClipper(TRUE);
49 setTopMargin( 0 ); 49 setTopMargin( 0 );
50 horizontalHeader()->hide(); 50 horizontalHeader()->hide();
51 setLeftMargin(38); 51 setLeftMargin(38);
52 setColumnStretchable( 0, TRUE ); 52 setColumnStretchable( 0, TRUE );
53 setHScrollBarMode( QScrollView::AlwaysOff ); 53 setHScrollBarMode( QScrollView::AlwaysOff );
54 verticalHeader()->setPalette(white); 54 verticalHeader()->setPalette(white);
55 verticalHeader()->setResizeEnabled(FALSE); 55 verticalHeader()->setResizeEnabled(FALSE);
56 setSelectionMode( Single ); 56 setSelectionMode( Single );
57 57
58 // get rid of being able to edit things... 58 // get rid of being able to edit things...
59 QTableItem *tmp; 59 QTableItem *tmp;
60 int row; 60 int row;
61 for ( row = 0; row < numRows(); row++ ) { 61 for ( row = 0; row < numRows(); row++ ) {
62 tmp = new QTableItem( this, QTableItem::Never, QString::null); 62 tmp = new QTableItem( this, QTableItem::Never, QString::null);
63 setItem( row, 0, tmp ); 63 setItem( row, 0, tmp );
64 //setRowHeight( row, 40); 64 //setRowHeight( row, 40);
65 } 65 }
66 initHeader(); 66 initHeader();
67 QObject::connect( qApp, SIGNAL(clockChanged(bool)), 67 QObject::connect( qApp, SIGNAL(clockChanged(bool)),
68 this, SLOT(slotChangeClock(bool)) ); 68 this, SLOT(slotChangeClock(bool)) );
69} 69}
70 70
71void DateBookDayView::initHeader() 71void DateBookDayView::initHeader()
72{ 72{
73 QString strTmp; 73 QString strTmp;
74 for ( int i = 0; i < 24; ++i ) { 74 for ( int i = 0; i < 24; ++i ) {
75 if ( ampm ) { 75 if ( ampm ) {
76 if ( i == 0 ) 76 if ( i == 0 )
77 strTmp = QString::number(12) + ":00"; 77 strTmp = QString::number(12) + ":00";
78 else if ( i == 12 ) 78 else if ( i == 12 )
79 strTmp = QString::number(12) + tr(":00p"); 79 strTmp = QString::number(12) + tr(":00p");
80 else if ( i > 12 ) 80 else if ( i > 12 )
81 strTmp = QString::number( i - 12 ) + tr(":00p"); 81 strTmp = QString::number( i - 12 ) + tr(":00p");
82 else 82 else
83 strTmp = QString::number(i) + ":00"; 83 strTmp = QString::number(i) + ":00";
84 } else { 84 } else {
85 if ( i < 10 ) 85 if ( i < 10 )
86 strTmp = "0" + QString::number(i) + ":00"; 86 strTmp = "0" + QString::number(i) + ":00";
87 else 87 else
88 strTmp = QString::number(i) + ":00"; 88 strTmp = QString::number(i) + ":00";
89 } 89 }
90 strTmp = strTmp.rightJustify( 6, ' ' ); 90 strTmp = strTmp.rightJustify( 6, ' ' );
91 verticalHeader()->setLabel( i, strTmp ); 91 verticalHeader()->setLabel( i, strTmp );
92 setRowStretchable( i, FALSE ); 92 setRowStretchable( i, FALSE );
93 } 93 }
94} 94}
95 95
96void DateBookDayView::slotChangeClock( bool newClock ) 96void DateBookDayView::slotChangeClock( bool newClock )
97{ 97{
98 ampm = newClock; 98 ampm = newClock;
99 initHeader(); 99 initHeader();
100} 100}
101 101
102bool DateBookDayView::whichClock() const 102bool DateBookDayView::whichClock() const
103{ 103{
104 return ampm; 104 return ampm;
105} 105}
106 106
107void DateBookDayView::moveUp() 107void DateBookDayView::moveUp()
108{ 108{
109 scrollBy(0, -20); 109 scrollBy(0, -20);
110} 110}
111 111
112void DateBookDayView::moveDown() 112void DateBookDayView::moveDown()
113{ 113{
114 scrollBy(0, 20); 114 scrollBy(0, 20);
115} 115}
116 116
117void DateBookDayView::paintCell( QPainter *p, int, int, const QRect &cr, bool ) 117void DateBookDayView::paintCell( QPainter *p, int, int, const QRect &cr, bool )
118{ 118{
119 int w = cr.width(); 119 int w = cr.width();
120 int h = cr.height(); 120 int h = cr.height();
121 p->fillRect( 0, 0, w, h, colorGroup().brush( QColorGroup::Base ) ); 121 p->fillRect( 0, 0, w, h, colorGroup().brush( QColorGroup::Base ) );
122 if ( showGrid() ) { 122 if ( showGrid() ) {
123 // Draw our lines 123 // Draw our lines
124 int x2 = w - 1; 124 int x2 = w - 1;
125 int y2 = h - 1; 125 int y2 = h - 1;
126 QPen pen( p->pen() ); 126 QPen pen( p->pen() );
127 p->setPen( colorGroup().dark() ); 127 p->setPen( colorGroup().dark() );
128 p->drawLine( x2, 0, x2, y2 ); 128 p->drawLine( x2, 0, x2, y2 );
129 p->drawLine( 0, y2, x2, y2 ); 129 p->drawLine( 0, y2, x2, y2 );
130 130
131 p->setPen( colorGroup().midlight() ); 131 p->setPen( colorGroup().midlight() );
132 p->drawLine( 0, y2 - h/2, x2, y2 - h/2); 132 p->drawLine( 0, y2 - h/2, x2, y2 - h/2);
133 133
134 p->setPen( pen ); 134 p->setPen( pen );
135 } 135 }
136} 136}
137 137
138void DateBookDayView::paintFocus( QPainter *, const QRect & ) 138void DateBookDayView::paintFocus( QPainter *, const QRect & )
139{ 139{
140} 140}
141 141
142 142
143void DateBookDayView::resizeEvent( QResizeEvent *e ) 143void DateBookDayView::resizeEvent( QResizeEvent *e )
144{ 144{
145 QTable::resizeEvent( e ); 145 QTable::resizeEvent( e );
146 columnWidthChanged( 0 ); 146 columnWidthChanged( 0 );
147 emit sigColWidthChanged(); 147 emit sigColWidthChanged();
148} 148}
149 149
150void DateBookDayView::keyPressEvent( QKeyEvent *e ) 150void DateBookDayView::keyPressEvent( QKeyEvent *e )
151{ 151{
152 QString txt = e->text(); 152 QString txt = e->text();
153 if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) { 153 if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) {
154 // we this is some sort of thing we know about... 154 // we this is some sort of thing we know about...
155 e->accept(); 155 e->accept();
156 emit sigCapturedKey( txt ); 156 emit sigCapturedKey( txt );
157 } else { 157 } else {
158 // I don't know what this key is, do you? 158 // I don't know what this key is, do you?
159 e->ignore(); 159 e->ignore();
160 } 160 }
161} 161}
162 162
163void DateBookDayView::setRowStyle( int style ) 163void DateBookDayView::setRowStyle( int style )
164{ 164{
165 if (style<0) style = 0; 165 if (style<0) style = 0;
166 166
167 for (int i=0; i<numRows(); i++) 167 for (int i=0; i<numRows(); i++)
168 setRowHeight(i, style*10+20); 168 setRowHeight(i, style*10+20);
169} 169}
170 170
171//=========================================================================== 171//===========================================================================
172 172
173DateBookDay::DateBookDay( bool ampm, bool startOnMonday, 173DateBookDay::DateBookDay( bool ampm, bool startOnMonday,
174 DateBookDB *newDb, QWidget *parent, 174 DateBookDB *newDb, QWidget *parent,
175 const char *name ) 175 const char *name )
176 : QVBox( parent, name ), 176 : QVBox( parent, name ),
177 currDate( QDate::currentDate() ), 177 currDate( QDate::currentDate() ),
178 db( newDb ), 178 db( newDb ),
179 startTime( 0 ) 179 startTime( 0 )
180{ 180{
181 widgetList.setAutoDelete( true ); 181 widgetList.setAutoDelete( true );
182 header = new DateBookDayHeader( startOnMonday, this, "day header" ); 182 header = new DateBookDayHeader( startOnMonday, this, "day header" );
183 header->setDate( currDate.year(), currDate.month(), currDate.day() ); 183 header->setDate( currDate.year(), currDate.month(), currDate.day() );
184 view = new DateBookDayView( ampm, this, "day view" ); 184 view = new DateBookDayView( ampm, this, "day view" );
185 185
186 connect( header, SIGNAL( dateChanged( int, int, int ) ), 186 connect( header, SIGNAL( dateChanged( int, int, int ) ),
187 this, SLOT( dateChanged( int, int, int ) ) ); 187 this, SLOT( dateChanged( int, int, int ) ) );
188 connect( view, SIGNAL( sigColWidthChanged() ), 188 connect( view, SIGNAL( sigColWidthChanged() ),
189 this, SLOT( slotColWidthChanged() ) ); 189 this, SLOT( slotColWidthChanged() ) );
190 connect( qApp, SIGNAL(weekChanged(bool)), 190 connect( qApp, SIGNAL(weekChanged(bool)),
191 this, SLOT(slotWeekChanged(bool)) ); 191 this, SLOT(slotWeekChanged(bool)) );
192 connect( view, SIGNAL(sigCapturedKey(const QString &)), 192 connect( view, SIGNAL(sigCapturedKey(const QString &)),
193 this, SIGNAL(sigNewEvent(const QString&)) ); 193 this, SIGNAL(sigNewEvent(const QString&)) );
194 194
195 QTimer *timer = new QTimer( this ); 195 QTimer *timer = new QTimer( this );
196 196
197 connect( timer, SIGNAL(timeout()), 197 connect( timer, SIGNAL(timeout()),
198 this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors 198 this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors
199 timer->start( 1000*60*5, FALSE ); //update every 5min 199 timer->start( 1000*60*5, FALSE ); //update every 5min
200 200
201 selectedWidget = 0; 201 selectedWidget = 0;
202 202
203 timeMarker = new DateBookDayTimeMarker( this ); 203 timeMarker = new DateBookDayTimeMarker( this );
204 timeMarker->setTime( QTime::currentTime() ); 204 timeMarker->setTime( QTime::currentTime() );
205 rowStyle = -1; // initialize with bogus values 205 rowStyle = -1; // initialize with bogus values
206} 206}
207 207
208void DateBookDay::setJumpToCurTime( bool bJump ) 208void DateBookDay::setJumpToCurTime( bool bJump )
209{ 209{
210 jumpToCurTime = bJump; 210 jumpToCurTime = bJump;
211} 211}
212 212
213void DateBookDay::setRowStyle( int style ) 213void DateBookDay::setRowStyle( int style )
214{ 214{
215 if (rowStyle != style) view->setRowStyle( style ); 215 if (rowStyle != style) view->setRowStyle( style );
216 rowStyle = style; 216 rowStyle = style;
217} 217}
218 218
219void DateBookDay::updateView( void ) 219void DateBookDay::updateView( void )
220{ 220{
221 timeMarker->setTime( QTime::currentTime() ); 221 timeMarker->setTime( QTime::currentTime() );
222 //need to find a way to update all DateBookDayWidgets 222 //need to find a way to update all DateBookDayWidgets
223} 223}
224 224
225void DateBookDay::setSelectedWidget( DateBookDayWidget *w ) 225void DateBookDay::setSelectedWidget( DateBookDayWidget *w )
226{ 226{
227 selectedWidget = w; 227 selectedWidget = w;
228} 228}
229 229
230DateBookDayWidget * DateBookDay::getSelectedWidget( void ) 230DateBookDayWidget * DateBookDay::getSelectedWidget( void )
231{ 231{
232 return selectedWidget; 232 return selectedWidget;
233} 233}
234 234
235void DateBookDay::selectedDates( QDateTime &start, QDateTime &end ) 235void DateBookDay::selectedDates( QDateTime &start, QDateTime &end )
236{ 236{
237 start.setDate( currDate ); 237 start.setDate( currDate );
238 end.setDate( currDate ); 238 end.setDate( currDate );
239 239
240 int sh=99,eh=-1; 240 int sh=99,eh=-1;
241 241
242 int n = dayView()->numSelections(); 242 int n = dayView()->numSelections();
243 243
244 for (int i=0; i<n; i++) { 244 for (int i=0; i<n; i++) {
245 QTableSelection sel = dayView()->selection( i ); 245 QTableSelection sel = dayView()->selection( i );
246 sh = QMIN(sh,sel.topRow()); 246 sh = QMIN(sh,sel.topRow());
247 eh = QMAX(sh,sel.bottomRow()+1); 247 eh = QMAX(sh,sel.bottomRow()+1);
248 } 248 }
249 if (sh > 23 || eh < 1) { 249 if (sh > 23 || eh < 1) {
250 sh=8; 250 sh=8;
251 eh=9; 251 eh=9;
252 } 252 }
253 253
254 start.setTime( QTime( sh, 0, 0 ) ); 254 start.setTime( QTime( sh, 0, 0 ) );
255 end.setTime( QTime( eh, 0, 0 ) ); 255 end.setTime( QTime( eh, 0, 0 ) );
256} 256}
257 257
258void DateBookDay::setDate( int y, int m, int d ) 258void DateBookDay::setDate( int y, int m, int d )
259{ 259{
260 header->setDate( y, m, d ); 260 header->setDate( y, m, d );
261 261
262 selectedWidget = 0; 262 selectedWidget = 0;
263} 263}
264 264
265void DateBookDay::setDate( QDate d) 265void DateBookDay::setDate( QDate d)
266{ 266{
267 header->setDate( d.year(), d.month(), d.day() ); 267 header->setDate( d.year(), d.month(), d.day() );
268 268
269 selectedWidget = 0; 269 selectedWidget = 0;
270} 270}
271 271
272void DateBookDay::dateChanged( int y, int m, int d ) 272void DateBookDay::dateChanged( int y, int m, int d )
273{ 273{
274 QDate date( y, m, d ); 274 QDate date( y, m, d );
275 if ( currDate == date ) 275 if ( currDate == date )
276 return; 276 return;
277 currDate.setYMD( y, m, d ); 277 currDate.setYMD( y, m, d );
278 relayoutPage(); 278 relayoutPage();
279 dayView()->clearSelection(); 279 dayView()->clearSelection();
280 QTableSelection ts; 280 QTableSelection ts;
281 281
282 if (jumpToCurTime && this->date() == QDate::currentDate()) 282 if (jumpToCurTime && this->date() == QDate::currentDate())
283 { 283 {
284 ts.init( QTime::currentTime().hour(), 0); 284 ts.init( QTime::currentTime().hour(), 0);
285 ts.expandTo( QTime::currentTime().hour(), 0); 285 ts.expandTo( QTime::currentTime().hour(), 0);
286 } else 286 } else
287 { 287 {
288 ts.init( startTime, 0 ); 288 ts.init( startTime, 0 );
289 ts.expandTo( startTime, 0 ); 289 ts.expandTo( startTime, 0 );
290 } 290 }
291 291
292 dayView()->addSelection( ts ); 292 dayView()->addSelection( ts );
293 293
294 selectedWidget = 0; 294 selectedWidget = 0;
295 295
296} 296}
297 297
298void DateBookDay::redraw() 298void DateBookDay::redraw()
299{ 299{
300 if ( isUpdatesEnabled() ) 300 if ( isUpdatesEnabled() )
301 relayoutPage(); 301 relayoutPage();
302} 302}
303 303
304void DateBookDay::getEvents() 304void DateBookDay::getEvents()
305{ 305{
306 widgetList.clear(); 306 widgetList.clear();
307 307
308 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, 308 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate,
309 currDate ); 309 currDate );
310 QValueListIterator<EffectiveEvent> it; 310 QValueListIterator<EffectiveEvent> it;
311 for ( it = eventList.begin(); it != eventList.end(); ++it ) { 311 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
312 DateBookDayWidget* w = new DateBookDayWidget( *it, this ); 312 DateBookDayWidget* w = new DateBookDayWidget( *it, this );
313 connect( w, SIGNAL( deleteMe( const Event & ) ), 313 connect( w, SIGNAL( deleteMe( const Event & ) ),
314 this, SIGNAL( removeEvent( const Event & ) ) ); 314 this, SIGNAL( removeEvent( const Event & ) ) );
315 connect( w, SIGNAL( editMe( const Event & ) ), 315 connect( w, SIGNAL( editMe( const Event & ) ),
316 this, SIGNAL( editEvent( const Event & ) ) ); 316 this, SIGNAL( editEvent( const Event & ) ) );
317 connect( w, SIGNAL( beamMe( const Event & ) ), 317 connect( w, SIGNAL( beamMe( const Event & ) ),
318 this, SIGNAL( beamEvent( const Event & ) ) ); 318 this, SIGNAL( beamEvent( const Event & ) ) );
319 widgetList.append( w ); 319 widgetList.append( w );
320 } 320 }
321 321
322} 322}
323 323
324static int place( const DateBookDayWidget *item, bool *used, int maxn ) 324static int place( const DateBookDayWidget *item, bool *used, int maxn )
325{ 325{
326 int place = 0; 326 int place = 0;
327 int start = item->event().start().hour(); 327 int start = item->event().start().hour();
328 QTime e = item->event().end(); 328 QTime e = item->event().end();
329 int end = e.hour(); 329 int end = e.hour();
330 if ( e.minute() < 5 ) 330 if ( e.minute() < 5 )
331 end--; 331 end--;
332 if ( end < start ) 332 if ( end < start )
333 end = start; 333 end = start;
334 while ( place < maxn ) { 334 while ( place < maxn ) {
335 bool free = TRUE; 335 bool free = TRUE;
336 int s = start; 336 int s = start;
337 while( s <= end ) { 337 while( s <= end ) {
338 if ( used[10*s+place] ) { 338 if ( used[10*s+place] ) {
339 free = FALSE; 339 free = FALSE;
340 break; 340 break;
341 } 341 }
342 s++; 342 s++;
343 } 343 }
344 if ( free ) break; 344 if ( free ) break;
345 place++; 345 place++;
346 } 346 }
347 if ( place == maxn ) { 347 if ( place == maxn ) {
348 return -1; 348 return -1;
349 } 349 }
350 while( start <= end ) { 350 while( start <= end ) {
351 used[10*start+place] = TRUE; 351 used[10*start+place] = TRUE;
352 start++; 352 start++;
353 } 353 }
354 return place; 354 return place;
355} 355}
356 356
357 357
358void DateBookDay::relayoutPage( bool fromResize ) 358void DateBookDay::relayoutPage( bool fromResize )
359{ 359{
360 setUpdatesEnabled( FALSE ); 360 setUpdatesEnabled( FALSE );
361 if ( !fromResize ) 361 if ( !fromResize )
362 getEvents(); // no need we already have them! 362 getEvents(); // no need we already have them!
363 363
364 widgetList.sort(); 364 widgetList.sort();
365 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning 365 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning
366 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view 366 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view
367 367
368 int wCount = widgetList.count(); 368 int wCount = widgetList.count();
369 int wid = view->columnWidth(0)-1; 369 int wid = view->columnWidth(0)-1;
370 int wd; 370 int wd;
371 int n = 1; 371 int n = 1;
372 372
373 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget 373 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
374 374
375 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++); 375 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
376 376
377 if ( wCount < 20 ) { 377 if ( wCount < 20 ) {
378 378
379 QArray<QRect> geometries(wCount); 379 QArray<QRect> geometries(wCount);
380 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector 380 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector
381 381
382 for ( int i = 0; i < wCount; i++) 382 for ( int i = 0; i < wCount; i++)
383 { 383 {
384 QValueList<int> intersectedWidgets; 384 QValueList<int> intersectedWidgets;
385 385
386 //find all widgets intersecting with widgetList.at(i) 386 //find all widgets intersecting with widgetList.at(i)
387 for ( int j = 0; j < wCount; j++) 387 for ( int j = 0; j < wCount; j++)
388 if (i != j) 388 if (i != j)
389 if (geometries[j].intersects(geometries[i])) 389 if (geometries[j].intersects(geometries[i]))
390 intersectedWidgets.append(j); 390 intersectedWidgets.append(j);
391 391
392 //for each of these intersecting widgets find out how many widgets are they intersecting with 392 //for each of these intersecting widgets find out how many widgets are they intersecting with
393 for ( uint j = 0; j < intersectedWidgets.count(); j++) 393 for ( uint j = 0; j < intersectedWidgets.count(); j++)
394 { 394 {
395 QArray<int> inter(wCount); 395 QArray<int> inter(wCount);
396 inter[j]=1; 396 inter[j]=1;
397 397
398 if (intersectedWidgets[j] != -1) 398 if (intersectedWidgets[j] != -1)
399 for ( uint k = j; k < intersectedWidgets.count(); k++) 399 for ( uint k = j; k < intersectedWidgets.count(); k++)
400 if (j != k && intersectedWidgets[k] != -1) 400 if (j != k && intersectedWidgets[k] != -1)
401 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) 401 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]]))
402 { 402 {
403 inter[j]++; 403 inter[j]++;
404 intersectedWidgets[k] = -1; 404 intersectedWidgets[k] = -1;
405 } 405 }
406 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1; 406 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
407 } 407 }
408 408
409 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++; 409 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
410 } 410 }
411 411
412 412
413 for ( int i = 0; i < wCount; i++) { 413 for ( int i = 0; i < wCount; i++) {
414 DateBookDayWidget *w = widgetList.at(i); 414 DateBookDayWidget *w = widgetList.at(i);
415 QRect geom = w->geometry(); 415 QRect geom = w->geometry();
416 416
417 geom.setX( 0 ); 417 geom.setX( 0 );
418 418
419 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0); 419 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0);
420 420
421 geom.setWidth( wd ); 421 geom.setWidth( wd );
422 422
423 while ( intersects( w, geom ) ) { 423 while ( intersects( w, geom ) ) {
424 geom.moveBy( wd + 2 + 1, 0 ); 424 geom.moveBy( wd + 2 + 1, 0 );
425 } 425 }
426 w->setGeometry( geom ); 426 w->setGeometry( geom );
427 } 427 }
428 428
429 if (jumpToCurTime && this->date() == QDate::currentDate()) 429 if (jumpToCurTime && this->date() == QDate::currentDate())
430 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour 430 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
431 else 431 else
432 view->setContentsPos( 0, startTime * view->rowHeight(0) ); 432 view->setContentsPos( 0, startTime * view->rowHeight(0) );
433 433
434 434
435 } else { 435 } else {
436 436
437 437
438 int hours[24]; 438 int hours[24];
439 memset( hours, 0, 24*sizeof( int ) ); 439 memset( hours, 0, 24*sizeof( int ) );
440 bool overFlow = FALSE; 440 bool overFlow = FALSE;
441 for ( int i = 0; i < wCount; i++ ) { 441 for ( int i = 0; i < wCount; i++ ) {
442 DateBookDayWidget *w = widgetList.at(i); 442 DateBookDayWidget *w = widgetList.at(i);
443 int start = w->event().start().hour(); 443 int start = w->event().start().hour();
444 QTime e = w->event().end(); 444 QTime e = w->event().end();
445 int end = e.hour(); 445 int end = e.hour();
446 if ( e.minute() < 5 ) 446 if ( e.minute() < 5 )
447 end--; 447 end--;
448 if ( end < start ) 448 if ( end < start )
449 end = start; 449 end = start;
450 while( start <= end ) { 450 while( start <= end ) {
451 hours[start]++; 451 hours[start]++;
452 if ( hours[start] >= 10 ) 452 if ( hours[start] >= 10 )
453 overFlow = TRUE; 453 overFlow = TRUE;
454 ++start; 454 ++start;
455 } 455 }
456 if ( overFlow ) 456 if ( overFlow )
457 break; 457 break;
458 } 458 }
459 for ( int i = 0; i < 24; i++ ) { 459 for ( int i = 0; i < 24; i++ ) {
460 n = QMAX( n, hours[i] ); 460 n = QMAX( n, hours[i] );
461 } 461 }
462 wid = ( view->columnWidth(0)-1 ) / n; 462 wid = ( view->columnWidth(0)-1 ) / n;
463 463
464 bool used[24*10]; 464 bool used[24*10];
465 memset( used, FALSE, 24*10*sizeof( bool ) ); 465 memset( used, FALSE, 24*10*sizeof( bool ) );
466 466
467 for ( int i = 0; i < wCount; i++ ) { 467 for ( int i = 0; i < wCount; i++ ) {
468 DateBookDayWidget *w = widgetList.at(i); 468 DateBookDayWidget *w = widgetList.at(i);
469 int xp = place( w, used, n ); 469 int xp = place( w, used, n );
470 if ( xp != -1 ) { 470 if ( xp != -1 ) {
471 QRect geom = w->geometry(); 471 QRect geom = w->geometry();
472 geom.setX( xp*(wid+2) ); 472 geom.setX( xp*(wid+2) );
473 geom.setWidth( wid ); 473 geom.setWidth( wid );
474 w->setGeometry( geom ); 474 w->setGeometry( geom );
475 } 475 }
476 } 476 }
477 477
478 if (jumpToCurTime && this->date() == QDate::currentDate()) 478 if (jumpToCurTime && this->date() == QDate::currentDate())
479 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour 479 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
480 else 480 else
481 view->setContentsPos( 0, startTime * view->rowHeight(0) ); 481 view->setContentsPos( 0, startTime * view->rowHeight(0) );
482 } 482 }
483 483
484 timeMarker->setTime( QTime::currentTime() );//display timeMarker 484 timeMarker->setTime( QTime::currentTime() );//display timeMarker
485 timeMarker->raise(); //on top of all widgets 485 timeMarker->raise(); //on top of all widgets
486 if (this->date() == QDate::currentDate()) //only show timeMarker on current day 486 if (this->date() == QDate::currentDate()) //only show timeMarker on current day
487 timeMarker->show(); else timeMarker->hide(); 487 timeMarker->show(); else timeMarker->hide();
488 488
489 setUpdatesEnabled( TRUE ); 489 setUpdatesEnabled( TRUE );
490 return; 490 return;
491} 491}
492 492
493DateBookDayWidget *DateBookDay::intersects( const DateBookDayWidget *item, const QRect &geom ) 493DateBookDayWidget *DateBookDay::intersects( const DateBookDayWidget *item, const QRect &geom )
494{ 494{
495 int i = 0; 495 int i = 0;
496 DateBookDayWidget *w = widgetList.at(i); 496 DateBookDayWidget *w = widgetList.at(i);
497 int wCount = widgetList.count(); 497 int wCount = widgetList.count();
498 while ( i < wCount && w != item ) { 498 while ( i < wCount && w != item ) {
499 if ( w->geometry().intersects( geom ) ) { 499 if ( w->geometry().intersects( geom ) ) {
500 return w; 500 return w;
501 } 501 }
502 w = widgetList.at(++i); 502 w = widgetList.at(++i);
503 } 503 }
504 504
505 return 0; 505 return 0;
506} 506}
507 507
508 508
509QDate DateBookDay::date() const 509QDate DateBookDay::date() const
510{ 510{
511 return currDate; 511 return currDate;
512} 512}
513 513
514void DateBookDay::setStartViewTime( int startHere ) 514void DateBookDay::setStartViewTime( int startHere )
515{ 515{
516 startTime = startHere; 516 startTime = startHere;
517 dayView()->clearSelection(); 517 dayView()->clearSelection();
518 QTableSelection ts; 518 QTableSelection ts;
519 519
520 if (jumpToCurTime && this->date() == QDate::currentDate())//this should probably be in datebook.cpp where it's called? 520 if (jumpToCurTime && this->date() == QDate::currentDate())//this should probably be in datebook.cpp where it's called?
521 { 521 {
522 ts.init( QTime::currentTime().hour(), 0); 522 ts.init( QTime::currentTime().hour(), 0);
523 ts.expandTo( QTime::currentTime().hour(), 0); 523 ts.expandTo( QTime::currentTime().hour(), 0);
524 } else 524 } else
525 { 525 {
526 ts.init( startTime, 0 ); 526 ts.init( startTime, 0 );
527 ts.expandTo( startTime, 0 ); 527 ts.expandTo( startTime, 0 );
528 } 528 }
529 529
530 dayView()->addSelection( ts ); 530 dayView()->addSelection( ts );
531} 531}
532 532
533int DateBookDay::startViewTime() const 533int DateBookDay::startViewTime() const
534{ 534{
535 return startTime; 535 return startTime;
536} 536}
537 537
538void DateBookDay::slotWeekChanged( bool bStartOnMonday ) 538void DateBookDay::slotWeekChanged( bool bStartOnMonday )
539{ 539{
540 header->setStartOfWeek( bStartOnMonday ); 540 header->setStartOfWeek( bStartOnMonday );
541 // redraw(); 541 // redraw();
542} 542}
543 543
544void DateBookDay::keyPressEvent(QKeyEvent *e) 544void DateBookDay::keyPressEvent(QKeyEvent *e)
545{ 545{
546 switch(e->key()) { 546 switch(e->key()) {
547 case Key_Up: 547 case Key_Up:
548 view->moveUp(); 548 view->moveUp();
549 break; 549 break;
550 case Key_Down: 550 case Key_Down:
551 view->moveDown(); 551 view->moveDown();
552 break; 552 break;
553 case Key_Left: 553 case Key_Left:
554 setDate(QDate(currDate).addDays(-1)); 554 setDate(QDate(currDate).addDays(-1));
555 break; 555 break;
556 case Key_Right: 556 case Key_Right:
557 setDate(QDate(currDate).addDays(1)); 557 setDate(QDate(currDate).addDays(1));
558 break; 558 break;
559 default: 559 default:
560 e->ignore(); 560 e->ignore();
561 } 561 }
562} 562}
563 563
564//=========================================================================== 564//===========================================================================
565 565
566DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, 566DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
567 DateBookDay *db ) 567 DateBookDay *db )
568 : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db ) 568 : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db )
569{ 569{
570 570
571 571
572 // why would someone use "<"? Oh well, fix it up... 572 // why would someone use "<"? Oh well, fix it up...
573 // I wonder what other things may be messed up... 573 // I wonder what other things may be messed up...
574 QString strDesc = ev.description(); 574 QString strDesc = ev.description();
575 int where = strDesc.find( "<" ); 575 int where = strDesc.find( "<" );
576 while ( where != -1 ) { 576 while ( where != -1 ) {
577 strDesc.remove( where, 1 ); 577 strDesc.remove( where, 1 );
578 strDesc.insert( where, "&#60;" ); 578 strDesc.insert( where, "&#60;" );
579 where = strDesc.find( "<", where ); 579 where = strDesc.find( "<", where );
580 } 580 }
581 581
582 QString strCat; 582 QString strCat;
583 // ### Fix later... 583 // ### Fix later...
584// QString strCat = ev.category(); 584// QString strCat = ev.category();
585// where = strCat.find( "<" ); 585// where = strCat.find( "<" );
586// while ( where != -1 ) { 586// while ( where != -1 ) {
587 // strCat.remove( where, 1 ); 587 // strCat.remove( where, 1 );
588 // strCat.insert( where, "&#60;" ); 588 // strCat.insert( where, "&#60;" );
589 // where = strCat.find( "<", where ); 589 // where = strCat.find( "<", where );
590// } 590// }
591 591
592 QString strNote = ev.notes(); 592 QString strNote = ev.notes();
593 where = strNote.find( "<" ); 593 where = strNote.find( "<" );
594 while ( where != -1 ) { 594 while ( where != -1 ) {
595 strNote.remove( where, 1 ); 595 strNote.remove( where, 1 );
596 strNote.insert( where, "&#60;" ); 596 strNote.insert( where, "&#60;" );
597 where = strNote.find( "<", where ); 597 where = strNote.find( "<", where );
598 } 598 }
599 599
600 text = "<b>" + strDesc + "</b><br>" + "<i>"; 600 text = "<b>" + strDesc + "</b><br>" + "<i>";
601 if ( !strCat.isEmpty() ) { 601 if ( !strCat.isEmpty() ) {
602 text += strCat + "</i><br>"; 602 text += strCat + "</i><br>";
603 } 603 }
604 if (ev.event().type() == Event::Normal ) 604 if (ev.event().type() == Event::Normal )
605 setEventText( text ); 605 setEventText( text );
606 else 606 else
607 setAllDayText( text ); 607 setAllDayText( text );
608 608
609 text += "<br><br>" + strNote; 609 text += "<br><br>" + strNote;
610 610
611 setBackgroundMode( PaletteBase ); 611 setBackgroundMode( PaletteBase );
612 612
613 QTime start = ev.start(); 613 QTime start = ev.start();
614 QTime end = ev.end(); 614 QTime end = ev.end();
615 int y = start.hour()*60+start.minute(); 615 int y = start.hour()*60+start.minute();
616 int h = end.hour()*60+end.minute()-y; 616 int h = end.hour()*60+end.minute()-y;
617 int rh = dateBook->dayView()->rowHeight(0); 617 int rh = dateBook->dayView()->rowHeight(0);
618 y = y*rh/60; 618 y = y*rh/60;
619 h = h*rh/60; 619 h = h*rh/60;
620 if ( h < 3 ) { 620 if ( h < 3 ) {
621 h = 3; 621 h = 3;
622 } 622 }
623 geom.setY( y ); 623 geom.setY( y );
624 geom.setHeight( h ); 624 geom.setHeight( h );
625 geom.setX( 0 ); 625 geom.setX( 0 );
626 geom.setWidth(dateBook->dayView()->columnWidth(0)-1); 626 geom.setWidth(dateBook->dayView()->columnWidth(0)-1);
627 627
628} 628}
629void DateBookDayWidget::setAllDayText( QString &text ) { 629void DateBookDayWidget::setAllDayText( QString &text ) {
630 text += "<b>" + tr("This is an all day event.") + "</b><br>"; 630 text += "<b>" + tr("This is an all day event.") + "</b><br>";
631} 631}
632void DateBookDayWidget::setEventText( QString& text ) { 632void DateBookDayWidget::setEventText( QString& text ) {
633 bool whichClock = dateBook->dayView()->whichClock(); 633 bool whichClock = dateBook->dayView()->whichClock();
634 text += "<b>" + tr("Time") + "</b>: "; 634 if ( ev.startDate() != ev.endDate() ) {
635 if ( ev.startDate() != ev.date() ) { 635 text += "<b>" + tr("Start") + "</b>: ";
636 // multi-day event. Show start date 636 text += TimeString::timeString( ev.event().start().time(), whichClock, FALSE );
637 text += TimeString::longDateString( ev.startDate() ); 637 text += " - " + TimeString::longDateString( ev.startDate() ) + "<br>";
638 text += "<b>" + tr("End") + "</b>: ";
639 text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE );
640 text += " - " + TimeString::longDateString( ev.endDate() ) + "<br>";
638 } else { 641 } else {
639 // Show start time. 642 text += "<b>" + tr("Time") + "</b>: ";
640 text += TimeString::timeString( ev.start(), whichClock, FALSE ); 643 text += TimeString::timeString( ev.start(), whichClock, FALSE );
641 } 644 text += "<b>" + tr(" - ") + "</b>";
642
643 text += "<b>" + tr(" - ") + "</b>";
644 if ( ev.endDate() != ev.date() ) {
645 // multi-day event. Show end date
646 text += TimeString::longDateString( ev.endDate() );
647 } else {
648 // Show end time.
649 text += TimeString::timeString( ev.end(), whichClock, FALSE ); 645 text += TimeString::timeString( ev.end(), whichClock, FALSE );
650 } 646 }
651
652} 647}
653 648
654DateBookDayWidget::~DateBookDayWidget() 649DateBookDayWidget::~DateBookDayWidget()
655{ 650{
656} 651}
657 652
658void DateBookDayWidget::paintEvent( QPaintEvent *e ) 653void DateBookDayWidget::paintEvent( QPaintEvent *e )
659{ 654{
660 QPainter p( this ); 655 QPainter p( this );
661 656
662 if (dateBook->getSelectedWidget() == this) 657 if (dateBook->getSelectedWidget() == this)
663 { 658 {
664 p.setBrush( QColor( 155, 240, 230 ) ); // selected item 659 p.setBrush( QColor( 155, 240, 230 ) ); // selected item
665 } else 660 } else
666 { 661 {
667 if (dateBook->date() == QDate::currentDate()) 662 if (dateBook->date() == QDate::currentDate())
668 { 663 {
669 QTime curTime = QTime::currentTime(); 664 QTime curTime = QTime::currentTime();
670 665
671 if (ev.end() < curTime) 666 if (ev.end() < curTime)
672 { 667 {
673 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive 668 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
674 } else 669 } else
675 { 670 {
676 //change color in dependence of the time till the event starts 671 //change color in dependence of the time till the event starts
677 int duration = curTime.secsTo(ev.start()); 672 int duration = curTime.secsTo(ev.start());
678 if (duration < 0) duration = 0; 673 if (duration < 0) duration = 0;
679 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift 674 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
680 675
681 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue 676 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
682 } 677 }
683 } else 678 } else
684 { 679 {
685 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date) 680 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
686 //perhaps make a distinction between future/past dates 681 //perhaps make a distinction between future/past dates
687 } 682 }
688 } 683 }
689 684
690 p.setPen( QColor(100, 100, 100) ); 685 p.setPen( QColor(100, 100, 100) );
691 p.drawRect(rect()); 686 p.drawRect(rect());
692 687
693 // p.drawRect(0,0, 5, height()); 688 // p.drawRect(0,0, 5, height());
694 689
695 int y = 0; 690 int y = 0;
696 int d = 0; 691 int d = 0;
697 692
698 if ( ev.event().hasAlarm() ) { 693 if ( ev.event().hasAlarm() ) {
699 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) ); 694 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
700 y = 20; 695 y = 20;
701 d = 20; 696 d = 20;
702 } 697 }
703 698
704 if ( ev.event().hasRepeat() ) { 699 if ( ev.event().hasRepeat() ) {
705 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) ); 700 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
706 d = 20; 701 d = 20;
707 y += 20; 702 y += 20;
708 } 703 }
709 704
710 QSimpleRichText rt( text, font() ); 705 QSimpleRichText rt( text, font() );
711 rt.setWidth( geom.width() - d - 6 ); 706 rt.setWidth( geom.width() - d - 6 );
712 rt.draw( &p, 7, 0, e->region(), colorGroup() ); 707 rt.draw( &p, 7, 0, e->region(), colorGroup() );
713} 708}
714 709
715void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 710void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
716{ 711{
717 DateBookDayWidget *item; 712 DateBookDayWidget *item;
718 713
719 item = dateBook->getSelectedWidget(); 714 item = dateBook->getSelectedWidget();
720 if (item) item->update(); 715 if (item) item->update();
721 716
722 dateBook->setSelectedWidget(this); 717 dateBook->setSelectedWidget(this);
723 update(); 718 update();
724 dateBook->repaint(); 719 dateBook->repaint();
725 720
726 QPopupMenu m; 721 QPopupMenu m;
727 m.insertItem( tr( "Edit" ), 1 ); 722 m.insertItem( tr( "Edit" ), 1 );
728 m.insertItem( tr( "Delete" ), 2 ); 723 m.insertItem( tr( "Delete" ), 2 );
729 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); 724 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 );
730 int r = m.exec( e->globalPos() ); 725 int r = m.exec( e->globalPos() );
731 if ( r == 1 ) { 726 if ( r == 1 ) {
732 emit editMe( ev.event() ); 727 emit editMe( ev.event() );
733 } else if ( r == 2 ) { 728 } else if ( r == 2 ) {
734 emit deleteMe( ev.event() ); 729 emit deleteMe( ev.event() );
735 } else if ( r == 3 ) { 730 } else if ( r == 3 ) {
736 emit beamMe( ev.event() ); 731 emit beamMe( ev.event() );
737 } 732 }
738} 733}
739 734
740void DateBookDayWidget::setGeometry( const QRect &r ) 735void DateBookDayWidget::setGeometry( const QRect &r )
741{ 736{
742 geom = r; 737 geom = r;
743 setFixedSize( r.width()+1, r.height()+1 ); 738 setFixedSize( r.width()+1, r.height()+1 );
744 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 739 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
745 show(); 740 show();
746} 741}
747 742
748 743
749//--------------------------------------------------------------------------------------------- 744//---------------------------------------------------------------------------------------------
750//--------------------------------------------------------------------------------------------- 745//---------------------------------------------------------------------------------------------
751 746
752 747
753DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db ) 748DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
754 : QWidget( db->dayView()->viewport() ), dateBook( db ) 749 : QWidget( db->dayView()->viewport() ), dateBook( db )
755{ 750{
756 setBackgroundMode( PaletteBase ); 751 setBackgroundMode( PaletteBase );
757} 752}
758 753
759DateBookDayTimeMarker::~DateBookDayTimeMarker() 754DateBookDayTimeMarker::~DateBookDayTimeMarker()
760{ 755{
761} 756}
762 757
763void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ ) 758void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ )
764{ 759{
765 QPainter p( this ); 760 QPainter p( this );
766 p.setBrush( QColor( 255, 0, 0 ) ); 761 p.setBrush( QColor( 255, 0, 0 ) );
767 762
768 QPen pen; 763 QPen pen;
769 pen.setStyle(NoPen); 764 pen.setStyle(NoPen);
770 765
771 p.setPen( pen ); 766 p.setPen( pen );
772 p.drawRect(rect()); 767 p.drawRect(rect());
773} 768}
774 769
775void DateBookDayTimeMarker::setTime( const QTime &t ) 770void DateBookDayTimeMarker::setTime( const QTime &t )
776{ 771{
777 int y = t.hour()*60+t.minute(); 772 int y = t.hour()*60+t.minute();
778 int rh = dateBook->dayView()->rowHeight(0); 773 int rh = dateBook->dayView()->rowHeight(0);
779 y = y*rh/60; 774 y = y*rh/60;
780 775
781 geom.setX( 0 ); 776 geom.setX( 0 );
782 777
783 int x = dateBook->dayView()->columnWidth(0)-1; 778 int x = dateBook->dayView()->columnWidth(0)-1;
784 geom.setWidth( x ); 779 geom.setWidth( x );
785 780
786 geom.setY( y ); 781 geom.setY( y );
787 geom.setHeight( 1 ); 782 geom.setHeight( 1 );
788 783
789 setGeometry( geom ); 784 setGeometry( geom );
790 785
791 time = t; 786 time = t;
792} 787}
793 788
794void DateBookDayTimeMarker::setGeometry( const QRect &r ) 789void DateBookDayTimeMarker::setGeometry( const QRect &r )
795{ 790{
796 geom = r; 791 geom = r;
797 setFixedSize( r.width()+1, r.height()+1 ); 792 setFixedSize( r.width()+1, r.height()+1 );
798 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 793 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
799 show(); 794 show();
800} 795}