summaryrefslogtreecommitdiff
path: root/core/pim/datebook
authorzecke <zecke>2004-02-16 21:32:58 (UTC)
committer zecke <zecke>2004-02-16 21:32:58 (UTC)
commite228f4aa24ce73a49dde349544e55689cb0eccba (patch) (unidiff)
tree5b9be29793b2a72f9260cb1325751d31e40c18f0 /core/pim/datebook
parent38d601a7d2a975bc0cbcc4cc933844f5572ec4fa (diff)
downloadopie-e228f4aa24ce73a49dde349544e55689cb0eccba.zip
opie-e228f4aa24ce73a49dde349544e55689cb0eccba.tar.gz
opie-e228f4aa24ce73a49dde349544e55689cb0eccba.tar.bz2
Take care of the lifetime of the EffectiveEvent/Occurence
Make sure not to keep reference on non existing objects
Diffstat (limited to 'core/pim/datebook') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookday.cpp10
-rw-r--r--core/pim/datebook/datebookday.h2
-rw-r--r--core/pim/datebook/datebookdayallday.cpp11
-rw-r--r--core/pim/datebook/datebookweek.cpp4
4 files changed, 13 insertions, 14 deletions
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index 4d64099..751a1da 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -750,111 +750,113 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e )
750 d = 20; 750 d = 20;
751 } 751 }
752 752
753 if ( ev.event().hasRepeat() ) { 753 if ( ev.event().hasRepeat() ) {
754 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) ); 754 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
755 d = 20; 755 d = 20;
756 y += 20; 756 y += 20;
757 } 757 }
758 758
759 QSimpleRichText rt( text, font() ); 759 QSimpleRichText rt( text, font() );
760 rt.setWidth( geom.width() - d - 6 ); 760 rt.setWidth( geom.width() - d - 6 );
761 rt.draw( &p, 7, 0, e->region(), colorGroup() ); 761 rt.draw( &p, 7, 0, e->region(), colorGroup() );
762} 762}
763 763
764/* 764/*
765 * we need to find the real start date for a uid 765 * we need to find the real start date for a uid
766 * we need to check from one day to another... 766 * we need to check from one day to another...
767 */ 767 */
768QDate DateBookDay::findRealStart( int uid, const QDate& isIncluded , DateBookDB* db) { 768QDate DateBookDay::findRealStart( int uid, const QDate& isIncluded , DateBookDB* db) {
769 QDate dt( isIncluded ); 769 QDate dt( isIncluded );
770 QDate fnd = dt; 770 QDate fnd = dt;
771 771
772 bool doAgain = true; 772 bool doAgain = true;
773 do{ 773 do{
774 dt = dt.addDays( -1 ); 774 dt = dt.addDays( -1 );
775 QValueList<EffectiveEvent> events = db->getEffectiveEvents( dt, dt ); 775 QValueList<EffectiveEvent> events = db->getEffectiveEvents( dt, dt );
776 for (QValueList<EffectiveEvent>::Iterator it = events.begin(); it != events.end(); ++it ) { 776 for (QValueList<EffectiveEvent>::Iterator it = events.begin(); it != events.end(); ++it ) {
777 EffectiveEvent ev = (*it); 777 EffectiveEvent ev = (*it);
778 if ( uid == ev.event().uid() && ev.start() != QTime(0, 0, 0 ) ) 778 if ( uid == ev.event().uid() && ev.start() != QTime(0, 0, 0 ) )
779 return ev.date(); 779 return ev.date();
780 } 780 }
781 }while (doAgain ); 781 }while (doAgain );
782 782
783 return fnd; 783 return fnd;
784} 784}
785 785
786void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 786void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
787{ 787{
788 DateBookDayWidget *item; 788 DateBookDayWidget *item;
789 789
790 item = dateBook->getSelectedWidget(); 790 item = dateBook->getSelectedWidget();
791 if (item) 791 if (item)
792 item->update(); 792 item->update();
793 793
794 dateBook->setSelectedWidget(this); 794 dateBook->setSelectedWidget(this);
795 update(); 795 update();
796 dateBook->repaint(); 796 dateBook->repaint();
797 797
798 Event eve = ev.event();
799
798 QPopupMenu m; 800 QPopupMenu m;
799 m.insertItem( tr( "Edit" ), 1 ); 801 m.insertItem( tr( "Edit" ), 1 );
800 m.insertItem( tr( "Duplicate" ), 4 ); 802 m.insertItem( tr( "Duplicate" ), 4 );
801 m.insertItem( tr( "Delete" ), 2 ); 803 m.insertItem( tr( "Delete" ), 2 );
802 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); 804 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 );
803 if(Ir::supported() && ev.event().doRepeat() ) m.insertItem( tr( "Beam this occurence"), 5 ); 805 if(Ir::supported() && ev.event().doRepeat() ) m.insertItem( tr( "Beam this occurence"), 5 );
804 int r = m.exec( e->globalPos() ); 806 int r = m.exec( e->globalPos() );
805 if ( r == 1 ) { 807 if ( r == 1 ) {
806 emit editMe( ev.event() ); 808 emit editMe( eve );
807 } else if ( r == 2 ) { 809 } else if ( r == 2 ) {
808 emit deleteMe( ev.event() ); 810 emit deleteMe( eve );
809 } else if ( r == 3 ) { 811 } else if ( r == 3 ) {
810 emit beamMe( ev.event() ); 812 emit beamMe( eve );
811 } else if ( r == 4 ) { 813 } else if ( r == 4 ) {
812 emit duplicateMe( ev.event() ); 814 emit duplicateMe( eve );
813 } else if ( r == 5 ) { 815 } else if ( r == 5 ) {
814 // create an Event and beam it... 816 // create an Event and beam it...
815 /* 817 /*
816 * Start with the easy stuff. If start and end date is the same we can just use 818 * Start with the easy stuff. If start and end date is the same we can just use
817 * the values of effective events 819 * the values of effective events
818 * If it is a multi day event we need to find the real start and end date... 820 * If it is a multi day event we need to find the real start and end date...
819 */ 821 */
820 if ( ev.event().start().date() == ev.event().end().date() ) { 822 if ( ev.event().start().date() == ev.event().end().date() ) {
821 Event event( ev.event() ); 823 Event event( ev.event() );
822 824
823 QDateTime dt( ev.date(), ev.start() ); 825 QDateTime dt( ev.date(), ev.start() );
824 event.setStart( dt ); 826 event.setStart( dt );
825 827
826 dt.setTime( ev.end() ); 828 dt.setTime( ev.end() );
827 event.setEnd( dt ); 829 event.setEnd( dt );
828 emit beamMe( event ); 830 emit beamMe( event );
829 }else { 831 }else {
830 /* 832 /*
831 * at least the the Times are right now 833 * at least the the Times are right now
832 */ 834 */
833 QDateTime start( ev.event().start() ); 835 QDateTime start( ev.event().start() );
834 QDateTime end ( ev.event().end () ); 836 QDateTime end ( ev.event().end () );
835 837
836 838
837 /* 839 /*
838 * ok we know the start date or we need to find it 840 * ok we know the start date or we need to find it
839 */ 841 */
840 if ( ev.start() != QTime( 0, 0, 0 ) ) { 842 if ( ev.start() != QTime( 0, 0, 0 ) ) {
841 start.setDate( ev.date() ); 843 start.setDate( ev.date() );
842 }else { 844 }else {
843 QDate dt = DateBookDay::findRealStart( ev.event().uid(), ev.date(), dateBook->db ); 845 QDate dt = DateBookDay::findRealStart( ev.event().uid(), ev.date(), dateBook->db );
844 start.setDate( dt ); 846 start.setDate( dt );
845 } 847 }
846 848
847 849
848 /* 850 /*
849 * ok we know now the end date... 851 * ok we know now the end date...
850 * else 852 * else
851 * get to know the offset btw the real start and real end 853 * get to know the offset btw the real start and real end
852 * and then add it to the new start date... 854 * and then add it to the new start date...
853 */ 855 */
854 if ( ev.end() != QTime(23, 59, 59 ) ) { 856 if ( ev.end() != QTime(23, 59, 59 ) ) {
855 end.setDate( ev.date() ); 857 end.setDate( ev.date() );
856 }else{ 858 }else{
857 int days = ev.event().start().date().daysTo( ev.event().end().date() ); 859 int days = ev.event().start().date().daysTo( ev.event().end().date() );
858 end.setDate( start.date().addDays( days ) ); 860 end.setDate( start.date().addDays( days ) );
859 } 861 }
860 862
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index 3898cbc..c8cb26b 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -79,97 +79,97 @@ protected:
79 virtual void paintFocus( QPainter *p, const QRect &cr ); 79 virtual void paintFocus( QPainter *p, const QRect &cr );
80 80
81 virtual void resizeEvent( QResizeEvent *e ); 81 virtual void resizeEvent( QResizeEvent *e );
82 void keyPressEvent( QKeyEvent *e ); 82 void keyPressEvent( QKeyEvent *e );
83 void contentsMouseReleaseEvent( QMouseEvent *e ); 83 void contentsMouseReleaseEvent( QMouseEvent *e );
84 void initHeader(); 84 void initHeader();
85private: 85private:
86 bool ampm; 86 bool ampm;
87 QDate currDate; 87 QDate currDate;
88 DateBookDayViewQuickLineEdit *quickLineEdit; 88 DateBookDayViewQuickLineEdit *quickLineEdit;
89}; 89};
90 90
91class DateBookDay; 91class DateBookDay;
92class DateBookDayWidget : public QWidget 92class DateBookDayWidget : public QWidget
93{ 93{
94 Q_OBJECT 94 Q_OBJECT
95 95
96public: 96public:
97 DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db ); 97 DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db );
98 ~DateBookDayWidget(); 98 ~DateBookDayWidget();
99 99
100 const QRect &geometry() { return geom; } 100 const QRect &geometry() { return geom; }
101 void setGeometry( const QRect &r ); 101 void setGeometry( const QRect &r );
102 102
103 const EffectiveEvent &event() const { return ev; } 103 const EffectiveEvent &event() const { return ev; }
104 104
105signals: 105signals:
106 void deleteMe( const Event &e ); 106 void deleteMe( const Event &e );
107 void duplicateMe( const Event &e ); 107 void duplicateMe( const Event &e );
108 void editMe( const Event &e ); 108 void editMe( const Event &e );
109 void beamMe( const Event &e ); 109 void beamMe( const Event &e );
110 110
111protected: 111protected:
112 void paintEvent( QPaintEvent *e ); 112 void paintEvent( QPaintEvent *e );
113 void mousePressEvent( QMouseEvent *e ); 113 void mousePressEvent( QMouseEvent *e );
114 114
115private: 115private:
116 /** 116 /**
117 * Sets the text for an all day Event 117 * Sets the text for an all day Event
118 * All day events have no time associated 118 * All day events have no time associated
119 */ 119 */
120 void setAllDayText( QString& text ); 120 void setAllDayText( QString& text );
121 121
122 /** 122 /**
123 * Sets the EventText 123 * Sets the EventText
124 * it got a start and an end Time 124 * it got a start and an end Time
125 */ 125 */
126 void setEventText( QString& text ); 126 void setEventText( QString& text );
127 const EffectiveEvent ev; 127 EffectiveEvent ev;
128 DateBookDay *dateBook; 128 DateBookDay *dateBook;
129 QString text; 129 QString text;
130 QRect geom; 130 QRect geom;
131}; 131};
132 132
133//Marker for current time in the dayview 133//Marker for current time in the dayview
134class DateBookDayTimeMarker : public QWidget 134class DateBookDayTimeMarker : public QWidget
135{ 135{
136 Q_OBJECT 136 Q_OBJECT
137 137
138public: 138public:
139 DateBookDayTimeMarker( DateBookDay *db ); 139 DateBookDayTimeMarker( DateBookDay *db );
140 ~DateBookDayTimeMarker(); 140 ~DateBookDayTimeMarker();
141 141
142 const QRect &geometry() { return geom; } 142 const QRect &geometry() { return geom; }
143 void setGeometry( const QRect &r ); 143 void setGeometry( const QRect &r );
144 void setTime( const QTime &t ); 144 void setTime( const QTime &t );
145 145
146signals: 146signals:
147 147
148protected: 148protected:
149 void paintEvent( QPaintEvent *e ); 149 void paintEvent( QPaintEvent *e );
150 150
151private: 151private:
152 QRect geom; 152 QRect geom;
153 QTime time; 153 QTime time;
154 DateBookDay *dateBook; 154 DateBookDay *dateBook;
155}; 155};
156 156
157//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights 157//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
158class WidgetListClass : public QList<DateBookDayWidget> 158class WidgetListClass : public QList<DateBookDayWidget>
159{ 159{
160 private: 160 private:
161 161
162 int compareItems( QCollection::Item s1, QCollection::Item s2 ) 162 int compareItems( QCollection::Item s1, QCollection::Item s2 )
163 { 163 {
164 //hmm, don't punish me for that ;) 164 //hmm, don't punish me for that ;)
165 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height()) 165 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
166 { 166 {
167 return -1; 167 return -1;
168 } else 168 } else
169 { 169 {
170 return 1; 170 return 1;
171 } 171 }
172 } 172 }
173 173
174 174
175}; 175};
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp
index 2294f3c..1244fd3 100644
--- a/core/pim/datebook/datebookdayallday.cpp
+++ b/core/pim/datebook/datebookdayallday.cpp
@@ -111,125 +111,126 @@ void DatebookAlldayDisp::beam_single_event()
111 */ 111 */
112 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) { 112 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) {
113 Event m_Event( m_Ev.event() ); 113 Event m_Event( m_Ev.event() );
114 114
115 QDateTime dt( m_Ev.date(), m_Ev.start() ); 115 QDateTime dt( m_Ev.date(), m_Ev.start() );
116 m_Event.setStart( dt ); 116 m_Event.setStart( dt );
117 117
118 dt.setTime( m_Ev.end() ); 118 dt.setTime( m_Ev.end() );
119 m_Event.setEnd( dt ); 119 m_Event.setEnd( dt );
120 emit beamMe( m_Event ); 120 emit beamMe( m_Event );
121 }else { 121 }else {
122 /* 122 /*
123 * at least the the Times are right now 123 * at least the the Times are right now
124 */ 124 */
125 QDateTime start( m_Ev.event().start() ); 125 QDateTime start( m_Ev.event().start() );
126 QDateTime end ( m_Ev.event().end () ); 126 QDateTime end ( m_Ev.event().end () );
127 127
128 /* 128 /*
129 * ok we know the start date or we need to find it 129 * ok we know the start date or we need to find it
130 */ 130 */
131 if ( m_Ev.start() != QTime( 0, 0, 0 ) ) { 131 if ( m_Ev.start() != QTime( 0, 0, 0 ) ) {
132 start.setDate( m_Ev.date() ); 132 start.setDate( m_Ev.date() );
133 }else { 133 }else {
134 QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook ); 134 QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook );
135 start.setDate( dt ); 135 start.setDate( dt );
136 } 136 }
137 137
138 /* 138 /*
139 * ok we know now the end date... 139 * ok we know now the end date...
140 * else 140 * else
141 * get to know the offset btw the real start and real end 141 * get to know the offset btw the real start and real end
142 * and then add it to the new start date... 142 * and then add it to the new start date...
143 */ 143 */
144 if ( m_Ev.end() != QTime(23, 59, 59 ) ) { 144 if ( m_Ev.end() != QTime(23, 59, 59 ) ) {
145 end.setDate( m_Ev.date() ); 145 end.setDate( m_Ev.date() );
146 }else{ 146 }else{
147 int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() ); 147 int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() );
148 end.setDate( start.date().addDays( days ) ); 148 end.setDate( start.date().addDays( days ) );
149 } 149 }
150 Event m_Event( m_Ev.event() ); 150 Event m_Event( m_Ev.event() );
151 m_Event.setStart( start ); 151 m_Event.setStart( start );
152 m_Event.setEnd ( end ); 152 m_Event.setEnd ( end );
153 emit beamMe( m_Event ); 153 emit beamMe( m_Event );
154 } 154 }
155} 155}
156 156
157void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e) 157void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e)
158{ 158{
159 Event ev = m_Ev.event();
159 QColor b = backgroundColor(); 160 QColor b = backgroundColor();
160 setBackgroundColor(green); 161 setBackgroundColor(green);
161 update(); 162 update();
162 QPopupMenu m; 163 QPopupMenu m;
163 m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 ); 164 m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 );
164 m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 ); 165 m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 );
165 m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 ); 166 m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 );
166 if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 ); 167 if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 );
167 if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 ); 168 if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 );
168 m.insertItem( tr( "Info"),6); 169 m.insertItem( tr( "Info"),6);
169 int r = m.exec( e->globalPos() ); 170 int r = m.exec( e->globalPos() );
170 setBackgroundColor(b); 171 setBackgroundColor(b);
171 update(); 172 update();
172 switch (r) { 173 switch (r) {
173 case 1: 174 case 1:
174 emit editMe( m_Ev.event() ); 175 emit editMe( ev );
175 break; 176 break;
176 case 2: 177 case 2:
177 emit deleteMe( m_Ev.event() ); 178 emit deleteMe( ev );
178 break; 179 break;
179 case 3: 180 case 3:
180 emit beamMe( m_Ev.event() ); 181 emit beamMe( ev );
181 break; 182 break;
182 case 4: 183 case 4:
183 emit duplicateMe( m_Ev.event() ); 184 emit duplicateMe( ev );
184 break; 185 break;
185 case 5: 186 case 5:
186 beam_single_event(); 187 beam_single_event();
187 break; 188 break;
188 case 6: 189 case 6:
189 emit displayMe( m_Ev.event() ); 190 emit displayMe( ev );
190 break; 191 break;
191 default: 192 default:
192 break; 193 break;
193 } 194 }
194} 195}
195 196
196DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name) 197DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name)
197 :QLabel(parent,name) 198 :QLabel(parent,name)
198{ 199{
199 m_Timer=new QTimer(this); 200 m_Timer=new QTimer(this);
200 connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide())); 201 connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide()));
201 setFrameStyle(QFrame::Sunken|QFrame::Panel); 202 setFrameStyle(QFrame::Sunken|QFrame::Panel);
202 setTextFormat(RichText); 203 setTextFormat(RichText);
203} 204}
204 205
205DatebookEventDesc::~DatebookEventDesc() 206DatebookEventDesc::~DatebookEventDesc()
206{ 207{
207} 208}
208 209
209void DatebookEventDesc::mousePressEvent(QMouseEvent*) 210void DatebookEventDesc::mousePressEvent(QMouseEvent*)
210{ 211{
211 hide(); 212 hide();
212 if (m_Timer->isActive()) m_Timer->stop(); 213 if (m_Timer->isActive()) m_Timer->stop();
213} 214}
214 215
215void DatebookEventDesc::disp_event(const Event&e) 216void DatebookEventDesc::disp_event(const Event&e)
216{ 217{
217 if (m_Timer->isActive()) m_Timer->stop(); 218 if (m_Timer->isActive()) m_Timer->stop();
218 QString text; 219 QString text;
219 text = "<b><i>"+e.description()+"</i></b><br>"; 220 text = "<b><i>"+e.description()+"</i></b><br>";
220 if (e.notes().length()>0) { 221 if (e.notes().length()>0) {
221 text+="<b>"+e.notes()+"</b><br>"; 222 text+="<b>"+e.notes()+"</b><br>";
222 } 223 }
223 if (e.location().length()>0) { 224 if (e.location().length()>0) {
224 text+="<i>"+e.location()+"</i><br>"; 225 text+="<i>"+e.location()+"</i><br>";
225 } 226 }
226 text = text.replace(QRegExp("\n"),"<br>"); 227 text = text.replace(QRegExp("\n"),"<br>");
227 setText(text); 228 setText(text);
228 QSize s = sizeHint(); 229 QSize s = sizeHint();
229 s+=QSize(10,10); 230 s+=QSize(10,10);
230 resize(s); 231 resize(s);
231 move( QMAX(0,(parentWidget()->width()-width()) / 2), 232 move( QMAX(0,(parentWidget()->width()-width()) / 2),
232 (parentWidget()->height()-height())/2 ); 233 (parentWidget()->height()-height())/2 );
233 show(); 234 show();
234 m_Timer->start(2000,true); 235 m_Timer->start(2000,true);
235} 236}
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
index 8435132..933e191 100644
--- a/core/pim/datebook/datebookweek.cpp
+++ b/core/pim/datebook/datebookweek.cpp
@@ -37,99 +37,96 @@ DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e )
37{ 37{
38 // with the current implementation change the color for all day events 38 // with the current implementation change the color for all day events
39 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) { 39 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) {
40 c = Qt::green; 40 c = Qt::green;
41 } else { 41 } else {
42 c = ev.event().hasAlarm() ? Qt::red : Qt::blue; 42 c = ev.event().hasAlarm() ? Qt::red : Qt::blue;
43 } 43 }
44} 44}
45 45
46void DateBookWeekItem::setGeometry( int x, int y, int w, int h ) 46void DateBookWeekItem::setGeometry( int x, int y, int w, int h )
47{ 47{
48 r.setRect( x, y, w, h ); 48 r.setRect( x, y, w, h );
49} 49}
50 50
51 51
52//------------------=--------------------------------------------- 52//------------------=---------------------------------------------
53 53
54DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday, 54DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
55 QWidget *parent, const char *name ) 55 QWidget *parent, const char *name )
56 : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ), 56 : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ),
57 showingEvent( false ) 57 showingEvent( false )
58{ 58{
59 items.setAutoDelete( true ); 59 items.setAutoDelete( true );
60 60
61 viewport()->setBackgroundMode( PaletteBase ); 61 viewport()->setBackgroundMode( PaletteBase );
62 62
63 header = new QHeader( this ); 63 header = new QHeader( this );
64 header->addLabel( "" ); 64 header->addLabel( "" );
65 65
66 header->setMovingEnabled( false ); 66 header->setMovingEnabled( false );
67 header->setResizeEnabled( false ); 67 header->setResizeEnabled( false );
68 header->setClickEnabled( false, 0 ); 68 header->setClickEnabled( false, 0 );
69 initNames(); 69 initNames();
70 70
71 71
72 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) ); 72 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) );
73 73
74 QObject::connect(qApp, SIGNAL(clockChanged(bool)), 74 QObject::connect(qApp, SIGNAL(clockChanged(bool)),
75 this, SLOT(slotChangeClock(bool))); 75 this, SLOT(slotChangeClock(bool)));
76 76
77 QFontMetrics fm( font() ); 77 QFontMetrics fm( font() );
78 rowHeight = fm.height()+2; 78 rowHeight = fm.height()+2;
79 79
80 resizeContents( width(), 24*rowHeight ); 80 resizeContents( width(), 24*rowHeight );
81} 81}
82 82
83void DateBookWeekView::initNames() 83void DateBookWeekView::initNames()
84{ 84{
85#warning Please review this ! (eilers)
86
87 // Ok, I am Mr. Pedantic, but shouldn't we count until 6 instead of 7, if bOnMonday is false ? (eilers)
88 85
89 static bool bFirst = true; 86 static bool bFirst = true;
90 if ( bFirst ) { 87 if ( bFirst ) {
91 if ( bOnMonday ) { 88 if ( bOnMonday ) {
92 for ( int i = 1; i<=7; i++ ) { 89 for ( int i = 1; i<=7; i++ ) {
93 header->addLabel( Calendar::nameOfDay( i ) ); 90 header->addLabel( Calendar::nameOfDay( i ) );
94 } 91 }
95 92
96 } else { 93 } else {
97 header->addLabel( Calendar::nameOfDay( 7 ) ); 94 header->addLabel( Calendar::nameOfDay( 7 ) );
98 for ( int i = 1; i<7; i++ ) { 95 for ( int i = 1; i<7; i++ ) {
99 header->addLabel( Calendar::nameOfDay( i ) ); 96 header->addLabel( Calendar::nameOfDay( i ) );
100 } 97 }
101 } 98 }
102 bFirst = false; 99 bFirst = false;
103 } else { 100 } else {
104 // we are change things... 101 // we are change things...
105 if ( bOnMonday ) { 102 if ( bOnMonday ) {
106 for ( int i = 1; i<=7; i++ ) { 103 for ( int i = 1; i<=7; i++ ) {
107 header->setLabel( i, Calendar::nameOfDay( i ) ); 104 header->setLabel( i, Calendar::nameOfDay( i ) );
108 } 105 }
109 106
110 } else { 107 } else {
111 header->setLabel( 1, Calendar::nameOfDay( 7 ) ); 108 header->setLabel( 1, Calendar::nameOfDay( 7 ) );
112 for ( int i = 1; i<7; i++ ) { 109 for ( int i = 1; i<7; i++ ) {
113 header->setLabel( i+1, Calendar::nameOfDay( i ) ); 110 header->setLabel( i+1, Calendar::nameOfDay( i ) );
114 } 111 }
115 112
116 } 113 }
117 } 114 }
118} 115}
119 116
120 117
121 118
122void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev ) 119void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev )
123{ 120{
124 items.clear(); 121 items.clear();
125 QValueListIterator<EffectiveEvent> it; 122 QValueListIterator<EffectiveEvent> it;
126 for ( it = ev.begin(); it != ev.end(); ++it ) { 123 for ( it = ev.begin(); it != ev.end(); ++it ) {
127 DateBookWeekItem *i = new DateBookWeekItem( *it ); 124 DateBookWeekItem *i = new DateBookWeekItem( *it );
128 if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) {// Skip events ending at 00:00 starting at another day. 125 if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) {// Skip events ending at 00:00 starting at another day.
129 positionItem( i ); 126 positionItem( i );
130 items.append( i ); 127 items.append( i );
131 } 128 }
132 } 129 }
133 viewport()->update(); 130 viewport()->update();
134} 131}
135 132
@@ -269,97 +266,96 @@ void DateBookWeekView::drawContents( QPainter *p, int cx, int cy, int cw, int ch
269 266
270 p->setPen( black ); 267 p->setPen( black );
271 for ( int t = 0; t < 24; t++ ) { 268 for ( int t = 0; t < 24; t++ ) {
272 int y = t*rowHeight; 269 int y = t*rowHeight;
273 if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) { 270 if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) {
274 QString s; 271 QString s;
275 if ( ampm ) { 272 if ( ampm ) {
276 if ( t == 0 ) 273 if ( t == 0 )
277 s = QString::number( 12 ); 274 s = QString::number( 12 );
278 else if ( t == 12 ) 275 else if ( t == 12 )
279 s = QString::number(12) + tr( "p" ); 276 s = QString::number(12) + tr( "p" );
280 else if ( t > 12 ) { 277 else if ( t > 12 ) {
281 if ( t - 12 < 10 ) 278 if ( t - 12 < 10 )
282 s = " "; 279 s = " ";
283 else 280 else
284 s = ""; 281 s = "";
285 s += QString::number( t - 12 ) + tr("p"); 282 s += QString::number( t - 12 ) + tr("p");
286 } else { 283 } else {
287 if ( 12 - t < 3 ) 284 if ( 12 - t < 3 )
288 s = ""; 285 s = "";
289 else 286 else
290 s = " "; 287 s = " ";
291 s += QString::number( t ); 288 s += QString::number( t );
292 } 289 }
293 } else { 290 } else {
294 s = QString::number( t ); 291 s = QString::number( t );
295 if ( s.length() == 1 ) 292 if ( s.length() == 1 )
296 s.prepend( "0" ); 293 s.prepend( "0" );
297 } 294 }
298 p->drawText( 1, y+p->fontMetrics().ascent()+1, s ); 295 p->drawText( 1, y+p->fontMetrics().ascent()+1, s );
299 } 296 }
300 } 297 }
301 298
302 QListIterator<DateBookWeekItem> it(items); 299 QListIterator<DateBookWeekItem> it(items);
303 for ( ; it.current(); ++it ) { 300 for ( ; it.current(); ++it ) {
304 DateBookWeekItem *i = it.current(); 301 DateBookWeekItem *i = it.current();
305 if ( i->geometry().intersects( ur ) ) { 302 if ( i->geometry().intersects( ur ) ) {
306 p->setBrush( i->color() ); 303 p->setBrush( i->color() );
307 p->drawRect( i->geometry() ); 304 p->drawRect( i->geometry() );
308 } 305 }
309 } 306 }
310} 307}
311 308
312void DateBookWeekView::resizeEvent( QResizeEvent *e ) 309void DateBookWeekView::resizeEvent( QResizeEvent *e )
313{ 310{
314 const int hourWidth = 20; 311 const int hourWidth = 20;
315 QScrollView::resizeEvent( e ); 312 QScrollView::resizeEvent( e );
316 313
317#warning check the geometry i have choosen BRANCH_1_0 (waspe)
318 314
319 //HEAD 315 //HEAD
320 /* 316 /*
321 int avail = visibleWidth(); 317 int avail = visibleWidth();
322 header->setGeometry( leftMargin()+frameWidth()+frameRect().left() , frameWidth(), 318 header->setGeometry( leftMargin()+frameWidth()+frameRect().left() , frameWidth(),
323 visibleWidth(), header->sizeHint().height() ); 319 visibleWidth(), header->sizeHint().height() );
324 setMargins( 0, header->sizeHint().height(), 0, 0 ); 320 setMargins( 0, header->sizeHint().height(), 0, 0 );
325 */ 321 */
326 //BRANCH_1_0 322 //BRANCH_1_0
327 int avail = width()-qApp->style().scrollBarExtent().width()-1; 323 int avail = width()-qApp->style().scrollBarExtent().width()-1;
328 header->setGeometry( 0, 0, avail, header->sizeHint().height() ); 324 header->setGeometry( 0, 0, avail, header->sizeHint().height() );
329 setMargins( 0, header->height(), 0, 0 ); 325 setMargins( 0, header->height(), 0, 0 );
330 326
331 327
332 header->resizeSection( 0, hourWidth ); 328 header->resizeSection( 0, hourWidth );
333 int sw = (avail - hourWidth) / 7; 329 int sw = (avail - hourWidth) / 7;
334 for ( int i = 1; i < 7; i++ ) 330 for ( int i = 1; i < 7; i++ )
335 header->resizeSection( i, sw ); 331 header->resizeSection( i, sw );
336 header->resizeSection( 7, avail - hourWidth - sw*6 ); 332 header->resizeSection( 7, avail - hourWidth - sw*6 );
337} 333}
338 334
339void DateBookWeekView::setStartOfWeek( bool bStartOnMonday ) 335void DateBookWeekView::setStartOfWeek( bool bStartOnMonday )
340{ 336{
341 bOnMonday = bStartOnMonday; 337 bOnMonday = bStartOnMonday;
342 initNames(); 338 initNames();
343} 339}
344 340
345//------------------------------------------------------------------- 341//-------------------------------------------------------------------
346 342
347DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB, 343DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB,
348 QWidget *parent, const char *name ) 344 QWidget *parent, const char *name )
349 : QWidget( parent, name ), 345 : QWidget( parent, name ),
350 db( newDB ), 346 db( newDB ),
351 startTime( 0 ), 347 startTime( 0 ),
352 ampm( ap ), 348 ampm( ap ),
353 bStartOnMonday( startOnMonday ) 349 bStartOnMonday( startOnMonday )
354{ 350{
355 setFocusPolicy(StrongFocus); 351 setFocusPolicy(StrongFocus);
356 QVBoxLayout *vb = new QVBoxLayout( this ); 352 QVBoxLayout *vb = new QVBoxLayout( this );
357 header = new DateBookWeekHeader( bStartOnMonday, this ); 353 header = new DateBookWeekHeader( bStartOnMonday, this );
358 view = new DateBookWeekView( ampm, startOnMonday, this ); 354 view = new DateBookWeekView( ampm, startOnMonday, this );
359 vb->addWidget( header ); 355 vb->addWidget( header );
360 vb->addWidget( view ); 356 vb->addWidget( view );
361 357
362 lblDesc = new QLabel( this, "event label" ); 358 lblDesc = new QLabel( this, "event label" );
363 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box ); 359 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
364 lblDesc->setBackgroundColor( yellow ); 360 lblDesc->setBackgroundColor( yellow );
365 lblDesc->hide(); 361 lblDesc->hide();