Diffstat (limited to 'core/pim/datebook/datebookdayallday.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/pim/datebook/datebookdayallday.cpp | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp new file mode 100644 index 0000000..985f31a --- a/dev/null +++ b/core/pim/datebook/datebookdayallday.cpp | |||
@@ -0,0 +1,226 @@ | |||
1 | /**************************************************************************** | ||
2 | ** GPL by Rajko Albrecht | ||
3 | ** | ||
4 | ** | ||
5 | ** | ||
6 | ** | ||
7 | ** | ||
8 | ****************************************************************************/ | ||
9 | #include "datebookdayallday.h" | ||
10 | |||
11 | #include <qpushbutton.h> | ||
12 | #include <qlayout.h> | ||
13 | #include <qvariant.h> | ||
14 | #include <qtooltip.h> | ||
15 | #include <qwhatsthis.h> | ||
16 | #include <qobjectlist.h> | ||
17 | #include <qpe/event.h> | ||
18 | #include <qpe/ir.h> | ||
19 | #include <qpe/datebookdb.h> | ||
20 | #include <qpe/resource.h> | ||
21 | #include <qpopupmenu.h> | ||
22 | #include <qtimer.h> | ||
23 | #include <qregexp.h> | ||
24 | #include <qdatetime.h> | ||
25 | |||
26 | #include "datebookday.h" | ||
27 | |||
28 | /* | ||
29 | * Constructs a DatebookdayAllday which is a child of 'parent', with the | ||
30 | * name 'name' and widget flags set to 'f' | ||
31 | */ | ||
32 | DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags fl ) | ||
33 | : QWidget( parent, name,fl ),item_count(0),dateBook(db) | ||
34 | { | ||
35 | if ( !name ) | ||
36 | setName( "DatebookdayAllday" ); | ||
37 | setMinimumSize( QSize( 0, 0 ) ); | ||
38 | |||
39 | datebookdayalldayLayout = new QVBoxLayout( this ); | ||
40 | datebookdayalldayLayout->setSpacing( 0 ); | ||
41 | datebookdayalldayLayout->setMargin( 0 ); | ||
42 | |||
43 | lblDesc = new DatebookEventDesc(parent->parentWidget(),""); | ||
44 | lblDesc->setBackgroundColor(Qt::yellow); | ||
45 | lblDesc->hide(); | ||
46 | subWidgets.setAutoDelete(true); | ||
47 | } | ||
48 | |||
49 | /* | ||
50 | * Destroys the object and frees any allocated resources | ||
51 | */ | ||
52 | DatebookdayAllday::~DatebookdayAllday() | ||
53 | { | ||
54 | // no need to delete child widgets, Qt does it all for us | ||
55 | } | ||
56 | |||
57 | DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev) | ||
58 | { | ||
59 | DatebookAlldayDisp * lb; | ||
60 | lb = new DatebookAlldayDisp(dateBook,ev,this,NULL); | ||
61 | datebookdayalldayLayout->addWidget(lb); | ||
62 | subWidgets.append(lb); | ||
63 | |||
64 | connect(lb,SIGNAL(displayMe(const Event &)),lblDesc,SLOT(disp_event(const Event&))); | ||
65 | ++item_count; | ||
66 | |||
67 | return lb; | ||
68 | } | ||
69 | |||
70 | void DatebookdayAllday::removeAllEvents() | ||
71 | { | ||
72 | subWidgets.clear(); | ||
73 | item_count = 0; | ||
74 | } | ||
75 | |||
76 | DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev, | ||
77 | QWidget* parent,const char* name,WFlags f) | ||
78 | : QLabel(parent,name,f),m_Ev(ev),dateBook(db) | ||
79 | { | ||
80 | QString strDesc = m_Ev.description(); | ||
81 | strDesc = strDesc.replace(QRegExp("<"),"<"); | ||
82 | setBackgroundColor(yellow); | ||
83 | setText(strDesc); | ||
84 | setFrameStyle(QFrame::Raised|QFrame::Panel); | ||
85 | QSize s = sizeHint(); | ||
86 | setMaximumSize( QSize( 32767, s.height()-4 ) ); | ||
87 | setMinimumSize( QSize( 0, s.height()-4 ) ); | ||
88 | } | ||
89 | |||
90 | DatebookAlldayDisp::~DatebookAlldayDisp() | ||
91 | { | ||
92 | } | ||
93 | |||
94 | void DatebookAlldayDisp::beam_single_event() | ||
95 | { | ||
96 | // create an Event and beam it... | ||
97 | /* | ||
98 | * Start with the easy stuff. If start and end date is the same we can just use | ||
99 | * the values of effective m_Events | ||
100 | * If it is a multi day m_Event we need to find the real start and end date... | ||
101 | */ | ||
102 | if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) { | ||
103 | Event m_Event( m_Ev.event() ); | ||
104 | |||
105 | QDateTime dt( m_Ev.date(), m_Ev.start() ); | ||
106 | m_Event.setStart( dt ); | ||
107 | |||
108 | dt.setTime( m_Ev.end() ); | ||
109 | m_Event.setEnd( dt ); | ||
110 | emit beamMe( m_Event ); | ||
111 | }else { | ||
112 | /* | ||
113 | * at least the the Times are right now | ||
114 | */ | ||
115 | QDateTime start( m_Ev.event().start() ); | ||
116 | QDateTime end ( m_Ev.event().end () ); | ||
117 | |||
118 | /* | ||
119 | * ok we know the start date or we need to find it | ||
120 | */ | ||
121 | if ( m_Ev.start() != QTime( 0, 0, 0 ) ) { | ||
122 | start.setDate( m_Ev.date() ); | ||
123 | }else { | ||
124 | QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook ); | ||
125 | start.setDate( dt ); | ||
126 | } | ||
127 | |||
128 | /* | ||
129 | * ok we know now the end date... | ||
130 | * else | ||
131 | * get to know the offset btw the real start and real end | ||
132 | * and then add it to the new start date... | ||
133 | */ | ||
134 | if ( m_Ev.end() != QTime(23, 59, 59 ) ) { | ||
135 | end.setDate( m_Ev.date() ); | ||
136 | }else{ | ||
137 | int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() ); | ||
138 | end.setDate( start.date().addDays( days ) ); | ||
139 | } | ||
140 | Event m_Event( m_Ev.event() ); | ||
141 | m_Event.setStart( start ); | ||
142 | m_Event.setEnd ( end ); | ||
143 | emit beamMe( m_Event ); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e) | ||
148 | { | ||
149 | QColor b = backgroundColor(); | ||
150 | setBackgroundColor(green); | ||
151 | update(); | ||
152 | QPopupMenu m; | ||
153 | m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 ); | ||
154 | m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 ); | ||
155 | m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 ); | ||
156 | if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 ); | ||
157 | if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 ); | ||
158 | m.insertItem( tr( "Info"),6); | ||
159 | int r = m.exec( e->globalPos() ); | ||
160 | setBackgroundColor(b); | ||
161 | update(); | ||
162 | switch (r) { | ||
163 | case 1: | ||
164 | emit editMe( m_Ev.event() ); | ||
165 | break; | ||
166 | case 2: | ||
167 | emit deleteMe( m_Ev.event() ); | ||
168 | break; | ||
169 | case 3: | ||
170 | emit beamMe( m_Ev.event() ); | ||
171 | break; | ||
172 | case 4: | ||
173 | emit duplicateMe( m_Ev.event() ); | ||
174 | break; | ||
175 | case 5: | ||
176 | beam_single_event(); | ||
177 | break; | ||
178 | case 6: | ||
179 | emit displayMe( m_Ev.event() ); | ||
180 | break; | ||
181 | default: | ||
182 | break; | ||
183 | } | ||
184 | } | ||
185 | |||
186 | DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name) | ||
187 | :QLabel(parent,name) | ||
188 | { | ||
189 | m_Timer=new QTimer(this); | ||
190 | connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide())); | ||
191 | setFrameStyle(QFrame::Sunken|QFrame::Panel); | ||
192 | setTextFormat(RichText); | ||
193 | } | ||
194 | |||
195 | DatebookEventDesc::~DatebookEventDesc() | ||
196 | { | ||
197 | } | ||
198 | |||
199 | void DatebookEventDesc::mousePressEvent(QMouseEvent*) | ||
200 | { | ||
201 | hide(); | ||
202 | if (m_Timer->isActive()) m_Timer->stop(); | ||
203 | } | ||
204 | |||
205 | void DatebookEventDesc::disp_event(const Event&e) | ||
206 | { | ||
207 | if (m_Timer->isActive()) m_Timer->stop(); | ||
208 | QString text; | ||
209 | text = "<b><i>"+e.description()+"</i></b><br>"; | ||
210 | if (e.notes().length()>0) { | ||
211 | text+="<b>"+e.notes()+"</b><br>"; | ||
212 | } | ||
213 | if (e.location().length()>0) { | ||
214 | text+="<i>"+e.location()+"</i><br>"; | ||
215 | } | ||
216 | text = text.replace(QRegExp("\n"),"<br>"); | ||
217 | setText(text); | ||
218 | QSize s = sizeHint(); | ||
219 | s+=QSize(10,10); | ||
220 | resize(s); | ||
221 | move( QMAX(0,(parentWidget()->width()-width()) / 2), | ||
222 | (parentWidget()->height()-height())/2 ); | ||
223 | show(); | ||
224 | m_Timer->start(2000,true); | ||
225 | } | ||
226 | |||