summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/incomingdialog.cpp14
-rw-r--r--korganizer/koagendaview.cpp14
-rw-r--r--korganizer/koeditorrecurrence.cpp2
-rw-r--r--korganizer/koeventviewerdialog.cpp12
-rw-r--r--korganizer/komonthview.cpp4
-rw-r--r--korganizer/outgoingdialog.cpp12
-rw-r--r--libkcal/alarm.cpp4
7 files changed, 31 insertions, 31 deletions
diff --git a/korganizer/incomingdialog.cpp b/korganizer/incomingdialog.cpp
index 50e3077..fe78356 100644
--- a/korganizer/incomingdialog.cpp
+++ b/korganizer/incomingdialog.cpp
@@ -1,528 +1,528 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qlistview.h> 20#include <qlistview.h>
21#include <qfile.h> 21#include <qfile.h>
22#include <qdir.h> 22#include <qdir.h>
23#include <qmap.h> 23#include <qmap.h>
24 24
25#include <kglobal.h> 25#include <kglobal.h>
26#include <klocale.h> 26#include <klocale.h>
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kstandarddirs.h> 28#include <kstandarddirs.h>
29#include <kmessagebox.h> 29#include <kmessagebox.h>
30 30
31#include <libkcal/incidence.h> 31#include <libkcal/incidence.h>
32#include <libkcal/event.h> 32#include <libkcal/event.h>
33#include <libkcal/calendar.h> 33#include <libkcal/calendar.h>
34#include <libkcal/freebusy.h> 34#include <libkcal/freebusy.h>
35#include <libkcal/attendee.h> 35#include <libkcal/attendee.h>
36#include <libkcal/calendarresources.h> 36#include <libkcal/calendarresources.h>
37#include <libkcal/resourcecalendar.h> 37#include <libkcal/resourcecalendar.h>
38#include <kresources/resourceselectdialog.h> 38#include <kresources/resourceselectdialog.h>
39 39
40#ifndef KORG_NOMAIL 40#ifndef KORG_NOMAIL
41#include "mailscheduler.h" 41#include "mailscheduler.h"
42#else 42#else
43#include <libkcal/dummyscheduler.h> 43#include <libkcal/dummyscheduler.h>
44#endif 44#endif
45 45
46 46
47#include "incomingdialog.h" 47#include "incomingdialog.h"
48#include "koeventviewerdialog.h" 48#include "koeventviewerdialog.h"
49#include "kocounterdialog.h" 49#include "kocounterdialog.h"
50#include "koprefs.h" 50#include "koprefs.h"
51 51
52#ifndef KORG_NOKABC 52#ifndef KORG_NOKABC
53#define KORG_NOKABC 53#define KORG_NOKABC
54//#include <kabc/stdaddressbook.h> 54//#include <kabc/stdaddressbook.h>
55#define size count 55#define size count
56#endif 56#endif
57 57
58 58
59ScheduleItemIn::ScheduleItemIn(QListView *parent,IncidenceBase *ev, 59ScheduleItemIn::ScheduleItemIn(QListView *parent,IncidenceBase *ev,
60 Scheduler::Method method,ScheduleMessage::Status status) 60 Scheduler::Method method,ScheduleMessage::Status status)
61 : QListViewItem(parent) 61 : QListViewItem(parent)
62{ 62{
63 mIncidence = ev; 63 mIncidence = ev;
64 mMethod = method; 64 mMethod = method;
65 mStatus = status; 65 mStatus = status;
66 setText(6,Scheduler::translatedMethodName(mMethod)+" "); 66 setText(6,Scheduler::translatedMethodName(mMethod)+" ");
67 setText(7,ScheduleMessage::statusName(status)); 67 setText(7,ScheduleMessage::statusName(status));
68} 68}
69 69
70 70
71/* Visitor */ 71/* Visitor */
72ScheduleItemVisitor::ScheduleItemVisitor(ScheduleItemIn *item) 72ScheduleItemVisitor::ScheduleItemVisitor(ScheduleItemIn *item)
73{ 73{
74 mItem = item; 74 mItem = item;
75} 75}
76 76
77ScheduleItemVisitor::~ScheduleItemVisitor() 77ScheduleItemVisitor::~ScheduleItemVisitor()
78{ 78{
79} 79}
80 80
81bool ScheduleItemVisitor::visit(Event *e) 81bool ScheduleItemVisitor::visit(Event *e)
82{ 82{
83 mItem->setText(0,e->summary()); 83 mItem->setText(0,e->summary());
84 mItem->setText(1,e->dtStartDateStr()); 84 mItem->setText(1,e->dtStartDateStr());
85 if (e->doesFloat()) { 85 if (e->doesFloat()) {
86 mItem->setText(2,i18n("no time ")); 86 mItem->setText(2,i18n("no time "));
87 mItem->setText(4,i18n("no time ")); 87 mItem->setText(4,i18n("no time "));
88 } 88 }
89 else { 89 else {
90 mItem->setText(2,e->dtStartTimeStr()); 90 mItem->setText(2,e->dtStartTimeStr());
91 mItem->setText(4,e->dtEndTimeStr()); 91 mItem->setText(4,e->dtEndTimeStr());
92 } 92 }
93 if (e->hasEndDate()) { 93 if (e->hasEndDate()) {
94 mItem->setText(3,e->dtEndDateStr()); 94 mItem->setText(3,e->dtEndDateStr());
95 } 95 }
96 else { 96 else {
97 mItem->setText(3,""); 97 mItem->setText(3,"");
98 } 98 }
99 mItem->setText(5,e->organizer()+" "); 99 mItem->setText(5,e->organizer()+" ");
100 100
101 return true; 101 return true;
102} 102}
103 103
104bool ScheduleItemVisitor::visit(Todo *e) 104bool ScheduleItemVisitor::visit(Todo *e)
105{ 105{
106 mItem->setText(0,e->summary()); 106 mItem->setText(0,e->summary());
107 if (e->hasStartDate()) { 107 if (e->hasStartDate()) {
108 mItem->setText(1,e->dtStartDateStr()); 108 mItem->setText(1,e->dtStartDateStr());
109 if (!e->doesFloat()) { 109 if (!e->doesFloat()) {
110 mItem->setText(2,e->dtStartTimeStr()); 110 mItem->setText(2,e->dtStartTimeStr());
111 } 111 }
112 } 112 }
113 if (e->hasDueDate()) { 113 if (e->hasDueDate()) {
114 mItem->setText(1,e->dtDueDateStr()); 114 mItem->setText(1,e->dtDueDateStr());
115 if (!e->doesFloat()) { 115 if (!e->doesFloat()) {
116 mItem->setText(2,e->dtDueTimeStr()); 116 mItem->setText(2,e->dtDueTimeStr());
117 } 117 }
118 } 118 }
119 mItem->setText(5,e->organizer()+" "); 119 mItem->setText(5,e->organizer()+" ");
120 120
121 return true; 121 return true;
122} 122}
123 123
124bool ScheduleItemVisitor::visit(Journal *) 124bool ScheduleItemVisitor::visit(Journal *)
125{ 125{
126 return false; 126 return false;
127} 127}
128 128
129 129
130/* 130/*
131 * Constructs a IncomingDialog which is a child of 'parent', with the 131 * Constructs a IncomingDialog which is a child of 'parent', with the
132 * name 'name' and widget flags set to 'f' 132 * name 'name' and widget flags set to 'f'
133 * 133 *
134 * The dialog will by default be modeless, unless you set 'modal' to 134 * The dialog will by default be modeless, unless you set 'modal' to
135 * TRUE to construct a modal dialog. 135 * TRUE to construct a modal dialog.
136 */ 136 */
137IncomingDialog::IncomingDialog(Calendar *calendar,OutgoingDialog *outgoing, 137IncomingDialog::IncomingDialog(Calendar *calendar,OutgoingDialog *outgoing,
138 QWidget* parent,const char* name,bool modal,WFlags fl) : 138 QWidget* parent,const char* name,bool modal,WFlags fl) :
139 IncomingDialog_base(parent,name,modal,fl) 139 IncomingDialog_base(parent,name,modal,fl)
140{ 140{
141 mCalendar = calendar; 141 mCalendar = calendar;
142 mOutgoing = outgoing; 142 mOutgoing = outgoing;
143#ifndef KORG_NOMAIL 143#ifndef KORG_NOMAIL
144 mScheduler = new MailScheduler(mCalendar); 144 mScheduler = new MailScheduler(mCalendar);
145#else 145#else
146 mScheduler = new DummyScheduler(mCalendar); 146 mScheduler = new DummyScheduler(mCalendar);
147#endif 147#endif
148 mMessageListView->setColumnAlignment(1,AlignHCenter); 148 mMessageListView->setColumnAlignment(1,AlignHCenter);
149 mMessageListView->setColumnAlignment(2,AlignHCenter); 149 mMessageListView->setColumnAlignment(2,AlignHCenter);
150 mMessageListView->setColumnAlignment(3,AlignHCenter); 150 mMessageListView->setColumnAlignment(3,AlignHCenter);
151 mMessageListView->setColumnAlignment(4,AlignHCenter); 151 mMessageListView->setColumnAlignment(4,AlignHCenter);
152 QObject::connect(mMessageListView,SIGNAL(doubleClicked(QListViewItem *)), 152 QObject::connect(mMessageListView,SIGNAL(doubleClicked(QListViewItem *)),
153 this,SLOT(showEvent(QListViewItem *))); 153 this,SLOT(showEvent(QListViewItem *)));
154 retrieve(); 154 retrieve();
155} 155}
156 156
157/* 157/*
158 * Destroys the object and frees any allocated resources 158 * Destroys the object and frees any allocated resources
159 */ 159 */
160IncomingDialog::~IncomingDialog() 160IncomingDialog::~IncomingDialog()
161{ 161{
162 // no need to delete child widgets, Qt does it all for us 162 // no need to delete child widgets, Qt does it all for us
163} 163}
164 164
165void IncomingDialog::setOutgoingDialog(OutgoingDialog *outgoing) 165void IncomingDialog::setOutgoingDialog(OutgoingDialog *outgoing)
166{ 166{
167 mOutgoing = outgoing; 167 mOutgoing = outgoing;
168} 168}
169 169
170void IncomingDialog::retrieve() 170void IncomingDialog::retrieve()
171{ 171{
172 QPtrList <ScheduleMessage> messages = mScheduler->retrieveTransactions(); 172 QPtrList <ScheduleMessage> messages = mScheduler->retrieveTransactions();
173 173
174 ScheduleMessage *message; 174 ScheduleMessage *message;
175 for(message = messages.first();message;message = messages.next()) { 175 for(message = messages.first();message;message = messages.next()) {
176 IncidenceBase *inc = message->event(); 176 IncidenceBase *inc = message->event();
177 Scheduler::Method method = (Scheduler::Method)message->method(); 177 Scheduler::Method method = (Scheduler::Method)message->method();
178 ScheduleMessage::Status status = message->status(); 178 ScheduleMessage::Status status = message->status();
179 179
180 ScheduleItemIn *item = new ScheduleItemIn(mMessageListView,inc,method,status); 180 ScheduleItemIn *item = new ScheduleItemIn(mMessageListView,inc,method,status);
181 if(inc->type()!="FreeBusy") { 181 if(inc->typeID() != freebusyID ) {
182 Incidence *incidence = static_cast<Incidence *>(inc); 182 Incidence *incidence = static_cast<Incidence *>(inc);
183 ScheduleItemVisitor v(item); 183 ScheduleItemVisitor v(item);
184 if (!incidence->accept(v)) delete item; 184 if (!incidence->accept(v)) delete item;
185 } else { 185 } else {
186 FreeBusy *fb = static_cast<FreeBusy *>(item->event()); 186 FreeBusy *fb = static_cast<FreeBusy *>(item->event());
187 item->setText(0, "FreeBusy"); 187 item->setText(0, "FreeBusy");
188 item->setText(1, KGlobal::locale()->formatDate( fb->dtStart().date() ) ); 188 item->setText(1, KGlobal::locale()->formatDate( fb->dtStart().date() ) );
189 item->setText(2, KGlobal::locale()->formatTime( fb->dtStart().time() ) ); 189 item->setText(2, KGlobal::locale()->formatTime( fb->dtStart().time() ) );
190 item->setText(3, KGlobal::locale()->formatDate( fb->dtEnd().date() ) ); 190 item->setText(3, KGlobal::locale()->formatDate( fb->dtEnd().date() ) );
191 item->setText(4, KGlobal::locale()->formatTime( fb->dtEnd().time() ) ); 191 item->setText(4, KGlobal::locale()->formatTime( fb->dtEnd().time() ) );
192 item->setText(5, fb->organizer()); 192 item->setText(5, fb->organizer());
193 } 193 }
194 automaticAction(item); 194 automaticAction(item);
195 } 195 }
196 emit numMessagesChanged(mMessageListView->childCount()); 196 emit numMessagesChanged(mMessageListView->childCount());
197} 197}
198 198
199void IncomingDialog::acceptAllMessages() 199void IncomingDialog::acceptAllMessages()
200{ 200{
201 bool success = false; 201 bool success = false;
202 202
203 ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->firstChild(); 203 ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->firstChild();
204 while(item) { 204 while(item) {
205 ScheduleItemIn *nextitem = (ScheduleItemIn *)(item->nextSibling()); 205 ScheduleItemIn *nextitem = (ScheduleItemIn *)(item->nextSibling());
206 if (acceptMessage(item)) success = true; 206 if (acceptMessage(item)) success = true;
207 item = nextitem; 207 item = nextitem;
208 } 208 }
209 209
210 if (success) emit calendarUpdated(); 210 if (success) emit calendarUpdated();
211} 211}
212 212
213void IncomingDialog::acceptMessage() 213void IncomingDialog::acceptMessage()
214{ 214{
215 ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->selectedItem(); 215 ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->selectedItem();
216 if (item) { 216 if (item) {
217 if (acceptMessage(item)) emit calendarUpdated(); 217 if (acceptMessage(item)) emit calendarUpdated();
218 } 218 }
219} 219}
220 220
221bool IncomingDialog::acceptMessage(ScheduleItemIn *item) 221bool IncomingDialog::acceptMessage(ScheduleItemIn *item)
222{ 222{
223 switch (item->method()) { 223 switch (item->method()) {
224 case Scheduler::Refresh: 224 case Scheduler::Refresh:
225 return incomeRefresh(item); 225 return incomeRefresh(item);
226 break; 226 break;
227 case Scheduler::Counter: 227 case Scheduler::Counter:
228 return incomeCounter(item); 228 return incomeCounter(item);
229 break; 229 break;
230 case Scheduler::Declinecounter: 230 case Scheduler::Declinecounter:
231 return incomeDeclineCounter(item); 231 return incomeDeclineCounter(item);
232 break; 232 break;
233 case Scheduler::Add: 233 case Scheduler::Add:
234 return incomeAdd(item); 234 return incomeAdd(item);
235 break; 235 break;
236 case Scheduler::Request: 236 case Scheduler::Request:
237 return incomeRequest(item); 237 return incomeRequest(item);
238 break; 238 break;
239 default: 239 default:
240 return incomeDefault(item); 240 return incomeDefault(item);
241 } 241 }
242 return false; 242 return false;
243} 243}
244 244
245void IncomingDialog::rejectMessage() 245void IncomingDialog::rejectMessage()
246{ 246{
247 ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->selectedItem(); 247 ScheduleItemIn *item = (ScheduleItemIn *)mMessageListView->selectedItem();
248 if (item) { 248 if (item) {
249 mScheduler->deleteTransaction(item->event()); 249 mScheduler->deleteTransaction(item->event());
250 delete item; 250 delete item;
251 emit numMessagesChanged(mMessageListView->childCount()); 251 emit numMessagesChanged(mMessageListView->childCount());
252 } 252 }
253} 253}
254 254
255void IncomingDialog::showEvent(QListViewItem *item) 255void IncomingDialog::showEvent(QListViewItem *item)
256{ 256{
257 IncidenceBase *incidence = ((ScheduleItemIn *)item)->event(); 257 IncidenceBase *incidence = ((ScheduleItemIn *)item)->event();
258 if( incidence && incidence->type() == "Event" ) { 258 if( incidence && incidence->typeID() == eventID ) {
259 Event *event = static_cast<Event *>(incidence); 259 Event *event = static_cast<Event *>(incidence);
260 KOEventViewerDialog *eventViewer = new KOEventViewerDialog(this); 260 KOEventViewerDialog *eventViewer = new KOEventViewerDialog(this);
261 eventViewer->setEvent(event); 261 eventViewer->setEvent(event);
262 eventViewer->show(); 262 eventViewer->show();
263 } 263 }
264} 264}
265 265
266bool IncomingDialog::incomeRefresh(ScheduleItemIn *item) 266bool IncomingDialog::incomeRefresh(ScheduleItemIn *item)
267{ 267{
268 Event *ev = mCalendar->event(item->event()->uid()); 268 Event *ev = mCalendar->event(item->event()->uid());
269 if (ev) { 269 if (ev) {
270 //user interaction before?? 270 //user interaction before??
271 Attendee *att; 271 Attendee *att;
272 QPtrList<Attendee> attlist = ev->attendees(); 272 QPtrList<Attendee> attlist = ev->attendees();
273 for (att=attlist.first(); att; att=attlist.next()) { 273 for (att=attlist.first(); att; att=attlist.next()) {
274 Event *event = new Event(*ev); 274 Event *event = new Event(*ev);
275 mOutgoing->addMessage(event,Scheduler::Request,att->email()); 275 mOutgoing->addMessage(event,Scheduler::Request,att->email());
276 delete(event); 276 delete(event);
277 } 277 }
278 mScheduler->deleteTransaction(item->event()); 278 mScheduler->deleteTransaction(item->event());
279 delete item; 279 delete item;
280 emit numMessagesChanged(mMessageListView->childCount()); 280 emit numMessagesChanged(mMessageListView->childCount());
281 return true; 281 return true;
282 } 282 }
283 mScheduler->deleteTransaction(item->event()); 283 mScheduler->deleteTransaction(item->event());
284 delete item; 284 delete item;
285 emit numMessagesChanged(mMessageListView->childCount()); 285 emit numMessagesChanged(mMessageListView->childCount());
286 return false; 286 return false;
287} 287}
288 288
289bool IncomingDialog::incomeCounter(ScheduleItemIn *item) 289bool IncomingDialog::incomeCounter(ScheduleItemIn *item)
290{ 290{
291 IncidenceBase *incidence = ((ScheduleItemIn *)item)->event(); 291 IncidenceBase *incidence = ((ScheduleItemIn *)item)->event();
292 // currently only events supportet - attetion at insertion below! 292 // currently only events supportet - attetion at insertion below!
293 if ( incidence->type() != "Event" ) return false; 293 if ( incidence->typeID() != eventID ) return false;
294 294
295 Event *counterEvent = static_cast<Event *>( incidence ); 295 Event *counterEvent = static_cast<Event *>( incidence );
296 296
297 Event *even = mCalendar->event(counterEvent->uid()); 297 Event *even = mCalendar->event(counterEvent->uid());
298 298
299 KOCounterDialog *eventViewer = new KOCounterDialog(this); 299 KOCounterDialog *eventViewer = new KOCounterDialog(this);
300 eventViewer->addText(i18n("counter proposal event","<b>Counter-event:</b><p>")); 300 eventViewer->addText(i18n("counter proposal event","<b>Counter-event:</b><p>"));
301 eventViewer->addEvent(counterEvent); 301 eventViewer->addEvent(counterEvent);
302 eventViewer->addText("<hr>"); 302 eventViewer->addText("<hr>");
303 eventViewer->addText(i18n("<b>Original event:</b><p>")); 303 eventViewer->addText(i18n("<b>Original event:</b><p>"));
304 if (even) eventViewer->addEvent(even); 304 if (even) eventViewer->addEvent(even);
305 else eventViewer->addText(i18n("A corresponding event is missing in your calendar!")); 305 else eventViewer->addText(i18n("A corresponding event is missing in your calendar!"));
306 eventViewer->addText("<hr>"); 306 eventViewer->addText("<hr>");
307 eventViewer->addText(i18n("If this counter-event is a good proposal for your event, press 'Accept'. All Attendees will then get the new version of this event")); 307 eventViewer->addText(i18n("If this counter-event is a good proposal for your event, press 'Accept'. All Attendees will then get the new version of this event"));
308 eventViewer->show(); 308 eventViewer->show();
309 309
310 eventViewer->exec(); 310 eventViewer->exec();
311 if (eventViewer->result()) { 311 if (eventViewer->result()) {
312 kdDebug() << "IncomingDialog::Counter:Accept" << endl; 312 kdDebug() << "IncomingDialog::Counter:Accept" << endl;
313 int revision = 0; 313 int revision = 0;
314 if (even) { 314 if (even) {
315 revision = even->revision(); 315 revision = even->revision();
316 mCalendar->deleteEvent(even); 316 mCalendar->deleteEvent(even);
317 } 317 }
318 mCalendar->addIncidence(counterEvent); 318 mCalendar->addIncidence(counterEvent);
319 319
320 even = mCalendar->event(item->event()->uid()); 320 even = mCalendar->event(item->event()->uid());
321 if (even) { 321 if (even) {
322 if (revision < even->revision()) 322 if (revision < even->revision())
323 even->setRevision(even->revision()+1); 323 even->setRevision(even->revision()+1);
324 else 324 else
325 even->setRevision(revision+1); 325 even->setRevision(revision+1);
326 Event *ev = new Event(*even); 326 Event *ev = new Event(*even);
327 mOutgoing->addMessage(ev,Scheduler::Request); 327 mOutgoing->addMessage(ev,Scheduler::Request);
328 delete(ev); 328 delete(ev);
329 } 329 }
330 mScheduler->deleteTransaction(item->event()); 330 mScheduler->deleteTransaction(item->event());
331 delete item; 331 delete item;
332 emit numMessagesChanged(mMessageListView->childCount()); 332 emit numMessagesChanged(mMessageListView->childCount());
333 return true; 333 return true;
334 } else { 334 } else {
335 kdDebug() << "IncomingDialog::Counter:Decline" << endl; 335 kdDebug() << "IncomingDialog::Counter:Decline" << endl;
336 //the counter-sender's email is missing... 336 //the counter-sender's email is missing...
337 //now every attendee gets an declinecounter :-( 337 //now every attendee gets an declinecounter :-(
338 mOutgoing->addMessage(counterEvent,Scheduler::Declinecounter); 338 mOutgoing->addMessage(counterEvent,Scheduler::Declinecounter);
339 delete item; 339 delete item;
340 emit numMessagesChanged(mMessageListView->childCount()); 340 emit numMessagesChanged(mMessageListView->childCount());
341 mScheduler->deleteTransaction(item->event()); 341 mScheduler->deleteTransaction(item->event());
342 delete item; 342 delete item;
343 emit numMessagesChanged(mMessageListView->childCount()); 343 emit numMessagesChanged(mMessageListView->childCount());
344 return true; 344 return true;
345 } 345 }
346 //mScheduler->deleteTransaction(item->event()); 346 //mScheduler->deleteTransaction(item->event());
347 delete item; 347 delete item;
348 emit numMessagesChanged(mMessageListView->childCount()); 348 emit numMessagesChanged(mMessageListView->childCount());
349 return false; 349 return false;
350} 350}
351 351
352bool IncomingDialog::incomeDeclineCounter(ScheduleItemIn *item) 352bool IncomingDialog::incomeDeclineCounter(ScheduleItemIn *item)
353{ 353{
354 Event *even = mCalendar->event(item->event()->uid()); 354 Event *even = mCalendar->event(item->event()->uid());
355 if (even) { 355 if (even) {
356 mOutgoing->addMessage(even,Scheduler::Refresh); 356 mOutgoing->addMessage(even,Scheduler::Refresh);
357 mScheduler->deleteTransaction(item->event()); 357 mScheduler->deleteTransaction(item->event());
358 delete item; 358 delete item;
359 emit numMessagesChanged(mMessageListView->childCount()); 359 emit numMessagesChanged(mMessageListView->childCount());
360 return true; 360 return true;
361 } 361 }
362 mScheduler->deleteTransaction(item->event()); 362 mScheduler->deleteTransaction(item->event());
363 delete item; 363 delete item;
364 emit numMessagesChanged(mMessageListView->childCount()); 364 emit numMessagesChanged(mMessageListView->childCount());
365 return false; 365 return false;
366} 366}
367 367
368bool IncomingDialog::incomeAdd(ScheduleItemIn *item) 368bool IncomingDialog::incomeAdd(ScheduleItemIn *item)
369{ 369{
370 IncidenceBase *incidence = ((ScheduleItemIn *)item)->event(); 370 IncidenceBase *incidence = ((ScheduleItemIn *)item)->event();
371 if (incidence->type() == "Event" ) { 371 if (incidence->typeID() == eventID ) {
372 Event *refr = static_cast<Event *>( incidence ); 372 Event *refr = static_cast<Event *>( incidence );
373 mOutgoing->addMessage(refr,Scheduler::Refresh); 373 mOutgoing->addMessage(refr,Scheduler::Refresh);
374 mScheduler->deleteTransaction( incidence ); 374 mScheduler->deleteTransaction( incidence );
375 delete item; 375 delete item;
376 emit numMessagesChanged(mMessageListView->childCount()); 376 emit numMessagesChanged(mMessageListView->childCount());
377 return true; 377 return true;
378 } 378 }
379 else { 379 else {
380 kdDebug() << "IncomingDialog::incomeAdd - only Events are supportet yet" << endl; 380 kdDebug() << "IncomingDialog::incomeAdd - only Events are supportet yet" << endl;
381 mScheduler->deleteTransaction( incidence ); 381 mScheduler->deleteTransaction( incidence );
382 delete item; 382 delete item;
383 emit numMessagesChanged(mMessageListView->childCount()); 383 emit numMessagesChanged(mMessageListView->childCount());
384 return false; 384 return false;
385 } 385 }
386} 386}
387 387
388bool IncomingDialog::incomeDefault(ScheduleItemIn *item) 388bool IncomingDialog::incomeDefault(ScheduleItemIn *item)
389{ 389{
390 if (mScheduler->acceptTransaction(item->event(),item->method(),item->status())) { 390 if (mScheduler->acceptTransaction(item->event(),item->method(),item->status())) {
391 delete item; 391 delete item;
392 emit numMessagesChanged(mMessageListView->childCount()); 392 emit numMessagesChanged(mMessageListView->childCount());
393 return true; 393 return true;
394 } 394 }
395 else { 395 else {
396 KMessageBox::error(this,i18n("Unable to accept the IMIP-message. It may be a problem with the email addresses.")); 396 KMessageBox::error(this,i18n("Unable to accept the IMIP-message. It may be a problem with the email addresses."));
397 kdDebug() << "IncomingDialog::acceptMessage(): Error!" << endl; 397 kdDebug() << "IncomingDialog::acceptMessage(): Error!" << endl;
398 return false; 398 return false;
399 } 399 }
400 return false; 400 return false;
401} 401}
402 402
403bool IncomingDialog::incomeRequest(ScheduleItemIn *item) 403bool IncomingDialog::incomeRequest(ScheduleItemIn *item)
404{ 404{
405 if (item->event()->type()=="FreeBusy") { 405 if (item->event()->typeID() == freebusyID ) {
406 //handel freebusy request 406 //handel freebusy request
407 IncidenceBase *inc = item->event(); 407 IncidenceBase *inc = item->event();
408 QDateTime start = inc->dtStart(); 408 QDateTime start = inc->dtStart();
409 QDateTime end = start.addDays(inc->duration()/86400); 409 QDateTime end = start.addDays(inc->duration()/86400);
410 410
411 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 411 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
412 freebusy->setOrganizer(inc->organizer()); 412 freebusy->setOrganizer(inc->organizer());
413 Attendee *att = new Attendee(KOPrefs::instance()->fullName(), 413 Attendee *att = new Attendee(KOPrefs::instance()->fullName(),
414 KOPrefs::instance()->email()); 414 KOPrefs::instance()->email());
415 freebusy->addAttendee(att); 415 freebusy->addAttendee(att);
416 416
417 kdDebug() << "calendarview: schedule_publish_freebusy: startDate: " 417 kdDebug() << "calendarview: schedule_publish_freebusy: startDate: "
418 << KGlobal::locale()->formatDateTime( start ) << " End Date: " 418 << KGlobal::locale()->formatDateTime( start ) << " End Date: "
419 << KGlobal::locale()->formatDateTime( end ) << endl; 419 << KGlobal::locale()->formatDateTime( end ) << endl;
420 420
421 if (mOutgoing->addMessage(freebusy,Scheduler::Reply)) { 421 if (mOutgoing->addMessage(freebusy,Scheduler::Reply)) {
422 delete item; 422 delete item;
423 emit numMessagesChanged(mMessageListView->childCount()); 423 emit numMessagesChanged(mMessageListView->childCount());
424 delete(freebusy); 424 delete(freebusy);
425 return true; 425 return true;
426 } 426 }
427 return false; 427 return false;
428 } else { 428 } else {
429 return incomeDefault(item); 429 return incomeDefault(item);
430 } 430 }
431 return false; 431 return false;
432} 432}
433 433
434bool IncomingDialog::automaticAction(ScheduleItemIn *item) 434bool IncomingDialog::automaticAction(ScheduleItemIn *item)
435{ 435{
436 bool autoAction = false; 436 bool autoAction = false;
437 IncidenceBase *inc = item->event(); 437 IncidenceBase *inc = item->event();
438 Scheduler::Method method = item->method(); 438 Scheduler::Method method = item->method();
439 439
440 if( inc->type()=="FreeBusy" ) { 440 if( inc->typeID() == freebusyID ) {
441 if ( method==Scheduler::Request ) { 441 if ( method==Scheduler::Request ) {
442 if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) { 442 if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) {
443 // reply freebusy information 443 // reply freebusy information
444 if ( checkOrganizerInAddressbook(inc->organizer()) ) { 444 if ( checkOrganizerInAddressbook(inc->organizer()) ) {
445 incomeRequest(item); 445 incomeRequest(item);
446 } 446 }
447 } else return false; 447 } else return false;
448 } else { 448 } else {
449 449
450 if ( method==Scheduler::Reply ) { 450 if ( method==Scheduler::Reply ) {
451 if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) { 451 if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) {
452 // insert freebusy information 452 // insert freebusy information
453 //if ( checkAttendeesInAddressbook(inc) ) 453 //if ( checkAttendeesInAddressbook(inc) )
454 454
455 } else return false; 455 } else return false;
456 } else { 456 } else {
457 if ( method==Scheduler::Publish) { 457 if ( method==Scheduler::Publish) {
458 if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) { 458 if ( KOPrefs::instance()->mIMIPAutoFreeBusy==KOPrefs::addressbookAuto ) {
459 // insert freebusy information 459 // insert freebusy information
460 //if ( checkOrganizerInAddressbook(inc->organizer()) ) 460 //if ( checkOrganizerInAddressbook(inc->organizer()) )
461 461
462 } 462 }
463 } else return false; 463 } else return false;
464 } 464 }
465 } 465 }
466 } 466 }
467 467
468 if ( inc->type()=="Event" ) { 468 if ( inc->typeID() == eventID ) {
469 if ( method==Scheduler::Request || method==Scheduler::Publish ) { 469 if ( method==Scheduler::Request || method==Scheduler::Publish ) {
470 if ( KOPrefs::instance()->mIMIPAutoInsertRequest==KOPrefs::addressbookAuto ) { 470 if ( KOPrefs::instance()->mIMIPAutoInsertRequest==KOPrefs::addressbookAuto ) {
471 // insert event 471 // insert event
472 if ( checkOrganizerInAddressbook(inc->organizer()) ) 472 if ( checkOrganizerInAddressbook(inc->organizer()) )
473 autoAction = acceptMessage(item); 473 autoAction = acceptMessage(item);
474 } else return false; 474 } else return false;
475 } else { 475 } else {
476 476
477 if ( method==Scheduler::Reply ) { 477 if ( method==Scheduler::Reply ) {
478 if ( KOPrefs::instance()->mIMIPAutoInsertReply==KOPrefs::addressbookAuto ) { 478 if ( KOPrefs::instance()->mIMIPAutoInsertReply==KOPrefs::addressbookAuto ) {
479 // update event information 479 // update event information
480 if ( checkAttendeesInAddressbook(inc) ) 480 if ( checkAttendeesInAddressbook(inc) )
481 autoAction = acceptMessage(item); 481 autoAction = acceptMessage(item);
482 } else return false; 482 } else return false;
483 } else { 483 } else {
484 484
485 if ( method==Scheduler::Refresh ) { 485 if ( method==Scheduler::Refresh ) {
486 if ( KOPrefs::instance()->mIMIPAutoRefresh==KOPrefs::addressbookAuto ) { 486 if ( KOPrefs::instance()->mIMIPAutoRefresh==KOPrefs::addressbookAuto ) {
487 // send refresh-information 487 // send refresh-information
488 if ( checkAttendeesInAddressbook(inc) ) 488 if ( checkAttendeesInAddressbook(inc) )
489 autoAction = acceptMessage(item); 489 autoAction = acceptMessage(item);
490 else return false; 490 else return false;
491 } else return false; 491 } else return false;
492 } else return false; 492 } else return false;
493 } 493 }
494 } 494 }
495 } 495 }
496 return autoAction; 496 return autoAction;
497} 497}
498 498
499bool IncomingDialog::checkOrganizerInAddressbook(QString organizer) 499bool IncomingDialog::checkOrganizerInAddressbook(QString organizer)
500{ 500{
501 bool inBook = false; 501 bool inBook = false;
502#ifndef KORG_NOKABC 502#ifndef KORG_NOKABC
503 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 503 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
504 KABC::Addressee::List addressList; 504 KABC::Addressee::List addressList;
505 addressList = add_book->findByEmail(organizer); 505 addressList = add_book->findByEmail(organizer);
506 if ( addressList.size()>0 ) inBook = true; 506 if ( addressList.size()>0 ) inBook = true;
507#endif 507#endif
508 return inBook; 508 return inBook;
509} 509}
510 510
511bool IncomingDialog::checkAttendeesInAddressbook(IncidenceBase *inc) 511bool IncomingDialog::checkAttendeesInAddressbook(IncidenceBase *inc)
512{ 512{
513 bool inBook = false; 513 bool inBook = false;
514#ifndef KORG_NOKABC 514#ifndef KORG_NOKABC
515 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 515 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
516 KABC::Addressee::List addressList; 516 KABC::Addressee::List addressList;
517 QPtrList <Attendee> attendees; 517 QPtrList <Attendee> attendees;
518 Attendee *att; 518 Attendee *att;
519 attendees = inc->attendees(); 519 attendees = inc->attendees();
520 for (att=attendees.first();att;att=attendees.next()) { 520 for (att=attendees.first();att;att=attendees.next()) {
521 addressList = add_book->findByEmail(att->email()); 521 addressList = add_book->findByEmail(att->email());
522 if (addressList.size()>0 ) inBook = true; 522 if (addressList.size()>0 ) inBook = true;
523 } 523 }
524#endif 524#endif
525 return inBook; 525 return inBook;
526} 526}
527 527
528//#include "incomingdialog.moc" 528//#include "incomingdialog.moc"
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 1320a2e..b2b136a 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -1,1654 +1,1654 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qhbox.h> 24#include <qhbox.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qlabel.h> 26#include <qlabel.h>
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#ifndef KORG_NOSPLITTER 29#ifndef KORG_NOSPLITTER
30#include <qsplitter.h> 30#include <qsplitter.h>
31#endif 31#endif
32#include <qfont.h> 32#include <qfont.h>
33#include <qfontmetrics.h> 33#include <qfontmetrics.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35#include <qtooltip.h> 35#include <qtooltip.h>
36#include <qpainter.h> 36#include <qpainter.h>
37#include <qpushbutton.h> 37#include <qpushbutton.h>
38#include <qapplication.h> 38#include <qapplication.h>
39 39
40#include <kapplication.h> 40#include <kapplication.h>
41#include <KDGanttMinimizeSplitter.h> 41#include <KDGanttMinimizeSplitter.h>
42#include <kdebug.h> 42#include <kdebug.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44#include <kiconloader.h> 44#include <kiconloader.h>
45#include <klocale.h> 45#include <klocale.h>
46#include <kconfig.h> 46#include <kconfig.h>
47#include <kglobal.h> 47#include <kglobal.h>
48#include "calendarview.h" 48#include "calendarview.h"
49#include "koviewmanager.h" 49#include "koviewmanager.h"
50 50
51#include <libkcal/calendar.h> 51#include <libkcal/calendar.h>
52#include <libkcal/icaldrag.h> 52#include <libkcal/icaldrag.h>
53#include <libkcal/dndfactory.h> 53#include <libkcal/dndfactory.h>
54 54
55#include <kcalendarsystem.h> 55#include <kcalendarsystem.h>
56 56
57#include "koglobals.h" 57#include "koglobals.h"
58#ifndef KORG_NOPLUGINS 58#ifndef KORG_NOPLUGINS
59#include "kocore.h" 59#include "kocore.h"
60#endif 60#endif
61#include "koprefs.h" 61#include "koprefs.h"
62#include "koagenda.h" 62#include "koagenda.h"
63#include "koagendaitem.h" 63#include "koagendaitem.h"
64#ifndef KORG_NOPRINTER 64#ifndef KORG_NOPRINTER
65#include "calprinter.h" 65#include "calprinter.h"
66#endif 66#endif
67 67
68#include "koagendaview.h" 68#include "koagendaview.h"
69//#include "koagendaview.moc" 69//#include "koagendaview.moc"
70 70
71//extern bool globalFlagBlockPainting; 71//extern bool globalFlagBlockPainting;
72extern int globalFlagBlockAgenda; 72extern int globalFlagBlockAgenda;
73extern int globalFlagBlockStartup; 73extern int globalFlagBlockStartup;
74extern int globalFlagBlockAgendaItemPaint; 74extern int globalFlagBlockAgendaItemPaint;
75extern int globalFlagBlockAgendaItemUpdate; 75extern int globalFlagBlockAgendaItemUpdate;
76extern int globalFlagBlockLabel; 76extern int globalFlagBlockLabel;
77using namespace KOrg; 77using namespace KOrg;
78 78
79 79
80 80
81TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : 81TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) :
82 QScrollView(parent,name,f) 82 QScrollView(parent,name,f)
83{ 83{
84 myPix.resize( 1, 1 ); 84 myPix.resize( 1, 1 );
85 mRows = rows; 85 mRows = rows;
86 86
87 mRedrawNeeded = true; 87 mRedrawNeeded = true;
88 setMinimumHeight( 20 ); 88 setMinimumHeight( 20 );
89 mCellHeight = KOPrefs::instance()->mHourSize*4; 89 mCellHeight = KOPrefs::instance()->mHourSize*4;
90 90
91 enableClipper(true); 91 enableClipper(true);
92 92
93 setHScrollBarMode(AlwaysOff); 93 setHScrollBarMode(AlwaysOff);
94 setVScrollBarMode(AlwaysOff); 94 setVScrollBarMode(AlwaysOff);
95 95
96 resizeContents(50,mRows * mCellHeight); 96 resizeContents(50,mRows * mCellHeight);
97 97
98 viewport()->setBackgroundMode( PaletteBackground ); 98 viewport()->setBackgroundMode( PaletteBackground );
99} 99}
100 100
101void TimeLabels::setCellHeight(int height) 101void TimeLabels::setCellHeight(int height)
102{ 102{
103 mCellHeight = height; 103 mCellHeight = height;
104} 104}
105 105
106/* 106/*
107 Optimization so that only the "dirty" portion of the scroll view 107 Optimization so that only the "dirty" portion of the scroll view
108 is redrawn. Unfortunately, this is not called by default paintEvent() method. 108 is redrawn. Unfortunately, this is not called by default paintEvent() method.
109*/ 109*/
110void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) 110void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch)
111{ 111{
112 112
113 cx = contentsX() + frameWidth()*2; 113 cx = contentsX() + frameWidth()*2;
114 cw = contentsWidth() ; 114 cw = contentsWidth() ;
115 // end of workaround 115 // end of workaround
116 116
117 int cell = ((int)(cy/mCellHeight)); 117 int cell = ((int)(cy/mCellHeight));
118 int y = cell * mCellHeight; 118 int y = cell * mCellHeight;
119 QFontMetrics fm = fontMetrics(); 119 QFontMetrics fm = fontMetrics();
120 QString hour; 120 QString hour;
121 QString suffix = "am"; 121 QString suffix = "am";
122 int timeHeight = fm.ascent(); 122 int timeHeight = fm.ascent();
123 QFont nFont = font(); 123 QFont nFont = font();
124 p->setFont( font()); 124 p->setFont( font());
125 125
126 if (!KGlobal::locale()->use12Clock()) { 126 if (!KGlobal::locale()->use12Clock()) {
127 suffix = "00"; 127 suffix = "00";
128 } else 128 } else
129 if (cell > 11) suffix = "pm"; 129 if (cell > 11) suffix = "pm";
130 130
131 if ( timeHeight > mCellHeight ) { 131 if ( timeHeight > mCellHeight ) {
132 timeHeight = mCellHeight-1; 132 timeHeight = mCellHeight-1;
133 int pointS = nFont.pointSize(); 133 int pointS = nFont.pointSize();
134 while ( pointS > 4 ) { 134 while ( pointS > 4 ) {
135 nFont.setPointSize( pointS ); 135 nFont.setPointSize( pointS );
136 fm = QFontMetrics( nFont ); 136 fm = QFontMetrics( nFont );
137 if ( fm.ascent() < mCellHeight ) 137 if ( fm.ascent() < mCellHeight )
138 break; 138 break;
139 -- pointS; 139 -- pointS;
140 } 140 }
141 fm = QFontMetrics( nFont ); 141 fm = QFontMetrics( nFont );
142 timeHeight = fm.ascent(); 142 timeHeight = fm.ascent();
143 } 143 }
144 //timeHeight -= (timeHeight/4-2); 144 //timeHeight -= (timeHeight/4-2);
145 QFont sFont = nFont; 145 QFont sFont = nFont;
146 sFont.setPointSize( sFont.pointSize()/2 ); 146 sFont.setPointSize( sFont.pointSize()/2 );
147 QFontMetrics fmS( sFont ); 147 QFontMetrics fmS( sFont );
148 int sHei = fmS.ascent() ; 148 int sHei = fmS.ascent() ;
149 //sHei -= (sHei/4-2); 149 //sHei -= (sHei/4-2);
150 int startW = mMiniWidth - frameWidth()-2 ; 150 int startW = mMiniWidth - frameWidth()-2 ;
151 int tw2 = fmS.width(suffix); 151 int tw2 = fmS.width(suffix);
152 timeHeight = (timeHeight-1) /2 -1; 152 timeHeight = (timeHeight-1) /2 -1;
153 //testline 153 //testline
154 //p->drawLine(0,0,0,contentsHeight()); 154 //p->drawLine(0,0,0,contentsHeight());
155 while (y < cy + ch+mCellHeight) { 155 while (y < cy + ch+mCellHeight) {
156 p->drawLine(startW-tw2+1 ,y,cw+2,y); 156 p->drawLine(startW-tw2+1 ,y,cw+2,y);
157 hour.setNum(cell); 157 hour.setNum(cell);
158 // handle 24h and am/pm time formats 158 // handle 24h and am/pm time formats
159 if (KGlobal::locale()->use12Clock()) { 159 if (KGlobal::locale()->use12Clock()) {
160 if (cell == 12) suffix = "pm"; 160 if (cell == 12) suffix = "pm";
161 if (cell == 0) hour.setNum(12); 161 if (cell == 0) hour.setNum(12);
162 if (cell > 12) hour.setNum(cell - 12); 162 if (cell > 12) hour.setNum(cell - 12);
163 } 163 }
164 164
165 // center and draw the time label 165 // center and draw the time label
166 int timeWidth = fm.width(hour); 166 int timeWidth = fm.width(hour);
167 int offset = startW - timeWidth - tw2 -1 ; 167 int offset = startW - timeWidth - tw2 -1 ;
168 p->setFont( nFont ); 168 p->setFont( nFont );
169 p->drawText( offset, y+ timeHeight, hour); 169 p->drawText( offset, y+ timeHeight, hour);
170 p->setFont( sFont ); 170 p->setFont( sFont );
171 offset = startW - tw2; 171 offset = startW - tw2;
172 p->drawText( offset, y -1, suffix); 172 p->drawText( offset, y -1, suffix);
173 173
174 // increment indices 174 // increment indices
175 y += mCellHeight; 175 y += mCellHeight;
176 cell++; 176 cell++;
177 } 177 }
178 178
179 179
180 180
181 181
182} 182}
183 183
184/** 184/**
185 Calculates the minimum width. 185 Calculates the minimum width.
186*/ 186*/
187int TimeLabels::minimumWidth() const 187int TimeLabels::minimumWidth() const
188{ 188{
189 return mMiniWidth; 189 return mMiniWidth;
190} 190}
191 191
192/** updates widget's internal state */ 192/** updates widget's internal state */
193void TimeLabels::updateConfig() 193void TimeLabels::updateConfig()
194{ 194{
195 mRedrawNeeded = true; 195 mRedrawNeeded = true;
196 // set the font 196 // set the font
197 // config->setGroup("Fonts"); 197 // config->setGroup("Fonts");
198 // QFont font = config->readFontEntry("TimeBar Font"); 198 // QFont font = config->readFontEntry("TimeBar Font");
199 setFont(KOPrefs::instance()->mTimeBarFont); 199 setFont(KOPrefs::instance()->mTimeBarFont);
200 QString test = "20"; 200 QString test = "20";
201 if (KGlobal::locale()->use12Clock()) 201 if (KGlobal::locale()->use12Clock())
202 test = "12"; 202 test = "12";
203 mMiniWidth = fontMetrics().width(test); 203 mMiniWidth = fontMetrics().width(test);
204 if (KGlobal::locale()->use12Clock()) 204 if (KGlobal::locale()->use12Clock())
205 test = "pm"; 205 test = "pm";
206 else { 206 else {
207 test = "00"; 207 test = "00";
208 } 208 }
209 QFont sFont = font(); 209 QFont sFont = font();
210 sFont.setPointSize( sFont.pointSize()/2 ); 210 sFont.setPointSize( sFont.pointSize()/2 );
211 QFontMetrics fmS( sFont ); 211 QFontMetrics fmS( sFont );
212 mMiniWidth += fmS.width( test ) + frameWidth()*2+4 ; 212 mMiniWidth += fmS.width( test ) + frameWidth()*2+4 ;
213 // update geometry restrictions based on new settings 213 // update geometry restrictions based on new settings
214 setFixedWidth( mMiniWidth ); 214 setFixedWidth( mMiniWidth );
215 215
216 // update HourSize 216 // update HourSize
217 mCellHeight = KOPrefs::instance()->mHourSize*4; 217 mCellHeight = KOPrefs::instance()->mHourSize*4;
218 resizeContents(mMiniWidth,mRows * mCellHeight+1); 218 resizeContents(mMiniWidth,mRows * mCellHeight+1);
219} 219}
220 220
221/** update time label positions */ 221/** update time label positions */
222void TimeLabels::positionChanged() 222void TimeLabels::positionChanged()
223{ 223{
224 int adjustment = mAgenda->contentsY(); 224 int adjustment = mAgenda->contentsY();
225 setContentsPos(0, adjustment); 225 setContentsPos(0, adjustment);
226} 226}
227 227
228/** */ 228/** */
229void TimeLabels::setAgenda(KOAgenda* agenda) 229void TimeLabels::setAgenda(KOAgenda* agenda)
230{ 230{
231 mAgenda = agenda; 231 mAgenda = agenda;
232} 232}
233 233
234void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) 234void TimeLabels::contentsMousePressEvent ( QMouseEvent * e)
235{ 235{
236 mMouseDownY = e->pos().y(); 236 mMouseDownY = e->pos().y();
237 mOrgCap = topLevelWidget()->caption(); 237 mOrgCap = topLevelWidget()->caption();
238} 238}
239 239
240void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) 240void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e )
241{ 241{
242 int diff = mMouseDownY - e->pos().y(); 242 int diff = mMouseDownY - e->pos().y();
243 if ( diff < 10 && diff > -10 ) 243 if ( diff < 10 && diff > -10 )
244 return; 244 return;
245 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; 245 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ;
246 if ( tSize < 4 ) 246 if ( tSize < 4 )
247 tSize = 4; 247 tSize = 4;
248 if ( tSize > 22 ) 248 if ( tSize > 22 )
249 tSize = 22; 249 tSize = 22;
250 tSize = (tSize-2)/2; 250 tSize = (tSize-2)/2;
251 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); 251 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize));
252 252
253} 253}
254void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) 254void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e )
255{ 255{
256 topLevelWidget()->setCaption( mOrgCap ); 256 topLevelWidget()->setCaption( mOrgCap );
257 int diff = mMouseDownY - e->pos().y(); 257 int diff = mMouseDownY - e->pos().y();
258 if ( diff < 10 && diff > -10 ) 258 if ( diff < 10 && diff > -10 )
259 return; 259 return;
260 int tSize = KOPrefs::instance()->mHourSize + (diff/10); 260 int tSize = KOPrefs::instance()->mHourSize + (diff/10);
261 if ( tSize < 4 ) 261 if ( tSize < 4 )
262 tSize = 4; 262 tSize = 4;
263 if ( tSize > 22 ) 263 if ( tSize > 22 )
264 tSize = 22; 264 tSize = 22;
265 tSize = (tSize/2)*2; 265 tSize = (tSize/2)*2;
266 if ( tSize == KOPrefs::instance()->mHourSize ) 266 if ( tSize == KOPrefs::instance()->mHourSize )
267 return; 267 return;
268 KOPrefs::instance()->mHourSize = tSize; 268 KOPrefs::instance()->mHourSize = tSize;
269 emit scaleChanged(); 269 emit scaleChanged();
270} 270}
271 271
272/** This is called in response to repaint() */ 272/** This is called in response to repaint() */
273void TimeLabels::paintEvent(QPaintEvent*) 273void TimeLabels::paintEvent(QPaintEvent*)
274{ 274{
275 275
276 // kdDebug() << "paintevent..." << endl; 276 // kdDebug() << "paintevent..." << endl;
277 // this is another hack! 277 // this is another hack!
278 // QPainter painter(this); 278 // QPainter painter(this);
279 //QString c 279 //QString c
280 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); 280 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight());
281} 281}
282 282
283//////////////////////////////////////////////////////////////////////////// 283////////////////////////////////////////////////////////////////////////////
284 284
285EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) 285EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name)
286 : QFrame(parent,name) 286 : QFrame(parent,name)
287{ 287{
288 mColumns = 1; 288 mColumns = 1;
289 mTopBox = 0; 289 mTopBox = 0;
290 mLocation = loc; 290 mLocation = loc;
291 mTopLayout = 0; 291 mTopLayout = 0;
292 mPaintWidget = 0; 292 mPaintWidget = 0;
293 mXOffset = 0; 293 mXOffset = 0;
294 if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); 294 if (mLocation == Top) mPixmap = SmallIcon("1uparrow");
295 else mPixmap = SmallIcon("1downarrow"); 295 else mPixmap = SmallIcon("1downarrow");
296 mEnabled.resize(mColumns); 296 mEnabled.resize(mColumns);
297 mEnabled.fill( false ); 297 mEnabled.fill( false );
298 setMinimumHeight(mPixmap.height()); 298 setMinimumHeight(mPixmap.height());
299} 299}
300 300
301EventIndicator::~EventIndicator() 301EventIndicator::~EventIndicator()
302{ 302{
303} 303}
304 304
305void EventIndicator::drawContents(QPainter *p) 305void EventIndicator::drawContents(QPainter *p)
306{ 306{
307 307
308 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; 308 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl;
309 KDGanttSplitterHandle* han = 0; 309 KDGanttSplitterHandle* han = 0;
310 if ( mPaintWidget ) 310 if ( mPaintWidget )
311 han = mPaintWidget->firstHandle(); 311 han = mPaintWidget->firstHandle();
312 if ( ! han ) { 312 if ( ! han ) {
313 int i; 313 int i;
314 for(i=0;i<mColumns;++i) { 314 for(i=0;i<mColumns;++i) {
315 if (mEnabled[i]) { 315 if (mEnabled[i]) {
316 int cellWidth = contentsRect().right()/mColumns; 316 int cellWidth = contentsRect().right()/mColumns;
317 int xOffset = KOGlobals::self()->reverseLayout() ? 317 int xOffset = KOGlobals::self()->reverseLayout() ?
318 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 : 318 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 :
319 i*cellWidth + (cellWidth -mPixmap.width()) /2; 319 i*cellWidth + (cellWidth -mPixmap.width()) /2;
320 p->drawPixmap(QPoint(1+xOffset,0),mPixmap); 320 p->drawPixmap(QPoint(1+xOffset,0),mPixmap);
321 } 321 }
322 } 322 }
323 } else { 323 } else {
324 han->repaint(); 324 han->repaint();
325 //mPaintWidget->setBackgroundColor( red ); 325 //mPaintWidget->setBackgroundColor( red );
326 326
327 QPainter pa( han ); 327 QPainter pa( han );
328 int i; 328 int i;
329 bool setColor = false; 329 bool setColor = false;
330 for(i=0;i<mColumns;++i) { 330 for(i=0;i<mColumns;++i) {
331 if (mEnabled[i]) { 331 if (mEnabled[i]) {
332 setColor = true; 332 setColor = true;
333 333
334 int cellWidth = contentsRect().right()/mColumns; 334 int cellWidth = contentsRect().right()/mColumns;
335 int xOffset = KOGlobals::self()->reverseLayout() ? 335 int xOffset = KOGlobals::self()->reverseLayout() ?
336 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : 336 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 :
337 i*cellWidth + cellWidth/2 -mPixmap.width()/2; 337 i*cellWidth + cellWidth/2 -mPixmap.width()/2;
338 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); 338 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap);
339 //qDebug("222draw pix %d ",xOffset ); 339 //qDebug("222draw pix %d ",xOffset );
340 340
341 } 341 }
342 342
343 } 343 }
344 pa.end(); 344 pa.end();
345 345
346 } 346 }
347} 347}
348 348
349void EventIndicator::setXOffset( int x ) 349void EventIndicator::setXOffset( int x )
350{ 350{
351 mXOffset = x; 351 mXOffset = x;
352} 352}
353void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) 353void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w )
354{ 354{
355 mPaintWidget = w; 355 mPaintWidget = w;
356 setMaximumHeight(0); 356 setMaximumHeight(0);
357 setMinimumHeight(0); 357 setMinimumHeight(0);
358} 358}
359void EventIndicator::changeColumns(int columns) 359void EventIndicator::changeColumns(int columns)
360{ 360{
361 mColumns = columns; 361 mColumns = columns;
362 mEnabled.resize(mColumns); 362 mEnabled.resize(mColumns);
363 363
364 update(); 364 update();
365} 365}
366 366
367void EventIndicator::enableColumn(int column, bool enable) 367void EventIndicator::enableColumn(int column, bool enable)
368{ 368{
369 mEnabled[column] = enable; 369 mEnabled[column] = enable;
370} 370}
371 371
372 372
373//////////////////////////////////////////////////////////////////////////// 373////////////////////////////////////////////////////////////////////////////
374//////////////////////////////////////////////////////////////////////////// 374////////////////////////////////////////////////////////////////////////////
375//////////////////////////////////////////////////////////////////////////// 375////////////////////////////////////////////////////////////////////////////
376 376
377KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : 377KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
378 KOEventView (cal,parent,name) 378 KOEventView (cal,parent,name)
379{ 379{
380 mBlockUpdating = true; 380 mBlockUpdating = true;
381 mStartHour = 8; 381 mStartHour = 8;
382 mSelectedDates.append(QDate::currentDate()); 382 mSelectedDates.append(QDate::currentDate());
383 383
384 mLayoutDayLabels = 0; 384 mLayoutDayLabels = 0;
385 mDayLabelsFrame = 0; 385 mDayLabelsFrame = 0;
386 mDayLabels = 0; 386 mDayLabels = 0;
387 bool isRTL = KOGlobals::self()->reverseLayout(); 387 bool isRTL = KOGlobals::self()->reverseLayout();
388 QPixmap expandPix; 388 QPixmap expandPix;
389 if ( KOPrefs::instance()->mVerticalScreen ) { 389 if ( KOPrefs::instance()->mVerticalScreen ) {
390 expandPix = SmallIcon( "1updownarrow" ); 390 expandPix = SmallIcon( "1updownarrow" );
391 } else { 391 } else {
392 expandPix = SmallIcon("1leftrightarrow" ); 392 expandPix = SmallIcon("1leftrightarrow" );
393 } 393 }
394 394
395 QBoxLayout *topLayout = new QVBoxLayout(this); 395 QBoxLayout *topLayout = new QVBoxLayout(this);
396 396
397 // Create day name labels for agenda columns 397 // Create day name labels for agenda columns
398 // Create agenda splitter 398 // Create agenda splitter
399 399
400 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); 400 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this);
401 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 401 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
402 topLayout->addWidget( mSplitterAgenda ); 402 topLayout->addWidget( mSplitterAgenda );
403 mAllDayFrame = new QHBox(mSplitterAgenda); 403 mAllDayFrame = new QHBox(mSplitterAgenda);
404 mAllDayFrame->setFocusPolicy(NoFocus); 404 mAllDayFrame->setFocusPolicy(NoFocus);
405 QWidget *agendaFrame = new QWidget(mSplitterAgenda); 405 QWidget *agendaFrame = new QWidget(mSplitterAgenda);
406 agendaFrame->setFocusPolicy(NoFocus); 406 agendaFrame->setFocusPolicy(NoFocus);
407 407
408 // Create all-day agenda widget 408 // Create all-day agenda widget
409 mDummyAllDayLeft = new QVBox( mAllDayFrame ); 409 mDummyAllDayLeft = new QVBox( mAllDayFrame );
410 410
411 mExpandButton = new QPushButton(mDummyAllDayLeft); 411 mExpandButton = new QPushButton(mDummyAllDayLeft);
412 mExpandButton->setPixmap( expandPix ); 412 mExpandButton->setPixmap( expandPix );
413 int widebut = mExpandButton->sizeHint().width()+4; 413 int widebut = mExpandButton->sizeHint().width()+4;
414 int heibut = mExpandButton->sizeHint().height()+4; 414 int heibut = mExpandButton->sizeHint().height()+4;
415 if ( heibut > widebut ) 415 if ( heibut > widebut )
416 widebut = heibut ; 416 widebut = heibut ;
417 417
418 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, 418 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed,
419 // QSizePolicy::Fixed ) ); 419 // QSizePolicy::Fixed ) );
420 mExpandButton->setFixedSize( widebut, widebut); 420 mExpandButton->setFixedSize( widebut, widebut);
421 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); 421 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) );
422 mExpandButton->setFocusPolicy(NoFocus); 422 mExpandButton->setFocusPolicy(NoFocus);
423 mAllDayAgenda = new KOAgenda(1,mAllDayFrame); 423 mAllDayAgenda = new KOAgenda(1,mAllDayFrame);
424 mAllDayAgenda->setFocusPolicy(NoFocus); 424 mAllDayAgenda->setFocusPolicy(NoFocus);
425 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); 425 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame);
426 426
427 // Create event context menu for all day agenda 427 // Create event context menu for all day agenda
428 //mAllDayAgendaPopup = eventPopup(); 428 //mAllDayAgendaPopup = eventPopup();
429 429
430 // Create agenda frame 430 // Create agenda frame
431 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3); 431 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3);
432 // QHBox *agendaFrame = new QHBox(splitterAgenda); 432 // QHBox *agendaFrame = new QHBox(splitterAgenda);
433 433
434 // create event indicator bars 434 // create event indicator bars
435 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); 435 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame);
436#ifndef DESKTOP_VERSION 436#ifndef DESKTOP_VERSION
437 mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); 437 mEventIndicatorTop->setPaintWidget( mSplitterAgenda );
438#endif 438#endif
439 mDayLabelsFrame = new QHBox(agendaFrame); 439 mDayLabelsFrame = new QHBox(agendaFrame);
440 //topLayout->addWidget(mDayLabelsFrame); 440 //topLayout->addWidget(mDayLabelsFrame);
441 mDayLabels = new QFrame (mDayLabelsFrame); 441 mDayLabels = new QFrame (mDayLabelsFrame);
442 mLayoutDayLabels = new QHBoxLayout(mDayLabels); 442 mLayoutDayLabels = new QHBoxLayout(mDayLabels);
443 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2); 443 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2);
444 agendaLayout->addWidget(mEventIndicatorTop,1,1); 444 agendaLayout->addWidget(mEventIndicatorTop,1,1);
445 445
446 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, 446 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom,
447 agendaFrame); 447 agendaFrame);
448 agendaLayout->addWidget(mEventIndicatorBottom,3,1); 448 agendaLayout->addWidget(mEventIndicatorBottom,3,1);
449 QWidget *dummyAgendaRight = new QWidget(agendaFrame); 449 QWidget *dummyAgendaRight = new QWidget(agendaFrame);
450 agendaLayout->addWidget(dummyAgendaRight,1,2); 450 agendaLayout->addWidget(dummyAgendaRight,1,2);
451 451
452 // Create time labels 452 // Create time labels
453 mTimeLabels = new TimeLabels(24,agendaFrame); 453 mTimeLabels = new TimeLabels(24,agendaFrame);
454 agendaLayout->addWidget(mTimeLabels,2,0); 454 agendaLayout->addWidget(mTimeLabels,2,0);
455 connect(mTimeLabels,SIGNAL( scaleChanged()), 455 connect(mTimeLabels,SIGNAL( scaleChanged()),
456 this,SLOT(updateConfig())); 456 this,SLOT(updateConfig()));
457 457
458 // Create agenda 458 // Create agenda
459 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); 459 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame);
460 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2); 460 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2);
461 agendaLayout->setColStretch(1,1); 461 agendaLayout->setColStretch(1,1);
462 mAgenda->setFocusPolicy(NoFocus); 462 mAgenda->setFocusPolicy(NoFocus);
463 // Create event context menu for agenda 463 // Create event context menu for agenda
464 mAllAgendaPopup = eventPopup(); 464 mAllAgendaPopup = eventPopup();
465 465
466#if 0 466#if 0
467 mAllAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), 467 mAllAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")),
468 i18n("Toggle Alarm"),mAgenda, 468 i18n("Toggle Alarm"),mAgenda,
469 SLOT(popupAlarm()),true); 469 SLOT(popupAlarm()),true);
470 470
471#endif 471#endif
472 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 472 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
473 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 473 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
474 474
475 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 475 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
476 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 476 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
477 mAgenda->setPopup( mAllAgendaPopup ); 477 mAgenda->setPopup( mAllAgendaPopup );
478 mAllDayAgenda->setPopup( mAllAgendaPopup ); 478 mAllDayAgenda->setPopup( mAllAgendaPopup );
479 // make connections between dependent widgets 479 // make connections between dependent widgets
480 mTimeLabels->setAgenda(mAgenda); 480 mTimeLabels->setAgenda(mAgenda);
481 481
482 // Update widgets to reflect user preferences 482 // Update widgets to reflect user preferences
483 // updateConfig(); 483 // updateConfig();
484 484
485 // createDayLabels(); 485 // createDayLabels();
486 486
487 // these blank widgets make the All Day Event box line up with the agenda 487 // these blank widgets make the All Day Event box line up with the agenda
488 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 488 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
489 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 489 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
490 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 490 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
491 491
492 // Scrolling 492 // Scrolling
493 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), 493 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)),
494 mTimeLabels, SLOT(positionChanged())); 494 mTimeLabels, SLOT(positionChanged()));
495 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), 495 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)),
496 SLOT(setContentsPos(int))); 496 SLOT(setContentsPos(int)));
497 497
498 connect(mAgenda,SIGNAL(showDateView( int, int)),SLOT(slotShowDateView( int, int ))); 498 connect(mAgenda,SIGNAL(showDateView( int, int)),SLOT(slotShowDateView( int, int )));
499 connect(mAllDayAgenda,SIGNAL(showDateView( int, int )), SLOT(slotShowDateView( int, int ) )); 499 connect(mAllDayAgenda,SIGNAL(showDateView( int, int )), SLOT(slotShowDateView( int, int ) ));
500 500
501 // Create/Show/Edit/Delete Event 501 // Create/Show/Edit/Delete Event
502 connect(mAgenda,SIGNAL(newEventSignal(int,int)), 502 connect(mAgenda,SIGNAL(newEventSignal(int,int)),
503 SLOT(newEvent(int,int))); 503 SLOT(newEvent(int,int)));
504 connect(mAgenda,SIGNAL(newTodoSignal(int,int)), 504 connect(mAgenda,SIGNAL(newTodoSignal(int,int)),
505 SLOT(newTodo(int,int))); 505 SLOT(newTodo(int,int)));
506 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), 506 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)),
507 SLOT(newEvent(int,int,int,int))); 507 SLOT(newEvent(int,int,int,int)));
508 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), 508 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)),
509 SLOT(newEventAllDay(int,int))); 509 SLOT(newEventAllDay(int,int)));
510 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), 510 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)),
511 SLOT(newTodoAllDay(int,int))); 511 SLOT(newTodoAllDay(int,int)));
512 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), 512 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)),
513 SLOT(newEventAllDay(int,int))); 513 SLOT(newEventAllDay(int,int)));
514 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 514 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
515 SLOT(newTimeSpanSelected(int,int,int,int))); 515 SLOT(newTimeSpanSelected(int,int,int,int)));
516 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 516 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
517 SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); 517 SLOT(newTimeSpanSelectedAllDay(int,int,int,int)));
518 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 518 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
519 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 519 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
520 520
521 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 521 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
522 SIGNAL(editIncidenceSignal(Incidence *))); 522 SIGNAL(editIncidenceSignal(Incidence *)));
523 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 523 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
524 SIGNAL(editIncidenceSignal(Incidence *))); 524 SIGNAL(editIncidenceSignal(Incidence *)));
525 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 525 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
526 SIGNAL(showIncidenceSignal(Incidence *))); 526 SIGNAL(showIncidenceSignal(Incidence *)));
527 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 527 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
528 SIGNAL(showIncidenceSignal(Incidence *))); 528 SIGNAL(showIncidenceSignal(Incidence *)));
529 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 529 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
530 SIGNAL(deleteIncidenceSignal(Incidence *))); 530 SIGNAL(deleteIncidenceSignal(Incidence *)));
531 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 531 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
532 SIGNAL(deleteIncidenceSignal(Incidence *))); 532 SIGNAL(deleteIncidenceSignal(Incidence *)));
533 533
534 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 534 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
535 SLOT(updateEventDates(KOAgendaItem *, int ))); 535 SLOT(updateEventDates(KOAgendaItem *, int )));
536 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 536 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
537 SLOT(updateEventDates(KOAgendaItem *, int))); 537 SLOT(updateEventDates(KOAgendaItem *, int)));
538 538
539 // event indicator update 539 // event indicator update
540 connect(mAgenda,SIGNAL(lowerYChanged(int)), 540 connect(mAgenda,SIGNAL(lowerYChanged(int)),
541 SLOT(updateEventIndicatorTop(int))); 541 SLOT(updateEventIndicatorTop(int)));
542 connect(mAgenda,SIGNAL(upperYChanged(int)), 542 connect(mAgenda,SIGNAL(upperYChanged(int)),
543 SLOT(updateEventIndicatorBottom(int))); 543 SLOT(updateEventIndicatorBottom(int)));
544 // drag signals 544 // drag signals
545 /* 545 /*
546 connect(mAgenda,SIGNAL(startDragSignal(Event *)), 546 connect(mAgenda,SIGNAL(startDragSignal(Event *)),
547 SLOT(startDrag(Event *))); 547 SLOT(startDrag(Event *)));
548 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), 548 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)),
549 SLOT(startDrag(Event *))); 549 SLOT(startDrag(Event *)));
550 */ 550 */
551 // synchronize selections 551 // synchronize selections
552 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 552 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
553 mAllDayAgenda, SLOT( deselectItem() ) ); 553 mAllDayAgenda, SLOT( deselectItem() ) );
554 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 554 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
555 mAgenda, SLOT( deselectItem() ) ); 555 mAgenda, SLOT( deselectItem() ) );
556 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 556 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
557 SIGNAL( incidenceSelected( Incidence * ) ) ); 557 SIGNAL( incidenceSelected( Incidence * ) ) );
558 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 558 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
559 SIGNAL( incidenceSelected( Incidence * ) ) ); 559 SIGNAL( incidenceSelected( Incidence * ) ) );
560 connect( mAgenda, SIGNAL( resizedSignal() ), 560 connect( mAgenda, SIGNAL( resizedSignal() ),
561 SLOT( updateConfig( ) ) ); 561 SLOT( updateConfig( ) ) );
562 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), 562 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
563 SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); 563 SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
564 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), 564 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
565 SLOT( addToCalSlot(Incidence * , Incidence *) ) ); 565 SLOT( addToCalSlot(Incidence * , Incidence *) ) );
566 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 566 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
567 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 567 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
568 568
569 connect( mAllDayAgenda, SIGNAL( signalClearSelection() ),mAgenda, SLOT( slotClearSelection()) ); 569 connect( mAllDayAgenda, SIGNAL( signalClearSelection() ),mAgenda, SLOT( slotClearSelection()) );
570 connect( mAgenda, SIGNAL( signalClearSelection() ),mAllDayAgenda, SLOT( slotClearSelection()) ); 570 connect( mAgenda, SIGNAL( signalClearSelection() ),mAllDayAgenda, SLOT( slotClearSelection()) );
571 571
572} 572}
573 573
574void KOAgendaView::toggleAllDay() 574void KOAgendaView::toggleAllDay()
575{ 575{
576 if ( mSplitterAgenda->firstHandle() ) 576 if ( mSplitterAgenda->firstHandle() )
577 mSplitterAgenda->firstHandle()->toggle(); 577 mSplitterAgenda->firstHandle()->toggle();
578} 578}
579void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) 579void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
580{ 580{
581 calendar()->addIncidence( inc ); 581 calendar()->addIncidence( inc );
582 582
583 if ( incOld ) { 583 if ( incOld ) {
584 if ( incOld->type() == "Todo" ) 584 if ( incOld->typeID() == todoID )
585 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); 585 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED );
586 else 586 else
587 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); 587 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED);
588 } 588 }
589 589
590} 590}
591 591
592KOAgendaView::~KOAgendaView() 592KOAgendaView::~KOAgendaView()
593{ 593{
594 delete mAllAgendaPopup; 594 delete mAllAgendaPopup;
595 //delete mAllDayAgendaPopup; 595 //delete mAllDayAgendaPopup;
596 delete KOAgendaItem::paintPix(); 596 delete KOAgendaItem::paintPix();
597 delete KOAgendaItem::paintPixSel(); 597 delete KOAgendaItem::paintPixSel();
598} 598}
599void KOAgendaView::resizeEvent( QResizeEvent* e ) 599void KOAgendaView::resizeEvent( QResizeEvent* e )
600{ 600{
601 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); 601 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width());
602 bool uc = false; 602 bool uc = false;
603 int ow = e->oldSize().width(); 603 int ow = e->oldSize().width();
604 int oh = e->oldSize().height(); 604 int oh = e->oldSize().height();
605 int w = e->size().width(); 605 int w = e->size().width();
606 int h = e->size().height(); 606 int h = e->size().height();
607 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { 607 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) {
608 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) 608 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda )
609 uc = true; 609 uc = true;
610 //qDebug("view changed %d %d %d %d ", ow, oh , w , h); 610 //qDebug("view changed %d %d %d %d ", ow, oh , w , h);
611 } 611 }
612 mUpcomingWidth = e->size().width() ; 612 mUpcomingWidth = e->size().width() ;
613 if ( mBlockUpdating || uc ) { 613 if ( mBlockUpdating || uc ) {
614 mBlockUpdating = false; 614 mBlockUpdating = false;
615 //mAgenda->setMinimumSize(800 , 600 ); 615 //mAgenda->setMinimumSize(800 , 600 );
616 //qDebug("mAgenda->resize+++++++++++++++ "); 616 //qDebug("mAgenda->resize+++++++++++++++ ");
617 updateConfig(); 617 updateConfig();
618 //qDebug("KOAgendaView::Updating now possible "); 618 //qDebug("KOAgendaView::Updating now possible ");
619 } else 619 } else
620 createDayLabels(); 620 createDayLabels();
621 //qDebug("resizeEvent end "); 621 //qDebug("resizeEvent end ");
622 622
623} 623}
624void KOAgendaView::slotDaylabelClicked( int num ) 624void KOAgendaView::slotDaylabelClicked( int num )
625{ 625{
626 626
627 QDate firstDate = mSelectedDates.first(); 627 QDate firstDate = mSelectedDates.first();
628 if ( num == -1 ) 628 if ( num == -1 )
629 emit showDateView( 6, firstDate ); 629 emit showDateView( 6, firstDate );
630 else if (num >= 0 ) { 630 else if (num >= 0 ) {
631 if ( mSelectedDates.count() == 1) 631 if ( mSelectedDates.count() == 1)
632 emit showDateView( 9, firstDate.addDays( num ) ); 632 emit showDateView( 9, firstDate.addDays( num ) );
633 else 633 else
634 emit showDateView( 3, firstDate.addDays( num ) ); 634 emit showDateView( 3, firstDate.addDays( num ) );
635 } 635 }
636 else 636 else
637 showDateView( 10, firstDate.addDays(1) ); 637 showDateView( 10, firstDate.addDays(1) );
638} 638}
639 639
640KOAgendaButton* KOAgendaView::getNewDaylabel() 640KOAgendaButton* KOAgendaView::getNewDaylabel()
641{ 641{
642 642
643 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); 643 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels);
644 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); 644 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) );
645 mDayLabelsList.append( dayLabel ); 645 mDayLabelsList.append( dayLabel );
646 mLayoutDayLabels->addWidget(dayLabel); 646 mLayoutDayLabels->addWidget(dayLabel);
647 return dayLabel ; 647 return dayLabel ;
648} 648}
649 649
650void KOAgendaView::createDayLabels() 650void KOAgendaView::createDayLabels()
651{ 651{
652 652
653 if ( mBlockUpdating || globalFlagBlockLabel == 1) { 653 if ( mBlockUpdating || globalFlagBlockLabel == 1) {
654 // qDebug(" KOAgendaView::createDayLabels() blocked "); 654 // qDebug(" KOAgendaView::createDayLabels() blocked ");
655 return; 655 return;
656 656
657 } 657 }
658 int newHight; 658 int newHight;
659 if ( !mSelectedDates.count()) 659 if ( !mSelectedDates.count())
660 return; 660 return;
661 661
662 // ### Before deleting and recreating we could check if mSelectedDates changed... 662 // ### Before deleting and recreating we could check if mSelectedDates changed...
663 // It would remove some flickering and gain speed (since this is called by 663 // It would remove some flickering and gain speed (since this is called by
664 // each updateView() call) 664 // each updateView() call)
665 665
666 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - mAgenda->frameWidth()*2; 666 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - mAgenda->frameWidth()*2;
667 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); 667 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth );
668 if ( maxWid < 20 ) 668 if ( maxWid < 20 )
669 maxWid = 20; 669 maxWid = 20;
670 670
671 QFont dlf = KOPrefs::instance()->mTimeLabelsFont; 671 QFont dlf = KOPrefs::instance()->mTimeLabelsFont;
672 QFontMetrics fm ( dlf ); 672 QFontMetrics fm ( dlf );
673 int selCount = mSelectedDates.count(); 673 int selCount = mSelectedDates.count();
674 int widModulo = maxWid - (mAgenda->gridSpacingX() * selCount)+1; 674 int widModulo = maxWid - (mAgenda->gridSpacingX() * selCount)+1;
675 QString dayTest = "Mon 20"; 675 QString dayTest = "Mon 20";
676 //QString dayTest = "Mon 20"; 676 //QString dayTest = "Mon 20";
677 int wid = fm.width( dayTest ); 677 int wid = fm.width( dayTest );
678 //maxWid -= ( selCount * 3 ); //working for QLabels 678 //maxWid -= ( selCount * 3 ); //working for QLabels
679 if ( QApplication::desktop()->width() <= 320 ) 679 if ( QApplication::desktop()->width() <= 320 )
680 maxWid -= ( selCount * 3 ); //working for QPushButton 680 maxWid -= ( selCount * 3 ); //working for QPushButton
681 else 681 else
682 maxWid -= ( selCount * 3 ); //working for QPushButton 682 maxWid -= ( selCount * 3 ); //working for QPushButton
683 if ( maxWid < 0 ) 683 if ( maxWid < 0 )
684 maxWid = 20; 684 maxWid = 20;
685 int needWid = wid * selCount; 685 int needWid = wid * selCount;
686 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); 686 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid );
687 //if ( needWid > maxWid ) 687 //if ( needWid > maxWid )
688 // qDebug("DAYLABELS TOOOOOOO BIG "); 688 // qDebug("DAYLABELS TOOOOOOO BIG ");
689 while ( needWid > maxWid ) { 689 while ( needWid > maxWid ) {
690 dayTest = dayTest.left( dayTest.length() - 1 ); 690 dayTest = dayTest.left( dayTest.length() - 1 );
691 wid = fm.width( dayTest ); 691 wid = fm.width( dayTest );
692 needWid = wid * selCount; 692 needWid = wid * selCount;
693 } 693 }
694 int maxLen = dayTest.length(); 694 int maxLen = dayTest.length();
695 int fontPoint = dlf.pointSize(); 695 int fontPoint = dlf.pointSize();
696 if ( maxLen < 2 ) { 696 if ( maxLen < 2 ) {
697 int fontPoint = dlf.pointSize(); 697 int fontPoint = dlf.pointSize();
698 while ( fontPoint > 4 ) { 698 while ( fontPoint > 4 ) {
699 --fontPoint; 699 --fontPoint;
700 dlf.setPointSize( fontPoint ); 700 dlf.setPointSize( fontPoint );
701 QFontMetrics f( dlf ); 701 QFontMetrics f( dlf );
702 wid = f.width( "30" ); 702 wid = f.width( "30" );
703 needWid = wid * selCount; 703 needWid = wid * selCount;
704 if ( needWid < maxWid ) 704 if ( needWid < maxWid )
705 break; 705 break;
706 } 706 }
707 maxLen = 2; 707 maxLen = 2;
708 } 708 }
709 //qDebug("Max len %d ", dayTest.length() ); 709 //qDebug("Max len %d ", dayTest.length() );
710 710
711 QFontMetrics tempF( dlf ); 711 QFontMetrics tempF( dlf );
712 newHight = tempF.height(); 712 newHight = tempF.height();
713 mDayLabels->setFont( dlf ); 713 mDayLabels->setFont( dlf );
714 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; 714 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);;
715 // mLayoutDayLabels->addSpacing(mTimeLabels->width()); 715 // mLayoutDayLabels->addSpacing(mTimeLabels->width());
716 //mLayoutDayLabels->addSpacing( 2 ); 716 //mLayoutDayLabels->addSpacing( 2 );
717 // QFont lFont = dlf; 717 // QFont lFont = dlf;
718 bool appendLabels = false; 718 bool appendLabels = false;
719 KOAgendaButton *dayLabel; 719 KOAgendaButton *dayLabel;
720 dayLabel = mDayLabelsList.first(); 720 dayLabel = mDayLabelsList.first();
721 if ( !dayLabel ) { 721 if ( !dayLabel ) {
722 appendLabels = true; 722 appendLabels = true;
723 dayLabel = getNewDaylabel(); 723 dayLabel = getNewDaylabel();
724 } 724 }
725 dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() ); 725 dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() );
726 dayLabel->setFont( dlf ); 726 dayLabel->setFont( dlf );
727 dayLabel->setNum( -1 ); 727 dayLabel->setNum( -1 );
728 //dayLabel->setAlignment(QLabel::AlignHCenter); 728 //dayLabel->setAlignment(QLabel::AlignHCenter);
729 729
730 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); 730 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
731 dayLabel->show(); 731 dayLabel->show();
732 DateList::ConstIterator dit; 732 DateList::ConstIterator dit;
733 bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); 733 bool oneday = (mSelectedDates.first() == mSelectedDates.last() );
734 int counter = -1; 734 int counter = -1;
735 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 735 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
736 ++counter; 736 ++counter;
737 QDate date = *dit; 737 QDate date = *dit;
738 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); 738 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels);
739 if ( ! appendLabels ) { 739 if ( ! appendLabels ) {
740 dayLabel = mDayLabelsList.next(); 740 dayLabel = mDayLabelsList.next();
741 if ( !dayLabel ) 741 if ( !dayLabel )
742 appendLabels = true; 742 appendLabels = true;
743 } 743 }
744 if ( appendLabels ) { 744 if ( appendLabels ) {
745 dayLabel = getNewDaylabel(); 745 dayLabel = getNewDaylabel();
746 } 746 }
747 dayLabel->setMinimumWidth( 1 ); 747 dayLabel->setMinimumWidth( 1 );
748 dayLabel->setMaximumWidth( 10240 ); 748 dayLabel->setMaximumWidth( 10240 );
749 dayLabel->setFont( dlf ); 749 dayLabel->setFont( dlf );
750 dayLabel->show(); 750 dayLabel->show();
751 dayLabel->setAutoRepeat( false ); 751 dayLabel->setAutoRepeat( false );
752 dayLabel->setNum( counter ); 752 dayLabel->setNum( counter );
753 QString str; 753 QString str;
754 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); 754 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date);
755 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); 755 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true );
756 switch ( maxLen ) { 756 switch ( maxLen ) {
757 case 2: 757 case 2:
758 str = QString::number( date.day() ); 758 str = QString::number( date.day() );
759 break; 759 break;
760 760
761 case 3: 761 case 3:
762 str = dayName.left( 1 ) +QString::number( date.day()); 762 str = dayName.left( 1 ) +QString::number( date.day());
763 763
764 break; 764 break;
765 case 4: 765 case 4:
766 str = dayName.left( 1 ) + " " +QString::number( date.day()); 766 str = dayName.left( 1 ) + " " +QString::number( date.day());
767 767
768 break; 768 break;
769 case 5: 769 case 5:
770 str = dayName.left( 2 ) + " " +QString::number( date.day()); 770 str = dayName.left( 2 ) + " " +QString::number( date.day());
771 771
772 break; 772 break;
773 case 6: 773 case 6:
774 str = dayName.left( 3 ) + " " +QString::number( date.day()); 774 str = dayName.left( 3 ) + " " +QString::number( date.day());
775 break; 775 break;
776 776
777 default: 777 default:
778 break; 778 break;
779 } 779 }
780 if ( oneday ) { 780 if ( oneday ) {
781 QString addString; 781 QString addString;
782 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) 782 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() )
783 addString = i18n("Today"); 783 addString = i18n("Today");
784 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 784 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
785 addString = i18n("Tomorrow"); 785 addString = i18n("Tomorrow");
786 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 786 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
787 addString = i18n("Yesterday"); 787 addString = i18n("Yesterday");
788 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 788 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
789 addString = i18n("Day before yesterday"); 789 addString = i18n("Day before yesterday");
790 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 790 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
791 addString = i18n("Day after tomorrow"); 791 addString = i18n("Day after tomorrow");
792 if ( !addString.isEmpty() ) { 792 if ( !addString.isEmpty() ) {
793 str = addString+", " + str; 793 str = addString+", " + str;
794 } else { 794 } else {
795 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer); 795 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer);
796 } 796 }
797 } 797 }
798 dayLabel->setText(str); 798 dayLabel->setText(str);
799 //dayLabel->setAlignment(QLabel::AlignHCenter); 799 //dayLabel->setAlignment(QLabel::AlignHCenter);
800 if (date == QDate::currentDate()) { 800 if (date == QDate::currentDate()) {
801 QFont bFont = dlf; 801 QFont bFont = dlf;
802 bFont.setBold( true ); 802 bFont.setBold( true );
803 dayLabel->setFont(bFont); 803 dayLabel->setFont(bFont);
804 } 804 }
805 //dayLayout->addWidget(dayLabel); 805 //dayLayout->addWidget(dayLabel);
806 806
807#ifndef KORG_NOPLUGINS 807#ifndef KORG_NOPLUGINS
808 CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); 808 CalendarDecoration::List cds = KOCore::self()->calendarDecorations();
809 CalendarDecoration *it; 809 CalendarDecoration *it;
810 for(it = cds.first(); it; it = cds.next()) { 810 for(it = cds.first(); it; it = cds.next()) {
811 QString text = it->shortText( date ); 811 QString text = it->shortText( date );
812 if ( !text.isEmpty() ) { 812 if ( !text.isEmpty() ) {
813 QLabel *label = new QLabel(text,mDayLabels); 813 QLabel *label = new QLabel(text,mDayLabels);
814 label->setAlignment(AlignCenter); 814 label->setAlignment(AlignCenter);
815 dayLayout->addWidget(label); 815 dayLayout->addWidget(label);
816 } 816 }
817 } 817 }
818 818
819 for(it = cds.first(); it; it = cds.next()) { 819 for(it = cds.first(); it; it = cds.next()) {
820 QWidget *wid = it->smallWidget(mDayLabels,date); 820 QWidget *wid = it->smallWidget(mDayLabels,date);
821 if ( wid ) { 821 if ( wid ) {
822 // wid->setHeight(20); 822 // wid->setHeight(20);
823 dayLayout->addWidget(wid); 823 dayLayout->addWidget(wid);
824 } 824 }
825 } 825 }
826#endif 826#endif
827 } 827 }
828 if ( ! appendLabels ) { 828 if ( ! appendLabels ) {
829 dayLabel = mDayLabelsList.next(); 829 dayLabel = mDayLabelsList.next();
830 if ( !dayLabel ) 830 if ( !dayLabel )
831 appendLabels = true; 831 appendLabels = true;
832 } 832 }
833 if ( appendLabels ) { 833 if ( appendLabels ) {
834 dayLabel = getNewDaylabel(); 834 dayLabel = getNewDaylabel();
835 } 835 }
836 //dayLabel->hide();//test only 836 //dayLabel->hide();//test only
837 837
838 dayLabel->setText(">"); 838 dayLabel->setText(">");
839 dayLabel->setFont( dlf ); 839 dayLabel->setFont( dlf );
840 dayLabel->setAutoRepeat( true ); 840 dayLabel->setAutoRepeat( true );
841 dayLabel->show(); 841 dayLabel->show();
842 dayLabel->setNum( -2 ); 842 dayLabel->setNum( -2 );
843 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ widModulo ); 843 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ widModulo );
844 844
845 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); 845 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2);
846 if ( !appendLabels ) { 846 if ( !appendLabels ) {
847 dayLabel = mDayLabelsList.next(); 847 dayLabel = mDayLabelsList.next();
848 while ( dayLabel ) { 848 while ( dayLabel ) {
849 //qDebug("!dayLabel %d",dayLabel ); 849 //qDebug("!dayLabel %d",dayLabel );
850 dayLabel->hide(); 850 dayLabel->hide();
851 dayLabel = mDayLabelsList.next(); 851 dayLabel = mDayLabelsList.next();
852 } 852 }
853 } 853 }
854 854
855 mDayLabelsFrame->setFixedHeight( newHight + 4 ); 855 mDayLabelsFrame->setFixedHeight( newHight + 4 );
856} 856}
857 857
858int KOAgendaView::maxDatesHint() 858int KOAgendaView::maxDatesHint()
859{ 859{
860 // Not sure about the max number of events, so return 0 for now. 860 // Not sure about the max number of events, so return 0 for now.
861 return 0; 861 return 0;
862} 862}
863 863
864int KOAgendaView::currentDateCount() 864int KOAgendaView::currentDateCount()
865{ 865{
866 return mSelectedDates.count(); 866 return mSelectedDates.count();
867} 867}
868 868
869QPtrList<Incidence> KOAgendaView::selectedIncidences() 869QPtrList<Incidence> KOAgendaView::selectedIncidences()
870{ 870{
871 QPtrList<Incidence> selected; 871 QPtrList<Incidence> selected;
872 Incidence *incidence; 872 Incidence *incidence;
873 873
874 incidence = mAgenda->selectedIncidence(); 874 incidence = mAgenda->selectedIncidence();
875 if (incidence) selected.append(incidence); 875 if (incidence) selected.append(incidence);
876 876
877 incidence = mAllDayAgenda->selectedIncidence(); 877 incidence = mAllDayAgenda->selectedIncidence();
878 if (incidence) selected.append(incidence); 878 if (incidence) selected.append(incidence);
879 879
880 return selected; 880 return selected;
881} 881}
882 882
883DateList KOAgendaView::selectedDates() 883DateList KOAgendaView::selectedDates()
884{ 884{
885 DateList selected; 885 DateList selected;
886 QDate qd; 886 QDate qd;
887 887
888 qd = mAgenda->selectedIncidenceDate(); 888 qd = mAgenda->selectedIncidenceDate();
889 if (qd.isValid()) selected.append(qd); 889 if (qd.isValid()) selected.append(qd);
890 890
891 qd = mAllDayAgenda->selectedIncidenceDate(); 891 qd = mAllDayAgenda->selectedIncidenceDate();
892 if (qd.isValid()) selected.append(qd); 892 if (qd.isValid()) selected.append(qd);
893 893
894 return selected; 894 return selected;
895} 895}
896 896
897 897
898void KOAgendaView::updateView() 898void KOAgendaView::updateView()
899{ 899{
900 if ( mBlockUpdating ) 900 if ( mBlockUpdating )
901 return; 901 return;
902 // kdDebug() << "KOAgendaView::updateView()" << endl; 902 // kdDebug() << "KOAgendaView::updateView()" << endl;
903 fillAgenda(); 903 fillAgenda();
904 904
905} 905}
906 906
907 907
908/* 908/*
909 Update configuration settings for the agenda view. This method is not 909 Update configuration settings for the agenda view. This method is not
910 complete. 910 complete.
911*/ 911*/
912void KOAgendaView::updateConfig() 912void KOAgendaView::updateConfig()
913{ 913{
914 if ( mBlockUpdating ) 914 if ( mBlockUpdating )
915 return; 915 return;
916 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) { 916 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) {
917 int old = KOPrefs::instance()->mHourSize; 917 int old = KOPrefs::instance()->mHourSize;
918 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1; 918 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1;
919 //qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize ); 919 //qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize );
920 } 920 }
921 921
922 922
923 // update config for children 923 // update config for children
924 mTimeLabels->updateConfig(); 924 mTimeLabels->updateConfig();
925 mAgenda->storePosition(); 925 mAgenda->storePosition();
926 mAgenda->updateConfig(); 926 mAgenda->updateConfig();
927 mAllDayAgenda->updateConfig(); 927 mAllDayAgenda->updateConfig();
928 // widget synchronization 928 // widget synchronization
929 //TODO: find a better way, maybe signal/slot 929 //TODO: find a better way, maybe signal/slot
930 mTimeLabels->positionChanged(); 930 mTimeLabels->positionChanged();
931 931
932 // for some reason, this needs to be called explicitly 932 // for some reason, this needs to be called explicitly
933 mTimeLabels->repaint(); 933 mTimeLabels->repaint();
934 934
935 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 935 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
936 936
937 // ToolTips displaying summary of events 937 // ToolTips displaying summary of events
938 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() 938 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance()
939 ->mEnableToolTips); 939 ->mEnableToolTips);
940 940
941 //setHolidayMasks(); 941 //setHolidayMasks();
942 942
943 //createDayLabels(); called by via updateView(); 943 //createDayLabels(); called by via updateView();
944 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); 944 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth());
945 updateView(); 945 updateView();
946 mAgenda->restorePosition(); 946 mAgenda->restorePosition();
947} 947}
948 948
949 949
950void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) 950void KOAgendaView::updateEventDates(KOAgendaItem *item, int type)
951{ 951{
952 952
953 953
954 int xxx = item->cellX(); 954 int xxx = item->cellX();
955 //qDebug("KOAgendaView::updateEventDates %d %d %d %d %d", xxx, mMinY.at(xxx),mMaxY.at(xxx),item->cellYTop(),item->cellYBottom() ); 955 //qDebug("KOAgendaView::updateEventDates %d %d %d %d %d", xxx, mMinY.at(xxx),mMaxY.at(xxx),item->cellYTop(),item->cellYBottom() );
956 if ( mMinY.at(xxx) > item->cellYTop() ) 956 if ( mMinY.at(xxx) > item->cellYTop() )
957 mMinY.at(xxx) = item->cellYTop(); 957 mMinY.at(xxx) = item->cellYTop();
958 if ( mMaxY.at(xxx) < item->cellYBottom() ) 958 if ( mMaxY.at(xxx) < item->cellYBottom() )
959 mMaxY.at(xxx) = item->cellYBottom(); 959 mMaxY.at(xxx) = item->cellYBottom();
960 960
961 QDateTime startDt,endDt; 961 QDateTime startDt,endDt;
962 QDate startDate; 962 QDate startDate;
963 int lenInSecs; 963 int lenInSecs;
964 // if ( type == KOAgenda::RESIZETOP ) 964 // if ( type == KOAgenda::RESIZETOP )
965 // qDebug("RESIZETOP "); 965 // qDebug("RESIZETOP ");
966 // if ( type == KOAgenda::RESIZEBOTTOM ) 966 // if ( type == KOAgenda::RESIZEBOTTOM )
967 // qDebug("RESIZEBOTTOM "); 967 // qDebug("RESIZEBOTTOM ");
968 // if ( type == KOAgenda::MOVE ) 968 // if ( type == KOAgenda::MOVE )
969 // qDebug("MOVE "); 969 // qDebug("MOVE ");
970 if ( item->incidence()->type() == "Event" ) { 970 if ( item->incidence()->typeID() == eventID ) {
971 startDt =item->incidence()->dtStart(); 971 startDt =item->incidence()->dtStart();
972 endDt = item->incidence()->dtEnd(); 972 endDt = item->incidence()->dtEnd();
973 lenInSecs = startDt.secsTo( endDt ); 973 lenInSecs = startDt.secsTo( endDt );
974 } 974 }
975 975
976 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); 976 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED );
977 977
978 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { 978 if ( item->incidence()->typeID()== todoID && item->mLastMoveXPos > 0 ) {
979 startDate = mSelectedDates[item->mLastMoveXPos]; 979 startDate = mSelectedDates[item->mLastMoveXPos];
980 } else { 980 } else {
981 if (item->cellX() < 0) { 981 if (item->cellX() < 0) {
982 startDate = (mSelectedDates.first()).addDays(item->cellX()); 982 startDate = (mSelectedDates.first()).addDays(item->cellX());
983 } else { 983 } else {
984 startDate = mSelectedDates[item->cellX()]; 984 startDate = mSelectedDates[item->cellX()];
985 } 985 }
986 } 986 }
987 startDt.setDate(startDate); 987 startDt.setDate(startDate);
988 988
989 if (item->incidence()->doesFloat()) { 989 if (item->incidence()->doesFloat()) {
990 endDt.setDate(startDate.addDays(item->cellWidth() - 1)); 990 endDt.setDate(startDate.addDays(item->cellWidth() - 1));
991 } else { 991 } else {
992 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) 992 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE )
993 startDt.setTime(mAgenda->gyToTime(item->cellYTop())); 993 startDt.setTime(mAgenda->gyToTime(item->cellYTop()));
994 if ( item->incidence()->type() == "Event" ) { 994 if ( item->incidence()->typeID() == eventID ) {
995 if ( type == KOAgenda::MOVE ) { 995 if ( type == KOAgenda::MOVE ) {
996 endDt = startDt.addSecs(lenInSecs); 996 endDt = startDt.addSecs(lenInSecs);
997 997
998 } else if ( type == KOAgenda::RESIZEBOTTOM ) { 998 } else if ( type == KOAgenda::RESIZEBOTTOM ) {
999 if (item->lastMultiItem()) { 999 if (item->lastMultiItem()) {
1000 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 1000 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
1001 endDt.setDate(startDate. 1001 endDt.setDate(startDate.
1002 addDays(item->lastMultiItem()->cellX() - item->cellX())); 1002 addDays(item->lastMultiItem()->cellX() - item->cellX()));
1003 } else { 1003 } else {
1004 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 1004 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
1005 endDt.setDate(startDate); 1005 endDt.setDate(startDate);
1006 } 1006 }
1007 } 1007 }
1008 } else { 1008 } else {
1009 // todo 1009 // todo
1010 if (item->lastMultiItem()) { 1010 if (item->lastMultiItem()) {
1011 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 1011 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
1012 endDt.setDate(startDate. 1012 endDt.setDate(startDate.
1013 addDays(item->lastMultiItem()->cellX() - item->cellX())); 1013 addDays(item->lastMultiItem()->cellX() - item->cellX()));
1014 } else { 1014 } else {
1015 //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); 1015 //qDebug("tem->cellYBottom() %d",item->cellYBottom() );
1016 if ( item->cellYBottom() > 0 ) 1016 if ( item->cellYBottom() > 0 )
1017 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 1017 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
1018 else 1018 else
1019 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); 1019 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time());
1020 endDt.setDate(startDate); 1020 endDt.setDate(startDate);
1021 } 1021 }
1022 } 1022 }
1023 } 1023 }
1024 if ( item->incidence()->type() == "Event" ) { 1024 if ( item->incidence()->typeID() == eventID ) {
1025 item->incidence()->setDtStart(startDt); 1025 item->incidence()->setDtStart(startDt);
1026 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); 1026 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt);
1027 } else if ( item->incidence()->type() == "Todo" ) { 1027 } else if ( item->incidence()->typeID() == todoID ) {
1028 Todo* to = static_cast<Todo*>(item->incidence()); 1028 Todo* to = static_cast<Todo*>(item->incidence());
1029 1029
1030 to->setDtDue(endDt); 1030 to->setDtDue(endDt);
1031 if ( to->hasStartDate() ) { 1031 if ( to->hasStartDate() ) {
1032 if (to->dtStart() >= to->dtDue() ) 1032 if (to->dtStart() >= to->dtDue() )
1033 to->setDtStart(to->dtDue().addDays( -2 )); 1033 to->setDtStart(to->dtDue().addDays( -2 ));
1034 } 1034 }
1035 1035
1036 } 1036 }
1037 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); 1037 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() );
1038 item->incidence()->setRevision(item->incidence()->revision()+1); 1038 item->incidence()->setRevision(item->incidence()->revision()+1);
1039 item->setItemDate(startDt.date()); 1039 item->setItemDate(startDt.date());
1040 //item->updateItem(); 1040 //item->updateItem();
1041 if ( item->incidence()->type() == "Todo" ) { 1041 if ( item->incidence()->typeID() == todoID ) {
1042 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); 1042 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED );
1043 1043
1044 } 1044 }
1045 else 1045 else
1046 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); 1046 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED);
1047 item->updateItem(); 1047 item->updateItem();
1048} 1048}
1049 1049
1050void KOAgendaView::showDates( const QDate &start, const QDate &end ) 1050void KOAgendaView::showDates( const QDate &start, const QDate &end )
1051{ 1051{
1052 // kdDebug() << "KOAgendaView::selectDates" << endl; 1052 // kdDebug() << "KOAgendaView::selectDates" << endl;
1053 1053
1054 mSelectedDates.clear(); 1054 mSelectedDates.clear();
1055 // qDebug("KOAgendaView::showDates "); 1055 // qDebug("KOAgendaView::showDates ");
1056 QDate d = start; 1056 QDate d = start;
1057 while (d <= end) { 1057 while (d <= end) {
1058 mSelectedDates.append(d); 1058 mSelectedDates.append(d);
1059 d = d.addDays( 1 ); 1059 d = d.addDays( 1 );
1060 } 1060 }
1061 1061
1062 // and update the view 1062 // and update the view
1063 fillAgenda(); 1063 fillAgenda();
1064} 1064}
1065 1065
1066 1066
1067void KOAgendaView::showEvents(QPtrList<Event>) 1067void KOAgendaView::showEvents(QPtrList<Event>)
1068{ 1068{
1069 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; 1069 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl;
1070} 1070}
1071 1071
1072void KOAgendaView::changeEventDisplay(Event *, int) 1072void KOAgendaView::changeEventDisplay(Event *, int)
1073{ 1073{
1074 // qDebug("KOAgendaView::changeEventDisplay "); 1074 // qDebug("KOAgendaView::changeEventDisplay ");
1075 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; 1075 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl;
1076 // this should be re-written to be MUCH smarter. Right now we 1076 // this should be re-written to be MUCH smarter. Right now we
1077 // are just playing dumb. 1077 // are just playing dumb.
1078 fillAgenda(); 1078 fillAgenda();
1079} 1079}
1080 1080
1081void KOAgendaView::fillAgenda(const QDate &) 1081void KOAgendaView::fillAgenda(const QDate &)
1082{ 1082{
1083 // qDebug("KOAgendaView::fillAgenda "); 1083 // qDebug("KOAgendaView::fillAgenda ");
1084 fillAgenda(); 1084 fillAgenda();
1085} 1085}
1086 1086
1087void KOAgendaView::fillAgenda() 1087void KOAgendaView::fillAgenda()
1088{ 1088{
1089 if ( globalFlagBlockStartup ) 1089 if ( globalFlagBlockStartup )
1090 return; 1090 return;
1091 if ( globalFlagBlockAgenda == 1 ) 1091 if ( globalFlagBlockAgenda == 1 )
1092 return; 1092 return;
1093 static bool onlyOne = false; 1093 static bool onlyOne = false;
1094 if ( onlyOne ) 1094 if ( onlyOne )
1095 return; 1095 return;
1096 onlyOne = true; 1096 onlyOne = true;
1097 //if ( globalFlagBlockAgenda == 2 ) 1097 //if ( globalFlagBlockAgenda == 2 )
1098 //globalFlagBlockAgenda = 0; 1098 //globalFlagBlockAgenda = 0;
1099 // globalFlagBlockPainting = false; 1099 // globalFlagBlockPainting = false;
1100 if ( globalFlagBlockAgenda == 0 ) 1100 if ( globalFlagBlockAgenda == 0 )
1101 globalFlagBlockAgenda = 1; 1101 globalFlagBlockAgenda = 1;
1102 // clearView(); 1102 // clearView();
1103 //qDebug("fillAgenda()++++ "); 1103 //qDebug("fillAgenda()++++ ");
1104 globalFlagBlockAgendaItemPaint = 1; 1104 globalFlagBlockAgendaItemPaint = 1;
1105 1105
1106 mAllDayAgenda->changeColumns(mSelectedDates.count()); 1106 mAllDayAgenda->changeColumns(mSelectedDates.count());
1107 mAgenda->changeColumns(mSelectedDates.count()); 1107 mAgenda->changeColumns(mSelectedDates.count());
1108 qApp->processEvents(); 1108 qApp->processEvents();
1109 mEventIndicatorTop->changeColumns(mSelectedDates.count()); 1109 mEventIndicatorTop->changeColumns(mSelectedDates.count());
1110 mEventIndicatorBottom->changeColumns(mSelectedDates.count()); 1110 mEventIndicatorBottom->changeColumns(mSelectedDates.count());
1111 setHolidayMasks(); 1111 setHolidayMasks();
1112 1112
1113 //mAgenda->hideUnused(); 1113 //mAgenda->hideUnused();
1114 //mAllDayAgenda->hideUnused(); 1114 //mAllDayAgenda->hideUnused();
1115 1115
1116 // mAgenda->blockNextRepaint( false ); 1116 // mAgenda->blockNextRepaint( false );
1117 // mAgenda->viewport()->repaint(); 1117 // mAgenda->viewport()->repaint();
1118 // mAgenda->blockNextRepaint( true ); 1118 // mAgenda->blockNextRepaint( true );
1119 mMinY.resize(mSelectedDates.count()); 1119 mMinY.resize(mSelectedDates.count());
1120 mMaxY.resize(mSelectedDates.count()); 1120 mMaxY.resize(mSelectedDates.count());
1121 1121
1122 QPtrList<Event> dayEvents; 1122 QPtrList<Event> dayEvents;
1123 1123
1124 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1124 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1125 // Therefore, gtodoset all of them. 1125 // Therefore, gtodoset all of them.
1126 QPtrList<Todo> todos = calendar()->todos(); 1126 QPtrList<Todo> todos = calendar()->todos();
1127 1127
1128 mAgenda->setDateList(mSelectedDates); 1128 mAgenda->setDateList(mSelectedDates);
1129 1129
1130 QDate today = QDate::currentDate(); 1130 QDate today = QDate::currentDate();
1131 1131
1132 DateList::ConstIterator dit; 1132 DateList::ConstIterator dit;
1133 int curCol = 0; 1133 int curCol = 0;
1134 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 1134 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
1135 QDate currentDate = *dit; 1135 QDate currentDate = *dit;
1136 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() 1136 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString()
1137 // << endl; 1137 // << endl;
1138 1138
1139 dayEvents = calendar()->events(currentDate,true); 1139 dayEvents = calendar()->events(currentDate,true);
1140 1140
1141 // Default values, which can never be reached 1141 // Default values, which can never be reached
1142 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; 1142 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1;
1143 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; 1143 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1;
1144 1144
1145 unsigned int numEvent; 1145 unsigned int numEvent;
1146 for(numEvent=0;numEvent<dayEvents.count();++numEvent) { 1146 for(numEvent=0;numEvent<dayEvents.count();++numEvent) {
1147 Event *event = dayEvents.at(numEvent); 1147 Event *event = dayEvents.at(numEvent);
1148 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1148 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1149 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1149 if ( event->uid().left(15) == QString("last-syncEvent-") )
1150 continue; 1150 continue;
1151 // kdDebug() << " Event: " << event->summary() << endl; 1151 // kdDebug() << " Event: " << event->summary() << endl;
1152 1152
1153 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; 1153 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol;
1154 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; 1154 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol;
1155 1155
1156 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; 1156 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl;
1157 1157
1158 if (event->doesFloat()) { 1158 if (event->doesFloat()) {
1159 if (event->recurrence()->doesRecur()) { 1159 if (event->recurrence()->doesRecur()) {
1160 if (event->isMultiDay() ) { 1160 if (event->isMultiDay() ) {
1161 endX = endX - beginX;// endX is now number of days 1161 endX = endX - beginX;// endX is now number of days
1162 if ( event->recursOn( currentDate ) ) { 1162 if ( event->recursOn( currentDate ) ) {
1163 endX += curCol; 1163 endX += curCol;
1164 beginX = curCol; 1164 beginX = curCol;
1165 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1165 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1166 } else { 1166 } else {
1167 //qDebug("days %d %s",endX , currentDate.toString().latin1()); 1167 //qDebug("days %d %s",endX , currentDate.toString().latin1());
1168 QDate dateit = currentDate.addDays( -endX ); 1168 QDate dateit = currentDate.addDays( -endX );
1169 if ( event->recursOn( dateit ) ) { 1169 if ( event->recursOn( dateit ) ) {
1170 //qDebug("found %d %d %d %s", endX,curCol, curCol-endX ,dateit.toString().latin1() ); 1170 //qDebug("found %d %d %d %s", endX,curCol, curCol-endX ,dateit.toString().latin1() );
1171 if ( curCol-endX < 0 ) { 1171 if ( curCol-endX < 0 ) {
1172 mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol); 1172 mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol);
1173 } 1173 }
1174 } 1174 }
1175 } 1175 }
1176 } else { 1176 } else {
1177 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); 1177 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
1178 } 1178 }
1179 1179
1180 } else { 1180 } else {
1181 if (beginX <= 0 && curCol == 0) { 1181 if (beginX <= 0 && curCol == 0) {
1182 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1182 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1183 } else if (beginX == curCol) { 1183 } else if (beginX == curCol) {
1184 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1184 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1185 } 1185 }
1186 } 1186 }
1187 } else if (event->isMultiDay()) { 1187 } else if (event->isMultiDay()) {
1188 if ( event->doesRecur () ) { 1188 if ( event->doesRecur () ) {
1189 QDate dateit = currentDate; 1189 QDate dateit = currentDate;
1190 int count = 0; 1190 int count = 0;
1191 int max = event->dtStart().daysTo( event->dtEnd() ) +2; 1191 int max = event->dtStart().daysTo( event->dtEnd() ) +2;
1192 while (! event->recursOn( dateit ) && count <= max ) { 1192 while (! event->recursOn( dateit ) && count <= max ) {
1193 ++count; 1193 ++count;
1194 dateit = dateit.addDays( -1 ); 1194 dateit = dateit.addDays( -1 );
1195 } 1195 }
1196 bool ok; 1196 bool ok;
1197 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); 1197 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok );
1198 if ( ok ) 1198 if ( ok )
1199 { 1199 {
1200 int secs = event->dtStart().secsTo( event->dtEnd() ); 1200 int secs = event->dtStart().secsTo( event->dtEnd() );
1201 QDateTime nextOcend =nextOcstart.addSecs( secs ); ; 1201 QDateTime nextOcend =nextOcstart.addSecs( secs ); ;
1202 beginX = currentDate.daysTo(nextOcstart.date()) + curCol; 1202 beginX = currentDate.daysTo(nextOcstart.date()) + curCol;
1203 endX = currentDate.daysTo(nextOcend.date()) + curCol; 1203 endX = currentDate.daysTo(nextOcend.date()) + curCol;
1204 1204
1205 } 1205 }
1206 } 1206 }
1207 int startY = mAgenda->timeToY(event->dtStart().time()); 1207 int startY = mAgenda->timeToY(event->dtStart().time());
1208 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1208 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1209 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); 1209 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol );
1210 if ((beginX <= 0 && curCol == 0) || beginX == curCol) { 1210 if ((beginX <= 0 && curCol == 0) || beginX == curCol) {
1211 //qDebug("insert!!! "); 1211 //qDebug("insert!!! ");
1212 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); 1212 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY);
1213 } 1213 }
1214 if (beginX == curCol) { 1214 if (beginX == curCol) {
1215 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1215 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1216 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1216 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1217 } else if (endX == curCol) { 1217 } else if (endX == curCol) {
1218 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1218 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1219 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1219 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1220 } else { 1220 } else {
1221 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1221 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1222 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1222 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1223 } 1223 }
1224 } else { 1224 } else {
1225 int startY = mAgenda->timeToY(event->dtStart().time()); 1225 int startY = mAgenda->timeToY(event->dtStart().time());
1226 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1226 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1227 if (endY < startY) endY = startY; 1227 if (endY < startY) endY = startY;
1228 mAgenda->insertItem(event,currentDate,curCol,startY,endY); 1228 mAgenda->insertItem(event,currentDate,curCol,startY,endY);
1229 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1229 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1230 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1230 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1231 } 1231 }
1232 } 1232 }
1233 // ---------- [display Todos -------------- 1233 // ---------- [display Todos --------------
1234 unsigned int numTodo; 1234 unsigned int numTodo;
1235 for (numTodo = 0; numTodo < todos.count(); ++numTodo) { 1235 for (numTodo = 0; numTodo < todos.count(); ++numTodo) {
1236 Todo *todo = todos.at(numTodo); 1236 Todo *todo = todos.at(numTodo);
1237 1237
1238 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date 1238 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date
1239 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) continue; 1239 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) continue;
1240 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1240 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1241 // Already completed items can be displayed on their original due date 1241 // Already completed items can be displayed on their original due date
1242 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda 1242 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda
1243 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; 1243 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda;
1244 bool fillIn = false; 1244 bool fillIn = false;
1245 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) 1245 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate )
1246 fillIn = true; 1246 fillIn = true;
1247 if ( ! fillIn && !todo->hasCompletedDate() ) 1247 if ( ! fillIn && !todo->hasCompletedDate() )
1248 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); 1248 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue);
1249 if ( fillIn ) { 1249 if ( fillIn ) {
1250 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue 1250 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue
1251 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1251 if ( KOPrefs::instance()->mShowTodoInAgenda )
1252 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); 1252 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol);
1253 } 1253 }
1254 else { 1254 else {
1255 QDateTime dt; 1255 QDateTime dt;
1256 if ( todo->hasCompletedDate() ) 1256 if ( todo->hasCompletedDate() )
1257 dt = todo->completed(); 1257 dt = todo->completed();
1258 else 1258 else
1259 dt = todo->dtDue();; 1259 dt = todo->dtDue();;
1260 1260
1261 1261
1262 int endY = mAgenda->timeToY(dt.time()) - 1; 1262 int endY = mAgenda->timeToY(dt.time()) - 1;
1263 int hi = (18/KOPrefs::instance()->mHourSize); 1263 int hi = (18/KOPrefs::instance()->mHourSize);
1264 //qDebug("hei %d ",KOPrefs::instance()->mHourSize); 1264 //qDebug("hei %d ",KOPrefs::instance()->mHourSize);
1265 int startY = endY -hi; 1265 int startY = endY -hi;
1266 1266
1267 mAgenda->insertItem(todo,currentDate,curCol,startY,endY); 1267 mAgenda->insertItem(todo,currentDate,curCol,startY,endY);
1268 1268
1269 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1269 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1270 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1270 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1271 } 1271 }
1272 } 1272 }
1273 } 1273 }
1274 // ---------- display Todos] -------------- 1274 // ---------- display Todos] --------------
1275 1275
1276 ++curCol; 1276 ++curCol;
1277 } 1277 }
1278 mAgenda->hideUnused(); 1278 mAgenda->hideUnused();
1279 mAllDayAgenda->hideUnused(); 1279 mAllDayAgenda->hideUnused();
1280 mAgenda->checkScrollBoundaries(); 1280 mAgenda->checkScrollBoundaries();
1281 1281
1282 deleteSelectedDateTime(); 1282 deleteSelectedDateTime();
1283 1283
1284 createDayLabels(); 1284 createDayLabels();
1285 emit incidenceSelected( 0 ); 1285 emit incidenceSelected( 0 );
1286 1286
1287 if ( globalFlagBlockAgenda == 2 ) { 1287 if ( globalFlagBlockAgenda == 2 ) {
1288 if ( KOPrefs::instance()->mSetTimeToDayStartAt ) 1288 if ( KOPrefs::instance()->mSetTimeToDayStartAt )
1289 setStartHour( KOPrefs::instance()->mDayBegins ); 1289 setStartHour( KOPrefs::instance()->mDayBegins );
1290 else if ( KOPrefs::instance()->mCenterOnCurrentTime ) 1290 else if ( KOPrefs::instance()->mCenterOnCurrentTime )
1291 setStartHour( QTime::currentTime ().hour() ); 1291 setStartHour( QTime::currentTime ().hour() );
1292 // qApp->processEvents(); 1292 // qApp->processEvents();
1293 } 1293 }
1294 qApp->processEvents(); 1294 qApp->processEvents();
1295 //qDebug("qApp->processEvents(); END "); 1295 //qDebug("qApp->processEvents(); END ");
1296 globalFlagBlockAgenda = 0; 1296 globalFlagBlockAgenda = 0;
1297 1297
1298 // mAgenda->hideUnused(); 1298 // mAgenda->hideUnused();
1299 //mAllDayAgenda->hideUnused(); 1299 //mAllDayAgenda->hideUnused();
1300 mAllDayAgenda->drawContentsToPainter(); 1300 mAllDayAgenda->drawContentsToPainter();
1301 mAgenda->drawContentsToPainter(); 1301 mAgenda->drawContentsToPainter();
1302 repaintAgenda(); 1302 repaintAgenda();
1303 onlyOne = false; 1303 onlyOne = false;
1304 // mAgenda->finishUpdate(); 1304 // mAgenda->finishUpdate();
1305 //mAllDayAgenda->finishUpdate(); 1305 //mAllDayAgenda->finishUpdate();
1306 1306
1307 // repaintAgenda(); 1307 // repaintAgenda();
1308 //qApp->processEvents(); 1308 //qApp->processEvents();
1309 // globalFlagBlockAgenda = 0; 1309 // globalFlagBlockAgenda = 0;
1310} 1310}
1311void KOAgendaView::repaintAgenda() 1311void KOAgendaView::repaintAgenda()
1312{ 1312{
1313 // mAllDayAgenda->drawContentsToPainter(); 1313 // mAllDayAgenda->drawContentsToPainter();
1314// mAllDayAgenda->viewport()->repaint( false ); 1314// mAllDayAgenda->viewport()->repaint( false );
1315// mAgenda->drawContentsToPainter(); 1315// mAgenda->drawContentsToPainter();
1316// mAgenda->viewport()->repaint( false ); 1316// mAgenda->viewport()->repaint( false );
1317// qApp->processEvents(); 1317// qApp->processEvents();
1318 1318
1319 //qDebug("KOAgendaView::repaintAgenda() "); 1319 //qDebug("KOAgendaView::repaintAgenda() ");
1320 //qApp->processEvents(); 1320 //qApp->processEvents();
1321 mAgenda->viewport()->repaint( false ); 1321 mAgenda->viewport()->repaint( false );
1322 mAllDayAgenda->viewport()->repaint( false ); 1322 mAllDayAgenda->viewport()->repaint( false );
1323 mAgenda->finishUpdate(); 1323 mAgenda->finishUpdate();
1324 mAllDayAgenda->finishUpdate(); 1324 mAllDayAgenda->finishUpdate();
1325} 1325}
1326 1326
1327 1327
1328void KOAgendaView::clearView() 1328void KOAgendaView::clearView()
1329{ 1329{
1330 // kdDebug() << "ClearView" << endl; 1330 // kdDebug() << "ClearView" << endl;
1331 mAllDayAgenda->clear(); 1331 mAllDayAgenda->clear();
1332 mAgenda->clear(); 1332 mAgenda->clear();
1333} 1333}
1334void KOAgendaView::clearList() 1334void KOAgendaView::clearList()
1335{ 1335{
1336 // kdDebug() << "ClearView" << endl; 1336 // kdDebug() << "ClearView" << endl;
1337 clearView(); 1337 clearView();
1338 mAllDayAgenda->hideUnused(); 1338 mAllDayAgenda->hideUnused();
1339 mAgenda->hideUnused(); 1339 mAgenda->hideUnused();
1340} 1340}
1341 1341
1342void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd, 1342void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd,
1343 const QDate &td) 1343 const QDate &td)
1344{ 1344{
1345#ifndef KORG_NOPRINTER 1345#ifndef KORG_NOPRINTER
1346 if (fd == td) 1346 if (fd == td)
1347 calPrinter->preview(CalPrinter::Day, fd, td); 1347 calPrinter->preview(CalPrinter::Day, fd, td);
1348 else 1348 else
1349 calPrinter->preview(CalPrinter::Week, fd, td); 1349 calPrinter->preview(CalPrinter::Week, fd, td);
1350#endif 1350#endif
1351} 1351}
1352 1352
1353// void KOAgendaView::updateMovedTodo() 1353// void KOAgendaView::updateMovedTodo()
1354// { 1354// {
1355// // updateConfig(); 1355// // updateConfig();
1356// // emit updateTodoViews(); 1356// // emit updateTodoViews();
1357// } 1357// }
1358 1358
1359void KOAgendaView::slotShowDateView( int mode , int d ) 1359void KOAgendaView::slotShowDateView( int mode , int d )
1360{ 1360{
1361 if ( d >= mSelectedDates.count() ) { 1361 if ( d >= mSelectedDates.count() ) {
1362 qDebug("KOAgendaView::slotShowDateView datecounterror %d d ", d, mSelectedDates.count() ); 1362 qDebug("KOAgendaView::slotShowDateView datecounterror %d d ", d, mSelectedDates.count() );
1363 1363
1364 } else { 1364 } else {
1365 QDate day = mSelectedDates[d]; 1365 QDate day = mSelectedDates[d];
1366 emit showDateView(mode , day ); 1366 emit showDateView(mode , day );
1367 } 1367 }
1368 1368
1369} 1369}
1370void KOAgendaView::newEvent(int gx, int gy) 1370void KOAgendaView::newEvent(int gx, int gy)
1371{ 1371{
1372 if (!mSelectedDates.count()) return; 1372 if (!mSelectedDates.count()) return;
1373 1373
1374 QDate day = mSelectedDates[gx]; 1374 QDate day = mSelectedDates[gx];
1375 1375
1376 QTime time = mAgenda->gyToTime(gy); 1376 QTime time = mAgenda->gyToTime(gy);
1377 QDateTime dt(day,time); 1377 QDateTime dt(day,time);
1378 // if ( dt < QDateTime::currentDateTime () ) 1378 // if ( dt < QDateTime::currentDateTime () )
1379 // dt = QDateTime::currentDateTime ().addSecs( 3600 ); 1379 // dt = QDateTime::currentDateTime ().addSecs( 3600 );
1380 emit newEventSignal(dt); 1380 emit newEventSignal(dt);
1381} 1381}
1382 1382
1383void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd) 1383void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd)
1384{ 1384{
1385 if (!mSelectedDates.count()) return; 1385 if (!mSelectedDates.count()) return;
1386 1386
1387 QDate dayStart = mSelectedDates[gxStart]; 1387 QDate dayStart = mSelectedDates[gxStart];
1388 QDate dayEnd = mSelectedDates[gxEnd]; 1388 QDate dayEnd = mSelectedDates[gxEnd];
1389 1389
1390 QTime timeStart = mAgenda->gyToTime(gyStart); 1390 QTime timeStart = mAgenda->gyToTime(gyStart);
1391 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); 1391 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 );
1392 1392
1393 QDateTime dtStart(dayStart,timeStart); 1393 QDateTime dtStart(dayStart,timeStart);
1394 QDateTime dtEnd(dayEnd,timeEnd); 1394 QDateTime dtEnd(dayEnd,timeEnd);
1395 1395
1396 emit newEventSignal(dtStart,dtEnd); 1396 emit newEventSignal(dtStart,dtEnd);
1397} 1397}
1398 1398
1399void KOAgendaView::newEventAllDay(int gx, int ) 1399void KOAgendaView::newEventAllDay(int gx, int )
1400{ 1400{
1401 if (!mSelectedDates.count()) return; 1401 if (!mSelectedDates.count()) return;
1402 1402
1403 QDate day = mSelectedDates[gx]; 1403 QDate day = mSelectedDates[gx];
1404 1404
1405 emit newEventSignal(day); 1405 emit newEventSignal(day);
1406} 1406}
1407void KOAgendaView::newTodoAllDay(int gx, int ) 1407void KOAgendaView::newTodoAllDay(int gx, int )
1408{ 1408{
1409 if (!mSelectedDates.count()) return; 1409 if (!mSelectedDates.count()) return;
1410 1410
1411 QDateTime day (mSelectedDates[gx] ); 1411 QDateTime day (mSelectedDates[gx] );
1412 emit newTodoSignal(day, true); 1412 emit newTodoSignal(day, true);
1413} 1413}
1414void KOAgendaView::newTodo(int gx, int gy ) 1414void KOAgendaView::newTodo(int gx, int gy )
1415{ 1415{
1416 if (!mSelectedDates.count()) return; 1416 if (!mSelectedDates.count()) return;
1417 QDate dayStart = mSelectedDates[gx]; 1417 QDate dayStart = mSelectedDates[gx];
1418 QTime timeStart = mAgenda->gyToTime(gy); 1418 QTime timeStart = mAgenda->gyToTime(gy);
1419 QDateTime dt (dayStart,timeStart); 1419 QDateTime dt (dayStart,timeStart);
1420 emit newTodoSignal( dt, false ); 1420 emit newTodoSignal( dt, false );
1421} 1421}
1422 1422
1423void KOAgendaView::updateEventIndicatorTop(int newY) 1423void KOAgendaView::updateEventIndicatorTop(int newY)
1424{ 1424{
1425 uint i; 1425 uint i;
1426 for(i=0;i<mMinY.size();++i) { 1426 for(i=0;i<mMinY.size();++i) {
1427 if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true); 1427 if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true);
1428 else mEventIndicatorTop->enableColumn(i,false); 1428 else mEventIndicatorTop->enableColumn(i,false);
1429 } 1429 }
1430 1430
1431 mEventIndicatorTop->update(); 1431 mEventIndicatorTop->update();
1432} 1432}
1433 1433
1434void KOAgendaView::updateEventIndicatorBottom(int newY) 1434void KOAgendaView::updateEventIndicatorBottom(int newY)
1435{ 1435{
1436 uint i; 1436 uint i;
1437 for(i=0;i<mMaxY.size();++i) { 1437 for(i=0;i<mMaxY.size();++i) {
1438 if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true); 1438 if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true);
1439 else mEventIndicatorBottom->enableColumn(i,false); 1439 else mEventIndicatorBottom->enableColumn(i,false);
1440 } 1440 }
1441 1441
1442 mEventIndicatorBottom->update(); 1442 mEventIndicatorBottom->update();
1443} 1443}
1444 1444
1445void KOAgendaView::startDrag(Event *event) 1445void KOAgendaView::startDrag(Event *event)
1446{ 1446{
1447#ifndef KORG_NODND 1447#ifndef KORG_NODND
1448 DndFactory factory( calendar() ); 1448 DndFactory factory( calendar() );
1449 ICalDrag *vd = factory.createDrag(event,this); 1449 ICalDrag *vd = factory.createDrag(event,this);
1450 if (vd->drag()) { 1450 if (vd->drag()) {
1451 kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl; 1451 kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl;
1452 } 1452 }
1453#endif 1453#endif
1454} 1454}
1455 1455
1456void KOAgendaView::readSettings() 1456void KOAgendaView::readSettings()
1457{ 1457{
1458 readSettings(KOGlobals::config()); 1458 readSettings(KOGlobals::config());
1459} 1459}
1460 1460
1461void KOAgendaView::readSettings(KConfig *config) 1461void KOAgendaView::readSettings(KConfig *config)
1462{ 1462{
1463 // kdDebug() << "KOAgendaView::readSettings()" << endl; 1463 // kdDebug() << "KOAgendaView::readSettings()" << endl;
1464 1464
1465 config->setGroup("Views"); 1465 config->setGroup("Views");
1466 1466
1467 //#ifndef KORG_NOSPLITTER 1467 //#ifndef KORG_NOSPLITTER
1468 QValueList<int> sizes = config->readIntListEntry("Separator AgendaView"); 1468 QValueList<int> sizes = config->readIntListEntry("Separator AgendaView");
1469 if (sizes.count() == 2) { 1469 if (sizes.count() == 2) {
1470 if ( sizes[0] < 20 ) { 1470 if ( sizes[0] < 20 ) {
1471 sizes[1] = sizes[1] +20 - sizes[0]; 1471 sizes[1] = sizes[1] +20 - sizes[0];
1472 sizes[0] = 20; 1472 sizes[0] = 20;
1473 } 1473 }
1474 mSplitterAgenda->setSizes(sizes); 1474 mSplitterAgenda->setSizes(sizes);
1475 // qDebug("read %d %d ",sizes[0],sizes[1] ); 1475 // qDebug("read %d %d ",sizes[0],sizes[1] );
1476 } 1476 }
1477 //#endif 1477 //#endif
1478 1478
1479 // updateConfig(); 1479 // updateConfig();
1480} 1480}
1481 1481
1482void KOAgendaView::writeSettings(KConfig *config) 1482void KOAgendaView::writeSettings(KConfig *config)
1483{ 1483{
1484 // kdDebug() << "KOAgendaView::writeSettings()" << endl; 1484 // kdDebug() << "KOAgendaView::writeSettings()" << endl;
1485 1485
1486 config->setGroup("Views"); 1486 config->setGroup("Views");
1487 1487
1488 //#ifndef KORG_NOSPLITTER 1488 //#ifndef KORG_NOSPLITTER
1489 QValueList<int> list = mSplitterAgenda->sizes(); 1489 QValueList<int> list = mSplitterAgenda->sizes();
1490 config->writeEntry("Separator AgendaView",list); 1490 config->writeEntry("Separator AgendaView",list);
1491 //qDebug("write %d %d ", list[0],list[1] ); 1491 //qDebug("write %d %d ", list[0],list[1] );
1492 //#endif 1492 //#endif
1493} 1493}
1494 1494
1495void KOAgendaView::setHolidayMasks() 1495void KOAgendaView::setHolidayMasks()
1496{ 1496{
1497 mHolidayMask.resize(mSelectedDates.count()); 1497 mHolidayMask.resize(mSelectedDates.count());
1498 1498
1499 uint i; 1499 uint i;
1500 for(i=0;i<mSelectedDates.count();++i) { 1500 for(i=0;i<mSelectedDates.count();++i) {
1501 QDate date = mSelectedDates[i]; 1501 QDate date = mSelectedDates[i];
1502 bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6); 1502 bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6);
1503 bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7); 1503 bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7);
1504 bool showHoliday = false; 1504 bool showHoliday = false;
1505 if ( KOPrefs::instance()->mExcludeHolidays ) { 1505 if ( KOPrefs::instance()->mExcludeHolidays ) {
1506 QPtrList<Event> events = calendar()->events( date, true ); 1506 QPtrList<Event> events = calendar()->events( date, true );
1507 Event *event; 1507 Event *event;
1508 for( event = events.first(); event; event = events.next() ) { 1508 for( event = events.first(); event; event = events.next() ) {
1509 if ( event->isHoliday()) { 1509 if ( event->isHoliday()) {
1510 showHoliday = true; 1510 showHoliday = true;
1511 break; 1511 break;
1512 } 1512 }
1513 } 1513 }
1514 1514
1515 } 1515 }
1516 1516
1517#ifndef KORG_NOPLUGINS 1517#ifndef KORG_NOPLUGINS
1518 bool showHoliday = KOPrefs::instance()->mExcludeHolidays && 1518 bool showHoliday = KOPrefs::instance()->mExcludeHolidays &&
1519 !KOCore::self()->holiday(date).isEmpty(); 1519 !KOCore::self()->holiday(date).isEmpty();
1520#endif 1520#endif
1521 bool showDay = showSaturday || showSunday || showHoliday; 1521 bool showDay = showSaturday || showSunday || showHoliday;
1522 1522
1523 if (showDay) { 1523 if (showDay) {
1524 mHolidayMask.at(i) = true; 1524 mHolidayMask.at(i) = true;
1525 } else { 1525 } else {
1526 mHolidayMask.at(i) = false; 1526 mHolidayMask.at(i) = false;
1527 } 1527 }
1528 } 1528 }
1529 1529
1530 mAgenda->setHolidayMask(&mHolidayMask); 1530 mAgenda->setHolidayMask(&mHolidayMask);
1531 mAllDayAgenda->setHolidayMask(&mHolidayMask); 1531 mAllDayAgenda->setHolidayMask(&mHolidayMask);
1532} 1532}
1533 1533
1534void KOAgendaView::setContentsPos(int y) 1534void KOAgendaView::setContentsPos(int y)
1535{ 1535{
1536 mAgenda->setContentsPos(0,y); 1536 mAgenda->setContentsPos(0,y);
1537} 1537}
1538 1538
1539void KOAgendaView::clearSelection() 1539void KOAgendaView::clearSelection()
1540{ 1540{
1541 mAgenda->deselectItem(); 1541 mAgenda->deselectItem();
1542 mAllDayAgenda->deselectItem(); 1542 mAllDayAgenda->deselectItem();
1543} 1543}
1544 1544
1545void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart, 1545void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart,
1546 int gxEnd, int gyEnd) 1546 int gxEnd, int gyEnd)
1547{ 1547{
1548 mTimeSpanInAllDay = true; 1548 mTimeSpanInAllDay = true;
1549 newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd); 1549 newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd);
1550} 1550}
1551 1551
1552 1552
1553 1553
1554 1554
1555void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart, 1555void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart,
1556 int gxEnd, int gyEnd) 1556 int gxEnd, int gyEnd)
1557{ 1557{
1558 if (!mSelectedDates.count()) return; 1558 if (!mSelectedDates.count()) return;
1559 1559
1560 QDate dayStart = mSelectedDates[gxStart]; 1560 QDate dayStart = mSelectedDates[gxStart];
1561 QDate dayEnd = mSelectedDates[gxEnd]; 1561 QDate dayEnd = mSelectedDates[gxEnd];
1562 1562
1563 QTime timeStart = mAgenda->gyToTime(gyStart); 1563 QTime timeStart = mAgenda->gyToTime(gyStart);
1564 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); 1564 QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 );
1565 1565
1566 QDateTime dtStart(dayStart,timeStart); 1566 QDateTime dtStart(dayStart,timeStart);
1567 QDateTime dtEnd(dayEnd,timeEnd); 1567 QDateTime dtEnd(dayEnd,timeEnd);
1568 1568
1569 mTimeSpanBegin = dtStart; 1569 mTimeSpanBegin = dtStart;
1570 mTimeSpanEnd = dtEnd; 1570 mTimeSpanEnd = dtEnd;
1571 1571
1572} 1572}
1573 1573
1574void KOAgendaView::deleteSelectedDateTime() 1574void KOAgendaView::deleteSelectedDateTime()
1575{ 1575{
1576 mTimeSpanBegin.setDate(QDate()); 1576 mTimeSpanBegin.setDate(QDate());
1577 mTimeSpanEnd.setDate(QDate()); 1577 mTimeSpanEnd.setDate(QDate());
1578 mTimeSpanInAllDay = false; 1578 mTimeSpanInAllDay = false;
1579} 1579}
1580 1580
1581void KOAgendaView::keyPressEvent ( QKeyEvent * e ) 1581void KOAgendaView::keyPressEvent ( QKeyEvent * e )
1582{ 1582{
1583 e->ignore(); 1583 e->ignore();
1584} 1584}
1585 1585
1586void KOAgendaView::scrollOneHourUp() 1586void KOAgendaView::scrollOneHourUp()
1587{ 1587{
1588 1588
1589 mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); 1589 mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 );
1590} 1590}
1591void KOAgendaView::scrollOneHourDown() 1591void KOAgendaView::scrollOneHourDown()
1592{ 1592{
1593 mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); 1593 mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 );
1594} 1594}
1595 1595
1596void KOAgendaView::setStartHour( int h ) 1596void KOAgendaView::setStartHour( int h )
1597{ 1597{
1598 mAgenda->setStartHour( h ); 1598 mAgenda->setStartHour( h );
1599 1599
1600} 1600}
1601void KOAgendaView::setInitStartHour() 1601void KOAgendaView::setInitStartHour()
1602{ 1602{
1603 1603
1604 if ( KOPrefs::instance()->mCenterOnCurrentTime ) 1604 if ( KOPrefs::instance()->mCenterOnCurrentTime )
1605 setStartHour( QTime::currentTime ().hour() ); 1605 setStartHour( QTime::currentTime ().hour() );
1606 else 1606 else
1607 setStartHour( KOPrefs::instance()->mDayBegins ); 1607 setStartHour( KOPrefs::instance()->mDayBegins );
1608 1608
1609} 1609}
1610 1610
1611 1611
1612void KOAgendaView::updateTodo( Todo * t, int ) 1612void KOAgendaView::updateTodo( Todo * t, int )
1613{ 1613{
1614 if ( !isVisible() ) 1614 if ( !isVisible() )
1615 return; 1615 return;
1616 bool remove = false; 1616 bool remove = false;
1617 bool removeAD = false; 1617 bool removeAD = false;
1618 QDate da; 1618 QDate da;
1619 if ( t->hasCompletedDate() ) 1619 if ( t->hasCompletedDate() )
1620 da = t->completed().date(); 1620 da = t->completed().date();
1621 else 1621 else
1622 da = t->dtDue().date(); 1622 da = t->dtDue().date();
1623 if ( ! t->hasDueDate() && !t->hasCompletedDate() ) { 1623 if ( ! t->hasDueDate() && !t->hasCompletedDate() ) {
1624 remove = true; 1624 remove = true;
1625 removeAD = true; 1625 removeAD = true;
1626 } 1626 }
1627 else { 1627 else {
1628 bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; 1628 bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ;
1629 if ( overdue && 1629 if ( overdue &&
1630 QDate::currentDate() >= mSelectedDates.first() && 1630 QDate::currentDate() >= mSelectedDates.first() &&
1631 QDate::currentDate() <= mSelectedDates.last()) { 1631 QDate::currentDate() <= mSelectedDates.last()) {
1632 removeAD = false; 1632 removeAD = false;
1633 remove = true; 1633 remove = true;
1634 } 1634 }
1635 else { 1635 else {
1636 1636
1637 if ( da < mSelectedDates.first() || 1637 if ( da < mSelectedDates.first() ||
1638 da > mSelectedDates.last() ) { 1638 da > mSelectedDates.last() ) {
1639 remove = true; 1639 remove = true;
1640 removeAD = true; 1640 removeAD = true;
1641 } else { 1641 } else {
1642 remove = t->doesFloat() && !t->hasCompletedDate(); 1642 remove = t->doesFloat() && !t->hasCompletedDate();
1643 removeAD = !remove; 1643 removeAD = !remove;
1644 } 1644 }
1645 } 1645 }
1646 } 1646 }
1647 int days = mSelectedDates.first().daysTo( da ); 1647 int days = mSelectedDates.first().daysTo( da );
1648 //qDebug("daysto %d %d %d", days, remove,removeAD ); 1648 //qDebug("daysto %d %d %d", days, remove,removeAD );
1649 mAgenda->updateTodo( t , days, remove); 1649 mAgenda->updateTodo( t , days, remove);
1650 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1650 if ( KOPrefs::instance()->mShowTodoInAgenda )
1651 mAllDayAgenda->updateTodo( t , days, removeAD); 1651 mAllDayAgenda->updateTodo( t , days, removeAD);
1652 //qDebug("KOAgendaView::updateTodo( Todo *, int ) "); 1652 //qDebug("KOAgendaView::updateTodo( Todo *, int ) ");
1653 1653
1654} 1654}
diff --git a/korganizer/koeditorrecurrence.cpp b/korganizer/koeditorrecurrence.cpp
index e165017..dea8981 100644
--- a/korganizer/koeditorrecurrence.cpp
+++ b/korganizer/koeditorrecurrence.cpp
@@ -1,1108 +1,1108 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000-2003 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000-2003 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qfiledialog.h> 25#include <qfiledialog.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qvgroupbox.h> 29#include <qvgroupbox.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qlistbox.h> 32#include <qlistbox.h>
33#include <qspinbox.h> 33#include <qspinbox.h>
34#include <qcheckbox.h> 34#include <qcheckbox.h>
35#include <qapplication.h> 35#include <qapplication.h>
36 36
37#include <kdialog.h> 37#include <kdialog.h>
38#include <kglobal.h> 38#include <kglobal.h>
39#include <klocale.h> 39#include <klocale.h>
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <knumvalidator.h> 42#include <knumvalidator.h>
43 43
44#include <libkcal/event.h> 44#include <libkcal/event.h>
45#include <libkcal/todo.h> 45#include <libkcal/todo.h>
46 46
47#include <libkdepim/kdateedit.h> 47#include <libkdepim/kdateedit.h>
48 48
49#include "koprefs.h" 49#include "koprefs.h"
50 50
51#include "koeditorrecurrence.h" 51#include "koeditorrecurrence.h"
52 52
53/////////////////////////// RecurBase /////////////////////////////// 53/////////////////////////// RecurBase ///////////////////////////////
54 54
55RecurBase::RecurBase( QWidget *parent, const char *name ) : 55RecurBase::RecurBase( QWidget *parent, const char *name ) :
56 QWidget( parent, name ) 56 QWidget( parent, name )
57{ 57{
58 mFrequencyEdit = new QSpinBox( 1, 9999, 1, this ); 58 mFrequencyEdit = new QSpinBox( 1, 9999, 1, this );
59 mFrequencyEdit->setValue( 1 ); 59 mFrequencyEdit->setValue( 1 );
60} 60}
61 61
62QWidget *RecurBase::frequencyEdit() 62QWidget *RecurBase::frequencyEdit()
63{ 63{
64 return mFrequencyEdit; 64 return mFrequencyEdit;
65} 65}
66 66
67void RecurBase::setFrequency( int f ) 67void RecurBase::setFrequency( int f )
68{ 68{
69 if ( f < 1 ) f = 1; 69 if ( f < 1 ) f = 1;
70 70
71 mFrequencyEdit->setValue( f ); 71 mFrequencyEdit->setValue( f );
72} 72}
73 73
74int RecurBase::frequency() 74int RecurBase::frequency()
75{ 75{
76 return mFrequencyEdit->value(); 76 return mFrequencyEdit->value();
77} 77}
78 78
79/////////////////////////// RecurDaily /////////////////////////////// 79/////////////////////////// RecurDaily ///////////////////////////////
80 80
81RecurDaily::RecurDaily( QWidget *parent, const char *name ) : 81RecurDaily::RecurDaily( QWidget *parent, const char *name ) :
82 RecurBase( parent, name ) 82 RecurBase( parent, name )
83{ 83{
84 QBoxLayout *topLayout = new QHBoxLayout( this ); 84 QBoxLayout *topLayout = new QHBoxLayout( this );
85 topLayout->setSpacing( KDialog::spacingHint() ); 85 topLayout->setSpacing( KDialog::spacingHint() );
86 topLayout->setMargin( KDialog::marginHintSmall() ); 86 topLayout->setMargin( KDialog::marginHintSmall() );
87 87
88 QLabel *preLabel = new QLabel( i18n("Recur every"), this ); 88 QLabel *preLabel = new QLabel( i18n("Recur every"), this );
89 topLayout->addWidget( preLabel ); 89 topLayout->addWidget( preLabel );
90 90
91 topLayout->addWidget( frequencyEdit() ); 91 topLayout->addWidget( frequencyEdit() );
92 92
93 QLabel *postLabel = new QLabel( i18n("day(s)"), this ); 93 QLabel *postLabel = new QLabel( i18n("day(s)"), this );
94 topLayout->addWidget( postLabel ); 94 topLayout->addWidget( postLabel );
95} 95}
96 96
97 97
98/////////////////////////// RecurWeekly /////////////////////////////// 98/////////////////////////// RecurWeekly ///////////////////////////////
99 99
100RecurWeekly::RecurWeekly( QWidget *parent, const char *name ) : 100RecurWeekly::RecurWeekly( QWidget *parent, const char *name ) :
101 RecurBase( parent, name ) 101 RecurBase( parent, name )
102{ 102{
103 QBoxLayout *topLayout = new QVBoxLayout( this ); 103 QBoxLayout *topLayout = new QVBoxLayout( this );
104 topLayout->setSpacing( KDialog::spacingHint() ); 104 topLayout->setSpacing( KDialog::spacingHint() );
105 topLayout->setMargin( KDialog::marginHintSmall() ); 105 topLayout->setMargin( KDialog::marginHintSmall() );
106 106
107 //topLayout->addStretch( 1 ); 107 //topLayout->addStretch( 1 );
108 108
109 QBoxLayout *weeksLayout = new QHBoxLayout( topLayout ); 109 QBoxLayout *weeksLayout = new QHBoxLayout( topLayout );
110 110
111 QLabel *preLabel = new QLabel( i18n("Recur every"), this ); 111 QLabel *preLabel = new QLabel( i18n("Recur every"), this );
112 weeksLayout->addWidget( preLabel ); 112 weeksLayout->addWidget( preLabel );
113 113
114 weeksLayout->addWidget( frequencyEdit() ); 114 weeksLayout->addWidget( frequencyEdit() );
115 115
116 QLabel *postLabel = new QLabel( i18n("week(s) on:"), this ); 116 QLabel *postLabel = new QLabel( i18n("week(s) on:"), this );
117 weeksLayout->addWidget( postLabel ); 117 weeksLayout->addWidget( postLabel );
118 118
119 QHBox *dayBox = new QHBox( this ); 119 QHBox *dayBox = new QHBox( this );
120 topLayout->addWidget( dayBox, 1, AlignVCenter ); 120 topLayout->addWidget( dayBox, 1, AlignVCenter );
121 // TODO: Respect start of week setting 121 // TODO: Respect start of week setting
122 for ( int i = 0; i < 7; ++i ) { 122 for ( int i = 0; i < 7; ++i ) {
123 QString weekDayName = KGlobal::locale()->weekDayName( i + 1, true ); 123 QString weekDayName = KGlobal::locale()->weekDayName( i + 1, true );
124 int left = 1; 124 int left = 1;
125 if ( QApplication::desktop()->width() > 480 ) { 125 if ( QApplication::desktop()->width() > 480 ) {
126 ++left; 126 ++left;
127 if ( QApplication::desktop()->width() > 640 ) 127 if ( QApplication::desktop()->width() > 640 )
128 ++left; 128 ++left;
129 } 129 }
130 mDayBoxes[ i ] = new QCheckBox( weekDayName.left( left ), dayBox ); 130 mDayBoxes[ i ] = new QCheckBox( weekDayName.left( left ), dayBox );
131 } 131 }
132 132
133 topLayout->addStretch( ); 133 topLayout->addStretch( );
134} 134}
135 135
136void RecurWeekly::setDays( const QBitArray &days ) 136void RecurWeekly::setDays( const QBitArray &days )
137{ 137{
138 for ( int i = 0; i < 7; ++i ) { 138 for ( int i = 0; i < 7; ++i ) {
139 mDayBoxes[ i ]->setChecked( days.testBit( i ) ); 139 mDayBoxes[ i ]->setChecked( days.testBit( i ) );
140 } 140 }
141} 141}
142 142
143QBitArray RecurWeekly::days() 143QBitArray RecurWeekly::days()
144{ 144{
145 QBitArray days( 7 ); 145 QBitArray days( 7 );
146 146
147 for ( int i = 0; i < 7; ++i ) { 147 for ( int i = 0; i < 7; ++i ) {
148 days.setBit( i, mDayBoxes[ i ]->isChecked() ); 148 days.setBit( i, mDayBoxes[ i ]->isChecked() );
149 } 149 }
150 150
151 return days; 151 return days;
152} 152}
153 153
154/////////////////////////// RecurMonthly /////////////////////////////// 154/////////////////////////// RecurMonthly ///////////////////////////////
155 155
156RecurMonthly::RecurMonthly( QWidget *parent, const char *name ) : 156RecurMonthly::RecurMonthly( QWidget *parent, const char *name ) :
157 RecurBase( parent, name ) 157 RecurBase( parent, name )
158{ 158{
159 QBoxLayout *topLayout = new QVBoxLayout( this ); 159 QBoxLayout *topLayout = new QVBoxLayout( this );
160 topLayout->setSpacing( KDialog::spacingHint() ); 160 topLayout->setSpacing( KDialog::spacingHint() );
161 topLayout->setMargin( KDialog::marginHintSmall() ); 161 topLayout->setMargin( KDialog::marginHintSmall() );
162 162
163 163
164 QBoxLayout *freqLayout = new QHBoxLayout( topLayout ); 164 QBoxLayout *freqLayout = new QHBoxLayout( topLayout );
165 165
166 QLabel *preLabel = new QLabel( i18n("every"), this ); 166 QLabel *preLabel = new QLabel( i18n("every"), this );
167 freqLayout->addWidget( preLabel ); 167 freqLayout->addWidget( preLabel );
168 168
169 freqLayout->addWidget( frequencyEdit() ); 169 freqLayout->addWidget( frequencyEdit() );
170 170
171 QLabel *postLabel = new QLabel( i18n("month(s)"), this ); 171 QLabel *postLabel = new QLabel( i18n("month(s)"), this );
172 freqLayout->addWidget( postLabel ); 172 freqLayout->addWidget( postLabel );
173 173
174 174
175 QButtonGroup *buttonGroup = new QButtonGroup( this ); 175 QButtonGroup *buttonGroup = new QButtonGroup( this );
176 buttonGroup->setFrameStyle( QFrame::NoFrame ); 176 buttonGroup->setFrameStyle( QFrame::NoFrame );
177 topLayout->addWidget( buttonGroup, 1, AlignVCenter ); 177 topLayout->addWidget( buttonGroup, 1, AlignVCenter );
178 178
179 QGridLayout *buttonLayout = new QGridLayout( buttonGroup, 3, 2 ); 179 QGridLayout *buttonLayout = new QGridLayout( buttonGroup, 3, 2 );
180 buttonLayout->setSpacing( KDialog::spacingHint() ); 180 buttonLayout->setSpacing( KDialog::spacingHint() );
181 buttonLayout->setMargin( KDialog::marginHintSmall() ); 181 buttonLayout->setMargin( KDialog::marginHintSmall() );
182 182
183 183
184 QString recurOnText; 184 QString recurOnText;
185 if ( QApplication::desktop()->width() > 320 ) { 185 if ( QApplication::desktop()->width() > 320 ) {
186 recurOnText = i18n("Recur on the"); 186 recurOnText = i18n("Recur on the");
187 } 187 }
188 188
189 mByDayRadio = new QRadioButton( recurOnText, buttonGroup ); 189 mByDayRadio = new QRadioButton( recurOnText, buttonGroup );
190 buttonLayout->addWidget( mByDayRadio, 0, 0 ); 190 buttonLayout->addWidget( mByDayRadio, 0, 0 );
191 191
192 mByDayCombo = new QComboBox( buttonGroup ); 192 mByDayCombo = new QComboBox( buttonGroup );
193 mByDayCombo->setSizeLimit( 7 ); 193 mByDayCombo->setSizeLimit( 7 );
194 mByDayCombo->insertItem( i18n("1st") ); 194 mByDayCombo->insertItem( i18n("1st") );
195 mByDayCombo->insertItem( i18n("2nd") ); 195 mByDayCombo->insertItem( i18n("2nd") );
196 mByDayCombo->insertItem( i18n("3rd") ); 196 mByDayCombo->insertItem( i18n("3rd") );
197 mByDayCombo->insertItem( i18n("4th") ); 197 mByDayCombo->insertItem( i18n("4th") );
198 mByDayCombo->insertItem( i18n("5th") ); 198 mByDayCombo->insertItem( i18n("5th") );
199 mByDayCombo->insertItem( i18n("6th") ); 199 mByDayCombo->insertItem( i18n("6th") );
200 mByDayCombo->insertItem( i18n("7th") ); 200 mByDayCombo->insertItem( i18n("7th") );
201 mByDayCombo->insertItem( i18n("8th") ); 201 mByDayCombo->insertItem( i18n("8th") );
202 mByDayCombo->insertItem( i18n("9th") ); 202 mByDayCombo->insertItem( i18n("9th") );
203 mByDayCombo->insertItem( i18n("10th") ); 203 mByDayCombo->insertItem( i18n("10th") );
204 mByDayCombo->insertItem( i18n("11th") ); 204 mByDayCombo->insertItem( i18n("11th") );
205 mByDayCombo->insertItem( i18n("12th") ); 205 mByDayCombo->insertItem( i18n("12th") );
206 mByDayCombo->insertItem( i18n("13th") ); 206 mByDayCombo->insertItem( i18n("13th") );
207 mByDayCombo->insertItem( i18n("14th") ); 207 mByDayCombo->insertItem( i18n("14th") );
208 mByDayCombo->insertItem( i18n("15th") ); 208 mByDayCombo->insertItem( i18n("15th") );
209 mByDayCombo->insertItem( i18n("16th") ); 209 mByDayCombo->insertItem( i18n("16th") );
210 mByDayCombo->insertItem( i18n("17th") ); 210 mByDayCombo->insertItem( i18n("17th") );
211 mByDayCombo->insertItem( i18n("18th") ); 211 mByDayCombo->insertItem( i18n("18th") );
212 mByDayCombo->insertItem( i18n("19th") ); 212 mByDayCombo->insertItem( i18n("19th") );
213 mByDayCombo->insertItem( i18n("20th") ); 213 mByDayCombo->insertItem( i18n("20th") );
214 mByDayCombo->insertItem( i18n("21st") ); 214 mByDayCombo->insertItem( i18n("21st") );
215 mByDayCombo->insertItem( i18n("22nd") ); 215 mByDayCombo->insertItem( i18n("22nd") );
216 mByDayCombo->insertItem( i18n("23rd") ); 216 mByDayCombo->insertItem( i18n("23rd") );
217 mByDayCombo->insertItem( i18n("24th") ); 217 mByDayCombo->insertItem( i18n("24th") );
218 mByDayCombo->insertItem( i18n("25th") ); 218 mByDayCombo->insertItem( i18n("25th") );
219 mByDayCombo->insertItem( i18n("26th") ); 219 mByDayCombo->insertItem( i18n("26th") );
220 mByDayCombo->insertItem( i18n("27th") ); 220 mByDayCombo->insertItem( i18n("27th") );
221 mByDayCombo->insertItem( i18n("28th") ); 221 mByDayCombo->insertItem( i18n("28th") );
222 mByDayCombo->insertItem( i18n("29th") ); 222 mByDayCombo->insertItem( i18n("29th") );
223 mByDayCombo->insertItem( i18n("30th") ); 223 mByDayCombo->insertItem( i18n("30th") );
224 mByDayCombo->insertItem( i18n("31st") ); 224 mByDayCombo->insertItem( i18n("31st") );
225 buttonLayout->addWidget( mByDayCombo, 0, 1 ); 225 buttonLayout->addWidget( mByDayCombo, 0, 1 );
226 226
227 QLabel *byDayLabel = new QLabel( i18n("day"), buttonGroup ); 227 QLabel *byDayLabel = new QLabel( i18n("day"), buttonGroup );
228 buttonLayout->addWidget( byDayLabel, 0, 2 ); 228 buttonLayout->addWidget( byDayLabel, 0, 2 );
229 229
230 230
231 mByPosRadio = new QRadioButton( recurOnText, buttonGroup); 231 mByPosRadio = new QRadioButton( recurOnText, buttonGroup);
232 buttonLayout->addWidget( mByPosRadio, 1, 0 ); 232 buttonLayout->addWidget( mByPosRadio, 1, 0 );
233 233
234 mByPosCountCombo = new QComboBox( buttonGroup ); 234 mByPosCountCombo = new QComboBox( buttonGroup );
235 mByPosCountCombo->insertItem( i18n("1st") ); 235 mByPosCountCombo->insertItem( i18n("1st") );
236 mByPosCountCombo->insertItem( i18n("2nd") ); 236 mByPosCountCombo->insertItem( i18n("2nd") );
237 mByPosCountCombo->insertItem( i18n("3rd") ); 237 mByPosCountCombo->insertItem( i18n("3rd") );
238 mByPosCountCombo->insertItem( i18n("4th") ); 238 mByPosCountCombo->insertItem( i18n("4th") );
239 mByPosCountCombo->insertItem( i18n("5th") ); 239 mByPosCountCombo->insertItem( i18n("5th") );
240 buttonLayout->addWidget( mByPosCountCombo, 1, 1 ); 240 buttonLayout->addWidget( mByPosCountCombo, 1, 1 );
241 241
242 mByPosWeekdayCombo = new QComboBox( buttonGroup ); 242 mByPosWeekdayCombo = new QComboBox( buttonGroup );
243 mByPosWeekdayCombo->insertItem( i18n("Monday") ); 243 mByPosWeekdayCombo->insertItem( i18n("Monday") );
244 mByPosWeekdayCombo->insertItem( i18n("Tuesday") ); 244 mByPosWeekdayCombo->insertItem( i18n("Tuesday") );
245 mByPosWeekdayCombo->insertItem( i18n("Wednesday") ); 245 mByPosWeekdayCombo->insertItem( i18n("Wednesday") );
246 mByPosWeekdayCombo->insertItem( i18n("Thursday") ); 246 mByPosWeekdayCombo->insertItem( i18n("Thursday") );
247 mByPosWeekdayCombo->insertItem( i18n("Friday") ); 247 mByPosWeekdayCombo->insertItem( i18n("Friday") );
248 mByPosWeekdayCombo->insertItem( i18n("Saturday") ); 248 mByPosWeekdayCombo->insertItem( i18n("Saturday") );
249 mByPosWeekdayCombo->insertItem( i18n("Sunday") ); 249 mByPosWeekdayCombo->insertItem( i18n("Sunday") );
250 buttonLayout->addWidget( mByPosWeekdayCombo, 1, 2 ); 250 buttonLayout->addWidget( mByPosWeekdayCombo, 1, 2 );
251} 251}
252 252
253void RecurMonthly::setByDay( int day ) 253void RecurMonthly::setByDay( int day )
254{ 254{
255 mByDayRadio->setChecked( true ); 255 mByDayRadio->setChecked( true );
256 mByDayCombo->setCurrentItem( day ); 256 mByDayCombo->setCurrentItem( day );
257} 257}
258 258
259void RecurMonthly::setByPos( int count, int weekday ) 259void RecurMonthly::setByPos( int count, int weekday )
260{ 260{
261 mByPosRadio->setChecked( true ); 261 mByPosRadio->setChecked( true );
262 mByPosCountCombo->setCurrentItem( count ); 262 mByPosCountCombo->setCurrentItem( count );
263 mByPosWeekdayCombo->setCurrentItem( weekday ); 263 mByPosWeekdayCombo->setCurrentItem( weekday );
264} 264}
265 265
266bool RecurMonthly::byDay() 266bool RecurMonthly::byDay()
267{ 267{
268 return mByDayRadio->isChecked(); 268 return mByDayRadio->isChecked();
269} 269}
270 270
271bool RecurMonthly::byPos() 271bool RecurMonthly::byPos()
272{ 272{
273 return mByPosRadio->isChecked(); 273 return mByPosRadio->isChecked();
274} 274}
275 275
276int RecurMonthly::day() 276int RecurMonthly::day()
277{ 277{
278 return mByDayCombo->currentItem() + 1; 278 return mByDayCombo->currentItem() + 1;
279} 279}
280 280
281int RecurMonthly::count() 281int RecurMonthly::count()
282{ 282{
283 return mByPosCountCombo->currentItem() + 1; 283 return mByPosCountCombo->currentItem() + 1;
284} 284}
285 285
286int RecurMonthly::weekday() 286int RecurMonthly::weekday()
287{ 287{
288 return mByPosWeekdayCombo->currentItem(); 288 return mByPosWeekdayCombo->currentItem();
289} 289}
290 290
291/////////////////////////// RecurYearly /////////////////////////////// 291/////////////////////////// RecurYearly ///////////////////////////////
292 292
293RecurYearly::RecurYearly( QWidget *parent, const char *name ) : 293RecurYearly::RecurYearly( QWidget *parent, const char *name ) :
294 RecurBase( parent, name ) 294 RecurBase( parent, name )
295{ 295{
296 QBoxLayout *topLayout = new QVBoxLayout( this ); 296 QBoxLayout *topLayout = new QVBoxLayout( this );
297 topLayout->setSpacing( KDialog::spacingHint() ); 297 topLayout->setSpacing( KDialog::spacingHint() );
298 topLayout->setMargin( KDialog::marginHintSmall() ); 298 topLayout->setMargin( KDialog::marginHintSmall() );
299 299
300 300
301 QBoxLayout *freqLayout = new QHBoxLayout( topLayout ); 301 QBoxLayout *freqLayout = new QHBoxLayout( topLayout );
302 302
303 QLabel *preLabel = new QLabel( i18n("every"), this ); 303 QLabel *preLabel = new QLabel( i18n("every"), this );
304 freqLayout->addWidget( preLabel ); 304 freqLayout->addWidget( preLabel );
305 305
306 freqLayout->addWidget( frequencyEdit() ); 306 freqLayout->addWidget( frequencyEdit() );
307 307
308 QLabel *postLabel = new QLabel( i18n("year(s)"), this ); 308 QLabel *postLabel = new QLabel( i18n("year(s)"), this );
309 freqLayout->addWidget( postLabel ); 309 freqLayout->addWidget( postLabel );
310 310
311 311
312 QButtonGroup *buttonGroup = new QButtonGroup( this ); 312 QButtonGroup *buttonGroup = new QButtonGroup( this );
313 buttonGroup->setFrameStyle( QFrame::NoFrame ); 313 buttonGroup->setFrameStyle( QFrame::NoFrame );
314 topLayout->addWidget( buttonGroup, 1, AlignVCenter ); 314 topLayout->addWidget( buttonGroup, 1, AlignVCenter );
315 315
316 QGridLayout *buttonLayout = new QGridLayout( buttonGroup, 2, 3 ); 316 QGridLayout *buttonLayout = new QGridLayout( buttonGroup, 2, 3 );
317 317
318 mByMonthRadio = new QRadioButton( i18n("On day "), buttonGroup); 318 mByMonthRadio = new QRadioButton( i18n("On day "), buttonGroup);
319 buttonLayout->addWidget( mByMonthRadio, 0, 0 , Qt::AlignRight); 319 buttonLayout->addWidget( mByMonthRadio, 0, 0 , Qt::AlignRight);
320 mByDayLabel = new QLabel( i18n("%1 of ").arg(1), buttonGroup ); 320 mByDayLabel = new QLabel( i18n("%1 of ").arg(1), buttonGroup );
321 321
322 buttonLayout->addWidget( mByDayLabel, 0, 1 ); 322 buttonLayout->addWidget( mByDayLabel, 0, 1 );
323 mByMonthCombo = new QComboBox( buttonGroup ); 323 mByMonthCombo = new QComboBox( buttonGroup );
324 mByMonthCombo->insertItem( i18n("January") ); 324 mByMonthCombo->insertItem( i18n("January") );
325 mByMonthCombo->insertItem( i18n("February") ); 325 mByMonthCombo->insertItem( i18n("February") );
326 mByMonthCombo->insertItem( i18n("March") ); 326 mByMonthCombo->insertItem( i18n("March") );
327 mByMonthCombo->insertItem( i18n("April") ); 327 mByMonthCombo->insertItem( i18n("April") );
328 mByMonthCombo->insertItem( i18n("May") ); 328 mByMonthCombo->insertItem( i18n("May") );
329 mByMonthCombo->insertItem( i18n("June") ); 329 mByMonthCombo->insertItem( i18n("June") );
330 mByMonthCombo->insertItem( i18n("July") ); 330 mByMonthCombo->insertItem( i18n("July") );
331 mByMonthCombo->insertItem( i18n("August") ); 331 mByMonthCombo->insertItem( i18n("August") );
332 mByMonthCombo->insertItem( i18n("September") ); 332 mByMonthCombo->insertItem( i18n("September") );
333 mByMonthCombo->insertItem( i18n("October") ); 333 mByMonthCombo->insertItem( i18n("October") );
334 mByMonthCombo->insertItem( i18n("November") ); 334 mByMonthCombo->insertItem( i18n("November") );
335 mByMonthCombo->insertItem( i18n("December") ); 335 mByMonthCombo->insertItem( i18n("December") );
336 buttonLayout->addWidget( mByMonthCombo, 0, 2,Qt::AlignLeft ); 336 buttonLayout->addWidget( mByMonthCombo, 0, 2,Qt::AlignLeft );
337 if ( QApplication::desktop()->width() <= 640 ) { 337 if ( QApplication::desktop()->width() <= 640 ) {
338 mByMonthCombo->setSizeLimit( 6 ); 338 mByMonthCombo->setSizeLimit( 6 );
339 } 339 }
340 340
341 mByDayRadio = new QRadioButton( i18n("On day "), buttonGroup); 341 mByDayRadio = new QRadioButton( i18n("On day "), buttonGroup);
342 buttonLayout->addWidget( mByDayRadio, 1, 0 , Qt::AlignRight); 342 buttonLayout->addWidget( mByDayRadio, 1, 0 , Qt::AlignRight);
343 mDayOfLabel = new QLabel( i18n("%1 of the year").arg(1), buttonGroup ); 343 mDayOfLabel = new QLabel( i18n("%1 of the year").arg(1), buttonGroup );
344 buttonLayout->addMultiCellWidget( mDayOfLabel, 1, 1, 1,3 ); 344 buttonLayout->addMultiCellWidget( mDayOfLabel, 1, 1, 1,3 );
345 345
346} 346}
347 347
348void RecurYearly::setByDay( int doy ) 348void RecurYearly::setByDay( int doy )
349{ 349{
350 mByDayRadio->setChecked( true ); 350 mByDayRadio->setChecked( true );
351 mDayOfLabel->setText(i18n("%1 of the year").arg( doy ) ); 351 mDayOfLabel->setText(i18n("%1 of the year").arg( doy ) );
352} 352}
353 353
354void RecurYearly::setByMonth( int month, int day ) 354void RecurYearly::setByMonth( int month, int day )
355{ 355{
356 mByMonthRadio->setChecked( true ); 356 mByMonthRadio->setChecked( true );
357 mByMonthCombo->setCurrentItem( month - 1 ); 357 mByMonthCombo->setCurrentItem( month - 1 );
358 mByDayLabel->setText(i18n("%1 of ").arg( day ) ); 358 mByDayLabel->setText(i18n("%1 of ").arg( day ) );
359 mDay = day; 359 mDay = day;
360} 360}
361 361
362bool RecurYearly::byMonth() 362bool RecurYearly::byMonth()
363{ 363{
364 return mByMonthRadio->isChecked(); 364 return mByMonthRadio->isChecked();
365} 365}
366 366
367bool RecurYearly::byDay() 367bool RecurYearly::byDay()
368{ 368{
369 return mByDayRadio->isChecked(); 369 return mByDayRadio->isChecked();
370} 370}
371 371
372int RecurYearly::month() 372int RecurYearly::month()
373{ 373{
374 return mByMonthCombo->currentItem() + 1; 374 return mByMonthCombo->currentItem() + 1;
375} 375}
376int RecurYearly::day() 376int RecurYearly::day()
377{ 377{
378 return mDay;//mByDayCombo->currentItem() + 1; 378 return mDay;//mByDayCombo->currentItem() + 1;
379} 379}
380 380
381//////////////////////////// ExceptionsWidget ////////////////////////// 381//////////////////////////// ExceptionsWidget //////////////////////////
382 382
383ExceptionsWidget::ExceptionsWidget( QWidget *parent, const char *name ) : 383ExceptionsWidget::ExceptionsWidget( QWidget *parent, const char *name ) :
384 QWidget( parent, name ) 384 QWidget( parent, name )
385{ 385{
386 QBoxLayout *topLayout = new QVBoxLayout( this ); 386 QBoxLayout *topLayout = new QVBoxLayout( this );
387 387
388 QGroupBox *groupBox = new QGroupBox( 1, Horizontal, i18n("Exceptions"), 388 QGroupBox *groupBox = new QGroupBox( 1, Horizontal, i18n("Exceptions"),
389 this ); 389 this );
390 topLayout->addWidget( groupBox ); 390 topLayout->addWidget( groupBox );
391 391
392 QWidget *box = new QWidget( groupBox ); 392 QWidget *box = new QWidget( groupBox );
393 393
394 QGridLayout *boxLayout = new QGridLayout( box ); 394 QGridLayout *boxLayout = new QGridLayout( box );
395 395
396 mExceptionDateEdit = new KDateEdit( box ); 396 mExceptionDateEdit = new KDateEdit( box );
397 boxLayout->addWidget( mExceptionDateEdit, 0, 0 ); 397 boxLayout->addWidget( mExceptionDateEdit, 0, 0 );
398 398
399 QPushButton *addExceptionButton = new QPushButton( i18n("Add"), box ); 399 QPushButton *addExceptionButton = new QPushButton( i18n("Add"), box );
400 boxLayout->addWidget( addExceptionButton, 1, 0 ); 400 boxLayout->addWidget( addExceptionButton, 1, 0 );
401 QPushButton *changeExceptionButton = new QPushButton( i18n("Change"), box ); 401 QPushButton *changeExceptionButton = new QPushButton( i18n("Change"), box );
402 boxLayout->addWidget( changeExceptionButton, 2, 0 ); 402 boxLayout->addWidget( changeExceptionButton, 2, 0 );
403 QPushButton *deleteExceptionButton = new QPushButton( i18n("Delete"), box ); 403 QPushButton *deleteExceptionButton = new QPushButton( i18n("Delete"), box );
404 boxLayout->addWidget( deleteExceptionButton, 3, 0 ); 404 boxLayout->addWidget( deleteExceptionButton, 3, 0 );
405 405
406 mExceptionList = new QListBox( box ); 406 mExceptionList = new QListBox( box );
407 boxLayout->addMultiCellWidget( mExceptionList, 0, 3, 1, 1 ); 407 boxLayout->addMultiCellWidget( mExceptionList, 0, 3, 1, 1 );
408 408
409 boxLayout->setRowStretch( 4, 1 ); 409 boxLayout->setRowStretch( 4, 1 );
410 boxLayout->setColStretch( 1, 3 ); 410 boxLayout->setColStretch( 1, 3 );
411 411
412 connect( addExceptionButton, SIGNAL( clicked() ), 412 connect( addExceptionButton, SIGNAL( clicked() ),
413 SLOT( addException() ) ); 413 SLOT( addException() ) );
414 connect( changeExceptionButton, SIGNAL( clicked() ), 414 connect( changeExceptionButton, SIGNAL( clicked() ),
415 SLOT( changeException() ) ); 415 SLOT( changeException() ) );
416 connect( deleteExceptionButton, SIGNAL( clicked() ), 416 connect( deleteExceptionButton, SIGNAL( clicked() ),
417 SLOT( deleteException() ) ); 417 SLOT( deleteException() ) );
418 if ( QApplication::desktop()->width() < 480 ) { 418 if ( QApplication::desktop()->width() < 480 ) {
419 setMinimumWidth( 220 ); 419 setMinimumWidth( 220 );
420 } else { 420 } else {
421 setMinimumWidth( 440 ); 421 setMinimumWidth( 440 );
422 mExceptionDateEdit->setMinimumWidth( 200 ); 422 mExceptionDateEdit->setMinimumWidth( 200 );
423 } 423 }
424} 424}
425 425
426void ExceptionsWidget::setDefaults( const QDateTime &from ) 426void ExceptionsWidget::setDefaults( const QDateTime &from )
427{ 427{
428 mExceptionDateEdit->setDate( from.date() ); 428 mExceptionDateEdit->setDate( from.date() );
429} 429}
430 430
431void ExceptionsWidget::addException() 431void ExceptionsWidget::addException()
432{ 432{
433 QDate date = mExceptionDateEdit->date(); 433 QDate date = mExceptionDateEdit->date();
434 QString dateStr = KGlobal::locale()->formatDate( date ); 434 QString dateStr = KGlobal::locale()->formatDate( date );
435 if( !mExceptionList->findItem( dateStr ) ) { 435 if( !mExceptionList->findItem( dateStr ) ) {
436 mExceptionDates.append( date ); 436 mExceptionDates.append( date );
437 mExceptionList->insertItem( dateStr ); 437 mExceptionList->insertItem( dateStr );
438 } 438 }
439} 439}
440 440
441void ExceptionsWidget::changeException() 441void ExceptionsWidget::changeException()
442{ 442{
443 int pos = mExceptionList->currentItem(); 443 int pos = mExceptionList->currentItem();
444 if ( pos < 0 ) return; 444 if ( pos < 0 ) return;
445 445
446 QDate date = mExceptionDateEdit->date(); 446 QDate date = mExceptionDateEdit->date();
447 mExceptionDates[ pos ] = date; 447 mExceptionDates[ pos ] = date;
448 mExceptionList->changeItem( KGlobal::locale()->formatDate( date ), pos ); 448 mExceptionList->changeItem( KGlobal::locale()->formatDate( date ), pos );
449} 449}
450 450
451void ExceptionsWidget::deleteException() 451void ExceptionsWidget::deleteException()
452{ 452{
453 int pos = mExceptionList->currentItem(); 453 int pos = mExceptionList->currentItem();
454 if ( pos < 0 ) return; 454 if ( pos < 0 ) return;
455 455
456 mExceptionDates.remove( mExceptionDates.at( pos ) ); 456 mExceptionDates.remove( mExceptionDates.at( pos ) );
457 mExceptionList->removeItem( pos ); 457 mExceptionList->removeItem( pos );
458} 458}
459 459
460void ExceptionsWidget::setDates( const DateList &dates ) 460void ExceptionsWidget::setDates( const DateList &dates )
461{ 461{
462 mExceptionList->clear(); 462 mExceptionList->clear();
463 mExceptionDates.clear(); 463 mExceptionDates.clear();
464 DateList::ConstIterator dit; 464 DateList::ConstIterator dit;
465 for ( dit = dates.begin(); dit != dates.end(); ++dit ) { 465 for ( dit = dates.begin(); dit != dates.end(); ++dit ) {
466 mExceptionList->insertItem( KGlobal::locale()->formatDate(* dit ) ); 466 mExceptionList->insertItem( KGlobal::locale()->formatDate(* dit ) );
467 mExceptionDates.append( *dit ); 467 mExceptionDates.append( *dit );
468 } 468 }
469} 469}
470 470
471DateList ExceptionsWidget::dates() 471DateList ExceptionsWidget::dates()
472{ 472{
473 return mExceptionDates; 473 return mExceptionDates;
474} 474}
475 475
476///////////////////////// ExceptionsDialog /////////////////////////// 476///////////////////////// ExceptionsDialog ///////////////////////////
477 477
478ExceptionsDialog::ExceptionsDialog( QWidget *parent, const char *name ) : 478ExceptionsDialog::ExceptionsDialog( QWidget *parent, const char *name ) :
479 KDialogBase( parent, name, true, i18n("Edit exceptions"), Ok|Cancel ) 479 KDialogBase( parent, name, true, i18n("Edit exceptions"), Ok|Cancel )
480{ 480{
481 mExceptions = new ExceptionsWidget( this ); 481 mExceptions = new ExceptionsWidget( this );
482 setMainWidget( mExceptions ); 482 setMainWidget( mExceptions );
483 resize(220,10); 483 resize(220,10);
484} 484}
485 485
486void ExceptionsDialog::setDefaults( const QDateTime &from ) 486void ExceptionsDialog::setDefaults( const QDateTime &from )
487{ 487{
488 mExceptions->setDefaults( from ); 488 mExceptions->setDefaults( from );
489} 489}
490 490
491void ExceptionsDialog::setDates( const DateList &dates ) 491void ExceptionsDialog::setDates( const DateList &dates )
492{ 492{
493 mExceptions->setDates( dates ); 493 mExceptions->setDates( dates );
494} 494}
495 495
496DateList ExceptionsDialog::dates() 496DateList ExceptionsDialog::dates()
497{ 497{
498 return mExceptions->dates(); 498 return mExceptions->dates();
499} 499}
500 500
501///////////////////////// RecurrenceRangeWidget /////////////////////////// 501///////////////////////// RecurrenceRangeWidget ///////////////////////////
502 502
503RecurrenceRangeWidget::RecurrenceRangeWidget( QWidget *parent, 503RecurrenceRangeWidget::RecurrenceRangeWidget( QWidget *parent,
504 const char *name ) 504 const char *name )
505 : QWidget( parent, name ) 505 : QWidget( parent, name )
506{ 506{
507 QBoxLayout *topLayout = new QVBoxLayout( this ); 507 QBoxLayout *topLayout = new QVBoxLayout( this );
508 508
509 mRangeGroupBox = new QGroupBox( 1, Horizontal, i18n("Recurrence Range"), 509 mRangeGroupBox = new QGroupBox( 1, Horizontal, i18n("Recurrence Range"),
510 this ); 510 this );
511 topLayout->addWidget( mRangeGroupBox ); 511 topLayout->addWidget( mRangeGroupBox );
512 512
513 QWidget *rangeBox = new QWidget( mRangeGroupBox ); 513 QWidget *rangeBox = new QWidget( mRangeGroupBox );
514 QVBoxLayout *rangeLayout = new QVBoxLayout( rangeBox ); 514 QVBoxLayout *rangeLayout = new QVBoxLayout( rangeBox );
515 rangeLayout->setSpacing( KDialog::spacingHint() ); 515 rangeLayout->setSpacing( KDialog::spacingHint() );
516 rangeLayout->setMargin( KDialog::marginHintSmall() ); 516 rangeLayout->setMargin( KDialog::marginHintSmall() );
517 517
518 mStartDateLabel = new QLabel( i18n("Begin on:"), rangeBox ); 518 mStartDateLabel = new QLabel( i18n("Begin on:"), rangeBox );
519 rangeLayout->addWidget( mStartDateLabel ); 519 rangeLayout->addWidget( mStartDateLabel );
520 520
521 QButtonGroup *rangeButtonGroup = new QButtonGroup; 521 QButtonGroup *rangeButtonGroup = new QButtonGroup;
522 522
523 mNoEndDateButton = new QRadioButton( i18n("No ending date"), rangeBox ); 523 mNoEndDateButton = new QRadioButton( i18n("No ending date"), rangeBox );
524 rangeButtonGroup->insert( mNoEndDateButton ); 524 rangeButtonGroup->insert( mNoEndDateButton );
525 rangeLayout->addWidget( mNoEndDateButton ); 525 rangeLayout->addWidget( mNoEndDateButton );
526 526
527 QBoxLayout *durationLayout = new QHBoxLayout( rangeLayout ); 527 QBoxLayout *durationLayout = new QHBoxLayout( rangeLayout );
528 durationLayout->setSpacing( KDialog::spacingHint() ); 528 durationLayout->setSpacing( KDialog::spacingHint() );
529 529
530 mEndDurationButton = new QRadioButton( i18n("End after"), rangeBox ); 530 mEndDurationButton = new QRadioButton( i18n("End after"), rangeBox );
531 rangeButtonGroup->insert( mEndDurationButton ); 531 rangeButtonGroup->insert( mEndDurationButton );
532 durationLayout->addWidget( mEndDurationButton ); 532 durationLayout->addWidget( mEndDurationButton );
533 533
534 mEndDurationEdit = new QSpinBox( 1, 9999, 1, rangeBox ); 534 mEndDurationEdit = new QSpinBox( 1, 9999, 1, rangeBox );
535 durationLayout->addWidget( mEndDurationEdit ); 535 durationLayout->addWidget( mEndDurationEdit );
536 536
537 QLabel *endDurationLabel = new QLabel( i18n("occurrence(s)"), rangeBox ); 537 QLabel *endDurationLabel = new QLabel( i18n("occurrence(s)"), rangeBox );
538 durationLayout ->addWidget( endDurationLabel ); 538 durationLayout ->addWidget( endDurationLabel );
539 539
540 QBoxLayout *endDateLayout = new QHBoxLayout( rangeLayout ); 540 QBoxLayout *endDateLayout = new QHBoxLayout( rangeLayout );
541 endDateLayout->setSpacing( KDialog::spacingHint() ); 541 endDateLayout->setSpacing( KDialog::spacingHint() );
542 542
543 mEndDateButton = new QRadioButton( i18n("End by:"), rangeBox ); 543 mEndDateButton = new QRadioButton( i18n("End by:"), rangeBox );
544 rangeButtonGroup->insert( mEndDateButton ); 544 rangeButtonGroup->insert( mEndDateButton );
545 endDateLayout->addWidget( mEndDateButton ); 545 endDateLayout->addWidget( mEndDateButton );
546 546
547 mEndDateEdit = new KDateEdit( rangeBox ); 547 mEndDateEdit = new KDateEdit( rangeBox );
548 endDateLayout->addWidget( mEndDateEdit ); 548 endDateLayout->addWidget( mEndDateEdit );
549 549
550 //endDateLayout->addStretch( 1 ); 550 //endDateLayout->addStretch( 1 );
551 551
552 connect( mNoEndDateButton, SIGNAL( toggled( bool ) ), 552 connect( mNoEndDateButton, SIGNAL( toggled( bool ) ),
553 SLOT( showCurrentRange() ) ); 553 SLOT( showCurrentRange() ) );
554 connect( mEndDurationButton, SIGNAL( toggled( bool ) ), 554 connect( mEndDurationButton, SIGNAL( toggled( bool ) ),
555 SLOT( showCurrentRange() ) ); 555 SLOT( showCurrentRange() ) );
556 connect( mEndDateButton, SIGNAL( toggled( bool ) ), 556 connect( mEndDateButton, SIGNAL( toggled( bool ) ),
557 SLOT( showCurrentRange() ) ); 557 SLOT( showCurrentRange() ) );
558} 558}
559 559
560void RecurrenceRangeWidget::setDefaults( const QDateTime &from ) 560void RecurrenceRangeWidget::setDefaults( const QDateTime &from )
561{ 561{
562 mNoEndDateButton->setChecked( true ); 562 mNoEndDateButton->setChecked( true );
563 563
564 setDateTimes( from ); 564 setDateTimes( from );
565 mEndDateEdit->setDate( from.date() ); 565 mEndDateEdit->setDate( from.date() );
566} 566}
567 567
568void RecurrenceRangeWidget::setDuration( int duration ) 568void RecurrenceRangeWidget::setDuration( int duration )
569{ 569{
570 if ( duration == -1 ) { 570 if ( duration == -1 ) {
571 mNoEndDateButton->setChecked( true ); 571 mNoEndDateButton->setChecked( true );
572 } else if ( duration == 0 ) { 572 } else if ( duration == 0 ) {
573 mEndDateButton->setChecked( true ); 573 mEndDateButton->setChecked( true );
574 } else { 574 } else {
575 mEndDurationButton->setChecked( true ); 575 mEndDurationButton->setChecked( true );
576 mEndDurationEdit->setValue( duration ); 576 mEndDurationEdit->setValue( duration );
577 } 577 }
578} 578}
579 579
580int RecurrenceRangeWidget::duration() 580int RecurrenceRangeWidget::duration()
581{ 581{
582 if ( mNoEndDateButton->isChecked() ) { 582 if ( mNoEndDateButton->isChecked() ) {
583 return -1; 583 return -1;
584 } else if ( mEndDurationButton->isChecked() ) { 584 } else if ( mEndDurationButton->isChecked() ) {
585 return mEndDurationEdit->value(); 585 return mEndDurationEdit->value();
586 } else { 586 } else {
587 return 0; 587 return 0;
588 } 588 }
589} 589}
590 590
591void RecurrenceRangeWidget::setEndDate( const QDate &date ) 591void RecurrenceRangeWidget::setEndDate( const QDate &date )
592{ 592{
593 mEndDateEdit->setDate( date ); 593 mEndDateEdit->setDate( date );
594} 594}
595 595
596QDate RecurrenceRangeWidget::endDate() 596QDate RecurrenceRangeWidget::endDate()
597{ 597{
598 return mEndDateEdit->date(); 598 return mEndDateEdit->date();
599} 599}
600 600
601void RecurrenceRangeWidget::showCurrentRange() 601void RecurrenceRangeWidget::showCurrentRange()
602{ 602{
603 mEndDurationEdit->setEnabled( mEndDurationButton->isChecked() ); 603 mEndDurationEdit->setEnabled( mEndDurationButton->isChecked() );
604 mEndDateEdit->setEnabled( mEndDateButton->isChecked() ); 604 mEndDateEdit->setEnabled( mEndDateButton->isChecked() );
605} 605}
606 606
607void RecurrenceRangeWidget::setDateTimes( const QDateTime &start, 607void RecurrenceRangeWidget::setDateTimes( const QDateTime &start,
608 const QDateTime & ) 608 const QDateTime & )
609{ 609{
610 mStartDateLabel->setText( i18n("Start date: %1") 610 mStartDateLabel->setText( i18n("Start date: %1")
611 .arg( KGlobal::locale()->formatDate( start.date() ) ) ); 611 .arg( KGlobal::locale()->formatDate( start.date() ) ) );
612 612
613 if(!mEndDateButton->isChecked()) 613 if(!mEndDateButton->isChecked())
614 mEndDateEdit->setDate( start.date() ); 614 mEndDateEdit->setDate( start.date() );
615} 615}
616 616
617///////////////////////// RecurrenceRangeDialog /////////////////////////// 617///////////////////////// RecurrenceRangeDialog ///////////////////////////
618 618
619RecurrenceRangeDialog::RecurrenceRangeDialog( QWidget *parent, 619RecurrenceRangeDialog::RecurrenceRangeDialog( QWidget *parent,
620 const char *name ) : 620 const char *name ) :
621 KDialogBase( parent, name, true, i18n("Edit Recurrence Range"), Ok|Cancel ) 621 KDialogBase( parent, name, true, i18n("Edit Recurrence Range"), Ok|Cancel )
622{ 622{
623 mRecurrenceRangeWidget = new RecurrenceRangeWidget( this ); 623 mRecurrenceRangeWidget = new RecurrenceRangeWidget( this );
624 setMainWidget( mRecurrenceRangeWidget ); 624 setMainWidget( mRecurrenceRangeWidget );
625} 625}
626 626
627void RecurrenceRangeDialog::setDefaults( const QDateTime &from ) 627void RecurrenceRangeDialog::setDefaults( const QDateTime &from )
628{ 628{
629 mRecurrenceRangeWidget->setDefaults( from ); 629 mRecurrenceRangeWidget->setDefaults( from );
630} 630}
631 631
632void RecurrenceRangeDialog::setDuration( int duration ) 632void RecurrenceRangeDialog::setDuration( int duration )
633{ 633{
634 mRecurrenceRangeWidget->setDuration( duration ); 634 mRecurrenceRangeWidget->setDuration( duration );
635} 635}
636 636
637int RecurrenceRangeDialog::duration() 637int RecurrenceRangeDialog::duration()
638{ 638{
639 return mRecurrenceRangeWidget->duration(); 639 return mRecurrenceRangeWidget->duration();
640} 640}
641 641
642void RecurrenceRangeDialog::setEndDate( const QDate &date ) 642void RecurrenceRangeDialog::setEndDate( const QDate &date )
643{ 643{
644 mRecurrenceRangeWidget->setEndDate( date ); 644 mRecurrenceRangeWidget->setEndDate( date );
645} 645}
646 646
647QDate RecurrenceRangeDialog::endDate() 647QDate RecurrenceRangeDialog::endDate()
648{ 648{
649 return mRecurrenceRangeWidget->endDate(); 649 return mRecurrenceRangeWidget->endDate();
650} 650}
651 651
652void RecurrenceRangeDialog::setDateTimes( const QDateTime &start, 652void RecurrenceRangeDialog::setDateTimes( const QDateTime &start,
653 const QDateTime &end ) 653 const QDateTime &end )
654{ 654{
655 mRecurrenceRangeWidget->setDateTimes( start, end ); 655 mRecurrenceRangeWidget->setDateTimes( start, end );
656} 656}
657 657
658//////////////////////////// RecurrenceChooser //////////////////////// 658//////////////////////////// RecurrenceChooser ////////////////////////
659 659
660RecurrenceChooser::RecurrenceChooser( QWidget *parent, const char *name ) : 660RecurrenceChooser::RecurrenceChooser( QWidget *parent, const char *name ) :
661 QWidget( parent, name ) 661 QWidget( parent, name )
662{ 662{
663 QBoxLayout *topLayout = new QVBoxLayout( this ); 663 QBoxLayout *topLayout = new QVBoxLayout( this );
664 664
665 mTypeCombo = new QComboBox( this ); 665 mTypeCombo = new QComboBox( this );
666 mTypeCombo->insertItem( i18n("Daily") ); 666 mTypeCombo->insertItem( i18n("Daily") );
667 mTypeCombo->insertItem( i18n("Weekly") ); 667 mTypeCombo->insertItem( i18n("Weekly") );
668 mTypeCombo->insertItem( i18n("Monthly") ); 668 mTypeCombo->insertItem( i18n("Monthly") );
669 mTypeCombo->insertItem( i18n("Yearly") ); 669 mTypeCombo->insertItem( i18n("Yearly") );
670 670
671 topLayout->addWidget( mTypeCombo ); 671 topLayout->addWidget( mTypeCombo );
672 672
673 connect( mTypeCombo, SIGNAL( activated( int ) ), SLOT( emitChoice() ) ); 673 connect( mTypeCombo, SIGNAL( activated( int ) ), SLOT( emitChoice() ) );
674 674
675} 675}
676 676
677int RecurrenceChooser::type() 677int RecurrenceChooser::type()
678{ 678{
679 if ( mTypeCombo ) { 679 if ( mTypeCombo ) {
680 return mTypeCombo->currentItem(); 680 return mTypeCombo->currentItem();
681 } else { 681 } else {
682 if ( mDailyButton->isChecked() ) return Daily; 682 if ( mDailyButton->isChecked() ) return Daily;
683 else if ( mWeeklyButton->isChecked() ) return Weekly; 683 else if ( mWeeklyButton->isChecked() ) return Weekly;
684 else if ( mMonthlyButton->isChecked() ) return Monthly; 684 else if ( mMonthlyButton->isChecked() ) return Monthly;
685 else return Yearly; 685 else return Yearly;
686 } 686 }
687} 687}
688 688
689void RecurrenceChooser::setType( int type ) 689void RecurrenceChooser::setType( int type )
690{ 690{
691 if ( mTypeCombo ) { 691 if ( mTypeCombo ) {
692 mTypeCombo->setCurrentItem( type ); 692 mTypeCombo->setCurrentItem( type );
693 } else { 693 } else {
694 switch ( type ) { 694 switch ( type ) {
695 case Daily: 695 case Daily:
696 mDailyButton->setChecked( true ); 696 mDailyButton->setChecked( true );
697 break; 697 break;
698 case Weekly: 698 case Weekly:
699 mWeeklyButton->setChecked( true ); 699 mWeeklyButton->setChecked( true );
700 break; 700 break;
701 case Monthly: 701 case Monthly:
702 mMonthlyButton->setChecked( true ); 702 mMonthlyButton->setChecked( true );
703 break; 703 break;
704 case Yearly: 704 case Yearly:
705 default: 705 default:
706 mYearlyButton->setChecked( true ); 706 mYearlyButton->setChecked( true );
707 break; 707 break;
708 } 708 }
709 } 709 }
710} 710}
711 711
712void RecurrenceChooser::emitChoice() 712void RecurrenceChooser::emitChoice()
713{ 713{
714 emit chosen ( type() ); 714 emit chosen ( type() );
715} 715}
716 716
717/////////////////////////////// Main Widget ///////////////////////////// 717/////////////////////////////// Main Widget /////////////////////////////
718 718
719KOEditorRecurrence::KOEditorRecurrence( QWidget* parent, const char *name ) : 719KOEditorRecurrence::KOEditorRecurrence( QWidget* parent, const char *name ) :
720 QWidget( parent, name ) 720 QWidget( parent, name )
721{ 721{
722 QGridLayout *topLayout = new QGridLayout( this, 2,2 ); 722 QGridLayout *topLayout = new QGridLayout( this, 2,2 );
723 topLayout->setSpacing( KDialog::spacingHint() ); 723 topLayout->setSpacing( KDialog::spacingHint() );
724 topLayout->setMargin( KDialog::marginHintSmall() ); 724 topLayout->setMargin( KDialog::marginHintSmall() );
725 725
726 mEnabledCheck = new QCheckBox( i18n("Enable Recurrence"), this ); 726 mEnabledCheck = new QCheckBox( i18n("Enable Recurrence"), this );
727 connect( mEnabledCheck, SIGNAL( toggled( bool ) ), 727 connect( mEnabledCheck, SIGNAL( toggled( bool ) ),
728 SLOT( setEnabled( bool ) ) ); 728 SLOT( setEnabled( bool ) ) );
729 topLayout->addMultiCellWidget( mEnabledCheck, 0, 0, 0, 1 ); 729 topLayout->addMultiCellWidget( mEnabledCheck, 0, 0, 0, 1 );
730 730
731 731
732 mTimeGroupBox = new QGroupBox( 1, Horizontal, i18n("Time"), 732 mTimeGroupBox = new QGroupBox( 1, Horizontal, i18n("Time"),
733 this ); 733 this );
734 topLayout->addMultiCellWidget( mTimeGroupBox, 1, 1 , 0 , 1 ); 734 topLayout->addMultiCellWidget( mTimeGroupBox, 1, 1 , 0 , 1 );
735 735
736 if ( QApplication::desktop()->width() <= 640 ) { 736 if ( QApplication::desktop()->width() <= 640 ) {
737 mTimeGroupBox->hide(); 737 mTimeGroupBox->hide();
738 } 738 }
739 739
740// QFrame *timeFrame = new QFrame( mTimeGroupBox ); 740// QFrame *timeFrame = new QFrame( mTimeGroupBox );
741// QBoxLayout *layoutTimeFrame = new QHBoxLayout( timeFrame ); 741// QBoxLayout *layoutTimeFrame = new QHBoxLayout( timeFrame );
742// layoutTimeFrame->setSpacing( KDialog::spacingHint() ); 742// layoutTimeFrame->setSpacing( KDialog::spacingHint() );
743 743
744 mDateTimeLabel = new QLabel( mTimeGroupBox ); 744 mDateTimeLabel = new QLabel( mTimeGroupBox );
745// mDateTimeLabel = new QLabel( timeFrame ); 745// mDateTimeLabel = new QLabel( timeFrame );
746// layoutTimeFrame->addWidget( mDateTimeLabel ); 746// layoutTimeFrame->addWidget( mDateTimeLabel );
747 //mTimeGroupBox->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) ); 747 //mTimeGroupBox->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) );
748 //mDateTimeLabel->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum) ); 748 //mDateTimeLabel->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum) );
749 mRuleBox = new QGroupBox( 1, Horizontal, i18n("Recurrence Rule"), this ); 749 mRuleBox = new QGroupBox( 1, Horizontal, i18n("Recurrence Rule"), this );
750 topLayout->addMultiCellWidget( mRuleBox, 2, 2, 0, 1 ); 750 topLayout->addMultiCellWidget( mRuleBox, 2, 2, 0, 1 );
751 mRecurrenceChooser = new RecurrenceChooser( mRuleBox ); 751 mRecurrenceChooser = new RecurrenceChooser( mRuleBox );
752 connect( mRecurrenceChooser, SIGNAL( chosen( int ) ), 752 connect( mRecurrenceChooser, SIGNAL( chosen( int ) ),
753 SLOT( showCurrentRule( int ) ) ); 753 SLOT( showCurrentRule( int ) ) );
754 754
755 755
756 mRuleStack = new QWidgetStack( mRuleBox ); 756 mRuleStack = new QWidgetStack( mRuleBox );
757 757
758 mDaily = new RecurDaily( mRuleStack ); 758 mDaily = new RecurDaily( mRuleStack );
759 mRuleStack->addWidget( mDaily, 0 ); 759 mRuleStack->addWidget( mDaily, 0 );
760 760
761 mWeekly = new RecurWeekly( mRuleStack ); 761 mWeekly = new RecurWeekly( mRuleStack );
762 mRuleStack->addWidget( mWeekly, 0 ); 762 mRuleStack->addWidget( mWeekly, 0 );
763 763
764 mMonthly = new RecurMonthly( mRuleStack ); 764 mMonthly = new RecurMonthly( mRuleStack );
765 mRuleStack->addWidget( mMonthly, 0 ); 765 mRuleStack->addWidget( mMonthly, 0 );
766 766
767 mYearly = new RecurYearly( mRuleStack ); 767 mYearly = new RecurYearly( mRuleStack );
768 mRuleStack->addWidget( mYearly, 0 ); 768 mRuleStack->addWidget( mYearly, 0 );
769 769
770 showCurrentRule( mRecurrenceChooser->type() ); 770 showCurrentRule( mRecurrenceChooser->type() );
771 mRecurrenceRangeWidget = 0; 771 mRecurrenceRangeWidget = 0;
772 mRecurrenceRangeDialog = new RecurrenceRangeDialog( this ); 772 mRecurrenceRangeDialog = new RecurrenceRangeDialog( this );
773 mRecurrenceRange = mRecurrenceRangeDialog; 773 mRecurrenceRange = mRecurrenceRangeDialog;
774 mRecurrenceRangeButton = new QPushButton( i18n("Recurrence Range..."), 774 mRecurrenceRangeButton = new QPushButton( i18n("Recurrence Range..."),
775 this ); 775 this );
776 776
777 connect( mRecurrenceRangeButton, SIGNAL( clicked() ), 777 connect( mRecurrenceRangeButton, SIGNAL( clicked() ),
778 SLOT( showRecurrenceRangeDialog() ) ); 778 SLOT( showRecurrenceRangeDialog() ) );
779 779
780 mExceptionsWidget = 0; 780 mExceptionsWidget = 0;
781 mExceptionsDialog = new ExceptionsDialog( this ); 781 mExceptionsDialog = new ExceptionsDialog( this );
782 mExceptions = mExceptionsDialog; 782 mExceptions = mExceptionsDialog;
783 mExceptionsButton = new QPushButton( i18n("Exceptions..."), this ); 783 mExceptionsButton = new QPushButton( i18n("Exceptions..."), this );
784 if ( QApplication::desktop()->width() < 320 ) { 784 if ( QApplication::desktop()->width() < 320 ) {
785 topLayout->addMultiCellWidget( mRecurrenceRangeButton, 3, 3, 0, 1 ); 785 topLayout->addMultiCellWidget( mRecurrenceRangeButton, 3, 3, 0, 1 );
786 topLayout->addMultiCellWidget( mExceptionsButton, 4, 4, 0, 1 ); 786 topLayout->addMultiCellWidget( mExceptionsButton, 4, 4, 0, 1 );
787 } else { 787 } else {
788 topLayout->addWidget( mRecurrenceRangeButton, 3, 0 ); 788 topLayout->addWidget( mRecurrenceRangeButton, 3, 0 );
789 topLayout->addWidget( mExceptionsButton, 3, 1 ); 789 topLayout->addWidget( mExceptionsButton, 3, 1 );
790 } 790 }
791 connect( mExceptionsButton, SIGNAL( clicked() ), 791 connect( mExceptionsButton, SIGNAL( clicked() ),
792 SLOT( showExceptionsDialog() ) ); 792 SLOT( showExceptionsDialog() ) );
793} 793}
794 794
795KOEditorRecurrence::~KOEditorRecurrence() 795KOEditorRecurrence::~KOEditorRecurrence()
796{ 796{
797} 797}
798 798
799void KOEditorRecurrence::setEnabled( bool enabled ) 799void KOEditorRecurrence::setEnabled( bool enabled )
800{ 800{
801// kdDebug() << "KOEditorRecurrence::setEnabled(): " << (enabled ? "on" : "off") << endl; 801// kdDebug() << "KOEditorRecurrence::setEnabled(): " << (enabled ? "on" : "off") << endl;
802 802
803 mTimeGroupBox->setEnabled( enabled ); 803 mTimeGroupBox->setEnabled( enabled );
804 if ( mRecurrenceRangeWidget ) mRecurrenceRangeWidget->setEnabled( enabled ); 804 if ( mRecurrenceRangeWidget ) mRecurrenceRangeWidget->setEnabled( enabled );
805 if ( mRecurrenceRangeButton ) mRecurrenceRangeButton->setEnabled( enabled ); 805 if ( mRecurrenceRangeButton ) mRecurrenceRangeButton->setEnabled( enabled );
806 if ( mExceptionsWidget ) mExceptionsWidget->setEnabled( enabled ); 806 if ( mExceptionsWidget ) mExceptionsWidget->setEnabled( enabled );
807 if ( mExceptionsButton ) mExceptionsButton->setEnabled( enabled ); 807 if ( mExceptionsButton ) mExceptionsButton->setEnabled( enabled );
808 mRuleBox->setEnabled( enabled ); 808 mRuleBox->setEnabled( enabled );
809} 809}
810 810
811void KOEditorRecurrence::showCurrentRule( int current ) 811void KOEditorRecurrence::showCurrentRule( int current )
812{ 812{
813 switch ( current ) { 813 switch ( current ) {
814 case Daily: 814 case Daily:
815 mRuleStack->raiseWidget( mDaily ); 815 mRuleStack->raiseWidget( mDaily );
816 break; 816 break;
817 case Weekly: 817 case Weekly:
818 mRuleStack->raiseWidget( mWeekly ); 818 mRuleStack->raiseWidget( mWeekly );
819 break; 819 break;
820 case Monthly: 820 case Monthly:
821 mRuleStack->raiseWidget( mMonthly ); 821 mRuleStack->raiseWidget( mMonthly );
822 break; 822 break;
823 default: 823 default:
824 case Yearly: 824 case Yearly:
825 mRuleStack->raiseWidget( mYearly ); 825 mRuleStack->raiseWidget( mYearly );
826 break; 826 break;
827 } 827 }
828} 828}
829 829
830void KOEditorRecurrence::setDateTimes( QDateTime start, QDateTime end ) 830void KOEditorRecurrence::setDateTimes( QDateTime start, QDateTime end )
831{ 831{
832// kdDebug() << "KOEditorRecurrence::setDateTimes" << endl; 832// kdDebug() << "KOEditorRecurrence::setDateTimes" << endl;
833 833
834 mRecurrenceRange->setDateTimes( start, end ); 834 mRecurrenceRange->setDateTimes( start, end );
835 mExceptions->setDefaults( end ); 835 mExceptions->setDefaults( end );
836 836
837} 837}
838 838
839void KOEditorRecurrence::setDefaults( QDateTime from, QDateTime to, bool ) 839void KOEditorRecurrence::setDefaults( QDateTime from, QDateTime to, bool )
840{ 840{
841 841
842 // qDebug("KOEditorRecurrence::setDefaults %s %s ",from.toString().latin1(),to.toString().latin1() ); 842 // qDebug("KOEditorRecurrence::setDefaults %s %s ",from.toString().latin1(),to.toString().latin1() );
843 setDateTimes( from, to ); 843 setDateTimes( from, to );
844 844
845 bool enabled = false; 845 bool enabled = false;
846 mEnabledCheck->setChecked( enabled ); 846 mEnabledCheck->setChecked( enabled );
847 setEnabled( enabled ); 847 setEnabled( enabled );
848 848
849 mExceptions->setDefaults( to ); 849 mExceptions->setDefaults( to );
850 mRecurrenceRange->setDefaults( to ); 850 mRecurrenceRange->setDefaults( to );
851 851
852 mRecurrenceChooser->setType( RecurrenceChooser::Weekly ); 852 mRecurrenceChooser->setType( RecurrenceChooser::Weekly );
853 showCurrentRule( mRecurrenceChooser->type() ); 853 showCurrentRule( mRecurrenceChooser->type() );
854 854
855 mDaily->setFrequency( 1 ); 855 mDaily->setFrequency( 1 );
856 856
857 mWeekly->setFrequency( 1 ); 857 mWeekly->setFrequency( 1 );
858 QBitArray days( 7 ); 858 QBitArray days( 7 );
859 days.fill( 0 ); 859 days.fill( 0 );
860 days.setBit( from.date().dayOfWeek()- 1); 860 days.setBit( from.date().dayOfWeek()- 1);
861 mWeekly->setDays( days ); 861 mWeekly->setDays( days );
862 mMonthly->setFrequency( 1 ); 862 mMonthly->setFrequency( 1 );
863 mMonthly->setByPos((from.date().day()/7), from.date().dayOfWeek()-1 ); 863 mMonthly->setByPos((from.date().day()/7), from.date().dayOfWeek()-1 );
864 mMonthly->setByDay( from.date().day()-1 ); 864 mMonthly->setByDay( from.date().day()-1 );
865 mYearly->setFrequency( 1 ); 865 mYearly->setFrequency( 1 );
866 mYearly->setByDay( from.date().dayOfYear() ); 866 mYearly->setByDay( from.date().dayOfYear() );
867 mYearly->setByMonth( from.date().month(), from.date().day() ); 867 mYearly->setByMonth( from.date().month(), from.date().day() );
868} 868}
869 869
870void KOEditorRecurrence::readEvent(Incidence *event) 870void KOEditorRecurrence::readEvent(Incidence *event)
871{ 871{
872 872
873 QDateTime dtEnd; 873 QDateTime dtEnd;
874 if ( event->type() == "Event" ) 874 if ( event->typeID() == eventID )
875 dtEnd = ((Event*)event)->dtEnd(); 875 dtEnd = ((Event*)event)->dtEnd();
876 else 876 else
877 dtEnd = ((Todo*)event)->dtDue(); 877 dtEnd = ((Todo*)event)->dtDue();
878 878
879 setDefaults( event->dtStart(), dtEnd, true ); 879 setDefaults( event->dtStart(), dtEnd, true );
880 QBitArray rDays( 7 ); 880 QBitArray rDays( 7 );
881 QPtrList<Recurrence::rMonthPos> rmp; 881 QPtrList<Recurrence::rMonthPos> rmp;
882 QPtrList<int> rmd; 882 QPtrList<int> rmd;
883 int day = 0; 883 int day = 0;
884 int count = 0; 884 int count = 0;
885 int month = 0; 885 int month = 0;
886 setDateTimes( event->dtStart(), dtEnd ); 886 setDateTimes( event->dtStart(), dtEnd );
887 887
888 Recurrence *r = event->recurrence(); 888 Recurrence *r = event->recurrence();
889 int f = r->frequency(); 889 int f = r->frequency();
890 890
891 int recurs = r->doesRecur(); 891 int recurs = r->doesRecur();
892 892
893 mEnabledCheck->setChecked( recurs ); 893 mEnabledCheck->setChecked( recurs );
894 setEnabled( recurs ); 894 setEnabled( recurs );
895 895
896 int recurrenceType = RecurrenceChooser::Weekly; 896 int recurrenceType = RecurrenceChooser::Weekly;
897 897
898 switch ( recurs ) { 898 switch ( recurs ) {
899 case Recurrence::rNone: 899 case Recurrence::rNone:
900 setDefaults( event->dtStart(), dtEnd, true ); 900 setDefaults( event->dtStart(), dtEnd, true );
901 break; 901 break;
902 case Recurrence::rDaily: 902 case Recurrence::rDaily:
903 recurrenceType = RecurrenceChooser::Daily; 903 recurrenceType = RecurrenceChooser::Daily;
904 mDaily->setFrequency( f ); 904 mDaily->setFrequency( f );
905 break; 905 break;
906 case Recurrence::rWeekly: 906 case Recurrence::rWeekly:
907 recurrenceType = RecurrenceChooser::Weekly; 907 recurrenceType = RecurrenceChooser::Weekly;
908 mWeekly->setFrequency( f ); 908 mWeekly->setFrequency( f );
909 mWeekly->setDays( r->days() ); 909 mWeekly->setDays( r->days() );
910 break; 910 break;
911 case Recurrence::rMonthlyPos: 911 case Recurrence::rMonthlyPos:
912 // we only handle one possibility in the list right now, 912 // we only handle one possibility in the list right now,
913 // so I have hardcoded calls with first(). If we make the GUI 913 // so I have hardcoded calls with first(). If we make the GUI
914 // more extended, this can be changed. 914 // more extended, this can be changed.
915 recurrenceType = RecurrenceChooser::Monthly; 915 recurrenceType = RecurrenceChooser::Monthly;
916 916
917 rmp = r->monthPositions(); 917 rmp = r->monthPositions();
918 if ( rmp.first()->negative ) 918 if ( rmp.first()->negative )
919 count = 5 - rmp.first()->rPos - 1; 919 count = 5 - rmp.first()->rPos - 1;
920 else 920 else
921 count = rmp.first()->rPos - 1; 921 count = rmp.first()->rPos - 1;
922 day = 0; 922 day = 0;
923 while ( !rmp.first()->rDays.testBit( day ) ) ++day; 923 while ( !rmp.first()->rDays.testBit( day ) ) ++day;
924 mMonthly->setByPos( count, day ); 924 mMonthly->setByPos( count, day );
925 925
926 mMonthly->setFrequency( f ); 926 mMonthly->setFrequency( f );
927 927
928 break; 928 break;
929 case Recurrence::rMonthlyDay: 929 case Recurrence::rMonthlyDay:
930 recurrenceType = RecurrenceChooser::Monthly; 930 recurrenceType = RecurrenceChooser::Monthly;
931 931
932 rmd = r->monthDays(); 932 rmd = r->monthDays();
933 day = *rmd.first() - 1; 933 day = *rmd.first() - 1;
934 mMonthly->setByDay( day ); 934 mMonthly->setByDay( day );
935 935
936 mMonthly->setFrequency( f ); 936 mMonthly->setFrequency( f );
937 937
938 break; 938 break;
939 case Recurrence::rYearlyMonth: 939 case Recurrence::rYearlyMonth:
940 { 940 {
941 recurrenceType = RecurrenceChooser::Yearly; 941 recurrenceType = RecurrenceChooser::Yearly;
942 //qDebug("Recurrence::rYearlyMonth: "); 942 //qDebug("Recurrence::rYearlyMonth: ");
943 day = event->dtStart().date().day(); 943 day = event->dtStart().date().day();
944 rmd = r->yearNums(); 944 rmd = r->yearNums();
945 if ( rmd.count() > 0 ) 945 if ( rmd.count() > 0 )
946 month = *rmd.first(); 946 month = *rmd.first();
947 else 947 else
948 month = event->dtStart().date().month() ; 948 month = event->dtStart().date().month() ;
949 mYearly->setByMonth( month, day ); 949 mYearly->setByMonth( month, day );
950#if 0 950#if 0
951 //qDebug("2day = %d ",day ); 951 //qDebug("2day = %d ",day );
952 QPtrList<Recurrence::rMonthPos> monthlist = r->yearMonthPositions(); 952 QPtrList<Recurrence::rMonthPos> monthlist = r->yearMonthPositions();
953 int month; 953 int month;
954 if ( !monthlist.isEmpty() ) { 954 if ( !monthlist.isEmpty() ) {
955 month = monthlist.first()->rPos ; 955 month = monthlist.first()->rPos ;
956 } else { 956 } else {
957 month = event->dtStart().date().month() ; 957 month = event->dtStart().date().month() ;
958 } 958 }
959 mYearly->setByMonth( day, month ); 959 mYearly->setByMonth( day, month );
960#endif 960#endif
961 mYearly->setFrequency( f ); 961 mYearly->setFrequency( f );
962 } 962 }
963 963
964 break; 964 break;
965 case Recurrence::rYearlyDay: 965 case Recurrence::rYearlyDay:
966 //qDebug("Recurrence::rYearlyDay: "); 966 //qDebug("Recurrence::rYearlyDay: ");
967 recurrenceType = RecurrenceChooser::Yearly; 967 recurrenceType = RecurrenceChooser::Yearly;
968 mYearly->setByDay( event->dtStart().date().dayOfYear() ); 968 mYearly->setByDay( event->dtStart().date().dayOfYear() );
969 mYearly->setFrequency( f ); 969 mYearly->setFrequency( f );
970 break; 970 break;
971 default: 971 default:
972 setDefaults( event->dtStart(), dtEnd, true ); 972 setDefaults( event->dtStart(), dtEnd, true );
973 break; 973 break;
974 } 974 }
975 975
976 mRecurrenceChooser->setType( recurrenceType ); 976 mRecurrenceChooser->setType( recurrenceType );
977 showCurrentRule( recurrenceType ); 977 showCurrentRule( recurrenceType );
978 978
979 mRecurrenceRange->setDateTimes( event->dtStart() ); 979 mRecurrenceRange->setDateTimes( event->dtStart() );
980 980
981 if ( r->doesRecur() ) { 981 if ( r->doesRecur() ) {
982 mRecurrenceRange->setDuration( r->duration() ); 982 mRecurrenceRange->setDuration( r->duration() );
983 if ( r->duration() == 0 ) 983 if ( r->duration() == 0 )
984 { 984 {
985 if ( r->endDate() < event->dtStart().date() ) 985 if ( r->endDate() < event->dtStart().date() )
986 mRecurrenceRange->setEndDate( event->dtStart().date() ); 986 mRecurrenceRange->setEndDate( event->dtStart().date() );
987 else 987 else
988 mRecurrenceRange->setEndDate( r->endDate() ); 988 mRecurrenceRange->setEndDate( r->endDate() );
989 } else 989 } else
990 mRecurrenceRange->setEndDate( event->dtStart().date() ); 990 mRecurrenceRange->setEndDate( event->dtStart().date() );
991 } 991 }
992 992
993 mExceptions->setDates( event->exDates() ); 993 mExceptions->setDates( event->exDates() );
994} 994}
995 995
996void KOEditorRecurrence::writeEvent( Incidence *event ) 996void KOEditorRecurrence::writeEvent( Incidence *event )
997{ 997{
998 Recurrence *r = event->recurrence(); 998 Recurrence *r = event->recurrence();
999 999
1000 // clear out any old settings; 1000 // clear out any old settings;
1001 r->unsetRecurs(); 1001 r->unsetRecurs();
1002 1002
1003 if ( mEnabledCheck->isChecked() ) { 1003 if ( mEnabledCheck->isChecked() ) {
1004 int duration = mRecurrenceRange->duration(); 1004 int duration = mRecurrenceRange->duration();
1005 QDate endDate; 1005 QDate endDate;
1006 if ( duration == 0 ) endDate = mRecurrenceRange->endDate(); 1006 if ( duration == 0 ) endDate = mRecurrenceRange->endDate();
1007 1007
1008 int recurrenceType = mRecurrenceChooser->type(); 1008 int recurrenceType = mRecurrenceChooser->type();
1009 1009
1010 if ( recurrenceType == RecurrenceChooser::Daily ) { 1010 if ( recurrenceType == RecurrenceChooser::Daily ) {
1011 int freq = mDaily->frequency(); 1011 int freq = mDaily->frequency();
1012 if ( duration != 0 ) r->setDaily( freq, duration ); 1012 if ( duration != 0 ) r->setDaily( freq, duration );
1013 else r->setDaily( freq, endDate ); 1013 else r->setDaily( freq, endDate );
1014 } else if ( recurrenceType == RecurrenceChooser::Weekly ) { 1014 } else if ( recurrenceType == RecurrenceChooser::Weekly ) {
1015 int freq = mWeekly->frequency(); 1015 int freq = mWeekly->frequency();
1016 QBitArray days = mWeekly->days(); 1016 QBitArray days = mWeekly->days();
1017 int j; 1017 int j;
1018 bool found = false; 1018 bool found = false;
1019 for (j = 0; j < 7 ; ++j ) { 1019 for (j = 0; j < 7 ; ++j ) {
1020 found |=days.at(j); 1020 found |=days.at(j);
1021 } 1021 }
1022 if ( !found ) { 1022 if ( !found ) {
1023 days.setBit( event->dtStart().date().dayOfWeek()-1); 1023 days.setBit( event->dtStart().date().dayOfWeek()-1);
1024 //qDebug("bit set %d ", event->dtStart().date().dayOfWeek()-1); 1024 //qDebug("bit set %d ", event->dtStart().date().dayOfWeek()-1);
1025 } 1025 }
1026 if ( duration != 0 ) r->setWeekly( freq, days, duration ); 1026 if ( duration != 0 ) r->setWeekly( freq, days, duration );
1027 else r->setWeekly( freq, days, endDate ); 1027 else r->setWeekly( freq, days, endDate );
1028 } else if ( recurrenceType == RecurrenceChooser::Monthly ) { 1028 } else if ( recurrenceType == RecurrenceChooser::Monthly ) {
1029 int freq = mMonthly->frequency(); 1029 int freq = mMonthly->frequency();
1030 if ( mMonthly->byPos() ) { 1030 if ( mMonthly->byPos() ) {
1031 int pos = mMonthly->count(); 1031 int pos = mMonthly->count();
1032 1032
1033 QBitArray days( 7 ); 1033 QBitArray days( 7 );
1034 days.fill( false ); 1034 days.fill( false );
1035 1035
1036 days.setBit( mMonthly->weekday() ); 1036 days.setBit( mMonthly->weekday() );
1037 if ( duration != 0 ) 1037 if ( duration != 0 )
1038 r->setMonthly( Recurrence::rMonthlyPos, freq, duration ); 1038 r->setMonthly( Recurrence::rMonthlyPos, freq, duration );
1039 else 1039 else
1040 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 1040 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
1041 r->addMonthlyPos( pos, days ); 1041 r->addMonthlyPos( pos, days );
1042 } else { 1042 } else {
1043 // it's by day 1043 // it's by day
1044 int day = mMonthly->day(); 1044 int day = mMonthly->day();
1045 1045
1046 if ( duration != 0 ) { 1046 if ( duration != 0 ) {
1047 r->setMonthly( Recurrence::rMonthlyDay, freq, duration ); 1047 r->setMonthly( Recurrence::rMonthlyDay, freq, duration );
1048 } else { 1048 } else {
1049 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 1049 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
1050 } 1050 }
1051 r->addMonthlyDay( day ); 1051 r->addMonthlyDay( day );
1052 } 1052 }
1053 } else if ( recurrenceType == RecurrenceChooser::Yearly ) { 1053 } else if ( recurrenceType == RecurrenceChooser::Yearly ) {
1054 //qDebug("RecurrenceChooser::Yearly "); 1054 //qDebug("RecurrenceChooser::Yearly ");
1055 int freq = mYearly->frequency(); 1055 int freq = mYearly->frequency();
1056 if ( mYearly->byDay() ) { 1056 if ( mYearly->byDay() ) {
1057 if ( duration != 0 ) { 1057 if ( duration != 0 ) {
1058 r->setYearly( Recurrence::rYearlyDay, freq, duration ); 1058 r->setYearly( Recurrence::rYearlyDay, freq, duration );
1059 } else { 1059 } else {
1060 r->setYearly( Recurrence::rYearlyDay, freq, endDate ); 1060 r->setYearly( Recurrence::rYearlyDay, freq, endDate );
1061 } 1061 }
1062 r->addYearlyNum( event->dtStart().date().dayOfYear() ); 1062 r->addYearlyNum( event->dtStart().date().dayOfYear() );
1063 } else { 1063 } else {
1064 if ( duration != 0 ) { 1064 if ( duration != 0 ) {
1065 r->setYearly( Recurrence::rYearlyMonth, freq, duration ); 1065 r->setYearly( Recurrence::rYearlyMonth, freq, duration );
1066 } else { 1066 } else {
1067 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 1067 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
1068 } 1068 }
1069 r->addYearlyNum( mYearly->month() ); 1069 r->addYearlyNum( mYearly->month() );
1070 } 1070 }
1071 1071
1072 } 1072 }
1073 1073
1074 event->setExDates( mExceptions->dates() ); 1074 event->setExDates( mExceptions->dates() );
1075 } 1075 }
1076} 1076}
1077 1077
1078void KOEditorRecurrence::setDateTimeStr( const QString &str ) 1078void KOEditorRecurrence::setDateTimeStr( const QString &str )
1079{ 1079{
1080 mDateTimeLabel->setText( str ); 1080 mDateTimeLabel->setText( str );
1081} 1081}
1082 1082
1083bool KOEditorRecurrence::validateInput() 1083bool KOEditorRecurrence::validateInput()
1084{ 1084{
1085 // Check input here 1085 // Check input here
1086 1086
1087 return true; 1087 return true;
1088} 1088}
1089 1089
1090void KOEditorRecurrence::showExceptionsDialog() 1090void KOEditorRecurrence::showExceptionsDialog()
1091{ 1091{
1092 DateList dates = mExceptions->dates(); 1092 DateList dates = mExceptions->dates();
1093 int result = mExceptionsDialog->exec(); 1093 int result = mExceptionsDialog->exec();
1094 if ( result == QDialog::Rejected ) mExceptions->setDates( dates ); 1094 if ( result == QDialog::Rejected ) mExceptions->setDates( dates );
1095} 1095}
1096 1096
1097void KOEditorRecurrence::showRecurrenceRangeDialog() 1097void KOEditorRecurrence::showRecurrenceRangeDialog()
1098{ 1098{
1099 int duration = mRecurrenceRange->duration(); 1099 int duration = mRecurrenceRange->duration();
1100 QDate endDate = mRecurrenceRange->endDate(); 1100 QDate endDate = mRecurrenceRange->endDate();
1101 1101
1102 int result = mRecurrenceRangeDialog->exec(); 1102 int result = mRecurrenceRangeDialog->exec();
1103 if ( result == QDialog::Rejected ) { 1103 if ( result == QDialog::Rejected ) {
1104 mRecurrenceRange->setDuration( duration ); 1104 mRecurrenceRange->setDuration( duration );
1105 mRecurrenceRange->setEndDate( endDate ); 1105 mRecurrenceRange->setEndDate( endDate );
1106 } 1106 }
1107 1107
1108} 1108}
diff --git a/korganizer/koeventviewerdialog.cpp b/korganizer/koeventviewerdialog.cpp
index e5ff8af..02f13c7 100644
--- a/korganizer/koeventviewerdialog.cpp
+++ b/korganizer/koeventviewerdialog.cpp
@@ -1,307 +1,307 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <klocale.h> 20#include <klocale.h>
21 21
22#include <libkcal/event.h> 22#include <libkcal/event.h>
23#include <qtimer.h> 23#include <qtimer.h>
24#include <qpushbutton.h> 24#include <qpushbutton.h>
25 25
26#include "koeventviewer.h" 26#include "koeventviewer.h"
27#include <kmessagebox.h> 27#include <kmessagebox.h>
28#include "koprefs.h" 28#include "koprefs.h"
29#include <libkcal/todo.h> 29#include <libkcal/todo.h>
30#include "qapp.h" 30#include "qapp.h"
31 31
32#include "koeventviewerdialog.h" 32#include "koeventviewerdialog.h"
33extern int globalFlagBlockAgenda; 33extern int globalFlagBlockAgenda;
34 34
35KOEventViewerDialog::KOEventViewerDialog(QWidget *parent,const char *name) 35KOEventViewerDialog::KOEventViewerDialog(QWidget *parent,const char *name)
36 : KDialogBase(parent,name, 36 : KDialogBase(parent,name,
37#ifndef DESKTOP_VERSION 37#ifndef DESKTOP_VERSION
38 true , 38 true ,
39#else 39#else
40 false, 40 false,
41#endif 41#endif
42 i18n("Event Viewer"),Ok|User1|Close,Close, false, i18n("Agenda")) 42 i18n("Event Viewer"),Ok|User1|Close,Close, false, i18n("Agenda"))
43{ 43{
44 sendSignalViewerClosed = true; 44 sendSignalViewerClosed = true;
45 mEventViewer = new KOEventViewer(this); 45 mEventViewer = new KOEventViewer(this);
46 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont ); 46 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont );
47 setMainWidget(mEventViewer); 47 setMainWidget(mEventViewer);
48 setButtonText(Ok, i18n("Edit") ); 48 setButtonText(Ok, i18n("Edit") );
49 49
50 QObject::connect(findButton( Ok ),SIGNAL(clicked()), 50 QObject::connect(findButton( Ok ),SIGNAL(clicked()),
51 SLOT(editIncidence())); 51 SLOT(editIncidence()));
52 QObject::connect(this,SIGNAL(user1Clicked()), 52 QObject::connect(this,SIGNAL(user1Clicked()),
53 SLOT(showIncidence())); 53 SLOT(showIncidence()));
54 mIncidence = 0; 54 mIncidence = 0;
55 // TODO: Set a sensible size (based on the content?). 55 // TODO: Set a sensible size (based on the content?).
56 //showMaximized(); 56 //showMaximized();
57 //qDebug("++++++++++++KOEventViewerDialog() "); 57 //qDebug("++++++++++++KOEventViewerDialog() ");
58 // if ( KOPrefs::instance()->mCompactDialogs ) { 58 // if ( KOPrefs::instance()->mCompactDialogs ) {
59// setFixedSize( 240,284 ); 59// setFixedSize( 240,284 );
60// move( 0, 15 ); 60// move( 0, 15 );
61// } else { 61// } else {
62// setMinimumSize(300,200); 62// setMinimumSize(300,200);
63// resize(320,300); 63// resize(320,300);
64// } 64// }
65 mSyncMode = false; 65 mSyncMode = false;
66 mSyncResult = 0; 66 mSyncResult = 0;
67 67
68} 68}
69 69
70KOEventViewerDialog::~KOEventViewerDialog() 70KOEventViewerDialog::~KOEventViewerDialog()
71{ 71{
72 //qDebug("-------~KOEventViewerDialog() "); 72 //qDebug("-------~KOEventViewerDialog() ");
73} 73}
74void KOEventViewerDialog::showMe() 74void KOEventViewerDialog::showMe()
75{ 75{
76 76
77#ifdef DESKTOP_VERSION 77#ifdef DESKTOP_VERSION
78 int x,y,w,h; 78 int x,y,w,h;
79 x = geometry().x(); 79 x = geometry().x();
80 y = geometry().y(); 80 y = geometry().y();
81 w = width(); 81 w = width();
82 h = height(); 82 h = height();
83 show(); 83 show();
84 setGeometry(x,y,w,h); 84 setGeometry(x,y,w,h);
85 raise(); 85 raise();
86#else 86#else
87 showMaximized(); 87 showMaximized();
88#endif 88#endif
89 QTimer::singleShot( 1, this, SLOT ( setMyFocus() ) ); 89 QTimer::singleShot( 1, this, SLOT ( setMyFocus() ) );
90 90
91} 91}
92void KOEventViewerDialog::setMyFocus() 92void KOEventViewerDialog::setMyFocus()
93{ 93{
94 94
95 setActiveWindow(); 95 setActiveWindow();
96 mEventViewer->setFocus(); 96 mEventViewer->setFocus();
97 97
98} 98}
99void KOEventViewerDialog::print() 99void KOEventViewerDialog::print()
100{ 100{
101 mEventViewer->printMe(); 101 mEventViewer->printMe();
102 102
103} 103}
104void KOEventViewerDialog::setSyncMode( bool b ) 104void KOEventViewerDialog::setSyncMode( bool b )
105{ 105{
106 mSyncMode = b; 106 mSyncMode = b;
107 //qDebug("KOEventViewerDialog::setSyncMode %d ",mSyncMode ); 107 //qDebug("KOEventViewerDialog::setSyncMode %d ",mSyncMode );
108 if ( mSyncMode ) { 108 if ( mSyncMode ) {
109 findButton( Close )->setText( i18n("Cancel Sync")); 109 findButton( Close )->setText( i18n("Cancel Sync"));
110 findButton( Ok )->setText( i18n("Remote")); 110 findButton( Ok )->setText( i18n("Remote"));
111 findButton( User1 )->setText( i18n("Local")); 111 findButton( User1 )->setText( i18n("Local"));
112 } else { 112 } else {
113 findButton( Close )->setText( i18n("Close")); 113 findButton( Close )->setText( i18n("Close"));
114 findButton( Ok )->setText( i18n("Edit")); 114 findButton( Ok )->setText( i18n("Edit"));
115 findButton( User1 )->setText( i18n("Agenda")); 115 findButton( User1 )->setText( i18n("Agenda"));
116 } 116 }
117 mEventViewer->setSyncMode( b ); 117 mEventViewer->setSyncMode( b );
118} 118}
119void KOEventViewerDialog::setColorMode( int m ) 119void KOEventViewerDialog::setColorMode( int m )
120{ 120{
121 mEventViewer->setColorMode( m ); 121 mEventViewer->setColorMode( m );
122} 122}
123int KOEventViewerDialog::executeS( bool local ) 123int KOEventViewerDialog::executeS( bool local )
124{ 124{
125 mSyncResult = 3; 125 mSyncResult = 3;
126 if ( local ) 126 if ( local )
127 findButton( User1 )->setFocus(); 127 findButton( User1 )->setFocus();
128 else 128 else
129 findButton( Ok )->setFocus(); 129 findButton( Ok )->setFocus();
130 exec(); 130 exec();
131 return mSyncResult; 131 return mSyncResult;
132} 132}
133 133
134void KOEventViewerDialog::updateConfig() 134void KOEventViewerDialog::updateConfig()
135{ 135{
136 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont ); 136 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont );
137 137
138} 138}
139void KOEventViewerDialog::setEvent(Event *event) 139void KOEventViewerDialog::setEvent(Event *event)
140{ 140{
141 mEventViewer->setEvent(event); 141 mEventViewer->setEvent(event);
142 mIncidence = event; 142 mIncidence = event;
143 mEventViewer->setFocus(); 143 mEventViewer->setFocus();
144 //findButton( Close )->setFocus(); 144 //findButton( Close )->setFocus();
145 if ( !mSyncMode ) { 145 if ( !mSyncMode ) {
146 findButton( User1 )->setText( i18n("Agenda")); 146 findButton( User1 )->setText( i18n("Agenda"));
147 } 147 }
148} 148}
149void KOEventViewerDialog::setIncidence(Incidence *in ) 149void KOEventViewerDialog::setIncidence(Incidence *in )
150{ 150{
151 if ( in->type() == "Event" ) 151 if ( in->typeID() == eventID )
152 setEvent( (Event*) in ); 152 setEvent( (Event*) in );
153 else if ( in->type() =="Todo" ) 153 else if ( in->typeID() == todoID )
154 setTodo( (Todo*) in ); 154 setTodo( (Todo*) in );
155 else if ( in->type() =="Journal" ) 155 else if ( in->typeID() == journalID )
156 setJournal( (Journal*) in ); 156 setJournal( (Journal*) in );
157} 157}
158void KOEventViewerDialog::addIncidence(Incidence *in) 158void KOEventViewerDialog::addIncidence(Incidence *in)
159{ 159{
160 if ( in->type() == "Event" ) 160 if ( in->typeID() == eventID )
161 addEvent( (Event*) in ); 161 addEvent( (Event*) in );
162 else if ( in->type() =="Todo" ) 162 else if ( in->typeID() == todoID )
163 mEventViewer->setTodo( (Todo*) in, false ); 163 mEventViewer->setTodo( (Todo*) in, false );
164 else if ( in->type() =="Journal" ) 164 else if ( in->typeID() == journalID )
165 mEventViewer->setJournal( (Journal*) in, false ); 165 mEventViewer->setJournal( (Journal*) in, false );
166 if ( mSyncMode ) { 166 if ( mSyncMode ) {
167 findButton( User1 )->setFocus(); 167 findButton( User1 )->setFocus();
168 setCaption(i18n("Conflict! Please choose entry")); 168 setCaption(i18n("Conflict! Please choose entry"));
169 } 169 }
170} 170}
171 171
172void KOEventViewerDialog::addEvent(Event *event) 172void KOEventViewerDialog::addEvent(Event *event)
173{ 173{
174 mEventViewer->addEvent(event); 174 mEventViewer->addEvent(event);
175 mIncidence = event; 175 mIncidence = event;
176 mEventViewer->setFocus(); 176 mEventViewer->setFocus();
177 //findButton( Close )->setFocus(); 177 //findButton( Close )->setFocus();
178 if ( !mSyncMode ) { 178 if ( !mSyncMode ) {
179 findButton( User1 )->setText( i18n("Agenda")); 179 findButton( User1 )->setText( i18n("Agenda"));
180 } 180 }
181} 181}
182 182
183void KOEventViewerDialog::setTodo(Todo *event) 183void KOEventViewerDialog::setTodo(Todo *event)
184{ 184{
185 mEventViewer->setTodo(event); 185 mEventViewer->setTodo(event);
186 mIncidence = (Incidence*)event; 186 mIncidence = (Incidence*)event;
187 mEventViewer->setFocus(); 187 mEventViewer->setFocus();
188 //findButton( Close )->setFocus(); 188 //findButton( Close )->setFocus();
189 if ( !mSyncMode ) { 189 if ( !mSyncMode ) {
190 findButton( User1 )->setText( i18n("Set complete")); 190 findButton( User1 )->setText( i18n("Set complete"));
191 } 191 }
192} 192}
193void KOEventViewerDialog::setJournal(Journal *j) 193void KOEventViewerDialog::setJournal(Journal *j)
194{ 194{
195 mEventViewer->setJournal(j); 195 mEventViewer->setJournal(j);
196 mIncidence = (Incidence*)j; 196 mIncidence = (Incidence*)j;
197 mEventViewer->setFocus(); 197 mEventViewer->setFocus();
198 //findButton( Close )->setFocus(); 198 //findButton( Close )->setFocus();
199 if ( !mSyncMode ) { 199 if ( !mSyncMode ) {
200 findButton( User1 )->setText( i18n("Agenda")); 200 findButton( User1 )->setText( i18n("Agenda"));
201 } 201 }
202} 202}
203 203
204void KOEventViewerDialog::addText(QString text) 204void KOEventViewerDialog::addText(QString text)
205{ 205{
206 mEventViewer->addText(text); 206 mEventViewer->addText(text);
207 mEventViewer->setFocus(); 207 mEventViewer->setFocus();
208 //findButton( Close )->setFocus(); 208 //findButton( Close )->setFocus();
209} 209}
210void KOEventViewerDialog::editIncidence() 210void KOEventViewerDialog::editIncidence()
211{ 211{
212 sendSignalViewerClosed = false; 212 sendSignalViewerClosed = false;
213 if ( mSyncMode ) { 213 if ( mSyncMode ) {
214 mSyncResult = 2; 214 mSyncResult = 2;
215 accept(); 215 accept();
216 return; 216 return;
217 } 217 }
218 if ( mIncidence ){ 218 if ( mIncidence ){
219 close(); 219 close();
220 emit editIncidence( mIncidence ); 220 emit editIncidence( mIncidence );
221 } 221 }
222} 222}
223void KOEventViewerDialog::showIncidence() 223void KOEventViewerDialog::showIncidence()
224{ 224{
225 sendSignalViewerClosed = false; 225 sendSignalViewerClosed = false;
226 if ( mSyncMode ) { 226 if ( mSyncMode ) {
227 mSyncResult = 1; 227 mSyncResult = 1;
228 accept(); 228 accept();
229 return; 229 return;
230 } 230 }
231 231
232 if ( mIncidence ){ 232 if ( mIncidence ){
233 QDate date; 233 QDate date;
234 if ( mIncidence->type() == "Todo" ) { 234 if ( mIncidence->type() == "Todo" ) {
235 /* 235 /*
236 if ( ((Todo*)mIncidence)->hasDueDate() ) 236 if ( ((Todo*)mIncidence)->hasDueDate() )
237 date = ((Todo*)mIncidence)->dtDue().date(); 237 date = ((Todo*)mIncidence)->dtDue().date();
238 else { 238 else {
239 globalFlagBlockAgenda = 2; 239 globalFlagBlockAgenda = 2;
240 emit showAgendaView( false ); 240 emit showAgendaView( false );
241 return; 241 return;
242 } 242 }
243 */ 243 */
244 ((Todo*)mIncidence)->setCompleted( true ); 244 ((Todo*)mIncidence)->setCompleted( true );
245 ((Todo*)mIncidence)->setCompleted(QDateTime::currentDateTime() ); 245 ((Todo*)mIncidence)->setCompleted(QDateTime::currentDateTime() );
246 emit todoCompleted(((Todo*)mIncidence)); 246 emit todoCompleted(((Todo*)mIncidence));
247 } else { 247 } else {
248 date = mIncidence->dtStart().date(); 248 date = mIncidence->dtStart().date();
249 globalFlagBlockAgenda = 1; 249 globalFlagBlockAgenda = 1;
250 emit showAgendaView( false ); 250 emit showAgendaView( false );
251 globalFlagBlockAgenda = 2; 251 globalFlagBlockAgenda = 2;
252 emit jumpToTime( date ); 252 emit jumpToTime( date );
253 } 253 }
254 close(); 254 close();
255 } 255 }
256} 256}
257void KOEventViewerDialog::keyPressEvent ( QKeyEvent * e ) 257void KOEventViewerDialog::keyPressEvent ( QKeyEvent * e )
258{ 258{
259 switch ( e->key() ) { 259 switch ( e->key() ) {
260 260
261 case Qt::Key_A : 261 case Qt::Key_A :
262 case Qt::Key_L : 262 case Qt::Key_L :
263 showIncidence(); 263 showIncidence();
264 break; 264 break;
265 case Qt::Key_E : 265 case Qt::Key_E :
266 case Qt::Key_R : 266 case Qt::Key_R :
267 editIncidence(); 267 editIncidence();
268 break; 268 break;
269 case Qt::Key_C: 269 case Qt::Key_C:
270 case Qt::Key_Escape: 270 case Qt::Key_Escape:
271 sendSignalViewerClosed = true; 271 sendSignalViewerClosed = true;
272 close(); 272 close();
273 break; 273 break;
274 case Qt::Key_I: 274 case Qt::Key_I:
275#ifndef DESKTOP_VERSION 275#ifndef DESKTOP_VERSION
276 sendSignalViewerClosed = true; 276 sendSignalViewerClosed = true;
277 close(); 277 close();
278#else 278#else
279 sendSignalViewerClosed = true; 279 sendSignalViewerClosed = true;
280 slotViewerClosed(); 280 slotViewerClosed();
281 //accept(); 281 //accept();
282#endif 282#endif
283 break; 283 break;
284 default: 284 default:
285 KDialogBase::keyPressEvent ( e ); 285 KDialogBase::keyPressEvent ( e );
286 break; 286 break;
287 } 287 }
288 288
289} 289}
290void KOEventViewerDialog::hideEvent ( QHideEvent * e ) 290void KOEventViewerDialog::hideEvent ( QHideEvent * e )
291{ 291{
292 KDialogBase::hideEvent ( e ); 292 KDialogBase::hideEvent ( e );
293 QTimer::singleShot( 1, this, SLOT (slotViewerClosed() ) ); 293 QTimer::singleShot( 1, this, SLOT (slotViewerClosed() ) );
294} 294}
295 295
296void KOEventViewerDialog::slotViewerClosed() 296void KOEventViewerDialog::slotViewerClosed()
297{ 297{
298 if ( mSyncMode ) 298 if ( mSyncMode )
299 return; 299 return;
300 300
301 if ( sendSignalViewerClosed ) { 301 if ( sendSignalViewerClosed ) {
302 //qDebug("KOEventViewerDialog::hideEvent "); 302 //qDebug("KOEventViewerDialog::hideEvent ");
303 emit signalViewerClosed(); 303 emit signalViewerClosed();
304 } 304 }
305 sendSignalViewerClosed = true; 305 sendSignalViewerClosed = true;
306} 306}
307 307
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 678cab6..c868270 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -1,2096 +1,2096 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qpopupmenu.h> 20#include <qpopupmenu.h>
21#include <qfont.h> 21#include <qfont.h>
22#include <qfontmetrics.h> 22#include <qfontmetrics.h>
23#include <qkeycode.h> 23#include <qkeycode.h>
24#include <qhbox.h> 24#include <qhbox.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qwidgetstack.h> 26#include <qwidgetstack.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28#include <qtooltip.h> 28#include <qtooltip.h>
29#include <qpainter.h> 29#include <qpainter.h>
30#include <qtimer.h> 30#include <qtimer.h>
31#include <qwhatsthis.h> 31#include <qwhatsthis.h>
32#ifndef DESKTOP_VERSION 32#ifndef DESKTOP_VERSION
33#include <qpe/qpeapplication.h> 33#include <qpe/qpeapplication.h>
34#else 34#else
35#include <qapplication.h> 35#include <qapplication.h>
36#endif 36#endif
37 37
38#include <kdebug.h> 38#include <kdebug.h>
39#include <klocale.h> 39#include <klocale.h>
40#include <kglobal.h> 40#include <kglobal.h>
41#include <kconfig.h> 41#include <kconfig.h>
42#include <kiconloader.h> 42#include <kiconloader.h>
43 43
44#include <kcalendarsystem.h> 44#include <kcalendarsystem.h>
45 45
46#ifndef KORG_NOPRINTER 46#ifndef KORG_NOPRINTER
47#include "calprinter.h" 47#include "calprinter.h"
48#endif 48#endif
49#include "koprefs.h" 49#include "koprefs.h"
50#ifndef KORG_NOPLUGINS 50#ifndef KORG_NOPLUGINS
51#include "kocore.h" 51#include "kocore.h"
52#endif 52#endif
53#include "koglobals.h" 53#include "koglobals.h"
54#include <libkcal/kincidenceformatter.h> 54#include <libkcal/kincidenceformatter.h>
55 55
56#include "komonthview.h" 56#include "komonthview.h"
57 57
58#define PIXMAP_SIZE 5 58#define PIXMAP_SIZE 5
59#ifdef DESKTOP_VERSION 59#ifdef DESKTOP_VERSION
60QToolTipGroup *MonthViewCell::mToolTipGroup = 0; 60QToolTipGroup *MonthViewCell::mToolTipGroup = 0;
61#endif 61#endif
62class KNOWhatsThis :public QWhatsThis 62class KNOWhatsThis :public QWhatsThis
63{ 63{
64public: 64public:
65 KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { }; 65 KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { };
66 //~KNOWhatsThis( ) {qDebug("~KNOWhatsThis( ) "); }; 66 //~KNOWhatsThis( ) {qDebug("~KNOWhatsThis( ) "); };
67 67
68protected: 68protected:
69 virtual QString text( const QPoint& p) 69 virtual QString text( const QPoint& p)
70 { 70 {
71 return _wid->getWhatsThisText(p) ; 71 return _wid->getWhatsThisText(p) ;
72 }; 72 };
73private: 73private:
74 KNoScrollListBox* _wid; 74 KNoScrollListBox* _wid;
75 75
76}; 76};
77 77
78 78
79KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name) 79KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name)
80 : QListBox(parent, name, WRepaintNoErase) 80 : QListBox(parent, name, WRepaintNoErase)
81{ 81{
82#ifndef DESKTOP_VERSION 82#ifndef DESKTOP_VERSION
83 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 83 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
84#endif 84#endif
85 mWT = new KNOWhatsThis(this); 85 mWT = new KNOWhatsThis(this);
86 resetOnFocusIn = true; 86 resetOnFocusIn = true;
87 setVScrollBarMode(QScrollView::AlwaysOff); 87 setVScrollBarMode(QScrollView::AlwaysOff);
88 setHScrollBarMode(QScrollView::AlwaysOff); 88 setHScrollBarMode(QScrollView::AlwaysOff);
89} 89}
90KNoScrollListBox::~KNoScrollListBox() 90KNoScrollListBox::~KNoScrollListBox()
91{ 91{
92#if QT_VERSION >= 0x030000 92#if QT_VERSION >= 0x030000
93 93
94#else 94#else
95 delete mWT; 95 delete mWT;
96#endif 96#endif
97} 97}
98 98
99 99
100void KNoScrollListBox::focusInEvent ( QFocusEvent * e ) 100void KNoScrollListBox::focusInEvent ( QFocusEvent * e )
101{ 101{
102 QListBox::focusInEvent ( e ); 102 QListBox::focusInEvent ( e );
103 if ( count() ){ 103 if ( count() ){
104 int ci = currentItem(); 104 int ci = currentItem();
105 if ( ci < 0 ) ci = 0; 105 if ( ci < 0 ) ci = 0;
106 106
107 setCurrentItem( ci ); 107 setCurrentItem( ci );
108 setSelected ( ci, true ); 108 setSelected ( ci, true );
109 emit highlighted( item ( ci ) ); 109 emit highlighted( item ( ci ) );
110 110
111 resetOnFocusIn = true; 111 resetOnFocusIn = true;
112 112
113 if ( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) { 113 if ( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) {
114 QListBoxItem *fi = firstItem (); 114 QListBoxItem *fi = firstItem ();
115 if (fi ) { 115 if (fi ) {
116 int ihei = fi->height( this ); 116 int ihei = fi->height( this );
117 int hei = numRows () * ihei; 117 int hei = numRows () * ihei;
118 if ( hei < height() - horizontalScrollBar()->height () ) { 118 if ( hei < height() - horizontalScrollBar()->height () ) {
119 setVScrollBarMode(QScrollView::AlwaysOff); 119 setVScrollBarMode(QScrollView::AlwaysOff);
120 } 120 }
121 else 121 else
122 setVScrollBarMode(QScrollView::Auto); 122 setVScrollBarMode(QScrollView::Auto);
123 if ( ihei *3 > height() ) { 123 if ( ihei *3 > height() ) {
124 setHScrollBarMode(QScrollView::AlwaysOff); 124 setHScrollBarMode(QScrollView::AlwaysOff);
125 } 125 }
126 else { 126 else {
127 setHScrollBarMode(QScrollView::Auto); 127 setHScrollBarMode(QScrollView::Auto);
128 } 128 }
129 } else { 129 } else {
130 setVScrollBarMode(QScrollView::Auto); 130 setVScrollBarMode(QScrollView::Auto);
131 setHScrollBarMode(QScrollView::Auto); 131 setHScrollBarMode(QScrollView::Auto);
132 } 132 }
133 } 133 }
134 } 134 }
135} 135}
136void KNoScrollListBox::focusOutEvent ( QFocusEvent * e ) 136void KNoScrollListBox::focusOutEvent ( QFocusEvent * e )
137{ 137{
138 int i = currentItem (); 138 int i = currentItem ();
139 if ( i >= 0 ) { 139 if ( i >= 0 ) {
140 setSelected ( i, false ); 140 setSelected ( i, false );
141 } 141 }
142 QListBox::focusOutEvent ( e ); 142 QListBox::focusOutEvent ( e );
143 setVScrollBarMode(QScrollView::AlwaysOff); 143 setVScrollBarMode(QScrollView::AlwaysOff);
144 setHScrollBarMode(QScrollView::AlwaysOff); 144 setHScrollBarMode(QScrollView::AlwaysOff);
145} 145}
146 146
147QString KNoScrollListBox::getWhatsThisText(QPoint p) 147QString KNoScrollListBox::getWhatsThisText(QPoint p)
148{ 148{
149 QListBoxItem* item = itemAt ( p ); 149 QListBoxItem* item = itemAt ( p );
150 if ( ! item ) { 150 if ( ! item ) {
151 return i18n("Click in the cell\nto add an event!"); 151 return i18n("Click in the cell\nto add an event!");
152 } 152 }
153 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(), 153 return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(),
154 KOPrefs::instance()->mWTshowDetails, 154 KOPrefs::instance()->mWTshowDetails,
155 KOPrefs::instance()->mWTshowCreated, 155 KOPrefs::instance()->mWTshowCreated,
156 KOPrefs::instance()->mWTshowChanged); 156 KOPrefs::instance()->mWTshowChanged);
157} 157}
158void KNoScrollListBox::keyPressEvent(QKeyEvent *e) 158void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
159{ 159{
160 //qDebug("KNoScrollListBox::keyPressEvent "); 160 //qDebug("KNoScrollListBox::keyPressEvent ");
161 switch(e->key()) { 161 switch(e->key()) {
162 case Key_Right: 162 case Key_Right:
163 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 163 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
164 { 164 {
165 e->ignore(); 165 e->ignore();
166 return; 166 return;
167 } 167 }
168 scrollBy(10,0); 168 scrollBy(10,0);
169 break; 169 break;
170 case Key_Left: 170 case Key_Left:
171 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 171 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
172 { 172 {
173 e->ignore(); 173 e->ignore();
174 return; 174 return;
175 } 175 }
176 scrollBy(-10,0); 176 scrollBy(-10,0);
177 break; 177 break;
178 case Key_Up: 178 case Key_Up:
179 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 179 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
180 e->ignore(); 180 e->ignore();
181 break; 181 break;
182 } 182 }
183 if ( count() ) { 183 if ( count() ) {
184 if ( currentItem() == 0 ) { 184 if ( currentItem() == 0 ) {
185 emit prevCell(); 185 emit prevCell();
186 } else { 186 } else {
187 setCurrentItem((currentItem()+count()-1)%count()); 187 setCurrentItem((currentItem()+count()-1)%count());
188 if(!itemVisible(currentItem())) { 188 if(!itemVisible(currentItem())) {
189 if((unsigned int) currentItem() == (count()-1)) { 189 if((unsigned int) currentItem() == (count()-1)) {
190 setTopItem(currentItem()-numItemsVisible()+1); 190 setTopItem(currentItem()-numItemsVisible()+1);
191 } else { 191 } else {
192 setTopItem(topItem()-1); 192 setTopItem(topItem()-1);
193 } 193 }
194 } 194 }
195 } 195 }
196 } 196 }
197 break; 197 break;
198 case Key_Down: 198 case Key_Down:
199 if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 199 if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
200 e->ignore(); 200 e->ignore();
201 break; 201 break;
202 } 202 }
203 if ( count () ) { 203 if ( count () ) {
204 if ( currentItem()+1 == count () ) { 204 if ( currentItem()+1 == count () ) {
205 emit nextCell(); 205 emit nextCell();
206 } else { 206 } else {
207 setCurrentItem((currentItem()+1)%count()); 207 setCurrentItem((currentItem()+1)%count());
208 if(!itemVisible(currentItem())) { 208 if(!itemVisible(currentItem())) {
209 if(currentItem() == 0) { 209 if(currentItem() == 0) {
210 setTopItem(0); 210 setTopItem(0);
211 } else { 211 } else {
212 setTopItem(topItem()+1); 212 setTopItem(topItem()+1);
213 } 213 }
214 } 214 }
215 } 215 }
216 } 216 }
217 break; 217 break;
218 case Key_I: 218 case Key_I:
219 QTimer::singleShot( 1, this, SLOT ( oneDown() ) ); 219 QTimer::singleShot( 1, this, SLOT ( oneDown() ) );
220 e->ignore(); 220 e->ignore();
221 break; 221 break;
222 case Key_Return: 222 case Key_Return:
223 case Key_Enter: 223 case Key_Enter:
224 { 224 {
225 if ( currentItem() >= 0 ) { 225 if ( currentItem() >= 0 ) {
226 emit doubleClicked( item( currentItem() ) ); 226 emit doubleClicked( item( currentItem() ) );
227 e->accept(); 227 e->accept();
228 } else { 228 } else {
229 e->ignore(); 229 e->ignore();
230 } 230 }
231 } 231 }
232 break; 232 break;
233 case Key_Shift: 233 case Key_Shift:
234 emit shiftDown(); 234 emit shiftDown();
235 break; 235 break;
236 default: 236 default:
237 e->ignore(); 237 e->ignore();
238 break; 238 break;
239 } 239 }
240} 240}
241 241
242void KNoScrollListBox::oneDown() 242void KNoScrollListBox::oneDown()
243{ 243{
244 if ( count () ) { 244 if ( count () ) {
245 if ( currentItem()+1 == count () ) { 245 if ( currentItem()+1 == count () ) {
246 emit nextCell(); 246 emit nextCell();
247 } else { 247 } else {
248 resetOnFocusIn = false; 248 resetOnFocusIn = false;
249 setCurrentItem((currentItem()+1)%count()); 249 setCurrentItem((currentItem()+1)%count());
250 if(!itemVisible(currentItem())) { 250 if(!itemVisible(currentItem())) {
251 if(currentItem() == 0) { 251 if(currentItem() == 0) {
252 setTopItem(0); 252 setTopItem(0);
253 } else { 253 } else {
254 setTopItem(topItem()+1); 254 setTopItem(topItem()+1);
255 } 255 }
256 } 256 }
257 } 257 }
258 } 258 }
259} 259}
260void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) 260void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e)
261{ 261{
262 switch(e->key()) { 262 switch(e->key()) {
263 case Key_Shift: 263 case Key_Shift:
264 emit shiftUp(); 264 emit shiftUp();
265 break; 265 break;
266 default: 266 default:
267 break; 267 break;
268 } 268 }
269} 269}
270 270
271void KNoScrollListBox::mousePressEvent(QMouseEvent *e) 271void KNoScrollListBox::mousePressEvent(QMouseEvent *e)
272{ 272{
273 QListBox::mousePressEvent(e); 273 QListBox::mousePressEvent(e);
274 274
275 if(e->button() == RightButton) { 275 if(e->button() == RightButton) {
276 emit rightClick(); 276 emit rightClick();
277 } 277 }
278} 278}
279 279
280MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) 280MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s)
281 : QListBoxItem() 281 : QListBoxItem()
282{ 282{
283 mblockRepaint = true; 283 mblockRepaint = true;
284 setText( s ); 284 setText( s );
285 mMultiday = 0; 285 mMultiday = 0;
286 mIncidence = incidence; 286 mIncidence = incidence;
287 mDate = qd; 287 mDate = qd;
288 mRecur = false; 288 mRecur = false;
289 mAlarm = false; 289 mAlarm = false;
290 mReply = false; 290 mReply = false;
291 mInfo = false; 291 mInfo = false;
292 mdayPos = 0; 292 mdayPos = 0;
293 isWeekItem = KOPrefs::instance()->mMonthViewWeek; 293 isWeekItem = KOPrefs::instance()->mMonthViewWeek;
294} 294}
295void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) 295void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s)
296{ 296{
297 setText( s ); 297 setText( s );
298 mMultiday = 0; 298 mMultiday = 0;
299 mIncidence = incidence; 299 mIncidence = incidence;
300 mDate = qd; 300 mDate = qd;
301 mRecur = false; 301 mRecur = false;
302 mAlarm = false; 302 mAlarm = false;
303 mReply = false; 303 mReply = false;
304 mInfo = false; 304 mInfo = false;
305 mdayPos = 0; 305 mdayPos = 0;
306} 306}
307 307
308void MonthViewItem::paint(QPainter *p) 308void MonthViewItem::paint(QPainter *p)
309{ 309{
310 if ( mblockRepaint ) { 310 if ( mblockRepaint ) {
311 return; 311 return;
312 } 312 }
313#if QT_VERSION >= 0x030000 313#if QT_VERSION >= 0x030000
314 bool sel = isSelected(); 314 bool sel = isSelected();
315#else 315#else
316 bool sel = selected(); 316 bool sel = selected();
317#endif 317#endif
318 318
319 319
320 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) 320 if (KOPrefs::instance()->mMonthViewUsesCategoryColor)
321 { 321 {
322 p->setBackgroundColor( palette().color( QPalette::Normal, \ 322 p->setBackgroundColor( palette().color( QPalette::Normal, \
323 sel ? QColorGroup::Highlight : QColorGroup::Background ) ); 323 sel ? QColorGroup::Highlight : QColorGroup::Background ) );
324 p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); 324 p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) );
325 } 325 }
326 int x = 1; 326 int x = 1;
327 //int y = 3;//(height() - mRecurPixmap.height()) /2; 327 //int y = 3;//(height() - mRecurPixmap.height()) /2;
328 int size = PIXMAP_SIZE; 328 int size = PIXMAP_SIZE;
329 if ( QApplication::desktop()->width() < 300 ) 329 if ( QApplication::desktop()->width() < 300 )
330 size = 3; 330 size = 3;
331 int heihei = height( listBox () ); 331 int heihei = height( listBox () );
332 int y = (heihei - size -1 ) /2; 332 int y = (heihei - size -1 ) /2;
333 333
334 if ( KOPrefs::instance()->mMonthShowIcons ) { 334 if ( KOPrefs::instance()->mMonthShowIcons ) {
335 if ( mInfo ) { 335 if ( mInfo ) {
336 p->fillRect ( x, y,size,size, Qt::darkGreen ); 336 p->fillRect ( x, y,size,size, Qt::darkGreen );
337 x += size + 1; 337 x += size + 1;
338 } 338 }
339 if ( mRecur ) { 339 if ( mRecur ) {
340 p->fillRect ( x, y,size,size, Qt::blue ); 340 p->fillRect ( x, y,size,size, Qt::blue );
341 x += size + 1; 341 x += size + 1;
342 } 342 }
343 if ( mAlarm ) { 343 if ( mAlarm ) {
344 p->fillRect ( x, y,size,size, Qt::red ); 344 p->fillRect ( x, y,size,size, Qt::red );
345 x += size + 1; 345 x += size + 1;
346 } 346 }
347 if ( mReply ) { 347 if ( mReply ) {
348 p->fillRect ( x, y,size,size, Qt::yellow ); 348 p->fillRect ( x, y,size,size, Qt::yellow );
349 x += size + 1; 349 x += size + 1;
350 } 350 }
351 } 351 }
352 if ( mMultiday ) { 352 if ( mMultiday ) {
353 int yyy = y+(size/2); 353 int yyy = y+(size/2);
354 int sizeM = size+2; 354 int sizeM = size+2;
355 p->setBrush( QBrush::SolidPattern ); 355 p->setBrush( QBrush::SolidPattern );
356 p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ; 356 p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ;
357 if ( mMultiday == 2 || mMultiday == 3 ) { 357 if ( mMultiday == 2 || mMultiday == 3 ) {
358 QPointArray pa ( 3 ); 358 QPointArray pa ( 3 );
359 pa.setPoint (0, x, yyy ); 359 pa.setPoint (0, x, yyy );
360 pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 ); 360 pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 );
361 pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 ); 361 pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 );
362 p->drawPolygon( pa ); 362 p->drawPolygon( pa );
363 } 363 }
364 if ( mMultiday == 2 || mMultiday == 1 ) { 364 if ( mMultiday == 2 || mMultiday == 1 ) {
365 QPointArray pa ( 3 ); 365 QPointArray pa ( 3 );
366 pa.setPoint (0, x+sizeM +sizeM/2, yyy ); 366 pa.setPoint (0, x+sizeM +sizeM/2, yyy );
367 pa.setPoint (1, x+sizeM, yyy+sizeM/2 ); 367 pa.setPoint (1, x+sizeM, yyy+sizeM/2 );
368 pa.setPoint (2, x+sizeM, yyy-sizeM/2 ); 368 pa.setPoint (2, x+sizeM, yyy-sizeM/2 );
369 p->drawPolygon( pa ); 369 p->drawPolygon( pa );
370 } 370 }
371 if ( mMultiday == 1 ) { 371 if ( mMultiday == 1 ) {
372 // p->fillRect ( x, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); 372 // p->fillRect ( x, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) );
373 373
374 p->drawLine ( x+1, yyy-sizeM/2, x+1, yyy+sizeM/2 ); 374 p->drawLine ( x+1, yyy-sizeM/2, x+1, yyy+sizeM/2 );
375 } 375 }
376 if ( mMultiday == 3 ) { 376 if ( mMultiday == 3 ) {
377 // p->fillRect ( x+sizeM, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); 377 // p->fillRect ( x+sizeM, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) );
378 p->drawLine ( x+sizeM +sizeM/2-1, yyy-sizeM/2, x+sizeM +sizeM/2-1, yyy+sizeM/2 ); 378 p->drawLine ( x+sizeM +sizeM/2-1, yyy-sizeM/2, x+sizeM +sizeM/2-1, yyy+sizeM/2 );
379 379
380 } 380 }
381 x += sizeM/2 + 1; 381 x += sizeM/2 + 1;
382 x += sizeM + 1; 382 x += sizeM + 1;
383 } 383 }
384 384
385 if ( mIncidence->type() == "Todo" ){ 385 if ( mIncidence->typeID() == todoID ){
386 Todo* td = ( Todo* ) mIncidence; 386 Todo* td = ( Todo* ) mIncidence;
387 if ( td->isCompleted() ) { 387 if ( td->isCompleted() ) {
388 int half = size/2; 388 int half = size/2;
389 p->drawLine ( x, heihei/2, x +half , heihei/2 +half ) ; 389 p->drawLine ( x, heihei/2, x +half , heihei/2 +half ) ;
390 p->drawLine ( x +half , heihei/2 +half , x +half+half +2 , heihei/2 -2 ) ; 390 p->drawLine ( x +half , heihei/2 +half , x +half+half +2 , heihei/2 -2 ) ;
391 x += half+half + 4; 391 x += half+half + 4;
392 392
393 } else { 393 } else {
394 int val = td->percentComplete()/20; 394 int val = td->percentComplete()/20;
395 p->fillRect ( x+1, y-2, val ,size+4,Qt::black ); 395 p->fillRect ( x+1, y-2, val ,size+4,Qt::black );
396 p->drawRect ( x, y-2,7,size+4); 396 p->drawRect ( x, y-2,7,size+4);
397 x += size + 3; 397 x += size + 3;
398 } 398 }
399 } 399 }
400 QFontMetrics fm = p->fontMetrics(); 400 QFontMetrics fm = p->fontMetrics();
401 int yPos; 401 int yPos;
402 int pmheight = size; 402 int pmheight = size;
403 if( pmheight < fm.height() ) 403 if( pmheight < fm.height() )
404 yPos = fm.ascent() + fm.leading()/2; 404 yPos = fm.ascent() + fm.leading()/2;
405 else 405 else
406 yPos = pmheight/2 - fm.height()/2 + fm.ascent(); 406 yPos = pmheight/2 - fm.height()/2 + fm.ascent();
407 p->setPen( palette().color( QPalette::Normal, sel ? \ 407 p->setPen( palette().color( QPalette::Normal, sel ? \
408 QColorGroup::HighlightedText : QColorGroup::Foreground ) ); 408 QColorGroup::HighlightedText : QColorGroup::Foreground ) );
409 if ( KOPrefs::instance()->mMonthShowTimes || isWeekItem) { 409 if ( KOPrefs::instance()->mMonthShowTimes || isWeekItem) {
410 p->drawText( x, yPos, text() ); 410 p->drawText( x, yPos, text() );
411 if ( mIncidence->cancelled() ) { 411 if ( mIncidence->cancelled() ) {
412 int wid = fm.width( text() ); 412 int wid = fm.width( text() );
413 p->drawLine( x, heihei/2 ,x+wid, heihei/2 ); 413 p->drawLine( x, heihei/2 ,x+wid, heihei/2 );
414 } 414 }
415 } else { 415 } else {
416 QString pText = text(); 416 QString pText = text();
417 if( pText.mid(2,1) == ":" ) 417 if( pText.mid(2,1) == ":" )
418 pText = pText.mid( 6 ); 418 pText = pText.mid( 6 );
419 p->drawText( x, yPos, pText ); 419 p->drawText( x, yPos, pText );
420 if ( mIncidence->cancelled() ) { 420 if ( mIncidence->cancelled() ) {
421 int wid = fm.width( pText ); 421 int wid = fm.width( pText );
422 p->drawLine( x, heihei/2 ,x+wid, heihei/2 ); 422 p->drawLine( x, heihei/2 ,x+wid, heihei/2 );
423 } 423 }
424 } 424 }
425} 425}
426 426
427int MonthViewItem::height(const QListBox *lb) const 427int MonthViewItem::height(const QListBox *lb) const
428{ 428{
429 int ret = 10; 429 int ret = 10;
430 if ( lb ) 430 if ( lb )
431 ret = lb->fontMetrics().lineSpacing()+1; 431 ret = lb->fontMetrics().lineSpacing()+1;
432 return ret; 432 return ret;
433} 433}
434 434
435int MonthViewItem::width(const QListBox *lb) const 435int MonthViewItem::width(const QListBox *lb) const
436{ 436{
437 if( KOPrefs::instance()->mEnableMonthScroll || isWeekItem ) { 437 if( KOPrefs::instance()->mEnableMonthScroll || isWeekItem ) {
438 int size = PIXMAP_SIZE; 438 int size = PIXMAP_SIZE;
439 if ( QApplication::desktop()->width() < 300 ) 439 if ( QApplication::desktop()->width() < 300 )
440 size = 3; 440 size = 3;
441 int x = 1; 441 int x = 1;
442 if ( KOPrefs::instance()->mMonthShowIcons ) { 442 if ( KOPrefs::instance()->mMonthShowIcons ) {
443 if ( mInfo ) { 443 if ( mInfo ) {
444 x += size + 1; 444 x += size + 1;
445 } 445 }
446 if( mRecur ) { 446 if( mRecur ) {
447 x += size+1; 447 x += size+1;
448 } 448 }
449 if( mAlarm ) { 449 if( mAlarm ) {
450 x += size+1; 450 x += size+1;
451 } 451 }
452 if( mReply ) { 452 if( mReply ) {
453 x += size+1; 453 x += size+1;
454 } 454 }
455 } 455 }
456 if( mMultiday ) { 456 if( mMultiday ) {
457 x += size+1+2+size/2; 457 x += size+1+2+size/2;
458 } 458 }
459 return( x + lb->fontMetrics().width( text() ) + 1 ); 459 return( x + lb->fontMetrics().width( text() ) + 1 );
460 } 460 }
461 if ( ! lb ) 461 if ( ! lb )
462 return 10; 462 return 10;
463 return lb->width(); 463 return lb->width();
464} 464}
465 465
466 466
467MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par ) 467MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par )
468 : KNoScrollListBox( par ), 468 : KNoScrollListBox( par ),
469 mMonthView( parent ) 469 mMonthView( parent )
470{ 470{
471 //QVBoxLayout *topLayout = new QVBoxLayout( this ); 471 //QVBoxLayout *topLayout = new QVBoxLayout( this );
472 currentPalette = 0; 472 currentPalette = 0;
473 // mLabel = new QLabel( this );QPushButton 473 // mLabel = new QLabel( this );QPushButton
474 mLabel = new QPushButton( this ); 474 mLabel = new QPushButton( this );
475 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); 475 //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain );
476 //mLabel->setLineWidth( 1 ); 476 //mLabel->setLineWidth( 1 );
477 //mLabel->setAlignment( AlignCenter ); 477 //mLabel->setAlignment( AlignCenter );
478 mLabel->setFlat( true ); 478 mLabel->setFlat( true );
479 mLabel->setFocusPolicy(NoFocus); 479 mLabel->setFocusPolicy(NoFocus);
480 //mItemList = new KNoScrollListBox( this ); 480 //mItemList = new KNoScrollListBox( this );
481 setMinimumSize( 10, 10 ); 481 setMinimumSize( 10, 10 );
482 setFrameStyle( QFrame::Panel | QFrame::Plain ); 482 setFrameStyle( QFrame::Panel | QFrame::Plain );
483 setLineWidth( 1 ); 483 setLineWidth( 1 );
484 //topLayout->addWidget( mItemList ); 484 //topLayout->addWidget( mItemList );
485 mLabel->raise(); 485 mLabel->raise();
486 // QColor( 0,0,255 ) QColor( 160,1600,255 ) 486 // QColor( 0,0,255 ) QColor( 160,1600,255 )
487 mStandardPalette = palette(); 487 mStandardPalette = palette();
488 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); 488 mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) );
489 489
490 enableScrollBars( false ); 490 enableScrollBars( false );
491 updateConfig(); 491 updateConfig();
492 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); 492 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
493 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); 493 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
494 connect( this , SIGNAL( doubleClicked( QListBoxItem *) ), 494 connect( this , SIGNAL( doubleClicked( QListBoxItem *) ),
495 SLOT( defaultAction( QListBoxItem * ) ) ); 495 SLOT( defaultAction( QListBoxItem * ) ) );
496 connect( this, SIGNAL( rightButtonPressed( QListBoxItem *, 496 connect( this, SIGNAL( rightButtonPressed( QListBoxItem *,
497 const QPoint &) ), 497 const QPoint &) ),
498 SLOT( contextMenu( QListBoxItem * ) ) ); 498 SLOT( contextMenu( QListBoxItem * ) ) );
499 connect( this, SIGNAL( highlighted( QListBoxItem *) ), 499 connect( this, SIGNAL( highlighted( QListBoxItem *) ),
500 SLOT( selection( QListBoxItem * ) ) ); 500 SLOT( selection( QListBoxItem * ) ) );
501 501
502 /* 502 /*
503 connect( this, SIGNAL( clicked( QListBoxItem * ) ), 503 connect( this, SIGNAL( clicked( QListBoxItem * ) ),
504 SLOT( selection( QListBoxItem * ) ) ); 504 SLOT( selection( QListBoxItem * ) ) );
505 */ 505 */
506} 506}
507#ifdef DESKTOP_VERSION 507#ifdef DESKTOP_VERSION
508QToolTipGroup *MonthViewCell::toolTipGroup() 508QToolTipGroup *MonthViewCell::toolTipGroup()
509{ 509{
510 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); 510 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0);
511 return mToolTipGroup; 511 return mToolTipGroup;
512} 512}
513#endif 513#endif
514 514
515void MonthViewCell::setDate( const QDate &date ) 515void MonthViewCell::setDate( const QDate &date )
516{ 516{
517 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; 517 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl;
518 mDate = date; 518 mDate = date;
519 519
520 520
521 521
522 //resizeEvent( 0 ); 522 //resizeEvent( 0 );
523} 523}
524 524
525QDate MonthViewCell::date() const 525QDate MonthViewCell::date() const
526{ 526{
527 return mDate; 527 return mDate;
528} 528}
529 529
530void MonthViewCell::setPrimary( bool primary ) 530void MonthViewCell::setPrimary( bool primary )
531{ 531{
532 mPrimary = primary; 532 mPrimary = primary;
533 //setMyPalette(); 533 //setMyPalette();
534} 534}
535void MonthViewCell::setMyPalette() 535void MonthViewCell::setMyPalette()
536{ 536{
537 537
538 if ( mHoliday) { 538 if ( mHoliday) {
539 if ( currentPalette == 1 ) return; 539 if ( currentPalette == 1 ) return;
540 mLabel->setPalette( QPalette ( mHolidayPalette.color( QPalette::Normal,QColorGroup::Base),mHolidayPalette.color(QPalette::Normal,QColorGroup::Base ) )); 540 mLabel->setPalette( QPalette ( mHolidayPalette.color( QPalette::Normal,QColorGroup::Base),mHolidayPalette.color(QPalette::Normal,QColorGroup::Base ) ));
541 setPalette( mHolidayPalette ); 541 setPalette( mHolidayPalette );
542 //mLabel->setPalette( mHolidayPalette ); 542 //mLabel->setPalette( mHolidayPalette );
543 currentPalette = 1; 543 currentPalette = 1;
544 544
545 } else { 545 } else {
546 if ( mPrimary ) { 546 if ( mPrimary ) {
547 if ( currentPalette == 2 ) return; 547 if ( currentPalette == 2 ) return;
548 mLabel->setPalette( QPalette ( mPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); 548 mLabel->setPalette( QPalette ( mPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) ));
549 //mLabel->setPalette( mPrimaryPalette ); 549 //mLabel->setPalette( mPrimaryPalette );
550 setPalette( mPrimaryPalette ); 550 setPalette( mPrimaryPalette );
551 currentPalette = 2; 551 currentPalette = 2;
552 552
553 } else { 553 } else {
554 if ( currentPalette == 3 ) return; 554 if ( currentPalette == 3 ) return;
555 setPalette( mNonPrimaryPalette ); 555 setPalette( mNonPrimaryPalette );
556 mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); 556 mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) ));
557 //mLabel->setPalette( mNonPrimaryPalette );; 557 //mLabel->setPalette( mNonPrimaryPalette );;
558 currentPalette = 3; 558 currentPalette = 3;
559 } 559 }
560 } 560 }
561 //QPalette pal = palette(); 561 //QPalette pal = palette();
562 562
563 //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); 563 //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) ));
564} 564}
565QPalette MonthViewCell::getPalette () 565QPalette MonthViewCell::getPalette ()
566{ 566{
567 if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) 567 if ( !KOPrefs::instance()->mMonthViewUsesDayColors )
568 return mStandardPalette; 568 return mStandardPalette;
569 if ( mHoliday) { 569 if ( mHoliday) {
570 return mHolidayPalette ; 570 return mHolidayPalette ;
571 } else { 571 } else {
572 if ( mPrimary ) { 572 if ( mPrimary ) {
573 return mPrimaryPalette ; 573 return mPrimaryPalette ;
574 } 574 }
575 } 575 }
576 return mNonPrimaryPalette; 576 return mNonPrimaryPalette;
577} 577}
578bool MonthViewCell::isPrimary() const 578bool MonthViewCell::isPrimary() const
579{ 579{
580 return mPrimary; 580 return mPrimary;
581} 581}
582 582
583void MonthViewCell::setHoliday( bool holiday ) 583void MonthViewCell::setHoliday( bool holiday )
584{ 584{
585 mHoliday = holiday; 585 mHoliday = holiday;
586 //setMyPalette(); 586 //setMyPalette();
587} 587}
588 588
589void MonthViewCell::setHoliday( const QString &holiday ) 589void MonthViewCell::setHoliday( const QString &holiday )
590{ 590{
591 mHolidayString = holiday; 591 mHolidayString = holiday;
592 592
593 if ( !holiday.isEmpty() ) { 593 if ( !holiday.isEmpty() ) {
594 setHoliday( true ); 594 setHoliday( true );
595 } 595 }
596} 596}
597 597
598void MonthViewCell::startUpdateCell() 598void MonthViewCell::startUpdateCell()
599{ 599{
600 mdayCount = 0; 600 mdayCount = 0;
601 setFocusPolicy(NoFocus); 601 setFocusPolicy(NoFocus);
602 if ( !mMonthView->isUpdatePossible() ) 602 if ( !mMonthView->isUpdatePossible() )
603 return; 603 return;
604 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 604 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
605 while ( mitem ) { 605 while ( mitem ) {
606 mitem->setBlockRepaint( true ); 606 mitem->setBlockRepaint( true );
607 mitem = (MonthViewItem *)mitem->next(); 607 mitem = (MonthViewItem *)mitem->next();
608 } 608 }
609 if ( mAvailItemList.count() > 20 ) { 609 if ( mAvailItemList.count() > 20 ) {
610 mAvailItemList.setAutoDelete( true ); 610 mAvailItemList.setAutoDelete( true );
611 mAvailItemList.clear(); 611 mAvailItemList.clear();
612 mAvailItemList.setAutoDelete( false ); 612 mAvailItemList.setAutoDelete( false );
613 } 613 }
614 614
615 setPrimary( mDate.month()%2 ); 615 setPrimary( mDate.month()%2 );
616 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); 616 setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays);
617 if ( mDate == QDate::currentDate() ) { 617 if ( mDate == QDate::currentDate() ) {
618 setLineWidth( 3 ); 618 setLineWidth( 3 );
619 } else { 619 } else {
620 setLineWidth( 1 ); 620 setLineWidth( 1 );
621 } 621 }
622 MonthViewItem* CurrentAvailItem = (MonthViewItem*) firstItem (); 622 MonthViewItem* CurrentAvailItem = (MonthViewItem*) firstItem ();
623 //clear(); 623 //clear();
624 while ( CurrentAvailItem ) { 624 while ( CurrentAvailItem ) {
625 MonthViewItem *item = CurrentAvailItem; 625 MonthViewItem *item = CurrentAvailItem;
626 CurrentAvailItem = (MonthViewItem *)item->next(); 626 CurrentAvailItem = (MonthViewItem *)item->next();
627 mAvailItemList.append( item ); 627 mAvailItemList.append( item );
628 takeItem ( item ); 628 takeItem ( item );
629 } 629 }
630 630
631#ifdef DESKTOP_VERSION 631#ifdef DESKTOP_VERSION
632 QToolTip::remove(this); 632 QToolTip::remove(this);
633#endif 633#endif
634 mToolTip.clear(); 634 mToolTip.clear();
635 //qApp->processEvents(); 635 //qApp->processEvents();
636#if 0 636#if 0
637 if ( !mHolidayString.isEmpty() ) { 637 if ( !mHolidayString.isEmpty() ) {
638 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); 638 MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString );
639 item->setPalette( mHolidayPalette ); 639 item->setPalette( mHolidayPalette );
640 insertItem( item ); 640 insertItem( item );
641 mToolTip.append ( mHolidayString ); 641 mToolTip.append ( mHolidayString );
642 } 642 }
643#endif 643#endif
644} 644}
645 645
646int MonthViewCell::insertEvent(Event *event) 646int MonthViewCell::insertEvent(Event *event)
647{ 647{
648 bool useToolTips = true; 648 bool useToolTips = true;
649#ifndef DESKTOP_VERSION 649#ifndef DESKTOP_VERSION
650 useToolTips = false; 650 useToolTips = false;
651#endif 651#endif
652 QString mToolTipText; 652 QString mToolTipText;
653 setFocusPolicy(WheelFocus); 653 setFocusPolicy(WheelFocus);
654 if ( !(event->doesRecur() == Recurrence::rNone) ) { 654 if ( !(event->doesRecur() == Recurrence::rNone) ) {
655 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) 655 if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily )
656 return mdayCount; 656 return mdayCount;
657 else 657 else
658 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) 658 if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly )
659 return mdayCount; 659 return mdayCount;
660 } 660 }
661 661
662 if ( event->isHoliday()) { 662 if ( event->isHoliday()) {
663 setHoliday( true ); 663 setHoliday( true );
664 if ( mDate.dayOfWeek() == 7 ) 664 if ( mDate.dayOfWeek() == 7 )
665 setLineWidth( 3 ); 665 setLineWidth( 3 );
666 } 666 }
667 QString text; 667 QString text;
668 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day 668 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day
669 if (event->isMultiDay()) { 669 if (event->isMultiDay()) {
670 QString prefix = "<->";multiday = 2; 670 QString prefix = "<->";multiday = 2;
671 QString time; 671 QString time;
672 if ( event->doesRecur() ) { 672 if ( event->doesRecur() ) {
673 if ( event->recursOn( mDate) ) { 673 if ( event->recursOn( mDate) ) {
674 prefix ="->" ;multiday = 1; 674 prefix ="->" ;multiday = 1;
675 } 675 }
676 else { 676 else {
677 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 677 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
678 if ( event->recursOn( mDate.addDays( -days)) ) { 678 if ( event->recursOn( mDate.addDays( -days)) ) {
679 prefix ="<-" ;multiday = 3; 679 prefix ="<-" ;multiday = 3;
680 } 680 }
681 } 681 }
682 682
683 } else { 683 } else {
684 if (mDate == event->dtStart().date()) { 684 if (mDate == event->dtStart().date()) {
685 prefix ="->" ;multiday = 1; 685 prefix ="->" ;multiday = 1;
686 } else if (mDate == event->dtEnd().date()) { 686 } else if (mDate == event->dtEnd().date()) {
687 prefix ="<-" ;multiday = 3; 687 prefix ="<-" ;multiday = 3;
688 } 688 }
689 } 689 }
690 if ( !event->doesFloat() ) { 690 if ( !event->doesFloat() ) {
691 if ( mDate == event->dtStart().date () ) 691 if ( mDate == event->dtStart().date () )
692 time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; 692 time = KGlobal::locale()->formatTime(event->dtStart().time())+" ";
693 else if ( mDate == event->dtEnd().date () ) 693 else if ( mDate == event->dtEnd().date () )
694 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; 694 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" ";
695 695
696 } 696 }
697 text = time + event->summary(); 697 text = time + event->summary();
698 if ( useToolTips ) 698 if ( useToolTips )
699 mToolTipText += prefix + text; 699 mToolTipText += prefix + text;
700 } else { 700 } else {
701 if (event->doesFloat()) { 701 if (event->doesFloat()) {
702 text = event->summary(); 702 text = event->summary();
703 if ( useToolTips ) 703 if ( useToolTips )
704 mToolTipText += text; 704 mToolTipText += text;
705 } 705 }
706 else { 706 else {
707 text = KGlobal::locale()->formatTime(event->dtStart().time()); 707 text = KGlobal::locale()->formatTime(event->dtStart().time());
708 text += " " + event->summary(); 708 text += " " + event->summary();
709 if ( useToolTips ) 709 if ( useToolTips )
710 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); 710 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
711 } 711 }
712 } 712 }
713 if ( useToolTips && ! event->location().isEmpty() ) { 713 if ( useToolTips && ! event->location().isEmpty() ) {
714 mToolTipText += " (" + event->location() +")"; 714 mToolTipText += " (" + event->location() +")";
715 } 715 }
716 MonthViewItem *item ; 716 MonthViewItem *item ;
717 717
718 if ( mAvailItemList.count() ) { 718 if ( mAvailItemList.count() ) {
719 item = mAvailItemList.first(); 719 item = mAvailItemList.first();
720 mAvailItemList.remove( item ); 720 mAvailItemList.remove( item );
721 item->recycle( event, mDate, text ); 721 item->recycle( event, mDate, text );
722 } else { 722 } else {
723 item = new MonthViewItem( event, mDate, text ); 723 item = new MonthViewItem( event, mDate, text );
724 } 724 }
725 725
726 QPalette pal; 726 QPalette pal;
727 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 727 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
728 QStringList categories = event->categories(); 728 QStringList categories = event->categories();
729 QString cat = categories.first(); 729 QString cat = categories.first();
730 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 730 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
731 pal = getPalette(); 731 pal = getPalette();
732 if (cat.isEmpty()) { 732 if (cat.isEmpty()) {
733 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 733 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
734 } else { 734 } else {
735 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 735 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
736 } 736 }
737 737
738 } else { 738 } else {
739 if (cat.isEmpty()) { 739 if (cat.isEmpty()) {
740 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 740 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
741 } else { 741 } else {
742 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 742 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
743 } 743 }
744 } 744 }
745 745
746 } else { 746 } else {
747 pal = mStandardPalette ; 747 pal = mStandardPalette ;
748 } 748 }
749 item->setPalette( pal ); 749 item->setPalette( pal );
750 item->setRecur( event->recurrence()->doesRecur() ); 750 item->setRecur( event->recurrence()->doesRecur() );
751 item->setAlarm( event->isAlarmEnabled() && multiday < 2 ); 751 item->setAlarm( event->isAlarmEnabled() && multiday < 2 );
752 item->setMoreInfo( event->description().length() > 0 ); 752 item->setMoreInfo( event->description().length() > 0 );
753#ifdef DESKTOP_VERSION 753#ifdef DESKTOP_VERSION
754 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, 754 Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails,
755 KOPrefs::instance()->email()); 755 KOPrefs::instance()->email());
756 if ( me != 0 ) { 756 if ( me != 0 ) {
757 if ( me->status() == Attendee::NeedsAction && me->RSVP()) 757 if ( me->status() == Attendee::NeedsAction && me->RSVP())
758 item->setReply(true && multiday < 2); 758 item->setReply(true && multiday < 2);
759 else 759 else
760 item->setReply(false); 760 item->setReply(false);
761 } else 761 } else
762 item->setReply(false); 762 item->setReply(false);
763#endif 763#endif
764 item->setMultiDay( multiday ); 764 item->setMultiDay( multiday );
765 if ( multiday ) { 765 if ( multiday ) {
766 insertItem( item ,mdayCount); 766 insertItem( item ,mdayCount);
767 ++mdayCount; 767 ++mdayCount;
768 } else { 768 } else {
769 uint i; 769 uint i;
770 int pos = mdayCount; 770 int pos = mdayCount;
771 for ( i = mdayCount; i < count();++i ) { 771 for ( i = mdayCount; i < count();++i ) {
772 QListBoxItem* it = this->item ( i ); 772 QListBoxItem* it = this->item ( i );
773 if ( it && text < it->text() ) { 773 if ( it && text < it->text() ) {
774 pos = i; 774 pos = i;
775 break; 775 break;
776 } 776 }
777 ++pos; 777 ++pos;
778 } 778 }
779 insertItem( item ,pos); 779 insertItem( item ,pos);
780 } 780 }
781 if ( useToolTips ) { 781 if ( useToolTips ) {
782 mToolTip.append( mToolTipText ); 782 mToolTip.append( mToolTipText );
783 } 783 }
784 return mdayCount; 784 return mdayCount;
785} 785}
786void MonthViewCell::insertTodo(Todo *todo) 786void MonthViewCell::insertTodo(Todo *todo)
787{ 787{
788 setFocusPolicy(WheelFocus); 788 setFocusPolicy(WheelFocus);
789 QString text; 789 QString text;
790 if (todo->hasDueDate()) { 790 if (todo->hasDueDate()) {
791 if (!todo->doesFloat()) { 791 if (!todo->doesFloat()) {
792 text += KGlobal::locale()->formatTime(todo->dtDue().time()); 792 text += KGlobal::locale()->formatTime(todo->dtDue().time());
793 text += " "; 793 text += " ";
794 } 794 }
795 } 795 }
796 text += todo->summary(); 796 text += todo->summary();
797 MonthViewItem *item ; 797 MonthViewItem *item ;
798 if ( mAvailItemList.count() ) { 798 if ( mAvailItemList.count() ) {
799 item = mAvailItemList.first(); 799 item = mAvailItemList.first();
800 mAvailItemList.remove( item ); 800 mAvailItemList.remove( item );
801 item->recycle( todo, mDate, text ); 801 item->recycle( todo, mDate, text );
802 } else { 802 } else {
803 item = new MonthViewItem( todo, mDate, text ); 803 item = new MonthViewItem( todo, mDate, text );
804 } 804 }
805 //MonthViewItem *item = new MonthViewItem( todo, mDate, text ); 805 //MonthViewItem *item = new MonthViewItem( todo, mDate, text );
806 //item->setPalette( mStandardPalette ); 806 //item->setPalette( mStandardPalette );
807 QPalette pal; 807 QPalette pal;
808 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { 808 if (KOPrefs::instance()->mMonthViewUsesCategoryColor) {
809 QStringList categories = todo->categories(); 809 QStringList categories = todo->categories();
810 QString cat = categories.first(); 810 QString cat = categories.first();
811 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { 811 if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) {
812 pal = getPalette(); 812 pal = getPalette();
813 if (cat.isEmpty()) { 813 if (cat.isEmpty()) {
814 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); 814 pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor);
815 } else { 815 } else {
816 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); 816 pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat)));
817 } 817 }
818 818
819 } else { 819 } else {
820 if (cat.isEmpty()) { 820 if (cat.isEmpty()) {
821 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); 821 pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor);
822 } else { 822 } else {
823 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); 823 pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)));
824 } 824 }
825 } 825 }
826 826
827 } else { 827 } else {
828 pal = mStandardPalette ; 828 pal = mStandardPalette ;
829 } 829 }
830 item->setPalette( pal ); 830 item->setPalette( pal );
831 item->setRecur( todo->recurrence()->doesRecur() ); 831 item->setRecur( todo->recurrence()->doesRecur() );
832 item->setAlarm( todo->isAlarmEnabled() ); 832 item->setAlarm( todo->isAlarmEnabled() );
833 item->setMoreInfo( todo->description().length() > 0 ); 833 item->setMoreInfo( todo->description().length() > 0 );
834 insertItem( item , count()); 834 insertItem( item , count());
835#ifdef DESKTOP_VERSION 835#ifdef DESKTOP_VERSION
836 mToolTip.append( text ); 836 mToolTip.append( text );
837#endif 837#endif
838} 838}
839void MonthViewCell::repaintfinishUpdateCell() 839void MonthViewCell::repaintfinishUpdateCell()
840{ 840{
841 MonthViewItem *mitem = (MonthViewItem*) firstItem (); 841 MonthViewItem *mitem = (MonthViewItem*) firstItem ();
842 while ( mitem ) { 842 while ( mitem ) {
843 mitem->setBlockRepaint( false ); 843 mitem->setBlockRepaint( false );
844 updateItem ( mitem ); 844 updateItem ( mitem );
845 mitem = (MonthViewItem *)mitem->next(); 845 mitem = (MonthViewItem *)mitem->next();
846 } 846 }
847} 847}
848void MonthViewCell::finishUpdateCell() 848void MonthViewCell::finishUpdateCell()
849{ 849{
850 850
851 851
852 852
853#ifdef DESKTOP_VERSION 853#ifdef DESKTOP_VERSION
854 if (mToolTip.count() > 0 ) { 854 if (mToolTip.count() > 0 ) {
855 mToolTip.sort(); 855 mToolTip.sort();
856 QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),""); 856 QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),"");
857 } 857 }
858#endif 858#endif
859 //sort(); 859 //sort();
860 //setMyPalette(); 860 //setMyPalette();
861 setMyPalette(); 861 setMyPalette();
862 862
863 resizeEvent( 0 ); 863 resizeEvent( 0 );
864 864
865} 865}
866void MonthViewCell::updateCell() 866void MonthViewCell::updateCell()
867{ 867{
868 if ( !mMonthView->isUpdatePossible() ) 868 if ( !mMonthView->isUpdatePossible() )
869 return; 869 return;
870 startUpdateCell(); 870 startUpdateCell();
871 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 871 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
872 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true ); 872 QPtrList<Event> events = mMonthView->calendar()->events( mDate, true );
873 Event *event; 873 Event *event;
874 for( event = events.first(); event; event = events.next() ) { // for event 874 for( event = events.first(); event; event = events.next() ) { // for event
875 insertEvent(event); 875 insertEvent(event);
876 } 876 }
877 // insert due todos 877 // insert due todos
878 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate ); 878 QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate );
879 Todo *todo; 879 Todo *todo;
880 for(todo = todos.first(); todo; todo = todos.next()) { 880 for(todo = todos.first(); todo; todo = todos.next()) {
881 insertTodo( todo ); 881 insertTodo( todo );
882 } 882 }
883 finishUpdateCell(); 883 finishUpdateCell();
884 // if ( isVisible()) 884 // if ( isVisible())
885 //qApp->processEvents(); 885 //qApp->processEvents();
886} 886}
887 887
888void MonthViewCell::updateConfig( bool bigFont ) // = false 888void MonthViewCell::updateConfig( bool bigFont ) // = false
889{ 889{
890 890
891 if ( bigFont ) { 891 if ( bigFont ) {
892 QFont fo = KOPrefs::instance()->mMonthViewFont; 892 QFont fo = KOPrefs::instance()->mMonthViewFont;
893 int ps = fo.pointSize() + 2; 893 int ps = fo.pointSize() + 2;
894 if ( ps < 18 ) 894 if ( ps < 18 )
895 ps += 2; 895 ps += 2;
896 fo.setPointSize( ps ); 896 fo.setPointSize( ps );
897 setFont( fo ); 897 setFont( fo );
898 } else 898 } else
899 setFont( KOPrefs::instance()->mMonthViewFont ); 899 setFont( KOPrefs::instance()->mMonthViewFont );
900 900
901 QFontMetrics fm( font() ); 901 QFontMetrics fm( font() );
902 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); 902 mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 );
903 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); 903 mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 );
904 mHolidayPalette = mStandardPalette; 904 mHolidayPalette = mStandardPalette;
905 mPrimaryPalette = mStandardPalette; 905 mPrimaryPalette = mStandardPalette;
906 mNonPrimaryPalette = mStandardPalette; 906 mNonPrimaryPalette = mStandardPalette;
907 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { 907 if ( KOPrefs::instance()->mMonthViewUsesDayColors ) {
908 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); 908 mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor );
909 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); 909 mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor );
910 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); 910 mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark());
911 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); 911 mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark());
912 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); 912 mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor);
913 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); 913 mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor);
914 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); 914 mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark());
915 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); 915 mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor);
916 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); 916 mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor);
917 } 917 }
918 //updateCell(); 918 //updateCell();
919} 919}
920 920
921void MonthViewCell::enableScrollBars( bool enabled ) 921void MonthViewCell::enableScrollBars( bool enabled )
922{ 922{
923 923
924 return; 924 return;
925 if ( enabled ) { 925 if ( enabled ) {
926 QListBoxItem *fi = firstItem (); 926 QListBoxItem *fi = firstItem ();
927 if (fi ) { 927 if (fi ) {
928 int ihei = fi->height( this ); 928 int ihei = fi->height( this );
929 int hei = numRows () * ihei; 929 int hei = numRows () * ihei;
930 if ( hei < height() - horizontalScrollBar()->height () ) { 930 if ( hei < height() - horizontalScrollBar()->height () ) {
931 setVScrollBarMode(QScrollView::AlwaysOff); 931 setVScrollBarMode(QScrollView::AlwaysOff);
932 } 932 }
933 else 933 else
934 setVScrollBarMode(QScrollView::Auto); 934 setVScrollBarMode(QScrollView::Auto);
935 if ( ihei *3 > height() ) { 935 if ( ihei *3 > height() ) {
936 setHScrollBarMode(QScrollView::AlwaysOff); 936 setHScrollBarMode(QScrollView::AlwaysOff);
937 } 937 }
938 else { 938 else {
939 setHScrollBarMode(QScrollView::Auto); 939 setHScrollBarMode(QScrollView::Auto);
940 } 940 }
941 } else { 941 } else {
942 setVScrollBarMode(QScrollView::Auto); 942 setVScrollBarMode(QScrollView::Auto);
943 setHScrollBarMode(QScrollView::Auto); 943 setHScrollBarMode(QScrollView::Auto);
944 } 944 }
945 } else { 945 } else {
946 setVScrollBarMode(QScrollView::AlwaysOff); 946 setVScrollBarMode(QScrollView::AlwaysOff);
947 setHScrollBarMode(QScrollView::AlwaysOff); 947 setHScrollBarMode(QScrollView::AlwaysOff);
948 } 948 }
949} 949}
950 950
951Incidence *MonthViewCell::selectedIncidence() 951Incidence *MonthViewCell::selectedIncidence()
952{ 952{
953 int index = currentItem(); 953 int index = currentItem();
954 if ( index < 0 ) return 0; 954 if ( index < 0 ) return 0;
955 955
956 MonthViewItem *mitem = 956 MonthViewItem *mitem =
957 static_cast<MonthViewItem *>( item( index ) ); 957 static_cast<MonthViewItem *>( item( index ) );
958 958
959 if ( !mitem ) return 0; 959 if ( !mitem ) return 0;
960 960
961 return mitem->incidence(); 961 return mitem->incidence();
962} 962}
963 963
964QDate MonthViewCell::selectedIncidenceDate() 964QDate MonthViewCell::selectedIncidenceDate()
965{ 965{
966 QDate qd; 966 QDate qd;
967 int index = currentItem(); 967 int index = currentItem();
968 if ( index < 0 ) return qd; 968 if ( index < 0 ) return qd;
969 969
970 MonthViewItem *mitem = 970 MonthViewItem *mitem =
971 static_cast<MonthViewItem *>( item( index ) ); 971 static_cast<MonthViewItem *>( item( index ) );
972 972
973 if ( !mitem ) return qd; 973 if ( !mitem ) return qd;
974 974
975 return mitem->incidenceDate(); 975 return mitem->incidenceDate();
976} 976}
977 977
978void MonthViewCell::deselect() 978void MonthViewCell::deselect()
979{ 979{
980 clearSelection(); 980 clearSelection();
981 enableScrollBars( false ); 981 enableScrollBars( false );
982 // updateCell(); 982 // updateCell();
983} 983}
984void MonthViewCell::select() 984void MonthViewCell::select()
985{ 985{
986 ;// updateCell(); 986 ;// updateCell();
987} 987}
988 988
989void MonthViewCell::resizeEvent ( QResizeEvent * e ) 989void MonthViewCell::resizeEvent ( QResizeEvent * e )
990{ 990{
991 if ( !mMonthView->isUpdatePossible() ) 991 if ( !mMonthView->isUpdatePossible() )
992 return; 992 return;
993 //qDebug("++++++++++++++MonthViewCell::resizeEvent %d %d ", width(), height()); 993 //qDebug("++++++++++++++MonthViewCell::resizeEvent %d %d ", width(), height());
994 deselect(); 994 deselect();
995 mLabel->setMaximumHeight( height() - lineWidth()*2 ); 995 mLabel->setMaximumHeight( height() - lineWidth()*2 );
996 996
997 QString text; 997 QString text;
998 mLabel->setText( text ); 998 mLabel->setText( text );
999 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; 999 bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog;
1000 if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { 1000 if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) {
1001 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " "; 1001 text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " ";
1002 mLabel->resize( mLabelBigSize ); 1002 mLabel->resize( mLabelBigSize );
1003 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 1003 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
1004 } else { 1004 } else {
1005 mLabel->resize( mLabelSize ); 1005 mLabel->resize( mLabelSize );
1006 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); 1006 text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) );
1007 } 1007 }
1008 mLabel->setText( text ); 1008 mLabel->setText( text );
1009 1009
1010 int size = height() - mLabel->height() - lineWidth()-1; 1010 int size = height() - mLabel->height() - lineWidth()-1;
1011 //qDebug("LW %d ", lineWidth()); 1011 //qDebug("LW %d ", lineWidth());
1012 if ( size > 0 ) 1012 if ( size > 0 )
1013 verticalScrollBar()->setMaximumHeight( size ); 1013 verticalScrollBar()->setMaximumHeight( size );
1014 size = width() - mLabel->width() -lineWidth()-1; 1014 size = width() - mLabel->width() -lineWidth()-1;
1015 if ( size > 0 ) 1015 if ( size > 0 )
1016 horizontalScrollBar()->setMaximumWidth( size ); 1016 horizontalScrollBar()->setMaximumWidth( size );
1017 mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() ); 1017 mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() );
1018 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 1018 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
1019 // mItemList->resize ( width(), height () ); 1019 // mItemList->resize ( width(), height () );
1020 if ( e ) 1020 if ( e )
1021 KNoScrollListBox::resizeEvent ( e ); 1021 KNoScrollListBox::resizeEvent ( e );
1022} 1022}
1023 1023
1024void MonthViewCell::defaultAction( QListBoxItem *item ) 1024void MonthViewCell::defaultAction( QListBoxItem *item )
1025{ 1025{
1026 1026
1027 if ( !item ) { 1027 if ( !item ) {
1028 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1028 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1029 emit newEventSignal( dt ); 1029 emit newEventSignal( dt );
1030 return; 1030 return;
1031 } 1031 }
1032 1032
1033 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1033 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1034 Incidence *incidence = eventItem->incidence(); 1034 Incidence *incidence = eventItem->incidence();
1035 if ( incidence ) mMonthView->defaultAction( incidence ); 1035 if ( incidence ) mMonthView->defaultAction( incidence );
1036} 1036}
1037void MonthViewCell::showDay() 1037void MonthViewCell::showDay()
1038{ 1038{
1039 emit showDaySignal( date() ); 1039 emit showDaySignal( date() );
1040} 1040}
1041void MonthViewCell::newEvent() 1041void MonthViewCell::newEvent()
1042{ 1042{
1043 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1043 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1044 emit newEventSignal( dt ); 1044 emit newEventSignal( dt );
1045} 1045}
1046void MonthViewCell::cellClicked( QListBoxItem *item ) 1046void MonthViewCell::cellClicked( QListBoxItem *item )
1047{ 1047{
1048 mMonthView->setSelectedCell( this ); 1048 mMonthView->setSelectedCell( this );
1049 if ( item == 0 ) { 1049 if ( item == 0 ) {
1050 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1050 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1051 emit newEventSignal( dt ); 1051 emit newEventSignal( dt );
1052 return; 1052 return;
1053 } 1053 }
1054 1054
1055} 1055}
1056 1056
1057void MonthViewCell::contextMenu( QListBoxItem *item ) 1057void MonthViewCell::contextMenu( QListBoxItem *item )
1058{ 1058{
1059 mMonthView->setPopupCell( this ); 1059 mMonthView->setPopupCell( this );
1060 if ( !item ) { 1060 if ( !item ) {
1061 mMonthView->showContextMenu( 0 ); 1061 mMonthView->showContextMenu( 0 );
1062 return; 1062 return;
1063 } 1063 }
1064 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1064 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1065 Incidence *incidence = eventItem->incidence(); 1065 Incidence *incidence = eventItem->incidence();
1066 if ( incidence ) mMonthView->showContextMenu( incidence ); 1066 if ( incidence ) mMonthView->showContextMenu( incidence );
1067} 1067}
1068 1068
1069void MonthViewCell::selection( QListBoxItem *item ) 1069void MonthViewCell::selection( QListBoxItem *item )
1070{ 1070{
1071 if ( !item ) return; 1071 if ( !item ) return;
1072 1072
1073 mMonthView->setSelectedCell( this ); 1073 mMonthView->setSelectedCell( this );
1074} 1074}
1075 1075
1076 1076
1077// ******************************************************************************* 1077// *******************************************************************************
1078// ******************************************************************************* 1078// *******************************************************************************
1079// ******************************************************************************* 1079// *******************************************************************************
1080 1080
1081 1081
1082KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) 1082KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
1083 : KOEventView( calendar, parent, name ), 1083 : KOEventView( calendar, parent, name ),
1084 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), 1084 mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
1085 mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) 1085 mWidthLongDayLabel( 0 ), mSelectedCell( 0 )
1086{ 1086{
1087 mFlagKeyPressed = false; 1087 mFlagKeyPressed = false;
1088 mShortDayLabelsM = false; 1088 mShortDayLabelsM = false;
1089 mShortDayLabelsW = false; 1089 mShortDayLabelsW = false;
1090 skipResize = false; 1090 skipResize = false;
1091 clPending = true; 1091 clPending = true;
1092 mPopupCell = 0; 1092 mPopupCell = 0;
1093 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" ); 1093 mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" );
1094 mWidStack = new QWidgetStack( this ); 1094 mWidStack = new QWidgetStack( this );
1095 QVBoxLayout* hb = new QVBoxLayout( this ); 1095 QVBoxLayout* hb = new QVBoxLayout( this );
1096 mMonthView = new QWidget( mWidStack ); 1096 mMonthView = new QWidget( mWidStack );
1097 mWeekView = new QWidget( mWidStack ); 1097 mWeekView = new QWidget( mWidStack );
1098#if QT_VERSION >= 0x030000 1098#if QT_VERSION >= 0x030000
1099 mWidStack->addWidget(mMonthView ); 1099 mWidStack->addWidget(mMonthView );
1100 mWidStack->addWidget(mWeekView ); 1100 mWidStack->addWidget(mWeekView );
1101#else 1101#else
1102 mWidStack->addWidget( mMonthView, 1 ); 1102 mWidStack->addWidget( mMonthView, 1 );
1103 mWidStack->addWidget( mWeekView , 1 ); 1103 mWidStack->addWidget( mWeekView , 1 );
1104#endif 1104#endif
1105 hb->addWidget( mNavigatorBar ); 1105 hb->addWidget( mNavigatorBar );
1106 hb->addWidget( mWidStack ); 1106 hb->addWidget( mWidStack );
1107 mShowWeekView = KOPrefs::instance()->mMonthViewWeek; 1107 mShowWeekView = KOPrefs::instance()->mMonthViewWeek;
1108 updatePossible = false; 1108 updatePossible = false;
1109 //updatePossible = true; 1109 //updatePossible = true;
1110 mCells.setAutoDelete( true ); 1110 mCells.setAutoDelete( true );
1111 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 1111 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
1112 mDayLabels.resize( mDaysPerWeek ); 1112 mDayLabels.resize( mDaysPerWeek );
1113 mDayLabelsW.resize( mDaysPerWeek ); 1113 mDayLabelsW.resize( mDaysPerWeek );
1114 QFont bfont = font(); 1114 QFont bfont = font();
1115 if ( QApplication::desktop()->width() < 650 ) { 1115 if ( QApplication::desktop()->width() < 650 ) {
1116 bfont.setPointSize( bfont.pointSize() - 2 ); 1116 bfont.setPointSize( bfont.pointSize() - 2 );
1117 } 1117 }
1118 bfont.setBold( true ); 1118 bfont.setBold( true );
1119 int i; 1119 int i;
1120 1120
1121 for( i = 0; i < mDaysPerWeek; i++ ) { 1121 for( i = 0; i < mDaysPerWeek; i++ ) {
1122 QLabel *label = new QLabel( mMonthView ); 1122 QLabel *label = new QLabel( mMonthView );
1123 label->setFont(bfont); 1123 label->setFont(bfont);
1124 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1124 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1125 label->setLineWidth(1); 1125 label->setLineWidth(1);
1126 label->setAlignment(AlignCenter); 1126 label->setAlignment(AlignCenter);
1127 mDayLabels.insert( i, label ); 1127 mDayLabels.insert( i, label );
1128 label = new QLabel( mWeekView ); 1128 label = new QLabel( mWeekView );
1129 label->setFont(bfont); 1129 label->setFont(bfont);
1130 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1130 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1131 label->setLineWidth(1); 1131 label->setLineWidth(1);
1132 label->setAlignment(AlignCenter); 1132 label->setAlignment(AlignCenter);
1133 mDayLabelsW.insert( i, label ); 1133 mDayLabelsW.insert( i, label );
1134 } 1134 }
1135 1135
1136 bfont.setBold( false ); 1136 bfont.setBold( false );
1137 mWeekLabels.resize( mNumWeeks+1 ); 1137 mWeekLabels.resize( mNumWeeks+1 );
1138 mWeekLabelsW.resize( 2 ); 1138 mWeekLabelsW.resize( 2 );
1139 for( i = 0; i < mNumWeeks+1; i++ ) { 1139 for( i = 0; i < mNumWeeks+1; i++ ) {
1140 KOWeekButton *label = new KOWeekButton( mMonthView ); 1140 KOWeekButton *label = new KOWeekButton( mMonthView );
1141 label->setFocusPolicy(NoFocus); 1141 label->setFocusPolicy(NoFocus);
1142 label->setFont(bfont); 1142 label->setFont(bfont);
1143 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 1143 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
1144 label->setFlat(true); 1144 label->setFlat(true);
1145 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 1145 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
1146 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1146 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1147 //label->setLineWidth(1); 1147 //label->setLineWidth(1);
1148 //label->setAlignment(AlignCenter); 1148 //label->setAlignment(AlignCenter);
1149 mWeekLabels.insert( i, label ); 1149 mWeekLabels.insert( i, label );
1150 } 1150 }
1151 mWeekLabels[mNumWeeks]->setText( i18n("W")); 1151 mWeekLabels[mNumWeeks]->setText( i18n("W"));
1152 mWeekLabels[mNumWeeks]->setFocusPolicy(WheelFocus); 1152 mWeekLabels[mNumWeeks]->setFocusPolicy(WheelFocus);
1153 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); 1153 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number"));
1154 1154
1155 for( i = 0; i < 1+1; i++ ) { 1155 for( i = 0; i < 1+1; i++ ) {
1156 KOWeekButton *label = new KOWeekButton( mWeekView ); 1156 KOWeekButton *label = new KOWeekButton( mWeekView );
1157 label->setFocusPolicy(NoFocus); 1157 label->setFocusPolicy(NoFocus);
1158 label->setFont(bfont); 1158 label->setFont(bfont);
1159 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 1159 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
1160 label->setFlat(true); 1160 label->setFlat(true);
1161 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 1161 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
1162 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 1162 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
1163 //label->setLineWidth(1); 1163 //label->setLineWidth(1);
1164 //label->setAlignment(AlignCenter); 1164 //label->setAlignment(AlignCenter);
1165 mWeekLabelsW.insert( i, label ); 1165 mWeekLabelsW.insert( i, label );
1166 } 1166 }
1167 mWeekLabelsW[1]->setText( i18n("W")); 1167 mWeekLabelsW[1]->setText( i18n("W"));
1168 mWeekLabelsW[1]->setFocusPolicy(WheelFocus); 1168 mWeekLabelsW[1]->setFocusPolicy(WheelFocus);
1169 1169
1170 1170
1171 int row, col; 1171 int row, col;
1172 mCells.resize( mNumCells ); 1172 mCells.resize( mNumCells );
1173 for( row = 0; row < mNumWeeks; ++row ) { 1173 for( row = 0; row < mNumWeeks; ++row ) {
1174 for( col = 0; col < mDaysPerWeek; ++col ) { 1174 for( col = 0; col < mDaysPerWeek; ++col ) {
1175 MonthViewCell *cell = new MonthViewCell( this, mMonthView ); 1175 MonthViewCell *cell = new MonthViewCell( this, mMonthView );
1176 mCells.insert( row * mDaysPerWeek + col, cell ); 1176 mCells.insert( row * mDaysPerWeek + col, cell );
1177 1177
1178 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 1178 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
1179 SLOT( defaultAction( Incidence * ) ) ); 1179 SLOT( defaultAction( Incidence * ) ) );
1180 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 1180 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
1181 SIGNAL( newEventSignal( QDateTime ) ) ); 1181 SIGNAL( newEventSignal( QDateTime ) ) );
1182 connect( cell, SIGNAL( showDaySignal( QDate ) ), 1182 connect( cell, SIGNAL( showDaySignal( QDate ) ),
1183 SIGNAL( showDaySignal( QDate ) ) ); 1183 SIGNAL( showDaySignal( QDate ) ) );
1184 connect( cell, SIGNAL( nextCell() ), 1184 connect( cell, SIGNAL( nextCell() ),
1185 SLOT( nextCell() ) ); 1185 SLOT( nextCell() ) );
1186 connect( cell, SIGNAL( prevCell() ), 1186 connect( cell, SIGNAL( prevCell() ),
1187 SLOT( prevCell() ) ); 1187 SLOT( prevCell() ) );
1188 } 1188 }
1189 } 1189 }
1190 mCellsW.resize( mDaysPerWeek ); 1190 mCellsW.resize( mDaysPerWeek );
1191 for( col = 0; col < mDaysPerWeek; ++col ) { 1191 for( col = 0; col < mDaysPerWeek; ++col ) {
1192 MonthViewCell *cell = new MonthViewCell( this, mWeekView ); 1192 MonthViewCell *cell = new MonthViewCell( this, mWeekView );
1193 mCellsW.insert( col, cell ); 1193 mCellsW.insert( col, cell );
1194 1194
1195 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 1195 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
1196 SLOT( defaultAction( Incidence * ) ) ); 1196 SLOT( defaultAction( Incidence * ) ) );
1197 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 1197 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
1198 SIGNAL( newEventSignal( QDateTime ) ) ); 1198 SIGNAL( newEventSignal( QDateTime ) ) );
1199 connect( cell, SIGNAL( showDaySignal( QDate ) ), 1199 connect( cell, SIGNAL( showDaySignal( QDate ) ),
1200 SIGNAL( showDaySignal( QDate ) ) ); 1200 SIGNAL( showDaySignal( QDate ) ) );
1201 connect( cell, SIGNAL( nextCell() ), 1201 connect( cell, SIGNAL( nextCell() ),
1202 SLOT( nextCell() ) ); 1202 SLOT( nextCell() ) );
1203 connect( cell, SIGNAL( prevCell() ), 1203 connect( cell, SIGNAL( prevCell() ),
1204 SLOT( prevCell() ) ); 1204 SLOT( prevCell() ) );
1205 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); 1205 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont );
1206 } 1206 }
1207 1207
1208 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); 1208 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) );
1209 mContextMenu = eventPopup(); 1209 mContextMenu = eventPopup();
1210 mContextMenu->addAdditionalItem(QIconSet(QPixmap()), 1210 mContextMenu->addAdditionalItem(QIconSet(QPixmap()),
1211 i18n("New Event..."),this, 1211 i18n("New Event..."),this,
1212 SLOT(slotNewEvent()),false); 1212 SLOT(slotNewEvent()),false);
1213 mContextMenu->addAdditionalItem(QIconSet(QPixmap()), 1213 mContextMenu->addAdditionalItem(QIconSet(QPixmap()),
1214 i18n("New Todo..."),this, 1214 i18n("New Todo..."),this,
1215 SLOT(slotNewTodo()),false); 1215 SLOT(slotNewTodo()),false);
1216 mContextMenu->addAdditionalItem(QIconSet(QPixmap()), 1216 mContextMenu->addAdditionalItem(QIconSet(QPixmap()),
1217 i18n("Journal"),this, 1217 i18n("Journal"),this,
1218 SLOT(slotEditJournal()),false); 1218 SLOT(slotEditJournal()),false);
1219 1219
1220 1220
1221 1221
1222 QString pathString = ""; 1222 QString pathString = "";
1223 if ( !KOPrefs::instance()->mToolBarMiniIcons ) { 1223 if ( !KOPrefs::instance()->mToolBarMiniIcons ) {
1224 if ( QApplication::desktop()->width() < 480 ) 1224 if ( QApplication::desktop()->width() < 480 )
1225 pathString += "icons16/"; 1225 pathString += "icons16/";
1226 } else 1226 } else
1227 pathString += "iconsmini/"; 1227 pathString += "iconsmini/";
1228 mNewItemMenu = new QPopupMenu( this ); 1228 mNewItemMenu = new QPopupMenu( this );
1229 mNewItemMenu->insertItem( SmallIcon( pathString +"newevent" ), i18n("New Event..."),this, SLOT(slotNewEvent())); 1229 mNewItemMenu->insertItem( SmallIcon( pathString +"newevent" ), i18n("New Event..."),this, SLOT(slotNewEvent()));
1230 mNewItemMenu->insertItem( SmallIcon( pathString +"newtodo" ),i18n("New Todo..."),this,SLOT(slotNewTodo()),false); 1230 mNewItemMenu->insertItem( SmallIcon( pathString +"newtodo" ),i18n("New Todo..."),this,SLOT(slotNewTodo()),false);
1231 mNewItemMenu->insertItem( SmallIcon( pathString +"journal" ),i18n("Journal"),this,SLOT(slotEditJournal()),false); 1231 mNewItemMenu->insertItem( SmallIcon( pathString +"journal" ),i18n("Journal"),this,SLOT(slotEditJournal()),false);
1232 1232
1233 // updateConfig(); //useless here... 1233 // updateConfig(); //useless here...
1234 // ... but we need mWidthLongDayLabel computed 1234 // ... but we need mWidthLongDayLabel computed
1235 QFontMetrics fontmetric(mDayLabels[0]->font()); 1235 QFontMetrics fontmetric(mDayLabels[0]->font());
1236 mWidthLongDayLabel = 0; 1236 mWidthLongDayLabel = 0;
1237 for (int i = 0; i < 7; i++) { 1237 for (int i = 0; i < 7; i++) {
1238 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 1238 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
1239 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 1239 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
1240 } 1240 }
1241 1241
1242 //mWeekLabels[mNumWeeks]->setText( i18n("W")); 1242 //mWeekLabels[mNumWeeks]->setText( i18n("W"));
1243 1243
1244#if 0 1244#if 0
1245 if ( mShowWeekView ) 1245 if ( mShowWeekView )
1246 mWidStack->raiseWidget( mWeekView ); 1246 mWidStack->raiseWidget( mWeekView );
1247 else 1247 else
1248 mWidStack->raiseWidget( mMonthView ); 1248 mWidStack->raiseWidget( mMonthView );
1249#endif 1249#endif
1250 1250
1251 emit incidenceSelected( 0 ); 1251 emit incidenceSelected( 0 );
1252 1252
1253 mComputeLayoutTimer = new QTimer( this ); 1253 mComputeLayoutTimer = new QTimer( this );
1254 connect (mComputeLayoutTimer ,SIGNAL(timeout()), this, SLOT ( slotComputeLayout())); 1254 connect (mComputeLayoutTimer ,SIGNAL(timeout()), this, SLOT ( slotComputeLayout()));
1255 1255
1256 1256
1257#ifndef DESKTOP_VERSION 1257#ifndef DESKTOP_VERSION
1258 resize( QApplication::desktop()->size() ); 1258 resize( QApplication::desktop()->size() );
1259#else 1259#else
1260 resize(640, 480 ); 1260 resize(640, 480 );
1261 updatePossible = true; 1261 updatePossible = true;
1262#endif 1262#endif
1263 computeLayout(); 1263 computeLayout();
1264 1264
1265 if ( mShowWeekView ) 1265 if ( mShowWeekView )
1266 mWidStack->raiseWidget( mWeekView ); 1266 mWidStack->raiseWidget( mWeekView );
1267 else 1267 else
1268 mWidStack->raiseWidget( mMonthView ); 1268 mWidStack->raiseWidget( mMonthView );
1269} 1269}
1270 1270
1271KOMonthView::~KOMonthView() 1271KOMonthView::~KOMonthView()
1272{ 1272{
1273 delete mContextMenu; 1273 delete mContextMenu;
1274} 1274}
1275 1275
1276void KOMonthView::selectInternalWeekNum ( int n ) 1276void KOMonthView::selectInternalWeekNum ( int n )
1277{ 1277{
1278 switchView(); 1278 switchView();
1279 if ( !KOPrefs::instance()->mMonthViewWeek ) 1279 if ( !KOPrefs::instance()->mMonthViewWeek )
1280 emit selectMonth (); 1280 emit selectMonth ();
1281 else 1281 else
1282 emit selectWeekNum ( n ); 1282 emit selectWeekNum ( n );
1283} 1283}
1284 1284
1285int KOMonthView::currentWeek() 1285int KOMonthView::currentWeek()
1286{ 1286{
1287 if ( mShowWeekView ) 1287 if ( mShowWeekView )
1288 return mWeekLabelsW[0]->getWeekNum(); 1288 return mWeekLabelsW[0]->getWeekNum();
1289 return mWeekLabels[0]->getWeekNum(); 1289 return mWeekLabels[0]->getWeekNum();
1290} 1290}
1291void KOMonthView::switchView() 1291void KOMonthView::switchView()
1292{ 1292{
1293 if ( selectedCell( ) ) 1293 if ( selectedCell( ) )
1294 selectedCell()->deselect(); 1294 selectedCell()->deselect();
1295 mShowWeekView = !mShowWeekView; 1295 mShowWeekView = !mShowWeekView;
1296 KOPrefs::instance()->mMonthViewWeek = mShowWeekView; 1296 KOPrefs::instance()->mMonthViewWeek = mShowWeekView;
1297 if ( clPending ) { 1297 if ( clPending ) {
1298 computeLayout(); 1298 computeLayout();
1299 updateConfig(); 1299 updateConfig();
1300 } 1300 }
1301 if ( mShowWeekView ) 1301 if ( mShowWeekView )
1302 mWidStack->raiseWidget( mWeekView ); 1302 mWidStack->raiseWidget( mWeekView );
1303 else 1303 else
1304 mWidStack->raiseWidget( mMonthView ); 1304 mWidStack->raiseWidget( mMonthView );
1305 clPending = false; 1305 clPending = false;
1306} 1306}
1307 1307
1308int KOMonthView::maxDatesHint() 1308int KOMonthView::maxDatesHint()
1309{ 1309{
1310 return mNumCells; 1310 return mNumCells;
1311} 1311}
1312 1312
1313int KOMonthView::currentDateCount() 1313int KOMonthView::currentDateCount()
1314{ 1314{
1315 return mNumCells; 1315 return mNumCells;
1316} 1316}
1317 1317
1318QPtrList<Incidence> KOMonthView::selectedIncidences() 1318QPtrList<Incidence> KOMonthView::selectedIncidences()
1319{ 1319{
1320 QPtrList<Incidence> selected; 1320 QPtrList<Incidence> selected;
1321 1321
1322 if ( mSelectedCell ) { 1322 if ( mSelectedCell ) {
1323 Incidence *incidence = mSelectedCell->selectedIncidence(); 1323 Incidence *incidence = mSelectedCell->selectedIncidence();
1324 if ( incidence ) selected.append( incidence ); 1324 if ( incidence ) selected.append( incidence );
1325 } 1325 }
1326 1326
1327 return selected; 1327 return selected;
1328} 1328}
1329 1329
1330DateList KOMonthView::selectedDates() 1330DateList KOMonthView::selectedDates()
1331{ 1331{
1332 DateList selected; 1332 DateList selected;
1333 1333
1334 if ( mSelectedCell ) { 1334 if ( mSelectedCell ) {
1335 QDate qd = mSelectedCell->selectedIncidenceDate(); 1335 QDate qd = mSelectedCell->selectedIncidenceDate();
1336 if ( qd.isValid() ) selected.append( qd ); 1336 if ( qd.isValid() ) selected.append( qd );
1337 } 1337 }
1338 1338
1339 return selected; 1339 return selected;
1340} 1340}
1341 1341
1342void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, 1342void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd,
1343 const QDate &td) 1343 const QDate &td)
1344{ 1344{
1345#ifndef KORG_NOPRINTER 1345#ifndef KORG_NOPRINTER
1346 calPrinter->preview(CalPrinter::Month, fd, td); 1346 calPrinter->preview(CalPrinter::Month, fd, td);
1347#endif 1347#endif
1348} 1348}
1349 1349
1350void KOMonthView::updateConfig() 1350void KOMonthView::updateConfig()
1351{ 1351{
1352 1352
1353 int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 1353 int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
1354 1354
1355 if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) { 1355 if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) {
1356 mWeekStartsMonday = true; 1356 mWeekStartsMonday = true;
1357 } 1357 }
1358 QFontMetrics fontmetric(mDayLabels[0]->font()); 1358 QFontMetrics fontmetric(mDayLabels[0]->font());
1359 mWidthLongDayLabel = 0; 1359 mWidthLongDayLabel = 0;
1360 1360
1361 for (int i = 0; i < 7; i++) { 1361 for (int i = 0; i < 7; i++) {
1362 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 1362 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
1363 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 1363 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
1364 } 1364 }
1365 bool temp = mShowSatSunComp ; 1365 bool temp = mShowSatSunComp ;
1366 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 1366 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
1367 if ( ! mShowWeekView ) { 1367 if ( ! mShowWeekView ) {
1368 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) 1368 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog )
1369 computeLayout(); 1369 computeLayout();
1370 } 1370 }
1371 updateDayLabels(); 1371 updateDayLabels();
1372 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); 1372 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks);
1373 //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; 1373 //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks;
1374 //resizeEvent( 0 ); 1374 //resizeEvent( 0 );
1375 for (uint i = 0; i < mCells.count(); ++i) { 1375 for (uint i = 0; i < mCells.count(); ++i) {
1376 mCells[i]->updateConfig(); 1376 mCells[i]->updateConfig();
1377 } 1377 }
1378 1378
1379 for (uint i = 0; i < mCellsW.count(); ++i) { 1379 for (uint i = 0; i < mCellsW.count(); ++i) {
1380 mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont); 1380 mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont);
1381 } 1381 }
1382#ifdef DESKTOP_VERSION 1382#ifdef DESKTOP_VERSION
1383 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips); 1383 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips);
1384#endif 1384#endif
1385 updateView(); 1385 updateView();
1386} 1386}
1387 1387
1388void KOMonthView::updateDayLabels() 1388void KOMonthView::updateDayLabels()
1389{ 1389{
1390 1390
1391 QPtrVector<QLabel> *mDayLabelsT; 1391 QPtrVector<QLabel> *mDayLabelsT;
1392 1392
1393 mDayLabelsT = &mDayLabelsW; 1393 mDayLabelsT = &mDayLabelsW;
1394 for (int i = 0; i < 7; i++) { 1394 for (int i = 0; i < 7; i++) {
1395 { 1395 {
1396 bool show = mShortDayLabelsW; 1396 bool show = mShortDayLabelsW;
1397 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) 1397 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() )
1398 show = true; 1398 show = true;
1399 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 1399 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
1400 } 1400 }
1401 } 1401 }
1402 mDayLabelsT = &mDayLabels; 1402 mDayLabelsT = &mDayLabels;
1403 for (int i = 0; i < 7; i++) { 1403 for (int i = 0; i < 7; i++) {
1404 if (KGlobal::locale()->weekStartsMonday() || KOPrefs::instance()->mMonthViewSatSunTog ) { 1404 if (KGlobal::locale()->weekStartsMonday() || KOPrefs::instance()->mMonthViewSatSunTog ) {
1405 bool show = mShortDayLabelsM; 1405 bool show = mShortDayLabelsM;
1406 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) 1406 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() )
1407 show = true; 1407 show = true;
1408 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 1408 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
1409 } else { 1409 } else {
1410 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM)); 1410 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM));
1411 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM)); 1411 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM));
1412 1412
1413 } 1413 }
1414 } 1414 }
1415 1415
1416} 1416}
1417 1417
1418void KOMonthView::clearList() 1418void KOMonthView::clearList()
1419{ 1419{
1420 unsigned int i; 1420 unsigned int i;
1421 for( i = 0; i < mCells.size(); ++i ) { 1421 for( i = 0; i < mCells.size(); ++i ) {
1422 mCells[i]->clear(); 1422 mCells[i]->clear();
1423 } 1423 }
1424 for( i = 0; i < mCellsW.size(); ++i ) { 1424 for( i = 0; i < mCellsW.size(); ++i ) {
1425 mCellsW[i]->clear(); 1425 mCellsW[i]->clear();
1426 } 1426 }
1427} 1427}
1428void KOMonthView::showDates(const QDate &start, const QDate &) 1428void KOMonthView::showDates(const QDate &start, const QDate &)
1429{ 1429{
1430 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; 1430 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl;
1431 1431
1432 QPtrVector<MonthViewCell> *cells; 1432 QPtrVector<MonthViewCell> *cells;
1433 QPtrVector<QLabel> *dayLabels; 1433 QPtrVector<QLabel> *dayLabels;
1434 QPtrVector<KOWeekButton> *weekLabels; 1434 QPtrVector<KOWeekButton> *weekLabels;
1435 int weekNum = 6; 1435 int weekNum = 6;
1436 mStartDate = start; 1436 mStartDate = start;
1437 if ( mShowWeekView ) { 1437 if ( mShowWeekView ) {
1438 weekNum = 1; 1438 weekNum = 1;
1439 cells = &mCellsW; 1439 cells = &mCellsW;
1440 dayLabels = &mDayLabelsW; 1440 dayLabels = &mDayLabelsW;
1441 weekLabels = &mWeekLabelsW; 1441 weekLabels = &mWeekLabelsW;
1442 if ( !KGlobal::locale()->weekStartsMonday() ) { 1442 if ( !KGlobal::locale()->weekStartsMonday() ) {
1443 mStartDate = mStartDate.addDays( 1 ); 1443 mStartDate = mStartDate.addDays( 1 );
1444 } 1444 }
1445 } else { 1445 } else {
1446 cells = &mCells; 1446 cells = &mCells;
1447 dayLabels = &mDayLabels; 1447 dayLabels = &mDayLabels;
1448 weekLabels = &mWeekLabels; 1448 weekLabels = &mWeekLabels;
1449 } 1449 }
1450 1450
1451 int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 1451 int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
1452 1452
1453 if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) { 1453 if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) {
1454 mWeekStartsMonday = true; 1454 mWeekStartsMonday = true;
1455 } 1455 }
1456 int startWeekDay = mWeekStartsMonday ? 1 : 7; 1456 int startWeekDay = mWeekStartsMonday ? 1 : 7;
1457 1457
1458 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { 1458 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) {
1459 mStartDate = mStartDate.addDays( -1 ); 1459 mStartDate = mStartDate.addDays( -1 );
1460 } 1460 }
1461 bool primary = false; 1461 bool primary = false;
1462 uint i; 1462 uint i;
1463 for( i = 0; i < (*cells).size(); ++i ) { 1463 for( i = 0; i < (*cells).size(); ++i ) {
1464 QDate date = mStartDate.addDays( i ); 1464 QDate date = mStartDate.addDays( i );
1465 (*cells)[i]->setDate( date ); 1465 (*cells)[i]->setDate( date );
1466 1466
1467#ifndef KORG_NOPLUGINS 1467#ifndef KORG_NOPLUGINS
1468 // add holiday, if present 1468 // add holiday, if present
1469 QString hstring(KOCore::self()->holiday(date)); 1469 QString hstring(KOCore::self()->holiday(date));
1470 (*cells)[i]->setHoliday( hstring ); 1470 (*cells)[i]->setHoliday( hstring );
1471#endif 1471#endif
1472 1472
1473 } 1473 }
1474 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); 1474 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 );
1475 for( i = 0; i < weekNum; ++i ) { 1475 for( i = 0; i < weekNum; ++i ) {
1476 int wno; 1476 int wno;
1477 // remember, according to ISO 8601, the first week of the year is the 1477 // remember, according to ISO 8601, the first week of the year is the
1478 // first week that contains a thursday. Thus we must subtract off 4, 1478 // first week that contains a thursday. Thus we must subtract off 4,
1479 // not just 1. 1479 // not just 1.
1480 int dayOfYear = date.dayOfYear(); 1480 int dayOfYear = date.dayOfYear();
1481 if (dayOfYear % 7 != 0) 1481 if (dayOfYear % 7 != 0)
1482 wno = dayOfYear / 7 + 1; 1482 wno = dayOfYear / 7 + 1;
1483 else 1483 else
1484 wno =dayOfYear / 7; 1484 wno =dayOfYear / 7;
1485 (*weekLabels)[i]->setWeekNum( wno ); 1485 (*weekLabels)[i]->setWeekNum( wno );
1486 date = date.addDays( 7 ); 1486 date = date.addDays( 7 );
1487 } 1487 }
1488 updateView(); 1488 updateView();
1489} 1489}
1490 1490
1491void KOMonthView::showEvents(QPtrList<Event>) 1491void KOMonthView::showEvents(QPtrList<Event>)
1492{ 1492{
1493 qDebug("KOMonthView::selectEvents is not implemented yet. "); 1493 qDebug("KOMonthView::selectEvents is not implemented yet. ");
1494} 1494}
1495 1495
1496void KOMonthView::changeEventDisplay(Event *, int) 1496void KOMonthView::changeEventDisplay(Event *, int)
1497{ 1497{
1498 // this should be re-written to be much more efficient, but this 1498 // this should be re-written to be much more efficient, but this
1499 // quick-and-dirty-hack gets the job done for right now. 1499 // quick-and-dirty-hack gets the job done for right now.
1500 //qDebug("KOMonthView::changeEventDisplay "); 1500 //qDebug("KOMonthView::changeEventDisplay ");
1501 updateView(); 1501 updateView();
1502} 1502}
1503 1503
1504void KOMonthView::updateView() 1504void KOMonthView::updateView()
1505{ 1505{
1506 1506
1507 if ( !updatePossible ) 1507 if ( !updatePossible )
1508 return; 1508 return;
1509 //qDebug("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU "); 1509 //qDebug("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU ");
1510 //QTime ti; 1510 //QTime ti;
1511 //ti.start(); 1511 //ti.start();
1512 clearSelection(); 1512 clearSelection();
1513 QPtrVector<MonthViewCell> *cells; 1513 QPtrVector<MonthViewCell> *cells;
1514 if ( mShowWeekView ) { 1514 if ( mShowWeekView ) {
1515 cells = &mCellsW; 1515 cells = &mCellsW;
1516 } else { 1516 } else {
1517 cells = &mCells; 1517 cells = &mCells;
1518 } 1518 }
1519#if 1 1519#if 1
1520 int i; 1520 int i;
1521 int timeSpan = (*cells).size()-1; 1521 int timeSpan = (*cells).size()-1;
1522 if ( KOPrefs::instance()->mMonthViewWeek ) 1522 if ( KOPrefs::instance()->mMonthViewWeek )
1523 timeSpan = 6; 1523 timeSpan = 6;
1524 for( i = 0; i < timeSpan + 1; ++i ) { 1524 for( i = 0; i < timeSpan + 1; ++i ) {
1525 (*cells)[i]->startUpdateCell(); 1525 (*cells)[i]->startUpdateCell();
1526 } 1526 }
1527 1527
1528 QPtrList<Event> events = calendar()->events(); 1528 QPtrList<Event> events = calendar()->events();
1529 Event *event; 1529 Event *event;
1530 QDateTime dt; 1530 QDateTime dt;
1531 bool ok; 1531 bool ok;
1532 QDate endDate = mStartDate.addDays( timeSpan ); 1532 QDate endDate = mStartDate.addDays( timeSpan );
1533 for( event = events.first(); event; event = events.next() ) { // for event 1533 for( event = events.first(); event; event = events.next() ) { // for event
1534 if ( event->doesRecur() ) { 1534 if ( event->doesRecur() ) {
1535 bool last; 1535 bool last;
1536 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); 1536 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
1537 QDateTime incidenceEnd; 1537 QDateTime incidenceEnd;
1538 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); 1538 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
1539 bool invalid = false; 1539 bool invalid = false;
1540 while( true ) { 1540 while( true ) {
1541 if ( incidenceStart.isValid() ) { 1541 if ( incidenceStart.isValid() ) {
1542 incidenceEnd = incidenceStart.addDays( eventlen ); 1542 incidenceEnd = incidenceStart.addDays( eventlen );
1543 int st = incidenceStart.date().daysTo( endDate ); 1543 int st = incidenceStart.date().daysTo( endDate );
1544 if ( st >= 0 ) { // start before timeend 1544 if ( st >= 0 ) { // start before timeend
1545 int end = mStartDate.daysTo( incidenceEnd.date() ); 1545 int end = mStartDate.daysTo( incidenceEnd.date() );
1546 if ( end >= 0 ) { // end after timestart --- got one! 1546 if ( end >= 0 ) { // end after timestart --- got one!
1547 //normalize 1547 //normalize
1548 st = timeSpan - st; 1548 st = timeSpan - st;
1549 if ( st < 0 ) st = 0; 1549 if ( st < 0 ) st = 0;
1550 if ( end > timeSpan ) end = timeSpan; 1550 if ( end > timeSpan ) end = timeSpan;
1551 int iii; 1551 int iii;
1552 //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); 1552 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
1553 for ( iii = st;iii<= end;++iii) 1553 for ( iii = st;iii<= end;++iii)
1554 (*cells)[iii]->insertEvent( event ); 1554 (*cells)[iii]->insertEvent( event );
1555 } 1555 }
1556 } 1556 }
1557 } else { 1557 } else {
1558 if ( invalid ) 1558 if ( invalid )
1559 break; 1559 break;
1560 invalid = true; 1560 invalid = true;
1561 //qDebug("invalid %s", event->summary().latin1()); 1561 //qDebug("invalid %s", event->summary().latin1());
1562 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; 1562 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
1563 } 1563 }
1564 if ( last ) 1564 if ( last )
1565 break; 1565 break;
1566 bool ok; 1566 bool ok;
1567 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); 1567 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
1568 if ( ! ok ) 1568 if ( ! ok )
1569 break; 1569 break;
1570 if ( incidenceStart.date() > endDate ) 1570 if ( incidenceStart.date() > endDate )
1571 break; 1571 break;
1572 } 1572 }
1573 } else { // no recur 1573 } else { // no recur
1574 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1574 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1575 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1575 if ( event->uid().left(15) == QString("last-syncEvent-") )
1576 continue; 1576 continue;
1577 int st = event->dtStart().date().daysTo( endDate ); 1577 int st = event->dtStart().date().daysTo( endDate );
1578 if ( st >= 0 ) { // start before timeend 1578 if ( st >= 0 ) { // start before timeend
1579 int end = mStartDate.daysTo( event->dtEnd().date() ); 1579 int end = mStartDate.daysTo( event->dtEnd().date() );
1580 if ( end >= 0 ) { // end after timestart --- got one! 1580 if ( end >= 0 ) { // end after timestart --- got one!
1581 //normalize 1581 //normalize
1582 st = timeSpan - st; 1582 st = timeSpan - st;
1583 if ( st < 0 ) st = 0; 1583 if ( st < 0 ) st = 0;
1584 if ( end > timeSpan ) end = timeSpan; 1584 if ( end > timeSpan ) end = timeSpan;
1585 int iii; 1585 int iii;
1586 for ( iii = st;iii<= end;++iii) 1586 for ( iii = st;iii<= end;++iii)
1587 (*cells)[iii]->insertEvent( event ); 1587 (*cells)[iii]->insertEvent( event );
1588 } 1588 }
1589 } 1589 }
1590 } 1590 }
1591 } 1591 }
1592 // insert due todos 1592 // insert due todos
1593 QPtrList<Todo> todos = calendar()->todos( ); 1593 QPtrList<Todo> todos = calendar()->todos( );
1594 Todo *todo; 1594 Todo *todo;
1595 for(todo = todos.first(); todo; todo = todos.next()) { 1595 for(todo = todos.first(); todo; todo = todos.next()) {
1596 //insertTodo( todo ); 1596 //insertTodo( todo );
1597 if ( todo->hasDueDate() ) { 1597 if ( todo->hasDueDate() ) {
1598 int day = mStartDate.daysTo( todo->dtDue().date() ); 1598 int day = mStartDate.daysTo( todo->dtDue().date() );
1599 if ( day >= 0 && day < timeSpan + 1) { 1599 if ( day >= 0 && day < timeSpan + 1) {
1600 (*cells)[day]->insertTodo( todo ); 1600 (*cells)[day]->insertTodo( todo );
1601 } 1601 }
1602 } 1602 }
1603 } 1603 }
1604 1604
1605 for( i = 0; i < timeSpan+1; ++i ) { 1605 for( i = 0; i < timeSpan+1; ++i ) {
1606 (*cells)[i]->finishUpdateCell(); 1606 (*cells)[i]->finishUpdateCell();
1607 } 1607 }
1608 processSelectionChange(); 1608 processSelectionChange();
1609 //qApp->processEvents(); 1609 //qApp->processEvents();
1610 for( i = 0; i < timeSpan+1; ++i ) { 1610 for( i = 0; i < timeSpan+1; ++i ) {
1611 (*cells)[i]->repaintfinishUpdateCell(); 1611 (*cells)[i]->repaintfinishUpdateCell();
1612 } 1612 }
1613 setKeyBFocus(); 1613 setKeyBFocus();
1614#else 1614#else
1615 // old code 1615 // old code
1616 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); 1616 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
1617 int i; 1617 int i;
1618 for( i = 0; i < (*cells).count(); ++i ) { 1618 for( i = 0; i < (*cells).count(); ++i ) {
1619 (*cells)[i]->updateCell(); 1619 (*cells)[i]->updateCell();
1620 } 1620 }
1621 1621
1622 //qDebug("KOMonthView::updateView() "); 1622 //qDebug("KOMonthView::updateView() ");
1623 processSelectionChange(); 1623 processSelectionChange();
1624 // qDebug("---------------------------------------------------------------------+ "); 1624 // qDebug("---------------------------------------------------------------------+ ");
1625 (*cells)[0]->setFocus(); 1625 (*cells)[0]->setFocus();
1626#endif 1626#endif
1627 1627
1628 //qDebug("update time %d ", ti.elapsed()); 1628 //qDebug("update time %d ", ti.elapsed());
1629} 1629}
1630 1630
1631void KOMonthView::setKeyBoardFocus() 1631void KOMonthView::setKeyBoardFocus()
1632{ 1632{
1633 //qDebug("KOMonthView::setKeyBoardFocus() "); 1633 //qDebug("KOMonthView::setKeyBoardFocus() ");
1634 bool shootAgain = false; 1634 bool shootAgain = false;
1635 if ( mShowWeekView ) { 1635 if ( mShowWeekView ) {
1636 shootAgain = !mWeekLabelsW[1]->hasFocus(); 1636 shootAgain = !mWeekLabelsW[1]->hasFocus();
1637 mWeekLabelsW[1]->setFocus(); 1637 mWeekLabelsW[1]->setFocus();
1638 } 1638 }
1639 else { 1639 else {
1640 shootAgain = !mWeekLabels[mNumWeeks]->hasFocus(); 1640 shootAgain = !mWeekLabels[mNumWeeks]->hasFocus();
1641 mWeekLabels[mNumWeeks]->setFocus(); 1641 mWeekLabels[mNumWeeks]->setFocus();
1642 } 1642 }
1643 if ( shootAgain ) { 1643 if ( shootAgain ) {
1644 QTimer::singleShot( 0, this, SLOT ( setKeyBFocus() ) ); 1644 QTimer::singleShot( 0, this, SLOT ( setKeyBFocus() ) );
1645 } 1645 }
1646} 1646}
1647void KOMonthView::setKeyBFocus() 1647void KOMonthView::setKeyBFocus()
1648{ 1648{
1649 //qDebug("KOMonthView::setKeyBFocus() "); 1649 //qDebug("KOMonthView::setKeyBFocus() ");
1650 QTimer::singleShot( 0, this, SLOT ( setKeyBoardFocus() ) ); 1650 QTimer::singleShot( 0, this, SLOT ( setKeyBoardFocus() ) );
1651} 1651}
1652void KOMonthView::resizeEvent(QResizeEvent * e) 1652void KOMonthView::resizeEvent(QResizeEvent * e)
1653{ 1653{
1654 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height()); 1654 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height());
1655 if ( isVisible() ) { 1655 if ( isVisible() ) {
1656 //qDebug("KOMonthView::isVisible "); 1656 //qDebug("KOMonthView::isVisible ");
1657 slotComputeLayout(); 1657 slotComputeLayout();
1658 } else 1658 } else
1659 mComputeLayoutTimer->start( 100 ); 1659 mComputeLayoutTimer->start( 100 );
1660} 1660}
1661 1661
1662void KOMonthView::slotComputeLayout() 1662void KOMonthView::slotComputeLayout()
1663{ 1663{
1664 mComputeLayoutTimer->stop(); 1664 mComputeLayoutTimer->stop();
1665 //qDebug("KOMonthView::Post - resizeEvent %d %d ", width(), height() ); 1665 //qDebug("KOMonthView::Post - resizeEvent %d %d ", width(), height() );
1666 computeLayout(); 1666 computeLayout();
1667 clPending = true; 1667 clPending = true;
1668 setKeyBFocus(); 1668 setKeyBFocus();
1669} 1669}
1670void KOMonthView::computeLayoutWeek() 1670void KOMonthView::computeLayoutWeek()
1671{ 1671{
1672 static int lastWid = 0; 1672 static int lastWid = 0;
1673 static int lastHei = 0; 1673 static int lastHei = 0;
1674 int daysToShow; 1674 int daysToShow;
1675 bool combinedSatSun = false; 1675 bool combinedSatSun = false;
1676 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1676 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
1677 daysToShow = 6; 1677 daysToShow = 6;
1678 combinedSatSun = true; 1678 combinedSatSun = true;
1679 } 1679 }
1680 int tWid = topLevelWidget()->size().width(); 1680 int tWid = topLevelWidget()->size().width();
1681 int tHei = topLevelWidget()->size().height(); 1681 int tHei = topLevelWidget()->size().height();
1682 1682
1683 int wid = width();//e 1683 int wid = width();//e
1684 int hei = height()-1-mNavigatorBar->height(); 1684 int hei = height()-1-mNavigatorBar->height();
1685 1685
1686 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) 1686 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei )
1687 return; 1687 return;
1688 1688
1689 if ( lastWid == width() && lastHei == height() ) { 1689 if ( lastWid == width() && lastHei == height() ) {
1690 //qDebug("KOListWeekView::No compute layout needed "); 1690 //qDebug("KOListWeekView::No compute layout needed ");
1691 return; 1691 return;
1692 } 1692 }
1693 lastWid = width(); 1693 lastWid = width();
1694 lastHei = height(); 1694 lastHei = height();
1695 1695
1696 1696
1697 if ( wid < hei ) 1697 if ( wid < hei )
1698 daysToShow = 2; 1698 daysToShow = 2;
1699 else 1699 else
1700 daysToShow = 3; 1700 daysToShow = 3;
1701 mShowSatSunComp = true; 1701 mShowSatSunComp = true;
1702 combinedSatSun = true; 1702 combinedSatSun = true;
1703 1703
1704 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ "); 1704 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ ");
1705 QFontMetrics fm ( mWeekLabels[0]->font() ); 1705 QFontMetrics fm ( mWeekLabels[0]->font() );
1706 int weeklabelwid = fm.width( "888" ); 1706 int weeklabelwid = fm.width( "888" );
1707 wid -= weeklabelwid; 1707 wid -= weeklabelwid;
1708 1708
1709 int colWid = wid / daysToShow; 1709 int colWid = wid / daysToShow;
1710 int lastCol = wid - ( colWid*6 ); 1710 int lastCol = wid - ( colWid*6 );
1711 int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); 1711 int dayLabelHei = mDayLabelsW[0]->sizeHint().height();
1712 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); 1712 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow );
1713 int colModulo = wid % daysToShow; 1713 int colModulo = wid % daysToShow;
1714 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; 1714 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1;
1715 //qDebug("rowmod %d ", rowModulo); 1715 //qDebug("rowmod %d ", rowModulo);
1716 int i; 1716 int i;
1717 int x,y,w,h; 1717 int x,y,w,h;
1718 x= 0; 1718 x= 0;
1719 y= 0; 1719 y= 0;
1720 w = colWid; 1720 w = colWid;
1721 h = dayLabelHei ; 1721 h = dayLabelHei ;
1722 for ( i = 0; i < 7; i++) { 1722 for ( i = 0; i < 7; i++) {
1723 if ( i && !( i % daysToShow) && i < 6) { 1723 if ( i && !( i % daysToShow) && i < 6) {
1724 y += hei/(5-daysToShow); 1724 y += hei/(5-daysToShow);
1725 x = 0; 1725 x = 0;
1726 w = colWid; 1726 w = colWid;
1727 } 1727 }
1728 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1728 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1729 ++w; 1729 ++w;
1730 } 1730 }
1731 if ( i >= 5 ) { 1731 if ( i >= 5 ) {
1732 int wi = width() - x - weeklabelwid; 1732 int wi = width() - x - weeklabelwid;
1733 if ( i == 5 ) { 1733 if ( i == 5 ) {
1734 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi/2+wi%2,h); 1734 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi/2+wi%2,h);
1735 } else { 1735 } else {
1736 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi,h); 1736 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi,h);
1737 } 1737 }
1738 x = x - w + wi - (wi/2 ); 1738 x = x - w + wi - (wi/2 );
1739 } 1739 }
1740 else { 1740 else {
1741 int wi = w; 1741 int wi = w;
1742 if ( !(( i+1) % daysToShow)) { 1742 if ( !(( i+1) % daysToShow)) {
1743 wi = width() - x - weeklabelwid; 1743 wi = width() - x - weeklabelwid;
1744 } 1744 }
1745 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi,h); 1745 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,wi,h);
1746 } 1746 }
1747 x += w; 1747 x += w;
1748 } 1748 }
1749 x= 0; 1749 x= 0;
1750 y= dayLabelHei; 1750 y= dayLabelHei;
1751 w = colWid; 1751 w = colWid;
1752 h = cellHei; 1752 h = cellHei;
1753 int max = 0; 1753 int max = 0;
1754 for ( i = 0; i < mCellsW.count(); ++i) { 1754 for ( i = 0; i < mCellsW.count(); ++i) {
1755 if ( i > 6 ) { 1755 if ( i > 6 ) {
1756 mCellsW[i]->hide(); 1756 mCellsW[i]->hide();
1757 continue; 1757 continue;
1758 } 1758 }
1759 1759
1760 w = colWid; 1760 w = colWid;
1761 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1761 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1762 ++w; 1762 ++w;
1763 } 1763 }
1764 if ( i == (daysToShow-1-rowModulo)*7) 1764 if ( i == (daysToShow-1-rowModulo)*7)
1765 ++h; 1765 ++h;
1766 1766
1767 if ( i >= 5 ) { 1767 if ( i >= 5 ) {
1768 if ( i ==5 ) { 1768 if ( i ==5 ) {
1769 max = h/2; 1769 max = h/2;
1770 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); 1770 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max );
1771 x -= w ;y += h/2; 1771 x -= w ;y += h/2;
1772 } else { 1772 } else {
1773 if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) { 1773 if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) {
1774 ++w; 1774 ++w;
1775 } 1775 }
1776 max = h-h/2; 1776 max = h-h/2;
1777 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); 1777 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max );
1778 y -= h/2; 1778 y -= h/2;
1779 } 1779 }
1780 } else { 1780 } else {
1781 max = h; 1781 max = h;
1782 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1782 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h );
1783 } 1783 }
1784 1784
1785 1785
1786 x += w; 1786 x += w;
1787 if ( x + w/2 > wid ) { 1787 if ( x + w/2 > wid ) {
1788 x = 0; 1788 x = 0;
1789 y += h+dayLabelHei ; 1789 y += h+dayLabelHei ;
1790 } 1790 }
1791 //mCellsW[i]->dateLabel()->setMaximumHeight( max - mCellsW[i]->lineWidth()*2 ); 1791 //mCellsW[i]->dateLabel()->setMaximumHeight( max - mCellsW[i]->lineWidth()*2 );
1792 } 1792 }
1793 y= dayLabelHei; 1793 y= dayLabelHei;
1794 h = cellHei ; 1794 h = cellHei ;
1795 mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); 1795 mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei);
1796 mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1796 mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1797 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1797 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1798 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1798 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1799 mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ; 1799 mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ;
1800 updateDayLabels(); 1800 updateDayLabels();
1801 //bool forceUpdate = !updatePossible; 1801 //bool forceUpdate = !updatePossible;
1802 updatePossible = true; 1802 updatePossible = true;
1803 //mWeekLabels[mNumWeeks]->setText( i18n("M")); 1803 //mWeekLabels[mNumWeeks]->setText( i18n("M"));
1804 //if ( forceUpdate ) 1804 //if ( forceUpdate )
1805 // updateView(); 1805 // updateView();
1806} 1806}
1807void KOMonthView::computeLayout() 1807void KOMonthView::computeLayout()
1808{ 1808{
1809 1809
1810 1810
1811 static int lastWid = 0; 1811 static int lastWid = 0;
1812 static int lastHei = 0; 1812 static int lastHei = 0;
1813 1813
1814 if ( mShowWeekView ){ 1814 if ( mShowWeekView ){
1815 computeLayoutWeek(); 1815 computeLayoutWeek();
1816 return; 1816 return;
1817 } 1817 }
1818 int daysToShow = 7; 1818 int daysToShow = 7;
1819 bool combinedSatSun = false; 1819 bool combinedSatSun = false;
1820 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1820 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
1821 daysToShow = 6; 1821 daysToShow = 6;
1822 combinedSatSun = true; 1822 combinedSatSun = true;
1823 } 1823 }
1824 int tWid = topLevelWidget()->size().width(); 1824 int tWid = topLevelWidget()->size().width();
1825 int tHei = topLevelWidget()->size().height(); 1825 int tHei = topLevelWidget()->size().height();
1826 1826
1827 int wid = width();//e 1827 int wid = width();//e
1828 int hei = height()-1-mNavigatorBar->height(); 1828 int hei = height()-1-mNavigatorBar->height();
1829 1829
1830 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) { 1830 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) {
1831 return; 1831 return;
1832 } 1832 }
1833 if ( lastWid == width() && lastHei == height() ){ 1833 if ( lastWid == width() && lastHei == height() ){
1834 //qDebug("KOMonthview::No compute layout needed "); 1834 //qDebug("KOMonthview::No compute layout needed ");
1835 return; 1835 return;
1836 } 1836 }
1837 1837
1838 lastWid = width(); 1838 lastWid = width();
1839 lastHei = height(); 1839 lastHei = height();
1840 //qDebug("KOMonthView::computeLayout() MMM ------------------- "); 1840 //qDebug("KOMonthView::computeLayout() MMM ------------------- ");
1841 QFontMetrics fm ( mWeekLabels[0]->font() ); 1841 QFontMetrics fm ( mWeekLabels[0]->font() );
1842 int weeklabelwid = fm.width( "888" ); 1842 int weeklabelwid = fm.width( "888" );
1843 wid -= weeklabelwid; 1843 wid -= weeklabelwid;
1844 1844
1845 int colWid = wid / daysToShow; 1845 int colWid = wid / daysToShow;
1846 int lastCol = wid - ( colWid*6 ); 1846 int lastCol = wid - ( colWid*6 );
1847 int dayLabelHei = mDayLabels[0]->sizeHint().height(); 1847 int dayLabelHei = mDayLabels[0]->sizeHint().height();
1848 int cellHei = (hei - dayLabelHei) /6; 1848 int cellHei = (hei - dayLabelHei) /6;
1849 int colModulo = wid % daysToShow; 1849 int colModulo = wid % daysToShow;
1850 int rowModulo = (hei- dayLabelHei) % 6; 1850 int rowModulo = (hei- dayLabelHei) % 6;
1851 //qDebug("rowmod %d ", rowModulo); 1851 //qDebug("rowmod %d ", rowModulo);
1852 int i; 1852 int i;
1853 int x,y,w,h; 1853 int x,y,w,h;
1854 x= 0; 1854 x= 0;
1855 y= 0; 1855 y= 0;
1856 w = colWid; 1856 w = colWid;
1857 h = dayLabelHei ; 1857 h = dayLabelHei ;
1858 for ( i = 0; i < 7; i++) { 1858 for ( i = 0; i < 7; i++) {
1859 if ( i == daysToShow-colModulo ) 1859 if ( i == daysToShow-colModulo )
1860 ++w; 1860 ++w;
1861 if ( combinedSatSun ) { 1861 if ( combinedSatSun ) {
1862 if ( i >= daysToShow-1 ) { 1862 if ( i >= daysToShow-1 ) {
1863 1863
1864 if ( i == 6 ) 1864 if ( i == 6 )
1865 mDayLabels[i]->setGeometry( x+weeklabelwid,y,width()-x-weeklabelwid,h); 1865 mDayLabels[i]->setGeometry( x+weeklabelwid,y,width()-x-weeklabelwid,h);
1866 else 1866 else
1867 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); 1867 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h);
1868 x -= w/2 ; 1868 x -= w/2 ;
1869 } 1869 }
1870 else 1870 else
1871 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 1871 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
1872 } else 1872 } else
1873 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 1873 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
1874 x += w; 1874 x += w;
1875 } 1875 }
1876 x= 0; 1876 x= 0;
1877 y= dayLabelHei; 1877 y= dayLabelHei;
1878 w = colWid; 1878 w = colWid;
1879 h = cellHei ; 1879 h = cellHei ;
1880 int max = 0; 1880 int max = 0;
1881 for ( i = 0; i < mCells.count(); ++i) { 1881 for ( i = 0; i < mCells.count(); ++i) {
1882 //qDebug("iii %d ", i); 1882 //qDebug("iii %d ", i);
1883 w = colWid; 1883 w = colWid;
1884 if ( ((i) % 7) >= 7-colModulo ) { 1884 if ( ((i) % 7) >= 7-colModulo ) {
1885 ++w; 1885 ++w;
1886 } 1886 }
1887 if ( i == (6-rowModulo)*7) 1887 if ( i == (6-rowModulo)*7)
1888 ++h; 1888 ++h;
1889 if ( combinedSatSun ) { 1889 if ( combinedSatSun ) {
1890 if ( (i)%7 >= daysToShow-1 ) { 1890 if ( (i)%7 >= daysToShow-1 ) {
1891 if ( (i)%7 == daysToShow-1 ) { 1891 if ( (i)%7 == daysToShow-1 ) {
1892 w = width()-x-weeklabelwid; 1892 w = width()-x-weeklabelwid;
1893 max = h/2; 1893 max = h/2;
1894 mCells[i]->setGeometry ( x+weeklabelwid,y,w,max ); 1894 mCells[i]->setGeometry ( x+weeklabelwid,y,w,max );
1895 x -= w ;y += h/2; 1895 x -= w ;y += h/2;
1896 } else { 1896 } else {
1897 w = width()-x-weeklabelwid; 1897 w = width()-x-weeklabelwid;
1898 max = h-h/2; 1898 max = h-h/2;
1899 mCells[i]->setGeometry ( x+weeklabelwid,y,w,max ); 1899 mCells[i]->setGeometry ( x+weeklabelwid,y,w,max );
1900 y -= h/2; 1900 y -= h/2;
1901 } 1901 }
1902 } else { 1902 } else {
1903 max = h; 1903 max = h;
1904 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1904 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
1905 } 1905 }
1906 1906
1907 } 1907 }
1908 else { 1908 else {
1909 max = h; 1909 max = h;
1910 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1910 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
1911 } 1911 }
1912 x += w; 1912 x += w;
1913 if ( x + w/2 > wid ) { 1913 if ( x + w/2 > wid ) {
1914 x = 0; 1914 x = 0;
1915 y += h; 1915 y += h;
1916 } 1916 }
1917 //mCells[i]->dateLabel()->setMaximumHeight( max- mCells[i]->lineWidth()*2 ); 1917 //mCells[i]->dateLabel()->setMaximumHeight( max- mCells[i]->lineWidth()*2 );
1918 } 1918 }
1919 y= dayLabelHei; 1919 y= dayLabelHei;
1920 h = cellHei ; 1920 h = cellHei ;
1921 for ( i = 0; i < 6; i++) { 1921 for ( i = 0; i < 6; i++) {
1922 if ( i == (6-rowModulo)) 1922 if ( i == (6-rowModulo))
1923 ++h; 1923 ++h;
1924 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); 1924 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h);
1925 y += h; 1925 y += h;
1926 } 1926 }
1927 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1927 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1928 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1928 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1929 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1929 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1930 mShortDayLabelsM = mDayLabels[0]->width()-2 < mWidthLongDayLabel ; 1930 mShortDayLabelsM = mDayLabels[0]->width()-2 < mWidthLongDayLabel ;
1931 updateDayLabels(); 1931 updateDayLabels();
1932 //bool forceUpdate = !updatePossible; 1932 //bool forceUpdate = !updatePossible;
1933 updatePossible = true; 1933 updatePossible = true;
1934 //mWeekLabels[mNumWeeks]->setText( i18n("W")); 1934 //mWeekLabels[mNumWeeks]->setText( i18n("W"));
1935} 1935}
1936 1936
1937void KOMonthView::showContextMenu( Incidence *incidence ) 1937void KOMonthView::showContextMenu( Incidence *incidence )
1938{ 1938{
1939 if( incidence ) 1939 if( incidence )
1940 mContextMenu->showIncidencePopup(incidence); 1940 mContextMenu->showIncidencePopup(incidence);
1941 else { 1941 else {
1942 //qDebug("KOMonthView::showContextMenu "); 1942 //qDebug("KOMonthView::showContextMenu ");
1943 mNewItemMenu->popup(QCursor::pos()); 1943 mNewItemMenu->popup(QCursor::pos());
1944 } 1944 }
1945 /* 1945 /*
1946 if( incidence && incidence->type() == "Event" ) { 1946 if( incidence && incidence->typeID() == eventID ) {
1947 Event *event = static_cast<Event *>(incidence); 1947 Event *event = static_cast<Event *>(incidence);
1948 mContextMenu->showEventPopup(event); 1948 mContextMenu->showEventPopup(event);
1949 } else { 1949 } else {
1950 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl; 1950 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl;
1951 } 1951 }
1952 */ 1952 */
1953} 1953}
1954MonthViewCell * KOMonthView::selectedCell( ) 1954MonthViewCell * KOMonthView::selectedCell( )
1955{ 1955{
1956 return mSelectedCell; 1956 return mSelectedCell;
1957} 1957}
1958void KOMonthView::setSelectedCell( MonthViewCell *cell ) 1958void KOMonthView::setSelectedCell( MonthViewCell *cell )
1959{ 1959{
1960 //qDebug("KOMonthView::setSelectedCell %d", cell); 1960 //qDebug("KOMonthView::setSelectedCell %d", cell);
1961 if ( mSelectedCell && mSelectedCell != cell ) { 1961 if ( mSelectedCell && mSelectedCell != cell ) {
1962 MonthViewCell * mvc = mSelectedCell; 1962 MonthViewCell * mvc = mSelectedCell;
1963 mSelectedCell = cell; 1963 mSelectedCell = cell;
1964 mvc->deselect(); 1964 mvc->deselect();
1965 } else 1965 } else
1966 mSelectedCell = cell; 1966 mSelectedCell = cell;
1967 // if ( mSelectedCell ) 1967 // if ( mSelectedCell )
1968 // mSelectedCell->select(); 1968 // mSelectedCell->select();
1969 if ( !mSelectedCell ) 1969 if ( !mSelectedCell )
1970 emit incidenceSelected( 0 ); 1970 emit incidenceSelected( 0 );
1971 else 1971 else
1972 emit incidenceSelected( mSelectedCell->selectedIncidence() ); 1972 emit incidenceSelected( mSelectedCell->selectedIncidence() );
1973} 1973}
1974 1974
1975void KOMonthView::processSelectionChange() 1975void KOMonthView::processSelectionChange()
1976{ 1976{
1977 QPtrList<Incidence> incidences = selectedIncidences(); 1977 QPtrList<Incidence> incidences = selectedIncidences();
1978 if (incidences.count() > 0) { 1978 if (incidences.count() > 0) {
1979 emit incidenceSelected( incidences.first() ); 1979 emit incidenceSelected( incidences.first() );
1980 } else { 1980 } else {
1981 emit incidenceSelected( 0 ); 1981 emit incidenceSelected( 0 );
1982 clearSelection(); 1982 clearSelection();
1983 } 1983 }
1984} 1984}
1985 1985
1986void KOMonthView::clearSelection() 1986void KOMonthView::clearSelection()
1987{ 1987{
1988 if ( mSelectedCell ) { 1988 if ( mSelectedCell ) {
1989 mSelectedCell->deselect(); 1989 mSelectedCell->deselect();
1990 mSelectedCell = 0; 1990 mSelectedCell = 0;
1991 } 1991 }
1992} 1992}
1993 1993
1994void KOMonthView::keyReleaseEvent ( QKeyEvent * e) 1994void KOMonthView::keyReleaseEvent ( QKeyEvent * e)
1995{ 1995{
1996 if ( !e->isAutoRepeat() ) { 1996 if ( !e->isAutoRepeat() ) {
1997 mFlagKeyPressed = false; 1997 mFlagKeyPressed = false;
1998 } 1998 }
1999} 1999}
2000 2000
2001void KOMonthView::keyPressEvent ( QKeyEvent * e ) 2001void KOMonthView::keyPressEvent ( QKeyEvent * e )
2002{ 2002{
2003 2003
2004 qApp->processEvents(); 2004 qApp->processEvents();
2005 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 2005 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
2006 //e->ignore(); 2006 //e->ignore();
2007 e->accept(); 2007 e->accept();
2008 return; 2008 return;
2009 } 2009 }
2010 if (! e->isAutoRepeat() ) 2010 if (! e->isAutoRepeat() )
2011 mFlagKeyPressed = true; 2011 mFlagKeyPressed = true;
2012 switch(e->key()) { 2012 switch(e->key()) {
2013 case Key_Up: 2013 case Key_Up:
2014 { 2014 {
2015 if ( mShowWeekView ) { 2015 if ( mShowWeekView ) {
2016 emit selectWeekNum ( currentWeek() - 1 ); 2016 emit selectWeekNum ( currentWeek() - 1 );
2017 } 2017 }
2018 else { 2018 else {
2019 emit prevMonth(); 2019 emit prevMonth();
2020 } 2020 }
2021 } 2021 }
2022 e->accept(); 2022 e->accept();
2023 break; 2023 break;
2024 case Key_Down: 2024 case Key_Down:
2025 { 2025 {
2026 if ( mShowWeekView ) { 2026 if ( mShowWeekView ) {
2027 emit selectWeekNum ( currentWeek() +1); 2027 emit selectWeekNum ( currentWeek() +1);
2028 } 2028 }
2029 else { 2029 else {
2030 emit nextMonth(); 2030 emit nextMonth();
2031 } 2031 }
2032 2032
2033 } 2033 }
2034 e->accept(); 2034 e->accept();
2035 break; 2035 break;
2036 case Key_Return: 2036 case Key_Return:
2037 case Key_Enter: 2037 case Key_Enter:
2038 { 2038 {
2039 selectInternalWeekNum ( currentWeek() ); 2039 selectInternalWeekNum ( currentWeek() );
2040 } 2040 }
2041 e->accept(); 2041 e->accept();
2042 break; 2042 break;
2043 case Key_D: 2043 case Key_D:
2044 if ( mSelectedCell ) { 2044 if ( mSelectedCell ) {
2045 mSelectedCell->showDay(); 2045 mSelectedCell->showDay();
2046 e->accept(); 2046 e->accept();
2047 } else { 2047 } else {
2048 e->ignore(); 2048 e->ignore();
2049 } 2049 }
2050 break; 2050 break;
2051 default: 2051 default:
2052 e->ignore(); 2052 e->ignore();
2053 break; 2053 break;
2054 } 2054 }
2055} 2055}
2056 2056
2057void KOMonthView::nextCell() 2057void KOMonthView::nextCell()
2058{ 2058{
2059 bool res = focusNextPrevChild ( true ); 2059 bool res = focusNextPrevChild ( true );
2060} 2060}
2061void KOMonthView::prevCell() 2061void KOMonthView::prevCell()
2062{ 2062{
2063 focusNextPrevChild ( false ); 2063 focusNextPrevChild ( false );
2064} 2064}
2065 2065
2066void KOMonthView::slotNewTodo() 2066void KOMonthView::slotNewTodo()
2067{ 2067{
2068 //qDebug("KOMonthView::slotNewTodo() "); 2068 //qDebug("KOMonthView::slotNewTodo() ");
2069 if ( mPopupCell ){ 2069 if ( mPopupCell ){
2070 QDateTime dt( mPopupCell->date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 2070 QDateTime dt( mPopupCell->date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
2071 emit newTodoSignal(dt,true); 2071 emit newTodoSignal(dt,true);
2072 } 2072 }
2073 mPopupCell = 0; 2073 mPopupCell = 0;
2074} 2074}
2075void KOMonthView::slotNewEvent() 2075void KOMonthView::slotNewEvent()
2076{ 2076{
2077 if ( mPopupCell ) { 2077 if ( mPopupCell ) {
2078 QDateTime dt( mPopupCell->date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 2078 QDateTime dt( mPopupCell->date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
2079 emit newEventSignal( dt ); 2079 emit newEventSignal( dt );
2080 } 2080 }
2081 //qDebug("KOMonthView::slotNewEvent() "); 2081 //qDebug("KOMonthView::slotNewEvent() ");
2082 mPopupCell = 0; 2082 mPopupCell = 0;
2083} 2083}
2084 2084
2085void KOMonthView::slotEditJournal() 2085void KOMonthView::slotEditJournal()
2086{ 2086{
2087 if ( mPopupCell ) 2087 if ( mPopupCell )
2088 emit showJournalSignal( 7, mPopupCell->date() ); 2088 emit showJournalSignal( 7, mPopupCell->date() );
2089 //qDebug("KOMonthView::slotEditJournal() "); 2089 //qDebug("KOMonthView::slotEditJournal() ");
2090 mPopupCell = 0; 2090 mPopupCell = 0;
2091} 2091}
2092 2092
2093void KOMonthView::setPopupCell( MonthViewCell * c) 2093void KOMonthView::setPopupCell( MonthViewCell * c)
2094{ 2094{
2095 mPopupCell = c; 2095 mPopupCell = c;
2096} 2096}
diff --git a/korganizer/outgoingdialog.cpp b/korganizer/outgoingdialog.cpp
index 0fc90c4..7253c8e 100644
--- a/korganizer/outgoingdialog.cpp
+++ b/korganizer/outgoingdialog.cpp
@@ -1,393 +1,393 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <kdebug.h> 20#include <kdebug.h>
21 21
22#include <qfile.h> 22#include <qfile.h>
23#include <qdir.h> 23#include <qdir.h>
24#include <qtextstream.h> 24#include <qtextstream.h>
25 25
26#include <kglobal.h> 26#include <kglobal.h>
27#include <klocale.h> 27#include <klocale.h>
28#include <ktempfile.h> 28#include <ktempfile.h>
29#include <kstandarddirs.h> 29#include <kstandarddirs.h>
30 30
31#include <libkcal/event.h> 31#include <libkcal/event.h>
32#include <libkcal/freebusy.h> 32#include <libkcal/freebusy.h>
33//#include <libkcal/imipscheduler.h> 33//#include <libkcal/imipscheduler.h>
34#include <libkcal/dummyscheduler.h> 34#include <libkcal/dummyscheduler.h>
35#include <libkcal/icalformat.h> 35#include <libkcal/icalformat.h>
36#include <libkcal/calendar.h> 36#include <libkcal/calendar.h>
37 37
38#ifndef KORG_NOMAIL 38#ifndef KORG_NOMAIL
39#include "mailscheduler.h" 39#include "mailscheduler.h"
40#endif 40#endif
41 41
42#include "koprefs.h" 42#include "koprefs.h"
43#include "outgoingdialog.h" 43#include "outgoingdialog.h"
44#include "koeventviewerdialog.h" 44#include "koeventviewerdialog.h"
45#include "docprefs.h" 45#include "docprefs.h"
46 46
47ScheduleItemOut::ScheduleItemOut(QListView *parent,IncidenceBase *ev, 47ScheduleItemOut::ScheduleItemOut(QListView *parent,IncidenceBase *ev,
48 Scheduler::Method method, 48 Scheduler::Method method,
49 const QString &recipients) 49 const QString &recipients)
50 : QListViewItem(parent) 50 : QListViewItem(parent)
51{ 51{
52 mIncidence = ev; 52 mIncidence = ev;
53 mMethod = method; 53 mMethod = method;
54 mRecipients = recipients; 54 mRecipients = recipients;
55 55
56// kdDebug() << "ScheduleItemOut: setting the summary" << endl; 56// kdDebug() << "ScheduleItemOut: setting the summary" << endl;
57 //Set the summary 57 //Set the summary
58 if(ev->type() != "FreeBusy") { 58 if(ev->typeID() != freebusyID ) {
59 Incidence *incidence = static_cast<Incidence *>(ev); 59 Incidence *incidence = static_cast<Incidence *>(ev);
60 setText(0,incidence->summary()); 60 setText(0,incidence->summary());
61 } else { 61 } else {
62 setText(0,i18n("Free Busy Object")); 62 setText(0,i18n("Free Busy Object"));
63 } 63 }
64 64
65// kdDebug() << "ScheduleItemOut: checking if the object is an event" << endl; 65// kdDebug() << "ScheduleItemOut: checking if the object is an event" << endl;
66 //If the object is an event 66 //If the object is an event
67 if(ev->type()=="Event") { 67 if(ev->typeID()== eventID ) {
68 Event *event = static_cast<Event *>(ev); 68 Event *event = static_cast<Event *>(ev);
69 69
70 setText(1,event->dtStartDateStr()); 70 setText(1,event->dtStartDateStr());
71 if (event->doesFloat()) { //If the event floats set the start and end times to no time 71 if (event->doesFloat()) { //If the event floats set the start and end times to no time
72 setText(2,i18n("no time")); 72 setText(2,i18n("no time"));
73 setText(4,i18n("no time")); 73 setText(4,i18n("no time"));
74 } else { //If it does not float 74 } else { //If it does not float
75 setText(2,event->dtStartTimeStr()); 75 setText(2,event->dtStartTimeStr());
76 if (event->hasDuration()) { 76 if (event->hasDuration()) {
77 setText(4,event->dtEndTimeStr()); 77 setText(4,event->dtEndTimeStr());
78 } else { 78 } else {
79 setText(4,i18n("no time")); 79 setText(4,i18n("no time"));
80 } 80 }
81 } 81 }
82 if (event->hasEndDate()) { 82 if (event->hasEndDate()) {
83 setText(3,event->dtEndDateStr()); 83 setText(3,event->dtEndDateStr());
84 } 84 }
85 else { 85 else {
86 setText(3,i18n("no time")); 86 setText(3,i18n("no time"));
87 } 87 }
88 } 88 }
89 89
90 //If the object is an Todo 90 //If the object is an Todo
91 if(ev->type()=="Todo") { 91 if(ev->typeID() == todoID ) {
92 Todo *event = static_cast<Todo *>(ev); 92 Todo *event = static_cast<Todo *>(ev);
93 if (event->hasStartDate()) { 93 if (event->hasStartDate()) {
94 setText(1,event->dtStartDateStr()); 94 setText(1,event->dtStartDateStr());
95 if (!event->doesFloat()) { 95 if (!event->doesFloat()) {
96 setText(2,event->dtStartTimeStr()); 96 setText(2,event->dtStartTimeStr());
97 } 97 }
98 } 98 }
99 if (event->hasDueDate()) { 99 if (event->hasDueDate()) {
100 setText(3,event->dtDueDateStr()); 100 setText(3,event->dtDueDateStr());
101 if (!event->doesFloat()) { 101 if (!event->doesFloat()) {
102 setText(4,event->dtDueTimeStr()); 102 setText(4,event->dtDueTimeStr());
103 } 103 }
104 } 104 }
105 } 105 }
106 106
107// kdDebug() << "ScheduleItemOut: checking if the object is a FreeBusy object" << endl; 107// kdDebug() << "ScheduleItemOut: checking if the object is a FreeBusy object" << endl;
108 //If the object is a freebusy object 108 //If the object is a freebusy object
109 if(ev->type() == "FreeBusy") { 109 if(ev->typeID() == freebusyID ) {
110 FreeBusy *freebusy = static_cast<FreeBusy *>(ev); 110 FreeBusy *freebusy = static_cast<FreeBusy *>(ev);
111 111
112 setText(1,freebusy->dtStartDateStr()); 112 setText(1,freebusy->dtStartDateStr());
113 setText(2,freebusy->dtStartTimeStr()); 113 setText(2,freebusy->dtStartTimeStr());
114 //Must try and get this to the users local settings 114 //Must try and get this to the users local settings
115 setText(3,KGlobal::locale()->formatDate( freebusy->dtEnd().date() ) ); 115 setText(3,KGlobal::locale()->formatDate( freebusy->dtEnd().date() ) );
116 setText(4,KGlobal::locale()->formatTime( freebusy->dtEnd().time() ) ); 116 setText(4,KGlobal::locale()->formatTime( freebusy->dtEnd().time() ) );
117 } 117 }
118 118
119// kdDebug() << "ScheduleItemOut: Setting the method" << endl; 119// kdDebug() << "ScheduleItemOut: Setting the method" << endl;
120 //Set the Method 120 //Set the Method
121 setText(5,Scheduler::translatedMethodName(mMethod)); 121 setText(5,Scheduler::translatedMethodName(mMethod));
122} 122}
123 123
124OutgoingDialog::OutgoingDialog(Calendar *calendar,QWidget* parent, 124OutgoingDialog::OutgoingDialog(Calendar *calendar,QWidget* parent,
125 const char* name,bool modal, 125 const char* name,bool modal,
126 WFlags fl) 126 WFlags fl)
127 : OutgoingDialog_base(parent,name,modal,fl) 127 : OutgoingDialog_base(parent,name,modal,fl)
128{ 128{
129 mCalendar = calendar; 129 mCalendar = calendar;
130 130
131 mFormat = new ICalFormat; 131 mFormat = new ICalFormat;
132 132
133 if (KOPrefs::instance()->mIMIPScheduler == KOPrefs::IMIPDummy ) { 133 if (KOPrefs::instance()->mIMIPScheduler == KOPrefs::IMIPDummy ) {
134 mScheduler = new DummyScheduler(mCalendar); 134 mScheduler = new DummyScheduler(mCalendar);
135 } else { 135 } else {
136#ifndef KORG_NOMAIL 136#ifndef KORG_NOMAIL
137 mScheduler = new MailScheduler(mCalendar); 137 mScheduler = new MailScheduler(mCalendar);
138#else 138#else
139 mScheduler = new DummyScheduler(mCalendar); 139 mScheduler = new DummyScheduler(mCalendar);
140#endif 140#endif
141 } 141 }
142 mMessageListView->setColumnAlignment(1,AlignHCenter); 142 mMessageListView->setColumnAlignment(1,AlignHCenter);
143 mMessageListView->setColumnAlignment(2,AlignHCenter); 143 mMessageListView->setColumnAlignment(2,AlignHCenter);
144 mMessageListView->setColumnAlignment(3,AlignHCenter); 144 mMessageListView->setColumnAlignment(3,AlignHCenter);
145 mMessageListView->setColumnAlignment(4,AlignHCenter); 145 mMessageListView->setColumnAlignment(4,AlignHCenter);
146 QObject::connect(mMessageListView,SIGNAL(doubleClicked(QListViewItem *)), 146 QObject::connect(mMessageListView,SIGNAL(doubleClicked(QListViewItem *)),
147 this,SLOT(showEvent(QListViewItem *))); 147 this,SLOT(showEvent(QListViewItem *)));
148 mDocPrefs = new DocPrefs("groupschedule"); 148 mDocPrefs = new DocPrefs("groupschedule");
149 loadMessages(); 149 loadMessages();
150} 150}
151 151
152OutgoingDialog::~OutgoingDialog() 152OutgoingDialog::~OutgoingDialog()
153{ 153{
154 delete mDocPrefs; 154 delete mDocPrefs;
155 delete mFormat; 155 delete mFormat;
156} 156}
157 157
158bool OutgoingDialog::addMessage(IncidenceBase *incidence,Scheduler::Method method) 158bool OutgoingDialog::addMessage(IncidenceBase *incidence,Scheduler::Method method)
159{ 159{
160 kdDebug() << "Outgoing::addMessage" << "Method:" << method << endl; 160 kdDebug() << "Outgoing::addMessage" << "Method:" << method << endl;
161 if (method == Scheduler::Publish) return false; 161 if (method == Scheduler::Publish) return false;
162 if( mDocPrefs ) { 162 if( mDocPrefs ) {
163 if (method != Scheduler::Cancel) { 163 if (method != Scheduler::Cancel) {
164 mDocPrefs->writeEntry( incidence->uid()+"-scheduled", true ); 164 mDocPrefs->writeEntry( incidence->uid()+"-scheduled", true );
165 } else { 165 } else {
166 if (!mDocPrefs->readBoolEntry(incidence->uid()+"-scheduled") ) 166 if (!mDocPrefs->readBoolEntry(incidence->uid()+"-scheduled") )
167 return true; 167 return true;
168 } 168 }
169 } 169 }
170 170
171 if (KOPrefs::instance()->mIMIPSend == KOPrefs::IMIPOutbox) { 171 if (KOPrefs::instance()->mIMIPSend == KOPrefs::IMIPOutbox) {
172 new ScheduleItemOut(mMessageListView,incidence,method); 172 new ScheduleItemOut(mMessageListView,incidence,method);
173 saveMessage(incidence,method); 173 saveMessage(incidence,method);
174 emit numMessagesChanged(mMessageListView->childCount()); 174 emit numMessagesChanged(mMessageListView->childCount());
175 } 175 }
176 else { 176 else {
177 mScheduler->performTransaction(incidence,method); 177 mScheduler->performTransaction(incidence,method);
178 } 178 }
179 return true; 179 return true;
180} 180}
181 181
182bool OutgoingDialog::addMessage(IncidenceBase *incidence,Scheduler::Method method, 182bool OutgoingDialog::addMessage(IncidenceBase *incidence,Scheduler::Method method,
183 const QString &recipients) 183 const QString &recipients)
184{ 184{
185 //if (method != Scheduler::Publish) return false; 185 //if (method != Scheduler::Publish) return false;
186 if( mDocPrefs ) { 186 if( mDocPrefs ) {
187 if (method != Scheduler::Cancel) { 187 if (method != Scheduler::Cancel) {
188 mDocPrefs->writeEntry( incidence->uid()+"-scheduled", true ); 188 mDocPrefs->writeEntry( incidence->uid()+"-scheduled", true );
189 } else { 189 } else {
190 if (!mDocPrefs->readBoolEntry(incidence->uid()+"-scheduled") ) 190 if (!mDocPrefs->readBoolEntry(incidence->uid()+"-scheduled") )
191 return true; 191 return true;
192 } 192 }
193 } 193 }
194 if (KOPrefs::instance()->mIMIPSend == KOPrefs::IMIPOutbox) { 194 if (KOPrefs::instance()->mIMIPSend == KOPrefs::IMIPOutbox) {
195 new ScheduleItemOut(mMessageListView,incidence,method,recipients); 195 new ScheduleItemOut(mMessageListView,incidence,method,recipients);
196 saveMessage(incidence,method,recipients); 196 saveMessage(incidence,method,recipients);
197 emit numMessagesChanged(mMessageListView->childCount()); 197 emit numMessagesChanged(mMessageListView->childCount());
198 } 198 }
199 else { 199 else {
200 mScheduler->performTransaction(incidence,method,recipients); 200 mScheduler->performTransaction(incidence,method,recipients);
201 } 201 }
202 return true; 202 return true;
203} 203}
204 204
205void OutgoingDialog::send() 205void OutgoingDialog::send()
206{ 206{
207 kdDebug() << "OutgoingDialog::send" << endl; 207 kdDebug() << "OutgoingDialog::send" << endl;
208 ScheduleItemOut *item = (ScheduleItemOut *)(mMessageListView->firstChild()); 208 ScheduleItemOut *item = (ScheduleItemOut *)(mMessageListView->firstChild());
209 while(item) { 209 while(item) {
210 bool success; 210 bool success;
211 if (item->method() == Scheduler::Publish) { 211 if (item->method() == Scheduler::Publish) {
212 success = mScheduler->publish(item->event(),item->recipients()); 212 success = mScheduler->publish(item->event(),item->recipients());
213 } else { 213 } else {
214 success = mScheduler->performTransaction(item->event(),item->method()); 214 success = mScheduler->performTransaction(item->event(),item->method());
215 } 215 }
216 ScheduleItemOut *oldItem = item; 216 ScheduleItemOut *oldItem = item;
217 item = (ScheduleItemOut *)(item->nextSibling()); 217 item = (ScheduleItemOut *)(item->nextSibling());
218 if (success) { 218 if (success) {
219 deleteMessage(oldItem->event()); 219 deleteMessage(oldItem->event());
220 delete (oldItem->event()); 220 delete (oldItem->event());
221 delete oldItem; 221 delete oldItem;
222 } 222 }
223 } 223 }
224 224
225 emit numMessagesChanged(mMessageListView->childCount()); 225 emit numMessagesChanged(mMessageListView->childCount());
226} 226}
227 227
228void OutgoingDialog::deleteItem() 228void OutgoingDialog::deleteItem()
229{ 229{
230 ScheduleItemOut *item = (ScheduleItemOut *)(mMessageListView->selectedItem()); 230 ScheduleItemOut *item = (ScheduleItemOut *)(mMessageListView->selectedItem());
231 if(!item) 231 if(!item)
232 return; 232 return;
233 deleteMessage(item->event()); 233 deleteMessage(item->event());
234 delete(item->event()); 234 delete(item->event());
235 mMessageListView->takeItem(item); 235 mMessageListView->takeItem(item);
236 emit numMessagesChanged(mMessageListView->childCount()); 236 emit numMessagesChanged(mMessageListView->childCount());
237} 237}
238 238
239void OutgoingDialog::showEvent(QListViewItem *qitem) 239void OutgoingDialog::showEvent(QListViewItem *qitem)
240{ 240{
241 ScheduleItemOut *item = (ScheduleItemOut *)qitem; 241 ScheduleItemOut *item = (ScheduleItemOut *)qitem;
242 Event *event = 0; 242 Event *event = 0;
243 Todo *todo = 0; 243 Todo *todo = 0;
244 if ( item->event()->type()=="Event" ) { 244 if ( item->event()->typeID() == eventID ) {
245 event = static_cast<Event *>(item->event()); 245 event = static_cast<Event *>(item->event());
246 } 246 }
247 if ( item->event()->type()=="Todo" ) { 247 if ( item->event()->typeID() == todoID ) {
248 todo = static_cast<Todo *>(item->event()); 248 todo = static_cast<Todo *>(item->event());
249 } 249 }
250 QString sendText; 250 QString sendText;
251 if (event || todo) { 251 if (event || todo) {
252 KOEventViewerDialog *eventViewer = new KOEventViewerDialog(this); 252 KOEventViewerDialog *eventViewer = new KOEventViewerDialog(this);
253 if (event) eventViewer->setEvent(event); 253 if (event) eventViewer->setEvent(event);
254 if (todo) eventViewer->setTodo(todo); 254 if (todo) eventViewer->setTodo(todo);
255 sendText = "<hr><h4>"+i18n("Event will be sent to:")+"</h4>"; 255 sendText = "<hr><h4>"+i18n("Event will be sent to:")+"</h4>";
256 switch (item->method()) { 256 switch (item->method()) {
257 case Scheduler::Publish: { 257 case Scheduler::Publish: {
258 sendText += item->recipients(); 258 sendText += item->recipients();
259 break; } 259 break; }
260 case Scheduler::Request: { 260 case Scheduler::Request: {
261 sendText += i18n("All attendees"); 261 sendText += i18n("All attendees");
262 break; } 262 break; }
263 case Scheduler::Refresh: { 263 case Scheduler::Refresh: {
264 sendText += i18n("All attendees"); 264 sendText += i18n("All attendees");
265 break; } 265 break; }
266 case Scheduler::Cancel: { 266 case Scheduler::Cancel: {
267 sendText += i18n("All attendees"); 267 sendText += i18n("All attendees");
268 break; } 268 break; }
269 case Scheduler::Add: { 269 case Scheduler::Add: {
270 sendText += i18n("All attendees"); 270 sendText += i18n("All attendees");
271 break; } 271 break; }
272 case Scheduler::Reply: { 272 case Scheduler::Reply: {
273 sendText += i18n("The organizer %1").arg(item->event()->organizer()); 273 sendText += i18n("The organizer %1").arg(item->event()->organizer());
274 break; } 274 break; }
275 case Scheduler::Counter: { 275 case Scheduler::Counter: {
276 sendText += i18n("The organizer %1").arg(item->event()->organizer()); 276 sendText += i18n("The organizer %1").arg(item->event()->organizer());
277 break; } 277 break; }
278 case Scheduler::Declinecounter: { 278 case Scheduler::Declinecounter: {
279 sendText += i18n("All attendees"); 279 sendText += i18n("All attendees");
280 break; } 280 break; }
281 case Scheduler::NoMethod: { 281 case Scheduler::NoMethod: {
282 sendText += ""; 282 sendText += "";
283 break; } 283 break; }
284 default: 284 default:
285 sendText = ""; 285 sendText = "";
286 } 286 }
287 eventViewer->addText(sendText); 287 eventViewer->addText(sendText);
288 eventViewer->show(); 288 eventViewer->show();
289 } 289 }
290} 290}
291 291
292bool OutgoingDialog::saveMessage(IncidenceBase *incidence,Scheduler::Method method, 292bool OutgoingDialog::saveMessage(IncidenceBase *incidence,Scheduler::Method method,
293 const QString &recipients) 293 const QString &recipients)
294{ 294{
295 KTempFile ktfile(locateLocal("data","korganizer/outgoing/"),"ics"); 295 KTempFile ktfile(locateLocal("data","korganizer/outgoing/"),"ics");
296 QString messageText = mFormat->createScheduleMessage(incidence,method); 296 QString messageText = mFormat->createScheduleMessage(incidence,method);
297 QTextStream *qts = ktfile.textStream(); 297 QTextStream *qts = ktfile.textStream();
298 *qts << messageText; 298 *qts << messageText;
299 *qts << "METHOD-BEGIN:" << endl << method << endl << ":METHOD-END" << endl; 299 *qts << "METHOD-BEGIN:" << endl << method << endl << ":METHOD-END" << endl;
300 *qts << "RECIPIENTS-BEGIN:" << endl << recipients << endl << ":RECIPIENTS-END" << endl; 300 *qts << "RECIPIENTS-BEGIN:" << endl << recipients << endl << ":RECIPIENTS-END" << endl;
301 mMessageMap[incidence]=ktfile.name(); 301 mMessageMap[incidence]=ktfile.name();
302 302
303 return true; 303 return true;
304} 304}
305 305
306bool OutgoingDialog::deleteMessage(IncidenceBase *incidence) 306bool OutgoingDialog::deleteMessage(IncidenceBase *incidence)
307{ 307{
308 QFile f( mMessageMap[incidence] ); 308 QFile f( mMessageMap[incidence] );
309 mMessageMap.remove(incidence); 309 mMessageMap.remove(incidence);
310 if ( !f.exists() ) return false; 310 if ( !f.exists() ) return false;
311 else 311 else
312 return f.remove(); 312 return f.remove();
313} 313}
314 314
315void OutgoingDialog::loadMessages() 315void OutgoingDialog::loadMessages()
316{ 316{
317 Scheduler::Method method; 317 Scheduler::Method method;
318 QString recipients; 318 QString recipients;
319 319
320 QString outgoingDirName = locateLocal("data","korganizer/outgoing"); 320 QString outgoingDirName = locateLocal("data","korganizer/outgoing");
321 QDir outgoingDir(outgoingDirName); 321 QDir outgoingDir(outgoingDirName);
322 QStringList outgoing = outgoingDir.entryList(QDir::Files); 322 QStringList outgoing = outgoingDir.entryList(QDir::Files);
323 QStringList::ConstIterator it; 323 QStringList::ConstIterator it;
324 for(it = outgoing.begin(); it != outgoing.end(); ++it) { 324 for(it = outgoing.begin(); it != outgoing.end(); ++it) {
325 kdDebug() << "-- File: " << (*it) << endl; 325 kdDebug() << "-- File: " << (*it) << endl;
326 QFile f(outgoingDirName + "/" + (*it)); 326 QFile f(outgoingDirName + "/" + (*it));
327 bool inserted = false; 327 bool inserted = false;
328 QMap<IncidenceBase*, QString>::Iterator iter; 328 QMap<IncidenceBase*, QString>::Iterator iter;
329 for ( iter = mMessageMap.begin(); iter != mMessageMap.end(); ++iter ) { 329 for ( iter = mMessageMap.begin(); iter != mMessageMap.end(); ++iter ) {
330 if (iter.data() == outgoingDirName + "/" + (*it)) inserted = true; 330 if (iter.data() == outgoingDirName + "/" + (*it)) inserted = true;
331 } 331 }
332 if (!inserted) { 332 if (!inserted) {
333 if (!f.open(IO_ReadOnly)) { 333 if (!f.open(IO_ReadOnly)) {
334 kdDebug() << "OutgoingDialog::loadMessage(): Can't open file'" 334 kdDebug() << "OutgoingDialog::loadMessage(): Can't open file'"
335 << (*it) << "'" << endl; 335 << (*it) << "'" << endl;
336 } else { 336 } else {
337 QTextStream t(&f); 337 QTextStream t(&f);
338 QString messageString = t.read(); 338 QString messageString = t.read();
339 ScheduleMessage *message = mFormat->parseScheduleMessage(mCalendar, 339 ScheduleMessage *message = mFormat->parseScheduleMessage(mCalendar,
340 messageString); 340 messageString);
341 int begin_pos = messageString.find("METHOD-BEGIN:"); 341 int begin_pos = messageString.find("METHOD-BEGIN:");
342 begin_pos = messageString.find('\n',begin_pos)+1; 342 begin_pos = messageString.find('\n',begin_pos)+1;
343 QString meth = messageString.mid(begin_pos,1); 343 QString meth = messageString.mid(begin_pos,1);
344 switch (meth.toInt()) { 344 switch (meth.toInt()) {
345 case 0:method=Scheduler::Publish; break; 345 case 0:method=Scheduler::Publish; break;
346 case 1:method=Scheduler::Request; break; 346 case 1:method=Scheduler::Request; break;
347 case 2:method=Scheduler::Refresh; break; 347 case 2:method=Scheduler::Refresh; break;
348 case 3:method=Scheduler::Cancel; break; 348 case 3:method=Scheduler::Cancel; break;
349 case 4:method=Scheduler::Add; break; 349 case 4:method=Scheduler::Add; break;
350 case 5:method=Scheduler::Reply; break; 350 case 5:method=Scheduler::Reply; break;
351 case 6:method=Scheduler::Counter; break; 351 case 6:method=Scheduler::Counter; break;
352 case 7:method=Scheduler::Declinecounter; break; 352 case 7:method=Scheduler::Declinecounter; break;
353 default :method=Scheduler::NoMethod; break; 353 default :method=Scheduler::NoMethod; break;
354 } 354 }
355 begin_pos = messageString.find("RECIPIENTS-BEGIN:"); 355 begin_pos = messageString.find("RECIPIENTS-BEGIN:");
356 begin_pos = messageString.find('\n',begin_pos)+1; 356 begin_pos = messageString.find('\n',begin_pos)+1;
357 int end_pos = messageString.find(":RECIPIENTS-END",begin_pos)-1; 357 int end_pos = messageString.find(":RECIPIENTS-END",begin_pos)-1;
358 recipients = messageString.mid(begin_pos, end_pos-begin_pos); 358 recipients = messageString.mid(begin_pos, end_pos-begin_pos);
359 kdDebug() << "Outgoing::loadMessage(): Recipients: " << recipients << endl; 359 kdDebug() << "Outgoing::loadMessage(): Recipients: " << recipients << endl;
360 360
361 if (message) { 361 if (message) {
362 bool inserted = false; 362 bool inserted = false;
363 QMap<IncidenceBase*, QString>::Iterator iter; 363 QMap<IncidenceBase*, QString>::Iterator iter;
364 for ( iter = mMessageMap.begin(); iter != mMessageMap.end(); ++iter ) { 364 for ( iter = mMessageMap.begin(); iter != mMessageMap.end(); ++iter ) {
365 if (iter.data() == outgoingDirName + "/" + (*it)) inserted = true; 365 if (iter.data() == outgoingDirName + "/" + (*it)) inserted = true;
366 } 366 }
367 if (!inserted) { 367 if (!inserted) {
368 kdDebug() << "OutgoingDialog::loadMessage(): got message '" 368 kdDebug() << "OutgoingDialog::loadMessage(): got message '"
369 << (*it) << "'" << endl; 369 << (*it) << "'" << endl;
370 IncidenceBase *inc = message->event(); 370 IncidenceBase *inc = message->event();
371 new ScheduleItemOut(mMessageListView,inc,method,recipients); 371 new ScheduleItemOut(mMessageListView,inc,method,recipients);
372 mMessageMap[message->event()]=outgoingDirName + "/" + (*it); 372 mMessageMap[message->event()]=outgoingDirName + "/" + (*it);
373 } 373 }
374 } else { 374 } else {
375 QString errorMessage; 375 QString errorMessage;
376 if (mFormat->exception()) { 376 if (mFormat->exception()) {
377 errorMessage = mFormat->exception()->message(); 377 errorMessage = mFormat->exception()->message();
378 } 378 }
379 kdDebug() << "OutgoingDialog::loadMessage(): Error parsing " 379 kdDebug() << "OutgoingDialog::loadMessage(): Error parsing "
380 "message: " << errorMessage << endl; 380 "message: " << errorMessage << endl;
381 } 381 }
382 f.close(); 382 f.close();
383 } 383 }
384 } 384 }
385 } 385 }
386 emit numMessagesChanged(mMessageListView->childCount()); 386 emit numMessagesChanged(mMessageListView->childCount());
387} 387}
388 388
389void OutgoingDialog::setDocumentId( const QString &id ) 389void OutgoingDialog::setDocumentId( const QString &id )
390{ 390{
391 mDocPrefs->setDoc( id ); 391 mDocPrefs->setDoc( id );
392} 392}
393 393
diff --git a/libkcal/alarm.cpp b/libkcal/alarm.cpp
index 6de1566..0afa0a7 100644
--- a/libkcal/alarm.cpp
+++ b/libkcal/alarm.cpp
@@ -1,481 +1,481 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <kdebug.h> 22#include <kdebug.h>
23#include <klocale.h> 23#include <klocale.h>
24 24
25#include "incidence.h" 25#include "incidence.h"
26#include "todo.h" 26#include "todo.h"
27 27
28#include "alarm.h" 28#include "alarm.h"
29 29
30using namespace KCal; 30using namespace KCal;
31#include <qwidget.h> 31#include <qwidget.h>
32Alarm::Alarm(Incidence *parent) 32Alarm::Alarm(Incidence *parent)
33 : mParent(parent), 33 : mParent(parent),
34 mType(Audio), 34 mType(Audio),
35 mDescription(""), // to make operator==() not fail 35 mDescription(""), // to make operator==() not fail
36 mFile(""), // to make operator==() not fail 36 mFile(""), // to make operator==() not fail
37 mMailSubject(""), // to make operator==() not fail 37 mMailSubject(""), // to make operator==() not fail
38 mAlarmSnoozeTime(5), 38 mAlarmSnoozeTime(5),
39 mAlarmRepeatCount(0), 39 mAlarmRepeatCount(0),
40 mEndOffset(false), 40 mEndOffset(false),
41 mHasTime(false), 41 mHasTime(false),
42 mAlarmEnabled(false) 42 mAlarmEnabled(false)
43{ 43{
44 44
45} 45}
46 46
47Alarm::~Alarm() 47Alarm::~Alarm()
48{ 48{
49} 49}
50 50
51bool Alarm::operator==( const Alarm& rhs ) const 51bool Alarm::operator==( const Alarm& rhs ) const
52{ 52{
53 53
54 if ( mType != rhs.mType || 54 if ( mType != rhs.mType ||
55 mAlarmSnoozeTime != rhs.mAlarmSnoozeTime || 55 mAlarmSnoozeTime != rhs.mAlarmSnoozeTime ||
56 mAlarmRepeatCount != rhs.mAlarmRepeatCount || 56 mAlarmRepeatCount != rhs.mAlarmRepeatCount ||
57 mAlarmEnabled != rhs.mAlarmEnabled || 57 mAlarmEnabled != rhs.mAlarmEnabled ||
58 mHasTime != rhs.mHasTime) 58 mHasTime != rhs.mHasTime)
59 return false; 59 return false;
60 60
61#if 0 61#if 0
62 if ( mType != rhs.mType ) { 62 if ( mType != rhs.mType ) {
63 63
64 qDebug("aaa1 "); 64 qDebug("aaa1 ");
65 return false; 65 return false;
66 } 66 }
67 67
68 if ( mAlarmSnoozeTime != rhs.mAlarmSnoozeTime ) { 68 if ( mAlarmSnoozeTime != rhs.mAlarmSnoozeTime ) {
69 69
70 qDebug("aaa2 "); 70 qDebug("aaa2 ");
71 return false; 71 return false;
72 } 72 }
73 73
74 74
75 if ( mAlarmRepeatCount != rhs.mAlarmRepeatCount ) { 75 if ( mAlarmRepeatCount != rhs.mAlarmRepeatCount ) {
76 76
77 qDebug("aaa3 "); 77 qDebug("aaa3 ");
78 return false; 78 return false;
79 } 79 }
80 80
81 if ( mAlarmEnabled != rhs.mAlarmEnabled ) { 81 if ( mAlarmEnabled != rhs.mAlarmEnabled ) {
82 82
83 qDebug("aaa4 "); 83 qDebug("aaa4 ");
84 return false; 84 return false;
85 } 85 }
86 86
87 if ( mHasTime != rhs.mHasTime ) { 87 if ( mHasTime != rhs.mHasTime ) {
88 88
89 qDebug("aaa5 "); 89 qDebug("aaa5 ");
90 return false; 90 return false;
91 } 91 }
92#endif 92#endif
93 93
94 94
95 if (mHasTime) { 95 if (mHasTime) {
96 if (mAlarmTime != rhs.mAlarmTime) 96 if (mAlarmTime != rhs.mAlarmTime)
97 return false; 97 return false;
98 } else { 98 } else {
99 if (mOffset != rhs.mOffset || 99 if (mOffset != rhs.mOffset ||
100 mEndOffset != rhs.mEndOffset) 100 mEndOffset != rhs.mEndOffset)
101 return false; 101 return false;
102 } 102 }
103 switch (mType) { 103 switch (mType) {
104 case Display: 104 case Display:
105 return mDescription == rhs.mDescription; 105 return mDescription == rhs.mDescription;
106 106
107 case Email: 107 case Email:
108 return mDescription == rhs.mDescription && 108 return mDescription == rhs.mDescription &&
109 mMailAttachFiles == rhs.mMailAttachFiles && 109 mMailAttachFiles == rhs.mMailAttachFiles &&
110 mMailAddresses == rhs.mMailAddresses && 110 mMailAddresses == rhs.mMailAddresses &&
111 mMailSubject == rhs.mMailSubject; 111 mMailSubject == rhs.mMailSubject;
112 112
113 case Procedure: 113 case Procedure:
114 return mFile == rhs.mFile && 114 return mFile == rhs.mFile &&
115 mDescription == rhs.mDescription; 115 mDescription == rhs.mDescription;
116 116
117 case Audio: 117 case Audio:
118 return mFile == rhs.mFile; 118 return mFile == rhs.mFile;
119 119
120 case Invalid: 120 case Invalid:
121 break; 121 break;
122 } 122 }
123 return false; 123 return false;
124} 124}
125 125
126void Alarm::setType(Alarm::Type type) 126void Alarm::setType(Alarm::Type type)
127{ 127{
128 if (type == mType) 128 if (type == mType)
129 return; 129 return;
130 130
131 switch (type) { 131 switch (type) {
132 case Display: 132 case Display:
133 mDescription = ""; 133 mDescription = "";
134 break; 134 break;
135 case Procedure: 135 case Procedure:
136 mFile = mDescription = ""; 136 mFile = mDescription = "";
137 break; 137 break;
138 case Audio: 138 case Audio:
139 mFile = ""; 139 mFile = "";
140 break; 140 break;
141 case Email: 141 case Email:
142 mMailSubject = mDescription = ""; 142 mMailSubject = mDescription = "";
143 mMailAddresses.clear(); 143 mMailAddresses.clear();
144 mMailAttachFiles.clear(); 144 mMailAttachFiles.clear();
145 break; 145 break;
146 case Invalid: 146 case Invalid:
147 break; 147 break;
148 default: 148 default:
149 return; 149 return;
150 } 150 }
151 mType = type; 151 mType = type;
152 mParent->updated(); 152 mParent->updated();
153} 153}
154 154
155Alarm::Type Alarm::type() const 155Alarm::Type Alarm::type() const
156{ 156{
157 return mType; 157 return mType;
158} 158}
159 159
160void Alarm::setAudioAlarm(const QString &audioFile) 160void Alarm::setAudioAlarm(const QString &audioFile)
161{ 161{
162 mType = Audio; 162 mType = Audio;
163 mFile = audioFile; 163 mFile = audioFile;
164 mParent->updated(); 164 mParent->updated();
165} 165}
166 166
167void Alarm::setAudioFile(const QString &audioFile) 167void Alarm::setAudioFile(const QString &audioFile)
168{ 168{
169 if (mType == Audio) { 169 if (mType == Audio) {
170 mFile = audioFile; 170 mFile = audioFile;
171 mParent->updated(); 171 mParent->updated();
172 } 172 }
173} 173}
174 174
175QString Alarm::audioFile() const 175QString Alarm::audioFile() const
176{ 176{
177 return (mType == Audio) ? mFile : QString::null; 177 return (mType == Audio) ? mFile : QString::null;
178} 178}
179 179
180void Alarm::setProcedureAlarm(const QString &programFile, const QString &arguments) 180void Alarm::setProcedureAlarm(const QString &programFile, const QString &arguments)
181{ 181{
182 mType = Procedure; 182 mType = Procedure;
183 mFile = programFile; 183 mFile = programFile;
184 mDescription = arguments; 184 mDescription = arguments;
185 mParent->updated(); 185 mParent->updated();
186} 186}
187 187
188void Alarm::setProgramFile(const QString &programFile) 188void Alarm::setProgramFile(const QString &programFile)
189{ 189{
190 if (mType == Procedure) { 190 if (mType == Procedure) {
191 mFile = programFile; 191 mFile = programFile;
192 mParent->updated(); 192 mParent->updated();
193 } 193 }
194} 194}
195 195
196QString Alarm::programFile() const 196QString Alarm::programFile() const
197{ 197{
198 return (mType == Procedure) ? mFile : QString::null; 198 return (mType == Procedure) ? mFile : QString::null;
199} 199}
200 200
201void Alarm::setProgramArguments(const QString &arguments) 201void Alarm::setProgramArguments(const QString &arguments)
202{ 202{
203 if (mType == Procedure) { 203 if (mType == Procedure) {
204 mDescription = arguments; 204 mDescription = arguments;
205 mParent->updated(); 205 mParent->updated();
206 } 206 }
207} 207}
208 208
209QString Alarm::programArguments() const 209QString Alarm::programArguments() const
210{ 210{
211 return (mType == Procedure) ? mDescription : QString::null; 211 return (mType == Procedure) ? mDescription : QString::null;
212} 212}
213 213
214void Alarm::setEmailAlarm(const QString &subject, const QString &text, 214void Alarm::setEmailAlarm(const QString &subject, const QString &text,
215 const QValueList<Person> &addressees, const QStringList &attachments) 215 const QValueList<Person> &addressees, const QStringList &attachments)
216{ 216{
217 mType = Email; 217 mType = Email;
218 mMailSubject = subject; 218 mMailSubject = subject;
219 mDescription = text; 219 mDescription = text;
220 mMailAddresses = addressees; 220 mMailAddresses = addressees;
221 mMailAttachFiles = attachments; 221 mMailAttachFiles = attachments;
222 mParent->updated(); 222 mParent->updated();
223} 223}
224 224
225void Alarm::setMailAddress(const Person &mailAddress) 225void Alarm::setMailAddress(const Person &mailAddress)
226{ 226{
227 if (mType == Email) { 227 if (mType == Email) {
228 mMailAddresses.clear(); 228 mMailAddresses.clear();
229 mMailAddresses += mailAddress; 229 mMailAddresses += mailAddress;
230 mParent->updated(); 230 mParent->updated();
231 } 231 }
232} 232}
233 233
234void Alarm::setMailAddresses(const QValueList<Person> &mailAddresses) 234void Alarm::setMailAddresses(const QValueList<Person> &mailAddresses)
235{ 235{
236 if (mType == Email) { 236 if (mType == Email) {
237 mMailAddresses = mailAddresses; 237 mMailAddresses = mailAddresses;
238 mParent->updated(); 238 mParent->updated();
239 } 239 }
240} 240}
241 241
242void Alarm::addMailAddress(const Person &mailAddress) 242void Alarm::addMailAddress(const Person &mailAddress)
243{ 243{
244 if (mType == Email) { 244 if (mType == Email) {
245 mMailAddresses += mailAddress; 245 mMailAddresses += mailAddress;
246 mParent->updated(); 246 mParent->updated();
247 } 247 }
248} 248}
249 249
250QValueList<Person> Alarm::mailAddresses() const 250QValueList<Person> Alarm::mailAddresses() const
251{ 251{
252 return (mType == Email) ? mMailAddresses : QValueList<Person>(); 252 return (mType == Email) ? mMailAddresses : QValueList<Person>();
253} 253}
254 254
255void Alarm::setMailSubject(const QString &mailAlarmSubject) 255void Alarm::setMailSubject(const QString &mailAlarmSubject)
256{ 256{
257 if (mType == Email) { 257 if (mType == Email) {
258 mMailSubject = mailAlarmSubject; 258 mMailSubject = mailAlarmSubject;
259 mParent->updated(); 259 mParent->updated();
260 } 260 }
261} 261}
262 262
263QString Alarm::mailSubject() const 263QString Alarm::mailSubject() const
264{ 264{
265 return (mType == Email) ? mMailSubject : QString::null; 265 return (mType == Email) ? mMailSubject : QString::null;
266} 266}
267 267
268void Alarm::setMailAttachment(const QString &mailAttachFile) 268void Alarm::setMailAttachment(const QString &mailAttachFile)
269{ 269{
270 if (mType == Email) { 270 if (mType == Email) {
271 mMailAttachFiles.clear(); 271 mMailAttachFiles.clear();
272 mMailAttachFiles += mailAttachFile; 272 mMailAttachFiles += mailAttachFile;
273 mParent->updated(); 273 mParent->updated();
274 } 274 }
275} 275}
276 276
277void Alarm::setMailAttachments(const QStringList &mailAttachFiles) 277void Alarm::setMailAttachments(const QStringList &mailAttachFiles)
278{ 278{
279 if (mType == Email) { 279 if (mType == Email) {
280 mMailAttachFiles = mailAttachFiles; 280 mMailAttachFiles = mailAttachFiles;
281 mParent->updated(); 281 mParent->updated();
282 } 282 }
283} 283}
284 284
285void Alarm::addMailAttachment(const QString &mailAttachFile) 285void Alarm::addMailAttachment(const QString &mailAttachFile)
286{ 286{
287 if (mType == Email) { 287 if (mType == Email) {
288 mMailAttachFiles += mailAttachFile; 288 mMailAttachFiles += mailAttachFile;
289 mParent->updated(); 289 mParent->updated();
290 } 290 }
291} 291}
292 292
293QStringList Alarm::mailAttachments() const 293QStringList Alarm::mailAttachments() const
294{ 294{
295 return (mType == Email) ? mMailAttachFiles : QStringList(); 295 return (mType == Email) ? mMailAttachFiles : QStringList();
296} 296}
297 297
298void Alarm::setMailText(const QString &text) 298void Alarm::setMailText(const QString &text)
299{ 299{
300 if (mType == Email) { 300 if (mType == Email) {
301 mDescription = text; 301 mDescription = text;
302 mParent->updated(); 302 mParent->updated();
303 } 303 }
304} 304}
305 305
306QString Alarm::mailText() const 306QString Alarm::mailText() const
307{ 307{
308 return (mType == Email) ? mDescription : QString::null; 308 return (mType == Email) ? mDescription : QString::null;
309} 309}
310 310
311void Alarm::setDisplayAlarm(const QString &text) 311void Alarm::setDisplayAlarm(const QString &text)
312{ 312{
313 mType = Display; 313 mType = Display;
314 mDescription = text; 314 mDescription = text;
315 mParent->updated(); 315 mParent->updated();
316} 316}
317 317
318void Alarm::setText(const QString &text) 318void Alarm::setText(const QString &text)
319{ 319{
320 if (mType == Display) { 320 if (mType == Display) {
321 mDescription = text; 321 mDescription = text;
322 mParent->updated(); 322 mParent->updated();
323 } 323 }
324} 324}
325 325
326QString Alarm::text() const 326QString Alarm::text() const
327{ 327{
328 return (mType == Display) ? mDescription : QString::null; 328 return (mType == Display) ? mDescription : QString::null;
329} 329}
330 330
331void Alarm::setTime(const QDateTime &alarmTime) 331void Alarm::setTime(const QDateTime &alarmTime)
332{ 332{
333 mAlarmTime = alarmTime; 333 mAlarmTime = alarmTime;
334 mHasTime = true; 334 mHasTime = true;
335 335
336 mParent->updated(); 336 mParent->updated();
337} 337}
338int Alarm::offset() 338int Alarm::offset()
339{ 339{
340 if ( hasTime() ) { 340 if ( hasTime() ) {
341 if (mParent->type()=="Todo") { 341 if (mParent->typeID() == todoID ) {
342 Todo *t = static_cast<Todo*>(mParent); 342 Todo *t = static_cast<Todo*>(mParent);
343 return t->dtDue().secsTo( mAlarmTime ) ; 343 return t->dtDue().secsTo( mAlarmTime ) ;
344 } else 344 } else
345 return mParent->dtStart().secsTo( mAlarmTime ) ; 345 return mParent->dtStart().secsTo( mAlarmTime ) ;
346 } 346 }
347 else 347 else
348 { 348 {
349 return mOffset.asSeconds(); 349 return mOffset.asSeconds();
350 } 350 }
351 351
352} 352}
353QString Alarm::offsetText() 353QString Alarm::offsetText()
354{ 354{
355 int min = -offset()/60; 355 int min = -offset()/60;
356 int hours = min /60; 356 int hours = min /60;
357 min = min % 60; 357 min = min % 60;
358 int days = hours /24; 358 int days = hours /24;
359 hours = hours % 24; 359 hours = hours % 24;
360 QString message; 360 QString message;
361 //qDebug("%d %d %d ", days, hours, min ); 361 //qDebug("%d %d %d ", days, hours, min );
362 if ( days > 0 ) 362 if ( days > 0 )
363 message += i18n("%1d").arg( days ); 363 message += i18n("%1d").arg( days );
364 if ( hours > 0 ) { 364 if ( hours > 0 ) {
365 if ( !message.isEmpty() ) message += "/"; 365 if ( !message.isEmpty() ) message += "/";
366 message += i18n("%1h").arg( hours ); 366 message += i18n("%1h").arg( hours );
367 } 367 }
368 if ( min > 0 ) { 368 if ( min > 0 ) {
369 if ( !message.isEmpty() ) message += "/"; 369 if ( !message.isEmpty() ) message += "/";
370 message += i18n("%1min").arg( min ); 370 message += i18n("%1min").arg( min );
371 } 371 }
372 if ( message.isEmpty() ) 372 if ( message.isEmpty() )
373 message = i18n("%1min").arg( 0 ); 373 message = i18n("%1min").arg( 0 );
374 return message; 374 return message;
375} 375}
376 376
377 377
378QDateTime Alarm::time() const 378QDateTime Alarm::time() const
379{ 379{
380 if ( hasTime() ) 380 if ( hasTime() )
381 return mAlarmTime; 381 return mAlarmTime;
382 else 382 else
383 { 383 {
384 if (mParent->type()=="Todo") { 384 if (mParent->typeID() == todoID ) {
385 Todo *t = static_cast<Todo*>(mParent); 385 Todo *t = static_cast<Todo*>(mParent);
386 return mOffset.end( t->dtDue() ); 386 return mOffset.end( t->dtDue() );
387 } else if (mEndOffset) { 387 } else if (mEndOffset) {
388 return mOffset.end( mParent->dtEnd() ); 388 return mOffset.end( mParent->dtEnd() );
389 } else { 389 } else {
390 return mOffset.end( mParent->dtStart() ); 390 return mOffset.end( mParent->dtStart() );
391 } 391 }
392 } 392 }
393} 393}
394 394
395bool Alarm::hasTime() const 395bool Alarm::hasTime() const
396{ 396{
397 return mHasTime; 397 return mHasTime;
398} 398}
399 399
400void Alarm::setSnoozeTime(int alarmSnoozeTime) 400void Alarm::setSnoozeTime(int alarmSnoozeTime)
401{ 401{
402 mAlarmSnoozeTime = alarmSnoozeTime; 402 mAlarmSnoozeTime = alarmSnoozeTime;
403 mParent->updated(); 403 mParent->updated();
404} 404}
405 405
406int Alarm::snoozeTime() const 406int Alarm::snoozeTime() const
407{ 407{
408 return mAlarmSnoozeTime; 408 return mAlarmSnoozeTime;
409} 409}
410 410
411void Alarm::setRepeatCount(int alarmRepeatCount) 411void Alarm::setRepeatCount(int alarmRepeatCount)
412{ 412{
413 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl; 413 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl;
414 414
415 mAlarmRepeatCount = alarmRepeatCount; 415 mAlarmRepeatCount = alarmRepeatCount;
416 mParent->updated(); 416 mParent->updated();
417} 417}
418 418
419int Alarm::repeatCount() const 419int Alarm::repeatCount() const
420{ 420{
421 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl; 421 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl;
422 return mAlarmRepeatCount; 422 return mAlarmRepeatCount;
423} 423}
424 424
425void Alarm::toggleAlarm() 425void Alarm::toggleAlarm()
426{ 426{
427 mAlarmEnabled = !mAlarmEnabled; 427 mAlarmEnabled = !mAlarmEnabled;
428 mParent->updated(); 428 mParent->updated();
429} 429}
430 430
431void Alarm::setEnabled(bool enable) 431void Alarm::setEnabled(bool enable)
432{ 432{
433 mAlarmEnabled = enable; 433 mAlarmEnabled = enable;
434 mParent->updated(); 434 mParent->updated();
435} 435}
436 436
437bool Alarm::enabled() const 437bool Alarm::enabled() const
438{ 438{
439 return mAlarmEnabled; 439 return mAlarmEnabled;
440} 440}
441 441
442void Alarm::setStartOffset( const Duration &offset ) 442void Alarm::setStartOffset( const Duration &offset )
443{ 443{
444 mOffset = offset; 444 mOffset = offset;
445 mEndOffset = false; 445 mEndOffset = false;
446 mHasTime = false; 446 mHasTime = false;
447 mParent->updated(); 447 mParent->updated();
448} 448}
449 449
450Duration Alarm::startOffset() const 450Duration Alarm::startOffset() const
451{ 451{
452 return (mHasTime || mEndOffset) ? 0 : mOffset; 452 return (mHasTime || mEndOffset) ? 0 : mOffset;
453} 453}
454 454
455bool Alarm::hasStartOffset() const 455bool Alarm::hasStartOffset() const
456{ 456{
457 return !mHasTime && !mEndOffset; 457 return !mHasTime && !mEndOffset;
458} 458}
459 459
460bool Alarm::hasEndOffset() const 460bool Alarm::hasEndOffset() const
461{ 461{
462 return !mHasTime && mEndOffset; 462 return !mHasTime && mEndOffset;
463} 463}
464 464
465void Alarm::setEndOffset( const Duration &offset ) 465void Alarm::setEndOffset( const Duration &offset )
466{ 466{
467 mOffset = offset; 467 mOffset = offset;
468 mEndOffset = true; 468 mEndOffset = true;
469 mHasTime = false; 469 mHasTime = false;
470 mParent->updated(); 470 mParent->updated();
471} 471}
472 472
473Duration Alarm::endOffset() const 473Duration Alarm::endOffset() const
474{ 474{
475 return (mHasTime || !mEndOffset) ? 0 : mOffset; 475 return (mHasTime || !mEndOffset) ? 0 : mOffset;
476} 476}
477 477
478void Alarm::setParent( Incidence *parent ) 478void Alarm::setParent( Incidence *parent )
479{ 479{
480 mParent = parent; 480 mParent = parent;
481} 481}