summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp48
-rw-r--r--core/pim/datebook/datebookday.cpp236
-rw-r--r--core/pim/datebook/datebookday.h54
3 files changed, 288 insertions, 50 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index 2c2965e..c0d45c9 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -130,3 +130,3 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
130 a->addTo( view ); 130 a->addTo( view );
131 131
132 a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 ); 132 a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 );
@@ -175,3 +175,3 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
175 int current=config.readNumEntry("defaultview", DAY); 175 int current=config.readNumEntry("defaultview", DAY);
176 176
177 QActionGroup *ag = new QActionGroup(this); 177 QActionGroup *ag = new QActionGroup(this);
@@ -189,8 +189,8 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
189 ag->insert(a); 189 ag->insert(a);
190 190
191 ag->addTo(default_view); 191 ag->addTo(default_view);
192 connect(ag, SIGNAL( selected ( QAction * ) ), 192 connect(ag, SIGNAL( selected ( QAction * ) ),
193 this, SLOT( newDefaultView(QAction *) ) 193 this, SLOT( newDefaultView(QAction *) )
194 ); 194 );
195 195
196 connect( qApp, SIGNAL(clockChanged(bool)), 196 connect( qApp, SIGNAL(clockChanged(bool)),
@@ -199,3 +199,3 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
199 this, SLOT(changeWeek(bool)) ); 199 this, SLOT(changeWeek(bool)) );
200 200
201#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 201#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
@@ -204,3 +204,3 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
204#endif 204#endif
205 205
206 // listen on QPE/System 206 // listen on QPE/System
@@ -214,6 +214,6 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
214 this, SLOT(receive(const QCString&, const QByteArray&)) ); 214 this, SLOT(receive(const QCString&, const QByteArray&)) );
215 qDebug("olle\n"); 215 qDebug("olle\n");
216#endif 216#endif
217#endif 217#endif
218 218
219 qDebug("done t=%d", t.elapsed() ); 219 qDebug("done t=%d", t.elapsed() );
@@ -311,3 +311,3 @@ QDate DateBook::currentDate()
311 QDate d = QDate::currentDate(); 311 QDate d = QDate::currentDate();
312 312
313 if ( dayView && views->visibleWidget() == dayView ) { 313 if ( dayView && views->visibleWidget() == dayView ) {
@@ -408,3 +408,3 @@ void DateBook::editEvent( const Event &e )
408 if (QMessageBox::warning(this, "error box", 408 if (QMessageBox::warning(this, "error box",
409 error, "Fix it", "Continue", 409 error, "Fix it", "Continue",
410 0, 0, 1) == 0) 410 0, 0, 1) == 0)
@@ -490,3 +490,3 @@ void DateBook::initWeek()
490 calcWeek( d, totWeeks, yearNumber, onMonday ); 490 calcWeek( d, totWeeks, yearNumber, onMonday );
491 491
492 while ( totWeeks == 1 ) { 492 while ( totWeeks == 1 ) {
@@ -500,6 +500,6 @@ void DateBook::initWeekLst() {
500 if ( !weekLstView ) { 500 if ( !weekLstView ) {
501 weekLstView = new DateBookWeekLst( ampm, onMonday, db, 501 weekLstView = new DateBookWeekLst( ampm, onMonday, db,
502 views, "weeklst view" ); 502 views, "weeklst view" );
503 views->addWidget( weekLstView, WEEKLST ); 503 views->addWidget( weekLstView, WEEKLST );
504 504
505 //weekLstView->setStartViewTime( startTime ); 505 //weekLstView->setStartViewTime( startTime );
@@ -507,7 +507,7 @@ void DateBook::initWeekLst() {
507 this, SLOT( showDay( int, int, int ) ) ); 507 this, SLOT( showDay( int, int, int ) ) );
508 connect( weekLstView, SIGNAL( addEvent( const QDateTime &, 508 connect( weekLstView, SIGNAL( addEvent( const QDateTime &,
509 const QDateTime &, 509 const QDateTime &,
510 const QString & ) ), 510 const QString & ) ),
511 this, SLOT( slotNewEntry( const QDateTime &, 511 this, SLOT( slotNewEntry( const QDateTime &,
512 const QDateTime &, 512 const QDateTime &,
513 const QString & ) ) ); 513 const QString & ) ) );
@@ -542,3 +542,3 @@ void DateBook::loadSettings()
542 } 542 }
543 543
544 { 544 {
@@ -568,3 +568,3 @@ void DateBook::newDefaultView(QAction *a) {
568 if (a->text() == "Month") val=MONTH; 568 if (a->text() == "Month") val=MONTH;
569 569
570 Config configDB( "DateBook" ); 570 Config configDB( "DateBook" );
@@ -690,3 +690,3 @@ void DateBook::timerEvent( QTimerEvent *e )
690 Sound::soundAlarm(); 690 Sound::soundAlarm();
691 } 691 }
692 else 692 else
@@ -978,3 +978,3 @@ Event DateBookDBHack::eventByUID(int uid) {
978 QValueList<Event>::ConstIterator it; 978 QValueList<Event>::ConstIterator it;
979 979
980 for (it = myEventList.begin(); it != myEventList.end(); it++) { 980 for (it = myEventList.begin(); it != myEventList.end(); it++) {
@@ -987,2 +987,4 @@ Event DateBookDBHack::eventByUID(int uid) {
987 qDebug("Event not found: uid=%d\n", uid); 987 qDebug("Event not found: uid=%d\n", uid);
988 Event ev;
989 return ev; // return at least
988} 990}
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index 67a88e9..c15ccef 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -19,2 +19,3 @@
19**********************************************************************/ 19**********************************************************************/
20#include <qmessagebox.h>
20 21
@@ -38,2 +39,4 @@
38 39
40#include <qtimer.h>
41
39DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, 42DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent,
@@ -59,2 +62,3 @@ DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent,
59 setItem( row, 0, tmp ); 62 setItem( row, 0, tmp );
63 setRowHeight( row, 40);
60 } 64 }
@@ -121,5 +125,9 @@ void DateBookDayView::paintCell( QPainter *p, int, int, const QRect &cr, bool )
121 QPen pen( p->pen() ); 125 QPen pen( p->pen() );
122 p->setPen( colorGroup().mid() ); 126 p->setPen( colorGroup().dark() );
123 p->drawLine( x2, 0, x2, y2 ); 127 p->drawLine( x2, 0, x2, y2 );
124 p->drawLine( 0, y2, x2, y2 ); 128 p->drawLine( 0, y2, x2, y2 );
129
130 p->setPen( colorGroup().midlight() );
131 p->drawLine( 0, y2 - h/2, x2, y2 - h/2);
132
125 p->setPen( pen ); 133 p->setPen( pen );
@@ -176,2 +184,29 @@ DateBookDay::DateBookDay( bool ampm, bool startOnMonday,
176 this, SIGNAL(sigNewEvent(const QString&)) ); 184 this, SIGNAL(sigNewEvent(const QString&)) );
185
186 QTimer *timer = new QTimer( this );
187
188 connect( timer, SIGNAL(timeout()),
189 this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors
190 timer->start( 1000*60*5, FALSE ); //update every 5min
191
192 selectedWidget = 0;
193
194 timeMarker = new DateBookDayTimeMarker( this );
195 timeMarker->setTime( QTime::currentTime() );
196}
197
198void DateBookDay::updateView( void )
199{
200 timeMarker->setTime( QTime::currentTime() );
201 //need to find a way to update all DateBookDayWidgets
202}
203
204void DateBookDay::setSelectedWidget( DateBookDayWidget *w )
205{
206 selectedWidget = w;
207}
208
209DateBookDayWidget * DateBookDay::getSelectedWidget( void )
210{
211 return selectedWidget;
177} 212}
@@ -204,2 +239,4 @@ void DateBookDay::setDate( int y, int m, int d )
204 header->setDate( y, m, d ); 239 header->setDate( y, m, d );
240
241 selectedWidget = 0;
205} 242}
@@ -209,2 +246,4 @@ void DateBookDay::setDate( QDate d)
209 header->setDate( d.year(), d.month(), d.day() ); 246 header->setDate( d.year(), d.month(), d.day() );
247
248 selectedWidget = 0;
210} 249}
@@ -223,2 +262,8 @@ void DateBookDay::dateChanged( int y, int m, int d )
223 dayView()->addSelection( ts ); 262 dayView()->addSelection( ts );
263
264 selectedWidget = 0;
265
266 if (this->date() == QDate::currentDate())
267 timeMarker->show(); else timeMarker->hide();
268
224} 269}
@@ -248,2 +293,3 @@ void DateBookDay::getEvents()
248 } 293 }
294
249} 295}
@@ -290,32 +336,73 @@ void DateBookDay::relayoutPage( bool fromResize )
290 336
337 widgetList.sort();
338 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning
339 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view
340
291 int wCount = widgetList.count(); 341 int wCount = widgetList.count();
292 int wid = view->columnWidth(0)-1; 342 int wid = view->columnWidth(0)-1;
343 int wd;
293 int n = 1; 344 int n = 1;
294 345
346 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
347
348 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
349
295 if ( wCount < 20 ) { 350 if ( wCount < 20 ) {
296 for ( int i = 0; i < wCount; ) { 351
352 QArray<QRect> geometries(wCount);
353 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector
354
355 for ( int i = 0; i < wCount; i++)
356 {
357 QValueList<int> intersectedWidgets;
358
359 //find all widgets intersecting with widgetList.at(i)
360 for ( int j = 0; j < wCount; j++)
361 if (i != j)
362 if (geometries[j].intersects(geometries[i]))
363 intersectedWidgets.append(j);
364
365 //for each of these intersecting widgets find out how many widgets are they intersecting with
366 for ( uint j = 0; j < intersectedWidgets.count(); j++)
367 {
368 QArray<int> inter(wCount);
369 inter[j]=1;
370
371 if (intersectedWidgets[j] != -1)
372 for ( uint k = j; k < intersectedWidgets.count(); k++)
373 if (j != k && intersectedWidgets[k] != -1)
374 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]]))
375 {
376 inter[j]++;
377 intersectedWidgets[k] = -1;
378 }
379 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
380 }
381
382 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
383 }
384
385
386 for ( int i = 0; i < wCount; i++) {
297 DateBookDayWidget *w = widgetList.at(i); 387 DateBookDayWidget *w = widgetList.at(i);
298 int x = 0;
299 int xp = 0;
300 QRect geom = w->geometry(); 388 QRect geom = w->geometry();
301 geom.setX( x ); 389
302 geom.setWidth( wid ); 390 geom.setX( 0 );
303 while ( xp < n && intersects( w, geom ) ) { 391
304 x += wid; 392 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0);
305 xp++; 393
306 geom.moveBy( wid, 0 ); 394 geom.setWidth( wd );
307 } 395
308 if ( xp >= n ) { 396 while ( intersects( w, geom ) ) {
309 n++; 397 geom.moveBy( wd + 2 + 1, 0 );
310 wid = ( view->columnWidth(0)-1 ) / n;
311 i = 0;
312 } else {
313 w->setGeometry( geom );
314 i++;
315 } 398 }
399 w->setGeometry( geom );
316 } 400 }
401
317 view->setContentsPos( 0, startTime * view->rowHeight(0) ); 402 view->setContentsPos( 0, startTime * view->rowHeight(0) );
403
404
318 } else { 405 } else {
319 406
320 407
321 int hours[24]; 408 int hours[24];
@@ -345,6 +432,6 @@ void DateBookDay::relayoutPage( bool fromResize )
345 wid = ( view->columnWidth(0)-1 ) / n; 432 wid = ( view->columnWidth(0)-1 ) / n;
346 433
347 bool used[24*10]; 434 bool used[24*10];
348 memset( used, FALSE, 24*10*sizeof( bool ) ); 435 memset( used, FALSE, 24*10*sizeof( bool ) );
349 436
350 for ( int i = 0; i < wCount; i++ ) { 437 for ( int i = 0; i < wCount; i++ ) {
@@ -354,3 +441,3 @@ void DateBookDay::relayoutPage( bool fromResize )
354 QRect geom = w->geometry(); 441 QRect geom = w->geometry();
355 geom.setX( xp*wid ); 442 geom.setX( xp*(wid+2) );
356 geom.setWidth( wid ); 443 geom.setWidth( wid );
@@ -361,2 +448,5 @@ void DateBookDay::relayoutPage( bool fromResize )
361 } 448 }
449
450 timeMarker->setTime( QTime::currentTime() );//display timeMarker
451 timeMarker->raise(); //on top of all widgets
362 setUpdatesEnabled( TRUE ); 452 setUpdatesEnabled( TRUE );
@@ -498,2 +588,5 @@ DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
498 geom.setHeight( h ); 588 geom.setHeight( h );
589 geom.setX( 0 );
590 geom.setWidth(dateBook->dayView()->columnWidth(0)-1);
591
499} 592}
@@ -507,6 +600,36 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e )
507 QPainter p( this ); 600 QPainter p( this );
601
602 if (dateBook->getSelectedWidget() == this)
603 {
604 p.setBrush( QColor( 155, 240, 230 ) ); // selected item
605 } else
606 {
607 if (dateBook->date() == QDate::currentDate())
608 {
609 QTime curTime = QTime::currentTime();
610
611 if (ev.end() < curTime)
612 {
613 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
614 } else
615 {
616 //change color in dependence of the time till the event starts
617 int duration = curTime.secsTo(ev.start());
618 if (duration < 0) duration = 0;
619 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
620
621 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
622 }
623 } else
624 {
625 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
626 //perhaps make a distinction between future/past dates
627 }
628 }
629
508 p.setPen( QColor(100, 100, 100) ); 630 p.setPen( QColor(100, 100, 100) );
509 p.setBrush( QColor( 255, 240, 230 ) ); // based on priority?
510 p.drawRect(rect()); 631 p.drawRect(rect());
511 632
633 // p.drawRect(0,0, 5, height());
634
512 int y = 0; 635 int y = 0;
@@ -527,3 +650,3 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e )
527 rt.setWidth( geom.width() - d - 6 ); 650 rt.setWidth( geom.width() - d - 6 );
528 rt.draw( &p, 3, 0, e->region(), colorGroup() ); 651 rt.draw( &p, 7, 0, e->region(), colorGroup() );
529} 652}
@@ -532,2 +655,11 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
532{ 655{
656 DateBookDayWidget *item;
657
658 item = dateBook->getSelectedWidget();
659 if (item) item->update();
660
661 dateBook->setSelectedWidget(this);
662 update();
663 dateBook->repaint();
664
533 QPopupMenu m; 665 QPopupMenu m;
@@ -553 +685,55 @@ void DateBookDayWidget::setGeometry( const QRect &r )
553} 685}
686
687
688//---------------------------------------------------------------------------------------------
689//---------------------------------------------------------------------------------------------
690
691
692DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
693 : QWidget( db->dayView()->viewport() ), dateBook( db )
694{
695 setBackgroundMode( PaletteBase );
696}
697
698DateBookDayTimeMarker::~DateBookDayTimeMarker()
699{
700}
701
702void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ )
703{
704 QPainter p( this );
705 p.setBrush( QColor( 255, 0, 0 ) );
706
707 QPen pen;
708 pen.setStyle(NoPen);
709
710 p.setPen( pen );
711 p.drawRect(rect());
712}
713
714void DateBookDayTimeMarker::setTime( const QTime &t )
715{
716 int y = t.hour()*60+t.minute();
717 int rh = dateBook->dayView()->rowHeight(0);
718 y = y*rh/60;
719
720 geom.setX( 0 );
721
722 int x = dateBook->dayView()->columnWidth(0)-1;
723 geom.setWidth( x );
724
725 geom.setY( y );
726 geom.setHeight( 1 );
727
728 setGeometry( geom );
729
730 time = t;
731}
732
733void DateBookDayTimeMarker::setGeometry( const QRect &r )
734{
735 geom = r;
736 setFixedSize( r.width()+1, r.height()+1 );
737 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
738 show();
739}
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index 531fded..db0f3b6 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -55,2 +55,3 @@ protected:
55 virtual void paintFocus( QPainter *p, const QRect &cr ); 55 virtual void paintFocus( QPainter *p, const QRect &cr );
56
56 virtual void resizeEvent( QResizeEvent *e ); 57 virtual void resizeEvent( QResizeEvent *e );
@@ -75,3 +76,3 @@ public:
75 const EffectiveEvent &event() const { return ev; } 76 const EffectiveEvent &event() const { return ev; }
76 77
77signals: 78signals:
@@ -92,2 +93,46 @@ private:
92 93
94//Marker for current time in the dayview
95class DateBookDayTimeMarker : public QWidget
96{
97 Q_OBJECT
98
99public:
100 DateBookDayTimeMarker( DateBookDay *db );
101 ~DateBookDayTimeMarker();
102
103 const QRect &geometry() { return geom; }
104 void setGeometry( const QRect &r );
105 void setTime( const QTime &t );
106
107signals:
108
109protected:
110 void paintEvent( QPaintEvent *e );
111
112private:
113 QRect geom;
114 QTime time;
115 DateBookDay *dateBook;
116};
117
118//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
119class WidgetListClass : public QList<DateBookDayWidget>
120 {
121 private:
122
123 int compareItems( QCollection::Item s1, QCollection::Item s2 )
124 {
125 //hmm, don't punish me for that ;)
126 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
127 {
128 return -1;
129 } else
130 {
131 return 1;
132 }
133 }
134
135
136};
137
93class DateBookDay : public QVBox 138class DateBookDay : public QVBox
@@ -104,2 +149,4 @@ public:
104 int startViewTime() const; 149 int startViewTime() const;
150 void setSelectedWidget( DateBookDayWidget * );
151 DateBookDayWidget * getSelectedWidget( void );
105 152
@@ -110,2 +157,3 @@ public slots:
110 void slotWeekChanged( bool bStartOnMonday ); 157 void slotWeekChanged( bool bStartOnMonday );
158 void updateView();//updates TimeMarker and DayWidget-colors
111 159
@@ -133,4 +181,6 @@ private:
133 DateBookDB *db; 181 DateBookDB *db;
134 QList<DateBookDayWidget> widgetList; 182 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height
135 int startTime; 183 int startTime;
184 DateBookDayWidget *selectedWidget; //actual selected widget (obviously)
185 DateBookDayTimeMarker *timeMarker;//marker for current time
136}; 186};