summaryrefslogtreecommitdiff
authoralwin <alwin>2005-03-17 14:01:23 (UTC)
committer alwin <alwin>2005-03-17 14:01:23 (UTC)
commit8752141a5341877369f89a42fa1f0b5d08f56dbd (patch) (unidiff)
tree63dc48ee207a4e9fbb6b9e8abddb239ec724c155
parentafee05f4b4c1e8dab8463e3423fcfc8f9d45aa8b (diff)
downloadopie-8752141a5341877369f89a42fa1f0b5d08f56dbd.zip
opie-8752141a5341877369f89a42fa1f0b5d08f56dbd.tar.gz
opie-8752141a5341877369f89a42fa1f0b5d08f56dbd.tar.bz2
1. datebookweeklist - a week has SEVEN days, not SIX. I'm wondering why
events on sunday never showed there ;) 2. extra file datebooktypes contains some special classes used by datebook so other classes must not include the big mainheader file. 3. added support for holiday-plugins to week-views. Month view is a little bit more tricky 'cause TT has never heard about virtual methods and so I have the choice between complete copy the monthview and make the modifications or changing the interface of datebookdb-class to virtual. both isn't nice.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp45
-rw-r--r--core/pim/datebook/datebook.h37
-rw-r--r--core/pim/datebook/datebookday.cpp5
-rw-r--r--core/pim/datebook/datebookday.h6
-rw-r--r--core/pim/datebook/datebookdayallday.cpp12
-rw-r--r--core/pim/datebook/datebooktypes.h59
-rw-r--r--core/pim/datebook/datebookweek.cpp489
-rw-r--r--core/pim/datebook/datebookweek.h9
-rw-r--r--core/pim/datebook/datebookweeklst.cpp597
-rw-r--r--core/pim/datebook/datebookweeklst.h93
10 files changed, 718 insertions, 634 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index f6aab0c..36c4bd7 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -46,67 +46,68 @@
46#include <qaction.h> 46#include <qaction.h>
47#include <qcopchannel_qws.h> 47#include <qcopchannel_qws.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qmessagebox.h> 49#include <qmessagebox.h>
50#include <qtimer.h> 50#include <qtimer.h>
51#include <qtl.h> 51#include <qtl.h>
52#include <qtoolbar.h> 52#include <qtoolbar.h>
53#include <qwidgetstack.h> 53#include <qwidgetstack.h>
54#include <qdir.h> 54#include <qdir.h>
55#include <qtopia/qlibrary.h> 55#include <qtopia/qlibrary.h>
56 56
57#include <sys/stat.h> 57#include <sys/stat.h>
58#include <sys/types.h> 58#include <sys/types.h>
59#include <fcntl.h> 59#include <fcntl.h>
60#include <unistd.h> 60#include <unistd.h>
61 61
62#include <stdlib.h> 62#include <stdlib.h>
63 63
64DateBook::DateBook( QWidget *parent, const char *, WFlags f ) 64DateBook::DateBook( QWidget *parent, const char *, WFlags f )
65 : QMainWindow( parent, "datebook", f ), 65 : QMainWindow( parent, "datebook", f ),
66 aPreset( FALSE ), 66 aPreset( FALSE ),
67 presetTime( -1 ), 67 presetTime( -1 ),
68 startTime( 8 ), // an acceptable default 68 startTime( 8 ), // an acceptable default
69 rowStyle( 0 ), 69 rowStyle( 0 ),
70 bJumpToCurTime(FALSE), 70 bJumpToCurTime(FALSE),
71 syncing(FALSE), 71 syncing(FALSE),
72 inSearch(FALSE), 72 inSearch(FALSE),
73 alarmCounter(0) 73 alarmCounter(0)
74{ 74{
75 bool needEvilHack= false; // if we need an Evil Hack 75 bool needEvilHack= false; // if we need an Evil Hack
76 QTime t; 76 QTime t;
77 t.start(); 77 t.start();
78 db = new DateBookDBHack; 78 db = new DateBookDBHoliday;
79 odebug << "loading db t=" << t.elapsed() << oendl; 79 odebug << "loading db t=" << t.elapsed() << oendl;
80 db_holiday = new DateBookHoliday(); 80 db_holiday = new DateBookHoliday();
81 db->db_holiday=db_holiday;
81 82
82 loadSettings(); 83 loadSettings();
83 setCaption( tr("Calendar") ); 84 setCaption( tr("Calendar") );
84 setIcon( Resource::loadPixmap( "datebook_icon" ) ); 85 setIcon( Resource::loadPixmap( "datebook_icon" ) );
85 86
86 setToolBarsMovable( FALSE ); 87 setToolBarsMovable( FALSE );
87 88
88 views = new QWidgetStack( this ); 89 views = new QWidgetStack( this );
89 setCentralWidget( views ); 90 setCentralWidget( views );
90 91
91 dayView = 0; 92 dayView = 0;
92 weekView = 0; 93 weekView = 0;
93 weekLstView = 0; 94 weekLstView = 0;
94 monthView = 0; 95 monthView = 0;
95 96
96// QToolBar *bar = new QToolBar( this ); 97// QToolBar *bar = new QToolBar( this );
97// bar->setHorizontalStretchable( TRUE ); 98// bar->setHorizontalStretchable( TRUE );
98 99
99// QMenuBar *mb = new QMenuBar( bar ); 100// QMenuBar *mb = new QMenuBar( bar );
100// mb->setMargin( 0 ); 101// mb->setMargin( 0 );
101 102
102// QPopupMenu *view = new QPopupMenu( this ); 103// QPopupMenu *view = new QPopupMenu( this );
103// mb->insertItem( tr( "View" ), view ); 104// mb->insertItem( tr( "View" ), view );
104 105
105 QToolBar *sub_bar = new QToolBar(this); 106 QToolBar *sub_bar = new QToolBar(this);
106 sub_bar->setHorizontalStretchable(TRUE); 107 sub_bar->setHorizontalStretchable(TRUE);
107 108
108 QActionGroup *g = new QActionGroup( this ); 109 QActionGroup *g = new QActionGroup( this );
109 g->setExclusive( TRUE ); 110 g->setExclusive( TRUE );
110 111
111 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); 112 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
112 connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); 113 connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
@@ -1120,32 +1121,74 @@ void DateBookHoliday::init()
1120 Opie::Datebook::HolidayPlugin*pl = hif->plugin(); 1121 Opie::Datebook::HolidayPlugin*pl = hif->plugin();
1121 if (pl) { 1122 if (pl) {
1122 HPlugin*_pl=new HPlugin; 1123 HPlugin*_pl=new HPlugin;
1123 _pl->_plugin = pl; 1124 _pl->_plugin = pl;
1124 odebug << "Found holiday " << pl->description()<<oendl; 1125 odebug << "Found holiday " << pl->description()<<oendl;
1125 _pl->_lib = lib; 1126 _pl->_lib = lib;
1126 _pl->_if = hif; 1127 _pl->_if = hif;
1127 _pluginlist.append(_pl); 1128 _pluginlist.append(_pl);
1128 } else { 1129 } else {
1129 } 1130 }
1130 } else { 1131 } else {
1131 delete lib; 1132 delete lib;
1132 } 1133 }
1133 } 1134 }
1134} 1135}
1135 1136
1136QStringList DateBookHoliday::holidaylist(const QDate&aDate) 1137QStringList DateBookHoliday::holidaylist(const QDate&aDate)
1137{ 1138{
1138 QStringList ret; 1139 QStringList ret;
1139 QValueList<HPlugin*>::Iterator it; 1140 QValueList<HPlugin*>::Iterator it;
1140 for (it=_pluginlist.begin();it!=_pluginlist.end();++it) { 1141 for (it=_pluginlist.begin();it!=_pluginlist.end();++it) {
1141 HPlugin*_pl = *it; 1142 HPlugin*_pl = *it;
1142 ret+=_pl->_plugin->entries(aDate); 1143 ret+=_pl->_plugin->entries(aDate);
1143 } 1144 }
1144 return ret; 1145 return ret;
1145} 1146}
1146 1147
1147QStringList DateBookHoliday::holidaylist(unsigned year, unsigned month, unsigned day) 1148QStringList DateBookHoliday::holidaylist(unsigned year, unsigned month, unsigned day)
1148{ 1149{
1149 return holidaylist(QDate(year,month,day)); 1150 return holidaylist(QDate(year,month,day));
1150} 1151}
1151 1152
1153QValueList<EffectiveEvent> DateBookHoliday::getEffectiveEvents(const QDate &from,const QDate &to )
1154{
1155 QValueList<EffectiveEvent> ret;
1156 QValueList<HPlugin*>::Iterator it;
1157 for (it=_pluginlist.begin();it!=_pluginlist.end();++it) {
1158 HPlugin*_pl = *it;
1159 ret+=_pl->_plugin->events(from,to);
1160 }
1161 return ret;
1162}
1163
1164QValueList<EffectiveEvent> DateBookDBHoliday::getEffectiveEventsNoHoliday(const QDate &from,const QDate &to )
1165{
1166 return DateBookDBHack::getEffectiveEvents(from,to);
1167}
1168
1169QValueList<EffectiveEvent> DateBookDBHoliday::getEffectiveEventsNoHoliday(const QDateTime &start)
1170{
1171 return DateBookDBHack::getEffectiveEvents(start);
1172}
1173
1174QValueList<EffectiveEvent> DateBookHoliday::getEffectiveEvents(const QDateTime &start)
1175{
1176 return getEffectiveEvents(start.date(),start.date());
1177}
1178
1179QValueList<EffectiveEvent> DateBookDBHoliday::getEffectiveEvents(const QDate &from,const QDate &to )
1180{
1181 QValueList<EffectiveEvent> ret;
1182 odebug << "Ueberlagert 1" << oendl;
1183 if (db_holiday) {
1184 ret+=db_holiday->getEffectiveEvents(from,to);
1185 }
1186 ret+=getEffectiveEventsNoHoliday(from,to);
1187 return ret;
1188}
1189
1190QValueList<EffectiveEvent> DateBookDBHoliday::getEffectiveEvents( const QDateTime &start)
1191{
1192 odebug << "Ueberlagert 2" << oendl;
1193 return DateBookDBHack::getEffectiveEvents(start);
1194}
diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h
index 54ffcfb..3d7f5b5 100644
--- a/core/pim/datebook/datebook.h
+++ b/core/pim/datebook/datebook.h
@@ -1,103 +1,72 @@
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#ifndef DATEBOOK_H 20#ifndef DATEBOOK_H
21#define DATEBOOK_H 21#define DATEBOOK_H
22 22
23#include "datebooktypes.h"
24
23#include <qpe/datebookdb.h> 25#include <qpe/datebookdb.h>
24 26
25#include <qmainwindow.h> 27#include <qmainwindow.h>
26 28
27enum { DAY=1,WEEK,WEEKLST,MONTH }; // defaultView values 29enum { DAY=1,WEEK,WEEKLST,MONTH }; // defaultView values
28enum { NONE=0,NORMAL,EXTENDED }; // WeekLstView's modes. 30enum { NONE=0,NORMAL,EXTENDED }; // WeekLstView's modes.
29 31
30class QAction; 32class QAction;
31class QWidgetStack; 33class QWidgetStack;
32class DateBookDay; 34class DateBookDay;
33class DateBookWeek; 35class DateBookWeek;
34class DateBookWeekLst; 36class DateBookWeekLst;
35class DateBookMonth; 37class DateBookMonth;
36class Event; 38class Event;
37class QDate; 39class QDate;
38class Ir; 40class Ir;
39class QLibrary;
40
41namespace Opie {
42namespace Datebook {
43 class HolidayPlugin;
44 class HolidayPluginIf;
45}
46}
47
48class DateBookDBHack : public DateBookDB {
49 public:
50 Event eventByUID(int id);
51};
52
53class DateBookHoliday
54{
55public:
56 DateBookHoliday();
57 virtual ~DateBookHoliday();
58
59 QStringList holidaylist(const QDate&);
60 QStringList holidaylist(unsigned year, unsigned month, unsigned day);
61protected:
62 void init();
63 void deinit();
64
65 struct HPlugin {
66 Opie::Datebook::HolidayPlugin*_plugin;
67 QLibrary*_lib;
68 Opie::Datebook::HolidayPluginIf*_if;
69 };
70 QValueList<HPlugin*>_pluginlist;
71};
72 41
73class DateBook : public QMainWindow 42class DateBook : public QMainWindow
74{ 43{
75 Q_OBJECT 44 Q_OBJECT
76 45
77public: 46public:
78 static QString appName() { return QString::fromLatin1("datebook"); } 47 static QString appName() { return QString::fromLatin1("datebook"); }
79 DateBook( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 48 DateBook( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
80 ~DateBook(); 49 ~DateBook();
81 50
82signals: 51signals:
83 void newEvent(); 52 void newEvent();
84 void signalNotFound(); 53 void signalNotFound();
85 void signalWrapAround(); 54 void signalWrapAround();
86 55
87protected: 56protected:
88 QDate currentDate(); 57 QDate currentDate();
89 void timerEvent( QTimerEvent *e ); 58 void timerEvent( QTimerEvent *e );
90 void closeEvent( QCloseEvent *e ); 59 void closeEvent( QCloseEvent *e );
91 60
92 void view(int v, const QDate &d); 61 void view(int v, const QDate &d);
93 62
94public slots: 63public slots:
95 void flush(); 64 void flush();
96 void reload(); 65 void reload();
97 66
98private slots: 67private slots:
99 void fileNew(); 68 void fileNew();
100 void slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str, const QString &location=0); 69 void slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str, const QString &location=0);
101 void slotSettings(); 70 void slotSettings();
102 void slotToday(); // view today 71 void slotToday(); // view today
103 void changeClock( bool newClock ); 72 void changeClock( bool newClock );
@@ -108,61 +77,61 @@ private slots:
108 void slotFind(); 77 void slotFind();
109 void slotDoFind( const QString &, const QDate &, bool, bool, int ); 78 void slotDoFind( const QString &, const QDate &, bool, bool, int );
110 79
111 void viewDefault(const QDate &d); 80 void viewDefault(const QDate &d);
112 81
113 void viewDay(); 82 void viewDay();
114 void viewWeek(); 83 void viewWeek();
115 void viewWeekLst(); 84 void viewWeekLst();
116 void viewMonth(); 85 void viewMonth();
117 86
118 void showDay( int y, int m, int d ); 87 void showDay( int y, int m, int d );
119 88
120 void insertEvent( const Event &e ); 89 void insertEvent( const Event &e );
121 void editEvent( const Event &e ); 90 void editEvent( const Event &e );
122 void duplicateEvent( const Event &e ); 91 void duplicateEvent( const Event &e );
123 void removeEvent( const Event &e ); 92 void removeEvent( const Event &e );
124 93
125 void receive( const QCString &msg, const QByteArray &data ); 94 void receive( const QCString &msg, const QByteArray &data );
126 void setDocument( const QString & ); 95 void setDocument( const QString & );
127 void beamEvent( const Event &e ); 96 void beamEvent( const Event &e );
128 void beamDone( Ir *ir ); 97 void beamDone( Ir *ir );
129 98
130private: 99private:
131 void addEvent( const Event &e ); 100 void addEvent( const Event &e );
132 void initDay(); 101 void initDay();
133 void initWeek(); 102 void initWeek();
134 void initWeekLst(); 103 void initWeekLst();
135 void initMonth(); 104 void initMonth();
136 void loadSettings(); 105 void loadSettings();
137 void saveSettings(); 106 void saveSettings();
138 107
139private: 108private:
140 DateBookDBHack *db; 109 DateBookDBHoliday *db;
141 DateBookHoliday*db_holiday; 110 DateBookHoliday*db_holiday;
142 QWidgetStack *views; 111 QWidgetStack *views;
143 DateBookDay *dayView; 112 DateBookDay *dayView;
144 DateBookWeek *weekView; 113 DateBookWeek *weekView;
145 DateBookMonth *monthView; 114 DateBookMonth *monthView;
146 DateBookWeekLst *weekLstView; 115 DateBookWeekLst *weekLstView;
147 QAction *dayAction, *weekAction, *weekLstAction, *monthAction; 116 QAction *dayAction, *weekAction, *weekLstAction, *monthAction;
148 int weeklistviewconfig; 117 int weeklistviewconfig;
149 bool aPreset; // have everything set to alarm? 118 bool aPreset; // have everything set to alarm?
150 int presetTime; // the standard time for the alarm 119 int presetTime; // the standard time for the alarm
151 int startTime; 120 int startTime;
152 int rowStyle; 121 int rowStyle;
153 int defaultView; 122 int defaultView;
154 QArray<int> defaultCategories; 123 QArray<int> defaultCategories;
155 QString defaultLocation; 124 QString defaultLocation;
156 bool bJumpToCurTime; //should jump to current time in dayview? 125 bool bJumpToCurTime; //should jump to current time in dayview?
157 bool ampm; 126 bool ampm;
158 bool onMonday; 127 bool onMonday;
159 128
160 bool syncing; 129 bool syncing;
161 bool inSearch; 130 bool inSearch;
162 131
163 int alarmCounter; 132 int alarmCounter;
164 133
165 QString checkEvent(const Event &); 134 QString checkEvent(const Event &);
166}; 135};
167 136
168#endif 137#endif
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index dfe39e5..00ddd05 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -1,53 +1,54 @@
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 20
21#include "datebookday.h" 21#include "datebookday.h"
22#include "datebooktypes.h"
22#include "datebookdayheaderimpl.h" 23#include "datebookdayheaderimpl.h"
23#include "datebookdayallday.h" 24#include "datebookdayallday.h"
24 25
25#include <opie2/oholidayplugin.h> 26#include <opie2/oholidayplugin.h>
26#include <qpe/resource.h> 27#include <qpe/resource.h>
27#include <qpe/qpeapplication.h> 28#include <qpe/qpeapplication.h>
28#include <qpe/ir.h> 29#include <qpe/ir.h>
29 30
30#include <qsimplerichtext.h> 31#include <qsimplerichtext.h>
31#include <qpopupmenu.h> 32#include <qpopupmenu.h>
32 33
33 34
34#include <qtimer.h> 35#include <qtimer.h>
35 36
36DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name ) 37DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name )
37 : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() ) 38 : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() )
38{ 39{
39 enableClipper(TRUE); 40 enableClipper(TRUE);
40 setTopMargin( 0 ); 41 setTopMargin( 0 );
41 horizontalHeader()->hide(); 42 horizontalHeader()->hide();
42 setLeftMargin(38); 43 setLeftMargin(38);
43 setColumnStretchable( 0, TRUE ); 44 setColumnStretchable( 0, TRUE );
44 setHScrollBarMode( QScrollView::AlwaysOff ); 45 setHScrollBarMode( QScrollView::AlwaysOff );
45 verticalHeader()->setPalette(white); 46 verticalHeader()->setPalette(white);
46 verticalHeader()->setResizeEnabled(FALSE); 47 verticalHeader()->setResizeEnabled(FALSE);
47 setSelectionMode( Single ); 48 setSelectionMode( Single );
48 49
49 // get rid of being able to edit things... 50 // get rid of being able to edit things...
50 QTableItem *tmp; 51 QTableItem *tmp;
51 int row; 52 int row;
52 for ( row = 0; row < numRows(); row++ ) { 53 for ( row = 0; row < numRows(); row++ ) {
53 tmp = new QTableItem( this, QTableItem::Never, QString::null); 54 tmp = new QTableItem( this, QTableItem::Never, QString::null);
@@ -198,65 +199,65 @@ void DateBookDayView::contentsMouseReleaseEvent( QMouseEvent* /* e */ )
198//=========================================================================== 199//===========================================================================
199 200
200DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name) 201DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name)
201{ 202{
202 active=1; 203 active=1;
203 quickEvent.setStart(start); 204 quickEvent.setStart(start);
204 quickEvent.setEnd(end); 205 quickEvent.setEnd(end);
205 connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed())); 206 connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed()));
206} 207}
207 208
208void DateBookDayViewQuickLineEdit::slotReturnPressed() 209void DateBookDayViewQuickLineEdit::slotReturnPressed()
209{ 210{
210 if(active && (!this->text().isEmpty())) { // Fix to avoid having this event beeing added multiple times. 211 if(active && (!this->text().isEmpty())) { // Fix to avoid having this event beeing added multiple times.
211 quickEvent.setDescription(this->text()); 212 quickEvent.setDescription(this->text());
212 connect(this,SIGNAL(insertEvent(const Event&)),this->topLevelWidget(),SLOT(insertEvent(const Event&))); 213 connect(this,SIGNAL(insertEvent(const Event&)),this->topLevelWidget(),SLOT(insertEvent(const Event&)));
213 emit(insertEvent(quickEvent)); 214 emit(insertEvent(quickEvent));
214 active=0; 215 active=0;
215 } 216 }
216 /* we need to return to this object.. */ 217 /* we need to return to this object.. */
217 QTimer::singleShot(500, this, SLOT(finallyCallClose()) ); // Close and also delete this widget 218 QTimer::singleShot(500, this, SLOT(finallyCallClose()) ); // Close and also delete this widget
218} 219}
219void DateBookDayViewQuickLineEdit::finallyCallClose() { 220void DateBookDayViewQuickLineEdit::finallyCallClose() {
220 close(true); // also deletes this widget... 221 close(true); // also deletes this widget...
221} 222}
222 223
223void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent* /* e */) 224void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent* /* e */)
224{ 225{
225 slotReturnPressed(); // Reuse code to add event and close this widget. 226 slotReturnPressed(); // Reuse code to add event and close this widget.
226} 227}
227 228
228//=========================================================================== 229//===========================================================================
229 230
230DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, DateBookHoliday*newHdb, QWidget *parent, const char *name ) 231DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDBHoliday *newDb, DateBookHoliday*newHdb, QWidget *parent, const char *name )
231 : QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 ) 232 : QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 )
232{ 233{
233 widgetList.setAutoDelete( true ); 234 widgetList.setAutoDelete( true );
234 _holiday_db = newHdb; 235 _holiday_db = newHdb;
235 header = new DateBookDayHeader( startOnMonday, this, "day header" ); 236 header = new DateBookDayHeader( startOnMonday, this, "day header" );
236 header->setDate( currDate.year(), currDate.month(), currDate.day() ); 237 header->setDate( currDate.year(), currDate.month(), currDate.day() );
237 238
238 m_allDays = new DatebookdayAllday(newDb, this, "all day event list" ); 239 m_allDays = new DatebookdayAllday(newDb, this, "all day event list" );
239 m_allDays->hide(); 240 m_allDays->hide();
240 241
241 view = new DateBookDayView( ampm, this, "day view" ); 242 view = new DateBookDayView( ampm, this, "day view" );
242 243
243 connect( header, SIGNAL( dateChanged(int,int,int) ), this, SLOT( dateChanged(int,int,int) ) ); 244 connect( header, SIGNAL( dateChanged(int,int,int) ), this, SLOT( dateChanged(int,int,int) ) );
244 connect( header, SIGNAL( dateChanged(int,int,int) ), view, SLOT( slotDateChanged(int,int,int) ) ); 245 connect( header, SIGNAL( dateChanged(int,int,int) ), view, SLOT( slotDateChanged(int,int,int) ) );
245 connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) ); 246 connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) );
246 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) ); 247 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
247 connect( view, SIGNAL(sigCapturedKey(const QString&)), this, SIGNAL(sigNewEvent(const QString&)) ); 248 connect( view, SIGNAL(sigCapturedKey(const QString&)), this, SIGNAL(sigNewEvent(const QString&)) );
248 249
249 QTimer *timer = new QTimer( this ); 250 QTimer *timer = new QTimer( this );
250 251
251 connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) ); //connect timer for updating timeMarker & daywidgetcolors 252 connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) ); //connect timer for updating timeMarker & daywidgetcolors
252 timer->start( 1000*60*5, FALSE ); //update every 5min 253 timer->start( 1000*60*5, FALSE ); //update every 5min
253 254
254 selectedWidget = 0; 255 selectedWidget = 0;
255 256
256 timeMarker = new DateBookDayTimeMarker( this ); 257 timeMarker = new DateBookDayTimeMarker( this );
257 timeMarker->setTime( QTime::currentTime() ); 258 timeMarker->setTime( QTime::currentTime() );
258 rowStyle = -1; // initialize with bogus values 259 rowStyle = -1; // initialize with bogus values
259 jumpToCurTime = false; 260 jumpToCurTime = false;
260} 261}
261 262
262void DateBookDay::setJumpToCurTime( bool bJump ) 263void DateBookDay::setJumpToCurTime( bool bJump )
@@ -338,65 +339,65 @@ void DateBookDay::dateChanged( int y, int m, int d )
338 ts.expandTo( QTime::currentTime().hour(), 0); 339 ts.expandTo( QTime::currentTime().hour(), 0);
339 } else { 340 } else {
340 ts.init( startTime, 0 ); 341 ts.init( startTime, 0 );
341 ts.expandTo( startTime, 0 ); 342 ts.expandTo( startTime, 0 );
342 } 343 }
343 344
344 dayView()->addSelection( ts ); 345 dayView()->addSelection( ts );
345 selectedWidget = 0; 346 selectedWidget = 0;
346} 347}
347 348
348void DateBookDay::redraw() 349void DateBookDay::redraw()
349{ 350{
350 if ( isUpdatesEnabled() ) 351 if ( isUpdatesEnabled() )
351 relayoutPage(); 352 relayoutPage();
352} 353}
353 354
354void DateBookDay::getEvents() 355void DateBookDay::getEvents()
355{ 356{
356 widgetList.clear(); 357 widgetList.clear();
357 358
358 /* clear the AllDay List */ 359 /* clear the AllDay List */
359 m_allDays->hide(); // just in case 360 m_allDays->hide(); // just in case
360 m_allDays->removeAllEvents(); 361 m_allDays->removeAllEvents();
361 362
362 QStringList hdays = _holiday_db->holidaylist(currDate); 363 QStringList hdays = _holiday_db->holidaylist(currDate);
363 QStringList::Iterator sit; 364 QStringList::Iterator sit;
364 QObject* object = 0; 365 QObject* object = 0;
365 for (sit=hdays.begin();sit!=hdays.end();++sit) { 366 for (sit=hdays.begin();sit!=hdays.end();++sit) {
366 object = m_allDays->addHoliday(*sit); 367 object = m_allDays->addHoliday(*sit);
367 if (!object) continue; 368 if (!object) continue;
368 /* not to do something with it */ 369 /* not to do something with it */
369 } 370 }
370 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate ); 371 QValueList<EffectiveEvent> eventList = db->getEffectiveEventsNoHoliday( currDate, currDate );
371 QValueListIterator<EffectiveEvent> it; 372 QValueListIterator<EffectiveEvent> it;
372 373
373 for ( it = eventList.begin(); it != eventList.end(); ++it ) { 374 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
374 EffectiveEvent ev=*it; 375 EffectiveEvent ev=*it;
375 if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) { // Skip events ending at 00:00 starting at another day. 376 if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) { // Skip events ending at 00:00 starting at another day.
376 if (ev.event().type() == Event::AllDay ) { 377 if (ev.event().type() == Event::AllDay ) {
377 object = m_allDays->addEvent( ev ); 378 object = m_allDays->addEvent( ev );
378 if (!object) 379 if (!object)
379 continue; 380 continue;
380 }else { 381 }else {
381 DateBookDayWidget* w = new DateBookDayWidget( *it, this ); 382 DateBookDayWidget* w = new DateBookDayWidget( *it, this );
382 widgetList.append( w ); 383 widgetList.append( w );
383 object = w; 384 object = w;
384 } 385 }
385 386
386 connect( object, SIGNAL( deleteMe(const Event&) ), this, SIGNAL( removeEvent(const Event&) ) ); 387 connect( object, SIGNAL( deleteMe(const Event&) ), this, SIGNAL( removeEvent(const Event&) ) );
387 connect( object, SIGNAL( duplicateMe(const Event&) ), this, SIGNAL( duplicateEvent(const Event&) ) ); 388 connect( object, SIGNAL( duplicateMe(const Event&) ), this, SIGNAL( duplicateEvent(const Event&) ) );
388 connect( object, SIGNAL( editMe(const Event&) ), this, SIGNAL( editEvent(const Event&) ) ); 389 connect( object, SIGNAL( editMe(const Event&) ), this, SIGNAL( editEvent(const Event&) ) );
389 connect( object, SIGNAL( beamMe(const Event&) ), this, SIGNAL( beamEvent(const Event&) ) ); 390 connect( object, SIGNAL( beamMe(const Event&) ), this, SIGNAL( beamEvent(const Event&) ) );
390 391
391 } 392 }
392 } 393 }
393} 394}
394 395
395static int place( const DateBookDayWidget *item, bool *used, int maxn ) 396static int place( const DateBookDayWidget *item, bool *used, int maxn )
396{ 397{
397 int place = 0; 398 int place = 0;
398 int start = item->event().start().hour(); 399 int start = item->event().start().hour();
399 QTime e = item->event().end(); 400 QTime e = item->event().end();
400 int end = e.hour(); 401 int end = e.hour();
401 if ( e.minute() < 5 ) 402 if ( e.minute() < 5 )
402 end--; 403 end--;
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index 3e44364..3b75eba 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -1,66 +1,68 @@
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#ifndef DATEBOOKDAY_H 20#ifndef DATEBOOKDAY_H
21#define DATEBOOKDAY_H 21#define DATEBOOKDAY_H
22 22
23#include <qpe/event.h> 23#include <qpe/event.h>
24 24
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qtable.h> 26#include <qtable.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qlist.h> 28#include <qlist.h>
29 29
30#include "datebook.h" 30#include "datebook.h"
31#include "datebooktypes.h"
31#include <qlineedit.h> 32#include <qlineedit.h>
32 33
33class DateBookDayHeader; 34class DateBookDayHeader;
34class DateBookDB; 35class DateBookDB;
36class DateBookDBHoliday;
35class DatebookdayAllday; 37class DatebookdayAllday;
36class QDateTime; 38class QDateTime;
37class QMouseEvent; 39class QMouseEvent;
38class QPaintEvent; 40class QPaintEvent;
39class QResizeEvent; 41class QResizeEvent;
40 42
41class DateBookDayViewQuickLineEdit : public QLineEdit 43class DateBookDayViewQuickLineEdit : public QLineEdit
42{ 44{
43 Q_OBJECT 45 Q_OBJECT
44public: 46public:
45 DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0); 47 DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0);
46protected: 48protected:
47 Event quickEvent; 49 Event quickEvent;
48 int active; 50 int active;
49 void focusOutEvent( QFocusEvent *e ); 51 void focusOutEvent( QFocusEvent *e );
50protected slots: 52protected slots:
51 void slotReturnPressed(void); 53 void slotReturnPressed(void);
52 void finallyCallClose(); 54 void finallyCallClose();
53signals: 55signals:
54 void insertEvent(const Event &e); 56 void insertEvent(const Event &e);
55}; 57};
56 58
57 59
58class DateBookDayView : public QTable 60class DateBookDayView : public QTable
59{ 61{
60 Q_OBJECT 62 Q_OBJECT
61public: 63public:
62 DateBookDayView( bool hourClock, QWidget *parent, const char *name ); 64 DateBookDayView( bool hourClock, QWidget *parent, const char *name );
63 bool whichClock() const; 65 bool whichClock() const;
64 66
65 void setRowStyle( int style ); 67 void setRowStyle( int style );
66 68
@@ -151,88 +153,88 @@ protected:
151private: 153private:
152 QRect geom; 154 QRect geom;
153 QTime time; 155 QTime time;
154 DateBookDay *dateBook; 156 DateBookDay *dateBook;
155}; 157};
156 158
157//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights 159//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
158class WidgetListClass : public QList<DateBookDayWidget> 160class WidgetListClass : public QList<DateBookDayWidget>
159{ 161{
160 private: 162 private:
161 163
162 int compareItems( QCollection::Item s1, QCollection::Item s2 ) 164 int compareItems( QCollection::Item s1, QCollection::Item s2 )
163 { 165 {
164 //hmm, don't punish me for that ;) 166 //hmm, don't punish me for that ;)
165 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height()) 167 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
166 { 168 {
167 return -1; 169 return -1;
168 } else 170 } else
169 { 171 {
170 return 1; 172 return 1;
171 } 173 }
172 } 174 }
173 175
174 176
175}; 177};
176 178
177class DateBookDay : public QVBox 179class DateBookDay : public QVBox
178{ 180{
179 Q_OBJECT 181 Q_OBJECT
180 182
181 friend class DateBookDayWidget; // for beam this occurence and access to DateBookDB 183 friend class DateBookDayWidget; // for beam this occurence and access to DateBookDB
182public: 184public:
183 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb,DateBookHoliday*newHdb, 185 DateBookDay( bool ampm, bool startOnMonday, DateBookDBHoliday *newDb,DateBookHoliday*newHdb,
184 QWidget *parent, const char *name ); 186 QWidget *parent, const char *name );
185 void selectedDates( QDateTime &start, QDateTime &end ); 187 void selectedDates( QDateTime &start, QDateTime &end );
186 188
187 QDate date() const; 189 QDate date() const;
188 DateBookDayView *dayView() const { return view; } 190 DateBookDayView *dayView() const { return view; }
189 void setStartViewTime( int startHere ); 191 void setStartViewTime( int startHere );
190 int startViewTime() const; 192 int startViewTime() const;
191 void setSelectedWidget( DateBookDayWidget * ); 193 void setSelectedWidget( DateBookDayWidget * );
192 DateBookDayWidget * getSelectedWidget( void ); 194 DateBookDayWidget * getSelectedWidget( void );
193 void setJumpToCurTime( bool bJump ); 195 void setJumpToCurTime( bool bJump );
194 void setRowStyle( int style ); 196 void setRowStyle( int style );
195 static QDate findRealStart( int uid, const QDate& isIncluded, 197 static QDate findRealStart( int uid, const QDate& isIncluded,
196 DateBookDB* ); 198 DateBookDB* );
197 199
198public slots: 200public slots:
199 void setDate( int y, int m, int d ); 201 void setDate( int y, int m, int d );
200 void setDate( QDate ); 202 void setDate( QDate );
201 void redraw(); 203 void redraw();
202 void slotWeekChanged( bool bStartOnMonday ); 204 void slotWeekChanged( bool bStartOnMonday );
203 void updateView(); //updates TimeMarker and DayWidget-colors 205 void updateView(); //updates TimeMarker and DayWidget-colors
204 206
205signals: 207signals:
206 void removeEvent( const Event& ); 208 void removeEvent( const Event& );
207 void editEvent( const Event& ); 209 void editEvent( const Event& );
208 void duplicateEvent( const Event& ); 210 void duplicateEvent( const Event& );
209 void beamEvent( const Event& ); 211 void beamEvent( const Event& );
210 void newEvent(); 212 void newEvent();
211 void sigNewEvent( const QString & ); 213 void sigNewEvent( const QString & );
212 214
213protected slots: 215protected slots:
214 void keyPressEvent(QKeyEvent *); 216 void keyPressEvent(QKeyEvent *);
215 217
216private slots: 218private slots:
217 void dateChanged( int y, int m, int d ); 219 void dateChanged( int y, int m, int d );
218 void slotColWidthChanged() { relayoutPage(); }; 220 void slotColWidthChanged() { relayoutPage(); };
219 221
220private: 222private:
221 void getEvents(); 223 void getEvents();
222 void relayoutPage( bool fromResize = false ); 224 void relayoutPage( bool fromResize = false );
223 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom ); 225 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom );
224 QDate currDate; 226 QDate currDate;
225 DateBookDayView *view; 227 DateBookDayView *view;
226 DateBookDayHeader *header; 228 DateBookDayHeader *header;
227 DatebookdayAllday *m_allDays; 229 DatebookdayAllday *m_allDays;
228 DateBookDB *db; 230 DateBookDBHoliday *db;
229 WidgetListClass widgetList; //reimplemented QList for sorting widgets by height 231 WidgetListClass widgetList; //reimplemented QList for sorting widgets by height
230 int startTime; 232 int startTime;
231 bool jumpToCurTime; //should we jump to current time in dayview? 233 bool jumpToCurTime; //should we jump to current time in dayview?
232 int rowStyle; 234 int rowStyle;
233 DateBookDayWidget *selectedWidget; //actual selected widget (obviously) 235 DateBookDayWidget *selectedWidget; //actual selected widget (obviously)
234 DateBookDayTimeMarker *timeMarker; //marker for current time 236 DateBookDayTimeMarker *timeMarker; //marker for current time
235 DateBookHoliday*_holiday_db; 237 DateBookHoliday*_holiday_db;
236}; 238};
237 239
238#endif 240#endif
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp
index 3c3f482..5b40246 100644
--- a/core/pim/datebook/datebookdayallday.cpp
+++ b/core/pim/datebook/datebookdayallday.cpp
@@ -1,65 +1,66 @@
1/**************************************************************************** 1/****************************************************************************
2** GPL by Rajko Albrecht 2** GPL by Rajko Albrecht
3** 3**
4** 4**
5** 5**
6** 6**
7** 7**
8****************************************************************************/ 8****************************************************************************/
9#include "datebookdayallday.h" 9#include "datebookdayallday.h"
10 10
11#include <qlayout.h> 11#include <qlayout.h>
12#include <qpe/ir.h> 12#include <qpe/ir.h>
13#include <qpopupmenu.h> 13#include <qpopupmenu.h>
14#include <qtimer.h> 14#include <qtimer.h>
15 15
16#include "datebookday.h" 16#include "datebookday.h"
17 17
18/* 18/*
19 * Constructs a DatebookdayAllday which is a child of 'parent', with the 19 * Constructs a DatebookdayAllday which is a child of 'parent', with the
20 * name 'name' and widget flags set to 'f' 20 * name 'name' and widget flags set to 'f'
21 */ 21 */
22DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags ) 22DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags )
23 : QScrollView( parent, name ),item_count(0),dateBook(db) 23 : QScrollView( parent, name ),item_count(0),dateBook(db)
24{ 24{
25 if ( !name ) 25 if ( !name )
26 setName( "DatebookdayAllday" ); 26 setName( "DatebookdayAllday" );
27 setMinimumSize( QSize( 0, 0 ) ); 27 setMinimumSize( QSize( 0, 0 ) );
28 setMaximumHeight(3* (QFontMetrics(font()).height()+4) ); 28 setMaximumHeight(3* (QFontMetrics(font()).height()+4) );
29 29
30 m_MainFrame = new QFrame(viewport()); 30 m_MainFrame = new QFrame(viewport());
31 m_MainFrame->setFrameStyle(QFrame::NoFrame|QFrame::Plain); 31 m_MainFrame->setFrameStyle(QFrame::NoFrame|QFrame::Plain);
32 setFrameStyle(QFrame::NoFrame|QFrame::Plain); 32 setFrameStyle(QFrame::NoFrame|QFrame::Plain);
33 setResizePolicy( QScrollView::Default ); 33 //setResizePolicy( QScrollView::Default );
34 setResizePolicy(QScrollView::AutoOneFit);
34 setHScrollBarMode( AlwaysOff ); 35 setHScrollBarMode( AlwaysOff );
35 addChild(m_MainFrame); 36 addChild(m_MainFrame);
36 37
37 datebookdayalldayLayout = new QVBoxLayout( m_MainFrame ); 38 datebookdayalldayLayout = new QVBoxLayout( m_MainFrame );
38 datebookdayalldayLayout->setSpacing( 0 ); 39 datebookdayalldayLayout->setSpacing( 0 );
39 datebookdayalldayLayout->setMargin( 0 ); 40 datebookdayalldayLayout->setMargin( 0 );
40 41
41 lblDesc = new DatebookEventDesc(parent->parentWidget(),""); 42 lblDesc = new DatebookEventDesc(parent->parentWidget(),"");
42 lblDesc->setBackgroundColor(Qt::yellow); 43 lblDesc->setBackgroundColor(Qt::yellow);
43 lblDesc->hide(); 44 lblDesc->hide();
44 subWidgets.setAutoDelete(true); 45 subWidgets.setAutoDelete(true);
45} 46}
46 47
47/* 48/*
48 * Destroys the object and frees any allocated resources 49 * Destroys the object and frees any allocated resources
49 */ 50 */
50DatebookdayAllday::~DatebookdayAllday() 51DatebookdayAllday::~DatebookdayAllday()
51{ 52{
52 // no need to delete child widgets, Qt does it all for us 53 // no need to delete child widgets, Qt does it all for us
53} 54}
54 55
55DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev) 56DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev)
56{ 57{
57 DatebookAlldayDisp * lb; 58 DatebookAlldayDisp * lb;
58 lb = new DatebookAlldayDisp(dateBook,ev,m_MainFrame,NULL); 59 lb = new DatebookAlldayDisp(dateBook,ev,m_MainFrame,NULL);
59 lb->show(); 60 lb->show();
60 datebookdayalldayLayout->addWidget(lb); 61 datebookdayalldayLayout->addWidget(lb);
61 subWidgets.append(lb); 62 subWidgets.append(lb);
62 63
63 connect(lb,SIGNAL(displayMe(const Event&)),lblDesc,SLOT(disp_event(const Event&))); 64 connect(lb,SIGNAL(displayMe(const Event&)),lblDesc,SLOT(disp_event(const Event&)));
64 ++item_count; 65 ++item_count;
65 66
@@ -82,71 +83,76 @@ DatebookAlldayDisp* DatebookdayAllday::addHoliday(const QString&e)
82 83
83void DatebookdayAllday::removeAllEvents() 84void DatebookdayAllday::removeAllEvents()
84{ 85{
85 subWidgets.clear(); 86 subWidgets.clear();
86 item_count = 0; 87 item_count = 0;
87} 88}
88 89
89DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev, 90DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev,
90 QWidget* parent,const char* name,WFlags f) 91 QWidget* parent,const char* name,WFlags f)
91 : QLabel(parent,name,f),m_Ev(ev),dateBook(db) 92 : QLabel(parent,name,f),m_Ev(ev),dateBook(db)
92{ 93{
93 QString strDesc = m_Ev.description(); 94 QString strDesc = m_Ev.description();
94 strDesc = strDesc.replace(QRegExp("<"),"&#60;"); 95 strDesc = strDesc.replace(QRegExp("<"),"&#60;");
95 setBackgroundColor(yellow); 96 setBackgroundColor(yellow);
96 setText(strDesc); 97 setText(strDesc);
97 setFrameStyle(QFrame::Raised|QFrame::Panel); 98 setFrameStyle(QFrame::Raised|QFrame::Panel);
98 99
99 int s = QFontMetrics(font()).height()+4; 100 int s = QFontMetrics(font()).height()+4;
100 setMaximumHeight( s ); 101 setMaximumHeight( s );
101 setMinimumSize( QSize( 0, s ) ); 102 setMinimumSize( QSize( 0, s ) );
102 m_holiday = false; 103 m_holiday = false;
103} 104}
104 105
105DatebookAlldayDisp::DatebookAlldayDisp(const QString&aholiday,QWidget* parent,const char* name, WFlags fl) 106DatebookAlldayDisp::DatebookAlldayDisp(const QString&aholiday,QWidget* parent,const char* name, WFlags fl)
106 : QLabel(parent,name,fl),m_Ev(),dateBook(0) 107 : QLabel(parent,name,fl),m_Ev(),dateBook(0)
107{ 108{
108 QString strDesc = aholiday; 109 QString strDesc = aholiday;
109 strDesc = strDesc.replace(QRegExp("<"),"&#60;"); 110 strDesc = strDesc.replace(QRegExp("<"),"&#60;");
110 Event ev; 111 Event ev;
111 ev.setDescription(strDesc); 112 ev.setDescription(strDesc);
112 ev.setAllDay(true); 113 ev.setAllDay(true);
113 m_Ev.setEvent(ev); 114 m_Ev.setEvent(ev);
114 setBackgroundColor(yellow);
115 setText(strDesc); 115 setText(strDesc);
116 setFrameStyle(QFrame::Raised|QFrame::Panel); 116
117 setAlignment(AlignHCenter);
118 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum));
119
120 //setFrameStyle(QFrame::Raised|QFrame::Panel);
121 //setBackgroundColor(yellow);
117 122
118 int s = QFontMetrics(font()).height()+4; 123 int s = QFontMetrics(font()).height()+4;
119 setMaximumHeight( s ); 124 setMaximumHeight( s );
120 setMinimumSize( QSize( 0, s ) ); 125 setMinimumSize( QSize( 0, s ) );
126
121 m_holiday = true; 127 m_holiday = true;
122} 128}
123 129
124DatebookAlldayDisp::~DatebookAlldayDisp() 130DatebookAlldayDisp::~DatebookAlldayDisp()
125{ 131{
126} 132}
127 133
128void DatebookAlldayDisp::beam_single_event() 134void DatebookAlldayDisp::beam_single_event()
129{ 135{
130 if (m_holiday) return; 136 if (m_holiday) return;
131 // create an Event and beam it... 137 // create an Event and beam it...
132 /* 138 /*
133 * Start with the easy stuff. If start and end date is the same we can just use 139 * Start with the easy stuff. If start and end date is the same we can just use
134 * the values of effective m_Events 140 * the values of effective m_Events
135 * If it is a multi day m_Event we need to find the real start and end date... 141 * If it is a multi day m_Event we need to find the real start and end date...
136 */ 142 */
137 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) { 143 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) {
138 Event m_Event( m_Ev.event() ); 144 Event m_Event( m_Ev.event() );
139 145
140 QDateTime dt( m_Ev.date(), m_Ev.start() ); 146 QDateTime dt( m_Ev.date(), m_Ev.start() );
141 m_Event.setStart( dt ); 147 m_Event.setStart( dt );
142 148
143 dt.setTime( m_Ev.end() ); 149 dt.setTime( m_Ev.end() );
144 m_Event.setEnd( dt ); 150 m_Event.setEnd( dt );
145 emit beamMe( m_Event ); 151 emit beamMe( m_Event );
146 }else { 152 }else {
147 /* 153 /*
148 * at least the the Times are right now 154 * at least the the Times are right now
149 */ 155 */
150 QDateTime start( m_Ev.event().start() ); 156 QDateTime start( m_Ev.event().start() );
151 QDateTime end ( m_Ev.event().end () ); 157 QDateTime end ( m_Ev.event().end () );
152 158
diff --git a/core/pim/datebook/datebooktypes.h b/core/pim/datebook/datebooktypes.h
new file mode 100644
index 0000000..9eb7e89
--- a/dev/null
+++ b/core/pim/datebook/datebooktypes.h
@@ -0,0 +1,59 @@
1#ifndef _DATEBOOK_TYPES_H
2#define _DATEBOOK_TYPES_H
3
4#include <qpe/datebookdb.h>
5
6#include <qvaluelist.h>
7#include <qstringlist.h>
8
9namespace Opie {
10namespace Datebook {
11 class HolidayPlugin;
12 class HolidayPluginIf;
13}
14}
15
16class QLibrary;
17
18class DateBookDBHack : virtual public DateBookDB {
19 public:
20 virtual ~DateBookDBHack(){}
21 Event eventByUID(int id);
22};
23
24class DateBookHoliday
25{
26public:
27 DateBookHoliday();
28 virtual ~DateBookHoliday();
29
30 QStringList holidaylist(const QDate&);
31 QStringList holidaylist(unsigned year, unsigned month, unsigned day);
32 virtual QValueList<EffectiveEvent> getEffectiveEvents(const QDate &from,const QDate &to );
33 virtual QValueList<EffectiveEvent> getEffectiveEvents(const QDateTime &start);
34
35protected:
36 void init();
37 void deinit();
38
39 struct HPlugin {
40 Opie::Datebook::HolidayPlugin*_plugin;
41 QLibrary*_lib;
42 Opie::Datebook::HolidayPluginIf*_if;
43 };
44 QValueList<HPlugin*>_pluginlist;
45};
46
47class DateBookDBHoliday:virtual public DateBookDBHack {
48public:
49 DateBookDBHoliday():DateBookDBHack(){db_holiday=0;}
50 virtual ~DateBookDBHoliday(){}
51 virtual QValueList<EffectiveEvent> getEffectiveEvents(const QDate &from,const QDate &to );
52 virtual QValueList<EffectiveEvent> getEffectiveEvents(const QDateTime &start);
53 virtual QValueList<EffectiveEvent> getEffectiveEventsNoHoliday(const QDate &from,const QDate &to );
54 virtual QValueList<EffectiveEvent> getEffectiveEventsNoHoliday(const QDateTime &start);
55
56 DateBookHoliday*db_holiday;
57};
58
59#endif
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
index 7503751..a509d89 100644
--- a/core/pim/datebook/datebookweek.cpp
+++ b/core/pim/datebook/datebookweek.cpp
@@ -1,675 +1,676 @@
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 "datebookweek.h" 20#include "datebookweek.h"
21#include "datebookweekheaderimpl.h" 21#include "datebookweekheaderimpl.h"
22#include "datebooktypes.h"
22 23
23#include <qpe/datebookdb.h> 24#include <qpe/datebookdb.h>
24#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
25#include <qpe/calendar.h> 26#include <qpe/calendar.h>
26 27
27#include <qheader.h> 28#include <qheader.h>
28#include <qlabel.h> 29#include <qlabel.h>
29#include <qlayout.h> 30#include <qlayout.h>
30#include <qtimer.h> 31#include <qtimer.h>
31 32
32//----------------------------------------------------------------- 33//-----------------------------------------------------------------
33 34
34 35
35DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e ) 36DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e )
36 : ev( e ) 37 : ev( e )
37{ 38{
38 // with the current implementation change the color for all day events 39 // with the current implementation change the color for all day events
39 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) { 40 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) {
40 c = Qt::green; 41 c = Qt::green;
41 } else { 42 } else {
42 c = ev.event().hasAlarm() ? Qt::red : Qt::blue; 43 c = ev.event().hasAlarm() ? Qt::red : Qt::blue;
43 } 44 }
44} 45}
45 46
46void DateBookWeekItem::setGeometry( int x, int y, int w, int h ) 47void DateBookWeekItem::setGeometry( int x, int y, int w, int h )
47{ 48{
48 r.setRect( x, y, w, h ); 49 r.setRect( x, y, w, h );
49} 50}
50 51
51 52
52//------------------=--------------------------------------------- 53//------------------=---------------------------------------------
53 54
54DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday, 55DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
55 QWidget *parent, const char *name ) 56 QWidget *parent, const char *name )
56 : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ), 57 : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ),
57 showingEvent( false ) 58 showingEvent( false )
58{ 59{
59 items.setAutoDelete( true ); 60 items.setAutoDelete( true );
60 61
61 viewport()->setBackgroundMode( PaletteBase ); 62 viewport()->setBackgroundMode( PaletteBase );
62 63
63 header = new QHeader( this ); 64 header = new QHeader( this );
64 header->addLabel( "" ); 65 header->addLabel( "" );
65 66
66 header->setMovingEnabled( false ); 67 header->setMovingEnabled( false );
67 header->setResizeEnabled( false ); 68 header->setResizeEnabled( false );
68 header->setClickEnabled( false, 0 ); 69 header->setClickEnabled( false, 0 );
69 initNames(); 70 initNames();
70 71
71 72
72 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) ); 73 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) );
73 74
74 QObject::connect(qApp, SIGNAL(clockChanged(bool)), 75 QObject::connect(qApp, SIGNAL(clockChanged(bool)),
75 this, SLOT(slotChangeClock(bool))); 76 this, SLOT(slotChangeClock(bool)));
76 77
77 QFontMetrics fm( font() ); 78 QFontMetrics fm( font() );
78 rowHeight = fm.height()+2; 79 rowHeight = fm.height()+2;
79 80
80 resizeContents( width(), 24*rowHeight ); 81 resizeContents( width(), 24*rowHeight );
81} 82}
82 83
83void DateBookWeekView::initNames() 84void DateBookWeekView::initNames()
84{ 85{
85 86
86 static bool bFirst = true; 87 static bool bFirst = true;
87 if ( bFirst ) { 88 if ( bFirst ) {
88 if ( bOnMonday ) { 89 if ( bOnMonday ) {
89 for ( int i = 1; i<=7; i++ ) { 90 for ( int i = 1; i<=7; i++ ) {
90 header->addLabel( Calendar::nameOfDay( i ) ); 91 header->addLabel( Calendar::nameOfDay( i ) );
91 } 92 }
92 93
93 } else { 94 } else {
94 header->addLabel( Calendar::nameOfDay( 7 ) ); 95 header->addLabel( Calendar::nameOfDay( 7 ) );
95 for ( int i = 1; i<7; i++ ) { 96 for ( int i = 1; i<7; i++ ) {
96 header->addLabel( Calendar::nameOfDay( i ) ); 97 header->addLabel( Calendar::nameOfDay( i ) );
97 } 98 }
98 } 99 }
99 bFirst = false; 100 bFirst = false;
100 } else { 101 } else {
101 // we are change things... 102 // we are change things...
102 if ( bOnMonday ) { 103 if ( bOnMonday ) {
103 for ( int i = 1; i<=7; i++ ) { 104 for ( int i = 1; i<=7; i++ ) {
104 header->setLabel( i, Calendar::nameOfDay( i ) ); 105 header->setLabel( i, Calendar::nameOfDay( i ) );
105 } 106 }
106 107
107 } else { 108 } else {
108 header->setLabel( 1, Calendar::nameOfDay( 7 ) ); 109 header->setLabel( 1, Calendar::nameOfDay( 7 ) );
109 for ( int i = 1; i<7; i++ ) { 110 for ( int i = 1; i<7; i++ ) {
110 header->setLabel( i+1, Calendar::nameOfDay( i ) ); 111 header->setLabel( i+1, Calendar::nameOfDay( i ) );
111 } 112 }
112 113
113 } 114 }
114 } 115 }
115} 116}
116 117
117 118
118 119
119void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev ) 120void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev )
120{ 121{
121 items.clear(); 122 items.clear();
122 QValueListIterator<EffectiveEvent> it; 123 QValueListIterator<EffectiveEvent> it;
123 for ( it = ev.begin(); it != ev.end(); ++it ) { 124 for ( it = ev.begin(); it != ev.end(); ++it ) {
124 DateBookWeekItem *i = new DateBookWeekItem( *it ); 125 DateBookWeekItem *i = new DateBookWeekItem( *it );
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. 126 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.
126 positionItem( i ); 127 positionItem( i );
127 items.append( i ); 128 items.append( i );
128 } 129 }
129 } 130 }
130 viewport()->update(); 131 viewport()->update();
131} 132}
132 133
133void DateBookWeekView::moveToHour( int h ) 134void DateBookWeekView::moveToHour( int h )
134{ 135{
135 int offset = h*rowHeight; 136 int offset = h*rowHeight;
136 setContentsPos( 0, offset ); 137 setContentsPos( 0, offset );
137} 138}
138 139
139void DateBookWeekView::keyPressEvent( QKeyEvent *e ) 140void DateBookWeekView::keyPressEvent( QKeyEvent *e )
140{ 141{
141 e->ignore(); 142 e->ignore();
142} 143}
143 144
144void DateBookWeekView::slotChangeClock( bool c ) 145void DateBookWeekView::slotChangeClock( bool c )
145{ 146{
146 ampm = c; 147 ampm = c;
147 viewport()->update(); 148 viewport()->update();
148} 149}
149 150
150static inline int db_round30min( int m ) 151static inline int db_round30min( int m )
151{ 152{
152 if ( m < 15 ) 153 if ( m < 15 )
153 m = 0; 154 m = 0;
154 else if ( m < 45 ) 155 else if ( m < 45 )
155 m = 1; 156 m = 1;
156 else 157 else
157 m = 2; 158 m = 2;
158 159
159 return m; 160 return m;
160} 161}
161 162
162void DateBookWeekView::alterDay( int day ) 163void DateBookWeekView::alterDay( int day )
163{ 164{
164 if ( !bOnMonday ) { 165 if ( !bOnMonday ) {
165 day--; 166 day--;
166 } 167 }
167 emit showDay( day ); 168 emit showDay( day );
168} 169}
169 170
170void DateBookWeekView::positionItem( DateBookWeekItem *i ) 171void DateBookWeekView::positionItem( DateBookWeekItem *i )
171{ 172{
172 const int Width = 8; 173 const int Width = 8;
173 const EffectiveEvent ev = i->event(); 174 const EffectiveEvent ev = i->event();
174 175
175 // 30 minute intervals 176 // 30 minute intervals
176 int y = ev.start().hour() * 2; 177 int y = ev.start().hour() * 2;
177 y += db_round30min( ev.start().minute() ); 178 y += db_round30min( ev.start().minute() );
178 int y2 = ev.end().hour() * 2; 179 int y2 = ev.end().hour() * 2;
179 y2 += db_round30min( ev.end().minute() ); 180 y2 += db_round30min( ev.end().minute() );
180 if ( y > 47 ) y = 47; 181 if ( y > 47 ) y = 47;
181 if ( y2 > 48 ) y2 = 48; 182 if ( y2 > 48 ) y2 = 48;
182 y = (y * rowHeight) / 2; 183 y = (y * rowHeight) / 2;
183 y2 = (y2 * rowHeight) / 2; 184 y2 = (y2 * rowHeight) / 2;
184 185
185 int h; 186 int h;
186 if ( ev.event().type() == Event::AllDay ) { 187 if ( ev.event().type() == Event::AllDay ) {
187 h = (48 * rowHeight) / 2; 188 h = (48 * rowHeight) / 2;
188 y = 0; 189 y = 0;
189 } else { 190 } else {
190 h=y2-y; 191 h=y2-y;
191 if ( h < (1*rowHeight)/2 ) h = (1*rowHeight)/2; 192 if ( h < (1*rowHeight)/2 ) h = (1*rowHeight)/2;
192 } 193 }
193 194
194 int dow = ev.date().dayOfWeek(); 195 int dow = ev.date().dayOfWeek();
195 if ( !bOnMonday ) { 196 if ( !bOnMonday ) {
196 if ( dow == 7 ) 197 if ( dow == 7 )
197 dow = 1; 198 dow = 1;
198 else 199 else
199 dow++; 200 dow++;
200 } 201 }
201 int x = header->sectionPos( dow ) - 1; 202 int x = header->sectionPos( dow ) - 1;
202 int xlim = header->sectionPos( dow ) + header->sectionSize( dow ); 203 int xlim = header->sectionPos( dow ) + header->sectionSize( dow );
203 DateBookWeekItem *isect = 0; 204 DateBookWeekItem *isect = 0;
204 do { 205 do {
205 i->setGeometry( x, y, Width, h ); 206 i->setGeometry( x, y, Width, h );
206 isect = intersects( i ); 207 isect = intersects( i );
207 x += Width - 1; 208 x += Width - 1;
208 } while ( isect && x < xlim ); 209 } while ( isect && x < xlim );
209} 210}
210 211
211DateBookWeekItem *DateBookWeekView::intersects( const DateBookWeekItem *item ) 212DateBookWeekItem *DateBookWeekView::intersects( const DateBookWeekItem *item )
212{ 213{
213 QRect geom = item->geometry(); 214 QRect geom = item->geometry();
214 215
215 // We allow the edges to overlap 216 // We allow the edges to overlap
216 geom.moveBy( 1, 1 ); 217 geom.moveBy( 1, 1 );
217 geom.setSize( geom.size()-QSize(2,2) ); 218 geom.setSize( geom.size()-QSize(2,2) );
218 219
219 QListIterator<DateBookWeekItem> it(items); 220 QListIterator<DateBookWeekItem> it(items);
220 for ( ; it.current(); ++it ) { 221 for ( ; it.current(); ++it ) {
221 DateBookWeekItem *i = it.current(); 222 DateBookWeekItem *i = it.current();
222 if ( i != item ) { 223 if ( i != item ) {
223 if ( i->geometry().intersects( geom ) ) { 224 if ( i->geometry().intersects( geom ) ) {
224 return i; 225 return i;
225 } 226 }
226 } 227 }
227 } 228 }
228 229
229 return 0; 230 return 0;
230} 231}
231 232
232void DateBookWeekView::contentsMousePressEvent( QMouseEvent *e ) 233void DateBookWeekView::contentsMousePressEvent( QMouseEvent *e )
233{ 234{
234 QListIterator<DateBookWeekItem> it(items); 235 QListIterator<DateBookWeekItem> it(items);
235 for ( ; it.current(); ++it ) { 236 for ( ; it.current(); ++it ) {
236 DateBookWeekItem *i = it.current(); 237 DateBookWeekItem *i = it.current();
237 if ( i->geometry().contains( e->pos() ) ) { 238 if ( i->geometry().contains( e->pos() ) ) {
238 showingEvent = true; 239 showingEvent = true;
239 emit signalShowEvent( i->event() ); 240 emit signalShowEvent( i->event() );
240 break; 241 break;
241 } 242 }
242 } 243 }
243} 244}
244 245
245void DateBookWeekView::contentsMouseReleaseEvent( QMouseEvent *e ) 246void DateBookWeekView::contentsMouseReleaseEvent( QMouseEvent *e )
246{ 247{
247 if ( showingEvent ) { 248 if ( showingEvent ) {
248 showingEvent = false; 249 showingEvent = false;
249 emit signalHideEvent(); 250 emit signalHideEvent();
250 } else { 251 } else {
251 int d = header->sectionAt( e->pos().x() ); 252 int d = header->sectionAt( e->pos().x() );
252 if ( d > 0 ) { 253 if ( d > 0 ) {
253 // if ( !bOnMonday ) 254// if ( !bOnMonday )
254 // d--; 255// d--;
255 emit showDay( d ); 256 emit showDay( d );
256 } 257 }
257 } 258 }
258} 259}
259 260
260void DateBookWeekView::drawContents( QPainter *p, int cx, int cy, int cw, int ch ) 261void DateBookWeekView::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
261{ 262{
262 QRect ur( cx, cy, cw, ch ); 263 QRect ur( cx, cy, cw, ch );
263 p->setPen( lightGray ); 264 p->setPen( lightGray );
264 for ( int i = 1; i <= 7; i++ ) 265 for ( int i = 1; i <= 7; i++ )
265 p->drawLine( header->sectionPos(i)-2, cy, header->sectionPos(i)-2, cy+ch ); 266 p->drawLine( header->sectionPos(i)-2, cy, header->sectionPos(i)-2, cy+ch );
266 267
267 p->setPen( black ); 268 p->setPen( black );
268 for ( int t = 0; t < 24; t++ ) { 269 for ( int t = 0; t < 24; t++ ) {
269 int y = t*rowHeight; 270 int y = t*rowHeight;
270 if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) { 271 if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) {
271 QString s; 272 QString s;
272 if ( ampm ) { 273 if ( ampm ) {
273 if ( t == 0 ) 274 if ( t == 0 )
274 s = QString::number( 12 ); 275 s = QString::number( 12 );
275 else if ( t == 12 ) 276 else if ( t == 12 )
276 s = QString::number(12) + tr( "p" ); 277 s = QString::number(12) + tr( "p" );
277 else if ( t > 12 ) { 278 else if ( t > 12 ) {
278 if ( t - 12 < 10 ) 279 if ( t - 12 < 10 )
279 s = " "; 280 s = " ";
280 else 281 else
281 s = ""; 282 s = "";
282 s += QString::number( t - 12 ) + tr("p"); 283 s += QString::number( t - 12 ) + tr("p");
283 } else { 284 } else {
284 if ( 12 - t < 3 ) 285 if ( 12 - t < 3 )
285 s = ""; 286 s = "";
286 else 287 else
287 s = " "; 288 s = " ";
288 s += QString::number( t ); 289 s += QString::number( t );
289 } 290 }
290 } else { 291 } else {
291 s = QString::number( t ); 292 s = QString::number( t );
292 if ( s.length() == 1 ) 293 if ( s.length() == 1 )
293 s.prepend( "0" ); 294 s.prepend( "0" );
294 } 295 }
295 p->drawText( 1, y+p->fontMetrics().ascent()+1, s ); 296 p->drawText( 1, y+p->fontMetrics().ascent()+1, s );
296 } 297 }
297 } 298 }
298 299
299 QListIterator<DateBookWeekItem> it(items); 300 QListIterator<DateBookWeekItem> it(items);
300 for ( ; it.current(); ++it ) { 301 for ( ; it.current(); ++it ) {
301 DateBookWeekItem *i = it.current(); 302 DateBookWeekItem *i = it.current();
302 if ( i->geometry().intersects( ur ) ) { 303 if ( i->geometry().intersects( ur ) ) {
303 p->setBrush( i->color() ); 304 p->setBrush( i->color() );
304 p->drawRect( i->geometry() ); 305 p->drawRect( i->geometry() );
305 } 306 }
306 } 307 }
307} 308}
308 309
309void DateBookWeekView::resizeEvent( QResizeEvent *e ) 310void DateBookWeekView::resizeEvent( QResizeEvent *e )
310{ 311{
311 const int hourWidth = 20; 312 const int hourWidth = 20;
312 QScrollView::resizeEvent( e ); 313 QScrollView::resizeEvent( e );
313 314
314 315
315 //HEAD 316 //HEAD
316 /* 317 /*
317 int avail = visibleWidth(); 318 int avail = visibleWidth();
318 header->setGeometry( leftMargin()+frameWidth()+frameRect().left() , frameWidth(), 319 header->setGeometry( leftMargin()+frameWidth()+frameRect().left() , frameWidth(),
319 visibleWidth(), header->sizeHint().height() ); 320 visibleWidth(), header->sizeHint().height() );
320 setMargins( 0, header->sizeHint().height(), 0, 0 ); 321 setMargins( 0, header->sizeHint().height(), 0, 0 );
321 */ 322 */
322 //BRANCH_1_0 323 //BRANCH_1_0
323 int avail = width()-qApp->style().scrollBarExtent().width()-1; 324 int avail = width()-qApp->style().scrollBarExtent().width()-1;
324 header->setGeometry( 0, 0, avail, header->sizeHint().height() ); 325 header->setGeometry( 0, 0, avail, header->sizeHint().height() );
325 setMargins( 0, header->height(), 0, 0 ); 326 setMargins( 0, header->height(), 0, 0 );
326 327
327 328
328 header->resizeSection( 0, hourWidth ); 329 header->resizeSection( 0, hourWidth );
329 int sw = (avail - hourWidth) / 7; 330 int sw = (avail - hourWidth) / 7;
330 for ( int i = 1; i < 7; i++ ) 331 for ( int i = 1; i < 7; i++ )
331 header->resizeSection( i, sw ); 332 header->resizeSection( i, sw );
332 header->resizeSection( 7, avail - hourWidth - sw*6 ); 333 header->resizeSection( 7, avail - hourWidth - sw*6 );
333} 334}
334 335
335void DateBookWeekView::setStartOfWeek( bool bStartOnMonday ) 336void DateBookWeekView::setStartOfWeek( bool bStartOnMonday )
336{ 337{
337 bOnMonday = bStartOnMonday; 338 bOnMonday = bStartOnMonday;
338 initNames(); 339 initNames();
339} 340}
340 341
341//------------------------------------------------------------------- 342//-------------------------------------------------------------------
342 343
343DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB, 344DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDBHoliday *newDB,
344 QWidget *parent, const char *name ) 345 QWidget *parent, const char *name )
345 : QWidget( parent, name ), 346 : QWidget( parent, name ),
346 db( newDB ), 347 db( newDB ),
347 startTime( 0 ), 348 startTime( 0 ),
348 ampm( ap ), 349 ampm( ap ),
349 bStartOnMonday( startOnMonday ) 350 bStartOnMonday( startOnMonday )
350{ 351{
351 setFocusPolicy(StrongFocus); 352 setFocusPolicy(StrongFocus);
352 QVBoxLayout *vb = new QVBoxLayout( this ); 353 QVBoxLayout *vb = new QVBoxLayout( this );
353 header = new DateBookWeekHeader( bStartOnMonday, this ); 354 header = new DateBookWeekHeader( bStartOnMonday, this );
354 view = new DateBookWeekView( ampm, startOnMonday, this ); 355 view = new DateBookWeekView( ampm, startOnMonday, this );
355 vb->addWidget( header ); 356 vb->addWidget( header );
356 vb->addWidget( view ); 357 vb->addWidget( view );
357 358
358 lblDesc = new QLabel( this, "event label" ); 359 lblDesc = new QLabel( this, "event label" );
359 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box ); 360 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
360 lblDesc->setBackgroundColor( yellow ); 361 lblDesc->setBackgroundColor( yellow );
361 lblDesc->hide(); 362 lblDesc->hide();
362 363
363 tHide = new QTimer( this ); 364 tHide = new QTimer( this );
364 365
365 connect( view, SIGNAL( showDay(int) ), this, SLOT( showDay(int) ) ); 366 connect( view, SIGNAL( showDay(int) ), this, SLOT( showDay(int) ) );
366 connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) ); 367 connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) );
367 connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) ); 368 connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) );
368 connect( header, SIGNAL( dateChanged(QDate&) ), this, SLOT( dateChanged(QDate&) ) ); 369 connect( header, SIGNAL( dateChanged(QDate&) ), this, SLOT( dateChanged(QDate&) ) );
369 connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) ); 370 connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) );
370 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) ); 371 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
371 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool))); 372 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool)));
372 setDate(QDate::currentDate()); 373 setDate(QDate::currentDate());
373} 374}
374 375
375void DateBookWeek::keyPressEvent(QKeyEvent *e) 376void DateBookWeek::keyPressEvent(QKeyEvent *e)
376{ 377{
377 switch(e->key()) { 378 switch(e->key()) {
378 case Key_Up: 379 case Key_Up:
379 view->scrollBy(0, -20); 380 view->scrollBy(0, -20);
380 break; 381 break;
381 case Key_Down: 382 case Key_Down:
382 view->scrollBy(0, 20); 383 view->scrollBy(0, 20);
383 break; 384 break;
384 case Key_Left: 385 case Key_Left:
385 setDate(date().addDays(-7)); 386 setDate(date().addDays(-7));
386 break; 387 break;
387 case Key_Right: 388 case Key_Right:
388 setDate(date().addDays(7)); 389 setDate(date().addDays(7));
389 break; 390 break;
390 default: 391 default:
391 e->ignore(); 392 e->ignore();
392 } 393 }
393} 394}
394 395
395void DateBookWeek::showDay( int day ) 396void DateBookWeek::showDay( int day )
396{ 397{
397 QDate d=bdate; 398 QDate d=bdate;
398 399
399 // Calculate offset to first day of week. 400 // Calculate offset to first day of week.
400 int dayoffset=d.dayOfWeek() % 7; 401 int dayoffset=d.dayOfWeek() % 7;
401 402
402 if(bStartOnMonday) dayoffset--; 403 if(bStartOnMonday) dayoffset--;
403 404
404 day--; 405 day--;
405 d=d.addDays(day-dayoffset); 406 d=d.addDays(day-dayoffset);
406 emit showDate( d.year(), d.month(), d.day() ); 407 emit showDate( d.year(), d.month(), d.day() );
407} 408}
408 409
409void DateBookWeek::setDate( int y, int m, int d ) 410void DateBookWeek::setDate( int y, int m, int d )
410{ 411{
411 setDate(QDate(y, m, d)); 412 setDate(QDate(y, m, d));
412} 413}
413 414
414void DateBookWeek::setDate(QDate newdate) 415void DateBookWeek::setDate(QDate newdate)
415{ 416{
416 bdate=newdate; 417 bdate=newdate;
417 dow = newdate.dayOfWeek(); 418 dow = newdate.dayOfWeek();
418 header->setDate( newdate ); 419 header->setDate( newdate );
419} 420}
420 421
421void DateBookWeek::dateChanged( QDate &newdate ) 422void DateBookWeek::dateChanged( QDate &newdate )
422{ 423{
423 bdate=newdate; 424 bdate=newdate;
424 getEvents(); 425 getEvents();
425} 426}
426 427
427QDate DateBookWeek::date() const 428QDate DateBookWeek::date() const
428{ 429{
429 return bdate; 430 return bdate;
430} 431}
431 432
432void DateBookWeek::getEvents() 433void DateBookWeek::getEvents()
433{ 434{
434 QDate startWeek = weekDate(); 435 QDate startWeek = weekDate();
435 436
436 QDate endWeek = startWeek.addDays( 6 ); 437 QDate endWeek = startWeek.addDays( 6 );
437 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek); 438 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek);
438 view->showEvents( eventList ); 439 view->showEvents( eventList );
439 view->moveToHour( startTime ); 440 view->moveToHour( startTime );
440} 441}
441 442
442void DateBookWeek::generateAllDayTooltext( QString& text ) { 443void DateBookWeek::generateAllDayTooltext( QString& text ) {
443 text += "<b>" + tr("This is an all day event.") + "</b><br>"; 444 text += "<b>" + tr("This is an all day event.") + "</b><br>";
444} 445}
445 446
446void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) { 447void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) {
447 str += "<b>" + QObject::tr("Start") + "</b>: "; 448 str += "<b>" + QObject::tr("Start") + "</b>: ";
448 str += TimeString::timeString( ev.event().start().time(), ampm, FALSE ); 449 str += TimeString::timeString( ev.event().start().time(), ampm, FALSE );
449 if( ev.startDate()!=ev.endDate() ) { 450 if( ev.startDate()!=ev.endDate() ) {
450 str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>"; 451 str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>";
451 } 452 }
452 str += "<br>"; 453 str += "<br>";
453 str += "<b>" + QObject::tr("End") + "</b>: "; 454 str += "<b>" + QObject::tr("End") + "</b>: ";
454 str += TimeString::timeString( ev.event().end().time(), ampm, FALSE ); 455 str += TimeString::timeString( ev.event().end().time(), ampm, FALSE );
455 if( ev.startDate()!=ev.endDate() ) { 456 if( ev.startDate()!=ev.endDate() ) {
456 str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>"; 457 str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>";
457 } 458 }
458} 459}
459 460
460void DateBookWeek::slotShowEvent( const EffectiveEvent &ev ) 461void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
461{ 462{
462 if ( tHide->isActive() ) 463 if ( tHide->isActive() )
463 tHide->stop(); 464 tHide->stop();
464 465
465 // why would someone use "<"? Oh well, fix it up... 466 // why would someone use "<"? Oh well, fix it up...
466 // I wonder what other things may be messed up... 467 // I wonder what other things may be messed up...
467 QString strDesc = ev.description(); 468 QString strDesc = ev.description();
468 int where = strDesc.find( "<" ); 469 int where = strDesc.find( "<" );
469 while ( where != -1 ) { 470 while ( where != -1 ) {
470 strDesc.remove( where, 1 ); 471 strDesc.remove( where, 1 );
471 strDesc.insert( where, "&#60;" ); 472 strDesc.insert( where, "&#60;" );
472 where = strDesc.find( "<", where ); 473 where = strDesc.find( "<", where );
473 } 474 }
474 475
475 QString strCat; 476 QString strCat;
476 // ### FIX later... 477 // ### FIX later...
477// QString strCat = ev.category(); 478// QString strCat = ev.category();
478// where = strCat.find( "<" ); 479// where = strCat.find( "<" );
479// while ( where != -1 ) { 480// while ( where != -1 ) {
480 // strCat.remove( where, 1 ); 481// strCat.remove( where, 1 );
481 // strCat.insert( where, "&#60;" ); 482// strCat.insert( where, "&#60;" );
482 // where = strCat.find( "<", where ); 483// where = strCat.find( "<", where );
483// } 484// }
484 485
485 QString strLocation = ev.location(); 486 QString strLocation = ev.location();
486 while ( where != -1 ) { 487 while ( where != -1 ) {
487 strLocation.remove( where, 1 ); 488 strLocation.remove( where, 1 );
488 strLocation.insert( where, "&#60;" ); 489 strLocation.insert( where, "&#60;" );
489 where = strLocation.find( "<", where ); 490 where = strLocation.find( "<", where );
490 } 491 }
491 492
492 QString strNote = ev.notes(); 493 QString strNote = ev.notes();
493 where = strNote.find( "<" ); 494 where = strNote.find( "<" );
494 while ( where != -1 ) { 495 while ( where != -1 ) {
495 strNote.remove( where, 1 ); 496 strNote.remove( where, 1 );
496 strNote.insert( where, "&#60;" ); 497 strNote.insert( where, "&#60;" );
497 where = strNote.find( "<", where ); 498 where = strNote.find( "<", where );
498 } 499 }
499 500
500 QString str = "<b>" + strDesc + "</b><br>" 501 QString str = "<b>" + strDesc + "</b><br>"
501 + strLocation + "<br>" 502 + strLocation + "<br>"
502 + "<i>" + strCat + "</i>" 503 + "<i>" + strCat + "</i>"
503 + "<br>" + TimeString::longDateString( ev.date() ) 504 + "<br>" + TimeString::longDateString( ev.date() )
504 + "<br>"; 505 + "<br>";
505 506
506 if (ev.event().type() == Event::Normal ) 507 if (ev.event().type() == Event::Normal )
507 generateNormalTooltext( str, ev ); 508 generateNormalTooltext( str, ev );
508 else 509 else
509 generateAllDayTooltext( str ); 510 generateAllDayTooltext( str );
510 511
511 str += "<br><br>" + strNote; 512 str += "<br><br>" + strNote;
512 513
513 lblDesc->setText( str ); 514 lblDesc->setText( str );
514 lblDesc->resize( lblDesc->sizeHint() ); 515 lblDesc->resize( lblDesc->sizeHint() );
515 // move the label so it is "centerd" horizontally... 516 // move the label so it is "centerd" horizontally...
516 lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 ); 517 lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 );
517 lblDesc->show(); 518 lblDesc->show();
518} 519}
519 520
520void DateBookWeek::slotHideEvent() 521void DateBookWeek::slotHideEvent()
521{ 522{
522 tHide->start( 2000, true ); 523 tHide->start( 2000, true );
523} 524}
524 525
525void DateBookWeek::setStartViewTime( int startHere ) 526void DateBookWeek::setStartViewTime( int startHere )
526{ 527{
527 startTime = startHere; 528 startTime = startHere;
528 view->moveToHour( startTime ); 529 view->moveToHour( startTime );
529} 530}
530 531
531int DateBookWeek::startViewTime() const 532int DateBookWeek::startViewTime() const
532{ 533{
533 return startTime; 534 return startTime;
534} 535}
535 536
536void DateBookWeek::redraw() 537void DateBookWeek::redraw()
537{ 538{
538 getEvents(); 539 getEvents();
539} 540}
540 541
541void DateBookWeek::slotYearChanged( int y ) 542void DateBookWeek::slotYearChanged( int y )
542{ 543{
543 int totWeek; 544 int totWeek;
544 QDate d( y, 12, 31 ); 545 QDate d( y, 12, 31 );
545 int throwAway; 546 int throwAway;
546 calcWeek( d, totWeek, throwAway, bStartOnMonday ); 547 calcWeek( d, totWeek, throwAway, bStartOnMonday );
547 while ( totWeek == 1 ) { 548 while ( totWeek == 1 ) {
548 d = d.addDays( -1 ); 549 d = d.addDays( -1 );
549 calcWeek( d, totWeek, throwAway, bStartOnMonday ); 550 calcWeek( d, totWeek, throwAway, bStartOnMonday );
550 } 551 }
551} 552}
552 553
553void DateBookWeek::slotWeekChanged( bool onMonday ) 554void DateBookWeek::slotWeekChanged( bool onMonday )
554{ 555{
555 bStartOnMonday = onMonday; 556 bStartOnMonday = onMonday;
556 view->setStartOfWeek( bStartOnMonday ); 557 view->setStartOfWeek( bStartOnMonday );
557 header->setStartOfWeek( bStartOnMonday ); 558 header->setStartOfWeek( bStartOnMonday );
558 redraw(); 559 redraw();
559} 560}
560 561
561void DateBookWeek::slotClockChanged( bool ap ) 562void DateBookWeek::slotClockChanged( bool ap )
562{ 563{
563 ampm = ap; 564 ampm = ap;
564} 565}
565 566
566// return the date at the beginning of the week... 567// return the date at the beginning of the week...
567QDate DateBookWeek::weekDate() const 568QDate DateBookWeek::weekDate() const
568{ 569{
569 QDate d=bdate; 570 QDate d=bdate;
570 571
571 // Calculate offset to first day of week. 572 // Calculate offset to first day of week.
572 int dayoffset=d.dayOfWeek(); 573 int dayoffset=d.dayOfWeek();
573 if(bStartOnMonday) dayoffset--; 574 if(bStartOnMonday) dayoffset--;
574 else if( dayoffset == 7 ) 575 else if( dayoffset == 7 )
575 dayoffset = 0; 576 dayoffset = 0;
576 577
577 return d.addDays(-dayoffset); 578 return d.addDays(-dayoffset);
578} 579}
579 580
580// this used to only be needed by datebook.cpp, but now we need it inside 581// this used to only be needed by datebook.cpp, but now we need it inside
581// week view since 582// week view since
582// we need to be able to figure out our total number of weeks on the fly... 583// we need to be able to figure out our total number of weeks on the fly...
583// this is probably the best place to put it.. 584// this is probably the best place to put it..
584 585
585// For Weeks that start on Monday... (EASY!) 586// For Weeks that start on Monday... (EASY!)
586// At the moment we will use ISO 8601 method for computing 587// At the moment we will use ISO 8601 method for computing
587// the week. Granted, other countries use other methods, 588// the week. Granted, other countries use other methods,
588// bet we aren't doing any Locale stuff at the moment. So, 589// bet we aren't doing any Locale stuff at the moment. So,
589// this should pass. This Algorithim is public domain and 590// this should pass. This Algorithim is public domain and
590// available at: 591// available at:
591// http://personal.ecu.edu/mccartyr/ISOwdALG.txt 592// http://personal.ecu.edu/mccartyr/ISOwdALG.txt
592// the week number is return, and the year number is returned in year 593// the week number is return, and the year number is returned in year
593// for Instance 2001/12/31 is actually the first week in 2002. 594// for Instance 2001/12/31 is actually the first week in 2002.
594// There is a more mathematical definition, but I will implement it when 595// There is a more mathematical definition, but I will implement it when
595// we are pass our deadline. 596// we are pass our deadline.
596 597
597// For Weeks that start on Sunday... (ahh... home rolled) 598// For Weeks that start on Sunday... (ahh... home rolled)
598// okay, if Jan 1 is on Friday or Saturday, 599// okay, if Jan 1 is on Friday or Saturday,
599// it will go to the pervious 600// it will go to the pervious
600// week... 601// week...
601 602
602bool calcWeek( const QDate &d, int &week, int &year, 603bool calcWeek( const QDate &d, int &week, int &year,
603 bool startOnMonday ) 604 bool startOnMonday )
604{ 605{
605 int weekNumber; 606 int weekNumber;
606 int yearNumber; 607 int yearNumber;
607 608
608 // remove a pesky warning, (Optimizations on g++) 609 // remove a pesky warning, (Optimizations on g++)
609 weekNumber = -1; 610 weekNumber = -1;
610 int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek(); 611 int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek();
611 int dayOfWeek = d.dayOfWeek(); 612 int dayOfWeek = d.dayOfWeek();
612 613
613 if ( !d.isValid() ) 614 if ( !d.isValid() )
614 return false; 615 return false;
615 616
616 if ( startOnMonday ) { 617 if ( startOnMonday ) {
617 // find the Jan1Weekday; 618 // find the Jan1Weekday;
618 if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) { 619 if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) {
619 yearNumber = d.year() - 1; 620 yearNumber = d.year() - 1;
620 if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) ) 621 if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) )
621 weekNumber = 53; 622 weekNumber = 53;
622 else 623 else
623 weekNumber = 52; 624 weekNumber = 52;
624 } else 625 } else
625 yearNumber = d.year(); 626 yearNumber = d.year();
626 if ( yearNumber == d.year() ) { 627 if ( yearNumber == d.year() ) {
627 int totalDays = 365; 628 int totalDays = 365;
628 if ( QDate::leapYear(yearNumber) ) 629 if ( QDate::leapYear(yearNumber) )
629 totalDays++; 630 totalDays++;
630 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) ) 631 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) )
631 || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) { 632 || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) {
632 yearNumber++; 633 yearNumber++;
633 weekNumber = 1; 634 weekNumber = 1;
634 } 635 }
635 } 636 }
636 if ( yearNumber == d.year() ) { 637 if ( yearNumber == d.year() ) {
637 int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 ); 638 int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
638 weekNumber = j / 7; 639 weekNumber = j / 7;
639 if ( jan1WeekDay > 4 ) 640 if ( jan1WeekDay > 4 )
640 weekNumber--; 641 weekNumber--;
641 } 642 }
642 } else { 643 } else {
643 // it's better to keep these cases separate... 644 // it's better to keep these cases separate...
644 if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4 645 if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4
645 && jan1WeekDay != 7 ) { 646 && jan1WeekDay != 7 ) {
646 yearNumber = d.year() - 1; 647 yearNumber = d.year() - 1;
647 if ( jan1WeekDay == 6 648 if ( jan1WeekDay == 6
648 || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) ) { 649 || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) ) {
649 weekNumber = 53; 650 weekNumber = 53;
650 }else 651 }else
651 weekNumber = 52; 652 weekNumber = 52;
652 } else 653 } else
653 yearNumber = d.year(); 654 yearNumber = d.year();
654 if ( yearNumber == d.year() ) { 655 if ( yearNumber == d.year() ) {
655 int totalDays = 365; 656 int totalDays = 365;
656 if ( QDate::leapYear( yearNumber ) ) 657 if ( QDate::leapYear( yearNumber ) )
657 totalDays++; 658 totalDays++;
658 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) { 659 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) {
659 yearNumber++; 660 yearNumber++;
660 weekNumber = 1; 661 weekNumber = 1;
661 } 662 }
662 } 663 }
663 if ( yearNumber == d.year() ) { 664 if ( yearNumber == d.year() ) {
664 int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 ); 665 int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 );
665 weekNumber = j / 7; 666 weekNumber = j / 7;
666 if ( jan1WeekDay > 4 ) { 667 if ( jan1WeekDay > 4 ) {
667 weekNumber--; 668 weekNumber--;
668 } 669 }
669 } 670 }
670 } 671 }
671 year = yearNumber; 672 year = yearNumber;
672 week = weekNumber; 673 week = weekNumber;
673 return true; 674 return true;
674} 675}
675 676
diff --git a/core/pim/datebook/datebookweek.h b/core/pim/datebook/datebookweek.h
index c273e30..ddf54ed 100644
--- a/core/pim/datebook/datebookweek.h
+++ b/core/pim/datebook/datebookweek.h
@@ -1,166 +1,167 @@
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#ifndef DATEBOOKWEEK 20#ifndef DATEBOOKWEEK
21#define DATEBOOKWEEK 21#define DATEBOOKWEEK
22 22
23#include <qpe/event.h> 23#include <qpe/event.h>
24 24
25#include <qlist.h> 25#include <qlist.h>
26#include <qscrollview.h> 26#include <qscrollview.h>
27#include <qstring.h> 27#include <qstring.h>
28#include <qvaluelist.h> 28#include <qvaluelist.h>
29 29
30class DateBookDB; 30class DateBookDB;
31class DateBookDBHoliday;
31class DateBookWeekHeader; 32class DateBookWeekHeader;
32class QDate; 33class QDate;
33class QLabel; 34class QLabel;
34class QResizeEvent; 35class QResizeEvent;
35class QSpinBox; 36class QSpinBox;
36class QTimer; 37class QTimer;
37class QHeader; 38class QHeader;
38 39
39class DateBookWeekItem 40class DateBookWeekItem
40{ 41{
41public: 42public:
42 DateBookWeekItem( const EffectiveEvent e ); 43 DateBookWeekItem( const EffectiveEvent e );
43 44
44 void setGeometry( int x, int y, int w, int h ); 45 void setGeometry( int x, int y, int w, int h );
45 QRect geometry() const { return r; } 46 QRect geometry() const { return r; }
46 47
47 const QColor &color() const { return c; } 48 const QColor &color() const { return c; }
48 const EffectiveEvent event() const { return ev; } 49 const EffectiveEvent event() const { return ev; }
49 50
50private: 51private:
51 const EffectiveEvent ev; 52 const EffectiveEvent ev;
52 QRect r; 53 QRect r;
53 QColor c; 54 QColor c;
54}; 55};
55 56
56class DateBookWeekView : public QScrollView 57class DateBookWeekView : public QScrollView
57{ 58{
58 Q_OBJECT 59 Q_OBJECT
59public: 60public:
60 DateBookWeekView( bool ampm, bool weekOnMonday, QWidget *parent = 0, 61 DateBookWeekView( bool ampm, bool weekOnMonday, QWidget *parent = 0,
61 const char *name = 0 ); 62 const char *name = 0 );
62 63
63 bool whichClock() const; 64 bool whichClock() const;
64 void showEvents( QValueList<EffectiveEvent> &ev ); 65 void showEvents( QValueList<EffectiveEvent> &ev );
65 void moveToHour( int h ); 66 void moveToHour( int h );
66 void setStartOfWeek( bool bOnMonday ); 67 void setStartOfWeek( bool bOnMonday );
67 68
68signals: 69signals:
69 void showDay( int d ); 70 void showDay( int d );
70 void signalShowEvent( const EffectiveEvent & ); 71 void signalShowEvent( const EffectiveEvent & );
71 void signalHideEvent(); 72 void signalHideEvent();
72 73
73protected slots: 74protected slots:
74 void keyPressEvent(QKeyEvent *); 75 void keyPressEvent(QKeyEvent *);
75 76
76private slots: 77private slots:
77 void slotChangeClock( bool ); 78 void slotChangeClock( bool );
78 void alterDay( int ); 79 void alterDay( int );
79 80
80private: 81private:
81 void positionItem( DateBookWeekItem *i ); 82 void positionItem( DateBookWeekItem *i );
82 DateBookWeekItem *intersects( const DateBookWeekItem * ); 83 DateBookWeekItem *intersects( const DateBookWeekItem * );
83 void drawContents( QPainter *p, int cx, int cy, int cw, int ch ); 84 void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
84 void contentsMousePressEvent( QMouseEvent * ); 85 void contentsMousePressEvent( QMouseEvent * );
85 void contentsMouseReleaseEvent( QMouseEvent * ); 86 void contentsMouseReleaseEvent( QMouseEvent * );
86 void resizeEvent( QResizeEvent * ); 87 void resizeEvent( QResizeEvent * );
87 void initNames(); 88 void initNames();
88 89
89private: 90private:
90 bool ampm; 91 bool ampm;
91 bool bOnMonday; 92 bool bOnMonday;
92 QHeader *header; 93 QHeader *header;
93 QList<DateBookWeekItem> items; 94 QList<DateBookWeekItem> items;
94 int rowHeight; 95 int rowHeight;
95 bool showingEvent; 96 bool showingEvent;
96}; 97};
97 98
98class DateBookWeek : public QWidget 99class DateBookWeek : public QWidget
99{ 100{
100 Q_OBJECT 101 Q_OBJECT
101 102
102public: 103public:
103 DateBookWeek( bool ampm, bool weekOnMonday, DateBookDB *newDB, 104 DateBookWeek( bool ampm, bool weekOnMonday, DateBookDBHoliday *newDB,
104 QWidget *parent = 0, const char *name = 0 ); 105 QWidget *parent = 0, const char *name = 0 );
105 void setDate( int y, int m, int d ); 106 void setDate( int y, int m, int d );
106 void setDate( QDate d ); 107 void setDate( QDate d );
107 QDate date() const; 108 QDate date() const;
108 DateBookWeekView *weekView() const { return view; } 109 DateBookWeekView *weekView() const { return view; }
109 void setStartViewTime( int startHere ); 110 void setStartViewTime( int startHere );
110 int startViewTime() const; 111 int startViewTime() const;
111 int week() const { return _week; }; 112 int week() const { return _week; };
112 QDate weekDate() const; 113 QDate weekDate() const;
113 114
114public slots: 115public slots:
115 void redraw(); 116 void redraw();
116 void slotWeekChanged( bool bStartOnMonday ); 117 void slotWeekChanged( bool bStartOnMonday );
117 void slotClockChanged( bool a ); 118 void slotClockChanged( bool a );
118 119
119signals: 120signals:
120 void showDate( int y, int m, int d ); 121 void showDate( int y, int m, int d );
121 122
122protected slots: 123protected slots:
123 void keyPressEvent(QKeyEvent *); 124 void keyPressEvent(QKeyEvent *);
124 125
125private slots: 126private slots:
126 void showDay( int day ); 127 void showDay( int day );
127 void dateChanged( QDate &newdate ); 128 void dateChanged( QDate &newdate );
128 void slotShowEvent( const EffectiveEvent & ); 129 void slotShowEvent( const EffectiveEvent & );
129 void slotHideEvent(); 130 void slotHideEvent();
130 void slotYearChanged( int ); 131 void slotYearChanged( int );
131 132
132private: 133private:
133 void getEvents(); 134 void getEvents();
134 135
135 /** 136 /**
136 * Wow that's a hell lot of code duplication 137 * Wow that's a hell lot of code duplication
137 * in datebook. I vote for a common base class 138 * in datebook. I vote for a common base class
138 * but never the less. This add a note 139 * but never the less. This add a note
139 * that the Event is an all day event 140 * that the Event is an all day event
140 * 141 *
141 */ 142 */
142 void generateAllDayTooltext( QString& text ); 143 void generateAllDayTooltext( QString& text );
143 144
144 /** 145 /**
145 * This will add the times to the text 146 * This will add the times to the text
146 * It will be shown in the Tooltip bubble 147 * It will be shown in the Tooltip bubble
147 */ 148 */
148 void generateNormalTooltext( QString& text, 149 void generateNormalTooltext( QString& text,
149 const EffectiveEvent &ev); 150 const EffectiveEvent &ev);
150 int year; 151 int year;
151 int _week; 152 int _week;
152 int dow; 153 int dow;
153 QDate bdate; 154 QDate bdate;
154 DateBookWeekHeader *header; 155 DateBookWeekHeader *header;
155 DateBookWeekView *view; 156 DateBookWeekView *view;
156 DateBookDB *db; 157 DateBookDBHoliday *db;
157 QLabel *lblDesc; 158 QLabel *lblDesc;
158 QTimer *tHide; 159 QTimer *tHide;
159 int startTime; 160 int startTime;
160 bool ampm; 161 bool ampm;
161 bool bStartOnMonday; 162 bool bStartOnMonday;
162}; 163};
163 164
164 165
165bool calcWeek( const QDate &d, int &week, int &year, bool startOnMonday = false ); 166bool calcWeek( const QDate &d, int &week, int &year, bool startOnMonday = false );
166#endif 167#endif
diff --git a/core/pim/datebook/datebookweeklst.cpp b/core/pim/datebook/datebookweeklst.cpp
index 771aa00..0555bc7 100644
--- a/core/pim/datebook/datebookweeklst.cpp
+++ b/core/pim/datebook/datebookweeklst.cpp
@@ -1,436 +1,437 @@
1#include "namespace_hack.h" 1#include "namespace_hack.h"
2#include "datebookweeklst.h" 2#include "datebookweeklst.h"
3 3
4#include "datebook.h" 4#include "datebook.h"
5#include "datebooktypes.h"
5 6
6#include <opie2/odebug.h> 7#include <opie2/odebug.h>
7 8
8#include <qpe/datebookmonth.h> 9#include <qpe/datebookmonth.h>
9#include <qpe/config.h> 10#include <qpe/config.h>
10#include <qpe/ir.h> 11#include <qpe/ir.h>
11#include <qpe/resource.h> 12#include <qpe/resource.h>
12 13
13#include <qlayout.h> 14#include <qlayout.h>
14#include <qtoolbutton.h> 15#include <qtoolbutton.h>
15#include <qtl.h> 16#include <qtl.h>
16 17
17bool calcWeek(const QDate &d, int &week, int &year,bool startOnMonday = false); 18bool calcWeek(const QDate &d, int &week, int &year,bool startOnMonday = false);
18 19
19using namespace Opie::Ui; 20using namespace Opie::Ui;
20DateBookWeekLstHeader::DateBookWeekLstHeader(bool onM, QWidget* parent, const char* name, WFlags fl) 21DateBookWeekLstHeader::DateBookWeekLstHeader(bool onM, QWidget* parent, const char* name, WFlags fl)
21 : DateBookWeekLstHeaderBase(parent, name, fl) 22 : DateBookWeekLstHeaderBase(parent, name, fl)
22{ 23{
23 setBackgroundMode( PaletteButton ); 24 setBackgroundMode( PaletteButton );
24 labelDate->setBackgroundMode( PaletteButton ); 25 labelDate->setBackgroundMode( PaletteButton );
25 forwardweek->setBackgroundMode( PaletteButton ); 26 forwardweek->setBackgroundMode( PaletteButton );
26 forwardweek->setPixmap( Resource::loadPixmap("forward") ); 27 forwardweek->setPixmap( Resource::loadPixmap("forward") );
27 forwardmonth->setBackgroundMode( PaletteButton ); 28 forwardmonth->setBackgroundMode( PaletteButton );
28 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") ); 29 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") );
29 backweek->setBackgroundMode( PaletteButton ); 30 backweek->setBackgroundMode( PaletteButton );
30 backweek->setPixmap( Resource::loadPixmap("back") ); 31 backweek->setPixmap( Resource::loadPixmap("back") );
31 backmonth->setBackgroundMode( PaletteButton ); 32 backmonth->setBackgroundMode( PaletteButton );
32 backmonth->setPixmap( Resource::loadPixmap("fastback") ); 33 backmonth->setPixmap( Resource::loadPixmap("fastback") );
33 DateBookWeekLstHeaderBaseLayout->setSpacing(0); 34 DateBookWeekLstHeaderBaseLayout->setSpacing(0);
34 DateBookWeekLstHeaderBaseLayout->setMargin(0); 35 DateBookWeekLstHeaderBaseLayout->setMargin(0);
35 //setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding)); 36 //setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding));
36 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed)); 37 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
37 38
38 connect(backmonth, SIGNAL(clicked()), this, SLOT(prevMonth())); 39 connect(backmonth, SIGNAL(clicked()), this, SLOT(prevMonth()));
39 connect(backweek, SIGNAL(clicked()), this, SLOT(prevWeek())); 40 connect(backweek, SIGNAL(clicked()), this, SLOT(prevWeek()));
40 connect(forwardweek, SIGNAL(clicked()), this, SLOT(nextWeek())); 41 connect(forwardweek, SIGNAL(clicked()), this, SLOT(nextWeek()));
41 connect(forwardmonth, SIGNAL(clicked()), this, SLOT(nextMonth())); 42 connect(forwardmonth, SIGNAL(clicked()), this, SLOT(nextMonth()));
42 connect(labelDate, SIGNAL(clicked()), this, SLOT(pickDate())); 43 connect(labelDate, SIGNAL(clicked()), this, SLOT(pickDate()));
43 connect(dbl, SIGNAL(toggled(bool)), this, SIGNAL(setDbl(bool))); 44 connect(dbl, SIGNAL(toggled(bool)), this, SIGNAL(setDbl(bool)));
44 bStartOnMonday=onM; 45 bStartOnMonday=onM;
45} 46}
46DateBookWeekLstHeader::~DateBookWeekLstHeader(){} 47DateBookWeekLstHeader::~DateBookWeekLstHeader(){}
47 48
48void DateBookWeekLstHeader::setDate(const QDate &d) { 49void DateBookWeekLstHeader::setDate(const QDate &d) {
49 int year,week,dayofweek; 50 int year,week,dayofweek;
50 date=d; 51 date=d;
51 dayofweek=d.dayOfWeek(); 52 dayofweek=d.dayOfWeek();
52 if(bStartOnMonday) 53 if(bStartOnMonday)
53 dayofweek--; 54 dayofweek--;
54 else if( dayofweek == 7 ) 55 else if( dayofweek == 7 )
55 /* we already have the right day -7 would lead to the same week */ 56 /* we already have the right day -7 would lead to the same week */
56 dayofweek = 0; 57 dayofweek = 0;
57 58
58 date=date.addDays(-dayofweek); 59 date=date.addDays(-dayofweek);
59 60
60 calcWeek(date,week,year,bStartOnMonday); 61 calcWeek(date,week,year,bStartOnMonday);
61 QDate start=date; 62 QDate start=date;
62 QDate stop=start.addDays(6); 63 QDate stop=start.addDays(6);
63 labelDate->setText( QString::number(start.day()) + "." + 64 labelDate->setText( QString::number(start.day()) + "." +
64 Calendar::nameOfMonth( start.month() ) + "-" + 65 Calendar::nameOfMonth( start.month() ) + "-" +
65 QString::number(stop.day()) + "." + 66 QString::number(stop.day()) + "." +
66 Calendar::nameOfMonth( stop.month()) +" ("+ 67 Calendar::nameOfMonth( stop.month()) +" ("+
67 tr("w")+":"+QString::number( week ) +")"); 68 tr("w")+":"+QString::number( week ) +")");
68 date = d; // bugfix: 0001126 - date has to be the selected date, not monday! 69 date = d; // bugfix: 0001126 - date has to be the selected date, not monday!
69 emit dateChanged(date); 70 emit dateChanged(date);
70} 71}
71 72
72void DateBookWeekLstHeader::pickDate() { 73void DateBookWeekLstHeader::pickDate() {
73 static QPopupMenu *m1 = 0; 74 static QPopupMenu *m1 = 0;
74 static DateBookMonth *picker = 0; 75 static DateBookMonth *picker = 0;
75 if ( !m1 ) { 76 if ( !m1 ) {
76 m1 = new QPopupMenu( this ); 77 m1 = new QPopupMenu( this );
77 picker = new DateBookMonth( m1, 0, TRUE ); 78 picker = new DateBookMonth( m1, 0, TRUE );
78 m1->insertItem( picker ); 79 m1->insertItem( picker );
79 connect( picker, SIGNAL( dateClicked(int,int,int) ),this, SLOT( setDate(int,int,int) ) ); 80 connect( picker, SIGNAL( dateClicked(int,int,int) ),this, SLOT( setDate(int,int,int) ) );
80 //connect( m1, SIGNAL( aboutToHide() ), 81 //connect( m1, SIGNAL( aboutToHide() ),
81 //this, SLOT( gotHide() ) ); 82 //this, SLOT( gotHide() ) );
82 } 83 }
83 picker->setDate( date.year(), date.month(), date.day() ); 84 picker->setDate( date.year(), date.month(), date.day() );
84 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height()))); 85 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height())));
85 picker->setFocus(); 86 picker->setFocus();
86} 87}
87void DateBookWeekLstHeader::setDate(int y, int m, int d) { 88void DateBookWeekLstHeader::setDate(int y, int m, int d) {
88 setDate(QDate(y,m,d)); 89 setDate(QDate(y,m,d));
89} 90}
90 91
91void DateBookWeekLstHeader::nextWeek() { 92void DateBookWeekLstHeader::nextWeek() {
92 setDate(date.addDays(7)); 93 setDate(date.addDays(7));
93} 94}
94void DateBookWeekLstHeader::prevWeek() { 95void DateBookWeekLstHeader::prevWeek() {
95 setDate(date.addDays(-7)); 96 setDate(date.addDays(-7));
96} 97}
97void DateBookWeekLstHeader::nextMonth() 98void DateBookWeekLstHeader::nextMonth()
98{ 99{
99 setDate(date.addDays(28)); 100 setDate(date.addDays(28));
100} 101}
101void DateBookWeekLstHeader::prevMonth() 102void DateBookWeekLstHeader::prevMonth()
102{ 103{
103 setDate(date.addDays(-28)); 104 setDate(date.addDays(-28));
104} 105}
105 106
106DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */, 107DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */,
107 QWidget* parent, 108 QWidget* parent,
108 const char* name, 109 const char* name,
109 WFlags fl ) 110 WFlags fl )
110 : DateBookWeekLstDayHdrBase(parent, name, fl) { 111 : DateBookWeekLstDayHdrBase(parent, name, fl) {
111 112
112 date=d; 113 date=d;
113 114
114 static const QString wdays=tr("MTWTFSSM", "Week days"); 115 static const QString wdays=tr("MTWTFSSM", "Week days");
115 char day=wdays[d.dayOfWeek()-1]; 116 char day=wdays[d.dayOfWeek()-1];
116 117
117 //dont use dayOfWeek() to save space ! 118 //dont use dayOfWeek() to save space !
118 label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) ); 119 label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) );
119 120
120 add->setText("+"); 121 add->setText("+");
121 122
122 if (d == QDate::currentDate()) { 123 if (d == QDate::currentDate()) {
123 QPalette pal=label->palette(); 124 QPalette pal=label->palette();
124 pal.setColor(QColorGroup::Foreground, QColor(0,0,255)); 125 pal.setColor(QColorGroup::Foreground, QColor(0,0,255));
125 label->setPalette(pal); 126 label->setPalette(pal);
126 127
127 /* 128 /*
128 QFont f=label->font(); 129 QFont f=label->font();
129 f.setItalic(true); 130 f.setItalic(true);
130 label->setFont(f); 131 label->setFont(f);
131 label->setPalette(QPalette(QColor(0,0,255),label->backgroundColor())); 132 label->setPalette(QPalette(QColor(0,0,255),label->backgroundColor()));
132 */ 133 */
133 } else if (d.dayOfWeek() == 7) { // FIXME: Match any holiday 134 } else if (d.dayOfWeek() == 7) { // FIXME: Match any holiday
134 QPalette pal=label->palette(); 135 QPalette pal=label->palette();
135 pal.setColor(QColorGroup::Foreground, QColor(255,0,0)); 136 pal.setColor(QColorGroup::Foreground, QColor(255,0,0));
136 label->setPalette(pal); 137 label->setPalette(pal);
137 } 138 }
138 139
139 connect (label, SIGNAL(clicked()), this, SLOT(showDay())); 140 connect (label, SIGNAL(clicked()), this, SLOT(showDay()));
140 connect (add, SIGNAL(clicked()), this, SLOT(newEvent())); 141 connect (add, SIGNAL(clicked()), this, SLOT(newEvent()));
141} 142}
142 143
143void DateBookWeekLstDayHdr::showDay() { 144void DateBookWeekLstDayHdr::showDay() {
144 emit showDate(date.year(), date.month(), date.day()); 145 emit showDate(date.year(), date.month(), date.day());
145} 146}
146 147
147void DateBookWeekLstDayHdr::newEvent() { 148void DateBookWeekLstDayHdr::newEvent() {
148 QDateTime start, stop; 149 QDateTime start, stop;
149 start=stop=date; 150 start=stop=date;
150 start.setTime(QTime(10,0)); 151 start.setTime(QTime(10,0));
151 stop.setTime(QTime(12,0)); 152 stop.setTime(QTime(12,0));
152 153
153 emit addEvent(start,stop,"",0); 154 emit addEvent(start,stop,"",0);
154} 155}
155DateBookWeekLstEvent::DateBookWeekLstEvent(const EffectiveEvent &ev, 156DateBookWeekLstEvent::DateBookWeekLstEvent(const EffectiveEvent &ev,
156 int weeklistviewconfig, 157 int weeklistviewconfig,
157 QWidget* parent, 158 QWidget* parent,
158 const char* name, 159 const char* name,
159 WFlags fl ) : OClickableLabel(parent,name,fl), event(ev) 160 WFlags fl ) : OClickableLabel(parent,name,fl), event(ev)
160{ 161{
161 // old values... lastday = "__|__", middle=" |---", Firstday="00:00", 162 // old values... lastday = "__|__", middle=" |---", Firstday="00:00",
162 QString s,start,middle,end,day; 163 QString s,start,middle,end,day;
163 164
164 odebug << "weeklistviewconfig=" << weeklistviewconfig << oendl; 165 odebug << "weeklistviewconfig=" << weeklistviewconfig << oendl;
165 if(weeklistviewconfig==NONE) {// No times displayed. 166 if(weeklistviewconfig==NONE) { // No times displayed.
166 // start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute()); 167// start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute());
167 // middle.sprintf("<--->"); 168// middle.sprintf("<--->");
168 // end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute()); 169// end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute());
169 // day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute()); 170// day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute());
170 } else if(weeklistviewconfig==NORMAL) {// "Normal", only display start time. 171 } else if(weeklistviewconfig==NORMAL) { // "Normal", only display start time.
171 start.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute()); 172 start.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute());
172 middle.sprintf(" |---"); 173 middle.sprintf(" |---");
173 end.sprintf("__|__"); 174 end.sprintf("__|__");
174 day.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute()); 175 day.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute());
175 } else if(weeklistviewconfig==EXTENDED) { // Extended mode, display start and end times. 176 } else if(weeklistviewconfig==EXTENDED) { // Extended mode, display start and end times.
176 start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute()); 177 start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute());
177 middle.sprintf("<--->"); 178 middle.sprintf("<--->");
178 end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute()); 179 end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute());
179 day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute()); 180 day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute());
180 } 181 }
181 182
182 if(ev.event().type() == Event::Normal) { 183 if(ev.event().type() == Event::Normal) {
183 if(ev.startDate()==ev.date() && ev.endDate()==ev.date()) {// day event. 184 if(ev.startDate()==ev.date() && ev.endDate()==ev.date()) { // day event.
184 s=day; 185 s=day;
185 } else if(ev.startDate()==ev.date()) {// start event. 186 } else if(ev.startDate()==ev.date()) { // start event.
186 s=start; 187 s=start;
187 } else if(ev.endDate()==ev.date()) { // end event. 188 } else if(ev.endDate()==ev.date()) { // end event.
188 s=end; 189 s=end;
189 } else {// middle day. 190 } else { // middle day.
190 s=middle; 191 s=middle;
191 } 192 }
192 } else { 193 } else {
193 s=""; 194 s="";
194 } 195 }
195 setText(QString(s) + " " + ev.description()); 196 setText(QString(s) + " " + ev.description());
196 //connect(this, SIGNAL(clicked()), this, SLOT(editMe())); 197// connect(this, SIGNAL(clicked()), this, SLOT(editMe()));
197 setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) ); 198 setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) );
198} 199}
199void DateBookWeekLstEvent::editMe() { 200void DateBookWeekLstEvent::editMe() {
200 emit editEvent(event.event()); 201 emit editEvent(event.event());
201} 202}
202void DateBookWeekLstEvent::duplicateMe() 203void DateBookWeekLstEvent::duplicateMe()
203{ 204{
204 emit duplicateEvent(event.event()); 205 emit duplicateEvent(event.event());
205} 206}
206void DateBookWeekLstEvent::deleteMe() 207void DateBookWeekLstEvent::deleteMe()
207{ 208{
208 emit removeEvent(event.event()); 209 emit removeEvent(event.event());
209 emit redraw(); 210 emit redraw();
210} 211}
211void DateBookWeekLstEvent::beamMe() 212void DateBookWeekLstEvent::beamMe()
212{ 213{
213 emit beamEvent( event.event() ); 214 emit beamEvent( event.event() );
214} 215}
215void DateBookWeekLstEvent::mousePressEvent( QMouseEvent *e ) 216void DateBookWeekLstEvent::mousePressEvent( QMouseEvent *e )
216{ 217{
217 popmenue = new QPopupMenu; 218 popmenue = new QPopupMenu;
218 popmenue->insertItem( tr( "Edit" ), this, SLOT(editMe())); 219 popmenue->insertItem( tr( "Edit" ), this, SLOT(editMe()));
219 popmenue->insertItem( tr( "Duplicate" ), this, SLOT(duplicateMe())); 220 popmenue->insertItem( tr( "Duplicate" ), this, SLOT(duplicateMe()));
220 popmenue->insertItem( tr( "Delete" ), this, SLOT(deleteMe())); 221 popmenue->insertItem( tr( "Delete" ), this, SLOT(deleteMe()));
221 if(Ir::supported()) 222 if(Ir::supported())
222 popmenue->insertItem( tr( "Beam" ), this, SLOT(beamMe())); 223 popmenue->insertItem( tr( "Beam" ), this, SLOT(beamMe()));
223 popmenue->popup( mapToGlobal( e->pos() )); 224 popmenue->popup( mapToGlobal( e->pos() ));
224} 225}
225 226
226DateBookWeekLstView::DateBookWeekLstView(QValueList<EffectiveEvent> &ev, 227DateBookWeekLstView::DateBookWeekLstView(QValueList<EffectiveEvent> &ev,
227 const QDate &d, bool onM, 228 const QDate &d, bool onM,
228 QWidget* parent, 229 QWidget* parent,
229 const char* name, WFlags fl) 230 const char* name, WFlags fl)
230 : QWidget( parent, name, fl ) 231 : QWidget( parent, name, fl )
231{ 232{
232 Config config("DateBook"); 233 Config config("DateBook");
233 config.setGroup("Main"); 234 config.setGroup("Main");
234 int weeklistviewconfig=config.readNumEntry("weeklistviewconfig", NORMAL); 235 int weeklistviewconfig=config.readNumEntry("weeklistviewconfig", NORMAL);
235 odebug << "weeklistviewconfig: " << weeklistviewconfig << oendl; 236 odebug << "weeklistviewconfig: " << weeklistviewconfig << oendl;
236 237
237 bStartOnMonday=onM; 238 bStartOnMonday=onM;
238 setPalette(white); 239 setPalette(white);
239 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding)); 240 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
240 241
241 QVBoxLayout *layout = new QVBoxLayout( this ); 242 QVBoxLayout *layout = new QVBoxLayout( this );
242 243
243 qBubbleSort(ev); 244 qBubbleSort(ev);
244 QValueListIterator<EffectiveEvent> it; 245 QValueListIterator<EffectiveEvent> it;
245 it=ev.begin(); 246 it=ev.begin();
246 247
247 int dayOrder[7]; 248 int dayOrder[7];
248 if (bStartOnMonday) { 249 if (bStartOnMonday) {
249 for (int d=0; d<7; d++) dayOrder[d]=d+1; 250 for (int d=0; d<7; d++) dayOrder[d]=d+1;
250 } else { 251 } else {
251 for (int d=0; d<7; d++) dayOrder[d]=d; 252 for (int d=0; d<7; d++) dayOrder[d]=d;
252 dayOrder[0]=7; 253 dayOrder[0]=7;
253 } 254 }
254 255
255 // Calculate offset to first day of week. 256 // Calculate offset to first day of week.
256 int dayoffset=d.dayOfWeek(); 257 int dayoffset=d.dayOfWeek();
257 if(bStartOnMonday) dayoffset--; 258 if(bStartOnMonday) dayoffset--;
258 else if( dayoffset == 7 ) dayoffset = 0; 259 else if( dayoffset == 7 ) dayoffset = 0;
259 260
260 for (int i=0; i<7; i++) { 261 for (int i=0; i<7; i++) {
261 // Header 262 // Header
262 DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this); 263 DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this);
263 connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 264 connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
264 connect(hdr, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)), 265 connect(hdr, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)),
265 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&))); 266 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)));
266 layout->addWidget(hdr); 267 layout->addWidget(hdr);
267 268
268 // Events 269 // Events
269 while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) { 270 while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) {
270 if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) {// Skip events ending at 00:00 starting at another day. 271 if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) { // Skip events ending at 00:00 starting at another day.
271 DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this); 272 DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this);
272 layout->addWidget(l); 273 layout->addWidget(l);
273 connect (l, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&))); 274 connect (l, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&)));
274 connect (l, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &))); 275 connect (l, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &)));
275 connect (l, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &))); 276 connect (l, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &)));
276 connect (l, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &))); 277 connect (l, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &)));
277 connect (l, SIGNAL(redraw()), this, SIGNAL(redraw())); 278 connect (l, SIGNAL(redraw()), this, SIGNAL(redraw()));
278 } 279 }
279 it++; 280 it++;
280 } 281 }
281 layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); 282 layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding));
282 } 283 }
283} 284}
284DateBookWeekLstView::~DateBookWeekLstView(){} 285DateBookWeekLstView::~DateBookWeekLstView(){}
285void DateBookWeekLstView::keyPressEvent(QKeyEvent *e) {e->ignore();} 286void DateBookWeekLstView::keyPressEvent(QKeyEvent *e) {e->ignore();}
286 287
287DateBookWeekLstDblView::DateBookWeekLstDblView(QValueList<EffectiveEvent> &ev1, 288DateBookWeekLstDblView::DateBookWeekLstDblView(QValueList<EffectiveEvent> &ev1,
288 QValueList<EffectiveEvent> &ev2, 289 QValueList<EffectiveEvent> &ev2,
289 QDate &d, bool onM, 290 QDate &d, bool onM,
290 QWidget* parent, 291 QWidget* parent,
291 const char* name, WFlags fl) 292 const char* name, WFlags fl)
292 : QWidget( parent, name, fl ) 293 : QWidget( parent, name, fl )
293{ 294{
294 QHBoxLayout *layout = new QHBoxLayout( this ); 295 QHBoxLayout *layout = new QHBoxLayout( this );
295 296
296 DateBookWeekLstView *w=new DateBookWeekLstView(ev1,d,onM,this); 297 DateBookWeekLstView *w=new DateBookWeekLstView(ev1,d,onM,this);
297 layout->addWidget(w); 298 layout->addWidget(w);
298 connect (w, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&))); 299 connect (w, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&)));
299 connect (w, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &))); 300 connect (w, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &)));
300 connect (w, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &))); 301 connect (w, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &)));
301 connect (w, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &))); 302 connect (w, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &)));
302 connect (w, SIGNAL(redraw()), this, SIGNAL(redraw())); 303 connect (w, SIGNAL(redraw()), this, SIGNAL(redraw()));
303 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 304 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
304 connect (w, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)), 305 connect (w, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)),
305 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&))); 306 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)));
306 307
307 308
308 w=new DateBookWeekLstView(ev2,d.addDays(7),onM,this); 309 w=new DateBookWeekLstView(ev2,d.addDays(7),onM,this);
309 layout->addWidget(w); 310 layout->addWidget(w);
310 connect (w, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&))); 311 connect (w, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&)));
311 connect (w, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &))); 312 connect (w, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &)));
312 connect (w, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &))); 313 connect (w, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &)));
313 connect (w, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &))); 314 connect (w, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &)));
314 connect (w, SIGNAL(redraw()), this, SIGNAL(redraw())); 315 connect (w, SIGNAL(redraw()), this, SIGNAL(redraw()));
315 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 316 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
316 connect (w, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)), 317 connect (w, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)),
317 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&))); 318 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)));
318} 319}
319 320
320DateBookWeekLst::DateBookWeekLst( bool ap, bool onM, DateBookDB *newDB, 321DateBookWeekLst::DateBookWeekLst( bool ap, bool onM, DateBookDBHoliday *newDB,
321 QWidget *parent, 322 QWidget *parent,
322 const char *name ) 323 const char *name )
323 : QWidget( parent, name ), 324 : QWidget( parent, name ),
324 db( newDB ), 325 db( newDB ),
325 startTime( 0 ), 326 startTime( 0 ),
326 ampm( ap ), 327 ampm( ap ),
327 bStartOnMonday(onM) 328 bStartOnMonday(onM)
328{ 329{
329 setFocusPolicy(StrongFocus); 330 setFocusPolicy(StrongFocus);
330 layout = new QVBoxLayout( this ); 331 layout = new QVBoxLayout( this );
331 layout->setMargin(0); 332 layout->setMargin(0);
332 333
333 header=new DateBookWeekLstHeader(onM, this); 334 header=new DateBookWeekLstHeader(onM, this);
334 layout->addWidget( header ); 335 layout->addWidget( header );
335 connect(header, SIGNAL(dateChanged(QDate&)), this, SLOT(dateChanged(QDate&))); 336 connect(header, SIGNAL(dateChanged(QDate&)), this, SLOT(dateChanged(QDate&)));
336 connect(header, SIGNAL(setDbl(bool)), this, SLOT(setDbl(bool))); 337 connect(header, SIGNAL(setDbl(bool)), this, SLOT(setDbl(bool)));
337 338
338 scroll=new QScrollView(this); 339 scroll=new QScrollView(this);
339 scroll->setResizePolicy(QScrollView::AutoOneFit); 340 scroll->setResizePolicy(QScrollView::AutoOneFit);
340 layout->addWidget(scroll); 341 layout->addWidget(scroll);
341 342
342 view=NULL; 343 view=NULL;
343 Config config("DateBook"); 344 Config config("DateBook");
344 config.setGroup("Main"); 345 config.setGroup("Main");
345 dbl=config.readBoolEntry("weeklst_dbl", false); 346 dbl=config.readBoolEntry("weeklst_dbl", false);
346 header->dbl->setOn(dbl); 347 header->dbl->setOn(dbl);
347} 348}
348DateBookWeekLst::~DateBookWeekLst(){ 349DateBookWeekLst::~DateBookWeekLst(){
349 Config config("DateBook"); 350 Config config("DateBook");
350 config.setGroup("Main"); 351 config.setGroup("Main");
351 config.writeEntry("weeklst_dbl", dbl); 352 config.writeEntry("weeklst_dbl", dbl);
352} 353}
353 354
354void DateBookWeekLst::setDate(const QDate &d) { 355void DateBookWeekLst::setDate(const QDate &d) {
355 bdate=d; 356 bdate=d;
356 header->setDate(d); 357 header->setDate(d);
357} 358}
358 359
359void DateBookWeekLst::setDbl(bool on) { 360void DateBookWeekLst::setDbl(bool on) {
360 dbl=on; 361 dbl=on;
361 redraw(); 362 redraw();
362} 363}
363void DateBookWeekLst::redraw() {getEvents();} 364void DateBookWeekLst::redraw() {getEvents();}
364 365
365QDate DateBookWeekLst::date() { 366QDate DateBookWeekLst::date() {
366 return bdate; 367 return bdate;
367} 368}
368 369
369// return the date at the beginning of the week... 370// return the date at the beginning of the week...
370// copied from DateBookWeek 371// copied from DateBookWeek
371QDate DateBookWeekLst::weekDate() const 372QDate DateBookWeekLst::weekDate() const
372{ 373{
373 QDate d=bdate; 374 QDate d=bdate;
374 375
375 // Calculate offset to first day of week. 376 // Calculate offset to first day of week.
376 int dayoffset=d.dayOfWeek(); 377 int dayoffset=d.dayOfWeek();
377 if(bStartOnMonday) dayoffset--; 378 if(bStartOnMonday) dayoffset--;
378 else if( dayoffset == 7 ) 379 else if( dayoffset == 7 )
379 dayoffset = 0; 380 dayoffset = 0;
380 381
381 return d.addDays(-dayoffset); 382 return d.addDays(-dayoffset);
382} 383}
383 384
384void DateBookWeekLst::getEvents() { 385void DateBookWeekLst::getEvents() {
385 QDate start = weekDate(); //date(); 386 QDate start = weekDate(); //date();
386 QDate stop = start.addDays(6); 387 QDate stop = start.addDays(7);
387 QValueList<EffectiveEvent> el = db->getEffectiveEvents(start, stop); 388 QValueList<EffectiveEvent> el = db->getEffectiveEvents(start, stop);
388 389
389 if (view) delete view; 390 if (view) delete view;
390 if (dbl) { 391 if (dbl) {
391 QDate start2=start.addDays(7); 392 QDate start2=start.addDays(8);
392 stop=start2.addDays(6); 393 stop=start2.addDays(7);
393 QValueList<EffectiveEvent> el2 = db->getEffectiveEvents(start2, stop); 394 QValueList<EffectiveEvent> el2 = db->getEffectiveEvents(start2, stop);
394 view=new DateBookWeekLstDblView(el,el2,start,bStartOnMonday,scroll); 395 view=new DateBookWeekLstDblView(el,el2,start,bStartOnMonday,scroll);
395 } else { 396 } else {
396 view=new DateBookWeekLstView(el,start,bStartOnMonday,scroll); 397 view=new DateBookWeekLstView(el,start,bStartOnMonday,scroll);
397 } 398 }
398 399
399 connect (view, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&))); 400 connect (view, SIGNAL(editEvent(const Event&)), this, SIGNAL(editEvent(const Event&)));
400 connect (view, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &))); 401 connect (view, SIGNAL(duplicateEvent(const Event &)), this, SIGNAL(duplicateEvent(const Event &)));
401 connect (view, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &))); 402 connect (view, SIGNAL(removeEvent(const Event &)), this, SIGNAL(removeEvent(const Event &)));
402 connect (view, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &))); 403 connect (view, SIGNAL(beamEvent(const Event &)), this, SIGNAL(beamEvent(const Event &)));
403 connect (view, SIGNAL(redraw()), this, SLOT(redraw())); 404 connect (view, SIGNAL(redraw()), this, SLOT(redraw()));
404 connect (view, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 405 connect (view, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
405 connect (view, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)), 406 connect (view, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)),
406 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&))); 407 this, SIGNAL(addEvent(const QDateTime&,const QDateTime&,const QString&,const QString&)));
407 408
408 scroll->addChild(view); 409 scroll->addChild(view);
409 view->show(); 410 view->show();
410 scroll->updateScrollBars(); 411 scroll->updateScrollBars();
411} 412}
412 413
413void DateBookWeekLst::dateChanged(QDate &newdate) { 414void DateBookWeekLst::dateChanged(QDate &newdate) {
414 bdate=newdate; 415 bdate=newdate;
415 getEvents(); 416 getEvents();
416} 417}
417 418
418void DateBookWeekLst::keyPressEvent(QKeyEvent *e) 419void DateBookWeekLst::keyPressEvent(QKeyEvent *e)
419{ 420{
420 switch(e->key()) { 421 switch(e->key()) {
421 case Key_Up: 422 case Key_Up:
422 scroll->scrollBy(0, -20); 423 scroll->scrollBy(0, -20);
423 break; 424 break;
424 case Key_Down: 425 case Key_Down:
425 scroll->scrollBy(0, 20); 426 scroll->scrollBy(0, 20);
426 break; 427 break;
427 case Key_Left: 428 case Key_Left:
428 header->prevWeek(); 429 header->prevWeek();
429 break; 430 break;
430 case Key_Right: 431 case Key_Right:
431 header->nextWeek(); 432 header->nextWeek();
432 break; 433 break;
433 default: 434 default:
434 e->ignore(); 435 e->ignore();
435 } 436 }
436} 437}
diff --git a/core/pim/datebook/datebookweeklst.h b/core/pim/datebook/datebookweeklst.h
index 3bc7f2f..38d7777 100644
--- a/core/pim/datebook/datebookweeklst.h
+++ b/core/pim/datebook/datebookweeklst.h
@@ -1,177 +1,178 @@
1#ifndef DATEBOOKWEEKLST 1#ifndef DATEBOOKWEEKLST
2#define DATEBOOKWEEKLST 2#define DATEBOOKWEEKLST
3 3
4#include <qwidget.h> 4#include <qwidget.h>
5#include <qdatetime.h> 5#include <qdatetime.h>
6#include <qpe/event.h> 6#include <qpe/event.h>
7#include <qlabel.h> 7#include <qlabel.h>
8#include <qscrollview.h> 8#include <qscrollview.h>
9 9
10#include "datebookweeklstheader.h" 10#include "datebookweeklstheader.h"
11#include "datebookweeklstdayhdr.h" 11#include "datebookweeklstdayhdr.h"
12 12
13#include <opie2/oclickablelabel.h> 13#include <opie2/oclickablelabel.h>
14 14
15class QDateTime; 15class QDateTime;
16class DateBookDB; 16class DateBookDB;
17class DateBookDBHoliday;
17 18
18class DateBookWeekLstHeader: public DateBookWeekLstHeaderBase 19class DateBookWeekLstHeader: public DateBookWeekLstHeaderBase
19{ 20{
20 Q_OBJECT 21 Q_OBJECT
21public: 22public:
22 DateBookWeekLstHeader(bool onM, QWidget* parent = 0, const char* name = 0, 23 DateBookWeekLstHeader(bool onM, QWidget* parent = 0, const char* name = 0,
23 WFlags fl = 0 ); 24 WFlags fl = 0 );
24 ~DateBookWeekLstHeader(); 25 ~DateBookWeekLstHeader();
25 void setDate(const QDate &d); 26 void setDate(const QDate &d);
26 27
27public slots: 28public slots:
28 void nextWeek(); 29 void nextWeek();
29 void prevWeek(); 30 void prevWeek();
30 void nextMonth(); 31 void nextMonth();
31 void prevMonth(); 32 void prevMonth();
32 void pickDate(); 33 void pickDate();
33 void setDate(int y, int m, int d); 34 void setDate(int y, int m, int d);
34signals: 35signals:
35 void dateChanged(QDate &newdate); 36 void dateChanged(QDate &newdate);
36 void setDbl(bool on); 37 void setDbl(bool on);
37private: 38private:
38 QDate date; 39 QDate date;
39 //bool onMonday; 40// bool onMonday;
40 bool bStartOnMonday; 41 bool bStartOnMonday;
41}; 42};
42 43
43class DateBookWeekLstDayHdr: public DateBookWeekLstDayHdrBase 44class DateBookWeekLstDayHdr: public DateBookWeekLstDayHdrBase
44{ 45{
45 Q_OBJECT 46 Q_OBJECT
46public: 47public:
47 DateBookWeekLstDayHdr(const QDate &d, bool onM, 48 DateBookWeekLstDayHdr(const QDate &d, bool onM,
48 QWidget* parent = 0, const char* name = 0, 49 QWidget* parent = 0, const char* name = 0,
49 WFlags fl = 0 ); 50 WFlags fl = 0 );
50public slots: 51public slots:
51 void showDay(); 52 void showDay();
52 void newEvent(); 53 void newEvent();
53signals: 54signals:
54 void showDate(int y, int m, int d); 55 void showDate(int y, int m, int d);
55 void addEvent(const QDateTime &start, const QDateTime &stop, 56 void addEvent(const QDateTime &start, const QDateTime &stop,
56 const QString &str, const QString &location); 57 const QString &str, const QString &location);
57private: 58private:
58 QDate date; 59 QDate date;
59}; 60};
60 61
61class DateBookWeekLstEvent: public Opie::Ui::OClickableLabel 62class DateBookWeekLstEvent: public Opie::Ui::OClickableLabel
62{ 63{
63 Q_OBJECT 64 Q_OBJECT
64public: 65public:
65 DateBookWeekLstEvent(const EffectiveEvent &ev, int weeklistviewconfig =1, 66 DateBookWeekLstEvent(const EffectiveEvent &ev, int weeklistviewconfig =1,
66 QWidget* parent = 0, const char* name = 0, 67 QWidget* parent = 0, const char* name = 0,
67 WFlags fl = 0); 68 WFlags fl = 0);
68signals: 69signals:
69 void editEvent(const Event &e); 70 void editEvent(const Event &e);
70 void duplicateEvent(const Event &e); 71 void duplicateEvent(const Event &e);
71 void removeEvent(const Event &e); 72 void removeEvent(const Event &e);
72 void beamEvent(const Event &e); 73 void beamEvent(const Event &e);
73 void redraw(); 74 void redraw();
74private slots: 75private slots:
75 void editMe(); 76 void editMe();
76 void duplicateMe(); 77 void duplicateMe();
77 void deleteMe(); 78 void deleteMe();
78 void beamMe(); 79 void beamMe();
79private: 80private:
80 const EffectiveEvent event; 81 const EffectiveEvent event;
81 QPopupMenu* popmenue; 82 QPopupMenu* popmenue;
82protected: 83protected:
83 void mousePressEvent( QMouseEvent *e ); 84 void mousePressEvent( QMouseEvent *e );
84}; 85};
85 86
86class DateBookWeekLstView: public QWidget 87class DateBookWeekLstView: public QWidget
87{ 88{
88 Q_OBJECT 89 Q_OBJECT
89public: 90public:
90 DateBookWeekLstView(QValueList<EffectiveEvent> &ev, const QDate &d, bool onM, 91 DateBookWeekLstView(QValueList<EffectiveEvent> &ev, const QDate &d, bool onM,
91 QWidget* parent = 0, const char* name = 0, 92 QWidget* parent = 0, const char* name = 0,
92 WFlags fl = 0 ); 93 WFlags fl = 0 );
93 ~DateBookWeekLstView(); 94 ~DateBookWeekLstView();
94signals: 95signals:
95 void editEvent(const Event &e); 96 void editEvent(const Event &e);
96 void duplicateEvent(const Event &e); 97 void duplicateEvent(const Event &e);
97 void removeEvent(const Event &e); 98 void removeEvent(const Event &e);
98 void beamEvent(const Event &e); 99 void beamEvent(const Event &e);
99 void redraw(); 100 void redraw();
100 void showDate(int y, int m, int d); 101 void showDate(int y, int m, int d);
101 void addEvent(const QDateTime &start, const QDateTime &stop, 102 void addEvent(const QDateTime &start, const QDateTime &stop,
102 const QString &str, const QString &location); 103 const QString &str, const QString &location);
103private: 104private:
104 bool bStartOnMonday; 105 bool bStartOnMonday;
105protected slots: 106protected slots:
106 void keyPressEvent(QKeyEvent *); 107 void keyPressEvent(QKeyEvent *);
107}; 108};
108 109
109class DateBookWeekLstDblView: public QWidget { 110class DateBookWeekLstDblView: public QWidget {
110 Q_OBJECT 111 Q_OBJECT
111public: 112public:
112 DateBookWeekLstDblView(QValueList<EffectiveEvent> &ev1, 113 DateBookWeekLstDblView(QValueList<EffectiveEvent> &ev1,
113 QValueList<EffectiveEvent> &ev2, 114 QValueList<EffectiveEvent> &ev2,
114 QDate &d, bool onM, 115 QDate &d, bool onM,
115 QWidget* parent = 0, const char* name = 0, 116 QWidget* parent = 0, const char* name = 0,
116 WFlags fl = 0 ); 117 WFlags fl = 0 );
117signals: 118signals:
118 void editEvent(const Event &e); 119 void editEvent(const Event &e);
119 void duplicateEvent(const Event &e); 120 void duplicateEvent(const Event &e);
120 void removeEvent(const Event &e); 121 void removeEvent(const Event &e);
121 void beamEvent(const Event &e); 122 void beamEvent(const Event &e);
122 void redraw(); 123 void redraw();
123 void showDate(int y, int m, int d); 124 void showDate(int y, int m, int d);
124 void addEvent(const QDateTime &start, const QDateTime &stop, 125 void addEvent(const QDateTime &start, const QDateTime &stop,
125 const QString &str, const QString &location); 126 const QString &str, const QString &location);
126}; 127};
127 128
128class DateBookWeekLst : public QWidget 129class DateBookWeekLst : public QWidget
129{ 130{
130 Q_OBJECT 131 Q_OBJECT
131 132
132public: 133public:
133 DateBookWeekLst( bool ampm, bool onM, DateBookDB *newDB, 134 DateBookWeekLst( bool ampm, bool onM, DateBookDBHoliday *newDB,
134 QWidget *parent = 0, 135 QWidget *parent = 0,
135 const char *name = 0 ); 136 const char *name = 0 );
136 ~DateBookWeekLst(); 137 ~DateBookWeekLst();
137 void setDate( int y, int w ); 138 void setDate( int y, int w );
138 void setDate(const QDate &d ); 139 void setDate(const QDate &d );
139 int week() const { return _week; }; 140 int week() const { return _week; };
140 QDate date(); 141 QDate date();
141 QDate weekDate() const; 142 QDate weekDate() const;
142 143
143public slots: 144public slots:
144 void redraw(); 145 void redraw();
145 void dateChanged(QDate &date); 146 void dateChanged(QDate &date);
146 147
147protected slots: 148protected slots:
148 void keyPressEvent(QKeyEvent *); 149 void keyPressEvent(QKeyEvent *);
149 void setDbl(bool on); 150 void setDbl(bool on);
150 151
151signals: 152signals:
152 void showDate(int y, int m, int d); 153 void showDate(int y, int m, int d);
153 void addEvent(const QDateTime &start, const QDateTime &stop, 154 void addEvent(const QDateTime &start, const QDateTime &stop,
154 const QString &str, const QString &location); 155 const QString &str, const QString &location);
155 void editEvent(const Event &e); 156 void editEvent(const Event &e);
156 void duplicateEvent(const Event &e); 157 void duplicateEvent(const Event &e);
157 void removeEvent(const Event &e); 158 void removeEvent(const Event &e);
158 void beamEvent(const Event &e); 159 void beamEvent(const Event &e);
159 160
160private: 161private:
161 DateBookDB *db; 162 DateBookDBHoliday *db;
162 int startTime; 163 int startTime;
163 bool ampm; 164 bool ampm;
164 bool bStartOnMonday; 165 bool bStartOnMonday;
165 bool dbl; 166 bool dbl;
166 QDate bdate; 167 QDate bdate;
167 int year, _week,dow; 168 int year, _week,dow;
168 DateBookWeekLstHeader *header; 169 DateBookWeekLstHeader *header;
169 QWidget *view; 170 QWidget *view;
170 QVBoxLayout *layout; 171 QVBoxLayout *layout;
171 QScrollView *scroll; 172 QScrollView *scroll;
172 173
173 void getEvents(); 174 void getEvents();
174}; 175};
175 176
176#endif 177#endif
177 178