summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-11-26 11:20:22 (UTC)
committer zautrix <zautrix>2005-11-26 11:20:22 (UTC)
commit85bd9f05564e566b296c949ce6e214ebdbf573ac (patch) (unidiff)
treeb00eb9453ea06f2b43fd896a9a4840b7d64af69b
parent3cd0013c04172b312ee21e80224a3b7734b4d413 (diff)
downloadkdepimpi-85bd9f05564e566b296c949ce6e214ebdbf573ac.zip
kdepimpi-85bd9f05564e566b296c949ce6e214ebdbf573ac.tar.gz
kdepimpi-85bd9f05564e566b296c949ce6e214ebdbf573ac.tar.bz2
sync
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp4
-rw-r--r--libkcal/calendar.h2
-rw-r--r--libkcal/calendarlocal.cpp11
-rw-r--r--libkcal/calendarlocal.h2
4 files changed, 14 insertions, 5 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 538325e..9571f16 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,5247 +1,5247 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mMultiResourceSync = false; 369 mMultiResourceSync = false;
370 flag_blockConflict = false; 370 flag_blockConflict = false;
371 flag_blockScrollBar = false; 371 flag_blockScrollBar = false;
372 flag_checkFileFirsttime = true; 372 flag_checkFileFirsttime = true;
373 flag_clearallviewsEventDisplay = false; 373 flag_clearallviewsEventDisplay = false;
374 flag_clearallviewsupdateView = false; 374 flag_clearallviewsupdateView = false;
375 mNextAlarmDateTime = QDateTime::currentDateTime(); 375 mNextAlarmDateTime = QDateTime::currentDateTime();
376 setFocusPolicy (NoFocus ); 376 setFocusPolicy (NoFocus );
377 mViewerCallerIsSearchDialog = false; 377 mViewerCallerIsSearchDialog = false;
378 mBlockShowDates = false; 378 mBlockShowDates = false;
379 mConflictingEvent = 0; 379 mConflictingEvent = 0;
380 mDatePickerMode = 0; 380 mDatePickerMode = 0;
381 mCurrentSyncDevice = ""; 381 mCurrentSyncDevice = "";
382 mViewManager = new KOViewManager( this ); 382 mViewManager = new KOViewManager( this );
383 mDialogManager = new KODialogManager( this ); 383 mDialogManager = new KODialogManager( this );
384 mEventViewerDialog = 0; 384 mEventViewerDialog = 0;
385 mModified = false; 385 mModified = false;
386 mReadOnly = false; 386 mReadOnly = false;
387 mSelectedIncidence = 0; 387 mSelectedIncidence = 0;
388 mCalPrinter = 0; 388 mCalPrinter = 0;
389 mFilters.setAutoDelete(true); 389 mFilters.setAutoDelete(true);
390 390
391 mCalendar->registerObserver( this ); 391 mCalendar->registerObserver( this );
392 // TODO: Make sure that view is updated, when calendar is changed. 392 // TODO: Make sure that view is updated, when calendar is changed.
393 393
394 mStorage = new FileStorage( mCalendar ); 394 mStorage = new FileStorage( mCalendar );
395 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 395 mNavigator = new DateNavigator( this, "datevav", mViewManager );
396 396
397 QBoxLayout *topLayout = (QBoxLayout*)layout(); 397 QBoxLayout *topLayout = (QBoxLayout*)layout();
398#ifndef KORG_NOSPLITTER 398#ifndef KORG_NOSPLITTER
399 // create the main layout frames. 399 // create the main layout frames.
400 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 400 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
401 topLayout->addWidget(mPanner); 401 topLayout->addWidget(mPanner);
402 402
403 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 403 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
404 "CalendarView::LeftFrame"); 404 "CalendarView::LeftFrame");
405 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 405 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
406 406
407 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 407 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
408 "CalendarView::DateNavigator" ); 408 "CalendarView::DateNavigator" );
409 409
410 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 410 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
411 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 411 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
412 mTodoList->setNavigator( mNavigator ); 412 mTodoList->setNavigator( mNavigator );
413 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 413 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
414 414
415#ifdef KORG_NORESOURCEVIEW 415#ifdef KORG_NORESOURCEVIEW
416 mResourceView = 0; 416 mResourceView = 0;
417#else 417#else
418 if ( mResourceManager ) { 418 if ( mResourceManager ) {
419 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 419 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
420 mResourceView->updateView(); 420 mResourceView->updateView();
421 connect( mResourceView, SIGNAL( resourcesChanged() ), 421 connect( mResourceView, SIGNAL( resourcesChanged() ),
422 SLOT( updateView() ) ); 422 SLOT( updateView() ) );
423 } else { 423 } else {
424 mResourceView = 0; 424 mResourceView = 0;
425 } 425 }
426#endif 426#endif
427 QWidget *rightBox = new QWidget( mPanner ); 427 QWidget *rightBox = new QWidget( mPanner );
428 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 428 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
429 429
430 mRightFrame = new QWidgetStack( rightBox ); 430 mRightFrame = new QWidgetStack( rightBox );
431 rightLayout->addWidget( mRightFrame, 1 ); 431 rightLayout->addWidget( mRightFrame, 1 );
432 432
433 mLeftFrame = mLeftSplitter; 433 mLeftFrame = mLeftSplitter;
434#else 434#else
435 //QWidget *mainBox = new QWidget( this ); 435 //QWidget *mainBox = new QWidget( this );
436 //QWidget *leftFrame = new QWidget( mainBox ); 436 //QWidget *leftFrame = new QWidget( mainBox );
437 //QBoxLayout * mainBoxLayout; 437 //QBoxLayout * mainBoxLayout;
438 if ( KOPrefs::instance()->mVerticalScreen ) { 438 if ( KOPrefs::instance()->mVerticalScreen ) {
439 //mainBoxLayout = new QVBoxLayout(mainBox); 439 //mainBoxLayout = new QVBoxLayout(mainBox);
440 //leftFrameLayout = new QHBoxLayout(leftFrame ); 440 //leftFrameLayout = new QHBoxLayout(leftFrame );
441 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 441 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
442 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 442 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
443 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 443 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
444 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 444 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
445 } else { 445 } else {
446 //mainBoxLayout = new QHBoxLayout(mainBox); 446 //mainBoxLayout = new QHBoxLayout(mainBox);
447 //leftFrameLayout = new QVBoxLayout(leftFrame ); 447 //leftFrameLayout = new QVBoxLayout(leftFrame );
448 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 448 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
449 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 449 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
450 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 450 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
451 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 451 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
452 } 452 }
453 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 453 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
454 //QBoxLayout * leftFrameLayout; 454 //QBoxLayout * leftFrameLayout;
455 topLayout->addWidget( mMainFrame ); 455 topLayout->addWidget( mMainFrame );
456#ifdef DESKTOP_VERSION 456#ifdef DESKTOP_VERSION
457 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 457 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
458 topLayout->addWidget( mDateScrollBar ); 458 topLayout->addWidget( mDateScrollBar );
459 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 459 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
460 if ( QApplication::desktop()->width() < 800 ) 460 if ( QApplication::desktop()->width() < 800 )
461 mDateScrollBar->hide(); 461 mDateScrollBar->hide();
462#endif 462#endif
463 //mainBoxLayout->addWidget (mLeftFrame); 463 //mainBoxLayout->addWidget (mLeftFrame);
464 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 464 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
465 "CalendarView::DateNavigator" ); 465 "CalendarView::DateNavigator" );
466#if 0 466#if 0
467 // FIXME 467 // FIXME
468 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 468 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
469 "CalendarView::DateNavigator", QDate::currentDate()); 469 "CalendarView::DateNavigator", QDate::currentDate());
470#endif 470#endif
471 // mDateNavigator->blockSignals( true ); 471 // mDateNavigator->blockSignals( true );
472 //leftFrameLayout->addWidget( mDateNavigator ); 472 //leftFrameLayout->addWidget( mDateNavigator );
473 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 473 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
474 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 474 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
475 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 475 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
476 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 476 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
477 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 477 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
478 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 478 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
479 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 479 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
480 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 480 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
481 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 481 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
482 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 482 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
483 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 483 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
484 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 484 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
485 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 485 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
486 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) ); 486 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) );
487 487
488 488
489 mTodoList->setNavigator( mNavigator ); 489 mTodoList->setNavigator( mNavigator );
490#if 0 490#if 0
491 if ( QApplication::desktop()->width() < 480 ) { 491 if ( QApplication::desktop()->width() < 480 ) {
492 leftFrameLayout->addWidget(mFilterView); 492 leftFrameLayout->addWidget(mFilterView);
493 leftFrameLayout->addWidget(mTodoList, 2 ); 493 leftFrameLayout->addWidget(mTodoList, 2 );
494 494
495 } else { 495 } else {
496 leftFrameLayout->addWidget(mTodoList,2 ); 496 leftFrameLayout->addWidget(mTodoList,2 );
497 leftFrameLayout->addWidget(mFilterView ); 497 leftFrameLayout->addWidget(mFilterView );
498 } 498 }
499#endif 499#endif
500 mFilterView->hide(); 500 mFilterView->hide();
501 mCalEditView->hide(); 501 mCalEditView->hide();
502 QWidget *rightBox = new QWidget( mMainFrame ); 502 QWidget *rightBox = new QWidget( mMainFrame );
503 //mainBoxLayout->addWidget ( rightBox, 10 ); 503 //mainBoxLayout->addWidget ( rightBox, 10 );
504 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 504 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
505 mRightFrame = new QWidgetStack( rightBox ); 505 mRightFrame = new QWidgetStack( rightBox );
506 rightLayout->addWidget( mRightFrame, 10 ); 506 rightLayout->addWidget( mRightFrame, 10 );
507 507
508 //mLeftFrame = (QWidget *)leftFrame; 508 //mLeftFrame = (QWidget *)leftFrame;
509 if ( KOPrefs::instance()->mVerticalScreen ) { 509 if ( KOPrefs::instance()->mVerticalScreen ) {
510 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 510 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
511 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 511 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
512 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 512 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
513 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 513 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
514 } else { 514 } else {
515 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 515 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
516 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 516 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
517 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 517 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
518 } 518 }
519 if ( !KOPrefs::instance()->mShowDateNavigator) 519 if ( !KOPrefs::instance()->mShowDateNavigator)
520 mDateNavigator->hide(); 520 mDateNavigator->hide();
521 //qDebug("Calendarview Size %d %d ", width(), height()); 521 //qDebug("Calendarview Size %d %d ", width(), height());
522#endif 522#endif
523 523
524 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 524 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
525 SLOT( showDates( const KCal::DateList & ) ) ); 525 SLOT( showDates( const KCal::DateList & ) ) );
526 526
527 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 527 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
528 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 528 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
529 529
530 530
531 531
532 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 532 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
533 mViewManager, SLOT( showMonth( const QDate & ) ) ); 533 mViewManager, SLOT( showMonth( const QDate & ) ) );
534 534
535 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 535 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
536 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 536 mNavigator, SLOT( selectWeek( const QDate & ) ) );
537 537
538 connect( mDateNavigator, SIGNAL( goPrevYear() ), 538 connect( mDateNavigator, SIGNAL( goPrevYear() ),
539 mNavigator, SLOT( selectPreviousYear() ) ); 539 mNavigator, SLOT( selectPreviousYear() ) );
540 connect( mDateNavigator, SIGNAL( goNextYear() ), 540 connect( mDateNavigator, SIGNAL( goNextYear() ),
541 mNavigator, SLOT( selectNextYear() ) ); 541 mNavigator, SLOT( selectNextYear() ) );
542 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 542 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
543 mNavigator, SLOT( selectPreviousMonth() ) ); 543 mNavigator, SLOT( selectPreviousMonth() ) );
544 connect( mDateNavigator, SIGNAL( goNextMonth() ), 544 connect( mDateNavigator, SIGNAL( goNextMonth() ),
545 mNavigator, SLOT( selectNextMonth() ) ); 545 mNavigator, SLOT( selectNextMonth() ) );
546 546
547 connect( mDateNavigator, SIGNAL( goPrevious() ), 547 connect( mDateNavigator, SIGNAL( goPrevious() ),
548 mNavigator, SLOT( selectPrevious() ) ); 548 mNavigator, SLOT( selectPrevious() ) );
549 connect( mDateNavigator, SIGNAL( goNext() ), 549 connect( mDateNavigator, SIGNAL( goNext() ),
550 mNavigator, SLOT( selectNext() ) ); 550 mNavigator, SLOT( selectNext() ) );
551 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 551 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
552 mNavigator, SLOT( slotMonthSelect( int ) ) ); 552 mNavigator, SLOT( slotMonthSelect( int ) ) );
553 553
554 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 554 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
555 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 555 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
556#if 0 556#if 0
557 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 557 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
558 SLOT( incidenceAdded( Incidence *) ) ); 558 SLOT( incidenceAdded( Incidence *) ) );
559#endif 559#endif
560 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 560 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
561 561
562 connect( this, SIGNAL( configChanged() ), 562 connect( this, SIGNAL( configChanged() ),
563 mDateNavigator, SLOT( updateConfig() ) ); 563 mDateNavigator, SLOT( updateConfig() ) );
564 564
565 connect( mTodoList, SIGNAL( newTodoSignal() ), 565 connect( mTodoList, SIGNAL( newTodoSignal() ),
566 SLOT( newTodo() ) ); 566 SLOT( newTodo() ) );
567 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 567 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
568 SLOT( newSubTodo( Todo * ) ) ); 568 SLOT( newSubTodo( Todo * ) ) );
569 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 569 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
570 SLOT( editTodo( Todo * ) ) ); 570 SLOT( editTodo( Todo * ) ) );
571 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 571 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
572 SLOT( showTodo( Todo *) ) ); 572 SLOT( showTodo( Todo *) ) );
573 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 573 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
574 SLOT( deleteTodo( Todo *) ) ); 574 SLOT( deleteTodo( Todo *) ) );
575 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 575 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
576 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 576 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
577 SLOT( purgeCompleted() ) ); 577 SLOT( purgeCompleted() ) );
578 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 578 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
579 SIGNAL( todoModified( Todo *, int ) ) ); 579 SIGNAL( todoModified( Todo *, int ) ) );
580 580
581 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 581 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
582 this, SLOT ( cloneIncidence( Incidence * ) ) ); 582 this, SLOT ( cloneIncidence( Incidence * ) ) );
583 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 583 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
584 this, SLOT (cancelIncidence( Incidence * ) ) ); 584 this, SLOT (cancelIncidence( Incidence * ) ) );
585 585
586 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 586 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
587 this, SLOT ( moveIncidence( Incidence * ) ) ); 587 this, SLOT ( moveIncidence( Incidence * ) ) );
588 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 588 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
589 this, SLOT ( beamIncidence( Incidence * ) ) ); 589 this, SLOT ( beamIncidence( Incidence * ) ) );
590 590
591 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 591 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
592 this, SLOT ( todo_unsub( Todo * ) ) ); 592 this, SLOT ( todo_unsub( Todo * ) ) );
593 593
594 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 594 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
595 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 595 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
596 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 596 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
597 SLOT( updateTodo( Todo *, int ) ) ); 597 SLOT( updateTodo( Todo *, int ) ) );
598 connect( this, SIGNAL( todoModified( Todo *, int )), this, 598 connect( this, SIGNAL( todoModified( Todo *, int )), this,
599 SLOT( changeTodoDisplay( Todo *, int ) ) ); 599 SLOT( changeTodoDisplay( Todo *, int ) ) );
600 600
601 601
602 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 602 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
603 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 603 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
604 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 604 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
605 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 605 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
606 606
607 607
608 608
609 609
610 610
611 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 611 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
612 SLOT(checkClipboard())); 612 SLOT(checkClipboard()));
613 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 613 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
614 SLOT( processTodoListSelection( Incidence * ) ) ); 614 SLOT( processTodoListSelection( Incidence * ) ) );
615 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 615 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
616 616
617 // kdDebug() << "CalendarView::CalendarView() done" << endl; 617 // kdDebug() << "CalendarView::CalendarView() done" << endl;
618 618
619 mDateFrame = new QVBox(0,0,WType_Popup); 619 mDateFrame = new QVBox(0,0,WType_Popup);
620 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 620 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
621 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 621 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
622 mDateFrame->setLineWidth(3); 622 mDateFrame->setLineWidth(3);
623 mDateFrame->hide(); 623 mDateFrame->hide();
624 mDateFrame->setCaption( i18n( "Pick a date to display")); 624 mDateFrame->setCaption( i18n( "Pick a date to display"));
625 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 625 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
626 626
627 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 627 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
628 628
629 mEventEditor = mDialogManager->getEventEditor(); 629 mEventEditor = mDialogManager->getEventEditor();
630 mTodoEditor = mDialogManager->getTodoEditor(); 630 mTodoEditor = mDialogManager->getTodoEditor();
631 631
632 mFlagEditDescription = false; 632 mFlagEditDescription = false;
633 633
634 mSuspendTimer = new QTimer( this ); 634 mSuspendTimer = new QTimer( this );
635 mAlarmTimer = new QTimer( this ); 635 mAlarmTimer = new QTimer( this );
636 mRecheckAlarmTimer = new QTimer( this ); 636 mRecheckAlarmTimer = new QTimer( this );
637 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 637 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
638 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 638 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
639 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 639 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
640 mAlarmDialog = new AlarmDialog( this ); 640 mAlarmDialog = new AlarmDialog( this );
641 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 641 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
642 mAlarmDialog->setServerNotification( false ); 642 mAlarmDialog->setServerNotification( false );
643 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 643 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
644 644
645 645
646#ifndef DESKTOP_VERSION 646#ifndef DESKTOP_VERSION
647//US listen for arriving address resultsets 647//US listen for arriving address resultsets
648 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 648 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
649 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 649 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
650#endif 650#endif
651 mDateNavigator->setCalendar( mCalendar ); 651 mDateNavigator->setCalendar( mCalendar );
652} 652}
653 653
654 654
655CalendarView::~CalendarView() 655CalendarView::~CalendarView()
656{ 656{
657 // kdDebug() << "~CalendarView()" << endl; 657 // kdDebug() << "~CalendarView()" << endl;
658 //qDebug("CalendarView::~CalendarView() "); 658 //qDebug("CalendarView::~CalendarView() ");
659 delete mDialogManager; 659 delete mDialogManager;
660 delete mViewManager; 660 delete mViewManager;
661 delete mStorage; 661 delete mStorage;
662 delete mDateFrame ; 662 delete mDateFrame ;
663 delete mEventViewerDialog; 663 delete mEventViewerDialog;
664 //kdDebug() << "~CalendarView() done" << endl; 664 //kdDebug() << "~CalendarView() done" << endl;
665} 665}
666 666
667 667
668void CalendarView::nextConflict( bool all, bool allday ) 668void CalendarView::nextConflict( bool all, bool allday )
669{ 669{
670 if ( flag_blockConflict ) return; 670 if ( flag_blockConflict ) return;
671 flag_blockConflict = true; 671 flag_blockConflict = true;
672 QPtrList<Event> testlist = mCalendar->events(); 672 QPtrList<Event> testlist = mCalendar->events();
673 Event * test = testlist.first(); 673 Event * test = testlist.first();
674 while ( test ) { 674 while ( test ) {
675 test->setTagged( false ); 675 test->setTagged( false );
676 test = testlist.next(); 676 test = testlist.next();
677 } 677 }
678 QTime st ( 0,0,0); 678 QTime st ( 0,0,0);
679 if ( mViewManager->currentView() == mViewManager->agendaView() ) 679 if ( mViewManager->currentView() == mViewManager->agendaView() )
680 st = mViewManager->agendaView()->agenda()->getEndTime(); 680 st = mViewManager->agendaView()->agenda()->getEndTime();
681 //qDebug("time %s ", st.toString().latin1()); 681 //qDebug("time %s ", st.toString().latin1());
682 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 682 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
683 QDateTime conflict; 683 QDateTime conflict;
684 QDateTime retVal; 684 QDateTime retVal;
685 bool found = false; 685 bool found = false;
686 Event * cE = 0; 686 Event * cE = 0;
687 Event * cE2 = 0; 687 Event * cE2 = 0;
688 QPtrList<Event> testlist2 = testlist; 688 QPtrList<Event> testlist2 = testlist;
689 test = testlist.first(); 689 test = testlist.first();
690 bool skip = false; 690 bool skip = false;
691 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 691 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
692 //QTime tm; 692 //QTime tm;
693 //tm.start(); 693 //tm.start();
694 while ( test ) { 694 while ( test ) {
695 qApp->processEvents(); 695 qApp->processEvents();
696 skip = false; 696 skip = false;
697 if ( !all ) skip = ( allday != test->doesFloat() ); 697 if ( !all ) skip = ( allday != test->doesFloat() );
698 if ( !skip ) { 698 if ( !skip ) {
699 if ( found ) 699 if ( found )
700 skip = !test->matchTime( &startDT, &conflict ); 700 skip = !test->matchTime( &startDT, &conflict );
701 else 701 else
702 skip = !test->matchTime( &startDT, 0 ); 702 skip = !test->matchTime( &startDT, 0 );
703 } 703 }
704 if ( !skip ) { 704 if ( !skip ) {
705 Event * test2 = testlist2.first(); 705 Event * test2 = testlist2.first();
706 while ( test2 ) { 706 while ( test2 ) {
707 skip = test2->isTagged(); 707 skip = test2->isTagged();
708 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 708 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
709 if ( !skip ) { 709 if ( !skip ) {
710 if ( found ) 710 if ( found )
711 skip = !test2->matchTime( &startDT, &conflict ); 711 skip = !test2->matchTime( &startDT, &conflict );
712 else 712 else
713 skip = !test2->matchTime( &startDT, 0 ); 713 skip = !test2->matchTime( &startDT, 0 );
714 } 714 }
715 if ( !skip ) { 715 if ( !skip ) {
716 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 716 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
717 //qDebug("overlap "); 717 //qDebug("overlap ");
718 if ( ! found ) { 718 if ( ! found ) {
719 if ( retVal >= startDT ) { 719 if ( retVal >= startDT ) {
720 conflict = retVal; 720 conflict = retVal;
721 cE = test; 721 cE = test;
722 cE2 = test2; 722 cE2 = test2;
723 found = true; 723 found = true;
724 } 724 }
725 } else { 725 } else {
726 if ( retVal >= startDT && retVal < conflict ) { 726 if ( retVal >= startDT && retVal < conflict ) {
727 conflict = retVal; 727 conflict = retVal;
728 cE = test; 728 cE = test;
729 cE2 = test2; 729 cE2 = test2;
730 } 730 }
731 } 731 }
732 } 732 }
733 } 733 }
734 test2 = testlist2.next(); 734 test2 = testlist2.next();
735 } 735 }
736 } 736 }
737 test->setTagged( true ); 737 test->setTagged( true );
738 test = testlist.next(); 738 test = testlist.next();
739 } 739 }
740 //qDebug("Search time : %d", tm.elapsed()); 740 //qDebug("Search time : %d", tm.elapsed());
741 if ( found ) { 741 if ( found ) {
742 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 742 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
743 mViewManager->showDayView(); 743 mViewManager->showDayView();
744 mNavigator->slotDaySelect( conflict.date() ); 744 mNavigator->slotDaySelect( conflict.date() );
745 int hour = conflict.time().hour(); 745 int hour = conflict.time().hour();
746 mViewManager->agendaView()->setStartHour( hour ); 746 mViewManager->agendaView()->setStartHour( hour );
747 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 747 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
748 flag_blockConflict = false; 748 flag_blockConflict = false;
749 return; 749 return;
750 } 750 }
751 751
752 topLevelWidget()->setCaption( i18n("No conflict found") ); 752 topLevelWidget()->setCaption( i18n("No conflict found") );
753 //qDebug("No conflict found "); 753 //qDebug("No conflict found ");
754 flag_blockConflict = false; 754 flag_blockConflict = false;
755 return; 755 return;
756} 756}
757 757
758void CalendarView::conflictAll() 758void CalendarView::conflictAll()
759{ 759{
760 nextConflict ( true, true ); 760 nextConflict ( true, true );
761} 761}
762void CalendarView::conflictAllday() 762void CalendarView::conflictAllday()
763{ 763{
764 nextConflict ( false, true ); 764 nextConflict ( false, true );
765} 765}
766void CalendarView::conflictNotAll() 766void CalendarView::conflictNotAll()
767{ 767{
768 nextConflict ( false, false ); 768 nextConflict ( false, false );
769} 769}
770 770
771void CalendarView::setCalReadOnly( int id, bool readO ) 771void CalendarView::setCalReadOnly( int id, bool readO )
772{ 772{
773 if ( readO ) { 773 if ( readO ) {
774 emit save(); 774 emit save();
775 } 775 }
776 mCalendar->setReadOnly( id, readO ); 776 mCalendar->setReadOnly( id, readO );
777} 777}
778void CalendarView::setScrollBarStep(int val ) 778void CalendarView::setScrollBarStep(int val )
779{ 779{
780#ifdef DESKTOP_VERSION 780#ifdef DESKTOP_VERSION
781 mDateScrollBar->setLineStep ( val ); 781 mDateScrollBar->setLineStep ( val );
782#endif 782#endif
783} 783}
784void CalendarView::scrollBarValue(int val ) 784void CalendarView::scrollBarValue(int val )
785{ 785{
786#ifdef DESKTOP_VERSION 786#ifdef DESKTOP_VERSION
787 if ( QApplication::desktop()->width() < 800 ) return; 787 if ( QApplication::desktop()->width() < 800 ) return;
788 if ( flag_blockScrollBar ) return; 788 if ( flag_blockScrollBar ) return;
789 flag_blockScrollBar = true; 789 flag_blockScrollBar = true;
790 int count = mNavigator->selectedDates().count(); 790 int count = mNavigator->selectedDates().count();
791 int day = mNavigator->selectedDates().first().dayOfYear(); 791 int day = mNavigator->selectedDates().first().dayOfYear();
792 int stepdays = val; 792 int stepdays = val;
793 if ( mDateScrollBar->lineStep () <= count ) { 793 if ( mDateScrollBar->lineStep () <= count ) {
794 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 794 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
795 //qDebug("VAL %d ",val ); 795 //qDebug("VAL %d ",val );
796 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 796 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
797 stepdays = day+stepdays; 797 stepdays = day+stepdays;
798 if ( stepdays < 0 ) stepdays = 0; 798 if ( stepdays < 0 ) stepdays = 0;
799 } 799 }
800 if ( stepdays == day ) { 800 if ( stepdays == day ) {
801 flag_blockScrollBar = false; 801 flag_blockScrollBar = false;
802 return; 802 return;
803 } 803 }
804 int year = mNavigator->selectedDates().first().year(); 804 int year = mNavigator->selectedDates().first().year();
805 QDate d ( year,1,1 ); 805 QDate d ( year,1,1 );
806 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 806 mNavigator->selectDates( d.addDays( stepdays-1) , count );
807 flag_blockScrollBar = false; 807 flag_blockScrollBar = false;
808#endif 808#endif
809 809
810} 810}
811void CalendarView::updateView(const QDate &start, const QDate &end) 811void CalendarView::updateView(const QDate &start, const QDate &end)
812{ 812{
813#ifdef DESKTOP_VERSION 813#ifdef DESKTOP_VERSION
814 if ( ! mDateScrollBar->draggingSlider () ) { 814 if ( ! mDateScrollBar->draggingSlider () ) {
815 int dof = start.dayOfYear(); 815 int dof = start.dayOfYear();
816 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 816 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
817 if ( dof != mDateScrollBar->value() ) { 817 if ( dof != mDateScrollBar->value() ) {
818 mDateScrollBar->blockSignals( true ); 818 mDateScrollBar->blockSignals( true );
819 mDateScrollBar->setValue( start.dayOfYear()); 819 mDateScrollBar->setValue( start.dayOfYear());
820 mDateScrollBar->blockSignals( false ); 820 mDateScrollBar->blockSignals( false );
821 } 821 }
822 } 822 }
823#endif 823#endif
824 mTodoList->updateView(); 824 mTodoList->updateView();
825 mViewManager->updateView(start, end); 825 mViewManager->updateView(start, end);
826 //mDateNavigator->updateView(); 826 //mDateNavigator->updateView();
827} 827}
828 828
829 829
830 830
831void CalendarView::checkFiles() 831void CalendarView::checkFiles()
832{ 832{
833 QString message; 833 QString message;
834 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 834 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
835 KopiCalendarFile * cal = calendars.first(); 835 KopiCalendarFile * cal = calendars.first();
836 while ( cal ) { 836 while ( cal ) {
837 if ( cal->mErrorOnLoad ) { 837 if ( cal->mErrorOnLoad ) {
838 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 838 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
839 } 839 }
840 cal = calendars.next(); 840 cal = calendars.next();
841 } 841 }
842 if ( !message.isEmpty() ) { 842 if ( !message.isEmpty() ) {
843 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 843 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
844 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed")); 844 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
845 } 845 }
846 if ( flag_checkFileFirsttime ) { 846 if ( flag_checkFileFirsttime ) {
847 flag_checkFileFirsttime = false; 847 flag_checkFileFirsttime = false;
848 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 848 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
849 } 849 }
850} 850}
851void CalendarView::checkAlarms() 851void CalendarView::checkAlarms()
852{ 852{
853 KConfig *config = KOGlobals::config(); 853 KConfig *config = KOGlobals::config();
854 config->setGroup( "AppRun" ); 854 config->setGroup( "AppRun" );
855 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 855 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
856 int daysto = dt.daysTo( QDate::currentDate() ); 856 int daysto = dt.daysTo( QDate::currentDate() );
857 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 857 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
858 dt = dt.addDays( days ); 858 dt = dt.addDays( days );
859 int secto = dt.secsTo( QDateTime::currentDateTime() ); 859 int secto = dt.secsTo( QDateTime::currentDateTime() );
860 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 860 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
861 //qDebug("KO: Reading program stop %d ", secs); 861 //qDebug("KO: Reading program stop %d ", secs);
862 //secs -= ( 3600 * 24*3 ); // debug only 862 //secs -= ( 3600 * 24*3 ); // debug only
863 QDateTime latest = dt.addSecs ( secs ); 863 QDateTime latest = dt.addSecs ( secs );
864 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 864 qDebug("KO: Last termination on %s ", latest.toString().latin1());
865 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 865 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
866 QPtrList<Incidence> el = mCalendar->rawIncidences(); 866 QPtrList<Incidence> el = mCalendar->rawIncidences();
867 QPtrList<Incidence> al; 867 QPtrList<Incidence> al;
868 Incidence* inL = el.first(); 868 Incidence* inL = el.first();
869 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 869 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
870 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 870 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
871 while ( inL ) { 871 while ( inL ) {
872 bool ok = false; 872 bool ok = false;
873 int offset = 0; 873 int offset = 0;
874 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 874 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
875 if ( ok ) { 875 if ( ok ) {
876 //qDebug("OK %s",next.toString().latin1()); 876 //qDebug("OK %s",next.toString().latin1());
877 if ( next < cur ) { 877 if ( next < cur ) {
878 al.append( inL ); 878 al.append( inL );
879 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 879 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
880 } 880 }
881 } 881 }
882 inL = el.next(); 882 inL = el.next();
883 } 883 }
884 if ( al.count() ) { 884 if ( al.count() ) {
885 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 885 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
886 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 886 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
887 QVBoxLayout* lay = new QVBoxLayout( dia ); 887 QVBoxLayout* lay = new QVBoxLayout( dia );
888 lay->setSpacing( 0 ); 888 lay->setSpacing( 0 );
889 lay->setMargin( 0 ); 889 lay->setMargin( 0 );
890 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 890 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
891 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 891 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
892 lay->addWidget( matb ); 892 lay->addWidget( matb );
893 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 893 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
894 int wid = 210; 894 int wid = 210;
895 int x = QApplication::desktop()->width() - wid - 7; 895 int x = QApplication::desktop()->width() - wid - 7;
896 int y = QApplication::desktop()->height() - wid - 70; 896 int y = QApplication::desktop()->height() - wid - 70;
897 dia->setGeometry ( x,y,wid,wid); 897 dia->setGeometry ( x,y,wid,wid);
898 } else { 898 } else {
899 int si = 220; 899 int si = 220;
900 if ( QApplication::desktop()->width() > 470 ) 900 if ( QApplication::desktop()->width() > 470 )
901 si = 400; 901 si = 400;
902 dia->resize(si,si/2); 902 dia->resize(si,si/2);
903 } 903 }
904 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 904 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
905 dia->show(); 905 dia->show();
906 906
907 } 907 }
908#if 0 908#if 0
909 // for creating timetracker test data 909 // for creating timetracker test data
910 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 910 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
911 Todo * nt; 911 Todo * nt;
912 mCalendar->close(); 912 mCalendar->close();
913 { 913 {
914 Todo * root1 = new Todo; 914 Todo * root1 = new Todo;
915 mCalendar->addTodo( root1 ); 915 mCalendar->addTodo( root1 );
916 root1->setSummary( "Project1"); 916 root1->setSummary( "Project1");
917 root1->setPriority( 1 ); 917 root1->setPriority( 1 );
918 root1->setCategories( QString( "Cat_Pro1") ); 918 root1->setCategories( QString( "Cat_Pro1") );
919 root1->setDescription( "This is a test description of a root Project" ); 919 root1->setDescription( "This is a test description of a root Project" );
920 root1->setPercentComplete( 20 ); 920 root1->setPercentComplete( 20 );
921 updateView(); 921 updateView();
922 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 922 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
923 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 923 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
924 924
925 nt = new Todo; 925 nt = new Todo;
926 mCalendar->addTodo( nt ); 926 mCalendar->addTodo( nt );
927 nt->setSummary( "Planning Project1"); 927 nt->setSummary( "Planning Project1");
928 nt->setPriority( 1 ); 928 nt->setPriority( 1 );
929 nt->setDescription( "This is a test description of Planning Project1" ); 929 nt->setDescription( "This is a test description of Planning Project1" );
930 nt->setPercentComplete( 20 ); 930 nt->setPercentComplete( 20 );
931 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 931 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
932 932
933 933
934 Todo * sub1 = nt; 934 Todo * sub1 = nt;
935 sub1->setRelatedTo( root1 ); 935 sub1->setRelatedTo( root1 );
936 936
937 nt = new Todo; 937 nt = new Todo;
938 mCalendar->addTodo( nt ); 938 mCalendar->addTodo( nt );
939 nt->setSummary( "Planning Project1: Lutz"); 939 nt->setSummary( "Planning Project1: Lutz");
940 nt->setPriority( 1 ); 940 nt->setPriority( 1 );
941 nt->setDescription( "This todo counts the actual work of a person on a project" ); 941 nt->setDescription( "This todo counts the actual work of a person on a project" );
942 nt->setPercentComplete( 20 ); 942 nt->setPercentComplete( 20 );
943 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 943 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
944 Todo * workLutz11 = nt; 944 Todo * workLutz11 = nt;
945 workLutz11->setRelatedTo( sub1 ); 945 workLutz11->setRelatedTo( sub1 );
946 946
947 nt = new Todo; 947 nt = new Todo;
948 mCalendar->addTodo( nt ); 948 mCalendar->addTodo( nt );
949 nt->setSummary( "Planning Project1: Norbert"); 949 nt->setSummary( "Planning Project1: Norbert");
950 nt->setPriority( 1 ); 950 nt->setPriority( 1 );
951 nt->setDescription( "This todo counts the actual work of a person on a project" ); 951 nt->setDescription( "This todo counts the actual work of a person on a project" );
952 nt->setPercentComplete( 20 ); 952 nt->setPercentComplete( 20 );
953 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 953 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
954 Todo * workNorbert11 = nt; 954 Todo * workNorbert11 = nt;
955 workNorbert11->setRelatedTo( sub1 ); 955 workNorbert11->setRelatedTo( sub1 );
956 956
957 nt = new Todo; 957 nt = new Todo;
958 mCalendar->addTodo( nt ); 958 mCalendar->addTodo( nt );
959 nt->setSummary( "Work on 1"); 959 nt->setSummary( "Work on 1");
960 nt->setPriority( 1 ); 960 nt->setPriority( 1 );
961 nt->setDescription( "This is a test description of Work Project_1" ); 961 nt->setDescription( "This is a test description of Work Project_1" );
962 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") ); 962 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
963 nt->setPercentComplete( 20 ); 963 nt->setPercentComplete( 20 );
964 964
965 Todo * sub2 = nt; 965 Todo * sub2 = nt;
966 sub2->setRelatedTo( root1 ); 966 sub2->setRelatedTo( root1 );
967 967
968 968
969 nt = new Todo; 969 nt = new Todo;
970 mCalendar->addTodo( nt ); 970 mCalendar->addTodo( nt );
971 nt->setSummary( "Work on 1: Lutz"); 971 nt->setSummary( "Work on 1: Lutz");
972 nt->setPriority( 1 ); 972 nt->setPriority( 1 );
973 nt->setDescription( "This todo counts the actual work of a person on a project" ); 973 nt->setDescription( "This todo counts the actual work of a person on a project" );
974 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") ); 974 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
975 nt->setPercentComplete( 20 ); 975 nt->setPercentComplete( 20 );
976 Todo * workLutz12 = nt; 976 Todo * workLutz12 = nt;
977 workLutz12->setRelatedTo( sub2 ); 977 workLutz12->setRelatedTo( sub2 );
978 978
979 nt = new Todo; 979 nt = new Todo;
980 mCalendar->addTodo( nt ); 980 mCalendar->addTodo( nt );
981 nt->setSummary( "Work on 1: Norbert"); 981 nt->setSummary( "Work on 1: Norbert");
982 nt->setPriority( 1 ); 982 nt->setPriority( 1 );
983 nt->setDescription( "This todo counts the actual work of a person on a project" ); 983 nt->setDescription( "This todo counts the actual work of a person on a project" );
984 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") ); 984 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
985 nt->setPercentComplete( 20 ); 985 nt->setPercentComplete( 20 );
986 Todo * workNorbert12 = nt; 986 Todo * workNorbert12 = nt;
987 workNorbert12->setRelatedTo( sub2 ); 987 workNorbert12->setRelatedTo( sub2 );
988 988
989 int secLenRunning = 7200; 989 int secLenRunning = 7200;
990 int secLenPausing = 3600 * 3; 990 int secLenPausing = 3600 * 3;
991 int dayInterval = 1; 991 int dayInterval = 1;
992 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 992 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
993 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 993 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
994 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 994 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
995 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 995 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
996 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 996 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
997 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 997 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
998 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 998 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
999 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 999 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
1000 1000
1001 } 1001 }
1002 1002
1003 { 1003 {
1004 Todo * root1 = new Todo; 1004 Todo * root1 = new Todo;
1005 mCalendar->addTodo( root1 ); 1005 mCalendar->addTodo( root1 );
1006 root1->setSummary( "Project2"); 1006 root1->setSummary( "Project2");
1007 root1->setPriority( 1 ); 1007 root1->setPriority( 1 );
1008 root1->setDescription( "This is a test description of a root Project 2" ); 1008 root1->setDescription( "This is a test description of a root Project 2" );
1009 root1->setPercentComplete( 20 ); 1009 root1->setPercentComplete( 20 );
1010 root1->setCategories( QString( "Cat_Pro2") ); 1010 root1->setCategories( QString( "Cat_Pro2") );
1011 updateView(); 1011 updateView();
1012 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1012 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1013 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 1013 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1014 int secLenRunning = 7200; 1014 int secLenRunning = 7200;
1015 int secLenPausing = 3600 * 3; 1015 int secLenPausing = 3600 * 3;
1016 int dayInterval = 1; 1016 int dayInterval = 1;
1017 1017
1018 nt = new Todo; 1018 nt = new Todo;
1019 mCalendar->addTodo( nt ); 1019 mCalendar->addTodo( nt );
1020 nt->setSummary( "Planning Project2"); 1020 nt->setSummary( "Planning Project2");
1021 nt->setPriority( 1 ); 1021 nt->setPriority( 1 );
1022 nt->setDescription( "This is a test description of Planning_Project_2" ); 1022 nt->setDescription( "This is a test description of Planning_Project_2" );
1023 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") ); 1023 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1024 nt->setPercentComplete( 20 ); 1024 nt->setPercentComplete( 20 );
1025 1025
1026 1026
1027 Todo * sub1 = nt; 1027 Todo * sub1 = nt;
1028 sub1->setRelatedTo( root1 ); 1028 sub1->setRelatedTo( root1 );
1029 1029
1030 nt = new Todo; 1030 nt = new Todo;
1031 mCalendar->addTodo( nt ); 1031 mCalendar->addTodo( nt );
1032 nt->setSummary( "Planning Project2: Lutz"); 1032 nt->setSummary( "Planning Project2: Lutz");
1033 nt->setPriority( 1 ); 1033 nt->setPriority( 1 );
1034 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1034 nt->setDescription( "This todo counts the actual work of a person on a project" );
1035 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") ); 1035 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1036 nt->setPercentComplete( 20 ); 1036 nt->setPercentComplete( 20 );
1037 Todo * workLutz11 = nt; 1037 Todo * workLutz11 = nt;
1038 workLutz11->setRelatedTo( sub1 ); 1038 workLutz11->setRelatedTo( sub1 );
1039 1039
1040 nt = new Todo; 1040 nt = new Todo;
1041 mCalendar->addTodo( nt ); 1041 mCalendar->addTodo( nt );
1042 nt->setSummary( "Planning Project2: Norbert"); 1042 nt->setSummary( "Planning Project2: Norbert");
1043 nt->setPriority( 1 ); 1043 nt->setPriority( 1 );
1044 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1044 nt->setDescription( "This todo counts the actual work of a person on a project" );
1045 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") ); 1045 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1046 nt->setPercentComplete( 20 ); 1046 nt->setPercentComplete( 20 );
1047 Todo * workNorbert11 = nt; 1047 Todo * workNorbert11 = nt;
1048 workNorbert11->setRelatedTo( sub1 ); 1048 workNorbert11->setRelatedTo( sub1 );
1049 1049
1050 nt = new Todo; 1050 nt = new Todo;
1051 mCalendar->addTodo( nt ); 1051 mCalendar->addTodo( nt );
1052 nt->setSummary( "Work on 2"); 1052 nt->setSummary( "Work on 2");
1053 nt->setPriority( 1 ); 1053 nt->setPriority( 1 );
1054 nt->setDescription( "This is a test description of Work Project_2" ); 1054 nt->setDescription( "This is a test description of Work Project_2" );
1055 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") ); 1055 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1056 nt->setPercentComplete( 20 ); 1056 nt->setPercentComplete( 20 );
1057 1057
1058 Todo * sub2 = nt; 1058 Todo * sub2 = nt;
1059 sub2->setRelatedTo( root1 ); 1059 sub2->setRelatedTo( root1 );
1060 1060
1061 1061
1062 nt = new Todo; 1062 nt = new Todo;
1063 mCalendar->addTodo( nt ); 1063 mCalendar->addTodo( nt );
1064 nt->setSummary( "Work on 2: Lutz"); 1064 nt->setSummary( "Work on 2: Lutz");
1065 nt->setPriority( 1 ); 1065 nt->setPriority( 1 );
1066 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1066 nt->setDescription( "This todo counts the actual work of a person on a project" );
1067 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") ); 1067 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1068 nt->setPercentComplete( 20 ); 1068 nt->setPercentComplete( 20 );
1069 Todo * workLutz12 = nt; 1069 Todo * workLutz12 = nt;
1070 workLutz12->setRelatedTo( sub2 ); 1070 workLutz12->setRelatedTo( sub2 );
1071 1071
1072 nt = new Todo; 1072 nt = new Todo;
1073 mCalendar->addTodo( nt ); 1073 mCalendar->addTodo( nt );
1074 nt->setSummary( "Work on 2: Norbert"); 1074 nt->setSummary( "Work on 2: Norbert");
1075 nt->setPriority( 1 ); 1075 nt->setPriority( 1 );
1076 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1076 nt->setDescription( "This todo counts the actual work of a person on a project" );
1077 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") ); 1077 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1078 nt->setPercentComplete( 20 ); 1078 nt->setPercentComplete( 20 );
1079 Todo * workNorbert12 = nt; 1079 Todo * workNorbert12 = nt;
1080 workNorbert12->setRelatedTo( sub2 ); 1080 workNorbert12->setRelatedTo( sub2 );
1081 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1081 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1082 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1082 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1083 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1083 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1084 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1084 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1085 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1085 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1086 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1086 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1087 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1087 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1088 } 1088 }
1089 updateView(); 1089 updateView();
1090#endif 1090#endif
1091 1091
1092} 1092}
1093void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1093void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1094{ 1094{
1095 static int ccc = 0; 1095 static int ccc = 0;
1096 ++ccc; 1096 ++ccc;
1097 QDateTime t_start = start; 1097 QDateTime t_start = start;
1098 runT->setPriority( 5 ); 1098 runT->setPriority( 5 );
1099 runT->setPercentComplete( 0 ); 1099 runT->setPercentComplete( 0 );
1100 int count = 0; 1100 int count = 0;
1101 int prio = 5; 1101 int prio = 5;
1102 int complete = 0; 1102 int complete = 0;
1103 while ( t_start < end ) { 1103 while ( t_start < end ) {
1104 ++count; 1104 ++count;
1105 if ( count > ccc ) { 1105 if ( count > ccc ) {
1106 count = 0; 1106 count = 0;
1107 --prio; 1107 --prio;
1108 if ( prio == 0 ) prio = 5; 1108 if ( prio == 0 ) prio = 5;
1109 complete += 20; 1109 complete += 20;
1110 if ( complete > 100 ) complete = 0; 1110 if ( complete > 100 ) complete = 0;
1111 runT->setPriority( prio ); 1111 runT->setPriority( prio );
1112 runT->setPercentComplete( complete ); 1112 runT->setPercentComplete( complete );
1113 } 1113 }
1114 runT->setRunning( true ); 1114 runT->setRunning( true );
1115 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1115 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1116 if ( dayInterval ) 1116 if ( dayInterval )
1117 t_start = t_start.addDays( dayInterval ); 1117 t_start = t_start.addDays( dayInterval );
1118 else { 1118 else {
1119 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1119 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1120 } 1120 }
1121 } 1121 }
1122} 1122}
1123 1123
1124void CalendarView::showDay( QDate d ) 1124void CalendarView::showDay( QDate d )
1125{ 1125{
1126 dateNavigator()->blockSignals( true ); 1126 dateNavigator()->blockSignals( true );
1127 dateNavigator()->selectDate( d ); 1127 dateNavigator()->selectDate( d );
1128 dateNavigator()->blockSignals( false ); 1128 dateNavigator()->blockSignals( false );
1129 mViewManager->showDayView(); 1129 mViewManager->showDayView();
1130 //dateNavigator()->selectDate( d ); 1130 //dateNavigator()->selectDate( d );
1131} 1131}
1132void CalendarView::timerAlarm() 1132void CalendarView::timerAlarm()
1133{ 1133{
1134 //qDebug("CalendarView::timerAlarm() "); 1134 //qDebug("CalendarView::timerAlarm() ");
1135 computeAlarm(mAlarmNotification ); 1135 computeAlarm(mAlarmNotification );
1136} 1136}
1137 1137
1138void CalendarView::suspendAlarm() 1138void CalendarView::suspendAlarm()
1139{ 1139{
1140 //qDebug(" CalendarView::suspendAlarm() "); 1140 //qDebug(" CalendarView::suspendAlarm() ");
1141 computeAlarm(mSuspendAlarmNotification ); 1141 computeAlarm(mSuspendAlarmNotification );
1142 1142
1143} 1143}
1144 1144
1145void CalendarView::startAlarm( QString mess , QString filename) 1145void CalendarView::startAlarm( QString mess , QString filename)
1146{ 1146{
1147 1147
1148 topLevelWidget()->showNormal(); 1148 topLevelWidget()->showNormal();
1149 topLevelWidget()->setActiveWindow(); 1149 topLevelWidget()->setActiveWindow();
1150 topLevelWidget()->raise(); 1150 topLevelWidget()->raise();
1151 1151
1152 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1152 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1153 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1153 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1154 1154
1155} 1155}
1156 1156
1157void CalendarView::checkNextTimerAlarm() 1157void CalendarView::checkNextTimerAlarm()
1158{ 1158{
1159 mCalendar->checkAlarmForIncidence( 0, true ); 1159 mCalendar->checkAlarmForIncidence( 0, true );
1160} 1160}
1161 1161
1162void CalendarView::computeAlarm( QString msg ) 1162void CalendarView::computeAlarm( QString msg )
1163{ 1163{
1164 1164
1165 QString mess = msg; 1165 QString mess = msg;
1166 QString mAlarmMessage = mess.mid( 9 ); 1166 QString mAlarmMessage = mess.mid( 9 );
1167 QString filename = MainWindow::resourcePath(); 1167 QString filename = MainWindow::resourcePath();
1168 filename += "koalarm.wav"; 1168 filename += "koalarm.wav";
1169 QString tempfilename; 1169 QString tempfilename;
1170 if ( mess.left( 13 ) == "suspend_alarm") { 1170 if ( mess.left( 13 ) == "suspend_alarm") {
1171 bool error = false; 1171 bool error = false;
1172 int len = mess.mid( 13 ).find("+++"); 1172 int len = mess.mid( 13 ).find("+++");
1173 if ( len < 2 ) 1173 if ( len < 2 )
1174 error = true; 1174 error = true;
1175 else { 1175 else {
1176 tempfilename = mess.mid( 13, len ); 1176 tempfilename = mess.mid( 13, len );
1177 if ( !QFile::exists( tempfilename ) ) 1177 if ( !QFile::exists( tempfilename ) )
1178 error = true; 1178 error = true;
1179 } 1179 }
1180 if ( ! error ) { 1180 if ( ! error ) {
1181 filename = tempfilename; 1181 filename = tempfilename;
1182 } 1182 }
1183 mAlarmMessage = mess.mid( 13+len+3 ); 1183 mAlarmMessage = mess.mid( 13+len+3 );
1184 //qDebug("suspend file %s ",tempfilename.latin1() ); 1184 //qDebug("suspend file %s ",tempfilename.latin1() );
1185 startAlarm( mAlarmMessage, filename); 1185 startAlarm( mAlarmMessage, filename);
1186 return; 1186 return;
1187 } 1187 }
1188 if ( mess.left( 11 ) == "timer_alarm") { 1188 if ( mess.left( 11 ) == "timer_alarm") {
1189 //mTimerTime = 0; 1189 //mTimerTime = 0;
1190 startAlarm( mess.mid( 11 ), filename ); 1190 startAlarm( mess.mid( 11 ), filename );
1191 return; 1191 return;
1192 } 1192 }
1193 if ( mess.left( 10 ) == "proc_alarm") { 1193 if ( mess.left( 10 ) == "proc_alarm") {
1194 bool error = false; 1194 bool error = false;
1195 int len = mess.mid( 10 ).find("+++"); 1195 int len = mess.mid( 10 ).find("+++");
1196 if ( len < 2 ) 1196 if ( len < 2 )
1197 error = true; 1197 error = true;
1198 else { 1198 else {
1199 tempfilename = mess.mid( 10, len ); 1199 tempfilename = mess.mid( 10, len );
1200 if ( !QFile::exists( tempfilename ) ) 1200 if ( !QFile::exists( tempfilename ) )
1201 error = true; 1201 error = true;
1202 } 1202 }
1203 if ( error ) { 1203 if ( error ) {
1204 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1204 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1205 mAlarmMessage += mess.mid( 10+len+3+9 ); 1205 mAlarmMessage += mess.mid( 10+len+3+9 );
1206 } else { 1206 } else {
1207 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1207 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1208 //qDebug("-----system command %s ",tempfilename.latin1() ); 1208 //qDebug("-----system command %s ",tempfilename.latin1() );
1209#ifndef _WIN32_ 1209#ifndef _WIN32_
1210 if ( vfork () == 0 ) { 1210 if ( vfork () == 0 ) {
1211 execl ( tempfilename.latin1(), 0 ); 1211 execl ( tempfilename.latin1(), 0 );
1212 return; 1212 return;
1213 } 1213 }
1214#else 1214#else
1215 QProcess* p = new QProcess(); 1215 QProcess* p = new QProcess();
1216 p->addArgument( tempfilename.latin1() ); 1216 p->addArgument( tempfilename.latin1() );
1217 p->start(); 1217 p->start();
1218 return; 1218 return;
1219#endif 1219#endif
1220 1220
1221 return; 1221 return;
1222 } 1222 }
1223 1223
1224 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1224 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1225 } 1225 }
1226 if ( mess.left( 11 ) == "audio_alarm") { 1226 if ( mess.left( 11 ) == "audio_alarm") {
1227 bool error = false; 1227 bool error = false;
1228 int len = mess.mid( 11 ).find("+++"); 1228 int len = mess.mid( 11 ).find("+++");
1229 if ( len < 2 ) 1229 if ( len < 2 )
1230 error = true; 1230 error = true;
1231 else { 1231 else {
1232 tempfilename = mess.mid( 11, len ); 1232 tempfilename = mess.mid( 11, len );
1233 if ( !QFile::exists( tempfilename ) ) 1233 if ( !QFile::exists( tempfilename ) )
1234 error = true; 1234 error = true;
1235 } 1235 }
1236 if ( ! error ) { 1236 if ( ! error ) {
1237 filename = tempfilename; 1237 filename = tempfilename;
1238 } 1238 }
1239 mAlarmMessage = mess.mid( 11+len+3+9 ); 1239 mAlarmMessage = mess.mid( 11+len+3+9 );
1240 //qDebug("audio file command %s ",tempfilename.latin1() ); 1240 //qDebug("audio file command %s ",tempfilename.latin1() );
1241 } 1241 }
1242 if ( mess.left( 9 ) == "cal_alarm") { 1242 if ( mess.left( 9 ) == "cal_alarm") {
1243 mAlarmMessage = mess.mid( 9 ) ; 1243 mAlarmMessage = mess.mid( 9 ) ;
1244 } 1244 }
1245 1245
1246 startAlarm( mAlarmMessage, filename ); 1246 startAlarm( mAlarmMessage, filename );
1247 1247
1248 1248
1249} 1249}
1250 1250
1251void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1251void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1252{ 1252{
1253 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1253 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1254 1254
1255 mSuspendAlarmNotification = noti; 1255 mSuspendAlarmNotification = noti;
1256 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1256 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1257 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1257 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1258 mSuspendTimer->start( ms , true ); 1258 mSuspendTimer->start( ms , true );
1259#ifdef DESKTOP_VERSION 1259#ifdef DESKTOP_VERSION
1260 if ( QApplication::desktop()->width() < 1024 ) { 1260 if ( QApplication::desktop()->width() < 1024 ) {
1261 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1261 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1262 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() ); 1262 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() );
1263 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm"; 1263 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm";
1264 QFile file( fn ); 1264 QFile file( fn );
1265 if (!file.open( IO_WriteOnly ) ) { 1265 if (!file.open( IO_WriteOnly ) ) {
1266 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1266 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1267 } else { 1267 } else {
1268 QTextStream ts( &file ); 1268 QTextStream ts( &file );
1269 ts << mess; 1269 ts << mess;
1270 file.close(); 1270 file.close();
1271 } 1271 }
1272 } 1272 }
1273#endif 1273#endif
1274 1274
1275} 1275}
1276 1276
1277void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1277void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1278{ 1278{
1279 mNextAlarmDateTime = qdt; 1279 mNextAlarmDateTime = qdt;
1280 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1280 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1281 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1281 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1282#ifndef DESKTOP_VERSION 1282#ifndef DESKTOP_VERSION
1283 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1283 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1284#endif 1284#endif
1285 return; 1285 return;
1286 } 1286 }
1287#ifdef DESKTOP_VERSION 1287#ifdef DESKTOP_VERSION
1288 if ( QApplication::desktop()->width() < 1024 ) { 1288 if ( QApplication::desktop()->width() < 1024 ) {
1289 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1289 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1290 //qDebug("nextalarm = \n%s ",mess.latin1() ); 1290 //qDebug("nextalarm = \n%s ",mess.latin1() );
1291 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm"; 1291 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm";
1292 QFile file( fn ); 1292 QFile file( fn );
1293 if (!file.open( IO_WriteOnly ) ) { 1293 if (!file.open( IO_WriteOnly ) ) {
1294 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1294 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1295 } else { 1295 } else {
1296 QTextStream ts( &file ); 1296 QTextStream ts( &file );
1297 ts << mess; 1297 ts << mess;
1298 file.close(); 1298 file.close();
1299 } 1299 }
1300 } 1300 }
1301#endif 1301#endif
1302 int maxSec; 1302 int maxSec;
1303 //maxSec = 5; //testing only 1303 //maxSec = 5; //testing only
1304 maxSec = 86400+3600; // one day+1hour 1304 maxSec = 86400+3600; // one day+1hour
1305 mAlarmNotification = noti; 1305 mAlarmNotification = noti;
1306 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1306 int sec = QDateTime::currentDateTime().secsTo( qdt );
1307 if ( sec > maxSec ) { 1307 if ( sec > maxSec ) {
1308 mRecheckAlarmTimer->start( maxSec * 1000 ); 1308 mRecheckAlarmTimer->start( maxSec * 1000 );
1309 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1309 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1310 return; 1310 return;
1311 } else { 1311 } else {
1312 mRecheckAlarmTimer->stop(); 1312 mRecheckAlarmTimer->stop();
1313 } 1313 }
1314 //qDebug("Alarm timer started with secs: %d ", sec); 1314 //qDebug("Alarm timer started with secs: %d ", sec);
1315 mAlarmTimer->start( sec * 1000 , true ); 1315 mAlarmTimer->start( sec * 1000 , true );
1316 1316
1317} 1317}
1318// called by mRecheckAlarmTimer to get next alarm 1318// called by mRecheckAlarmTimer to get next alarm
1319// we need this, because a QTimer has only a max range of 25 days 1319// we need this, because a QTimer has only a max range of 25 days
1320void CalendarView::recheckTimerAlarm() 1320void CalendarView::recheckTimerAlarm()
1321{ 1321{
1322 mAlarmTimer->stop(); 1322 mAlarmTimer->stop();
1323 mRecheckAlarmTimer->stop(); 1323 mRecheckAlarmTimer->stop();
1324 mCalendar->checkAlarmForIncidence( 0, true ); 1324 mCalendar->checkAlarmForIncidence( 0, true );
1325} 1325}
1326#ifndef DESKTOP_VERSION 1326#ifndef DESKTOP_VERSION
1327void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1327void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1328#else 1328#else
1329void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1329void CalendarView::removeAlarm(const QDateTime &, const QString & )
1330#endif 1330#endif
1331{ 1331{
1332 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1332 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1333 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1333 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1334#ifndef DESKTOP_VERSION 1334#ifndef DESKTOP_VERSION
1335 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1335 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1336#endif 1336#endif
1337 return; 1337 return;
1338 } 1338 }
1339 mAlarmTimer->stop(); 1339 mAlarmTimer->stop();
1340} 1340}
1341void CalendarView::selectWeekNum ( int num ) 1341void CalendarView::selectWeekNum ( int num )
1342{ 1342{
1343 dateNavigator()->blockSignals( true ); 1343 dateNavigator()->blockSignals( true );
1344 dateNavigator()->selectWeek( num ); 1344 dateNavigator()->selectWeek( num );
1345 dateNavigator()->blockSignals( false ); 1345 dateNavigator()->blockSignals( false );
1346 mViewManager->showWeekView(); 1346 mViewManager->showWeekView();
1347} 1347}
1348KOViewManager *CalendarView::viewManager() 1348KOViewManager *CalendarView::viewManager()
1349{ 1349{
1350 return mViewManager; 1350 return mViewManager;
1351} 1351}
1352 1352
1353KODialogManager *CalendarView::dialogManager() 1353KODialogManager *CalendarView::dialogManager()
1354{ 1354{
1355 return mDialogManager; 1355 return mDialogManager;
1356} 1356}
1357 1357
1358QDate CalendarView::startDate() 1358QDate CalendarView::startDate()
1359{ 1359{
1360 DateList dates = mNavigator->selectedDates(); 1360 DateList dates = mNavigator->selectedDates();
1361 1361
1362 return dates.first(); 1362 return dates.first();
1363} 1363}
1364 1364
1365QDate CalendarView::endDate() 1365QDate CalendarView::endDate()
1366{ 1366{
1367 DateList dates = mNavigator->selectedDates(); 1367 DateList dates = mNavigator->selectedDates();
1368 1368
1369 return dates.last(); 1369 return dates.last();
1370} 1370}
1371 1371
1372 1372
1373void CalendarView::createPrinter() 1373void CalendarView::createPrinter()
1374{ 1374{
1375#ifndef KORG_NOPRINTER 1375#ifndef KORG_NOPRINTER
1376 if (!mCalPrinter) { 1376 if (!mCalPrinter) {
1377 mCalPrinter = new CalPrinter(this, mCalendar); 1377 mCalPrinter = new CalPrinter(this, mCalendar);
1378 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1378 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1379 } 1379 }
1380#endif 1380#endif
1381} 1381}
1382 1382
1383 1383
1384//KOPrefs::instance()->mWriteBackFile 1384//KOPrefs::instance()->mWriteBackFile
1385//KOPrefs::instance()->mWriteBackExistingOnly 1385//KOPrefs::instance()->mWriteBackExistingOnly
1386 1386
1387// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1387// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1388// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1388// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1389// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1389// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1390// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1390// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1391// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1391// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1392// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1392// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1393 1393
1394int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1394int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1395{ 1395{
1396 1396
1397 // 0 equal 1397 // 0 equal
1398 // 1 take local 1398 // 1 take local
1399 // 2 take remote 1399 // 2 take remote
1400 // 3 cancel 1400 // 3 cancel
1401 QDateTime lastSync = mLastCalendarSync; 1401 QDateTime lastSync = mLastCalendarSync;
1402 QDateTime localMod = local->lastModified(); 1402 QDateTime localMod = local->lastModified();
1403 QDateTime remoteMod = remote->lastModified(); 1403 QDateTime remoteMod = remote->lastModified();
1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1405 bool remCh, locCh; 1405 bool remCh, locCh;
1406 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1406 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1407 //if ( remCh ) 1407 //if ( remCh )
1408 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1408 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1409 locCh = ( localMod > mLastCalendarSync ); 1409 locCh = ( localMod > mLastCalendarSync );
1410 if ( !remCh && ! locCh ) { 1410 if ( !remCh && ! locCh ) {
1411 //qDebug("both not changed "); 1411 //qDebug("both not changed ");
1412 lastSync = localMod.addDays(1); 1412 lastSync = localMod.addDays(1);
1413 if ( mode <= SYNC_PREF_ASK ) 1413 if ( mode <= SYNC_PREF_ASK )
1414 return 0; 1414 return 0;
1415 } else { 1415 } else {
1416 if ( locCh ) { 1416 if ( locCh ) {
1417 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1417 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1418 lastSync = localMod.addDays( -1 ); 1418 lastSync = localMod.addDays( -1 );
1419 if ( !remCh ) 1419 if ( !remCh )
1420 remoteMod = ( lastSync.addDays( -1 ) ); 1420 remoteMod = ( lastSync.addDays( -1 ) );
1421 } else { 1421 } else {
1422 //qDebug(" not loc changed "); 1422 //qDebug(" not loc changed ");
1423 lastSync = localMod.addDays( 1 ); 1423 lastSync = localMod.addDays( 1 );
1424 if ( remCh ) 1424 if ( remCh )
1425 remoteMod =( lastSync.addDays( 1 ) ); 1425 remoteMod =( lastSync.addDays( 1 ) );
1426 1426
1427 } 1427 }
1428 } 1428 }
1429 full = true; 1429 full = true;
1430 if ( mode < SYNC_PREF_ASK ) 1430 if ( mode < SYNC_PREF_ASK )
1431 mode = SYNC_PREF_ASK; 1431 mode = SYNC_PREF_ASK;
1432 } else { 1432 } else {
1433 if ( localMod == remoteMod ) 1433 if ( localMod == remoteMod )
1434 // if ( local->revision() == remote->revision() ) 1434 // if ( local->revision() == remote->revision() )
1435 return 0; 1435 return 0;
1436 1436
1437 } 1437 }
1438 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1438 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1439 1439
1440 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1440 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1441 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1441 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1442 //full = true; //debug only 1442 //full = true; //debug only
1443 if ( full ) { 1443 if ( full ) {
1444 bool equ = false; 1444 bool equ = false;
1445 if ( local->typeID() == eventID ) { 1445 if ( local->typeID() == eventID ) {
1446 equ = (*((Event*) local) == *((Event*) remote)); 1446 equ = (*((Event*) local) == *((Event*) remote));
1447 } 1447 }
1448 else if ( local->typeID() == todoID ) 1448 else if ( local->typeID() == todoID )
1449 equ = (*((Todo*) local) == (*(Todo*) remote)); 1449 equ = (*((Todo*) local) == (*(Todo*) remote));
1450 else if ( local->typeID() == journalID ) 1450 else if ( local->typeID() == journalID )
1451 equ = (*((Journal*) local) == *((Journal*) remote)); 1451 equ = (*((Journal*) local) == *((Journal*) remote));
1452 if ( equ ) { 1452 if ( equ ) {
1453 //qDebug("equal "); 1453 //qDebug("equal ");
1454 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1454 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1455 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1455 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1456 } 1456 }
1457 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1457 if ( mode < SYNC_PREF_FORCE_LOCAL )
1458 return 0; 1458 return 0;
1459 1459
1460 }//else //debug only 1460 }//else //debug only
1461 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1461 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1462 } 1462 }
1463 int result; 1463 int result;
1464 bool localIsNew; 1464 bool localIsNew;
1465 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1465 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1466 1466
1467 1467
1468 // ************************************************ 1468 // ************************************************
1469 // ************************************************ 1469 // ************************************************
1470 // ************************************************ 1470 // ************************************************
1471 // We may have that lastSync > remoteMod AND lastSync > localMod 1471 // We may have that lastSync > remoteMod AND lastSync > localMod
1472 // BUT remoteMod != localMod 1472 // BUT remoteMod != localMod
1473 1473
1474 1474
1475 if ( full && mode < SYNC_PREF_NEWEST ) 1475 if ( full && mode < SYNC_PREF_NEWEST )
1476 mode = SYNC_PREF_ASK; 1476 mode = SYNC_PREF_ASK;
1477 1477
1478 switch( mode ) { 1478 switch( mode ) {
1479 case SYNC_PREF_LOCAL: 1479 case SYNC_PREF_LOCAL:
1480 if ( lastSync > remoteMod ) 1480 if ( lastSync > remoteMod )
1481 return 1; 1481 return 1;
1482 if ( lastSync > localMod ) 1482 if ( lastSync > localMod )
1483 return 2; 1483 return 2;
1484 return 1; 1484 return 1;
1485 break; 1485 break;
1486 case SYNC_PREF_REMOTE: 1486 case SYNC_PREF_REMOTE:
1487 if ( lastSync > localMod ) 1487 if ( lastSync > localMod )
1488 return 2; 1488 return 2;
1489 if ( lastSync > remoteMod ) 1489 if ( lastSync > remoteMod )
1490 return 1; 1490 return 1;
1491 return 2; 1491 return 2;
1492 break; 1492 break;
1493 case SYNC_PREF_NEWEST: 1493 case SYNC_PREF_NEWEST:
1494 if ( localMod >= remoteMod ) 1494 if ( localMod >= remoteMod )
1495 return 1; 1495 return 1;
1496 else 1496 else
1497 return 2; 1497 return 2;
1498 break; 1498 break;
1499 case SYNC_PREF_ASK: 1499 case SYNC_PREF_ASK:
1500 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1500 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1501 if ( lastSync > remoteMod && lastSync > localMod) 1501 if ( lastSync > remoteMod && lastSync > localMod)
1502 return 0; 1502 return 0;
1503 if ( lastSync > remoteMod ) 1503 if ( lastSync > remoteMod )
1504 return 1; 1504 return 1;
1505 if ( lastSync > localMod ) 1505 if ( lastSync > localMod )
1506 return 2; 1506 return 2;
1507 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1507 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1508 localIsNew = localMod >= remoteMod; 1508 localIsNew = localMod >= remoteMod;
1509 if ( localIsNew ) 1509 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 1 ); 1510 getEventViewerDialog()->setColorMode( 1 );
1511 else 1511 else
1512 getEventViewerDialog()->setColorMode( 2 ); 1512 getEventViewerDialog()->setColorMode( 2 );
1513 getEventViewerDialog()->setIncidence(local); 1513 getEventViewerDialog()->setIncidence(local);
1514 if ( localIsNew ) 1514 if ( localIsNew )
1515 getEventViewerDialog()->setColorMode( 2 ); 1515 getEventViewerDialog()->setColorMode( 2 );
1516 else 1516 else
1517 getEventViewerDialog()->setColorMode( 1 ); 1517 getEventViewerDialog()->setColorMode( 1 );
1518 getEventViewerDialog()->addIncidence(remote); 1518 getEventViewerDialog()->addIncidence(remote);
1519 getEventViewerDialog()->setColorMode( 0 ); 1519 getEventViewerDialog()->setColorMode( 0 );
1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1522 getEventViewerDialog()->showMe(); 1522 getEventViewerDialog()->showMe();
1523 result = getEventViewerDialog()->executeS( localIsNew ); 1523 result = getEventViewerDialog()->executeS( localIsNew );
1524 return result; 1524 return result;
1525 1525
1526 break; 1526 break;
1527 case SYNC_PREF_FORCE_LOCAL: 1527 case SYNC_PREF_FORCE_LOCAL:
1528 return 1; 1528 return 1;
1529 break; 1529 break;
1530 case SYNC_PREF_FORCE_REMOTE: 1530 case SYNC_PREF_FORCE_REMOTE:
1531 return 2; 1531 return 2;
1532 break; 1532 break;
1533 1533
1534 default: 1534 default:
1535 // SYNC_PREF_TAKE_BOTH not implemented 1535 // SYNC_PREF_TAKE_BOTH not implemented
1536 break; 1536 break;
1537 } 1537 }
1538 return 0; 1538 return 0;
1539} 1539}
1540Event* CalendarView::getLastSyncEvent() 1540Event* CalendarView::getLastSyncEvent()
1541{ 1541{
1542 Event* lse; 1542 Event* lse;
1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1544 mCalendar->setSyncEventsEnabled(); 1544 mCalendar->setSyncEventsEnabled();
1545 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1545 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1546 if (!lse) { 1546 if (!lse) {
1547 qDebug("KO: New last Syncevent created for local: %s",mCurrentSyncDevice.latin1() ); 1547 qDebug("KO: New last Syncevent created for local: %s",mCurrentSyncDevice.latin1() );
1548 lse = new Event(); 1548 lse = new Event();
1549 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1549 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1550 QString sum = ""; 1550 QString sum = "";
1551 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1551 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1552 sum = "E: "; 1552 sum = "E: ";
1553 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1553 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1554 lse->setDtStart( mLastCalendarSync ); 1554 lse->setDtStart( mLastCalendarSync );
1555 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1555 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1556 lse->setCategories( i18n("SyncEvent") ); 1556 lse->setCategories( i18n("SyncEvent") );
1557 lse->setReadOnly( true ); 1557 lse->setReadOnly( true );
1558 lse->setCalID( 1 ); 1558 lse->setCalID( 1 );
1559 mCalendar->addEvent( lse ); 1559 mCalendar->addEvent( lse );
1560 } else 1560 } else
1561 qDebug("KO: Last Syncevent on local found"); 1561 qDebug("KO: Last Syncevent on local found");
1562 1562
1563 return lse; 1563 return lse;
1564 1564
1565} 1565}
1566 1566
1567// we check, if the to delete event has a id for a profile 1567// we check, if the to delete event has a id for a profile
1568// if yes, we set this id in the profile to delete 1568// if yes, we set this id in the profile to delete
1569void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1569void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1570{ 1570{
1571 if ( lastSync.count() == 0 ) { 1571 if ( lastSync.count() == 0 ) {
1572 //qDebug(" lastSync.count() == 0"); 1572 //qDebug(" lastSync.count() == 0");
1573 return; 1573 return;
1574 } 1574 }
1575 if ( toDelete->typeID() == journalID ) 1575 if ( toDelete->typeID() == journalID )
1576 return; 1576 return;
1577 1577
1578 Event* eve = lastSync.first(); 1578 Event* eve = lastSync.first();
1579 1579
1580 while ( eve ) { 1580 while ( eve ) {
1581 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1581 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1582 if ( !id.isEmpty() ) { 1582 if ( !id.isEmpty() ) {
1583 QString des = eve->description(); 1583 QString des = eve->description();
1584 QString pref = "e"; 1584 QString pref = "e";
1585 if ( toDelete->typeID() == todoID ) 1585 if ( toDelete->typeID() == todoID )
1586 pref = "t"; 1586 pref = "t";
1587 des += pref+ id + ","; 1587 des += pref+ id + ",";
1588 eve->setReadOnly( false ); 1588 eve->setReadOnly( false );
1589 eve->setDescription( des ); 1589 eve->setDescription( des );
1590 //qDebug("setdes %s ", des.latin1()); 1590 //qDebug("setdes %s ", des.latin1());
1591 eve->setReadOnly( true ); 1591 eve->setReadOnly( true );
1592 } 1592 }
1593 eve = lastSync.next(); 1593 eve = lastSync.next();
1594 } 1594 }
1595 1595
1596} 1596}
1597void CalendarView::checkExternalId( Incidence * inc ) 1597void CalendarView::checkExternalId( Incidence * inc )
1598{ 1598{
1599 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1599 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1600 checkExternSyncEvent( lastSync, inc ); 1600 checkExternSyncEvent( lastSync, inc );
1601 1601
1602} 1602}
1603bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1603bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1604{ 1604{
1605 bool syncOK = true; 1605 bool syncOK = true;
1606 int addedEvent = 0; 1606 int addedEvent = 0;
1607 int addedEventR = 0; 1607 int addedEventR = 0;
1608 int deletedEventR = 0; 1608 int deletedEventR = 0;
1609 int deletedEventL = 0; 1609 int deletedEventL = 0;
1610 int changedLocal = 0; 1610 int changedLocal = 0;
1611 int changedRemote = 0; 1611 int changedRemote = 0;
1612 int filteredIN = 0; 1612 int filteredIN = 0;
1613 int filteredOUT = 0; 1613 int filteredOUT = 0;
1614 //QPtrList<Event> el = local->rawEvents(); 1614 //QPtrList<Event> el = local->rawEvents();
1615 Event* eventR; 1615 Event* eventR;
1616 QString uid; 1616 QString uid;
1617 int take; 1617 int take;
1618 Event* eventRSync; 1618 Event* eventRSync;
1619 Event* eventLSync; 1619 Event* eventLSync;
1620 clearAllViews(); 1620 clearAllViews();
1621 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1621 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1622 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1622 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1623 bool fullDateRange = false; 1623 bool fullDateRange = false;
1624 local->resetTempSyncStat(); 1624 local->resetTempSyncStat();
1625 mLastCalendarSync = QDateTime::currentDateTime(); 1625 mLastCalendarSync = QDateTime::currentDateTime();
1626 if ( mSyncManager->syncWithDesktop() ) { 1626 if ( mSyncManager->syncWithDesktop() ) {
1627 remote->resetPilotStat(1); 1627 remote->resetPilotStat(1);
1628 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1628 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1629 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1629 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1630 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1630 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1631 } else { 1631 } else {
1632 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1632 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1633 } 1633 }
1634 } 1634 }
1635 QDateTime modifiedCalendar = mLastCalendarSync; 1635 QDateTime modifiedCalendar = mLastCalendarSync;
1636 eventLSync = getLastSyncEvent(); 1636 eventLSync = getLastSyncEvent();
1637 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1637 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1638 if ( eventR ) { 1638 if ( eventR ) {
1639 qDebug("KO: Last-syncEvent on remote found "); 1639 qDebug("KO: Last-syncEvent on remote found ");
1640 eventRSync = (Event*) eventR->clone(); 1640 eventRSync = (Event*) eventR->clone();
1641 remote->deleteEvent(eventR ); 1641 remote->deleteEvent(eventR );
1642 1642
1643 } else { 1643 } else {
1644 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1644 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1645 eventRSync = (Event*)eventLSync->clone(); 1645 eventRSync = (Event*)eventLSync->clone();
1646 } else { 1646 } else {
1647 fullDateRange = true; 1647 fullDateRange = true;
1648 eventRSync = new Event(); 1648 eventRSync = new Event();
1649 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1649 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1650 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1650 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1651 eventRSync->setDtStart( mLastCalendarSync ); 1651 eventRSync->setDtStart( mLastCalendarSync );
1652 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1652 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1653 eventRSync->setCategories( i18n("SyncEvent") ); 1653 eventRSync->setCategories( i18n("SyncEvent") );
1654 } 1654 }
1655 } 1655 }
1656 if ( eventLSync->dtStart() == mLastCalendarSync ) 1656 if ( eventLSync->dtStart() == mLastCalendarSync )
1657 fullDateRange = true; 1657 fullDateRange = true;
1658 1658
1659 if ( ! fullDateRange ) { 1659 if ( ! fullDateRange ) {
1660 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1660 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1661 1661
1662 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1662 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1663 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1663 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1664 fullDateRange = true; 1664 fullDateRange = true;
1665 } 1665 }
1666 } 1666 }
1667 if ( mSyncManager->syncWithDesktop() ) { 1667 if ( mSyncManager->syncWithDesktop() ) {
1668 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1668 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1669 } 1669 }
1670 if ( fullDateRange ) 1670 if ( fullDateRange )
1671 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1671 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1672 else 1672 else
1673 mLastCalendarSync = eventLSync->dtStart(); 1673 mLastCalendarSync = eventLSync->dtStart();
1674 // for resyncing if own file has changed 1674 // for resyncing if own file has changed
1675 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1675 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1676 mLastCalendarSync = loadedFileVersion; 1676 mLastCalendarSync = loadedFileVersion;
1677 //qDebug("setting mLastCalendarSync "); 1677 //qDebug("setting mLastCalendarSync ");
1678 } 1678 }
1679 //qDebug("*************************** "); 1679 //qDebug("*************************** ");
1680 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1680 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1681 QPtrList<Incidence> er = remote->rawIncidences(); 1681 QPtrList<Incidence> er = remote->rawIncidences();
1682 Incidence* inR = er.first(); 1682 Incidence* inR = er.first();
1683 Incidence* inL; 1683 Incidence* inL;
1684 QProgressBar bar( er.count(),0 ); 1684 QProgressBar bar( er.count(),0 );
1685 bar.setCaption (i18n("Syncing - close to abort!") ); 1685 bar.setCaption (i18n("Syncing - close to abort!") );
1686 1686
1687 // ************** setting up filter ************* 1687 // ************** setting up filter *************
1688 CalFilter *filterIN = 0; 1688 CalFilter *filterIN = 0;
1689 CalFilter *filterOUT = 0; 1689 CalFilter *filterOUT = 0;
1690 CalFilter *filter = mFilters.first(); 1690 CalFilter *filter = mFilters.first();
1691 while(filter) { 1691 while(filter) {
1692 if ( filter->name() == mSyncManager->mFilterInCal ) 1692 if ( filter->name() == mSyncManager->mFilterInCal )
1693 filterIN = filter; 1693 filterIN = filter;
1694 if ( filter->name() == mSyncManager->mFilterOutCal ) 1694 if ( filter->name() == mSyncManager->mFilterOutCal )
1695 filterOUT = filter; 1695 filterOUT = filter;
1696 filter = mFilters.next(); 1696 filter = mFilters.next();
1697 } 1697 }
1698 int w = 300; 1698 int w = 300;
1699 if ( QApplication::desktop()->width() < 320 ) 1699 if ( QApplication::desktop()->width() < 320 )
1700 w = 220; 1700 w = 220;
1701 int h = bar.sizeHint().height() ; 1701 int h = bar.sizeHint().height() ;
1702 int dw = QApplication::desktop()->width(); 1702 int dw = QApplication::desktop()->width();
1703 int dh = QApplication::desktop()->height(); 1703 int dh = QApplication::desktop()->height();
1704 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1704 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1705 bar.show(); 1705 bar.show();
1706 int modulo = (er.count()/10)+1; 1706 int modulo = (er.count()/10)+1;
1707 int incCounter = 0; 1707 int incCounter = 0;
1708 while ( inR ) { 1708 while ( inR ) {
1709 if ( ! bar.isVisible() ) 1709 if ( ! bar.isVisible() )
1710 return false; 1710 return false;
1711 if ( incCounter % modulo == 0 ) 1711 if ( incCounter % modulo == 0 )
1712 bar.setProgress( incCounter ); 1712 bar.setProgress( incCounter );
1713 ++incCounter; 1713 ++incCounter;
1714 uid = inR->uid(); 1714 uid = inR->uid();
1715 bool skipIncidence = false; 1715 bool skipIncidence = false;
1716 if ( uid.left(15) == QString("last-syncEvent-") ) 1716 if ( uid.left(15) == QString("last-syncEvent-") )
1717 skipIncidence = true; 1717 skipIncidence = true;
1718 QString idS; 1718 QString idS;
1719 qApp->processEvents(); 1719 qApp->processEvents();
1720 if ( !skipIncidence ) { 1720 if ( !skipIncidence ) {
1721 inL = local->incidenceForUid( uid , false ); 1721 inL = local->incidenceForUid( uid , false , true );
1722 if ( inL ) { // maybe conflict - same uid in both calendars 1722 if ( inL ) { // maybe conflict - same uid in both calendars
1723 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1723 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1724 //qDebug("take %d %s ", take, inL->summary().latin1()); 1724 //qDebug("take %d %s ", take, inL->summary().latin1());
1725 if ( take == 3 ) 1725 if ( take == 3 )
1726 return false; 1726 return false;
1727 if ( take == 1 ) {// take local ********************** 1727 if ( take == 1 ) {// take local **********************
1728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1729 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1729 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1730 else 1730 else
1731 idS = inR->IDStr(); 1731 idS = inR->IDStr();
1732 int calID = inR->calID(); 1732 int calID = inR->calID();
1733 remote->deleteIncidence( inR ); 1733 remote->deleteIncidence( inR );
1734 inR = inL->clone(); 1734 inR = inL->clone();
1735 inR->setCalID( calID ); 1735 inR->setCalID( calID );
1736 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1736 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1737 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1737 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1738 inR->setIDStr( idS ); 1738 inR->setIDStr( idS );
1739 remote->addIncidence( inR ); 1739 remote->addIncidence( inR );
1740 if ( mSyncManager->syncWithDesktop() ) 1740 if ( mSyncManager->syncWithDesktop() )
1741 inR->setPilotId( 2 ); 1741 inR->setPilotId( 2 );
1742 ++changedRemote; 1742 ++changedRemote;
1743 } else {// take remote ********************** 1743 } else {// take remote **********************
1744 if ( !inL->isReadOnly() ) { 1744 if ( !inL->isReadOnly() ) {
1745 idS = inL->IDStr(); 1745 idS = inL->IDStr();
1746 int pid = inL->pilotId(); 1746 int pid = inL->pilotId();
1747 int calID = inL->calID(); 1747 int calID = inL->calID();
1748 local->deleteIncidence( inL ); 1748 local->deleteIncidence( inL );
1749 inL = inR->clone(); 1749 inL = inR->clone();
1750 inL->setCalID( calID ); 1750 inL->setCalID( calID );
1751 if ( mSyncManager->syncWithDesktop() ) 1751 if ( mSyncManager->syncWithDesktop() )
1752 inL->setPilotId( pid ); 1752 inL->setPilotId( pid );
1753 inL->setIDStr( idS ); 1753 inL->setIDStr( idS );
1754 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1754 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1755 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1755 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1756 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1756 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1757 } 1757 }
1758 local->addIncidence( inL ); 1758 local->addIncidence( inL );
1759 ++changedLocal; 1759 ++changedLocal;
1760 } 1760 }
1761 } 1761 }
1762 } 1762 }
1763 } else { // no conflict ********** add or delete remote 1763 } else { // no conflict ********** add or delete remote
1764 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1764 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1765 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1765 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1766 QString des = eventLSync->description(); 1766 QString des = eventLSync->description();
1767 QString pref = "e"; 1767 QString pref = "e";
1768 if ( inR->typeID() == todoID ) 1768 if ( inR->typeID() == todoID )
1769 pref = "t"; 1769 pref = "t";
1770 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1770 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1771 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1771 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1772 //remote->deleteIncidence( inR ); 1772 //remote->deleteIncidence( inR );
1773 ++deletedEventR; 1773 ++deletedEventR;
1774 } else { 1774 } else {
1775 inR->setLastModified( modifiedCalendar ); 1775 inR->setLastModified( modifiedCalendar );
1776 inL = inR->clone(); 1776 inL = inR->clone();
1777 inL->setIDStr( ":" ); 1777 inL->setIDStr( ":" );
1778 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1778 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1779 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1779 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1780 1780
1781 inL->setCalID( 0 );// add to default cal 1781 inL->setCalID( 0 );// add to default cal
1782 local->addIncidence( inL ); 1782 local->addIncidence( inL );
1783 ++addedEvent; 1783 ++addedEvent;
1784 1784
1785 } 1785 }
1786 } else { 1786 } else {
1787 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1787 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1788 inR->setLastModified( modifiedCalendar ); 1788 inR->setLastModified( modifiedCalendar );
1789 inL = inR->clone(); 1789 inL = inR->clone();
1790 inL->setIDStr( ":" ); 1790 inL->setIDStr( ":" );
1791 inL->setCalID( 0 );// add to default cal 1791 inL->setCalID( 0 );// add to default cal
1792 local->addIncidence( inL ); 1792 local->addIncidence( inL );
1793 ++addedEvent; 1793 ++addedEvent;
1794 1794
1795 } else { 1795 } else {
1796 checkExternSyncEvent(eventRSyncSharp, inR); 1796 checkExternSyncEvent(eventRSyncSharp, inR);
1797 remote->deleteIncidence( inR ); 1797 remote->deleteIncidence( inR );
1798 ++deletedEventR; 1798 ++deletedEventR;
1799 } 1799 }
1800 } 1800 }
1801 } else { 1801 } else {
1802 ++filteredIN; 1802 ++filteredIN;
1803 } 1803 }
1804 } 1804 }
1805 } 1805 }
1806 inR = er.next(); 1806 inR = er.next();
1807 } 1807 }
1808 QPtrList<Incidence> el = local->rawIncidences(); 1808 QPtrList<Incidence> el = local->rawIncidences();
1809 inL = el.first(); 1809 inL = el.first();
1810 modulo = (el.count()/10)+1; 1810 modulo = (el.count()/10)+1;
1811 bar.setCaption (i18n("Add / remove events") ); 1811 bar.setCaption (i18n("Add / remove events") );
1812 bar.setTotalSteps ( el.count() ) ; 1812 bar.setTotalSteps ( el.count() ) ;
1813 bar.show(); 1813 bar.show();
1814 incCounter = 0; 1814 incCounter = 0;
1815 1815
1816 while ( inL ) { 1816 while ( inL ) {
1817 1817
1818 qApp->processEvents(); 1818 qApp->processEvents();
1819 if ( ! bar.isVisible() ) 1819 if ( ! bar.isVisible() )
1820 return false; 1820 return false;
1821 if ( incCounter % modulo == 0 ) 1821 if ( incCounter % modulo == 0 )
1822 bar.setProgress( incCounter ); 1822 bar.setProgress( incCounter );
1823 ++incCounter; 1823 ++incCounter;
1824 uid = inL->uid(); 1824 uid = inL->uid();
1825 bool skipIncidence = false; 1825 bool skipIncidence = false;
1826 if ( uid.left(15) == QString("last-syncEvent-") ) 1826 if ( uid.left(15) == QString("last-syncEvent-") )
1827 skipIncidence = true; 1827 skipIncidence = true;
1828 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1828 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1829 skipIncidence = true; 1829 skipIncidence = true;
1830 if ( !skipIncidence ) { 1830 if ( !skipIncidence ) {
1831 inR = remote->incidenceForUid( uid , true ); 1831 inR = remote->incidenceForUid( uid , true, true );
1832 if ( ! inR ) { 1832 if ( ! inR ) {
1833 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1833 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1834 // no conflict ********** add or delete local 1834 // no conflict ********** add or delete local
1835 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1835 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1836 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1836 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1837 checkExternSyncEvent(eventLSyncSharp, inL); 1837 checkExternSyncEvent(eventLSyncSharp, inL);
1838 local->deleteIncidence( inL ); 1838 local->deleteIncidence( inL );
1839 ++deletedEventL; 1839 ++deletedEventL;
1840 } else { 1840 } else {
1841 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1841 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1842 inL->removeID(mCurrentSyncDevice ); 1842 inL->removeID(mCurrentSyncDevice );
1843 ++addedEventR; 1843 ++addedEventR;
1844 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1844 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1845 inL->setLastModified( modifiedCalendar ); 1845 inL->setLastModified( modifiedCalendar );
1846 inR = inL->clone(); 1846 inR = inL->clone();
1847 inR->setIDStr( ":" ); 1847 inR->setIDStr( ":" );
1848 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1848 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1849 inR->setCalID( 0 );// add to default cal 1849 inR->setCalID( 0 );// add to default cal
1850 remote->addIncidence( inR ); 1850 remote->addIncidence( inR );
1851 } 1851 }
1852 } 1852 }
1853 } else { 1853 } else {
1854 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1854 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1855 checkExternSyncEvent(eventLSyncSharp, inL); 1855 checkExternSyncEvent(eventLSyncSharp, inL);
1856 local->deleteIncidence( inL ); 1856 local->deleteIncidence( inL );
1857 ++deletedEventL; 1857 ++deletedEventL;
1858 } else { 1858 } else {
1859 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1859 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1860 ++addedEventR; 1860 ++addedEventR;
1861 inL->setLastModified( modifiedCalendar ); 1861 inL->setLastModified( modifiedCalendar );
1862 inR = inL->clone(); 1862 inR = inL->clone();
1863 inR->setIDStr( ":" ); 1863 inR->setIDStr( ":" );
1864 inR->setCalID( 0 );// add to default cal 1864 inR->setCalID( 0 );// add to default cal
1865 remote->addIncidence( inR ); 1865 remote->addIncidence( inR );
1866 } 1866 }
1867 } 1867 }
1868 } 1868 }
1869 } else { 1869 } else {
1870 ++filteredOUT; 1870 ++filteredOUT;
1871 } 1871 }
1872 } 1872 }
1873 } 1873 }
1874 inL = el.next(); 1874 inL = el.next();
1875 } 1875 }
1876 int delFut = 0; 1876 int delFut = 0;
1877 int remRem = 0; 1877 int remRem = 0;
1878 if ( mSyncManager->mWriteBackInFuture ) { 1878 if ( mSyncManager->mWriteBackInFuture ) {
1879 er = remote->rawIncidences(); 1879 er = remote->rawIncidences();
1880 remRem = er.count(); 1880 remRem = er.count();
1881 inR = er.first(); 1881 inR = er.first();
1882 QDateTime dt; 1882 QDateTime dt;
1883 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1883 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1884 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1884 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1885 while ( inR ) { 1885 while ( inR ) {
1886 if ( inR->typeID() == todoID ) { 1886 if ( inR->typeID() == todoID ) {
1887 Todo * t = (Todo*)inR; 1887 Todo * t = (Todo*)inR;
1888 if ( t->hasDueDate() ) 1888 if ( t->hasDueDate() )
1889 dt = t->dtDue(); 1889 dt = t->dtDue();
1890 else 1890 else
1891 dt = cur.addSecs( 62 ); 1891 dt = cur.addSecs( 62 );
1892 } 1892 }
1893 else if (inR->typeID() == eventID ) { 1893 else if (inR->typeID() == eventID ) {
1894 bool ok; 1894 bool ok;
1895 dt = inR->getNextOccurence( cur, &ok ); 1895 dt = inR->getNextOccurence( cur, &ok );
1896 if ( !ok ) 1896 if ( !ok )
1897 dt = cur.addSecs( -62 ); 1897 dt = cur.addSecs( -62 );
1898 } 1898 }
1899 else 1899 else
1900 dt = inR->dtStart(); 1900 dt = inR->dtStart();
1901 if ( dt < cur || dt > end ) { 1901 if ( dt < cur || dt > end ) {
1902 remote->deleteIncidence( inR ); 1902 remote->deleteIncidence( inR );
1903 ++delFut; 1903 ++delFut;
1904 } 1904 }
1905 inR = er.next(); 1905 inR = er.next();
1906 } 1906 }
1907 } 1907 }
1908 bar.hide(); 1908 bar.hide();
1909 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1909 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1910 if ( mMultiResourceSync ) { 1910 if ( mMultiResourceSync ) {
1911 remote->removeSyncInfo( "" ); //all 1911 remote->removeSyncInfo( "" ); //all
1912 qDebug("KO: Remoing all sync info on remote "); 1912 qDebug("KO: Remoing all sync info on remote ");
1913 } else { 1913 } else {
1914 eventLSync->setReadOnly( false ); 1914 eventLSync->setReadOnly( false );
1915 eventLSync->setDtStart( mLastCalendarSync ); 1915 eventLSync->setDtStart( mLastCalendarSync );
1916 eventRSync->setDtStart( mLastCalendarSync ); 1916 eventRSync->setDtStart( mLastCalendarSync );
1917 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1917 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1918 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1918 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1919 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1919 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1920 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1920 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1921 eventLSync->setReadOnly( true ); 1921 eventLSync->setReadOnly( true );
1922 } 1922 }
1923 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1923 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1924 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal... 1924 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal...
1925 remote->addEvent( eventRSync ); 1925 remote->addEvent( eventRSync );
1926 else 1926 else
1927 delete eventRSync; 1927 delete eventRSync;
1928 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1928 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1929 QString mes; 1929 QString mes;
1930 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1930 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1931 QString delmess; 1931 QString delmess;
1932 if ( delFut ) { 1932 if ( delFut ) {
1933 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1933 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1934 mes += delmess; 1934 mes += delmess;
1935 } 1935 }
1936 mes = i18n("Local calendar changed!\n") +mes; 1936 mes = i18n("Local calendar changed!\n") +mes;
1937 mCalendar->checkAlarmForIncidence( 0, true ); 1937 mCalendar->checkAlarmForIncidence( 0, true );
1938 qDebug( mes ); 1938 qDebug( mes );
1939 if ( mSyncManager->mShowSyncSummary ) { 1939 if ( mSyncManager->mShowSyncSummary ) {
1940 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1940 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1941 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1941 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1942 qDebug("KO: WB cancelled "); 1942 qDebug("KO: WB cancelled ");
1943 mSyncManager->mWriteBackFile = false; 1943 mSyncManager->mWriteBackFile = false;
1944 return syncOK; 1944 return syncOK;
1945 } 1945 }
1946 } 1946 }
1947 return syncOK; 1947 return syncOK;
1948} 1948}
1949 1949
1950void CalendarView::setSyncDevice( QString s ) 1950void CalendarView::setSyncDevice( QString s )
1951{ 1951{
1952 mCurrentSyncDevice= s; 1952 mCurrentSyncDevice= s;
1953} 1953}
1954void CalendarView::setSyncName( QString s ) 1954void CalendarView::setSyncName( QString s )
1955{ 1955{
1956 mCurrentSyncName= s; 1956 mCurrentSyncName= s;
1957} 1957}
1958bool CalendarView::syncCalendar(QString filename, int mode) 1958bool CalendarView::syncCalendar(QString filename, int mode)
1959{ 1959{
1960 //qDebug("syncCalendar %s ", filename.latin1()); 1960 //qDebug("syncCalendar %s ", filename.latin1());
1961 mGlobalSyncMode = SYNC_MODE_NORMAL; 1961 mGlobalSyncMode = SYNC_MODE_NORMAL;
1962 CalendarLocal* calendar = new CalendarLocal(); 1962 CalendarLocal* calendar = new CalendarLocal();
1963 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1963 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1964 FileStorage* storage = new FileStorage( calendar ); 1964 FileStorage* storage = new FileStorage( calendar );
1965 bool syncOK = false; 1965 bool syncOK = false;
1966 storage->setFileName( filename ); 1966 storage->setFileName( filename );
1967 // qDebug("loading ... "); 1967 // qDebug("loading ... ");
1968 if ( storage->load() ) { 1968 if ( storage->load() ) {
1969 getEventViewerDialog()->setSyncMode( true ); 1969 getEventViewerDialog()->setSyncMode( true );
1970 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1970 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1971 getEventViewerDialog()->setSyncMode( false ); 1971 getEventViewerDialog()->setSyncMode( false );
1972 if ( syncOK ) { 1972 if ( syncOK ) {
1973 if ( mSyncManager->mWriteBackFile ) 1973 if ( mSyncManager->mWriteBackFile )
1974 { 1974 {
1975 storage->setSaveFormat( new ICalFormat() ); 1975 storage->setSaveFormat( new ICalFormat() );
1976 storage->save(); 1976 storage->save();
1977 } 1977 }
1978 } 1978 }
1979 setModified( true ); 1979 setModified( true );
1980 } 1980 }
1981 delete storage; 1981 delete storage;
1982 delete calendar; 1982 delete calendar;
1983 if ( syncOK ) 1983 if ( syncOK )
1984 updateView(); 1984 updateView();
1985 return syncOK; 1985 return syncOK;
1986} 1986}
1987 1987
1988void CalendarView::syncExternal( int mode ) 1988void CalendarView::syncExternal( int mode )
1989{ 1989{
1990 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1990 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1991 qApp->processEvents(); 1991 qApp->processEvents();
1992 CalendarLocal* calendar = new CalendarLocal(); 1992 CalendarLocal* calendar = new CalendarLocal();
1993 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1993 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1994 bool syncOK = false; 1994 bool syncOK = false;
1995 bool loadSuccess = false; 1995 bool loadSuccess = false;
1996 PhoneFormat* phoneFormat = 0; 1996 PhoneFormat* phoneFormat = 0;
1997 emit tempDisableBR(true); 1997 emit tempDisableBR(true);
1998#ifndef DESKTOP_VERSION 1998#ifndef DESKTOP_VERSION
1999 SharpFormat* sharpFormat = 0; 1999 SharpFormat* sharpFormat = 0;
2000 if ( mode == 0 ) { // sharp 2000 if ( mode == 0 ) { // sharp
2001 sharpFormat = new SharpFormat () ; 2001 sharpFormat = new SharpFormat () ;
2002 loadSuccess = sharpFormat->load( calendar, mCalendar ); 2002 loadSuccess = sharpFormat->load( calendar, mCalendar );
2003 2003
2004 } else 2004 } else
2005#endif 2005#endif
2006 if ( mode == 1 ) { // phone 2006 if ( mode == 1 ) { // phone
2007 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 2007 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
2008 mSyncManager->mPhoneDevice, 2008 mSyncManager->mPhoneDevice,
2009 mSyncManager->mPhoneConnection, 2009 mSyncManager->mPhoneConnection,
2010 mSyncManager->mPhoneModel); 2010 mSyncManager->mPhoneModel);
2011 loadSuccess = phoneFormat->load( calendar,mCalendar); 2011 loadSuccess = phoneFormat->load( calendar,mCalendar);
2012 2012
2013 } else { 2013 } else {
2014 emit tempDisableBR(false); 2014 emit tempDisableBR(false);
2015 return; 2015 return;
2016 } 2016 }
2017 if ( loadSuccess ) { 2017 if ( loadSuccess ) {
2018 getEventViewerDialog()->setSyncMode( true ); 2018 getEventViewerDialog()->setSyncMode( true );
2019 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2019 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2020 getEventViewerDialog()->setSyncMode( false ); 2020 getEventViewerDialog()->setSyncMode( false );
2021 qApp->processEvents(); 2021 qApp->processEvents();
2022 if ( syncOK ) { 2022 if ( syncOK ) {
2023 if ( mSyncManager->mWriteBackFile ) 2023 if ( mSyncManager->mWriteBackFile )
2024 { 2024 {
2025 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2025 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2026 Incidence* inc = iL.first(); 2026 Incidence* inc = iL.first();
2027 if ( phoneFormat ) { 2027 if ( phoneFormat ) {
2028 while ( inc ) { 2028 while ( inc ) {
2029 inc->removeID(mCurrentSyncDevice); 2029 inc->removeID(mCurrentSyncDevice);
2030 inc = iL.next(); 2030 inc = iL.next();
2031 } 2031 }
2032 } 2032 }
2033#ifndef DESKTOP_VERSION 2033#ifndef DESKTOP_VERSION
2034 if ( sharpFormat ) 2034 if ( sharpFormat )
2035 sharpFormat->save(calendar); 2035 sharpFormat->save(calendar);
2036#endif 2036#endif
2037 if ( phoneFormat ) 2037 if ( phoneFormat )
2038 phoneFormat->save(calendar); 2038 phoneFormat->save(calendar);
2039 iL = calendar->rawIncidences(); 2039 iL = calendar->rawIncidences();
2040 inc = iL.first(); 2040 inc = iL.first();
2041 Incidence* loc; 2041 Incidence* loc;
2042 while ( inc ) { 2042 while ( inc ) {
2043 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2043 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2044 loc = mCalendar->incidence(inc->uid() ); 2044 loc = mCalendar->incidence(inc->uid() );
2045 if ( loc ) { 2045 if ( loc ) {
2046 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2046 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2047 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2047 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2048 } 2048 }
2049 } 2049 }
2050 inc = iL.next(); 2050 inc = iL.next();
2051 } 2051 }
2052 Incidence* lse = getLastSyncEvent(); 2052 Incidence* lse = getLastSyncEvent();
2053 if ( lse ) { 2053 if ( lse ) {
2054 lse->setReadOnly( false ); 2054 lse->setReadOnly( false );
2055 lse->setDescription( "" ); 2055 lse->setDescription( "" );
2056 lse->setReadOnly( true ); 2056 lse->setReadOnly( true );
2057 } 2057 }
2058 } 2058 }
2059 } else { 2059 } else {
2060 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2060 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2061 } 2061 }
2062 setModified( true ); 2062 setModified( true );
2063 } else { 2063 } else {
2064 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2064 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2065 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2065 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2066 question, i18n("Ok")) ; 2066 question, i18n("Ok")) ;
2067 2067
2068 } 2068 }
2069 delete calendar; 2069 delete calendar;
2070 updateView(); 2070 updateView();
2071 emit tempDisableBR(false); 2071 emit tempDisableBR(false);
2072 return ;//syncOK; 2072 return ;//syncOK;
2073 2073
2074} 2074}
2075 2075
2076bool CalendarView::importBday() 2076bool CalendarView::importBday()
2077{ 2077{
2078#ifndef KORG_NOKABC 2078#ifndef KORG_NOKABC
2079 2079
2080#ifdef DESKTOP_VERSION 2080#ifdef DESKTOP_VERSION
2081 int curCal = mCalendar->defaultCalendar(); 2081 int curCal = mCalendar->defaultCalendar();
2082 int bd = mCalEditView->getBirtdayID(); 2082 int bd = mCalEditView->getBirtdayID();
2083 if ( bd == 0 ) 2083 if ( bd == 0 )
2084 return false; 2084 return false;
2085 mCalendar->setDefaultCalendar( bd ); 2085 mCalendar->setDefaultCalendar( bd );
2086 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2086 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2087 KABC::AddressBook::Iterator it; 2087 KABC::AddressBook::Iterator it;
2088 int count = 0; 2088 int count = 0;
2089 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2089 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2090 ++count; 2090 ++count;
2091 } 2091 }
2092 QProgressBar bar(count,0 ); 2092 QProgressBar bar(count,0 );
2093 int w = 300; 2093 int w = 300;
2094 if ( QApplication::desktop()->width() < 320 ) 2094 if ( QApplication::desktop()->width() < 320 )
2095 w = 220; 2095 w = 220;
2096 int h = bar.sizeHint().height() ; 2096 int h = bar.sizeHint().height() ;
2097 int dw = QApplication::desktop()->width(); 2097 int dw = QApplication::desktop()->width();
2098 int dh = QApplication::desktop()->height(); 2098 int dh = QApplication::desktop()->height();
2099 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2099 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2100 bar.show(); 2100 bar.show();
2101 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2101 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2102 qApp->processEvents(); 2102 qApp->processEvents();
2103 count = 0; 2103 count = 0;
2104 int addCount = 0; 2104 int addCount = 0;
2105 KCal::Attendee* a = 0; 2105 KCal::Attendee* a = 0;
2106 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2106 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2107 if ( ! bar.isVisible() ) 2107 if ( ! bar.isVisible() )
2108 return false; 2108 return false;
2109 bar.setProgress( count++ ); 2109 bar.setProgress( count++ );
2110 qApp->processEvents(); 2110 qApp->processEvents();
2111 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2111 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2112 if ( (*it).birthday().date().isValid() ){ 2112 if ( (*it).birthday().date().isValid() ){
2113 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2113 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2114 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2114 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2115 ++addCount; 2115 ++addCount;
2116 } 2116 }
2117 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2117 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2118 if ( anni.isValid() ){ 2118 if ( anni.isValid() ){
2119 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2119 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2120 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2120 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2121 ++addCount; 2121 ++addCount;
2122 } 2122 }
2123 } 2123 }
2124 mCalendar->setDefaultCalendar( curCal ); 2124 mCalendar->setDefaultCalendar( curCal );
2125 updateView(); 2125 updateView();
2126 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2126 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2127#else //DESKTOP_VERSION 2127#else //DESKTOP_VERSION
2128 2128
2129 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2129 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2130 // the result should now arrive through method insertBirthdays 2130 // the result should now arrive through method insertBirthdays
2131 2131
2132#endif //DESKTOP_VERSION 2132#endif //DESKTOP_VERSION
2133 2133
2134#endif //KORG_NOKABC 2134#endif //KORG_NOKABC
2135 2135
2136 2136
2137 return true; 2137 return true;
2138} 2138}
2139 2139
2140// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2140// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2141void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2141void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2142 const QStringList& anniversaryList, const QStringList& realNameList, 2142 const QStringList& anniversaryList, const QStringList& realNameList,
2143 const QStringList& emailList, const QStringList& assembledNameList, 2143 const QStringList& emailList, const QStringList& assembledNameList,
2144 const QStringList& uidList) 2144 const QStringList& uidList)
2145{ 2145{
2146 2146
2147 //qDebug("KO::CalendarView::insertBirthdays"); 2147 //qDebug("KO::CalendarView::insertBirthdays");
2148 if (uid == this->name()) 2148 if (uid == this->name())
2149 { 2149 {
2150 int curCal = mCalendar->defaultCalendar(); 2150 int curCal = mCalendar->defaultCalendar();
2151 int bd = mCalEditView->getBirtdayID(); 2151 int bd = mCalEditView->getBirtdayID();
2152 if ( bd == 0 ) 2152 if ( bd == 0 )
2153 return; 2153 return;
2154 mCalendar->setDefaultCalendar( bd ); 2154 mCalendar->setDefaultCalendar( bd );
2155 2155
2156 2156
2157 int count = birthdayList.count(); 2157 int count = birthdayList.count();
2158 int addCount = 0; 2158 int addCount = 0;
2159 KCal::Attendee* a = 0; 2159 KCal::Attendee* a = 0;
2160 2160
2161 //qDebug("CalView 1 %i", count); 2161 //qDebug("CalView 1 %i", count);
2162 2162
2163 QProgressBar bar(count,0 ); 2163 QProgressBar bar(count,0 );
2164 int w = 300; 2164 int w = 300;
2165 if ( QApplication::desktop()->width() < 320 ) 2165 if ( QApplication::desktop()->width() < 320 )
2166 w = 220; 2166 w = 220;
2167 int h = bar.sizeHint().height() ; 2167 int h = bar.sizeHint().height() ;
2168 int dw = QApplication::desktop()->width(); 2168 int dw = QApplication::desktop()->width();
2169 int dh = QApplication::desktop()->height(); 2169 int dh = QApplication::desktop()->height();
2170 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2170 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2171 bar.show(); 2171 bar.show();
2172 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2172 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2173 qApp->processEvents(); 2173 qApp->processEvents();
2174 2174
2175 QDate birthday; 2175 QDate birthday;
2176 QDate anniversary; 2176 QDate anniversary;
2177 QString realName; 2177 QString realName;
2178 QString email; 2178 QString email;
2179 QString assembledName; 2179 QString assembledName;
2180 QString uid; 2180 QString uid;
2181 bool ok = true; 2181 bool ok = true;
2182 for ( int i = 0; i < count; i++) 2182 for ( int i = 0; i < count; i++)
2183 { 2183 {
2184 if ( ! bar.isVisible() ) 2184 if ( ! bar.isVisible() )
2185 return; 2185 return;
2186 bar.setProgress( i ); 2186 bar.setProgress( i );
2187 qApp->processEvents(); 2187 qApp->processEvents();
2188 2188
2189 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2189 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2190 if (!ok) { 2190 if (!ok) {
2191 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2191 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2192 } 2192 }
2193 2193
2194 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2194 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2195 if (!ok) { 2195 if (!ok) {
2196 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2196 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2197 } 2197 }
2198 realName = realNameList[i]; 2198 realName = realNameList[i];
2199 email = emailList[i]; 2199 email = emailList[i];
2200 assembledName = assembledNameList[i]; 2200 assembledName = assembledNameList[i];
2201 uid = uidList[i]; 2201 uid = uidList[i];
2202 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 2202 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
2203 2203
2204 if ( birthday.isValid() ){ 2204 if ( birthday.isValid() ){
2205 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2205 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2206 KCal::Attendee::ReqParticipant,uid) ; 2206 KCal::Attendee::ReqParticipant,uid) ;
2207 if ( addAnniversary( birthday, assembledName, a, true ) ) 2207 if ( addAnniversary( birthday, assembledName, a, true ) )
2208 ++addCount; 2208 ++addCount;
2209 } 2209 }
2210 2210
2211 if ( anniversary.isValid() ){ 2211 if ( anniversary.isValid() ){
2212 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2212 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2213 KCal::Attendee::ReqParticipant,uid) ; 2213 KCal::Attendee::ReqParticipant,uid) ;
2214 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2214 if ( addAnniversary( anniversary, assembledName, a, false ) )
2215 ++addCount; 2215 ++addCount;
2216 } 2216 }
2217 } 2217 }
2218 2218
2219 mCalendar->setDefaultCalendar( curCal ); 2219 mCalendar->setDefaultCalendar( curCal );
2220 updateView(); 2220 updateView();
2221 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2221 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2222 2222
2223 } 2223 }
2224 2224
2225} 2225}
2226 2226
2227 2227
2228 2228
2229bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2229bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2230{ 2230{
2231 //qDebug("addAnni "); 2231 //qDebug("addAnni ");
2232 Event * ev = new Event(); 2232 Event * ev = new Event();
2233 ev->setOrganizer(KOPrefs::instance()->email()); 2233 ev->setOrganizer(KOPrefs::instance()->email());
2234 if ( a ) { 2234 if ( a ) {
2235 ev->addAttendee( a ); 2235 ev->addAttendee( a );
2236 } 2236 }
2237 QString kind; 2237 QString kind;
2238 if ( birthday ) { 2238 if ( birthday ) {
2239 kind = i18n( "Birthday" ); 2239 kind = i18n( "Birthday" );
2240 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2240 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2241 } 2241 }
2242 else { 2242 else {
2243 kind = i18n( "Anniversary" ); 2243 kind = i18n( "Anniversary" );
2244 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2244 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2245 } 2245 }
2246 ev->setCategories( kind ); 2246 ev->setCategories( kind );
2247 ev->setDtStart( QDateTime(date) ); 2247 ev->setDtStart( QDateTime(date) );
2248 ev->setDtEnd( QDateTime(date) ); 2248 ev->setDtEnd( QDateTime(date) );
2249 ev->setFloats( true ); 2249 ev->setFloats( true );
2250 Recurrence * rec = ev->recurrence(); 2250 Recurrence * rec = ev->recurrence();
2251 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2251 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2252 rec->addYearlyNum( date.month() ); 2252 rec->addYearlyNum( date.month() );
2253 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2253 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2254 delete ev; 2254 delete ev;
2255 return false; 2255 return false;
2256 } 2256 }
2257 return true; 2257 return true;
2258 2258
2259} 2259}
2260bool CalendarView::importQtopia( const QString &categories, 2260bool CalendarView::importQtopia( const QString &categories,
2261 const QString &datebook, 2261 const QString &datebook,
2262 const QString &todolist ) 2262 const QString &todolist )
2263{ 2263{
2264 2264
2265 QtopiaFormat qtopiaFormat; 2265 QtopiaFormat qtopiaFormat;
2266 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2266 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2267 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2267 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2268 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2268 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2269 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2269 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2270 2270
2271 updateView(); 2271 updateView();
2272 return true; 2272 return true;
2273 2273
2274#if 0 2274#if 0
2275 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2275 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2276 mCurrentSyncDevice = "qtopia-XML"; 2276 mCurrentSyncDevice = "qtopia-XML";
2277 if ( mSyncManager->mAskForPreferences ) 2277 if ( mSyncManager->mAskForPreferences )
2278 edit_sync_options(); 2278 edit_sync_options();
2279 qApp->processEvents(); 2279 qApp->processEvents();
2280 CalendarLocal* calendar = new CalendarLocal(); 2280 CalendarLocal* calendar = new CalendarLocal();
2281 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2281 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2282 bool syncOK = false; 2282 bool syncOK = false;
2283 QtopiaFormat qtopiaFormat; 2283 QtopiaFormat qtopiaFormat;
2284 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2284 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2285 bool loadOk = true; 2285 bool loadOk = true;
2286 if ( !categories.isEmpty() ) 2286 if ( !categories.isEmpty() )
2287 loadOk = qtopiaFormat.load( calendar, categories ); 2287 loadOk = qtopiaFormat.load( calendar, categories );
2288 if ( loadOk && !datebook.isEmpty() ) 2288 if ( loadOk && !datebook.isEmpty() )
2289 loadOk = qtopiaFormat.load( calendar, datebook ); 2289 loadOk = qtopiaFormat.load( calendar, datebook );
2290 if ( loadOk && !todolist.isEmpty() ) 2290 if ( loadOk && !todolist.isEmpty() )
2291 loadOk = qtopiaFormat.load( calendar, todolist ); 2291 loadOk = qtopiaFormat.load( calendar, todolist );
2292 2292
2293 if ( loadOk ) { 2293 if ( loadOk ) {
2294 getEventViewerDialog()->setSyncMode( true ); 2294 getEventViewerDialog()->setSyncMode( true );
2295 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2295 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2296 getEventViewerDialog()->setSyncMode( false ); 2296 getEventViewerDialog()->setSyncMode( false );
2297 qApp->processEvents(); 2297 qApp->processEvents();
2298 if ( syncOK ) { 2298 if ( syncOK ) {
2299 if ( mSyncManager->mWriteBackFile ) 2299 if ( mSyncManager->mWriteBackFile )
2300 { 2300 {
2301 // write back XML file 2301 // write back XML file
2302 2302
2303 } 2303 }
2304 setModified( true ); 2304 setModified( true );
2305 } 2305 }
2306 } else { 2306 } else {
2307 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2307 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2308 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2308 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2309 question, i18n("Ok")) ; 2309 question, i18n("Ok")) ;
2310 } 2310 }
2311 delete calendar; 2311 delete calendar;
2312 updateView(); 2312 updateView();
2313 return syncOK; 2313 return syncOK;
2314 2314
2315 2315
2316#endif 2316#endif
2317 2317
2318} 2318}
2319 2319
2320void CalendarView::setSyncEventsReadOnly() 2320void CalendarView::setSyncEventsReadOnly()
2321{ 2321{
2322 mCalendar->setSyncEventsReadOnly(); 2322 mCalendar->setSyncEventsReadOnly();
2323} 2323}
2324 2324
2325bool CalendarView::loadCalendars() 2325bool CalendarView::loadCalendars()
2326{ 2326{
2327 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2327 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2328 KopiCalendarFile * cal = calendars.first(); 2328 KopiCalendarFile * cal = calendars.first();
2329 mCalendar->setDefaultCalendar( 1 ); 2329 mCalendar->setDefaultCalendar( 1 );
2330 openCalendar( MainWindow::defaultFileName(), false ); 2330 openCalendar( MainWindow::defaultFileName(), false );
2331 cal = calendars.next(); 2331 cal = calendars.next();
2332 while ( cal ) { 2332 while ( cal ) {
2333 addCalendar( cal ); 2333 addCalendar( cal );
2334 cal = calendars.next(); 2334 cal = calendars.next();
2335 } 2335 }
2336 restoreCalendarSettings(); 2336 restoreCalendarSettings();
2337 return true; 2337 return true;
2338} 2338}
2339bool CalendarView::restoreCalendarSettings() 2339bool CalendarView::restoreCalendarSettings()
2340{ 2340{
2341 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2341 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2342 KopiCalendarFile * cal = calendars.first(); 2342 KopiCalendarFile * cal = calendars.first();
2343 while ( cal ) { 2343 while ( cal ) {
2344 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2344 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2345 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2345 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2346 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2346 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2347 if ( cal->isStandard ) 2347 if ( cal->isStandard )
2348 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2348 mCalendar->setDefaultCalendar( cal->mCalNumber );
2349 cal = calendars.next(); 2349 cal = calendars.next();
2350 } 2350 }
2351 setSyncEventsReadOnly(); 2351 setSyncEventsReadOnly();
2352 mCalendar->reInitAlarmSettings(); 2352 mCalendar->reInitAlarmSettings();
2353 updateUnmanagedViews(); 2353 updateUnmanagedViews();
2354 updateView(); 2354 updateView();
2355 return true; 2355 return true;
2356} 2356}
2357void CalendarView::addCalendarId( int id ) 2357void CalendarView::addCalendarId( int id )
2358{ 2358{
2359 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2359 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2360 if ( cal ) 2360 if ( cal )
2361 addCalendar( cal ); 2361 addCalendar( cal );
2362} 2362}
2363bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2363bool CalendarView::addCalendar( KopiCalendarFile * cal )
2364{ 2364{
2365 cal->mErrorOnLoad = false; 2365 cal->mErrorOnLoad = false;
2366 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2366 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2367 cal->mLoadDt = QDateTime::currentDateTime(); 2367 cal->mLoadDt = QDateTime::currentDateTime();
2368 return true; 2368 return true;
2369 } 2369 }
2370 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2370 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2371 cal->mErrorOnLoad = true; 2371 cal->mErrorOnLoad = true;
2372 return false; 2372 return false;
2373} 2373}
2374bool CalendarView::openCalendar(QString filename, bool merge) 2374bool CalendarView::openCalendar(QString filename, bool merge)
2375{ 2375{
2376 2376
2377 if (filename.isEmpty()) { 2377 if (filename.isEmpty()) {
2378 return false; 2378 return false;
2379 } 2379 }
2380 2380
2381 if (!QFile::exists(filename)) { 2381 if (!QFile::exists(filename)) {
2382 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2382 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2383 return false; 2383 return false;
2384 } 2384 }
2385 2385
2386 globalFlagBlockAgenda = 1; 2386 globalFlagBlockAgenda = 1;
2387 clearAllViews(); 2387 clearAllViews();
2388 if (!merge) { 2388 if (!merge) {
2389 mViewManager->setDocumentId( filename ); 2389 mViewManager->setDocumentId( filename );
2390 mCalendar->close(); 2390 mCalendar->close();
2391 } 2391 }
2392 mStorage->setFileName( filename ); 2392 mStorage->setFileName( filename );
2393 2393
2394 if ( mStorage->load() ) { 2394 if ( mStorage->load() ) {
2395 if ( merge ) ;//setModified( true ); 2395 if ( merge ) ;//setModified( true );
2396 else { 2396 else {
2397 //setModified( true ); 2397 //setModified( true );
2398 mViewManager->setDocumentId( filename ); 2398 mViewManager->setDocumentId( filename );
2399 mDialogManager->setDocumentId( filename ); 2399 mDialogManager->setDocumentId( filename );
2400 mTodoList->setDocumentId( filename ); 2400 mTodoList->setDocumentId( filename );
2401 } 2401 }
2402 globalFlagBlockAgenda = 2; 2402 globalFlagBlockAgenda = 2;
2403 // if ( getLastSyncEvent() ) 2403 // if ( getLastSyncEvent() )
2404 // getLastSyncEvent()->setReadOnly( true ); 2404 // getLastSyncEvent()->setReadOnly( true );
2405 mCalendar->reInitAlarmSettings(); 2405 mCalendar->reInitAlarmSettings();
2406 setSyncEventsReadOnly(); 2406 setSyncEventsReadOnly();
2407 //updateUnmanagedViews(); 2407 //updateUnmanagedViews();
2408 //updateView(); 2408 //updateView();
2409 if ( filename != MainWindow::defaultFileName() ) { 2409 if ( filename != MainWindow::defaultFileName() ) {
2410 saveCalendar( MainWindow::defaultFileName() ); 2410 saveCalendar( MainWindow::defaultFileName() );
2411 } else { 2411 } else {
2412 QFileInfo finf ( MainWindow::defaultFileName()); 2412 QFileInfo finf ( MainWindow::defaultFileName());
2413 if ( finf.exists() ) { 2413 if ( finf.exists() ) {
2414 setLoadedFileVersion( finf.lastModified () ); 2414 setLoadedFileVersion( finf.lastModified () );
2415 } 2415 }
2416 } 2416 }
2417 return true; 2417 return true;
2418 } else { 2418 } else {
2419 // while failing to load, the calendar object could 2419 // while failing to load, the calendar object could
2420 // have become partially populated. Clear it out. 2420 // have become partially populated. Clear it out.
2421 if ( !merge ) { 2421 if ( !merge ) {
2422 mCalendar->close(); 2422 mCalendar->close();
2423 mViewManager->setDocumentId( filename ); 2423 mViewManager->setDocumentId( filename );
2424 mDialogManager->setDocumentId( filename ); 2424 mDialogManager->setDocumentId( filename );
2425 mTodoList->setDocumentId( filename ); 2425 mTodoList->setDocumentId( filename );
2426 } 2426 }
2427 2427
2428 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2428 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2429 2429
2430 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2430 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2431 globalFlagBlockAgenda = 2; 2431 globalFlagBlockAgenda = 2;
2432 mCalendar->reInitAlarmSettings(); 2432 mCalendar->reInitAlarmSettings();
2433 setSyncEventsReadOnly(); 2433 setSyncEventsReadOnly();
2434 updateUnmanagedViews(); 2434 updateUnmanagedViews();
2435 updateView(); 2435 updateView();
2436 } 2436 }
2437 return false; 2437 return false;
2438} 2438}
2439void CalendarView::mergeFile( QString fn ) 2439void CalendarView::mergeFile( QString fn )
2440{ 2440{
2441 clearAllViews(); 2441 clearAllViews();
2442 mCalendar->mergeCalendarFile( fn ); 2442 mCalendar->mergeCalendarFile( fn );
2443 mCalendar->reInitAlarmSettings(); 2443 mCalendar->reInitAlarmSettings();
2444 setSyncEventsReadOnly(); 2444 setSyncEventsReadOnly();
2445 updateUnmanagedViews(); 2445 updateUnmanagedViews();
2446 updateView(); 2446 updateView();
2447} 2447}
2448void CalendarView::mergeFileResource( QString fn ,QString resource ) 2448void CalendarView::mergeFileResource( QString fn ,QString resource )
2449{ 2449{
2450 2450
2451 if ( resource == "ALL" ) { 2451 if ( resource == "ALL" ) {
2452 mergeFile( fn ); 2452 mergeFile( fn );
2453 return; 2453 return;
2454 } 2454 }
2455 2455
2456 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2456 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2457 if ( !exclusiveResource ) { 2457 if ( !exclusiveResource ) {
2458 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() ); 2458 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() );
2459 return; 2459 return;
2460 } 2460 }
2461 clearAllViews(); 2461 clearAllViews();
2462 mCalendar->setCalendarRemove( exclusiveResource ); 2462 mCalendar->setCalendarRemove( exclusiveResource );
2463 int def = mCalendar->defaultCalendar(); 2463 int def = mCalendar->defaultCalendar();
2464 mCalendar->setDefaultCalendar(exclusiveResource); 2464 mCalendar->setDefaultCalendar(exclusiveResource);
2465 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) { 2465 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) {
2466 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() ); 2466 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() );
2467 } 2467 }
2468 mCalendar->setDefaultCalendar( def ); 2468 mCalendar->setDefaultCalendar( def );
2469 mCalendar->reInitAlarmSettings(); 2469 mCalendar->reInitAlarmSettings();
2470 setSyncEventsReadOnly(); 2470 setSyncEventsReadOnly();
2471 updateUnmanagedViews(); 2471 updateUnmanagedViews();
2472 updateView(); 2472 updateView();
2473} 2473}
2474void CalendarView::showOpenError() 2474void CalendarView::showOpenError()
2475{ 2475{
2476 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2476 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2477} 2477}
2478void CalendarView::setLoadedFileVersion(QDateTime dt) 2478void CalendarView::setLoadedFileVersion(QDateTime dt)
2479{ 2479{
2480 loadedFileVersion = dt; 2480 loadedFileVersion = dt;
2481} 2481}
2482bool CalendarView::checkFileChanged(QString fn) 2482bool CalendarView::checkFileChanged(QString fn)
2483{ 2483{
2484 QFileInfo finf ( fn ); 2484 QFileInfo finf ( fn );
2485 if ( !finf.exists() ) 2485 if ( !finf.exists() )
2486 return true; 2486 return true;
2487 QDateTime dt = finf.lastModified (); 2487 QDateTime dt = finf.lastModified ();
2488 if ( dt <= loadedFileVersion ) 2488 if ( dt <= loadedFileVersion )
2489 return false; 2489 return false;
2490 return true; 2490 return true;
2491 2491
2492} 2492}
2493void CalendarView::watchSavedFile() 2493void CalendarView::watchSavedFile()
2494{ 2494{
2495 QFileInfo finf ( MainWindow::defaultFileName()); 2495 QFileInfo finf ( MainWindow::defaultFileName());
2496 if ( !finf.exists() ) 2496 if ( !finf.exists() )
2497 return; 2497 return;
2498 QDateTime dt = finf.lastModified (); 2498 QDateTime dt = finf.lastModified ();
2499 if ( dt < loadedFileVersion ) { 2499 if ( dt < loadedFileVersion ) {
2500 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2500 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2501 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2501 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2502 return; 2502 return;
2503 } 2503 }
2504 loadedFileVersion = dt; 2504 loadedFileVersion = dt;
2505} 2505}
2506bool CalendarView::checkAllFileVersions() 2506bool CalendarView::checkAllFileVersions()
2507{ 2507{
2508 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2508 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2509 KopiCalendarFile * cal = calendars.first(); 2509 KopiCalendarFile * cal = calendars.first();
2510 mCalendar->setDefaultCalendar( 1 ); 2510 mCalendar->setDefaultCalendar( 1 );
2511 mCalendar->setDefaultCalendarEnabledOnly(); 2511 mCalendar->setDefaultCalendarEnabledOnly();
2512 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2512 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2513 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2513 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2514 restoreCalendarSettings(); 2514 restoreCalendarSettings();
2515 return false; 2515 return false;
2516 } 2516 }
2517 } 2517 }
2518 cal = calendars.next(); 2518 cal = calendars.next();
2519 QDateTime storeTemp = loadedFileVersion; 2519 QDateTime storeTemp = loadedFileVersion;
2520 while ( cal ) { 2520 while ( cal ) {
2521 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2521 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2522 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2522 mCalendar->setDefaultCalendar( cal->mCalNumber );
2523 mCalendar->setDefaultCalendarEnabledOnly(); 2523 mCalendar->setDefaultCalendarEnabledOnly();
2524 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2524 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2525 if ( !checkFileVersion(cal->mFileName )) { 2525 if ( !checkFileVersion(cal->mFileName )) {
2526 loadedFileVersion = storeTemp; 2526 loadedFileVersion = storeTemp;
2527 restoreCalendarSettings(); 2527 restoreCalendarSettings();
2528 return false; 2528 return false;
2529 } 2529 }
2530 } 2530 }
2531 cal = calendars.next(); 2531 cal = calendars.next();
2532 } 2532 }
2533 loadedFileVersion = storeTemp; 2533 loadedFileVersion = storeTemp;
2534 return true; 2534 return true;
2535} 2535}
2536bool CalendarView::checkFileVersion(QString fn) 2536bool CalendarView::checkFileVersion(QString fn)
2537{ 2537{
2538 QFileInfo finf ( fn ); 2538 QFileInfo finf ( fn );
2539 if ( !finf.exists() ) 2539 if ( !finf.exists() )
2540 return true; 2540 return true;
2541 QDateTime dt = finf.lastModified (); 2541 QDateTime dt = finf.lastModified ();
2542 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2542 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2543 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2543 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2544 if ( dt <= loadedFileVersion ) 2544 if ( dt <= loadedFileVersion )
2545 return true; 2545 return true;
2546 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2546 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2547 i18n("KO/Pi Warning"),i18n("Overwrite"), 2547 i18n("KO/Pi Warning"),i18n("Overwrite"),
2548 i18n("Sync+save")); 2548 i18n("Sync+save"));
2549 2549
2550 if ( km == KMessageBox::Cancel ) 2550 if ( km == KMessageBox::Cancel )
2551 return false; 2551 return false;
2552 if ( km == KMessageBox::Yes ) 2552 if ( km == KMessageBox::Yes )
2553 return true; 2553 return true;
2554 2554
2555 setSyncDevice("deleteaftersync" ); 2555 setSyncDevice("deleteaftersync" );
2556 mSyncManager->mAskForPreferences = true; 2556 mSyncManager->mAskForPreferences = true;
2557 mSyncManager->mSyncAlgoPrefs = 3; 2557 mSyncManager->mSyncAlgoPrefs = 3;
2558 mSyncManager->mWriteBackFile = false; 2558 mSyncManager->mWriteBackFile = false;
2559 mSyncManager->mWriteBackExistingOnly = false; 2559 mSyncManager->mWriteBackExistingOnly = false;
2560 mSyncManager->mShowSyncSummary = false; 2560 mSyncManager->mShowSyncSummary = false;
2561 mMultiResourceSync = false; 2561 mMultiResourceSync = false;
2562 syncCalendar( fn, 3 ); 2562 syncCalendar( fn, 3 );
2563 Event * e = getLastSyncEvent(); 2563 Event * e = getLastSyncEvent();
2564 if ( e ) 2564 if ( e )
2565 mCalendar->deleteEvent( e ); 2565 mCalendar->deleteEvent( e );
2566 return true; 2566 return true;
2567} 2567}
2568bool CalendarView::saveCalendars() 2568bool CalendarView::saveCalendars()
2569{ 2569{
2570 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2570 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2571 KopiCalendarFile * cal = calendars.first(); 2571 KopiCalendarFile * cal = calendars.first();
2572 mCalendar->setDefaultCalendar( 1 ); 2572 mCalendar->setDefaultCalendar( 1 );
2573 mCalendar->setDefaultCalendarEnabledOnly(); 2573 mCalendar->setDefaultCalendarEnabledOnly();
2574 QString saveError; 2574 QString saveError;
2575 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2575 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2576 saveError = cal->mName +"\n"; 2576 saveError = cal->mName +"\n";
2577 cal = calendars.next(); 2577 cal = calendars.next();
2578 while ( cal ) { 2578 while ( cal ) {
2579 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2579 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2580 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2580 mCalendar->setDefaultCalendar( cal->mCalNumber );
2581 mCalendar->setDefaultCalendarEnabledOnly(); 2581 mCalendar->setDefaultCalendarEnabledOnly();
2582 if ( saveCalendar( cal->mFileName ) ) 2582 if ( saveCalendar( cal->mFileName ) )
2583 cal->mLoadDt = QDateTime::currentDateTime(); 2583 cal->mLoadDt = QDateTime::currentDateTime();
2584 else 2584 else
2585 saveError += cal->mName + "\n"; 2585 saveError += cal->mName + "\n";
2586 } 2586 }
2587 cal = calendars.next(); 2587 cal = calendars.next();
2588 } 2588 }
2589 restoreCalendarSettings(); 2589 restoreCalendarSettings();
2590 //saveError = "test error"; 2590 //saveError = "test error";
2591 if ( !saveError.isEmpty() ) { 2591 if ( !saveError.isEmpty() ) {
2592 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2592 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2593 KMessageBox::error(this, saveError, i18n("Error saving data")); 2593 KMessageBox::error(this, saveError, i18n("Error saving data"));
2594 return false; 2594 return false;
2595 } 2595 }
2596 return true; 2596 return true;
2597} 2597}
2598bool CalendarView::saveCalendarResource(QString filename, QString resource) 2598bool CalendarView::saveCalendarResource(QString filename, QString resource)
2599{ 2599{
2600 if ( resource == "ALL" ) 2600 if ( resource == "ALL" )
2601 return saveCalendar( filename ); 2601 return saveCalendar( filename );
2602 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2602 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2603 if ( !exclusiveResource ) { 2603 if ( !exclusiveResource ) {
2604 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() ); 2604 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() );
2605 return false; 2605 return false;
2606 } 2606 }
2607 mCalendar->setDefaultCalendar( exclusiveResource ); 2607 mCalendar->setDefaultCalendar( exclusiveResource );
2608 mCalendar->setDefaultCalendarEnabledOnly(); 2608 mCalendar->setDefaultCalendarEnabledOnly();
2609 mCalendar->setSyncEventsEnabled(); 2609 mCalendar->setSyncEventsEnabled();
2610 bool res = saveCalendar( filename ); 2610 bool res = saveCalendar( filename );
2611 restoreCalendarSettings(); 2611 restoreCalendarSettings();
2612 return res; 2612 return res;
2613 2613
2614} 2614}
2615bool CalendarView::saveCalendar( QString filename ) 2615bool CalendarView::saveCalendar( QString filename )
2616{ 2616{
2617 2617
2618 // Store back all unsaved data into calendar object 2618 // Store back all unsaved data into calendar object
2619 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2619 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2620 if ( mViewManager->currentView() ) 2620 if ( mViewManager->currentView() )
2621 mViewManager->currentView()->flushView(); 2621 mViewManager->currentView()->flushView();
2622 2622
2623 2623
2624 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2624 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2625 mStorage->setSaveFormat( new ICalFormat() ); 2625 mStorage->setSaveFormat( new ICalFormat() );
2626 mStorage->setFileName( filename ); 2626 mStorage->setFileName( filename );
2627 bool success; 2627 bool success;
2628 success = mStorage->save(); 2628 success = mStorage->save();
2629 if ( !success ) { 2629 if ( !success ) {
2630 return false; 2630 return false;
2631 } 2631 }
2632 if ( filename == MainWindow::defaultFileName() ) { 2632 if ( filename == MainWindow::defaultFileName() ) {
2633 setLoadedFileVersion( lfv ); 2633 setLoadedFileVersion( lfv );
2634 watchSavedFile(); 2634 watchSavedFile();
2635 } 2635 }
2636 return true; 2636 return true;
2637} 2637}
2638 2638
2639void CalendarView::closeCalendar() 2639void CalendarView::closeCalendar()
2640{ 2640{
2641 2641
2642 // child windows no longer valid 2642 // child windows no longer valid
2643 clearAllViews(); 2643 clearAllViews();
2644 emit closingDown(); 2644 emit closingDown();
2645 2645
2646 mCalendar->close(); 2646 mCalendar->close();
2647 setModified(false); 2647 setModified(false);
2648 updateView(); 2648 updateView();
2649} 2649}
2650 2650
2651void CalendarView::archiveCalendar() 2651void CalendarView::archiveCalendar()
2652{ 2652{
2653 mDialogManager->showArchiveDialog(); 2653 mDialogManager->showArchiveDialog();
2654} 2654}
2655 2655
2656 2656
2657void CalendarView::readSettings() 2657void CalendarView::readSettings()
2658{ 2658{
2659 2659
2660 2660
2661 // mViewManager->showAgendaView(); 2661 // mViewManager->showAgendaView();
2662 QString str; 2662 QString str;
2663 //qDebug("CalendarView::readSettings() "); 2663 //qDebug("CalendarView::readSettings() ");
2664 // read settings from the KConfig, supplying reasonable 2664 // read settings from the KConfig, supplying reasonable
2665 // defaults where none are to be found 2665 // defaults where none are to be found
2666 KConfig *config = KOGlobals::config(); 2666 KConfig *config = KOGlobals::config();
2667#ifndef KORG_NOSPLITTER 2667#ifndef KORG_NOSPLITTER
2668 config->setGroup("KOrganizer Geometry"); 2668 config->setGroup("KOrganizer Geometry");
2669 2669
2670 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2670 QValueList<int> sizes = config->readIntListEntry("Separator1");
2671 if (sizes.count() != 2) { 2671 if (sizes.count() != 2) {
2672 sizes << mDateNavigator->minimumSizeHint().width(); 2672 sizes << mDateNavigator->minimumSizeHint().width();
2673 sizes << 300; 2673 sizes << 300;
2674 } 2674 }
2675 mPanner->setSizes(sizes); 2675 mPanner->setSizes(sizes);
2676 2676
2677 sizes = config->readIntListEntry("Separator2"); 2677 sizes = config->readIntListEntry("Separator2");
2678 if ( ( mResourceView && sizes.count() == 4 ) || 2678 if ( ( mResourceView && sizes.count() == 4 ) ||
2679 ( !mResourceView && sizes.count() == 3 ) ) { 2679 ( !mResourceView && sizes.count() == 3 ) ) {
2680 mLeftSplitter->setSizes(sizes); 2680 mLeftSplitter->setSizes(sizes);
2681 } 2681 }
2682#endif 2682#endif
2683 globalFlagBlockAgenda = 1; 2683 globalFlagBlockAgenda = 1;
2684 mViewManager->showAgendaView(); 2684 mViewManager->showAgendaView();
2685 //mViewManager->readSettings( config ); 2685 //mViewManager->readSettings( config );
2686 mTodoList->restoreLayout(config,QString("Todo Layout")); 2686 mTodoList->restoreLayout(config,QString("Todo Layout"));
2687 readFilterSettings(config); 2687 readFilterSettings(config);
2688 2688
2689#ifdef DESKTOP_VERSION 2689#ifdef DESKTOP_VERSION
2690 config->setGroup("WidgetLayout"); 2690 config->setGroup("WidgetLayout");
2691 QStringList list; 2691 QStringList list;
2692 list = config->readListEntry("MainLayout"); 2692 list = config->readListEntry("MainLayout");
2693 int x,y,w,h; 2693 int x,y,w,h;
2694 if ( ! list.isEmpty() ) { 2694 if ( ! list.isEmpty() ) {
2695 x = list[0].toInt(); 2695 x = list[0].toInt();
2696 y = list[1].toInt(); 2696 y = list[1].toInt();
2697 w = list[2].toInt(); 2697 w = list[2].toInt();
2698 h = list[3].toInt(); 2698 h = list[3].toInt();
2699 KApplication::testCoords( &x,&y,&w,&h ); 2699 KApplication::testCoords( &x,&y,&w,&h );
2700 topLevelWidget()->setGeometry(x,y,w,h); 2700 topLevelWidget()->setGeometry(x,y,w,h);
2701 2701
2702 } else { 2702 } else {
2703 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2703 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2704 } 2704 }
2705 list = config->readListEntry("EditEventLayout"); 2705 list = config->readListEntry("EditEventLayout");
2706 if ( ! list.isEmpty() ) { 2706 if ( ! list.isEmpty() ) {
2707 x = list[0].toInt(); 2707 x = list[0].toInt();
2708 y = list[1].toInt(); 2708 y = list[1].toInt();
2709 w = list[2].toInt(); 2709 w = list[2].toInt();
2710 h = list[3].toInt(); 2710 h = list[3].toInt();
2711 KApplication::testCoords( &x,&y,&w,&h ); 2711 KApplication::testCoords( &x,&y,&w,&h );
2712 mEventEditor->setGeometry(x,y,w,h); 2712 mEventEditor->setGeometry(x,y,w,h);
2713 2713
2714 } 2714 }
2715 list = config->readListEntry("EditTodoLayout"); 2715 list = config->readListEntry("EditTodoLayout");
2716 if ( ! list.isEmpty() ) { 2716 if ( ! list.isEmpty() ) {
2717 x = list[0].toInt(); 2717 x = list[0].toInt();
2718 y = list[1].toInt(); 2718 y = list[1].toInt();
2719 w = list[2].toInt(); 2719 w = list[2].toInt();
2720 h = list[3].toInt(); 2720 h = list[3].toInt();
2721 KApplication::testCoords( &x,&y,&w,&h ); 2721 KApplication::testCoords( &x,&y,&w,&h );
2722 mTodoEditor->setGeometry(x,y,w,h); 2722 mTodoEditor->setGeometry(x,y,w,h);
2723 2723
2724 } 2724 }
2725 list = config->readListEntry("ViewerLayout"); 2725 list = config->readListEntry("ViewerLayout");
2726 if ( ! list.isEmpty() ) { 2726 if ( ! list.isEmpty() ) {
2727 x = list[0].toInt(); 2727 x = list[0].toInt();
2728 y = list[1].toInt(); 2728 y = list[1].toInt();
2729 w = list[2].toInt(); 2729 w = list[2].toInt();
2730 h = list[3].toInt(); 2730 h = list[3].toInt();
2731 KApplication::testCoords( &x,&y,&w,&h ); 2731 KApplication::testCoords( &x,&y,&w,&h );
2732 getEventViewerDialog()->setGeometry(x,y,w,h); 2732 getEventViewerDialog()->setGeometry(x,y,w,h);
2733 } 2733 }
2734#endif 2734#endif
2735 config->setGroup( "Views" ); 2735 config->setGroup( "Views" );
2736 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2736 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2737 2737
2738 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2738 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2739 2739
2740 int resetval = 0; 2740 int resetval = 0;
2741 int maxVal = 0; 2741 int maxVal = 0;
2742 if (sizes.count() != 3) { 2742 if (sizes.count() != 3) {
2743 if ( KOPrefs::instance()->mVerticalScreen ) { 2743 if ( KOPrefs::instance()->mVerticalScreen ) {
2744 resetval = mDateNavigator->sizeHint().width()+2; 2744 resetval = mDateNavigator->sizeHint().width()+2;
2745 } else { 2745 } else {
2746 resetval = mDateNavigator->sizeHint().height()+2; 2746 resetval = mDateNavigator->sizeHint().height()+2;
2747 } 2747 }
2748 } 2748 }
2749 if ( resetval ) { 2749 if ( resetval ) {
2750 sizes.clear(); 2750 sizes.clear();
2751 if ( KOPrefs::instance()->mVerticalScreen ) { 2751 if ( KOPrefs::instance()->mVerticalScreen ) {
2752 maxVal = QApplication::desktop()->width() -10; 2752 maxVal = QApplication::desktop()->width() -10;
2753 } else { 2753 } else {
2754 maxVal = QApplication::desktop()->height()-10; 2754 maxVal = QApplication::desktop()->height()-10;
2755 } 2755 }
2756 sizes << resetval; 2756 sizes << resetval;
2757 if ( maxVal < resetval + resetval) 2757 if ( maxVal < resetval + resetval)
2758 resetval = maxVal - resetval; 2758 resetval = maxVal - resetval;
2759 sizes << resetval; 2759 sizes << resetval;
2760 sizes << 100; 2760 sizes << 100;
2761 } 2761 }
2762 mLeftFrame->setSizes(sizes); 2762 mLeftFrame->setSizes(sizes);
2763 sizes = config->readIntListEntry("Main Splitter Frame"); 2763 sizes = config->readIntListEntry("Main Splitter Frame");
2764 resetval = 0; 2764 resetval = 0;
2765 maxVal = 0; 2765 maxVal = 0;
2766 if (sizes.count() != 2) { 2766 if (sizes.count() != 2) {
2767 if ( !KOPrefs::instance()->mVerticalScreen ) { 2767 if ( !KOPrefs::instance()->mVerticalScreen ) {
2768 resetval = mDateNavigator->sizeHint().width()+2; 2768 resetval = mDateNavigator->sizeHint().width()+2;
2769 } else { 2769 } else {
2770 resetval = mDateNavigator->sizeHint().height()+2; 2770 resetval = mDateNavigator->sizeHint().height()+2;
2771 } 2771 }
2772 } 2772 }
2773 if ( resetval ) { 2773 if ( resetval ) {
2774 sizes.clear(); 2774 sizes.clear();
2775 if ( !KOPrefs::instance()->mVerticalScreen ) { 2775 if ( !KOPrefs::instance()->mVerticalScreen ) {
2776 maxVal = QApplication::desktop()->width() -10; 2776 maxVal = QApplication::desktop()->width() -10;
2777 } else { 2777 } else {
2778 maxVal = QApplication::desktop()->height()-10; 2778 maxVal = QApplication::desktop()->height()-10;
2779 } 2779 }
2780 sizes << resetval; 2780 sizes << resetval;
2781 if ( maxVal < resetval + resetval) 2781 if ( maxVal < resetval + resetval)
2782 resetval = maxVal - resetval; 2782 resetval = maxVal - resetval;
2783 sizes << resetval; 2783 sizes << resetval;
2784 } 2784 }
2785 mMainFrame->setSizes(sizes); 2785 mMainFrame->setSizes(sizes);
2786 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2786 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2787 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2787 else if ( dateCount == 7 ) mNavigator->selectWeek();
2788 else mNavigator->selectDates( dateCount ); 2788 else mNavigator->selectDates( dateCount );
2789 // mViewManager->readSettings( config ); 2789 // mViewManager->readSettings( config );
2790 updateConfig(); 2790 updateConfig();
2791 globalFlagBlockAgenda = 2; 2791 globalFlagBlockAgenda = 2;
2792 mViewManager->readSettings( config ); 2792 mViewManager->readSettings( config );
2793 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2793 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2794} 2794}
2795 2795
2796void CalendarView::checkSuspendAlarm() 2796void CalendarView::checkSuspendAlarm()
2797{ 2797{
2798 if ( mSuspendTimer->isActive() ) { 2798 if ( mSuspendTimer->isActive() ) {
2799 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2799 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2800 } 2800 }
2801} 2801}
2802void CalendarView::writeSettings() 2802void CalendarView::writeSettings()
2803{ 2803{
2804 // kdDebug() << "CalendarView::writeSettings" << endl; 2804 // kdDebug() << "CalendarView::writeSettings" << endl;
2805 2805
2806 KConfig *config = KOGlobals::config(); 2806 KConfig *config = KOGlobals::config();
2807 2807
2808 mViewManager->writeSettings( config ); 2808 mViewManager->writeSettings( config );
2809 mTodoList->saveLayout(config,QString("Todo Layout")); 2809 mTodoList->saveLayout(config,QString("Todo Layout"));
2810 mDialogManager->writeSettings( config ); 2810 mDialogManager->writeSettings( config );
2811 //KOPrefs::instance()->usrWriteConfig(); 2811 //KOPrefs::instance()->usrWriteConfig();
2812 KOPrefs::instance()->writeConfig(); 2812 KOPrefs::instance()->writeConfig();
2813 2813
2814 writeFilterSettings(config); 2814 writeFilterSettings(config);
2815 config->setGroup( "AppRun" ); 2815 config->setGroup( "AppRun" );
2816 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2816 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2817 int days = dt.daysTo( QDate::currentDate() ); 2817 int days = dt.daysTo( QDate::currentDate() );
2818 dt = dt.addDays( days ); 2818 dt = dt.addDays( days );
2819 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2819 int secs = dt.secsTo( QDateTime::currentDateTime() );
2820 config->writeEntry( "LatestProgramStopDays", days ); 2820 config->writeEntry( "LatestProgramStopDays", days );
2821 config->writeEntry( "LatestProgramStopSecs", secs ); 2821 config->writeEntry( "LatestProgramStopSecs", secs );
2822 //qDebug("KO: Writing stop time: %d ", secs); 2822 //qDebug("KO: Writing stop time: %d ", secs);
2823 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2823 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2824 //QDateTime latest = dt.addSecs ( secs ); 2824 //QDateTime latest = dt.addSecs ( secs );
2825 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2825 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2826 config->setGroup( "Views" ); 2826 config->setGroup( "Views" );
2827 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2827 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2828 2828
2829#if 0 2829#if 0
2830 qDebug("********************* "); 2830 qDebug("********************* ");
2831 qDebug("Testcode secsto "); 2831 qDebug("Testcode secsto ");
2832 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2832 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2833 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2833 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2834 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2834 int secsto = dt_nodaylight.secsTo( dt_daylight );
2835 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2835 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2836 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2836 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2837 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2837 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2838 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2838 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2839 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2839 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2840 qDebug("********************* testcode end"); 2840 qDebug("********************* testcode end");
2841 2841
2842#endif 2842#endif
2843 2843
2844 QValueList<int> listINT = mLeftFrame->sizes(); 2844 QValueList<int> listINT = mLeftFrame->sizes();
2845 config->writeEntry("Left Splitter Frame",listINT); 2845 config->writeEntry("Left Splitter Frame",listINT);
2846 QValueList<int> listINT2 = mMainFrame->sizes(); 2846 QValueList<int> listINT2 = mMainFrame->sizes();
2847 config->writeEntry("Main Splitter Frame",listINT2); 2847 config->writeEntry("Main Splitter Frame",listINT2);
2848#ifdef DESKTOP_VERSION 2848#ifdef DESKTOP_VERSION
2849 config->setGroup("WidgetLayout"); 2849 config->setGroup("WidgetLayout");
2850 QStringList list ;//= config->readListEntry("MainLayout"); 2850 QStringList list ;//= config->readListEntry("MainLayout");
2851 int x,y,w,h; 2851 int x,y,w,h;
2852 QWidget* wid; 2852 QWidget* wid;
2853 wid = topLevelWidget(); 2853 wid = topLevelWidget();
2854 x = wid->geometry().x(); 2854 x = wid->geometry().x();
2855 y = wid->geometry().y(); 2855 y = wid->geometry().y();
2856 w = wid->width(); 2856 w = wid->width();
2857 h = wid->height(); 2857 h = wid->height();
2858 list.clear(); 2858 list.clear();
2859 list << QString::number( x ); 2859 list << QString::number( x );
2860 list << QString::number( y ); 2860 list << QString::number( y );
2861 list << QString::number( w ); 2861 list << QString::number( w );
2862 list << QString::number( h ); 2862 list << QString::number( h );
2863 config->writeEntry("MainLayout",list ); 2863 config->writeEntry("MainLayout",list );
2864 2864
2865 wid = mEventEditor; 2865 wid = mEventEditor;
2866 x = wid->geometry().x(); 2866 x = wid->geometry().x();
2867 y = wid->geometry().y(); 2867 y = wid->geometry().y();
2868 w = wid->width(); 2868 w = wid->width();
2869 h = wid->height(); 2869 h = wid->height();
2870 list.clear(); 2870 list.clear();
2871 list << QString::number( x ); 2871 list << QString::number( x );
2872 list << QString::number( y ); 2872 list << QString::number( y );
2873 list << QString::number( w ); 2873 list << QString::number( w );
2874 list << QString::number( h ); 2874 list << QString::number( h );
2875 config->writeEntry("EditEventLayout",list ); 2875 config->writeEntry("EditEventLayout",list );
2876 2876
2877 wid = mTodoEditor; 2877 wid = mTodoEditor;
2878 x = wid->geometry().x(); 2878 x = wid->geometry().x();
2879 y = wid->geometry().y(); 2879 y = wid->geometry().y();
2880 w = wid->width(); 2880 w = wid->width();
2881 h = wid->height(); 2881 h = wid->height();
2882 list.clear(); 2882 list.clear();
2883 list << QString::number( x ); 2883 list << QString::number( x );
2884 list << QString::number( y ); 2884 list << QString::number( y );
2885 list << QString::number( w ); 2885 list << QString::number( w );
2886 list << QString::number( h ); 2886 list << QString::number( h );
2887 config->writeEntry("EditTodoLayout",list ); 2887 config->writeEntry("EditTodoLayout",list );
2888 wid = getEventViewerDialog(); 2888 wid = getEventViewerDialog();
2889 x = wid->geometry().x(); 2889 x = wid->geometry().x();
2890 y = wid->geometry().y(); 2890 y = wid->geometry().y();
2891 w = wid->width(); 2891 w = wid->width();
2892 h = wid->height(); 2892 h = wid->height();
2893 list.clear(); 2893 list.clear();
2894 list << QString::number( x ); 2894 list << QString::number( x );
2895 list << QString::number( y ); 2895 list << QString::number( y );
2896 list << QString::number( w ); 2896 list << QString::number( w );
2897 list << QString::number( h ); 2897 list << QString::number( h );
2898 config->writeEntry("ViewerLayout",list ); 2898 config->writeEntry("ViewerLayout",list );
2899 wid = mDialogManager->getSearchDialog(); 2899 wid = mDialogManager->getSearchDialog();
2900 if ( wid ) { 2900 if ( wid ) {
2901 x = wid->geometry().x(); 2901 x = wid->geometry().x();
2902 y = wid->geometry().y(); 2902 y = wid->geometry().y();
2903 w = wid->width(); 2903 w = wid->width();
2904 h = wid->height(); 2904 h = wid->height();
2905 list.clear(); 2905 list.clear();
2906 list << QString::number( x ); 2906 list << QString::number( x );
2907 list << QString::number( y ); 2907 list << QString::number( y );
2908 list << QString::number( w ); 2908 list << QString::number( w );
2909 list << QString::number( h ); 2909 list << QString::number( h );
2910 config->writeEntry("SearchLayout",list ); 2910 config->writeEntry("SearchLayout",list );
2911 } 2911 }
2912#endif 2912#endif
2913 2913
2914 2914
2915 config->sync(); 2915 config->sync();
2916} 2916}
2917 2917
2918void CalendarView::readFilterSettings(KConfig *config) 2918void CalendarView::readFilterSettings(KConfig *config)
2919{ 2919{
2920 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2920 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2921 2921
2922 mFilters.clear(); 2922 mFilters.clear();
2923 2923
2924 config->setGroup("General"); 2924 config->setGroup("General");
2925 QStringList filterList = config->readListEntry("CalendarFilters"); 2925 QStringList filterList = config->readListEntry("CalendarFilters");
2926 2926
2927 QStringList::ConstIterator it = filterList.begin(); 2927 QStringList::ConstIterator it = filterList.begin();
2928 QStringList::ConstIterator end = filterList.end(); 2928 QStringList::ConstIterator end = filterList.end();
2929 while(it != end) { 2929 while(it != end) {
2930 // kdDebug() << " filter: " << (*it) << endl; 2930 // kdDebug() << " filter: " << (*it) << endl;
2931 2931
2932 CalFilter *filter; 2932 CalFilter *filter;
2933 filter = new CalFilter(*it); 2933 filter = new CalFilter(*it);
2934 config->setGroup("Filter_" + (*it).utf8()); 2934 config->setGroup("Filter_" + (*it).utf8());
2935 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2935 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2936 filter->setCriteria(config->readNumEntry("Criteria",0)); 2936 filter->setCriteria(config->readNumEntry("Criteria",0));
2937 filter->setCategoryList(config->readListEntry("CategoryList")); 2937 filter->setCategoryList(config->readListEntry("CategoryList"));
2938 mFilters.append(filter); 2938 mFilters.append(filter);
2939 2939
2940 ++it; 2940 ++it;
2941 } 2941 }
2942 2942
2943 if (mFilters.count() == 0) { 2943 if (mFilters.count() == 0) {
2944 CalFilter *filter = new CalFilter(i18n("Default")); 2944 CalFilter *filter = new CalFilter(i18n("Default"));
2945 mFilters.append(filter); 2945 mFilters.append(filter);
2946 } 2946 }
2947 mFilterView->updateFilters(); 2947 mFilterView->updateFilters();
2948 config->setGroup("FilterView"); 2948 config->setGroup("FilterView");
2949 2949
2950 mFilterView->blockSignals(true); 2950 mFilterView->blockSignals(true);
2951 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2951 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2952 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2952 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2953 mFilterView->blockSignals(false); 2953 mFilterView->blockSignals(false);
2954 // We do it manually to avoid it being done twice by the above calls 2954 // We do it manually to avoid it being done twice by the above calls
2955 updateFilter(); 2955 updateFilter();
2956} 2956}
2957 2957
2958void CalendarView::writeFilterSettings(KConfig *config) 2958void CalendarView::writeFilterSettings(KConfig *config)
2959{ 2959{
2960 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2960 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2961 2961
2962 QStringList filterList; 2962 QStringList filterList;
2963 2963
2964 CalFilter *filter = mFilters.first(); 2964 CalFilter *filter = mFilters.first();
2965 while(filter) { 2965 while(filter) {
2966 // kdDebug() << " fn: " << filter->name() << endl; 2966 // kdDebug() << " fn: " << filter->name() << endl;
2967 filterList << filter->name(); 2967 filterList << filter->name();
2968 config->setGroup("Filter_" + filter->name().utf8()); 2968 config->setGroup("Filter_" + filter->name().utf8());
2969 config->writeEntry("Criteria",filter->criteria()); 2969 config->writeEntry("Criteria",filter->criteria());
2970 config->writeEntry("CategoryList",filter->categoryList()); 2970 config->writeEntry("CategoryList",filter->categoryList());
2971 filter = mFilters.next(); 2971 filter = mFilters.next();
2972 } 2972 }
2973 config->setGroup("General"); 2973 config->setGroup("General");
2974 config->writeEntry("CalendarFilters",filterList); 2974 config->writeEntry("CalendarFilters",filterList);
2975 2975
2976 config->setGroup("FilterView"); 2976 config->setGroup("FilterView");
2977 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2977 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2978 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2978 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2979} 2979}
2980 2980
2981 2981
2982void CalendarView::goToday() 2982void CalendarView::goToday()
2983{ 2983{
2984 if ( mViewManager->currentView()->isMonthView() ) 2984 if ( mViewManager->currentView()->isMonthView() )
2985 mNavigator->selectTodayMonth(); 2985 mNavigator->selectTodayMonth();
2986 else 2986 else
2987 mNavigator->selectToday(); 2987 mNavigator->selectToday();
2988} 2988}
2989 2989
2990void CalendarView::goNext() 2990void CalendarView::goNext()
2991{ 2991{
2992 mNavigator->selectNext(); 2992 mNavigator->selectNext();
2993} 2993}
2994 2994
2995void CalendarView::goPrevious() 2995void CalendarView::goPrevious()
2996{ 2996{
2997 mNavigator->selectPrevious(); 2997 mNavigator->selectPrevious();
2998} 2998}
2999void CalendarView::goNextMonth() 2999void CalendarView::goNextMonth()
3000{ 3000{
3001 mNavigator->selectNextMonth(); 3001 mNavigator->selectNextMonth();
3002} 3002}
3003 3003
3004void CalendarView::goPreviousMonth() 3004void CalendarView::goPreviousMonth()
3005{ 3005{
3006 mNavigator->selectPreviousMonth(); 3006 mNavigator->selectPreviousMonth();
3007} 3007}
3008 3008
3009void CalendarView::updateConfig() 3009void CalendarView::updateConfig()
3010{ 3010{
3011 if ( KOPrefs::instance()->mUseAppColors ) 3011 if ( KOPrefs::instance()->mUseAppColors )
3012 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 3012 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
3013 emit configChanged(); 3013 emit configChanged();
3014 mTodoList->updateConfig(); 3014 mTodoList->updateConfig();
3015 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 3015 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
3016 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3016 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3017 // To make the "fill window" configurations work 3017 // To make the "fill window" configurations work
3018 //mViewManager->raiseCurrentView(); 3018 //mViewManager->raiseCurrentView();
3019} 3019}
3020 3020
3021 3021
3022void CalendarView::eventChanged(Event *event) 3022void CalendarView::eventChanged(Event *event)
3023{ 3023{
3024 changeEventDisplay(event,KOGlobals::EVENTEDITED); 3024 changeEventDisplay(event,KOGlobals::EVENTEDITED);
3025 //updateUnmanagedViews(); 3025 //updateUnmanagedViews();
3026} 3026}
3027 3027
3028void CalendarView::eventAdded(Event *event) 3028void CalendarView::eventAdded(Event *event)
3029{ 3029{
3030 changeEventDisplay(event,KOGlobals::EVENTADDED); 3030 changeEventDisplay(event,KOGlobals::EVENTADDED);
3031} 3031}
3032 3032
3033void CalendarView::eventToBeDeleted(Event *) 3033void CalendarView::eventToBeDeleted(Event *)
3034{ 3034{
3035 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 3035 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
3036} 3036}
3037 3037
3038void CalendarView::eventDeleted() 3038void CalendarView::eventDeleted()
3039{ 3039{
3040 changeEventDisplay(0,KOGlobals::EVENTDELETED); 3040 changeEventDisplay(0,KOGlobals::EVENTDELETED);
3041} 3041}
3042void CalendarView::changeTodoDisplay(Todo *which, int action) 3042void CalendarView::changeTodoDisplay(Todo *which, int action)
3043{ 3043{
3044 changeIncidenceDisplay((Incidence *)which, action); 3044 changeIncidenceDisplay((Incidence *)which, action);
3045 mDateNavigator->updateView(); //LR 3045 mDateNavigator->updateView(); //LR
3046 //mDialogManager->updateSearchDialog(); 3046 //mDialogManager->updateSearchDialog();
3047 3047
3048 if (which) { 3048 if (which) {
3049 mViewManager->updateWNview(); 3049 mViewManager->updateWNview();
3050 //mTodoList->updateView(); 3050 //mTodoList->updateView();
3051 } 3051 }
3052 3052
3053} 3053}
3054 3054
3055void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 3055void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
3056{ 3056{
3057 updateUnmanagedViews(); 3057 updateUnmanagedViews();
3058 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 3058 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
3059 if ( action == KOGlobals::EVENTDELETED ) { //delete 3059 if ( action == KOGlobals::EVENTDELETED ) { //delete
3060 mCalendar->checkAlarmForIncidence( 0, true ); 3060 mCalendar->checkAlarmForIncidence( 0, true );
3061 if ( mEventViewerDialog ) 3061 if ( mEventViewerDialog )
3062 mEventViewerDialog->hide(); 3062 mEventViewerDialog->hide();
3063 } 3063 }
3064 else 3064 else
3065 mCalendar->checkAlarmForIncidence( which , false ); 3065 mCalendar->checkAlarmForIncidence( which , false );
3066} 3066}
3067 3067
3068// most of the changeEventDisplays() right now just call the view's 3068// most of the changeEventDisplays() right now just call the view's
3069// total update mode, but they SHOULD be recoded to be more refresh-efficient. 3069// total update mode, but they SHOULD be recoded to be more refresh-efficient.
3070void CalendarView::changeEventDisplay(Event *which, int action) 3070void CalendarView::changeEventDisplay(Event *which, int action)
3071{ 3071{
3072 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 3072 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
3073 changeIncidenceDisplay((Incidence *)which, action); 3073 changeIncidenceDisplay((Incidence *)which, action);
3074 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3074 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3075 if ( flag_clearallviewsEventDisplay ) { 3075 if ( flag_clearallviewsEventDisplay ) {
3076 clearAllViews(); 3076 clearAllViews();
3077 flag_clearallviewsEventDisplay = false; 3077 flag_clearallviewsEventDisplay = false;
3078 } 3078 }
3079 return; 3079 return;
3080 } 3080 }
3081 flag_clearallviewsEventDisplay = true; 3081 flag_clearallviewsEventDisplay = true;
3082 mDateNavigator->updateView(); 3082 mDateNavigator->updateView();
3083 //mDialogManager->updateSearchDialog(); 3083 //mDialogManager->updateSearchDialog();
3084 if (which) { 3084 if (which) {
3085 // If there is an event view visible update the display 3085 // If there is an event view visible update the display
3086 mViewManager->currentView()->changeEventDisplay(which,action); 3086 mViewManager->currentView()->changeEventDisplay(which,action);
3087 // TODO: check, if update needed 3087 // TODO: check, if update needed
3088 // if (which->getTodoStatus()) { 3088 // if (which->getTodoStatus()) {
3089 mTodoList->updateView(); 3089 mTodoList->updateView();
3090 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) { 3090 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) {
3091 mConflictingEvent = which ; 3091 mConflictingEvent = which ;
3092 int time = 1000; 3092 int time = 1000;
3093#ifdef DESKTOP_VERSION 3093#ifdef DESKTOP_VERSION
3094 time = 500; 3094 time = 500;
3095#endif 3095#endif
3096 bool checkC = false; 3096 bool checkC = false;
3097 if ( mConflictingEvent->doesFloat() ) { 3097 if ( mConflictingEvent->doesFloat() ) {
3098 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay 3098 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay
3099 || KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3099 || KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3100 } else { 3100 } else {
3101 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay 3101 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay
3102 || KOPrefs::instance()->mCheckConflictsNonADNonAD; 3102 || KOPrefs::instance()->mCheckConflictsNonADNonAD;
3103 } 3103 }
3104 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent ) 3104 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent )
3105 checkC = false; 3105 checkC = false;
3106 if ( checkC ) 3106 if ( checkC )
3107 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3107 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
3108 } 3108 }
3109 // } 3109 // }
3110 } else { 3110 } else {
3111 mViewManager->currentView()->updateView(); 3111 mViewManager->currentView()->updateView();
3112 } 3112 }
3113} 3113}
3114void CalendarView::checkConflictForEvent() 3114void CalendarView::checkConflictForEvent()
3115{ 3115{
3116 3116
3117 if (!KOPrefs::instance()->mConfirm) 3117 if (!KOPrefs::instance()->mConfirm)
3118 return; 3118 return;
3119 if ( ! mConflictingEvent ) return; 3119 if ( ! mConflictingEvent ) return;
3120 Event * conflictingEvent = mConflictingEvent; 3120 Event * conflictingEvent = mConflictingEvent;
3121 mConflictingEvent = 0; 3121 mConflictingEvent = 0;
3122 QDateTime current = QDateTime::currentDateTime(); 3122 QDateTime current = QDateTime::currentDateTime();
3123 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3123 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3124 return; 3124 return;
3125 } 3125 }
3126 CalFilter *filterIN = 0; 3126 CalFilter *filterIN = 0;
3127 CalFilter *filterALL = 0; 3127 CalFilter *filterALL = 0;
3128 CalFilter *filter = mFilters.first(); 3128 CalFilter *filter = mFilters.first();
3129 while(filter) { 3129 while(filter) {
3130 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem) 3130 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem)
3131 filterIN = filter; 3131 filterIN = filter;
3132 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem ) 3132 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem )
3133 filterALL = filter; 3133 filterALL = filter;
3134 filter = mFilters.next(); 3134 filter = mFilters.next();
3135 } 3135 }
3136 if ( filterIN ) { 3136 if ( filterIN ) {
3137 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) { 3137 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) {
3138 return; 3138 return;
3139 } 3139 }
3140 } 3140 }
3141 QPtrList<Event> testlist = mCalendar->events(); 3141 QPtrList<Event> testlist = mCalendar->events();
3142 Event * test = testlist.first(); 3142 Event * test = testlist.first();
3143 QDateTime conflict; 3143 QDateTime conflict;
3144 QDateTime retVal; 3144 QDateTime retVal;
3145 bool found = false; 3145 bool found = false;
3146 Event * cE = 0; 3146 Event * cE = 0;
3147 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay; 3147 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay;
3148 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3148 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3149 if ( !conflictingEvent->doesFloat() ) { 3149 if ( !conflictingEvent->doesFloat() ) {
3150 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay; 3150 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay;
3151 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD; 3151 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD;
3152 } 3152 }
3153 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3153 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3154 while ( test ) { 3154 while ( test ) {
3155 qApp->processEvents(); 3155 qApp->processEvents();
3156 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad ); 3156 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad );
3157 3157
3158 if ( !skip ) { 3158 if ( !skip ) {
3159 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent ) 3159 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent )
3160 skip = true; 3160 skip = true;
3161 } 3161 }
3162 if ( !skip ) { 3162 if ( !skip ) {
3163 if ( filterALL ) { 3163 if ( filterALL ) {
3164 if ( !filterALL->filterCalendarItem( test ) ) { 3164 if ( !filterALL->filterCalendarItem( test ) ) {
3165 skip = true; 3165 skip = true;
3166 } 3166 }
3167 } 3167 }
3168 if ( !skip ) { 3168 if ( !skip ) {
3169 if ( found ) 3169 if ( found )
3170 skip = !test->matchTime( &current, &conflict ); 3170 skip = !test->matchTime( &current, &conflict );
3171 else 3171 else
3172 skip = !test->matchTime( &current, 0 ); 3172 skip = !test->matchTime( &current, 0 );
3173 if ( !skip ) { 3173 if ( !skip ) {
3174 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3174 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3175 if ( ! found ) { 3175 if ( ! found ) {
3176 conflict = retVal; 3176 conflict = retVal;
3177 cE = test; 3177 cE = test;
3178 } else { 3178 } else {
3179 if ( retVal < conflict ) { 3179 if ( retVal < conflict ) {
3180 conflict = retVal; 3180 conflict = retVal;
3181 cE = test; 3181 cE = test;
3182 } 3182 }
3183 } 3183 }
3184 found = true; 3184 found = true;
3185 } 3185 }
3186 } 3186 }
3187 } 3187 }
3188 } 3188 }
3189 test = testlist.next(); 3189 test = testlist.next();
3190 } 3190 }
3191 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3191 topLevelWidget()->setCaption( i18n("KO/Pi") );
3192 if ( found ) { 3192 if ( found ) {
3193 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 3193 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
3194 qApp->processEvents(); 3194 qApp->processEvents();
3195 int km = KMessageBox::warningContinueCancel(this,mess, 3195 int km = KMessageBox::warningContinueCancel(this,mess,
3196 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!")); 3196 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!"));
3197 if ( km != KMessageBox::Continue ) { 3197 if ( km != KMessageBox::Continue ) {
3198 return; 3198 return;
3199 } 3199 }
3200 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3200 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3201 mViewManager->showDayView(); 3201 mViewManager->showDayView();
3202 mNavigator->slotDaySelect( conflict.date() ); 3202 mNavigator->slotDaySelect( conflict.date() );
3203 int hour = conflict.time().hour(); 3203 int hour = conflict.time().hour();
3204 mViewManager->agendaView()->setStartHour( hour ); 3204 mViewManager->agendaView()->setStartHour( hour );
3205 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3205 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3206 } else 3206 } else
3207 topLevelWidget()->setCaption( i18n("No conflict found") ); 3207 topLevelWidget()->setCaption( i18n("No conflict found") );
3208 return; 3208 return;
3209 3209
3210} 3210}
3211 3211
3212void CalendarView::updateTodoViews() 3212void CalendarView::updateTodoViews()
3213{ 3213{
3214 mTodoList->updateView(); 3214 mTodoList->updateView();
3215 mViewManager->currentView()->updateView(); 3215 mViewManager->currentView()->updateView();
3216 3216
3217} 3217}
3218 3218
3219 3219
3220 3220
3221void CalendarView::clearAllViews() 3221void CalendarView::clearAllViews()
3222{ 3222{
3223 mTodoList->clearList(); 3223 mTodoList->clearList();
3224 mViewManager->clearAllViews(); 3224 mViewManager->clearAllViews();
3225 SearchDialog * sd = mDialogManager->getSearchDialog(); 3225 SearchDialog * sd = mDialogManager->getSearchDialog();
3226 if ( sd ) { 3226 if ( sd ) {
3227 KOListView* kol = sd->listview(); 3227 KOListView* kol = sd->listview();
3228 if ( kol ) 3228 if ( kol )
3229 kol->clearList(); 3229 kol->clearList();
3230 } 3230 }
3231} 3231}
3232void CalendarView::updateView() 3232void CalendarView::updateView()
3233{ 3233{
3234 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3234 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3235 if ( flag_clearallviewsupdateView ) { 3235 if ( flag_clearallviewsupdateView ) {
3236 clearAllViews(); 3236 clearAllViews();
3237 flag_clearallviewsupdateView = false; 3237 flag_clearallviewsupdateView = false;
3238 } 3238 }
3239 return; 3239 return;
3240 } 3240 }
3241 flag_clearallviewsupdateView = true; 3241 flag_clearallviewsupdateView = true;
3242 DateList tmpList = mNavigator->selectedDates(); 3242 DateList tmpList = mNavigator->selectedDates();
3243 3243
3244 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3244 if ( KOPrefs::instance()->mHideNonStartedTodos )
3245 mTodoList->updateView(); 3245 mTodoList->updateView();
3246 // We assume that the navigator only selects consecutive days. 3246 // We assume that the navigator only selects consecutive days.
3247 updateView( tmpList.first(), tmpList.last() ); 3247 updateView( tmpList.first(), tmpList.last() );
3248} 3248}
3249 3249
3250void CalendarView::updateUnmanagedViews() 3250void CalendarView::updateUnmanagedViews()
3251{ 3251{
3252 mDateNavigator->updateDayMatrix(); 3252 mDateNavigator->updateDayMatrix();
3253} 3253}
3254 3254
3255int CalendarView::msgItemDelete(const QString name) 3255int CalendarView::msgItemDelete(const QString name)
3256{ 3256{
3257 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3257 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3258 i18n("This item will be\npermanently deleted."), 3258 i18n("This item will be\npermanently deleted."),
3259 i18n("KO/Pi Confirmation"),i18n("Delete")); 3259 i18n("KO/Pi Confirmation"),i18n("Delete"));
3260} 3260}
3261 3261
3262 3262
3263void CalendarView::edit_cut() 3263void CalendarView::edit_cut()
3264{ 3264{
3265 Event *anEvent=0; 3265 Event *anEvent=0;
3266 3266
3267 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3267 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3268 3268
3269 if (mViewManager->currentView()->isEventView()) { 3269 if (mViewManager->currentView()->isEventView()) {
3270 if ( incidence && incidence->typeID() == eventID ) { 3270 if ( incidence && incidence->typeID() == eventID ) {
3271 anEvent = static_cast<Event *>(incidence); 3271 anEvent = static_cast<Event *>(incidence);
3272 } 3272 }
3273 } 3273 }
3274 3274
3275 if (!anEvent) { 3275 if (!anEvent) {
3276 KNotifyClient::beep(); 3276 KNotifyClient::beep();
3277 return; 3277 return;
3278 } 3278 }
3279 DndFactory factory( mCalendar ); 3279 DndFactory factory( mCalendar );
3280 factory.cutIncidence(anEvent); 3280 factory.cutIncidence(anEvent);
3281 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3281 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3282} 3282}
3283 3283
3284void CalendarView::edit_copy() 3284void CalendarView::edit_copy()
3285{ 3285{
3286 Event *anEvent=0; 3286 Event *anEvent=0;
3287 3287
3288 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3288 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3289 3289
3290 if (mViewManager->currentView()->isEventView()) { 3290 if (mViewManager->currentView()->isEventView()) {
3291 if ( incidence && incidence->typeID() == eventID ) { 3291 if ( incidence && incidence->typeID() == eventID ) {
3292 anEvent = static_cast<Event *>(incidence); 3292 anEvent = static_cast<Event *>(incidence);
3293 } 3293 }
3294 } 3294 }
3295 3295
3296 if (!anEvent) { 3296 if (!anEvent) {
3297 KNotifyClient::beep(); 3297 KNotifyClient::beep();
3298 return; 3298 return;
3299 } 3299 }
3300 DndFactory factory( mCalendar ); 3300 DndFactory factory( mCalendar );
3301 factory.copyIncidence(anEvent); 3301 factory.copyIncidence(anEvent);
3302} 3302}
3303 3303
3304void CalendarView::edit_paste() 3304void CalendarView::edit_paste()
3305{ 3305{
3306 QDate date = mNavigator->selectedDates().first(); 3306 QDate date = mNavigator->selectedDates().first();
3307 3307
3308 DndFactory factory( mCalendar ); 3308 DndFactory factory( mCalendar );
3309 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3309 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3310 3310
3311 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3311 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3312} 3312}
3313void CalendarView::edit_global_options() 3313void CalendarView::edit_global_options()
3314{ 3314{
3315 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3315 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3316 emit save(); 3316 emit save();
3317 emit saveStopTimer(); 3317 emit saveStopTimer();
3318 mDialogManager->showGlobalOptionsDialog(); 3318 mDialogManager->showGlobalOptionsDialog();
3319 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3319 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3320 emit saveStopTimer(); 3320 emit saveStopTimer();
3321 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 3321 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
3322 i18n("Timezone settings"),i18n("Reload"))) { 3322 i18n("Timezone settings"),i18n("Reload"))) {
3323 qDebug("KO: TZ reload cancelled "); 3323 qDebug("KO: TZ reload cancelled ");
3324 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3324 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3325 return; 3325 return;
3326 } 3326 }
3327 qDebug("KO: Timezone change "); 3327 qDebug("KO: Timezone change ");
3328 loadCalendars(); 3328 loadCalendars();
3329 setModified(true); 3329 setModified(true);
3330 } 3330 }
3331 else 3331 else
3332 qDebug("KO: No tz change "); 3332 qDebug("KO: No tz change ");
3333} 3333}
3334void CalendarView::edit_options() 3334void CalendarView::edit_options()
3335{ 3335{
3336 mDialogManager->showOptionsDialog(); 3336 mDialogManager->showOptionsDialog();
3337} 3337}
3338 3338
3339 3339
3340void CalendarView::slotSelectPickerDate( QDate d) 3340void CalendarView::slotSelectPickerDate( QDate d)
3341{ 3341{
3342 mDateFrame->hide(); 3342 mDateFrame->hide();
3343 if ( mDatePickerMode == 1 ) { 3343 if ( mDatePickerMode == 1 ) {
3344 mNavigator->slotDaySelect( d ); 3344 mNavigator->slotDaySelect( d );
3345 } else if ( mDatePickerMode == 2 ) { 3345 } else if ( mDatePickerMode == 2 ) {
3346 if ( mMoveIncidence->typeID() == todoID ) { 3346 if ( mMoveIncidence->typeID() == todoID ) {
3347 Todo * to = (Todo *) mMoveIncidence; 3347 Todo * to = (Todo *) mMoveIncidence;
3348 QTime tim; 3348 QTime tim;
3349 int len = 0; 3349 int len = 0;
3350 if ( to->hasStartDate() && to->hasDueDate() ) 3350 if ( to->hasStartDate() && to->hasDueDate() )
3351 len = to->dtStart().secsTo( to->dtDue()); 3351 len = to->dtStart().secsTo( to->dtDue());
3352 if ( to->hasDueDate() ) 3352 if ( to->hasDueDate() )
3353 tim = to->dtDue().time(); 3353 tim = to->dtDue().time();
3354 else { 3354 else {
3355 tim = QTime ( 0,0,0 ); 3355 tim = QTime ( 0,0,0 );
3356 to->setFloats( true ); 3356 to->setFloats( true );
3357 to->setHasDueDate( true ); 3357 to->setHasDueDate( true );
3358 } 3358 }
3359 QDateTime dt ( d,tim ); 3359 QDateTime dt ( d,tim );
3360 to->setDtDue( dt ); 3360 to->setDtDue( dt );
3361 3361
3362 if ( to->hasStartDate() ) { 3362 if ( to->hasStartDate() ) {
3363 if ( len>0 ) 3363 if ( len>0 )
3364 to->setDtStart(to->dtDue().addSecs( -len )); 3364 to->setDtStart(to->dtDue().addSecs( -len ));
3365 else 3365 else
3366 if (to->dtStart() > to->dtDue() ) 3366 if (to->dtStart() > to->dtDue() )
3367 to->setDtStart(to->dtDue().addDays( -3 )); 3367 to->setDtStart(to->dtDue().addDays( -3 ));
3368 } 3368 }
3369 3369
3370 todoChanged( to ); 3370 todoChanged( to );
3371 } else if ( mMoveIncidence->typeID() == eventID ) { 3371 } else if ( mMoveIncidence->typeID() == eventID ) {
3372 if ( mMoveIncidence->doesRecur() ) { 3372 if ( mMoveIncidence->doesRecur() ) {
3373#if 0 3373#if 0
3374 // PENDING implement this 3374 // PENDING implement this
3375 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3375 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3376 mCalendar()->addIncidence( newInc ); 3376 mCalendar()->addIncidence( newInc );
3377 if ( mMoveIncidence->typeID() == todoID ) 3377 if ( mMoveIncidence->typeID() == todoID )
3378 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3378 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3379 else 3379 else
3380 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3380 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3381 mMoveIncidence = newInc; 3381 mMoveIncidence = newInc;
3382 3382
3383#endif 3383#endif
3384 } 3384 }
3385 QTime tim = mMoveIncidence->dtStart().time(); 3385 QTime tim = mMoveIncidence->dtStart().time();
3386 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3386 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3387 QDateTime dt ( d,tim ); 3387 QDateTime dt ( d,tim );
3388 mMoveIncidence->setDtStart( dt ); 3388 mMoveIncidence->setDtStart( dt );
3389 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3389 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3390 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3390 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3391 } else if ( mMoveIncidence->typeID() == journalID ) { 3391 } else if ( mMoveIncidence->typeID() == journalID ) {
3392 QTime tim = mMoveIncidence->dtStart().time(); 3392 QTime tim = mMoveIncidence->dtStart().time();
3393 QDateTime dt ( d,tim ); 3393 QDateTime dt ( d,tim );
3394 mMoveIncidence->setDtStart( dt ); 3394 mMoveIncidence->setDtStart( dt );
3395 updateView(); 3395 updateView();
3396 } 3396 }
3397 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3397 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3398 } 3398 }
3399} 3399}
3400 3400
3401void CalendarView::removeCategories() 3401void CalendarView::removeCategories()
3402{ 3402{
3403 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3403 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3404 QStringList catList = KOPrefs::instance()->mCustomCategories; 3404 QStringList catList = KOPrefs::instance()->mCustomCategories;
3405 QStringList catIncList; 3405 QStringList catIncList;
3406 QStringList newCatList; 3406 QStringList newCatList;
3407 Incidence* inc = incList.first(); 3407 Incidence* inc = incList.first();
3408 uint i; 3408 uint i;
3409 while ( inc ) { 3409 while ( inc ) {
3410 newCatList.clear(); 3410 newCatList.clear();
3411 catIncList = inc->categories() ; 3411 catIncList = inc->categories() ;
3412 for( i = 0; i< catIncList.count(); ++i ) { 3412 for( i = 0; i< catIncList.count(); ++i ) {
3413 if ( catList.contains (catIncList[i])) 3413 if ( catList.contains (catIncList[i]))
3414 newCatList.append( catIncList[i] ); 3414 newCatList.append( catIncList[i] );
3415 } 3415 }
3416 newCatList.sort(); 3416 newCatList.sort();
3417 inc->setCategories( newCatList.join(",") ); 3417 inc->setCategories( newCatList.join(",") );
3418 inc = incList.next(); 3418 inc = incList.next();
3419 } 3419 }
3420} 3420}
3421 3421
3422int CalendarView::addCategories() 3422int CalendarView::addCategories()
3423{ 3423{
3424 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3424 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3425 QStringList catList = KOPrefs::instance()->mCustomCategories; 3425 QStringList catList = KOPrefs::instance()->mCustomCategories;
3426 QStringList catIncList; 3426 QStringList catIncList;
3427 Incidence* inc = incList.first(); 3427 Incidence* inc = incList.first();
3428 uint i; 3428 uint i;
3429 int count = 0; 3429 int count = 0;
3430 while ( inc ) { 3430 while ( inc ) {
3431 catIncList = inc->categories() ; 3431 catIncList = inc->categories() ;
3432 for( i = 0; i< catIncList.count(); ++i ) { 3432 for( i = 0; i< catIncList.count(); ++i ) {
3433 if ( !catList.contains (catIncList[i])) { 3433 if ( !catList.contains (catIncList[i])) {
3434 catList.append( catIncList[i] ); 3434 catList.append( catIncList[i] );
3435 //qDebug("add cat %s ", catIncList[i].latin1()); 3435 //qDebug("add cat %s ", catIncList[i].latin1());
3436 ++count; 3436 ++count;
3437 } 3437 }
3438 } 3438 }
3439 inc = incList.next(); 3439 inc = incList.next();
3440 } 3440 }
3441 catList.sort(); 3441 catList.sort();
3442 KOPrefs::instance()->mCustomCategories = catList; 3442 KOPrefs::instance()->mCustomCategories = catList;
3443 return count; 3443 return count;
3444} 3444}
3445 3445
3446void CalendarView::editCategories() 3446void CalendarView::editCategories()
3447{ 3447{
3448 qDebug("CalendarView::editCategories() "); 3448 qDebug("CalendarView::editCategories() ");
3449 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3449 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3450 ced.exec(); 3450 ced.exec();
3451} 3451}
3452void CalendarView::manageCategories() 3452void CalendarView::manageCategories()
3453{ 3453{
3454 KOCatPrefs* cp = new KOCatPrefs(); 3454 KOCatPrefs* cp = new KOCatPrefs();
3455 cp->show(); 3455 cp->show();
3456 int w =cp->sizeHint().width() ; 3456 int w =cp->sizeHint().width() ;
3457 int h = cp->sizeHint().height() ; 3457 int h = cp->sizeHint().height() ;
3458 int dw = QApplication::desktop()->width(); 3458 int dw = QApplication::desktop()->width();
3459 int dh = QApplication::desktop()->height(); 3459 int dh = QApplication::desktop()->height();
3460 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3460 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3461 if ( !cp->exec() ) { 3461 if ( !cp->exec() ) {
3462 delete cp; 3462 delete cp;
3463 return; 3463 return;
3464 } 3464 }
3465 int count = 0; 3465 int count = 0;
3466 if ( cp->addCat() ) { 3466 if ( cp->addCat() ) {
3467 count = addCategories(); 3467 count = addCategories();
3468 if ( count ) { 3468 if ( count ) {
3469 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3469 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3470 writeSettings(); 3470 writeSettings();
3471 } else 3471 } else
3472 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3472 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3473 } else { 3473 } else {
3474 removeCategories(); 3474 removeCategories();
3475 updateView(); 3475 updateView();
3476 } 3476 }
3477 delete cp; 3477 delete cp;
3478} 3478}
3479 3479
3480void CalendarView::beamIncidence(Incidence * Inc) 3480void CalendarView::beamIncidence(Incidence * Inc)
3481{ 3481{
3482 QPtrList<Incidence> delSel ; 3482 QPtrList<Incidence> delSel ;
3483 delSel.append(Inc); 3483 delSel.append(Inc);
3484 beamIncidenceList( delSel ); 3484 beamIncidenceList( delSel );
3485} 3485}
3486void CalendarView::beamCalendar() 3486void CalendarView::beamCalendar()
3487{ 3487{
3488 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3488 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3489 //qDebug("beamCalendar() "); 3489 //qDebug("beamCalendar() ");
3490 beamIncidenceList( delSel ); 3490 beamIncidenceList( delSel );
3491} 3491}
3492void CalendarView::beamFilteredCalendar() 3492void CalendarView::beamFilteredCalendar()
3493{ 3493{
3494 QPtrList<Incidence> delSel = mCalendar->incidences(); 3494 QPtrList<Incidence> delSel = mCalendar->incidences();
3495 //qDebug("beamFilteredCalendar() "); 3495 //qDebug("beamFilteredCalendar() ");
3496 beamIncidenceList( delSel ); 3496 beamIncidenceList( delSel );
3497} 3497}
3498void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3498void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3499{ 3499{
3500 3500
3501 KOBeamPrefs beamDialog; 3501 KOBeamPrefs beamDialog;
3502 if ( beamDialog.exec () == QDialog::Rejected ) 3502 if ( beamDialog.exec () == QDialog::Rejected )
3503 return; 3503 return;
3504#ifdef DESKTOP_VERSION 3504#ifdef DESKTOP_VERSION
3505 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3505 QString fn = locateLocal( "tmp", "kopibeamfile" );
3506#else 3506#else
3507 QString fn = "/tmp/kopibeamfile"; 3507 QString fn = "/tmp/kopibeamfile";
3508#endif 3508#endif
3509 QString mes; 3509 QString mes;
3510 bool createbup = true; 3510 bool createbup = true;
3511 if ( createbup ) { 3511 if ( createbup ) {
3512 QString description = "\n"; 3512 QString description = "\n";
3513 CalendarLocal* cal = new CalendarLocal(); 3513 CalendarLocal* cal = new CalendarLocal();
3514 if ( beamDialog.beamLocal() ) 3514 if ( beamDialog.beamLocal() )
3515 cal->setLocalTime(); 3515 cal->setLocalTime();
3516 else 3516 else
3517 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3517 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3518 Incidence *incidence = delSel.first(); 3518 Incidence *incidence = delSel.first();
3519 bool addText = false; 3519 bool addText = false;
3520 if ( delSel.count() < 10 ) 3520 if ( delSel.count() < 10 )
3521 addText = true; 3521 addText = true;
3522 else { 3522 else {
3523 description.sprintf(i18n(" %d items?"),delSel.count() ); 3523 description.sprintf(i18n(" %d items?"),delSel.count() );
3524 } 3524 }
3525 while ( incidence ) { 3525 while ( incidence ) {
3526 Incidence *in = incidence->clone(); 3526 Incidence *in = incidence->clone();
3527 if ( ! in->summary().isEmpty() ) { 3527 if ( ! in->summary().isEmpty() ) {
3528 in->setDescription(""); 3528 in->setDescription("");
3529 } else { 3529 } else {
3530 in->setSummary( in->description().left(20)); 3530 in->setSummary( in->description().left(20));
3531 in->setDescription(""); 3531 in->setDescription("");
3532 } 3532 }
3533 if ( addText ) 3533 if ( addText )
3534 description += in->summary() + "\n"; 3534 description += in->summary() + "\n";
3535 cal->addIncidence( in ); 3535 cal->addIncidence( in );
3536 incidence = delSel.next(); 3536 incidence = delSel.next();
3537 } 3537 }
3538 if ( beamDialog.beamVcal() ) { 3538 if ( beamDialog.beamVcal() ) {
3539 fn += ".vcs"; 3539 fn += ".vcs";
3540 FileStorage storage( cal, fn, new VCalFormat ); 3540 FileStorage storage( cal, fn, new VCalFormat );
3541 storage.save(); 3541 storage.save();
3542 } else { 3542 } else {
3543 fn += ".ics"; 3543 fn += ".ics";
3544 FileStorage storage( cal, fn, new ICalFormat( ) ); 3544 FileStorage storage( cal, fn, new ICalFormat( ) );
3545 storage.save(); 3545 storage.save();
3546 } 3546 }
3547 delete cal; 3547 delete cal;
3548 mes = i18n("KO/Pi: Ready for beaming"); 3548 mes = i18n("KO/Pi: Ready for beaming");
3549 topLevelWidget()->setCaption(mes); 3549 topLevelWidget()->setCaption(mes);
3550 KApplication::convert2latin1( fn ); 3550 KApplication::convert2latin1( fn );
3551#ifndef DESKTOP_VERSION 3551#ifndef DESKTOP_VERSION
3552 Ir *ir = new Ir( this ); 3552 Ir *ir = new Ir( this );
3553 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3553 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3554 ir->send( fn, description, "text/x-vCalendar" ); 3554 ir->send( fn, description, "text/x-vCalendar" );
3555#endif 3555#endif
3556 } 3556 }
3557} 3557}
3558 3558
3559#ifndef DESKTOP_VERSION 3559#ifndef DESKTOP_VERSION
3560void CalendarView::beamDone( Ir *ir ) 3560void CalendarView::beamDone( Ir *ir )
3561{ 3561{
3562 delete ir; 3562 delete ir;
3563 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3563 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3564 topLevelWidget()->raise(); 3564 topLevelWidget()->raise();
3565} 3565}
3566#else 3566#else
3567void CalendarView::beamDone( Ir *){;} 3567void CalendarView::beamDone( Ir *){;}
3568#endif 3568#endif
3569void CalendarView::moveIncidence(Incidence * inc ) 3569void CalendarView::moveIncidence(Incidence * inc )
3570{ 3570{
3571 if ( !inc ) return; 3571 if ( !inc ) return;
3572 showDatePickerPopup(); 3572 showDatePickerPopup();
3573 mDatePickerMode = 2; 3573 mDatePickerMode = 2;
3574 mMoveIncidence = inc ; 3574 mMoveIncidence = inc ;
3575 QDate da; 3575 QDate da;
3576 if ( mMoveIncidence->typeID() == todoID ) { 3576 if ( mMoveIncidence->typeID() == todoID ) {
3577 Todo * to = (Todo *) mMoveIncidence; 3577 Todo * to = (Todo *) mMoveIncidence;
3578 if ( to->hasDueDate() ) 3578 if ( to->hasDueDate() )
3579 da = to->dtDue().date(); 3579 da = to->dtDue().date();
3580 else 3580 else
3581 da = QDate::currentDate(); 3581 da = QDate::currentDate();
3582 } else { 3582 } else {
3583 da = mMoveIncidence->dtStart().date(); 3583 da = mMoveIncidence->dtStart().date();
3584 } 3584 }
3585 //PENDING set date for recurring incidence to date of recurrence 3585 //PENDING set date for recurring incidence to date of recurrence
3586 //mMoveIncidenceOldDate; 3586 //mMoveIncidenceOldDate;
3587 mDatePicker->setDate( da ); 3587 mDatePicker->setDate( da );
3588} 3588}
3589void CalendarView::showDatePickerPopup() 3589void CalendarView::showDatePickerPopup()
3590{ 3590{
3591 if ( mDateFrame->isVisible() ) 3591 if ( mDateFrame->isVisible() )
3592 mDateFrame->hide(); 3592 mDateFrame->hide();
3593 else { 3593 else {
3594 int offX = 0, offY = 0; 3594 int offX = 0, offY = 0;
3595#ifdef DESKTOP_VERSION 3595#ifdef DESKTOP_VERSION
3596 int w =mDatePicker->sizeHint().width() ; 3596 int w =mDatePicker->sizeHint().width() ;
3597 int h = mDatePicker->sizeHint().height() ; 3597 int h = mDatePicker->sizeHint().height() ;
3598 int dw = topLevelWidget()->width(); 3598 int dw = topLevelWidget()->width();
3599 int dh = topLevelWidget()->height(); 3599 int dh = topLevelWidget()->height();
3600 offX = topLevelWidget()->x(); 3600 offX = topLevelWidget()->x();
3601 offY = topLevelWidget()->y(); 3601 offY = topLevelWidget()->y();
3602#else 3602#else
3603 int w =mDatePicker->sizeHint().width() ; 3603 int w =mDatePicker->sizeHint().width() ;
3604 int h = mDatePicker->sizeHint().height() ; 3604 int h = mDatePicker->sizeHint().height() ;
3605 int dw = QApplication::desktop()->width(); 3605 int dw = QApplication::desktop()->width();
3606 int dh = QApplication::desktop()->height(); 3606 int dh = QApplication::desktop()->height();
3607#endif 3607#endif
3608 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3608 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3609 mDateFrame->show(); 3609 mDateFrame->show();
3610 } 3610 }
3611} 3611}
3612void CalendarView::showDatePicker( ) 3612void CalendarView::showDatePicker( )
3613{ 3613{
3614 showDatePickerPopup(); 3614 showDatePickerPopup();
3615 mDatePickerMode = 1; 3615 mDatePickerMode = 1;
3616 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3616 mDatePicker->setDate( mNavigator->selectedDates().first() );
3617} 3617}
3618 3618
3619void CalendarView::showEventEditor() 3619void CalendarView::showEventEditor()
3620{ 3620{
3621#ifdef DESKTOP_VERSION 3621#ifdef DESKTOP_VERSION
3622 int x,y,w,h; 3622 int x,y,w,h;
3623 x = mEventEditor->geometry().x(); 3623 x = mEventEditor->geometry().x();
3624 y = mEventEditor->geometry().y(); 3624 y = mEventEditor->geometry().y();
3625 w = mEventEditor->width(); 3625 w = mEventEditor->width();
3626 h = mEventEditor->height(); 3626 h = mEventEditor->height();
3627 mEventEditor->show(); 3627 mEventEditor->show();
3628 mEventEditor->setGeometry(x,y,w,h); 3628 mEventEditor->setGeometry(x,y,w,h);
3629#else 3629#else
3630 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3630 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3631 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3631 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3632 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3632 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3633 qApp->processEvents(); 3633 qApp->processEvents();
3634 delete mEventEditor; 3634 delete mEventEditor;
3635 mEventEditor = mDialogManager->getEventEditor(); 3635 mEventEditor = mDialogManager->getEventEditor();
3636 topLevelWidget()->setCaption( i18n("") ); 3636 topLevelWidget()->setCaption( i18n("") );
3637 } 3637 }
3638 mEventEditor->showMaximized(); 3638 mEventEditor->showMaximized();
3639#endif 3639#endif
3640} 3640}
3641void CalendarView::showTodoEditor() 3641void CalendarView::showTodoEditor()
3642{ 3642{
3643#ifdef DESKTOP_VERSION 3643#ifdef DESKTOP_VERSION
3644 int x,y,w,h; 3644 int x,y,w,h;
3645 x = mTodoEditor->geometry().x(); 3645 x = mTodoEditor->geometry().x();
3646 y = mTodoEditor->geometry().y(); 3646 y = mTodoEditor->geometry().y();
3647 w = mTodoEditor->width(); 3647 w = mTodoEditor->width();
3648 h = mTodoEditor->height(); 3648 h = mTodoEditor->height();
3649 mTodoEditor->show(); 3649 mTodoEditor->show();
3650 mTodoEditor->setGeometry(x,y,w,h); 3650 mTodoEditor->setGeometry(x,y,w,h);
3651#else 3651#else
3652 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3652 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3653 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3653 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3654 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3654 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3655 qApp->processEvents(); 3655 qApp->processEvents();
3656 delete mTodoEditor; 3656 delete mTodoEditor;
3657 mTodoEditor = mDialogManager->getTodoEditor(); 3657 mTodoEditor = mDialogManager->getTodoEditor();
3658 topLevelWidget()->setCaption( i18n("") ); 3658 topLevelWidget()->setCaption( i18n("") );
3659 } 3659 }
3660 mTodoEditor->showMaximized(); 3660 mTodoEditor->showMaximized();
3661#endif 3661#endif
3662} 3662}
3663 3663
3664void CalendarView::cloneIncidence() 3664void CalendarView::cloneIncidence()
3665{ 3665{
3666 Incidence *incidence = currentSelection(); 3666 Incidence *incidence = currentSelection();
3667 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3667 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3668 if ( incidence ) { 3668 if ( incidence ) {
3669 cloneIncidence(incidence); 3669 cloneIncidence(incidence);
3670 } 3670 }
3671} 3671}
3672void CalendarView::moveIncidence() 3672void CalendarView::moveIncidence()
3673{ 3673{
3674 Incidence *incidence = currentSelection(); 3674 Incidence *incidence = currentSelection();
3675 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3675 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3676 if ( incidence ) { 3676 if ( incidence ) {
3677 moveIncidence(incidence); 3677 moveIncidence(incidence);
3678 } 3678 }
3679} 3679}
3680void CalendarView::beamIncidence() 3680void CalendarView::beamIncidence()
3681{ 3681{
3682 Incidence *incidence = currentSelection(); 3682 Incidence *incidence = currentSelection();
3683 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3683 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3684 if ( incidence ) { 3684 if ( incidence ) {
3685 beamIncidence(incidence); 3685 beamIncidence(incidence);
3686 } 3686 }
3687} 3687}
3688void CalendarView::toggleCancelIncidence() 3688void CalendarView::toggleCancelIncidence()
3689{ 3689{
3690 Incidence *incidence = currentSelection(); 3690 Incidence *incidence = currentSelection();
3691 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3691 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3692 if ( incidence ) { 3692 if ( incidence ) {
3693 cancelIncidence(incidence); 3693 cancelIncidence(incidence);
3694 } 3694 }
3695} 3695}
3696 3696
3697 3697
3698void CalendarView::cancelIncidence(Incidence * inc ) 3698void CalendarView::cancelIncidence(Incidence * inc )
3699{ 3699{
3700 inc->setCancelled( ! inc->cancelled() ); 3700 inc->setCancelled( ! inc->cancelled() );
3701 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3701 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3702 updateView(); 3702 updateView();
3703} 3703}
3704void CalendarView::cloneIncidence(Incidence * orgInc ) 3704void CalendarView::cloneIncidence(Incidence * orgInc )
3705{ 3705{
3706 Incidence * newInc = orgInc->clone(); 3706 Incidence * newInc = orgInc->clone();
3707 newInc->recreate(); 3707 newInc->recreate();
3708 3708
3709 if ( newInc->typeID() == todoID ) { 3709 if ( newInc->typeID() == todoID ) {
3710 Todo* t = (Todo*) newInc; 3710 Todo* t = (Todo*) newInc;
3711 bool cloneSub = false; 3711 bool cloneSub = false;
3712 if ( orgInc->relations().count() ) { 3712 if ( orgInc->relations().count() ) {
3713 int result = KMessageBox::warningYesNoCancel(this, 3713 int result = KMessageBox::warningYesNoCancel(this,
3714 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), 3714 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ),
3715 i18n("Todo has subtodos"), 3715 i18n("Todo has subtodos"),
3716 i18n("Yes"), 3716 i18n("Yes"),
3717 i18n("No")); 3717 i18n("No"));
3718 3718
3719 if ( result == KMessageBox::Cancel ) { 3719 if ( result == KMessageBox::Cancel ) {
3720 delete t; 3720 delete t;
3721 return; 3721 return;
3722 } 3722 }
3723 if (result == KMessageBox::Yes) cloneSub = true; 3723 if (result == KMessageBox::Yes) cloneSub = true;
3724 } 3724 }
3725 showTodoEditor(); 3725 showTodoEditor();
3726 mTodoEditor->editTodo( t ); 3726 mTodoEditor->editTodo( t );
3727 if ( mTodoEditor->exec() ) { 3727 if ( mTodoEditor->exec() ) {
3728 if ( cloneSub ) { 3728 if ( cloneSub ) {
3729 orgInc->cloneRelations( t ); 3729 orgInc->cloneRelations( t );
3730 mCalendar->addIncidenceBranch( t ); 3730 mCalendar->addIncidenceBranch( t );
3731 updateView(); 3731 updateView();
3732 3732
3733 } else { 3733 } else {
3734 mCalendar->addTodo( t ); 3734 mCalendar->addTodo( t );
3735 updateView(); 3735 updateView();
3736 } 3736 }
3737 } else { 3737 } else {
3738 delete t; 3738 delete t;
3739 } 3739 }
3740 } 3740 }
3741 else if ( newInc->typeID() == eventID ) { 3741 else if ( newInc->typeID() == eventID ) {
3742 Event* e = (Event*) newInc; 3742 Event* e = (Event*) newInc;
3743 showEventEditor(); 3743 showEventEditor();
3744 mEventEditor->editEvent( e ); 3744 mEventEditor->editEvent( e );
3745 if ( mEventEditor->exec() ) { 3745 if ( mEventEditor->exec() ) {
3746 mCalendar->addEvent( e ); 3746 mCalendar->addEvent( e );
3747 updateView(); 3747 updateView();
3748 } else { 3748 } else {
3749 delete e; 3749 delete e;
3750 } 3750 }
3751 } else if ( newInc->typeID() == journalID ) { 3751 } else if ( newInc->typeID() == journalID ) {
3752 mCalendar->addJournal( (Journal*) newInc ); 3752 mCalendar->addJournal( (Journal*) newInc );
3753 editJournal( (Journal*) newInc ); 3753 editJournal( (Journal*) newInc );
3754 } 3754 }
3755 setActiveWindow(); 3755 setActiveWindow();
3756} 3756}
3757 3757
3758void CalendarView::newEvent() 3758void CalendarView::newEvent()
3759{ 3759{
3760 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3760 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3761 KOAgendaView *aView = mViewManager->agendaView(); 3761 KOAgendaView *aView = mViewManager->agendaView();
3762 if (aView) { 3762 if (aView) {
3763 if (aView->selectionStart().isValid()) { 3763 if (aView->selectionStart().isValid()) {
3764 if (aView->selectedIsAllDay()) { 3764 if (aView->selectedIsAllDay()) {
3765 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3765 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3766 } else { 3766 } else {
3767 newEvent(aView->selectionStart(),aView->selectionEnd()); 3767 newEvent(aView->selectionStart(),aView->selectionEnd());
3768 } 3768 }
3769 return; 3769 return;
3770 } 3770 }
3771 } 3771 }
3772 3772
3773 QDate date = mNavigator->selectedDates().first(); 3773 QDate date = mNavigator->selectedDates().first();
3774#if 0 3774#if 0
3775 QDateTime current = QDateTime::currentDateTime(); 3775 QDateTime current = QDateTime::currentDateTime();
3776 if ( date <= current.date() ) { 3776 if ( date <= current.date() ) {
3777 int hour = current.time().hour() +1; 3777 int hour = current.time().hour() +1;
3778 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3778 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3779 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3779 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3780 } else 3780 } else
3781#endif 3781#endif
3782 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3782 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3783 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3783 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3784 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3784 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3785} 3785}
3786 3786
3787void CalendarView::newEvent(QDateTime fh) 3787void CalendarView::newEvent(QDateTime fh)
3788{ 3788{
3789 newEvent(fh, 3789 newEvent(fh,
3790 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3790 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3791} 3791}
3792 3792
3793void CalendarView::newEvent(QDate dt) 3793void CalendarView::newEvent(QDate dt)
3794{ 3794{
3795 newEvent(QDateTime(dt, QTime(0,0,0)), 3795 newEvent(QDateTime(dt, QTime(0,0,0)),
3796 QDateTime(dt, QTime(0,0,0)), true); 3796 QDateTime(dt, QTime(0,0,0)), true);
3797} 3797}
3798void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3798void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3799{ 3799{
3800 newEvent(fromHint, toHint, false); 3800 newEvent(fromHint, toHint, false);
3801} 3801}
3802void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3802void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3803{ 3803{
3804 3804
3805 showEventEditor(); 3805 showEventEditor();
3806 mEventEditor->newEvent(fromHint,toHint,allDay); 3806 mEventEditor->newEvent(fromHint,toHint,allDay);
3807 if ( mFilterView->filtersEnabled() ) { 3807 if ( mFilterView->filtersEnabled() ) {
3808 CalFilter *filter = mFilterView->selectedFilter(); 3808 CalFilter *filter = mFilterView->selectedFilter();
3809 if (filter && filter->showCategories()) { 3809 if (filter && filter->showCategories()) {
3810 mEventEditor->setCategories(filter->categoryList().join(",") ); 3810 mEventEditor->setCategories(filter->categoryList().join(",") );
3811 } 3811 }
3812 if ( filter ) 3812 if ( filter )
3813 mEventEditor->setSecrecy( filter->getSecrecy() ); 3813 mEventEditor->setSecrecy( filter->getSecrecy() );
3814 } 3814 }
3815 mEventEditor->exec(); 3815 mEventEditor->exec();
3816 setActiveWindow(); 3816 setActiveWindow();
3817} 3817}
3818void CalendarView::todoAdded(Todo * t) 3818void CalendarView::todoAdded(Todo * t)
3819{ 3819{
3820 3820
3821 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3821 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3822 updateTodoViews(); 3822 updateTodoViews();
3823} 3823}
3824void CalendarView::todoChanged(Todo * t) 3824void CalendarView::todoChanged(Todo * t)
3825{ 3825{
3826 emit todoModified( t, 4 ); 3826 emit todoModified( t, 4 );
3827 // updateTodoViews(); 3827 // updateTodoViews();
3828} 3828}
3829void CalendarView::todoToBeDeleted(Todo *) 3829void CalendarView::todoToBeDeleted(Todo *)
3830{ 3830{
3831 //qDebug("todoToBeDeleted(Todo *) "); 3831 //qDebug("todoToBeDeleted(Todo *) ");
3832 updateTodoViews(); 3832 updateTodoViews();
3833} 3833}
3834void CalendarView::todoDeleted() 3834void CalendarView::todoDeleted()
3835{ 3835{
3836 //qDebug(" todoDeleted()"); 3836 //qDebug(" todoDeleted()");
3837 updateTodoViews(); 3837 updateTodoViews();
3838} 3838}
3839 3839
3840 3840
3841void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3841void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3842{ 3842{
3843 showTodoEditor(); 3843 showTodoEditor();
3844 mTodoEditor->newTodo(dt,0,allday); 3844 mTodoEditor->newTodo(dt,0,allday);
3845 if ( mFilterView->filtersEnabled() ) { 3845 if ( mFilterView->filtersEnabled() ) {
3846 CalFilter *filter = mFilterView->selectedFilter(); 3846 CalFilter *filter = mFilterView->selectedFilter();
3847 if (filter && filter->showCategories()) { 3847 if (filter && filter->showCategories()) {
3848 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3848 mTodoEditor->setCategories(filter->categoryList().join(",") );
3849 } 3849 }
3850 if ( filter ) 3850 if ( filter )
3851 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3851 mTodoEditor->setSecrecy( filter->getSecrecy() );
3852 } 3852 }
3853 mTodoEditor->exec(); 3853 mTodoEditor->exec();
3854 setActiveWindow(); 3854 setActiveWindow();
3855} 3855}
3856 3856
3857void CalendarView::newTodo() 3857void CalendarView::newTodo()
3858{ 3858{
3859 newTodoDateTime( QDateTime(),true ); 3859 newTodoDateTime( QDateTime(),true );
3860} 3860}
3861 3861
3862void CalendarView::newSubTodo() 3862void CalendarView::newSubTodo()
3863{ 3863{
3864 Todo *todo = selectedTodo(); 3864 Todo *todo = selectedTodo();
3865 if ( todo ) newSubTodo( todo ); 3865 if ( todo ) newSubTodo( todo );
3866} 3866}
3867 3867
3868void CalendarView::newSubTodo(Todo *parentEvent) 3868void CalendarView::newSubTodo(Todo *parentEvent)
3869{ 3869{
3870 3870
3871 showTodoEditor(); 3871 showTodoEditor();
3872 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3872 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3873 mTodoEditor->exec(); 3873 mTodoEditor->exec();
3874 setActiveWindow(); 3874 setActiveWindow();
3875} 3875}
3876 3876
3877void CalendarView::newFloatingEvent() 3877void CalendarView::newFloatingEvent()
3878{ 3878{
3879 DateList tmpList = mNavigator->selectedDates(); 3879 DateList tmpList = mNavigator->selectedDates();
3880 QDate date = tmpList.first(); 3880 QDate date = tmpList.first();
3881 3881
3882 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3882 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3883 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3883 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3884} 3884}
3885 3885
3886 3886
3887void CalendarView::editEvent( Event *event ) 3887void CalendarView::editEvent( Event *event )
3888{ 3888{
3889 3889
3890 if ( !event ) return; 3890 if ( !event ) return;
3891 if ( event->isReadOnly() ) { 3891 if ( event->isReadOnly() ) {
3892 showEvent( event ); 3892 showEvent( event );
3893 return; 3893 return;
3894 } 3894 }
3895 showEventEditor(); 3895 showEventEditor();
3896 mEventEditor->editEvent( event , mFlagEditDescription); 3896 mEventEditor->editEvent( event , mFlagEditDescription);
3897 mEventEditor->exec(); 3897 mEventEditor->exec();
3898 setActiveWindow(); 3898 setActiveWindow();
3899 3899
3900} 3900}
3901void CalendarView::editJournal( Journal *jour ) 3901void CalendarView::editJournal( Journal *jour )
3902{ 3902{
3903 if ( !jour ) return; 3903 if ( !jour ) return;
3904 mDialogManager->hideSearchDialog(); 3904 mDialogManager->hideSearchDialog();
3905 mViewManager->showJournalView(); 3905 mViewManager->showJournalView();
3906 mNavigator->slotDaySelect( jour->dtStart().date() ); 3906 mNavigator->slotDaySelect( jour->dtStart().date() );
3907} 3907}
3908void CalendarView::editTodo( Todo *todo ) 3908void CalendarView::editTodo( Todo *todo )
3909{ 3909{
3910 if ( !todo ) return; 3910 if ( !todo ) return;
3911 3911
3912 if ( todo->isReadOnly() ) { 3912 if ( todo->isReadOnly() ) {
3913 showTodo( todo ); 3913 showTodo( todo );
3914 return; 3914 return;
3915 } 3915 }
3916 showTodoEditor(); 3916 showTodoEditor();
3917 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3917 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3918 mTodoEditor->exec(); 3918 mTodoEditor->exec();
3919 setActiveWindow(); 3919 setActiveWindow();
3920 3920
3921} 3921}
3922 3922
3923KOEventViewerDialog* CalendarView::getEventViewerDialog() 3923KOEventViewerDialog* CalendarView::getEventViewerDialog()
3924{ 3924{
3925 if ( !mEventViewerDialog ) { 3925 if ( !mEventViewerDialog ) {
3926 mEventViewerDialog = new KOEventViewerDialog(0); 3926 mEventViewerDialog = new KOEventViewerDialog(0);
3927 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3927 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3928 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3928 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3929 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3929 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3930 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3930 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3931 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3931 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3932 viewManager(), SLOT( showAgendaView( bool ) ) ); 3932 viewManager(), SLOT( showAgendaView( bool ) ) );
3933 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3933 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3934 this, SLOT( slotViewerClosed() ) ); 3934 this, SLOT( slotViewerClosed() ) );
3935 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3935 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3936 this, SLOT( todoChanged(Todo *) ) ); 3936 this, SLOT( todoChanged(Todo *) ) );
3937 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3937 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3938 mEventViewerDialog->resize( 640, 480 ); 3938 mEventViewerDialog->resize( 640, 480 );
3939 3939
3940 } 3940 }
3941 return mEventViewerDialog; 3941 return mEventViewerDialog;
3942} 3942}
3943void CalendarView::showEvent(Event *event) 3943void CalendarView::showEvent(Event *event)
3944{ 3944{
3945 getEventViewerDialog()->setEvent(event); 3945 getEventViewerDialog()->setEvent(event);
3946 getEventViewerDialog()->showMe(); 3946 getEventViewerDialog()->showMe();
3947} 3947}
3948 3948
3949void CalendarView::showTodo(Todo *event) 3949void CalendarView::showTodo(Todo *event)
3950{ 3950{
3951 getEventViewerDialog()->setTodo(event); 3951 getEventViewerDialog()->setTodo(event);
3952 getEventViewerDialog()->showMe(); 3952 getEventViewerDialog()->showMe();
3953} 3953}
3954void CalendarView::showJournal( Journal *jour ) 3954void CalendarView::showJournal( Journal *jour )
3955{ 3955{
3956 getEventViewerDialog()->setJournal(jour); 3956 getEventViewerDialog()->setJournal(jour);
3957 getEventViewerDialog()->showMe(); 3957 getEventViewerDialog()->showMe();
3958 3958
3959} 3959}
3960// void CalendarView::todoModified (Todo *event, int changed) 3960// void CalendarView::todoModified (Todo *event, int changed)
3961// { 3961// {
3962// // if (mDialogList.find (event) != mDialogList.end ()) { 3962// // if (mDialogList.find (event) != mDialogList.end ()) {
3963// // kdDebug() << "Todo modified and open" << endl; 3963// // kdDebug() << "Todo modified and open" << endl;
3964// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3964// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3965// // temp->modified (changed); 3965// // temp->modified (changed);
3966 3966
3967// // } 3967// // }
3968 3968
3969// mViewManager->updateView(); 3969// mViewManager->updateView();
3970// } 3970// }
3971 3971
3972void CalendarView::appointment_show() 3972void CalendarView::appointment_show()
3973{ 3973{
3974 Event *anEvent = 0; 3974 Event *anEvent = 0;
3975 3975
3976 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3976 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3977 3977
3978 if (mViewManager->currentView()->isEventView()) { 3978 if (mViewManager->currentView()->isEventView()) {
3979 if ( incidence && incidence->typeID() == eventID ) { 3979 if ( incidence && incidence->typeID() == eventID ) {
3980 anEvent = static_cast<Event *>(incidence); 3980 anEvent = static_cast<Event *>(incidence);
3981 } 3981 }
3982 } 3982 }
3983 3983
3984 if (!anEvent) { 3984 if (!anEvent) {
3985 KNotifyClient::beep(); 3985 KNotifyClient::beep();
3986 return; 3986 return;
3987 } 3987 }
3988 3988
3989 showEvent(anEvent); 3989 showEvent(anEvent);
3990} 3990}
3991 3991
3992void CalendarView::appointment_edit() 3992void CalendarView::appointment_edit()
3993{ 3993{
3994 Event *anEvent = 0; 3994 Event *anEvent = 0;
3995 3995
3996 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3996 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3997 3997
3998 if (mViewManager->currentView()->isEventView()) { 3998 if (mViewManager->currentView()->isEventView()) {
3999 if ( incidence && incidence->typeID() == eventID ) { 3999 if ( incidence && incidence->typeID() == eventID ) {
4000 anEvent = static_cast<Event *>(incidence); 4000 anEvent = static_cast<Event *>(incidence);
4001 } 4001 }
4002 } 4002 }
4003 4003
4004 if (!anEvent) { 4004 if (!anEvent) {
4005 KNotifyClient::beep(); 4005 KNotifyClient::beep();
4006 return; 4006 return;
4007 } 4007 }
4008 4008
4009 editEvent(anEvent); 4009 editEvent(anEvent);
4010} 4010}
4011 4011
4012void CalendarView::appointment_delete() 4012void CalendarView::appointment_delete()
4013{ 4013{
4014 Event *anEvent = 0; 4014 Event *anEvent = 0;
4015 4015
4016 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 4016 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
4017 4017
4018 if (mViewManager->currentView()->isEventView()) { 4018 if (mViewManager->currentView()->isEventView()) {
4019 if ( incidence && incidence->typeID() == eventID ) { 4019 if ( incidence && incidence->typeID() == eventID ) {
4020 anEvent = static_cast<Event *>(incidence); 4020 anEvent = static_cast<Event *>(incidence);
4021 } 4021 }
4022 } 4022 }
4023 4023
4024 if (!anEvent) { 4024 if (!anEvent) {
4025 KNotifyClient::beep(); 4025 KNotifyClient::beep();
4026 return; 4026 return;
4027 } 4027 }
4028 4028
4029 deleteEvent(anEvent); 4029 deleteEvent(anEvent);
4030} 4030}
4031 4031
4032void CalendarView::todo_resub( Todo * parent, Todo * sub ) 4032void CalendarView::todo_resub( Todo * parent, Todo * sub )
4033{ 4033{
4034 if (!sub) return; 4034 if (!sub) return;
4035 if ( sub->relatedTo() == parent ) 4035 if ( sub->relatedTo() == parent )
4036 return; 4036 return;
4037 sub->setRelatedTo(parent); 4037 sub->setRelatedTo(parent);
4038 sub->updated(); 4038 sub->updated();
4039 setModified(true); 4039 setModified(true);
4040 updateView(); 4040 updateView();
4041} 4041}
4042void CalendarView::todo_unsub(Todo *anTodo ) 4042void CalendarView::todo_unsub(Todo *anTodo )
4043{ 4043{
4044 todo_resub( 0, anTodo ); 4044 todo_resub( 0, anTodo );
4045} 4045}
4046 4046
4047void CalendarView::deleteTodo(Todo *todo) 4047void CalendarView::deleteTodo(Todo *todo)
4048{ 4048{
4049 if (!todo) { 4049 if (!todo) {
4050 KNotifyClient::beep(); 4050 KNotifyClient::beep();
4051 return; 4051 return;
4052 } 4052 }
4053 if (KOPrefs::instance()->mConfirm) { 4053 if (KOPrefs::instance()->mConfirm) {
4054 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 4054 QString text = KGlobal::formatMessage ( todo->summary(),0 );
4055 if (!todo->relations().isEmpty()) { 4055 if (!todo->relations().isEmpty()) {
4056 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 4056 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
4057 4057
4058 } 4058 }
4059 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 4059 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
4060 case KMessageBox::Continue: // OK 4060 case KMessageBox::Continue: // OK
4061 bool deleteT = false; 4061 bool deleteT = false;
4062 if (!todo->relations().isEmpty()) { 4062 if (!todo->relations().isEmpty()) {
4063 deleteT = removeCompletedSubTodos( todo ); 4063 deleteT = removeCompletedSubTodos( todo );
4064 } 4064 }
4065 // deleteT == true: todo already deleted in removeCompletedSubTodos 4065 // deleteT == true: todo already deleted in removeCompletedSubTodos
4066 if ( !deleteT ) { 4066 if ( !deleteT ) {
4067 checkExternalId( todo ); 4067 checkExternalId( todo );
4068 calendar()->deleteTodo(todo); 4068 calendar()->deleteTodo(todo);
4069 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4069 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4070 } 4070 }
4071 updateView(); 4071 updateView();
4072 break; 4072 break;
4073 } // switch 4073 } // switch
4074 } else { 4074 } else {
4075 checkExternalId( todo ); 4075 checkExternalId( todo );
4076 mCalendar->deleteTodo(todo); 4076 mCalendar->deleteTodo(todo);
4077 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4077 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4078 updateView(); 4078 updateView();
4079 } 4079 }
4080 4080
4081 emit updateSearchDialog(); 4081 emit updateSearchDialog();
4082} 4082}
4083void CalendarView::deleteJournal(Journal *jour) 4083void CalendarView::deleteJournal(Journal *jour)
4084{ 4084{
4085 if (!jour) { 4085 if (!jour) {
4086 KNotifyClient::beep(); 4086 KNotifyClient::beep();
4087 return; 4087 return;
4088 } 4088 }
4089 if (KOPrefs::instance()->mConfirm) { 4089 if (KOPrefs::instance()->mConfirm) {
4090 4090
4091 QString des; 4091 QString des;
4092 if ( !jour->summary().isEmpty() ) { 4092 if ( !jour->summary().isEmpty() ) {
4093 des = jour->summary(); 4093 des = jour->summary();
4094 } else { 4094 } else {
4095 des = jour->description().left(30); 4095 des = jour->description().left(30);
4096 des = des.simplifyWhiteSpace (); 4096 des = des.simplifyWhiteSpace ();
4097 des.replace (QRegExp ("\\n"),"" ); 4097 des.replace (QRegExp ("\\n"),"" );
4098 des.replace (QRegExp ("\\r"),"" ); 4098 des.replace (QRegExp ("\\r"),"" );
4099 } 4099 }
4100 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 4100 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
4101 case KMessageBox::Continue: // OK 4101 case KMessageBox::Continue: // OK
4102 calendar()->deleteJournal(jour); 4102 calendar()->deleteJournal(jour);
4103 updateView(); 4103 updateView();
4104 break; 4104 break;
4105 } // switch 4105 } // switch
4106 } else { 4106 } else {
4107 calendar()->deleteJournal(jour);; 4107 calendar()->deleteJournal(jour);;
4108 updateView(); 4108 updateView();
4109 } 4109 }
4110 emit updateSearchDialog(); 4110 emit updateSearchDialog();
4111} 4111}
4112 4112
4113void CalendarView::deleteEvent(Event *anEvent) 4113void CalendarView::deleteEvent(Event *anEvent)
4114{ 4114{
4115 if (!anEvent) { 4115 if (!anEvent) {
4116 KNotifyClient::beep(); 4116 KNotifyClient::beep();
4117 return; 4117 return;
4118 } 4118 }
4119 4119
4120 if (anEvent->doesRecur()) { 4120 if (anEvent->doesRecur()) {
4121 QDate itemDate = mViewManager->currentSelectionDate(); 4121 QDate itemDate = mViewManager->currentSelectionDate();
4122 int km; 4122 int km;
4123 if (!itemDate.isValid()) { 4123 if (!itemDate.isValid()) {
4124 //kdDebug() << "Date Not Valid" << endl; 4124 //kdDebug() << "Date Not Valid" << endl;
4125 if (KOPrefs::instance()->mConfirm) { 4125 if (KOPrefs::instance()->mConfirm) {
4126 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4126 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4127 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 4127 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
4128 i18n("KO/Pi Confirmation"),i18n("Delete All")); 4128 i18n("KO/Pi Confirmation"),i18n("Delete All"));
4129 if ( km == KMessageBox::Continue ) 4129 if ( km == KMessageBox::Continue )
4130 km = KMessageBox::No; // No = all below 4130 km = KMessageBox::No; // No = all below
4131 } else 4131 } else
4132 km = KMessageBox::No; 4132 km = KMessageBox::No;
4133 } else { 4133 } else {
4134 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4134 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4135 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 4135 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
4136 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 4136 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
4137 i18n("KO/Pi Confirmation"),i18n("Current"), 4137 i18n("KO/Pi Confirmation"),i18n("Current"),
4138 i18n("All")); 4138 i18n("All"));
4139 } 4139 }
4140 switch(km) { 4140 switch(km) {
4141 4141
4142 case KMessageBox::No: // Continue // all 4142 case KMessageBox::No: // Continue // all
4143 //qDebug("KMessageBox::No "); 4143 //qDebug("KMessageBox::No ");
4144 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4144 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4145 schedule(Scheduler::Cancel,anEvent); 4145 schedule(Scheduler::Cancel,anEvent);
4146 4146
4147 checkExternalId( anEvent); 4147 checkExternalId( anEvent);
4148 mCalendar->deleteEvent(anEvent); 4148 mCalendar->deleteEvent(anEvent);
4149 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4149 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
4150 break; 4150 break;
4151 4151
4152 // Disabled because it does not work 4152 // Disabled because it does not work
4153 //#if 0 4153 //#if 0
4154 case KMessageBox::Yes: // just this one 4154 case KMessageBox::Yes: // just this one
4155 //QDate qd = mNavigator->selectedDates().first(); 4155 //QDate qd = mNavigator->selectedDates().first();
4156 //if (!qd.isValid()) { 4156 //if (!qd.isValid()) {
4157 // kdDebug() << "no date selected, or invalid date" << endl; 4157 // kdDebug() << "no date selected, or invalid date" << endl;
4158 // KNotifyClient::beep(); 4158 // KNotifyClient::beep();
4159 // return; 4159 // return;
4160 //} 4160 //}
4161 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4161 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4162 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4162 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4163 anEvent->addExDate(itemDate); 4163 anEvent->addExDate(itemDate);
4164 int duration = anEvent->recurrence()->duration(); 4164 int duration = anEvent->recurrence()->duration();
4165 if ( duration > 0 ) { 4165 if ( duration > 0 ) {
4166 anEvent->recurrence()->setDuration( duration - 1 ); 4166 anEvent->recurrence()->setDuration( duration - 1 );
4167 } 4167 }
4168 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4168 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4169 } 4169 }
4170 break; 4170 break;
4171 //#endif 4171 //#endif
4172 } // switch 4172 } // switch
4173 } else { 4173 } else {
4174 if (KOPrefs::instance()->mConfirm) { 4174 if (KOPrefs::instance()->mConfirm) {
4175 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4175 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4176 i18n("\nAre you sure you want\nto delete this event?"), 4176 i18n("\nAre you sure you want\nto delete this event?"),
4177 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4177 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4178 case KMessageBox::Continue: // OK 4178 case KMessageBox::Continue: // OK
4179 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4179 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4180 schedule(Scheduler::Cancel,anEvent); 4180 schedule(Scheduler::Cancel,anEvent);
4181 checkExternalId( anEvent); 4181 checkExternalId( anEvent);
4182 mCalendar->deleteEvent(anEvent); 4182 mCalendar->deleteEvent(anEvent);
4183 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4183 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4184 break; 4184 break;
4185 } // switch 4185 } // switch
4186 } else { 4186 } else {
4187 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4187 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4188 schedule(Scheduler::Cancel,anEvent); 4188 schedule(Scheduler::Cancel,anEvent);
4189 checkExternalId( anEvent); 4189 checkExternalId( anEvent);
4190 mCalendar->deleteEvent(anEvent); 4190 mCalendar->deleteEvent(anEvent);
4191 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4191 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4192 } 4192 }
4193 } // if-else 4193 } // if-else
4194 emit updateSearchDialog(); 4194 emit updateSearchDialog();
4195} 4195}
4196 4196
4197bool CalendarView::deleteEvent(const QString &uid) 4197bool CalendarView::deleteEvent(const QString &uid)
4198{ 4198{
4199 Event *ev = mCalendar->event(uid); 4199 Event *ev = mCalendar->event(uid);
4200 if (ev) { 4200 if (ev) {
4201 deleteEvent(ev); 4201 deleteEvent(ev);
4202 return true; 4202 return true;
4203 } else { 4203 } else {
4204 return false; 4204 return false;
4205 } 4205 }
4206} 4206}
4207 4207
4208/*****************************************************************************/ 4208/*****************************************************************************/
4209 4209
4210void CalendarView::action_mail() 4210void CalendarView::action_mail()
4211{ 4211{
4212#ifndef KORG_NOMAIL 4212#ifndef KORG_NOMAIL
4213 KOMailClient mailClient; 4213 KOMailClient mailClient;
4214 4214
4215 Incidence *incidence = currentSelection(); 4215 Incidence *incidence = currentSelection();
4216 4216
4217 if (!incidence) { 4217 if (!incidence) {
4218 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4218 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4219 return; 4219 return;
4220 } 4220 }
4221 if(incidence->attendeeCount() == 0 ) { 4221 if(incidence->attendeeCount() == 0 ) {
4222 KMessageBox::sorry(this, 4222 KMessageBox::sorry(this,
4223 i18n("Can't generate mail:\nNo attendees defined.\n")); 4223 i18n("Can't generate mail:\nNo attendees defined.\n"));
4224 return; 4224 return;
4225 } 4225 }
4226 4226
4227 CalendarLocal cal_tmp; 4227 CalendarLocal cal_tmp;
4228 Event *event = 0; 4228 Event *event = 0;
4229 Event *ev = 0; 4229 Event *ev = 0;
4230 if ( incidence && incidence->typeID() == eventID ) { 4230 if ( incidence && incidence->typeID() == eventID ) {
4231 event = static_cast<Event *>(incidence); 4231 event = static_cast<Event *>(incidence);
4232 ev = new Event(*event); 4232 ev = new Event(*event);
4233 cal_tmp.addEvent(ev); 4233 cal_tmp.addEvent(ev);
4234 } 4234 }
4235 ICalFormat mForm(); 4235 ICalFormat mForm();
4236 QString attachment = mForm.toString( &cal_tmp ); 4236 QString attachment = mForm.toString( &cal_tmp );
4237 if (ev) delete(ev); 4237 if (ev) delete(ev);
4238 4238
4239 mailClient.mailAttendees(currentSelection(), attachment); 4239 mailClient.mailAttendees(currentSelection(), attachment);
4240 4240
4241#endif 4241#endif
4242 4242
4243#if 0 4243#if 0
4244 Event *anEvent = 0; 4244 Event *anEvent = 0;
4245 if (mViewManager->currentView()->isEventView()) { 4245 if (mViewManager->currentView()->isEventView()) {
4246 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4246 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
4247 } 4247 }
4248 4248
4249 if (!anEvent) { 4249 if (!anEvent) {
4250 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4250 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4251 return; 4251 return;
4252 } 4252 }
4253 if(anEvent->attendeeCount() == 0 ) { 4253 if(anEvent->attendeeCount() == 0 ) {
4254 KMessageBox::sorry(this, 4254 KMessageBox::sorry(this,
4255 i18n("Can't generate mail:\nNo attendees defined.\n")); 4255 i18n("Can't generate mail:\nNo attendees defined.\n"));
4256 return; 4256 return;
4257 } 4257 }
4258 4258
4259 mailobject.emailEvent(anEvent); 4259 mailobject.emailEvent(anEvent);
4260#endif 4260#endif
4261} 4261}
4262 4262
4263 4263
4264void CalendarView::schedule_publish(Incidence *incidence) 4264void CalendarView::schedule_publish(Incidence *incidence)
4265{ 4265{
4266 Event *event = 0; 4266 Event *event = 0;
4267 Todo *todo = 0; 4267 Todo *todo = 0;
4268 4268
4269 if (incidence == 0) { 4269 if (incidence == 0) {
4270 incidence = mViewManager->currentView()->selectedIncidences().first(); 4270 incidence = mViewManager->currentView()->selectedIncidences().first();
4271 if (incidence == 0) { 4271 if (incidence == 0) {
4272 incidence = mTodoList->selectedIncidences().first(); 4272 incidence = mTodoList->selectedIncidences().first();
4273 } 4273 }
4274 } 4274 }
4275 if ( incidence && incidence->typeID() == eventID ) { 4275 if ( incidence && incidence->typeID() == eventID ) {
4276 event = static_cast<Event *>(incidence); 4276 event = static_cast<Event *>(incidence);
4277 } else { 4277 } else {
4278 if ( incidence && incidence->typeID() == todoID ) { 4278 if ( incidence && incidence->typeID() == todoID ) {
4279 todo = static_cast<Todo *>(incidence); 4279 todo = static_cast<Todo *>(incidence);
4280 } 4280 }
4281 } 4281 }
4282 4282
4283 if (!event && !todo) { 4283 if (!event && !todo) {
4284 KMessageBox::sorry(this,i18n("No event selected.")); 4284 KMessageBox::sorry(this,i18n("No event selected."));
4285 return; 4285 return;
4286 } 4286 }
4287 4287
4288 PublishDialog *publishdlg = new PublishDialog(); 4288 PublishDialog *publishdlg = new PublishDialog();
4289 if (incidence->attendeeCount()>0) { 4289 if (incidence->attendeeCount()>0) {
4290 QPtrList<Attendee> attendees = incidence->attendees(); 4290 QPtrList<Attendee> attendees = incidence->attendees();
4291 attendees.first(); 4291 attendees.first();
4292 while ( attendees.current()!=0 ) { 4292 while ( attendees.current()!=0 ) {
4293 publishdlg->addAttendee(attendees.current()); 4293 publishdlg->addAttendee(attendees.current());
4294 attendees.next(); 4294 attendees.next();
4295 } 4295 }
4296 } 4296 }
4297 bool send = true; 4297 bool send = true;
4298 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 4298 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
4299 if ( publishdlg->exec() != QDialog::Accepted ) 4299 if ( publishdlg->exec() != QDialog::Accepted )
4300 send = false; 4300 send = false;
4301 } 4301 }
4302 if ( send ) { 4302 if ( send ) {
4303 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4303 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4304 if ( event ) { 4304 if ( event ) {
4305 Event *ev = new Event(*event); 4305 Event *ev = new Event(*event);
4306 ev->registerObserver(0); 4306 ev->registerObserver(0);
4307 ev->clearAttendees(); 4307 ev->clearAttendees();
4308 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4308 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4309 delete(ev); 4309 delete(ev);
4310 } 4310 }
4311 } else { 4311 } else {
4312 if ( todo ) { 4312 if ( todo ) {
4313 Todo *ev = new Todo(*todo); 4313 Todo *ev = new Todo(*todo);
4314 ev->registerObserver(0); 4314 ev->registerObserver(0);
4315 ev->clearAttendees(); 4315 ev->clearAttendees();
4316 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4316 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4317 delete(ev); 4317 delete(ev);
4318 } 4318 }
4319 } 4319 }
4320 } 4320 }
4321 } 4321 }
4322 delete publishdlg; 4322 delete publishdlg;
4323} 4323}
4324 4324
4325void CalendarView::schedule_request(Incidence *incidence) 4325void CalendarView::schedule_request(Incidence *incidence)
4326{ 4326{
4327 schedule(Scheduler::Request,incidence); 4327 schedule(Scheduler::Request,incidence);
4328} 4328}
4329 4329
4330void CalendarView::schedule_refresh(Incidence *incidence) 4330void CalendarView::schedule_refresh(Incidence *incidence)
4331{ 4331{
4332 schedule(Scheduler::Refresh,incidence); 4332 schedule(Scheduler::Refresh,incidence);
4333} 4333}
4334 4334
4335void CalendarView::schedule_cancel(Incidence *incidence) 4335void CalendarView::schedule_cancel(Incidence *incidence)
4336{ 4336{
4337 schedule(Scheduler::Cancel,incidence); 4337 schedule(Scheduler::Cancel,incidence);
4338} 4338}
4339 4339
4340void CalendarView::schedule_add(Incidence *incidence) 4340void CalendarView::schedule_add(Incidence *incidence)
4341{ 4341{
4342 schedule(Scheduler::Add,incidence); 4342 schedule(Scheduler::Add,incidence);
4343} 4343}
4344 4344
4345void CalendarView::schedule_reply(Incidence *incidence) 4345void CalendarView::schedule_reply(Incidence *incidence)
4346{ 4346{
4347 schedule(Scheduler::Reply,incidence); 4347 schedule(Scheduler::Reply,incidence);
4348} 4348}
4349 4349
4350void CalendarView::schedule_counter(Incidence *incidence) 4350void CalendarView::schedule_counter(Incidence *incidence)
4351{ 4351{
4352 schedule(Scheduler::Counter,incidence); 4352 schedule(Scheduler::Counter,incidence);
4353} 4353}
4354 4354
4355void CalendarView::schedule_declinecounter(Incidence *incidence) 4355void CalendarView::schedule_declinecounter(Incidence *incidence)
4356{ 4356{
4357 schedule(Scheduler::Declinecounter,incidence); 4357 schedule(Scheduler::Declinecounter,incidence);
4358} 4358}
4359 4359
4360void CalendarView::schedule_publish_freebusy(int daysToPublish) 4360void CalendarView::schedule_publish_freebusy(int daysToPublish)
4361{ 4361{
4362 QDateTime start = QDateTime::currentDateTime(); 4362 QDateTime start = QDateTime::currentDateTime();
4363 QDateTime end = start.addDays(daysToPublish); 4363 QDateTime end = start.addDays(daysToPublish);
4364 4364
4365 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 4365 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
4366 freebusy->setOrganizer(KOPrefs::instance()->email()); 4366 freebusy->setOrganizer(KOPrefs::instance()->email());
4367 4367
4368 4368
4369 PublishDialog *publishdlg = new PublishDialog(); 4369 PublishDialog *publishdlg = new PublishDialog();
4370 if ( publishdlg->exec() == QDialog::Accepted ) { 4370 if ( publishdlg->exec() == QDialog::Accepted ) {
4371 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4371 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4372 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 4372 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
4373 delete(freebusy); 4373 delete(freebusy);
4374 } 4374 }
4375 } 4375 }
4376 delete publishdlg; 4376 delete publishdlg;
4377} 4377}
4378 4378
4379void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 4379void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
4380{ 4380{
4381 Event *event = 0; 4381 Event *event = 0;
4382 Todo *todo = 0; 4382 Todo *todo = 0;
4383 4383
4384 if (incidence == 0) { 4384 if (incidence == 0) {
4385 incidence = mViewManager->currentView()->selectedIncidences().first(); 4385 incidence = mViewManager->currentView()->selectedIncidences().first();
4386 if (incidence == 0) { 4386 if (incidence == 0) {
4387 incidence = mTodoList->selectedIncidences().first(); 4387 incidence = mTodoList->selectedIncidences().first();
4388 } 4388 }
4389 } 4389 }
4390 if ( incidence && incidence->typeID() == eventID ) { 4390 if ( incidence && incidence->typeID() == eventID ) {
4391 event = static_cast<Event *>(incidence); 4391 event = static_cast<Event *>(incidence);
4392 } 4392 }
4393 if ( incidence && incidence->typeID() == todoID ) { 4393 if ( incidence && incidence->typeID() == todoID ) {
4394 todo = static_cast<Todo *>(incidence); 4394 todo = static_cast<Todo *>(incidence);
4395 } 4395 }
4396 4396
4397 if (!event && !todo) { 4397 if (!event && !todo) {
4398 KMessageBox::sorry(this,i18n("No event selected.")); 4398 KMessageBox::sorry(this,i18n("No event selected."));
4399 return; 4399 return;
4400 } 4400 }
4401 4401
4402 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 4402 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
4403 KMessageBox::sorry(this,i18n("The event has no attendees.")); 4403 KMessageBox::sorry(this,i18n("The event has no attendees."));
4404 return; 4404 return;
4405 } 4405 }
4406 4406
4407 Event *ev = 0; 4407 Event *ev = 0;
4408 if (event) ev = new Event(*event); 4408 if (event) ev = new Event(*event);
4409 Todo *to = 0; 4409 Todo *to = 0;
4410 if (todo) to = new Todo(*todo); 4410 if (todo) to = new Todo(*todo);
4411 4411
4412 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 4412 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
4413 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 4413 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
4414 if (!me) { 4414 if (!me) {
4415 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4415 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4416 return; 4416 return;
4417 } 4417 }
4418 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4418 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4419 StatusDialog *statdlg = new StatusDialog(this); 4419 StatusDialog *statdlg = new StatusDialog(this);
4420 if (!statdlg->exec()==QDialog::Accepted) return; 4420 if (!statdlg->exec()==QDialog::Accepted) return;
4421 me->setStatus( statdlg->status() ); 4421 me->setStatus( statdlg->status() );
4422 delete(statdlg); 4422 delete(statdlg);
4423 } 4423 }
4424 Attendee *menew = new Attendee(*me); 4424 Attendee *menew = new Attendee(*me);
4425 if (ev) { 4425 if (ev) {
4426 ev->clearAttendees(); 4426 ev->clearAttendees();
4427 ev->addAttendee(menew,false); 4427 ev->addAttendee(menew,false);
4428 } else { 4428 } else {
4429 if (to) { 4429 if (to) {
4430 todo->clearAttendees(); 4430 todo->clearAttendees();
4431 todo->addAttendee(menew,false); 4431 todo->addAttendee(menew,false);
4432 } 4432 }
4433 } 4433 }
4434 } 4434 }
4435 4435
4436 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4436 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4437 if (ev) { 4437 if (ev) {
4438 if ( !dlg->addMessage(ev,method) ) delete(ev); 4438 if ( !dlg->addMessage(ev,method) ) delete(ev);
4439 } else { 4439 } else {
4440 if (to) { 4440 if (to) {
4441 if ( !dlg->addMessage(to,method) ) delete(to); 4441 if ( !dlg->addMessage(to,method) ) delete(to);
4442 } 4442 }
4443 } 4443 }
4444} 4444}
4445 4445
4446void CalendarView::openAddressbook() 4446void CalendarView::openAddressbook()
4447{ 4447{
4448 KRun::runCommand("kaddressbook"); 4448 KRun::runCommand("kaddressbook");
4449} 4449}
4450 4450
4451void CalendarView::setModified(bool modified) 4451void CalendarView::setModified(bool modified)
4452{ 4452{
4453 //qDebug("CalendarView::setModified %d ", modified); 4453 //qDebug("CalendarView::setModified %d ", modified);
4454 if ( modified ) 4454 if ( modified )
4455 emit signalmodified(); 4455 emit signalmodified();
4456 mModified = modified; 4456 mModified = modified;
4457 if ( mModified ) 4457 if ( mModified )
4458 emit modifiedChanged(mModified); 4458 emit modifiedChanged(mModified);
4459 4459
4460} 4460}
4461 4461
4462bool CalendarView::isReadOnly() 4462bool CalendarView::isReadOnly()
4463{ 4463{
4464 return mReadOnly; 4464 return mReadOnly;
4465} 4465}
4466 4466
4467void CalendarView::setReadOnly(bool readOnly) 4467void CalendarView::setReadOnly(bool readOnly)
4468{ 4468{
4469 if (mReadOnly != readOnly) { 4469 if (mReadOnly != readOnly) {
4470 mReadOnly = readOnly; 4470 mReadOnly = readOnly;
4471 emit readOnlyChanged(mReadOnly); 4471 emit readOnlyChanged(mReadOnly);
4472 } 4472 }
4473} 4473}
4474 4474
4475bool CalendarView::isModified() 4475bool CalendarView::isModified()
4476{ 4476{
4477 return mModified; 4477 return mModified;
4478} 4478}
4479void CalendarView::slotprintSelInc() 4479void CalendarView::slotprintSelInc()
4480{ 4480{
4481 if ( currentSelection() == 0 ) { 4481 if ( currentSelection() == 0 ) {
4482 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4482 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4483 return; 4483 return;
4484 } 4484 }
4485 showIncidence(); 4485 showIncidence();
4486 getEventViewerDialog()->print(); 4486 getEventViewerDialog()->print();
4487 4487
4488} 4488}
4489void CalendarView::printSetup() 4489void CalendarView::printSetup()
4490{ 4490{
4491#ifndef KORG_NOPRINTER 4491#ifndef KORG_NOPRINTER
4492 createPrinter(); 4492 createPrinter();
4493 4493
4494 mCalPrinter->setupPrinter(); 4494 mCalPrinter->setupPrinter();
4495#endif 4495#endif
4496} 4496}
4497 4497
4498void CalendarView::print() 4498void CalendarView::print()
4499{ 4499{
4500#ifndef KORG_NOPRINTER 4500#ifndef KORG_NOPRINTER
4501 createPrinter(); 4501 createPrinter();
4502 4502
4503 DateList tmpDateList = mNavigator->selectedDates(); 4503 DateList tmpDateList = mNavigator->selectedDates();
4504 mCalPrinter->print(CalPrinter::Month, 4504 mCalPrinter->print(CalPrinter::Month,
4505 tmpDateList.first(), tmpDateList.last()); 4505 tmpDateList.first(), tmpDateList.last());
4506#endif 4506#endif
4507} 4507}
4508 4508
4509void CalendarView::printPreview() 4509void CalendarView::printPreview()
4510{ 4510{
4511#ifndef KORG_NOPRINTER 4511#ifndef KORG_NOPRINTER
4512 kdDebug() << "CalendarView::printPreview()" << endl; 4512 kdDebug() << "CalendarView::printPreview()" << endl;
4513 4513
4514 createPrinter(); 4514 createPrinter();
4515 4515
4516 DateList tmpDateList = mNavigator->selectedDates(); 4516 DateList tmpDateList = mNavigator->selectedDates();
4517 4517
4518 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4518 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4519 tmpDateList.last()); 4519 tmpDateList.last());
4520#endif 4520#endif
4521} 4521}
4522bool CalendarView::exportICalendar( QString filename ) 4522bool CalendarView::exportICalendar( QString filename )
4523{ 4523{
4524 // Force correct extension 4524 // Force correct extension
4525 if (filename.right(4) != ".ics") filename += ".ics"; 4525 if (filename.right(4) != ".ics") filename += ".ics";
4526 4526
4527 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4527 FileStorage storage( mCalendar, filename, new ICalFormat() );
4528 return storage.save(); 4528 return storage.save();
4529} 4529}
4530 4530
4531bool CalendarView::exportICalendar() 4531bool CalendarView::exportICalendar()
4532{ 4532{
4533 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) ); 4533 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) );
4534} 4534}
4535 4535
4536bool CalendarView::exportVCalendar( QString filename ) 4536bool CalendarView::exportVCalendar( QString filename )
4537{ 4537{
4538 if (mCalendar->journals().count() > 0) { 4538 if (mCalendar->journals().count() > 0) {
4539 int result = KMessageBox::warningContinueCancel(this, 4539 int result = KMessageBox::warningContinueCancel(this,
4540 i18n("The journal entries can not be\nexported to a vCalendar file."), 4540 i18n("The journal entries can not be\nexported to a vCalendar file."),
4541 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4541 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4542 true); 4542 true);
4543 if (result != KMessageBox::Continue) return false; 4543 if (result != KMessageBox::Continue) return false;
4544 } 4544 }
4545 4545
4546 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4546 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4547 4547
4548 // Force correct extension 4548 // Force correct extension
4549 if (filename.right(4) != ".vcs") filename += ".vcs"; 4549 if (filename.right(4) != ".vcs") filename += ".vcs";
4550 4550
4551 FileStorage storage( mCalendar, filename, new VCalFormat ); 4551 FileStorage storage( mCalendar, filename, new VCalFormat );
4552 return storage.save(); 4552 return storage.save();
4553 4553
4554} 4554}
4555 4555
4556void CalendarView::eventUpdated(Incidence *) 4556void CalendarView::eventUpdated(Incidence *)
4557{ 4557{
4558 setModified(); 4558 setModified();
4559 // Don't call updateView here. The code, which has caused the update of the 4559 // Don't call updateView here. The code, which has caused the update of the
4560 // event is responsible for updating the view. 4560 // event is responsible for updating the view.
4561 // updateView(); 4561 // updateView();
4562} 4562}
4563 4563
4564void CalendarView::adaptNavigationUnits() 4564void CalendarView::adaptNavigationUnits()
4565{ 4565{
4566 if (mViewManager->currentView()->isEventView()) { 4566 if (mViewManager->currentView()->isEventView()) {
4567 int days = mViewManager->currentView()->currentDateCount(); 4567 int days = mViewManager->currentView()->currentDateCount();
4568 if (days == 1) { 4568 if (days == 1) {
4569 emit changeNavStringPrev(i18n("&Previous Day")); 4569 emit changeNavStringPrev(i18n("&Previous Day"));
4570 emit changeNavStringNext(i18n("&Next Day")); 4570 emit changeNavStringNext(i18n("&Next Day"));
4571 } else { 4571 } else {
4572 emit changeNavStringPrev(i18n("&Previous Week")); 4572 emit changeNavStringPrev(i18n("&Previous Week"));
4573 emit changeNavStringNext(i18n("&Next Week")); 4573 emit changeNavStringNext(i18n("&Next Week"));
4574 } 4574 }
4575 } 4575 }
4576} 4576}
4577 4577
4578void CalendarView::processMainViewSelection( Incidence *incidence ) 4578void CalendarView::processMainViewSelection( Incidence *incidence )
4579{ 4579{
4580 if ( incidence ) mTodoList->clearSelection(); 4580 if ( incidence ) mTodoList->clearSelection();
4581 processIncidenceSelection( incidence ); 4581 processIncidenceSelection( incidence );
4582} 4582}
4583 4583
4584void CalendarView::processTodoListSelection( Incidence *incidence ) 4584void CalendarView::processTodoListSelection( Incidence *incidence )
4585{ 4585{
4586 if ( incidence && mViewManager->currentView() ) { 4586 if ( incidence && mViewManager->currentView() ) {
4587 mViewManager->currentView()->clearSelection(); 4587 mViewManager->currentView()->clearSelection();
4588 } 4588 }
4589 processIncidenceSelection( incidence ); 4589 processIncidenceSelection( incidence );
4590} 4590}
4591 4591
4592void CalendarView::processIncidenceSelection( Incidence *incidence ) 4592void CalendarView::processIncidenceSelection( Incidence *incidence )
4593{ 4593{
4594 emit incidenceSelected( incidence ); 4594 emit incidenceSelected( incidence );
4595 if ( incidence == mSelectedIncidence ) return; 4595 if ( incidence == mSelectedIncidence ) return;
4596 mSelectedIncidence = incidence; 4596 mSelectedIncidence = incidence;
4597 4597
4598 if ( incidence && incidence->typeID() == eventID ) { 4598 if ( incidence && incidence->typeID() == eventID ) {
4599 Event *event = static_cast<Event *>( incidence ); 4599 Event *event = static_cast<Event *>( incidence );
4600 if ( event->organizer() == KOPrefs::instance()->email() ) { 4600 if ( event->organizer() == KOPrefs::instance()->email() ) {
4601 emit organizerEventsSelected( true ); 4601 emit organizerEventsSelected( true );
4602 } else { 4602 } else {
4603 emit organizerEventsSelected(false); 4603 emit organizerEventsSelected(false);
4604 } 4604 }
4605 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4605 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4606 KOPrefs::instance()->email() ) ) { 4606 KOPrefs::instance()->email() ) ) {
4607 emit groupEventsSelected( true ); 4607 emit groupEventsSelected( true );
4608 } else { 4608 } else {
4609 emit groupEventsSelected(false); 4609 emit groupEventsSelected(false);
4610 } 4610 }
4611 return; 4611 return;
4612 } else { 4612 } else {
4613 if ( incidence && incidence->typeID() == todoID ) { 4613 if ( incidence && incidence->typeID() == todoID ) {
4614 emit todoSelected( true ); 4614 emit todoSelected( true );
4615 Todo *event = static_cast<Todo *>( incidence ); 4615 Todo *event = static_cast<Todo *>( incidence );
4616 if ( event->organizer() == KOPrefs::instance()->email() ) { 4616 if ( event->organizer() == KOPrefs::instance()->email() ) {
4617 emit organizerEventsSelected( true ); 4617 emit organizerEventsSelected( true );
4618 } else { 4618 } else {
4619 emit organizerEventsSelected(false); 4619 emit organizerEventsSelected(false);
4620 } 4620 }
4621 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4621 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4622 KOPrefs::instance()->email() ) ) { 4622 KOPrefs::instance()->email() ) ) {
4623 emit groupEventsSelected( true ); 4623 emit groupEventsSelected( true );
4624 } else { 4624 } else {
4625 emit groupEventsSelected(false); 4625 emit groupEventsSelected(false);
4626 } 4626 }
4627 return; 4627 return;
4628 } else { 4628 } else {
4629 emit todoSelected( false ); 4629 emit todoSelected( false );
4630 emit organizerEventsSelected(false); 4630 emit organizerEventsSelected(false);
4631 emit groupEventsSelected(false); 4631 emit groupEventsSelected(false);
4632 } 4632 }
4633 return; 4633 return;
4634 } 4634 }
4635 4635
4636 /* if ( incidence && incidence->typeID() == todoID ) { 4636 /* if ( incidence && incidence->typeID() == todoID ) {
4637 emit todoSelected( true ); 4637 emit todoSelected( true );
4638 } else { 4638 } else {
4639 emit todoSelected( false ); 4639 emit todoSelected( false );
4640 }*/ 4640 }*/
4641} 4641}
4642 4642
4643 4643
4644void CalendarView::checkClipboard() 4644void CalendarView::checkClipboard()
4645{ 4645{
4646#ifndef KORG_NODND 4646#ifndef KORG_NODND
4647 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4647 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4648 emit pasteEnabled(true); 4648 emit pasteEnabled(true);
4649 } else { 4649 } else {
4650 emit pasteEnabled(false); 4650 emit pasteEnabled(false);
4651 } 4651 }
4652#endif 4652#endif
4653} 4653}
4654 4654
4655void CalendarView::showDates(const DateList &selectedDates) 4655void CalendarView::showDates(const DateList &selectedDates)
4656{ 4656{
4657 // kdDebug() << "CalendarView::selectDates()" << endl; 4657 // kdDebug() << "CalendarView::selectDates()" << endl;
4658 4658
4659 4659
4660 if ( !mBlockShowDates ) { 4660 if ( !mBlockShowDates ) {
4661 if ( mViewManager->currentView() ) { 4661 if ( mViewManager->currentView() ) {
4662 updateView( selectedDates.first(), selectedDates.last() ); 4662 updateView( selectedDates.first(), selectedDates.last() );
4663 } else { 4663 } else {
4664 mViewManager->showAgendaView(); 4664 mViewManager->showAgendaView();
4665 } 4665 }
4666 } 4666 }
4667 4667
4668 QDate date = selectedDates.first(); 4668 QDate date = selectedDates.first();
4669 if ( ! date.isValid() ) { 4669 if ( ! date.isValid() ) {
4670 topLevelWidget()->setCaption(""); 4670 topLevelWidget()->setCaption("");
4671 return; 4671 return;
4672 } 4672 }
4673 4673
4674 QString selDates; 4674 QString selDates;
4675 selDates = KGlobal::locale()->formatDate( date, true); 4675 selDates = KGlobal::locale()->formatDate( date, true);
4676 if (selectedDates.first() < selectedDates.last() ) 4676 if (selectedDates.first() < selectedDates.last() )
4677 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4677 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4678 else { 4678 else {
4679 QString addString; 4679 QString addString;
4680 if ( date == QDateTime::currentDateTime().date() ) 4680 if ( date == QDateTime::currentDateTime().date() )
4681 addString = i18n("Today"); 4681 addString = i18n("Today");
4682 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4682 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4683 addString = i18n("Tomorrow"); 4683 addString = i18n("Tomorrow");
4684 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4684 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4685 addString = i18n("Yesterday"); 4685 addString = i18n("Yesterday");
4686 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4686 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4687 addString = i18n("Day before yesterday"); 4687 addString = i18n("Day before yesterday");
4688 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4688 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4689 addString = i18n("Day after tomorrow"); 4689 addString = i18n("Day after tomorrow");
4690 if ( !addString.isEmpty() ) { 4690 if ( !addString.isEmpty() ) {
4691 topLevelWidget()->setCaption( addString+", " + selDates ); 4691 topLevelWidget()->setCaption( addString+", " + selDates );
4692 return; 4692 return;
4693 } 4693 }
4694 } 4694 }
4695 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4695 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4696 4696
4697} 4697}
4698 4698
4699QPtrList<CalFilter> CalendarView::filters() 4699QPtrList<CalFilter> CalendarView::filters()
4700{ 4700{
4701 return mFilters; 4701 return mFilters;
4702 4702
4703} 4703}
4704void CalendarView::editFilters() 4704void CalendarView::editFilters()
4705{ 4705{
4706 // kdDebug() << "CalendarView::editFilters()" << endl; 4706 // kdDebug() << "CalendarView::editFilters()" << endl;
4707 4707
4708 CalFilter *filter = mFilters.first(); 4708 CalFilter *filter = mFilters.first();
4709 while(filter) { 4709 while(filter) {
4710 filter = mFilters.next(); 4710 filter = mFilters.next();
4711 } 4711 }
4712 4712
4713 mDialogManager->showFilterEditDialog(&mFilters); 4713 mDialogManager->showFilterEditDialog(&mFilters);
4714 updateFilter(); 4714 updateFilter();
4715} 4715}
4716void CalendarView::toggleFilter() 4716void CalendarView::toggleFilter()
4717{ 4717{
4718 if ( mLeftFrame->isHidden() ) { 4718 if ( mLeftFrame->isHidden() ) {
4719 toggleExpand(); 4719 toggleExpand();
4720 showFilter( true ); 4720 showFilter( true );
4721 } else 4721 } else
4722 showFilter(! mCalEditView->isVisible()); 4722 showFilter(! mCalEditView->isVisible());
4723} 4723}
4724 4724
4725KOFilterView *CalendarView::filterView() 4725KOFilterView *CalendarView::filterView()
4726{ 4726{
4727 return mFilterView; 4727 return mFilterView;
4728} 4728}
4729void CalendarView::selectFilter( int fil ) 4729void CalendarView::selectFilter( int fil )
4730{ 4730{
4731 mFilterView->setSelectedFilter( fil ); 4731 mFilterView->setSelectedFilter( fil );
4732 updateUnmanagedViews(); 4732 updateUnmanagedViews();
4733} 4733}
4734void CalendarView::showFilter(bool visible) 4734void CalendarView::showFilter(bool visible)
4735{ 4735{
4736#if 1 4736#if 1
4737 if (visible) { 4737 if (visible) {
4738 mCalEditView->readConfig(); 4738 mCalEditView->readConfig();
4739 mCalEditView->show(); 4739 mCalEditView->show();
4740 QValueList<int> sizes; 4740 QValueList<int> sizes;
4741 sizes = mLeftFrame->sizes(); 4741 sizes = mLeftFrame->sizes();
4742 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4742 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4743 sizes.clear(); 4743 sizes.clear();
4744 sizes << 100; 4744 sizes << 100;
4745 sizes << 0; 4745 sizes << 0;
4746 sizes << 0; 4746 sizes << 0;
4747 sizes << 100; 4747 sizes << 100;
4748 mLeftFrame->setSizes(sizes); 4748 mLeftFrame->setSizes(sizes);
4749 } 4749 }
4750#if 0 4750#if 0
4751 sizes = mLeftFrame->sizes(); 4751 sizes = mLeftFrame->sizes();
4752 int ccc = 0; 4752 int ccc = 0;
4753 while ( ccc < sizes.count()) { 4753 while ( ccc < sizes.count()) {
4754 qDebug("size %d %d ", ccc, sizes[ccc]); 4754 qDebug("size %d %d ", ccc, sizes[ccc]);
4755 ++ccc; 4755 ++ccc;
4756 } 4756 }
4757#endif 4757#endif
4758 4758
4759 } 4759 }
4760 else { 4760 else {
4761 mCalEditView->hide(); 4761 mCalEditView->hide();
4762 } 4762 }
4763#else 4763#else
4764 if (visible) mFilterView->show(); 4764 if (visible) mFilterView->show();
4765 else mFilterView->hide(); 4765 else mFilterView->hide();
4766#endif 4766#endif
4767} 4767}
4768void CalendarView::toggleFilerEnabled( ) 4768void CalendarView::toggleFilerEnabled( )
4769{ 4769{
4770 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4770 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4771 if ( !mFilterView->filtersEnabled() ) 4771 if ( !mFilterView->filtersEnabled() )
4772 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4772 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4773 updateUnmanagedViews(); 4773 updateUnmanagedViews();
4774 4774
4775} 4775}
4776void CalendarView::updateFilter() 4776void CalendarView::updateFilter()
4777{ 4777{
4778 CalFilter *filter = mFilterView->selectedFilter(); 4778 CalFilter *filter = mFilterView->selectedFilter();
4779 if (filter) { 4779 if (filter) {
4780 QString mess; 4780 QString mess;
4781 if (mFilterView->filtersEnabled()) { 4781 if (mFilterView->filtersEnabled()) {
4782 mess = i18n("Filter selected: ")+filter->name(); 4782 mess = i18n("Filter selected: ")+filter->name();
4783 filter->setEnabled(true); 4783 filter->setEnabled(true);
4784 } 4784 }
4785 else filter->setEnabled(false); 4785 else filter->setEnabled(false);
4786 mCalendar->setFilter(filter); 4786 mCalendar->setFilter(filter);
4787 updateView(); 4787 updateView();
4788 if ( !mess.isEmpty() ) 4788 if ( !mess.isEmpty() )
4789 topLevelWidget()->setCaption( mess ); 4789 topLevelWidget()->setCaption( mess );
4790 4790
4791 } 4791 }
4792 emit filtersUpdated(); 4792 emit filtersUpdated();
4793} 4793}
4794 4794
4795void CalendarView::filterEdited() 4795void CalendarView::filterEdited()
4796{ 4796{
4797 mFilterView->updateFilters(); 4797 mFilterView->updateFilters();
4798 updateFilter(); 4798 updateFilter();
4799 writeSettings(); 4799 writeSettings();
4800} 4800}
4801 4801
4802 4802
4803void CalendarView::takeOverEvent() 4803void CalendarView::takeOverEvent()
4804{ 4804{
4805 Incidence *incidence = currentSelection(); 4805 Incidence *incidence = currentSelection();
4806 4806
4807 if (!incidence) return; 4807 if (!incidence) return;
4808 4808
4809 incidence->setOrganizer(KOPrefs::instance()->email()); 4809 incidence->setOrganizer(KOPrefs::instance()->email());
4810 incidence->recreate(); 4810 incidence->recreate();
4811 incidence->setReadOnly(false); 4811 incidence->setReadOnly(false);
4812 4812
4813 updateView(); 4813 updateView();
4814} 4814}
4815 4815
4816void CalendarView::takeOverCalendar() 4816void CalendarView::takeOverCalendar()
4817{ 4817{
4818 // TODO: Create Calendar::allIncidences() function and use it here 4818 // TODO: Create Calendar::allIncidences() function and use it here
4819 4819
4820 clearAllViews(); 4820 clearAllViews();
4821 QPtrList<Event> events = mCalendar->events(); 4821 QPtrList<Event> events = mCalendar->events();
4822 for(uint i=0; i<events.count(); ++i) { 4822 for(uint i=0; i<events.count(); ++i) {
4823 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4823 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4824 events.at(i)->recreate(); 4824 events.at(i)->recreate();
4825 events.at(i)->setReadOnly(false); 4825 events.at(i)->setReadOnly(false);
4826 } 4826 }
4827 4827
4828 QPtrList<Todo> todos = mCalendar->todos(); 4828 QPtrList<Todo> todos = mCalendar->todos();
4829 for(uint i=0; i<todos.count(); ++i) { 4829 for(uint i=0; i<todos.count(); ++i) {
4830 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4830 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4831 todos.at(i)->recreate(); 4831 todos.at(i)->recreate();
4832 todos.at(i)->setReadOnly(false); 4832 todos.at(i)->setReadOnly(false);
4833 } 4833 }
4834 4834
4835 QPtrList<Journal> journals = mCalendar->journals(); 4835 QPtrList<Journal> journals = mCalendar->journals();
4836 for(uint i=0; i<journals.count(); ++i) { 4836 for(uint i=0; i<journals.count(); ++i) {
4837 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4837 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4838 journals.at(i)->recreate(); 4838 journals.at(i)->recreate();
4839 journals.at(i)->setReadOnly(false); 4839 journals.at(i)->setReadOnly(false);
4840 } 4840 }
4841 4841
4842 updateView(); 4842 updateView();
4843} 4843}
4844 4844
4845void CalendarView::showIntro() 4845void CalendarView::showIntro()
4846{ 4846{
4847 kdDebug() << "To be implemented." << endl; 4847 kdDebug() << "To be implemented." << endl;
4848} 4848}
4849 4849
4850QWidgetStack *CalendarView::viewStack() 4850QWidgetStack *CalendarView::viewStack()
4851{ 4851{
4852 return mRightFrame; 4852 return mRightFrame;
4853} 4853}
4854 4854
4855QWidget *CalendarView::leftFrame() 4855QWidget *CalendarView::leftFrame()
4856{ 4856{
4857 return ( QWidget *)mLeftFrame; 4857 return ( QWidget *)mLeftFrame;
4858} 4858}
4859 4859
4860DateNavigator *CalendarView::dateNavigator() 4860DateNavigator *CalendarView::dateNavigator()
4861{ 4861{
4862 return mNavigator; 4862 return mNavigator;
4863} 4863}
4864 4864
4865KDateNavigator* CalendarView::dateNavigatorWidget() 4865KDateNavigator* CalendarView::dateNavigatorWidget()
4866{ 4866{
4867 return mDateNavigator->navigatorView(); 4867 return mDateNavigator->navigatorView();
4868} 4868}
4869void CalendarView::toggleDateNavigatorWidget() 4869void CalendarView::toggleDateNavigatorWidget()
4870{ 4870{
4871 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4871 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4872 4872
4873 if (!KOPrefs::instance()->mShowDateNavigator ) 4873 if (!KOPrefs::instance()->mShowDateNavigator )
4874 mDateNavigator->hide(); 4874 mDateNavigator->hide();
4875 else 4875 else
4876 mDateNavigator->show(); 4876 mDateNavigator->show();
4877} 4877}
4878void CalendarView::addView(KOrg::BaseView *view) 4878void CalendarView::addView(KOrg::BaseView *view)
4879{ 4879{
4880 mViewManager->addView(view); 4880 mViewManager->addView(view);
4881} 4881}
4882 4882
4883void CalendarView::showView(KOrg::BaseView *view) 4883void CalendarView::showView(KOrg::BaseView *view)
4884{ 4884{
4885 mViewManager->showView(view, mLeftFrame->isVisible()); 4885 mViewManager->showView(view, mLeftFrame->isVisible());
4886} 4886}
4887 4887
4888Incidence *CalendarView::currentSelection() 4888Incidence *CalendarView::currentSelection()
4889{ 4889{
4890 return mViewManager->currentSelection(); 4890 return mViewManager->currentSelection();
4891} 4891}
4892void CalendarView::toggleAllDaySize() 4892void CalendarView::toggleAllDaySize()
4893{ 4893{
4894 /* 4894 /*
4895 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4895 if ( KOPrefs::instance()->mAllDaySize > 47 )
4896 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4896 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4897 else 4897 else
4898 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4898 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4899 */ 4899 */
4900 viewManager()->agendaView()->toggleAllDay(); 4900 viewManager()->agendaView()->toggleAllDay();
4901} 4901}
4902void CalendarView::toggleExpand() 4902void CalendarView::toggleExpand()
4903{ 4903{
4904 // if ( mLeftFrame->isHidden() ) { 4904 // if ( mLeftFrame->isHidden() ) {
4905 // mLeftFrame->show(); 4905 // mLeftFrame->show();
4906 // emit calendarViewExpanded( false ); 4906 // emit calendarViewExpanded( false );
4907 // } else { 4907 // } else {
4908 // mLeftFrame->hide(); 4908 // mLeftFrame->hide();
4909 // emit calendarViewExpanded( true ); 4909 // emit calendarViewExpanded( true );
4910 // } 4910 // }
4911 //qDebug(" CalendarView::toggleExpand()"); 4911 //qDebug(" CalendarView::toggleExpand()");
4912 globalFlagBlockAgenda = 1; 4912 globalFlagBlockAgenda = 1;
4913 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4913 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4914 globalFlagBlockAgenda = 5; 4914 globalFlagBlockAgenda = 5;
4915 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4915 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4916 //mViewManager->showView( 0, true ); 4916 //mViewManager->showView( 0, true );
4917} 4917}
4918 4918
4919void CalendarView::calendarModified( bool modified, Calendar * ) 4919void CalendarView::calendarModified( bool modified, Calendar * )
4920{ 4920{
4921 setModified( modified ); 4921 setModified( modified );
4922} 4922}
4923 4923
4924Todo *CalendarView::selectedTodo() 4924Todo *CalendarView::selectedTodo()
4925{ 4925{
4926 Incidence *incidence = currentSelection(); 4926 Incidence *incidence = currentSelection();
4927 if ( incidence && incidence->typeID() == todoID ) { 4927 if ( incidence && incidence->typeID() == todoID ) {
4928 return static_cast<Todo *>( incidence ); 4928 return static_cast<Todo *>( incidence );
4929 } 4929 }
4930 4930
4931 incidence = mTodoList->selectedIncidences().first(); 4931 incidence = mTodoList->selectedIncidences().first();
4932 if ( incidence && incidence->typeID() == todoID ) { 4932 if ( incidence && incidence->typeID() == todoID ) {
4933 return static_cast<Todo *>( incidence ); 4933 return static_cast<Todo *>( incidence );
4934 } 4934 }
4935 4935
4936 return 0; 4936 return 0;
4937} 4937}
4938 4938
4939void CalendarView::showIncidence() 4939void CalendarView::showIncidence()
4940{ 4940{
4941 mViewerCallerIsSearchDialog = false; 4941 mViewerCallerIsSearchDialog = false;
4942 Incidence *incidence = currentSelection(); 4942 Incidence *incidence = currentSelection();
4943 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4943 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4944 if ( incidence ) { 4944 if ( incidence ) {
4945 ShowIncidenceVisitor v; 4945 ShowIncidenceVisitor v;
4946 v.act( incidence, this ); 4946 v.act( incidence, this );
4947 } 4947 }
4948} 4948}
4949void CalendarView::editIncidenceDescription() 4949void CalendarView::editIncidenceDescription()
4950{ 4950{
4951 mFlagEditDescription = true; 4951 mFlagEditDescription = true;
4952 editIncidence(); 4952 editIncidence();
4953 mFlagEditDescription = false; 4953 mFlagEditDescription = false;
4954} 4954}
4955void CalendarView::editIncidence() 4955void CalendarView::editIncidence()
4956{ 4956{
4957 // qDebug("editIncidence() "); 4957 // qDebug("editIncidence() ");
4958 Incidence *incidence = currentSelection(); 4958 Incidence *incidence = currentSelection();
4959 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4959 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4960 if ( incidence ) { 4960 if ( incidence ) {
4961 EditIncidenceVisitor v; 4961 EditIncidenceVisitor v;
4962 v.act( incidence, this ); 4962 v.act( incidence, this );
4963 } 4963 }
4964} 4964}
4965 4965
4966void CalendarView::deleteIncidence() 4966void CalendarView::deleteIncidence()
4967{ 4967{
4968 Incidence *incidence = currentSelection(); 4968 Incidence *incidence = currentSelection();
4969 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4969 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4970 if ( incidence ) { 4970 if ( incidence ) {
4971 deleteIncidence(incidence); 4971 deleteIncidence(incidence);
4972 } 4972 }
4973} 4973}
4974void CalendarView::showIncidence(QString uid) 4974void CalendarView::showIncidence(QString uid)
4975{ 4975{
4976 Incidence *inc = mCalendar->incidence( uid ); 4976 Incidence *inc = mCalendar->incidence( uid );
4977 if ( inc ) 4977 if ( inc )
4978 showIncidence( inc ); 4978 showIncidence( inc );
4979} 4979}
4980void CalendarView::showIncidence(Incidence *incidence) 4980void CalendarView::showIncidence(Incidence *incidence)
4981{ 4981{
4982 mViewerCallerIsSearchDialog = false; 4982 mViewerCallerIsSearchDialog = false;
4983 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4983 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4984 if ( sender() && mDialogManager->getSearchDialog() ) { 4984 if ( sender() && mDialogManager->getSearchDialog() ) {
4985 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4985 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4986 mViewerCallerIsSearchDialog = true; 4986 mViewerCallerIsSearchDialog = true;
4987 } 4987 }
4988 } 4988 }
4989 if ( incidence ) { 4989 if ( incidence ) {
4990 ShowIncidenceVisitor v; 4990 ShowIncidenceVisitor v;
4991 v.act( incidence, this ); 4991 v.act( incidence, this );
4992 } 4992 }
4993} 4993}
4994 4994
4995void CalendarView::editIncidence(Incidence *incidence) 4995void CalendarView::editIncidence(Incidence *incidence)
4996{ 4996{
4997 if ( incidence ) { 4997 if ( incidence ) {
4998 4998
4999 EditIncidenceVisitor v; 4999 EditIncidenceVisitor v;
5000 v.act( incidence, this ); 5000 v.act( incidence, this );
5001 5001
5002 } 5002 }
5003} 5003}
5004 5004
5005void CalendarView::deleteIncidence(Incidence *incidence) 5005void CalendarView::deleteIncidence(Incidence *incidence)
5006{ 5006{
5007 //qDebug(" CalendarView::deleteIncidence "); 5007 //qDebug(" CalendarView::deleteIncidence ");
5008 if ( incidence == 0 ) { 5008 if ( incidence == 0 ) {
5009 updateView(); 5009 updateView();
5010 emit updateSearchDialog(); 5010 emit updateSearchDialog();
5011 return; 5011 return;
5012 } 5012 }
5013 if ( incidence ) { 5013 if ( incidence ) {
5014 DeleteIncidenceVisitor v; 5014 DeleteIncidenceVisitor v;
5015 v.act( incidence, this ); 5015 v.act( incidence, this );
5016 } 5016 }
5017} 5017}
5018 5018
5019 5019
5020void CalendarView::lookForOutgoingMessages() 5020void CalendarView::lookForOutgoingMessages()
5021{ 5021{
5022 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 5022 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
5023 ogd->loadMessages(); 5023 ogd->loadMessages();
5024} 5024}
5025 5025
5026void CalendarView::lookForIncomingMessages() 5026void CalendarView::lookForIncomingMessages()
5027{ 5027{
5028 IncomingDialog *icd = mDialogManager->incomingDialog(); 5028 IncomingDialog *icd = mDialogManager->incomingDialog();
5029 icd->retrieve(); 5029 icd->retrieve();
5030} 5030}
5031 5031
5032bool CalendarView::removeCompletedSubTodos( Todo* t ) 5032bool CalendarView::removeCompletedSubTodos( Todo* t )
5033{ 5033{
5034 bool deleteTodo = true; 5034 bool deleteTodo = true;
5035 QPtrList<Incidence> subTodos; 5035 QPtrList<Incidence> subTodos;
5036 Incidence *aTodo; 5036 Incidence *aTodo;
5037 subTodos = t->relations(); 5037 subTodos = t->relations();
5038 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 5038 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
5039 if (! removeCompletedSubTodos( (Todo*) aTodo )) 5039 if (! removeCompletedSubTodos( (Todo*) aTodo ))
5040 deleteTodo = false; 5040 deleteTodo = false;
5041 } 5041 }
5042 if ( deleteTodo ) { 5042 if ( deleteTodo ) {
5043 if ( t->isCompleted() && !t->doesRecur()) { 5043 if ( t->isCompleted() && !t->doesRecur()) {
5044 checkExternalId( t ); 5044 checkExternalId( t );
5045 mCalendar->deleteTodo( t ); 5045 mCalendar->deleteTodo( t );
5046 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 5046 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
5047 } 5047 }
5048 else 5048 else
5049 deleteTodo = false; 5049 deleteTodo = false;
5050 } 5050 }
5051 return deleteTodo; 5051 return deleteTodo;
5052 5052
5053} 5053}
5054void CalendarView::purgeCompleted() 5054void CalendarView::purgeCompleted()
5055{ 5055{
5056 int result = KMessageBox::warningContinueCancel(this, 5056 int result = KMessageBox::warningContinueCancel(this,
5057 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5057 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5058 5058
5059 if (result == KMessageBox::Continue) { 5059 if (result == KMessageBox::Continue) {
5060 5060
5061 QPtrList<Todo> todoCal; 5061 QPtrList<Todo> todoCal;
5062 QPtrList<Todo> rootTodos; 5062 QPtrList<Todo> rootTodos;
5063 //QPtrList<Incidence> rel; 5063 //QPtrList<Incidence> rel;
5064 Todo *aTodo; 5064 Todo *aTodo;
5065 todoCal = calendar()->todos(); 5065 todoCal = calendar()->todos();
5066 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5066 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5067 if ( !aTodo->relatedTo() ) 5067 if ( !aTodo->relatedTo() )
5068 rootTodos.append( aTodo ); 5068 rootTodos.append( aTodo );
5069 } 5069 }
5070 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5070 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5071 removeCompletedSubTodos( aTodo ); 5071 removeCompletedSubTodos( aTodo );
5072 } 5072 }
5073 5073
5074 updateView(); 5074 updateView();
5075 } 5075 }
5076} 5076}
5077 5077
5078void CalendarView::slotCalendarChanged() 5078void CalendarView::slotCalendarChanged()
5079{ 5079{
5080 ; 5080 ;
5081} 5081}
5082 5082
5083void CalendarView::keyPressEvent ( QKeyEvent *e) 5083void CalendarView::keyPressEvent ( QKeyEvent *e)
5084{ 5084{
5085 //qDebug("CalendarView::keyPressEvent "); 5085 //qDebug("CalendarView::keyPressEvent ");
5086 e->ignore(); 5086 e->ignore();
5087} 5087}
5088 5088
5089void CalendarView::multiResourceSyncStart( bool start ) 5089void CalendarView::multiResourceSyncStart( bool start )
5090{ 5090{
5091 mMultiResourceSync = start; 5091 mMultiResourceSync = start;
5092 5092
5093} 5093}
5094bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource) 5094bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource)
5095{ 5095{
5096 5096
5097 if ( manager != mSyncManager) 5097 if ( manager != mSyncManager)
5098 qDebug("KO: Internal error-1. SyncManager mismatch "); 5098 qDebug("KO: Internal error-1. SyncManager mismatch ");
5099 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5099 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5100 qDebug("KO: SyncKDE request detected!"); 5100 qDebug("KO: SyncKDE request detected!");
5101 } 5101 }
5102 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5102 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5103 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5103 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5104 if ( !resource.isEmpty() ) { 5104 if ( !resource.isEmpty() ) {
5105 int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 5105 int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
5106 qDebug( "KO: Sync request for resource: %s", resource.latin1() ); 5106 qDebug( "KO: Sync request for resource: %s", resource.latin1() );
5107 5107
5108 if ( !exclusiveSyncResource ) { 5108 if ( !exclusiveSyncResource ) {
5109 qDebug( "KO: Requested sync resource not found: %s", resource.latin1() ); 5109 qDebug( "KO: Requested sync resource not found: %s", resource.latin1() );
5110 return false; 5110 return false;
5111 } 5111 }
5112 mCalendar->setDefaultCalendar( exclusiveSyncResource ); 5112 mCalendar->setDefaultCalendar( exclusiveSyncResource );
5113 mCalendar->setDefaultCalendarEnabledOnly(); 5113 mCalendar->setDefaultCalendarEnabledOnly();
5114 } 5114 }
5115 bool result = syncCalendar( filename, mode ); 5115 bool result = syncCalendar( filename, mode );
5116 if ( !resource.isEmpty() ) 5116 if ( !resource.isEmpty() )
5117 restoreCalendarSettings(); 5117 restoreCalendarSettings();
5118 return result; 5118 return result;
5119} 5119}
5120bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5120bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5121{ 5121{
5122 //mSyncManager = manager; 5122 //mSyncManager = manager;
5123 if ( manager != mSyncManager) 5123 if ( manager != mSyncManager)
5124 qDebug("KO: Internal error-2. SyncManager mismatch "); 5124 qDebug("KO: Internal error-2. SyncManager mismatch ");
5125 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5125 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5126 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5126 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5127 if ( resource == "sharp" ) 5127 if ( resource == "sharp" )
5128 syncExternal( 0 ); 5128 syncExternal( 0 );
5129 if ( resource == "phone" ) 5129 if ( resource == "phone" )
5130 syncExternal( 1 ); 5130 syncExternal( 1 );
5131 // pending setmodified 5131 // pending setmodified
5132 return true; 5132 return true;
5133} 5133}
5134void CalendarView::setSyncManager(KSyncManager* manager) 5134void CalendarView::setSyncManager(KSyncManager* manager)
5135{ 5135{
5136 mSyncManager = manager; 5136 mSyncManager = manager;
5137} 5137}
5138 5138
5139void CalendarView::removeSyncInfo( QString syncProfile) 5139void CalendarView::removeSyncInfo( QString syncProfile)
5140{ 5140{
5141 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5141 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5142 mCalendar->removeSyncInfo( syncProfile ); 5142 mCalendar->removeSyncInfo( syncProfile );
5143 5143
5144} 5144}
5145 5145
5146void CalendarView::undo_delete() 5146void CalendarView::undo_delete()
5147{ 5147{
5148 //qDebug("undo_delete() "); 5148 //qDebug("undo_delete() ");
5149 Incidence* undo = mCalendar->undoIncidence(); 5149 Incidence* undo = mCalendar->undoIncidence();
5150 if ( !undo ) { 5150 if ( !undo ) {
5151 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5151 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5152 i18n("KO/Pi")); 5152 i18n("KO/Pi"));
5153 return; 5153 return;
5154 } 5154 }
5155 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5155 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5156 i18n("\nAre you sure you want\nto restore this?"), 5156 i18n("\nAre you sure you want\nto restore this?"),
5157 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5157 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5158 mCalendar->undoDeleteIncidence(); 5158 mCalendar->undoDeleteIncidence();
5159 updateView(); 5159 updateView();
5160 } 5160 }
5161} 5161}
5162 5162
5163void CalendarView::slotViewerClosed() 5163void CalendarView::slotViewerClosed()
5164{ 5164{
5165 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5165 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5166} 5166}
5167 5167
5168void CalendarView::resetFocus() 5168void CalendarView::resetFocus()
5169{ 5169{
5170 if ( mViewerCallerIsSearchDialog ) { 5170 if ( mViewerCallerIsSearchDialog ) {
5171 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5171 if ( mDialogManager->getSearchDialog()->isVisible() ){
5172 mDialogManager->getSearchDialog()->raise(); 5172 mDialogManager->getSearchDialog()->raise();
5173 mDialogManager->getSearchDialog()->setActiveWindow(); 5173 mDialogManager->getSearchDialog()->setActiveWindow();
5174 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5174 mDialogManager->getSearchDialog()->listview()->resetFocus();
5175 } else 5175 } else
5176 mViewerCallerIsSearchDialog = false; 5176 mViewerCallerIsSearchDialog = false;
5177 } 5177 }
5178 if ( !mViewerCallerIsSearchDialog ) { 5178 if ( !mViewerCallerIsSearchDialog ) {
5179 //mViewManager->currentView()->setFocus(); 5179 //mViewManager->currentView()->setFocus();
5180 //qDebug("sssssssssssssssset focus "); 5180 //qDebug("sssssssssssssssset focus ");
5181 topLevelWidget()->raise(); 5181 topLevelWidget()->raise();
5182 setActiveWindow(); 5182 setActiveWindow();
5183 //setFocus(); 5183 //setFocus();
5184 } 5184 }
5185 mViewerCallerIsSearchDialog = false; 5185 mViewerCallerIsSearchDialog = false;
5186} 5186}
5187 5187
5188void CalendarView::showNextAlarms() 5188void CalendarView::showNextAlarms()
5189{ 5189{
5190 QString message; 5190 QString message;
5191 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5191 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
5192 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5192 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
5193 QString sum = mCalendar->nextSummary(); 5193 QString sum = mCalendar->nextSummary();
5194 QDateTime nextA = mNextAlarmDateTime; 5194 QDateTime nextA = mNextAlarmDateTime;
5195 QDateTime cur = QDateTime::currentDateTime(); 5195 QDateTime cur = QDateTime::currentDateTime();
5196 int secs = cur.secsTo( nextA ); 5196 int secs = cur.secsTo( nextA );
5197 int min = secs /60; 5197 int min = secs /60;
5198 int hours = min /60; 5198 int hours = min /60;
5199 min = min % 60; 5199 min = min % 60;
5200 int days = hours /24; 5200 int days = hours /24;
5201 hours = hours % 24; 5201 hours = hours % 24;
5202 5202
5203 //message = i18n("The next alarm is in:\n"); 5203 //message = i18n("The next alarm is in:\n");
5204 if ( days > 1 ) 5204 if ( days > 1 )
5205 message += i18n("%1 days\n").arg( days ); 5205 message += i18n("%1 days\n").arg( days );
5206 else if ( days == 1 ) 5206 else if ( days == 1 )
5207 message += i18n("1 day\n"); 5207 message += i18n("1 day\n");
5208 if ( hours > 1 ) 5208 if ( hours > 1 )
5209 message += i18n("%1 hours\n").arg( hours ); 5209 message += i18n("%1 hours\n").arg( hours );
5210 else if ( hours == 1 ) 5210 else if ( hours == 1 )
5211 message += i18n("1 hour\n"); 5211 message += i18n("1 hour\n");
5212 if ( min > 1 ) 5212 if ( min > 1 )
5213 message += i18n("%1 minutes\n").arg( min ); 5213 message += i18n("%1 minutes\n").arg( min );
5214 else if ( min == 1 ) 5214 else if ( min == 1 )
5215 message += i18n("1 minute\n"); 5215 message += i18n("1 minute\n");
5216 if ( message.isEmpty() ) 5216 if ( message.isEmpty() )
5217 message = i18n("The next alarm is in\nless than one minute!"); 5217 message = i18n("The next alarm is in\nless than one minute!");
5218 else 5218 else
5219 message = i18n("The next alarm is in:\n") + message; 5219 message = i18n("The next alarm is in:\n") + message;
5220 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5220 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
5221 } else { 5221 } else {
5222 message = i18n("There is no next alarm."); 5222 message = i18n("There is no next alarm.");
5223 5223
5224 } 5224 }
5225#ifdef DESKTOP_VERSION 5225#ifdef DESKTOP_VERSION
5226 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5226 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
5227 message += i18n("\nThe internal alarm notification is disabled!\n"); 5227 message += i18n("\nThe internal alarm notification is disabled!\n");
5228 message += i18n("Enable it in the settings menu, TAB alarm."); 5228 message += i18n("Enable it in the settings menu, TAB alarm.");
5229 } 5229 }
5230 5230
5231#endif 5231#endif
5232 KMessageBox::information( this, message); 5232 KMessageBox::information( this, message);
5233} 5233}
5234 5234
5235void CalendarView::displayCalendarInfo( int id ) 5235void CalendarView::displayCalendarInfo( int id )
5236{ 5236{
5237 int e, t,j; 5237 int e, t,j;
5238 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id ); 5238 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
5239 QString name = kkf->mName; 5239 QString name = kkf->mName;
5240 mCalendar->getIncidenceCount( id, e, t, j ); 5240 mCalendar->getIncidenceCount( id, e, t, j );
5241 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 ); 5241 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
5242 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file); 5242 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file);
5243 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j ); 5243 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j );
5244 KMessageBox::information( this, mess ); 5244 KMessageBox::information( this, mess );
5245 5245
5246 5246
5247} 5247}
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 66836a1..f301768 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,384 +1,384 @@
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#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35#include "calfilter.h" 35#include "calfilter.h"
36 36
37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
38 38
39class KConfig; 39class KConfig;
40 40
41namespace KCal { 41namespace KCal {
42 42
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 Incidence * undoIncidence() { return mUndoIncidence; }; 68 Incidence * undoIncidence() { return mUndoIncidence; };
69 bool undoDeleteIncidence(); 69 bool undoDeleteIncidence();
70 void deleteIncidence(Incidence *in); 70 void deleteIncidence(Incidence *in);
71 void resetTempSyncStat(); 71 void resetTempSyncStat();
72 void resetPilotStat(int id); 72 void resetPilotStat(int id);
73 /** 73 /**
74 Clears out the current calendar, freeing all used memory etc. 74 Clears out the current calendar, freeing all used memory etc.
75 */ 75 */
76 virtual void close() = 0; 76 virtual void close() = 0;
77 virtual void addCalendar( Calendar* ) = 0; 77 virtual void addCalendar( Calendar* ) = 0;
78 virtual bool addCalendarFile( QString name, int id ) = 0; 78 virtual bool addCalendarFile( QString name, int id ) = 0;
79 virtual bool mergeCalendarFile( QString name ) = 0; 79 virtual bool mergeCalendarFile( QString name ) = 0;
80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0; 80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates , bool enabledOnly = false ) = 0;
81 virtual void setSyncEventsReadOnly() = 0; 81 virtual void setSyncEventsReadOnly() = 0;
82 virtual void setSyncEventsEnabled() = 0; 82 virtual void setSyncEventsEnabled() = 0;
83 virtual void stopAllTodos() = 0; 83 virtual void stopAllTodos() = 0;
84 virtual void clearUndo( Incidence * newUndo ); 84 virtual void clearUndo( Incidence * newUndo );
85 85
86 /** 86 /**
87 Sync changes in memory to persistant storage. 87 Sync changes in memory to persistant storage.
88 */ 88 */
89 virtual void save() = 0; 89 virtual void save() = 0;
90 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 90 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
91 virtual void removeSyncInfo( QString syncProfile) = 0; 91 virtual void removeSyncInfo( QString syncProfile) = 0;
92 virtual bool isSaving() { return false; } 92 virtual bool isSaving() { return false; }
93 93
94 /** 94 /**
95 Return the owner of the calendar's full name. 95 Return the owner of the calendar's full name.
96 */ 96 */
97 const QString &getOwner() const; 97 const QString &getOwner() const;
98 /** 98 /**
99 Set the owner of the calendar. Should be owner's full name. 99 Set the owner of the calendar. Should be owner's full name.
100 */ 100 */
101 void setOwner( const QString &os ); 101 void setOwner( const QString &os );
102 /** 102 /**
103 Return the email address of the calendar owner. 103 Return the email address of the calendar owner.
104 */ 104 */
105 const QString &getEmail(); 105 const QString &getEmail();
106 /** 106 /**
107 Set the email address of the calendar owner. 107 Set the email address of the calendar owner.
108 */ 108 */
109 void setEmail( const QString & ); 109 void setEmail( const QString & );
110 110
111 /** 111 /**
112 Set time zone from a timezone string (e.g. -2:00) 112 Set time zone from a timezone string (e.g. -2:00)
113 */ 113 */
114 void setTimeZone( const QString &tz ); 114 void setTimeZone( const QString &tz );
115 /** 115 /**
116 Set time zone from a minutes value (e.g. -60) 116 Set time zone from a minutes value (e.g. -60)
117 */ 117 */
118 void setTimeZone( int tz ); 118 void setTimeZone( int tz );
119 /** 119 /**
120 Return time zone as offest in minutes. 120 Return time zone as offest in minutes.
121 */ 121 */
122 int getTimeZone() const; 122 int getTimeZone() const;
123 /** 123 /**
124 Compute an ISO 8601 format string from the time zone. 124 Compute an ISO 8601 format string from the time zone.
125 */ 125 */
126 QString getTimeZoneStr() const; 126 QString getTimeZoneStr() const;
127 /** 127 /**
128 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 128 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
129 values). 129 values).
130 */ 130 */
131 void setTimeZoneId( const QString & ); 131 void setTimeZoneId( const QString & );
132 /** 132 /**
133 Return time zone id. 133 Return time zone id.
134 */ 134 */
135 QString timeZoneId() const; 135 QString timeZoneId() const;
136 /** 136 /**
137 Use local time, not UTC or a time zone. 137 Use local time, not UTC or a time zone.
138 */ 138 */
139 void setLocalTime(); 139 void setLocalTime();
140 /** 140 /**
141 Return whether local time is being used. 141 Return whether local time is being used.
142 */ 142 */
143 bool isLocalTime() const; 143 bool isLocalTime() const;
144 144
145 /** 145 /**
146 Add an incidence to calendar. 146 Add an incidence to calendar.
147 147
148 @return true on success, false on error. 148 @return true on success, false on error.
149 */ 149 */
150 virtual bool addIncidence( Incidence * ); 150 virtual bool addIncidence( Incidence * );
151 151
152 // Adds an incidence and all relatedto incidences to the cal 152 // Adds an incidence and all relatedto incidences to the cal
153 void addIncidenceBranch( Incidence * ); 153 void addIncidenceBranch( Incidence * );
154 /** 154 /**
155 Return filtered list of all incidences of this calendar. 155 Return filtered list of all incidences of this calendar.
156 */ 156 */
157 virtual QPtrList<Incidence> incidences(); 157 virtual QPtrList<Incidence> incidences();
158 158
159 /** 159 /**
160 Return unfiltered list of all incidences of this calendar. 160 Return unfiltered list of all incidences of this calendar.
161 */ 161 */
162 virtual QPtrList<Incidence> rawIncidences(); 162 virtual QPtrList<Incidence> rawIncidences();
163 163
164 /** 164 /**
165 Adds a Event to this calendar object. 165 Adds a Event to this calendar object.
166 @param anEvent a pointer to the event to add 166 @param anEvent a pointer to the event to add
167 167
168 @return true on success, false on error. 168 @return true on success, false on error.
169 */ 169 */
170 virtual bool addEventNoDup( Event *event ) = 0; 170 virtual bool addEventNoDup( Event *event ) = 0;
171 virtual bool addAnniversaryNoDup( Event *event ) = 0; 171 virtual bool addAnniversaryNoDup( Event *event ) = 0;
172 virtual bool addEvent( Event *anEvent ) = 0; 172 virtual bool addEvent( Event *anEvent ) = 0;
173 /** 173 /**
174 Delete event from calendar. 174 Delete event from calendar.
175 */ 175 */
176 virtual void deleteEvent( Event * ) = 0; 176 virtual void deleteEvent( Event * ) = 0;
177 /** 177 /**
178 Retrieves an event on the basis of the unique string ID. 178 Retrieves an event on the basis of the unique string ID.
179 */ 179 */
180 virtual Event *event( const QString &UniqueStr ) = 0; 180 virtual Event *event( const QString &UniqueStr ) = 0;
181 virtual Event *event( QString, QString ) = 0; 181 virtual Event *event( QString, QString ) = 0;
182 /** 182 /**
183 Builds and then returns a list of all events that match for the 183 Builds and then returns a list of all events that match for the
184 date specified. useful for dayView, etc. etc. 184 date specified. useful for dayView, etc. etc.
185 The calendar filter is applied. 185 The calendar filter is applied.
186 */ 186 */
187 QPtrList<Event> events( const QDate &date, bool sorted = false); 187 QPtrList<Event> events( const QDate &date, bool sorted = false);
188 /** 188 /**
189 Get events, which occur on the given date. 189 Get events, which occur on the given date.
190 The calendar filter is applied. 190 The calendar filter is applied.
191 */ 191 */
192 QPtrList<Event> events( const QDateTime &qdt ); 192 QPtrList<Event> events( const QDateTime &qdt );
193 /** 193 /**
194 Get events in a range of dates. If inclusive is set to true, only events 194 Get events in a range of dates. If inclusive is set to true, only events
195 are returned, which are completely included in the range. 195 are returned, which are completely included in the range.
196 The calendar filter is applied. 196 The calendar filter is applied.
197 */ 197 */
198 QPtrList<Event> events( const QDate &start, const QDate &end, 198 QPtrList<Event> events( const QDate &start, const QDate &end,
199 bool inclusive = false); 199 bool inclusive = false);
200 /** 200 /**
201 Return filtered list of all events in calendar. 201 Return filtered list of all events in calendar.
202 */ 202 */
203 virtual QPtrList<Event> events(); 203 virtual QPtrList<Event> events();
204 /** 204 /**
205 Return unfiltered list of all events in calendar. 205 Return unfiltered list of all events in calendar.
206 */ 206 */
207 virtual QPtrList<Event> rawEvents() = 0; 207 virtual QPtrList<Event> rawEvents() = 0;
208 208
209 /** 209 /**
210 Add a todo to the todolist. 210 Add a todo to the todolist.
211 211
212 @return true on success, false on error. 212 @return true on success, false on error.
213 */ 213 */
214 virtual bool addTodo( Todo *todo ) = 0; 214 virtual bool addTodo( Todo *todo ) = 0;
215 virtual bool addTodoNoDup( Todo *todo ) = 0; 215 virtual bool addTodoNoDup( Todo *todo ) = 0;
216 /** 216 /**
217 Remove a todo from the todolist. 217 Remove a todo from the todolist.
218 */ 218 */
219 virtual void deleteTodo( Todo * ) = 0; 219 virtual void deleteTodo( Todo * ) = 0;
220 virtual void deleteJournal( Journal * ) = 0; 220 virtual void deleteJournal( Journal * ) = 0;
221 /** 221 /**
222 Return filterd list of todos. 222 Return filterd list of todos.
223 */ 223 */
224 virtual QPtrList<Todo> todos(); 224 virtual QPtrList<Todo> todos();
225 /** 225 /**
226 Searches todolist for an event with this unique string identifier, 226 Searches todolist for an event with this unique string identifier,
227 returns a pointer or null. 227 returns a pointer or null.
228 */ 228 */
229 virtual Todo *todo( const QString &uid ) = 0; 229 virtual Todo *todo( const QString &uid ) = 0;
230 virtual Todo *todo( QString, QString ) = 0; 230 virtual Todo *todo( QString, QString ) = 0;
231 /** 231 /**
232 Returns list of todos due on the specified date. 232 Returns list of todos due on the specified date.
233 */ 233 */
234 virtual QPtrList<Todo> todos( const QDate &date ) = 0; 234 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
235 /** 235 /**
236 Return unfiltered list of todos. 236 Return unfiltered list of todos.
237 */ 237 */
238 virtual QPtrList<Todo> rawTodos() = 0; 238 virtual QPtrList<Todo> rawTodos() = 0;
239 239
240 /** 240 /**
241 Add a Journal entry to calendar. 241 Add a Journal entry to calendar.
242 242
243 @return true on success, false on error. 243 @return true on success, false on error.
244 */ 244 */
245 virtual bool addJournal( Journal * ) = 0; 245 virtual bool addJournal( Journal * ) = 0;
246 /** 246 /**
247 Return Journal for given date. 247 Return Journal for given date.
248 */ 248 */
249 virtual Journal *journal( const QDate & ) = 0; 249 virtual Journal *journal( const QDate & ) = 0;
250 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0; 250 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0;
251 /** 251 /**
252 Return Journal with given UID. 252 Return Journal with given UID.
253 */ 253 */
254 virtual Journal *journal( const QString &UID ) = 0; 254 virtual Journal *journal( const QString &UID ) = 0;
255 /** 255 /**
256 Return list of all Journal entries. 256 Return list of all Journal entries.
257 */ 257 */
258 virtual QPtrList<Journal> journals() = 0; 258 virtual QPtrList<Journal> journals() = 0;
259 259
260 /** 260 /**
261 Searches all incidence types for an incidence with this unique 261 Searches all incidence types for an incidence with this unique
262 string identifier, returns a pointer or null. 262 string identifier, returns a pointer or null.
263 */ 263 */
264 Incidence* incidence( const QString&UID ); 264 Incidence* incidence( const QString&UID );
265 265
266 /** 266 /**
267 Setup relations for an incidence. 267 Setup relations for an incidence.
268 */ 268 */
269 virtual void setupRelations( Incidence * ); 269 virtual void setupRelations( Incidence * );
270 /** 270 /**
271 Remove all relations to an incidence 271 Remove all relations to an incidence
272 */ 272 */
273 virtual void removeRelations( Incidence * ); 273 virtual void removeRelations( Incidence * );
274 274
275 /** 275 /**
276 Set calendar filter, which filters events for the events() functions. 276 Set calendar filter, which filters events for the events() functions.
277 The Filter object is owned by the caller. 277 The Filter object is owned by the caller.
278 */ 278 */
279 void setFilter( CalFilter * ); 279 void setFilter( CalFilter * );
280 /** 280 /**
281 Return calendar filter. 281 Return calendar filter.
282 */ 282 */
283 CalFilter *filter(); 283 CalFilter *filter();
284 virtual QDateTime nextAlarm( int daysTo ) = 0; 284 virtual QDateTime nextAlarm( int daysTo ) = 0;
285 virtual QString nextSummary( ) const = 0; 285 virtual QString nextSummary( ) const = 0;
286 virtual void reInitAlarmSettings() = 0; 286 virtual void reInitAlarmSettings() = 0;
287 virtual QDateTime nextAlarmEventDateTime() const = 0; 287 virtual QDateTime nextAlarmEventDateTime() const = 0;
288 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0; 288 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
289 /** 289 /**
290 Return all alarms, which ocur in the given time interval. 290 Return all alarms, which ocur in the given time interval.
291 */ 291 */
292 virtual Alarm::List alarms( const QDateTime &from, 292 virtual Alarm::List alarms( const QDateTime &from,
293 const QDateTime &to ) = 0; 293 const QDateTime &to ) = 0;
294 294
295 class Observer { 295 class Observer {
296 public: 296 public:
297 virtual void calendarModified( bool, Calendar * ) = 0; 297 virtual void calendarModified( bool, Calendar * ) = 0;
298 }; 298 };
299 299
300 void registerObserver( Observer * ); 300 void registerObserver( Observer * );
301 301
302 void setModified( bool ); 302 void setModified( bool );
303 303
304 /** 304 /**
305 Set product id returned by loadedProductId(). This function is only 305 Set product id returned by loadedProductId(). This function is only
306 useful for the calendar loading code. 306 useful for the calendar loading code.
307 */ 307 */
308 void setLoadedProductId( const QString & ); 308 void setLoadedProductId( const QString & );
309 /** 309 /**
310 Return product id taken from file that has been loaded. Returns 310 Return product id taken from file that has been loaded. Returns
311 QString::null, if no calendar has been loaded. 311 QString::null, if no calendar has been loaded.
312 */ 312 */
313 QString loadedProductId(); 313 QString loadedProductId();
314 int defaultCalendar(); 314 int defaultCalendar();
315 void setDontDeleteIncidencesOnClose (); 315 void setDontDeleteIncidencesOnClose ();
316 public slots: 316 public slots:
317 void setDefaultCalendar( int ); 317 void setDefaultCalendar( int );
318 virtual void setCalendarEnabled( int id, bool enable ) = 0; 318 virtual void setCalendarEnabled( int id, bool enable ) = 0;
319 virtual void setAllCalendarEnabled( bool enable ) = 0; 319 virtual void setAllCalendarEnabled( bool enable ) = 0;
320 virtual void setAlarmEnabled( int id, bool enable ) = 0; 320 virtual void setAlarmEnabled( int id, bool enable ) = 0;
321 virtual void setReadOnly( int id, bool enable ) = 0; 321 virtual void setReadOnly( int id, bool enable ) = 0;
322 virtual void setDefaultCalendarEnabledOnly() = 0; 322 virtual void setDefaultCalendarEnabledOnly() = 0;
323 virtual void setCalendarRemove( int id ) = 0; 323 virtual void setCalendarRemove( int id ) = 0;
324 virtual void getIncidenceCount( int calId, int& events, int & todos, int & journals) = 0; 324 virtual void getIncidenceCount( int calId, int& events, int & todos, int & journals) = 0;
325 325
326 signals: 326 signals:
327 void calendarChanged(); 327 void calendarChanged();
328 void calendarSaved(); 328 void calendarSaved();
329 void calendarLoaded(); 329 void calendarLoaded();
330 void addAlarm(const QDateTime &qdt, const QString &noti ); 330 void addAlarm(const QDateTime &qdt, const QString &noti );
331 void removeAlarm(const QDateTime &qdt, const QString &noti ); 331 void removeAlarm(const QDateTime &qdt, const QString &noti );
332 332
333 protected: 333 protected:
334 /** 334 /**
335 Get unfiltered events, which occur on the given date. 335 Get unfiltered events, which occur on the given date.
336 */ 336 */
337 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0; 337 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
338 /** 338 /**
339 Get unfiltered events, which occur on the given date. 339 Get unfiltered events, which occur on the given date.
340 */ 340 */
341 virtual QPtrList<Event> rawEventsForDate( const QDate &date, 341 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
342 bool sorted = false ) = 0; 342 bool sorted = false ) = 0;
343 /** 343 /**
344 Get events in a range of dates. If inclusive is set to true, only events 344 Get events in a range of dates. If inclusive is set to true, only events
345 are returned, which are completely included in the range. 345 are returned, which are completely included in the range.
346 */ 346 */
347 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 347 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
348 bool inclusive = false ) = 0; 348 bool inclusive = false ) = 0;
349 349
350 Incidence *mNextAlarmIncidence; 350 Incidence *mNextAlarmIncidence;
351 Incidence *mUndoIncidence; 351 Incidence *mUndoIncidence;
352 int mDefaultCalendar; 352 int mDefaultCalendar;
353 bool mDeleteIncidencesOnClose; 353 bool mDeleteIncidencesOnClose;
354 354
355private: 355private:
356 void init(); 356 void init();
357 357
358 QString mOwner; // who the calendar belongs to 358 QString mOwner; // who the calendar belongs to
359 QString mOwnerEmail; // email address of the owner 359 QString mOwnerEmail; // email address of the owner
360 int mTimeZone; // timezone OFFSET from GMT (MINUTES) 360 int mTimeZone; // timezone OFFSET from GMT (MINUTES)
361 bool mLocalTime; // use local time, not UTC or a time zone 361 bool mLocalTime; // use local time, not UTC or a time zone
362 362
363 363
364 CalFilter *mFilter; 364 CalFilter *mFilter;
365 CalFilter *mDefaultFilter; 365 CalFilter *mDefaultFilter;
366 366
367 367
368 QString mTimeZoneId; 368 QString mTimeZoneId;
369 369
370 Observer *mObserver; 370 Observer *mObserver;
371 bool mNewObserver; 371 bool mNewObserver;
372 372
373 bool mModified; 373 bool mModified;
374 374
375 QString mLoadedProductId; 375 QString mLoadedProductId;
376 376
377 // This list is used to put together related todos 377 // This list is used to put together related todos
378 QDict<Incidence> mOrphans; 378 QDict<Incidence> mOrphans;
379 QDict<Incidence> mOrphanUids; 379 QDict<Incidence> mOrphanUids;
380}; 380};
381 381
382} 382}
383 383
384#endif 384#endif
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index b02f706..ad8ace3 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,1080 +1,1089 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 registerObserver( 0 ); 68 registerObserver( 0 );
69 if ( mDeleteIncidencesOnClose ) 69 if ( mDeleteIncidencesOnClose )
70 close(); 70 close();
71} 71}
72bool CalendarLocal::mergeCalendarFile( QString name ) 72bool CalendarLocal::mergeCalendarFile( QString name )
73{ 73{
74 CalendarLocal calendar( timeZoneId() ); 74 CalendarLocal calendar( timeZoneId() );
75 calendar.setDefaultCalendar( 1 ); 75 calendar.setDefaultCalendar( 1 );
76 if ( calendar.load( name ) ) { 76 if ( calendar.load( name ) ) {
77 mergeCalendar( &calendar ); 77 mergeCalendar( &calendar );
78 return true; 78 return true;
79 } 79 }
80 return false; 80 return false;
81} 81}
82 82
83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates) 83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates, bool enabledOnly )
84{ 84{
85 Todo *todo;; 85 Todo *todo;;
86 Incidence *retVal = 0; 86 Incidence *retVal = 0;
87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
88 if ( todo->uid() == uid ) { 88 if ( todo->uid() == uid ) {
89 if ( enabledOnly )
90 if ( !todo->calEnabled() )
91 continue;
89 if ( doNotCheckDuplicates ) return todo; 92 if ( doNotCheckDuplicates ) return todo;
90 if ( retVal ) { 93 if ( retVal ) {
91 if ( retVal->calID() > todo->calID() ) { 94 if ( retVal->calID() > todo->calID() ) {
92 retVal = todo; 95 retVal = todo;
93 } 96 }
94 } else { 97 } else {
95 retVal = todo; 98 retVal = todo;
96 } 99 }
97 } 100 }
98 } 101 }
99 if ( retVal ) return retVal; 102 if ( retVal ) return retVal;
100 Event *event; 103 Event *event;
101 for ( event = mEventList.first(); event; event = mEventList.next() ) { 104 for ( event = mEventList.first(); event; event = mEventList.next() ) {
102 if ( event->uid() == uid ) { 105 if ( event->uid() == uid ) {
106 if ( enabledOnly )
107 if ( !event->calEnabled() )
108 continue;
103 if ( doNotCheckDuplicates ) return event; 109 if ( doNotCheckDuplicates ) return event;
104 if ( retVal ) { 110 if ( retVal ) {
105 if ( retVal->calID() > event->calID() ) { 111 if ( retVal->calID() > event->calID() ) {
106 retVal = event; 112 retVal = event;
107 } 113 }
108 } else { 114 } else {
109 retVal = event; 115 retVal = event;
110 } 116 }
111 } 117 }
112 } 118 }
113 if ( retVal ) return retVal; 119 if ( retVal ) return retVal;
114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 120 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
115 if ( it->uid() == uid ) { 121 if ( it->uid() == uid ) {
122 if ( enabledOnly )
123 if ( !it->calEnabled() )
124 continue;
116 if ( doNotCheckDuplicates ) return it; 125 if ( doNotCheckDuplicates ) return it;
117 if ( retVal ) { 126 if ( retVal ) {
118 if ( retVal->calID() > it->calID() ) { 127 if ( retVal->calID() > it->calID() ) {
119 retVal = it; 128 retVal = it;
120 } 129 }
121 } else { 130 } else {
122 retVal = it; 131 retVal = it;
123 } 132 }
124 } 133 }
125 return retVal; 134 return retVal;
126} 135}
127 136
128bool CalendarLocal::mergeCalendar( Calendar* remote ) 137bool CalendarLocal::mergeCalendar( Calendar* remote )
129{ 138{
130 // 1 look for raw inc in local 139 // 1 look for raw inc in local
131 // if inc not in remote, delete in local 140 // if inc not in remote, delete in local
132 // 2 look for raw inc in remote 141 // 2 look for raw inc in remote
133 // if inc in local, replace it 142 // if inc in local, replace it
134 // if not in local, add it to default calendar 143 // if not in local, add it to default calendar
135 QPtrList<Incidence> localInc = rawIncidences(); 144 QPtrList<Incidence> localInc = rawIncidences();
136 Incidence* inL = localInc.first(); 145 Incidence* inL = localInc.first();
137 while ( inL ) { 146 while ( inL ) {
138 if ( ! inL->isReadOnly () ) 147 if ( ! inL->isReadOnly () )
139 if ( !remote->incidenceForUid( inL->uid(), true )) 148 if ( !remote->incidenceForUid( inL->uid(), true ))
140 deleteIncidence( inL ); 149 deleteIncidence( inL );
141 inL = localInc.next(); 150 inL = localInc.next();
142 } 151 }
143 QPtrList<Incidence> er = remote->rawIncidences(); 152 QPtrList<Incidence> er = remote->rawIncidences();
144 Incidence* inR = er.first(); 153 Incidence* inR = er.first();
145 while ( inR ) { 154 while ( inR ) {
146 inL = incidenceForUid( inR->uid(),false ); 155 inL = incidenceForUid( inR->uid(),false );
147 if ( inL ) { 156 if ( inL ) {
148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) { 157 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) {
149 int calID = inL->calID(); 158 int calID = inL->calID();
150 deleteIncidence( inL ); 159 deleteIncidence( inL );
151 inL = inR->clone(); 160 inL = inR->clone();
152 inL->setCalID_block( calID ); 161 inL->setCalID_block( calID );
153 addIncidence( inL ); 162 addIncidence( inL );
154 } 163 }
155 } else { 164 } else {
156 inL = inR->clone(); 165 inL = inR->clone();
157 inL->setCalID_block( 0 );// add to default cal 166 inL->setCalID_block( 0 );// add to default cal
158 addIncidence( inL ); 167 addIncidence( inL );
159 } 168 }
160 inR = er.next(); 169 inR = er.next();
161 } 170 }
162 return true; 171 return true;
163} 172}
164 173
165 174
166bool CalendarLocal::addCalendarFile( QString name, int id ) 175bool CalendarLocal::addCalendarFile( QString name, int id )
167{ 176{
168 CalendarLocal calendar( timeZoneId() ); 177 CalendarLocal calendar( timeZoneId() );
169 calendar.setDefaultCalendar( id ); 178 calendar.setDefaultCalendar( id );
170 if ( calendar.load( name ) ) { 179 if ( calendar.load( name ) ) {
171 addCalendar( &calendar ); 180 addCalendar( &calendar );
172 return true; 181 return true;
173 } 182 }
174 return false; 183 return false;
175} 184}
176void CalendarLocal::setSyncEventsEnabled() 185void CalendarLocal::setSyncEventsEnabled()
177{ 186{
178 Event * ev; 187 Event * ev;
179 ev = mEventList.first(); 188 ev = mEventList.first();
180 while ( ev ) { 189 while ( ev ) {
181 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 190 if ( ev->uid().left(15) == QString("last-syncEvent-") )
182 ev->setCalEnabled( true ); 191 ev->setCalEnabled( true );
183 ev = mEventList.next(); 192 ev = mEventList.next();
184 } 193 }
185} 194}
186void CalendarLocal::setSyncEventsReadOnly() 195void CalendarLocal::setSyncEventsReadOnly()
187{ 196{
188 Event * ev; 197 Event * ev;
189 ev = mEventList.first(); 198 ev = mEventList.first();
190 while ( ev ) { 199 while ( ev ) {
191 if ( ev->uid().left(15) == QString("last-syncEvent-") ) { 200 if ( ev->uid().left(15) == QString("last-syncEvent-") ) {
192 ev->setReadOnly( true ); 201 ev->setReadOnly( true );
193 } 202 }
194 ev = mEventList.next(); 203 ev = mEventList.next();
195 } 204 }
196} 205}
197 206
198void CalendarLocal::addCalendar( Calendar* cal ) 207void CalendarLocal::addCalendar( Calendar* cal )
199{ 208{
200 cal->setDontDeleteIncidencesOnClose(); 209 cal->setDontDeleteIncidencesOnClose();
201 setSyncEventsEnabled(); 210 setSyncEventsEnabled();
202 { 211 {
203 QPtrList<Event> EventList = cal->rawEvents(); 212 QPtrList<Event> EventList = cal->rawEvents();
204 QPtrList<Event> el; 213 QPtrList<Event> el;
205 Event * ev = EventList.first(); 214 Event * ev = EventList.first();
206 while ( ev ) { 215 while ( ev ) {
207 if ( ev->uid().left( 15 ) == QString("last-syncEvent-") ) { 216 if ( ev->uid().left( 15 ) == QString("last-syncEvent-") ) {
208 Event * se = event( ev->uid() ); 217 Event * se = event( ev->uid() );
209 if ( se ) 218 if ( se )
210 el.append( se ); 219 el.append( se );
211 ev->setCalID_block( 1 ); 220 ev->setCalID_block( 1 );
212 } 221 }
213 ev->unRegisterObserver( cal ); 222 ev->unRegisterObserver( cal );
214 ev->registerObserver( this ); 223 ev->registerObserver( this );
215 mEventList.append( ev ); 224 mEventList.append( ev );
216 ev = EventList.next(); 225 ev = EventList.next();
217 } 226 }
218 for ( ev = el.first(); ev; ev = el.next() ) { 227 for ( ev = el.first(); ev; ev = el.next() ) {
219 deleteIncidence ( ev ); 228 deleteIncidence ( ev );
220 } 229 }
221 } 230 }
222 { 231 {
223 232
224 QPtrList<Todo> TodoList = cal->rawTodos(); 233 QPtrList<Todo> TodoList = cal->rawTodos();
225 Todo * ev = TodoList.first(); 234 Todo * ev = TodoList.first();
226 while ( ev ) { 235 while ( ev ) {
227 QString rel = ev->relatedToUid(); 236 QString rel = ev->relatedToUid();
228 if ( !rel.isEmpty() ){ 237 if ( !rel.isEmpty() ){
229 ev->setRelatedTo ( 0 ); 238 ev->setRelatedTo ( 0 );
230 ev->setRelatedToUid( rel ); 239 ev->setRelatedToUid( rel );
231 } 240 }
232 ev = TodoList.next(); 241 ev = TodoList.next();
233 } 242 }
234 //TodoList = cal->rawTodos(); 243 //TodoList = cal->rawTodos();
235 ev = TodoList.first(); 244 ev = TodoList.first();
236 while ( ev ) { 245 while ( ev ) {
237 ev->unRegisterObserver( cal ); 246 ev->unRegisterObserver( cal );
238 ev->registerObserver( this ); 247 ev->registerObserver( this );
239 mTodoList.append( ev ); 248 mTodoList.append( ev );
240 setupRelations( ev ); 249 setupRelations( ev );
241 ev = TodoList.next(); 250 ev = TodoList.next();
242 } 251 }
243 } 252 }
244 { 253 {
245 QPtrList<Journal> JournalList = cal->journals(); 254 QPtrList<Journal> JournalList = cal->journals();
246 Journal * ev = JournalList.first(); 255 Journal * ev = JournalList.first();
247 while ( ev ) { 256 while ( ev ) {
248 ev->unRegisterObserver( cal ); 257 ev->unRegisterObserver( cal );
249 ev->registerObserver( this ); 258 ev->registerObserver( this );
250 mJournalList.append( ev ); 259 mJournalList.append( ev );
251 ev = JournalList.next(); 260 ev = JournalList.next();
252 } 261 }
253 } 262 }
254 setModified( true ); 263 setModified( true );
255} 264}
256bool CalendarLocal::load( const QString &fileName ) 265bool CalendarLocal::load( const QString &fileName )
257{ 266{
258 FileStorage storage( this, fileName ); 267 FileStorage storage( this, fileName );
259 return storage.load(); 268 return storage.load();
260} 269}
261 270
262bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 271bool CalendarLocal::save( const QString &fileName, CalFormat *format )
263{ 272{
264 FileStorage storage( this, fileName, format ); 273 FileStorage storage( this, fileName, format );
265 return storage.save(); 274 return storage.save();
266} 275}
267 276
268void CalendarLocal::stopAllTodos() 277void CalendarLocal::stopAllTodos()
269{ 278{
270 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 279 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
271 it->setRunning( false ); 280 it->setRunning( false );
272 281
273} 282}
274void CalendarLocal::close() 283void CalendarLocal::close()
275{ 284{
276 285
277 Todo * i; 286 Todo * i;
278 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 287 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
279 288
280 mEventList.setAutoDelete( true ); 289 mEventList.setAutoDelete( true );
281 mTodoList.setAutoDelete( true ); 290 mTodoList.setAutoDelete( true );
282 mJournalList.setAutoDelete( true ); 291 mJournalList.setAutoDelete( true );
283 292
284 mEventList.clear(); 293 mEventList.clear();
285 mTodoList.clear(); 294 mTodoList.clear();
286 mJournalList.clear(); 295 mJournalList.clear();
287 296
288 mEventList.setAutoDelete( false ); 297 mEventList.setAutoDelete( false );
289 mTodoList.setAutoDelete( false ); 298 mTodoList.setAutoDelete( false );
290 mJournalList.setAutoDelete( false ); 299 mJournalList.setAutoDelete( false );
291 300
292 setModified( false ); 301 setModified( false );
293} 302}
294 303
295bool CalendarLocal::addAnniversaryNoDup( Event *event ) 304bool CalendarLocal::addAnniversaryNoDup( Event *event )
296{ 305{
297 QString cat; 306 QString cat;
298 bool isBirthday = true; 307 bool isBirthday = true;
299 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 308 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
300 isBirthday = false; 309 isBirthday = false;
301 cat = i18n( "Anniversary" ); 310 cat = i18n( "Anniversary" );
302 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 311 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
303 isBirthday = true; 312 isBirthday = true;
304 cat = i18n( "Birthday" ); 313 cat = i18n( "Birthday" );
305 } else { 314 } else {
306 qDebug("addAnniversaryNoDup called without fitting category! "); 315 qDebug("addAnniversaryNoDup called without fitting category! ");
307 return false; 316 return false;
308 } 317 }
309 Event * eve; 318 Event * eve;
310 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 319 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
311 if ( !(eve->categories().contains( cat ) )) 320 if ( !(eve->categories().contains( cat ) ))
312 continue; 321 continue;
313 // now we have an event with fitting category 322 // now we have an event with fitting category
314 if ( eve->dtStart().date() != event->dtStart().date() ) 323 if ( eve->dtStart().date() != event->dtStart().date() )
315 continue; 324 continue;
316 // now we have an event with fitting category+date 325 // now we have an event with fitting category+date
317 if ( eve->summary() != event->summary() ) 326 if ( eve->summary() != event->summary() )
318 continue; 327 continue;
319 // now we have an event with fitting category+date+summary 328 // now we have an event with fitting category+date+summary
320 return false; 329 return false;
321 } 330 }
322 return addEvent( event ); 331 return addEvent( event );
323 332
324} 333}
325bool CalendarLocal::addEventNoDup( Event *event ) 334bool CalendarLocal::addEventNoDup( Event *event )
326{ 335{
327 Event * eve; 336 Event * eve;
328 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 337 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
329 if ( *eve == *event ) { 338 if ( *eve == *event ) {
330 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 339 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
331 return false; 340 return false;
332 } 341 }
333 } 342 }
334 return addEvent( event ); 343 return addEvent( event );
335} 344}
336 345
337bool CalendarLocal::addEvent( Event *event ) 346bool CalendarLocal::addEvent( Event *event )
338{ 347{
339 insertEvent( event ); 348 insertEvent( event );
340 349
341 event->registerObserver( this ); 350 event->registerObserver( this );
342 351
343 setModified( true ); 352 setModified( true );
344 if ( event->calID() == 0 ) 353 if ( event->calID() == 0 )
345 event->setCalID_block( mDefaultCalendar ); 354 event->setCalID_block( mDefaultCalendar );
346 event->setCalEnabled( true ); 355 event->setCalEnabled( true );
347 356
348 return true; 357 return true;
349} 358}
350 359
351void CalendarLocal::deleteEvent( Event *event ) 360void CalendarLocal::deleteEvent( Event *event )
352{ 361{
353 clearUndo(event); 362 clearUndo(event);
354 if ( mEventList.removeRef( event ) ) { 363 if ( mEventList.removeRef( event ) ) {
355 setModified( true ); 364 setModified( true );
356 } 365 }
357} 366}
358 367
359 368
360Event *CalendarLocal::event( const QString &uid ) 369Event *CalendarLocal::event( const QString &uid )
361{ 370{
362 Event *event; 371 Event *event;
363 Event *retVal = 0; 372 Event *retVal = 0;
364 for ( event = mEventList.first(); event; event = mEventList.next() ) { 373 for ( event = mEventList.first(); event; event = mEventList.next() ) {
365 if ( event->calEnabled() && event->uid() == uid ) { 374 if ( event->calEnabled() && event->uid() == uid ) {
366 if ( retVal ) { 375 if ( retVal ) {
367 if ( retVal->calID() > event->calID() ) { 376 if ( retVal->calID() > event->calID() ) {
368 retVal = event; 377 retVal = event;
369 } 378 }
370 } else { 379 } else {
371 retVal = event; 380 retVal = event;
372 } 381 }
373 } 382 }
374 } 383 }
375 return retVal; 384 return retVal;
376} 385}
377bool CalendarLocal::addTodoNoDup( Todo *todo ) 386bool CalendarLocal::addTodoNoDup( Todo *todo )
378{ 387{
379 Todo * eve; 388 Todo * eve;
380 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 389 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
381 if ( *eve == *todo ) { 390 if ( *eve == *todo ) {
382 //qDebug("duplicate todo found! not inserted! "); 391 //qDebug("duplicate todo found! not inserted! ");
383 return false; 392 return false;
384 } 393 }
385 } 394 }
386 return addTodo( todo ); 395 return addTodo( todo );
387} 396}
388bool CalendarLocal::addTodo( Todo *todo ) 397bool CalendarLocal::addTodo( Todo *todo )
389{ 398{
390 mTodoList.append( todo ); 399 mTodoList.append( todo );
391 400
392 todo->registerObserver( this ); 401 todo->registerObserver( this );
393 402
394 // Set up subtask relations 403 // Set up subtask relations
395 setupRelations( todo ); 404 setupRelations( todo );
396 405
397 setModified( true ); 406 setModified( true );
398 if ( todo->calID() == 0 ) 407 if ( todo->calID() == 0 )
399 todo->setCalID_block( mDefaultCalendar ); 408 todo->setCalID_block( mDefaultCalendar );
400 todo->setCalEnabled( true ); 409 todo->setCalEnabled( true );
401 return true; 410 return true;
402} 411}
403 412
404void CalendarLocal::deleteTodo( Todo *todo ) 413void CalendarLocal::deleteTodo( Todo *todo )
405{ 414{
406 // Handle orphaned children 415 // Handle orphaned children
407 removeRelations( todo ); 416 removeRelations( todo );
408 clearUndo(todo); 417 clearUndo(todo);
409 418
410 if ( mTodoList.removeRef( todo ) ) { 419 if ( mTodoList.removeRef( todo ) ) {
411 setModified( true ); 420 setModified( true );
412 } 421 }
413} 422}
414 423
415QPtrList<Todo> CalendarLocal::rawTodos() 424QPtrList<Todo> CalendarLocal::rawTodos()
416{ 425{
417 QPtrList<Todo> el; 426 QPtrList<Todo> el;
418 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 427 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
419 if ( it->calEnabled() ) el.append( it ); 428 if ( it->calEnabled() ) el.append( it );
420 return el; 429 return el;
421} 430}
422Todo *CalendarLocal::todo( QString syncProf, QString id ) 431Todo *CalendarLocal::todo( QString syncProf, QString id )
423{ 432{
424 Todo *todo; 433 Todo *todo;
425 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 434 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
426 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 435 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
427 } 436 }
428 437
429 return 0; 438 return 0;
430} 439}
431void CalendarLocal::removeSyncInfo( QString syncProfile) 440void CalendarLocal::removeSyncInfo( QString syncProfile)
432{ 441{
433 QPtrList<Incidence> all = rawIncidences() ; 442 QPtrList<Incidence> all = rawIncidences() ;
434 Incidence *inc; 443 Incidence *inc;
435 for ( inc = all.first(); inc; inc = all.next() ) { 444 for ( inc = all.first(); inc; inc = all.next() ) {
436 inc->removeID( syncProfile ); 445 inc->removeID( syncProfile );
437 } 446 }
438 if ( syncProfile.isEmpty() ) { 447 if ( syncProfile.isEmpty() ) {
439 QPtrList<Event> el; 448 QPtrList<Event> el;
440 Event *todo; 449 Event *todo;
441 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 450 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
442 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 451 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
443 el.append( todo ); 452 el.append( todo );
444 } 453 }
445 for ( todo = el.first(); todo; todo = el.next() ) { 454 for ( todo = el.first(); todo; todo = el.next() ) {
446 deleteIncidence ( todo ); 455 deleteIncidence ( todo );
447 } 456 }
448 } else { 457 } else {
449 Event *lse = event( "last-syncEvent-"+ syncProfile); 458 Event *lse = event( "last-syncEvent-"+ syncProfile);
450 if ( lse ) 459 if ( lse )
451 deleteIncidence ( lse ); 460 deleteIncidence ( lse );
452 } 461 }
453} 462}
454QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 463QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
455{ 464{
456 QPtrList<Event> el; 465 QPtrList<Event> el;
457 Event *todo; 466 Event *todo;
458 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 467 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
459 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 468 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
460 if ( todo->summary().left(3) == "E: " ) 469 if ( todo->summary().left(3) == "E: " )
461 el.append( todo ); 470 el.append( todo );
462 } 471 }
463 472
464 return el; 473 return el;
465 474
466} 475}
467Event *CalendarLocal::event( QString syncProf, QString id ) 476Event *CalendarLocal::event( QString syncProf, QString id )
468{ 477{
469 Event *todo; 478 Event *todo;
470 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 479 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
471 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 480 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
472 } 481 }
473 482
474 return 0; 483 return 0;
475} 484}
476Todo *CalendarLocal::todo( const QString &uid ) 485Todo *CalendarLocal::todo( const QString &uid )
477{ 486{
478 Todo *todo; 487 Todo *todo;
479 Todo *retVal = 0; 488 Todo *retVal = 0;
480 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 489 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
481 if ( todo->calEnabled() && todo->uid() == uid ) { 490 if ( todo->calEnabled() && todo->uid() == uid ) {
482 if ( retVal ) { 491 if ( retVal ) {
483 if ( retVal->calID() > todo->calID() ) { 492 if ( retVal->calID() > todo->calID() ) {
484 retVal = todo; 493 retVal = todo;
485 } 494 }
486 } else { 495 } else {
487 retVal = todo; 496 retVal = todo;
488 } 497 }
489 } 498 }
490 } 499 }
491 return retVal; 500 return retVal;
492} 501}
493void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals) 502void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals)
494{ 503{
495 events = 0; 504 events = 0;
496 todos = 0; 505 todos = 0;
497 journals = 0; 506 journals = 0;
498 { 507 {
499 Todo *todo; 508 Todo *todo;
500 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 509 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
501 if ( todo->calID() == calId ) 510 if ( todo->calID() == calId )
502 ++todos; 511 ++todos;
503 } 512 }
504 } 513 }
505 { 514 {
506 Event *todo; 515 Event *todo;
507 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 516 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
508 if ( todo->calID() == calId ) 517 if ( todo->calID() == calId )
509 ++events; 518 ++events;
510 519
511 } 520 }
512 } 521 }
513 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 522 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
514 if ( it->calID() == calId ) ++journals; 523 if ( it->calID() == calId ) ++journals;
515 524
516} 525}
517QString CalendarLocal::nextSummary() const 526QString CalendarLocal::nextSummary() const
518{ 527{
519 return mNextSummary; 528 return mNextSummary;
520} 529}
521QDateTime CalendarLocal::nextAlarmEventDateTime() const 530QDateTime CalendarLocal::nextAlarmEventDateTime() const
522{ 531{
523 return mNextAlarmEventDateTime; 532 return mNextAlarmEventDateTime;
524} 533}
525void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 534void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
526{ 535{
527 //mNextAlarmIncidence 536 //mNextAlarmIncidence
528 //mNextAlarmDateTime 537 //mNextAlarmDateTime
529 //return mNextSummary; 538 //return mNextSummary;
530 //return mNextAlarmEventDateTime; 539 //return mNextAlarmEventDateTime;
531 bool newNextAlarm = false; 540 bool newNextAlarm = false;
532 bool computeNextAlarm = false; 541 bool computeNextAlarm = false;
533 bool ok; 542 bool ok;
534 int offset; 543 int offset;
535 QDateTime nextA; 544 QDateTime nextA;
536 // QString nextSum; 545 // QString nextSum;
537 //QDateTime nextEvent; 546 //QDateTime nextEvent;
538 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 547 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
539 computeNextAlarm = true; 548 computeNextAlarm = true;
540 } else { 549 } else {
541 if ( ! deleted ) { 550 if ( ! deleted ) {
542 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 551 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
543 if ( ok ) { 552 if ( ok ) {
544 if ( nextA < mNextAlarmDateTime ) { 553 if ( nextA < mNextAlarmDateTime ) {
545 deRegisterAlarm(); 554 deRegisterAlarm();
546 mNextAlarmDateTime = nextA; 555 mNextAlarmDateTime = nextA;
547 mNextSummary = incidence->summary(); 556 mNextSummary = incidence->summary();
548 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 557 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
549 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 558 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
550 newNextAlarm = true; 559 newNextAlarm = true;
551 mNextAlarmIncidence = incidence; 560 mNextAlarmIncidence = incidence;
552 } else { 561 } else {
553 if ( incidence == mNextAlarmIncidence ) { 562 if ( incidence == mNextAlarmIncidence ) {
554 computeNextAlarm = true; 563 computeNextAlarm = true;
555 } 564 }
556 } 565 }
557 } else { 566 } else {
558 if ( mNextAlarmIncidence == incidence ) { 567 if ( mNextAlarmIncidence == incidence ) {
559 computeNextAlarm = true; 568 computeNextAlarm = true;
560 } 569 }
561 } 570 }
562 } else { // deleted 571 } else { // deleted
563 if ( incidence == mNextAlarmIncidence ) { 572 if ( incidence == mNextAlarmIncidence ) {
564 computeNextAlarm = true; 573 computeNextAlarm = true;
565 } 574 }
566 } 575 }
567 } 576 }
568 if ( computeNextAlarm ) { 577 if ( computeNextAlarm ) {
569 deRegisterAlarm(); 578 deRegisterAlarm();
570 nextA = nextAlarm( 1000 ); 579 nextA = nextAlarm( 1000 );
571 if (! mNextAlarmIncidence ) { 580 if (! mNextAlarmIncidence ) {
572 return; 581 return;
573 } 582 }
574 newNextAlarm = true; 583 newNextAlarm = true;
575 } 584 }
576 if ( newNextAlarm ) 585 if ( newNextAlarm )
577 registerAlarm(); 586 registerAlarm();
578} 587}
579QString CalendarLocal:: getAlarmNotification() 588QString CalendarLocal:: getAlarmNotification()
580{ 589{
581 QString ret; 590 QString ret;
582 // this should not happen 591 // this should not happen
583 if (! mNextAlarmIncidence ) 592 if (! mNextAlarmIncidence )
584 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 593 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
585 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 594 Alarm* alarm = mNextAlarmIncidence->alarms().first();
586 if ( alarm->type() == Alarm::Procedure ) { 595 if ( alarm->type() == Alarm::Procedure ) {
587 ret = "proc_alarm" + alarm->programFile()+"+++"; 596 ret = "proc_alarm" + alarm->programFile()+"+++";
588 } else { 597 } else {
589 ret = "audio_alarm" +alarm->audioFile() +"+++"; 598 ret = "audio_alarm" +alarm->audioFile() +"+++";
590 } 599 }
591 ret += "cal_alarm"+ mNextSummary.left( 25 ); 600 ret += "cal_alarm"+ mNextSummary.left( 25 );
592 if ( mNextSummary.length() > 25 ) 601 if ( mNextSummary.length() > 25 )
593 ret += "\n" + mNextSummary.mid(25, 25 ); 602 ret += "\n" + mNextSummary.mid(25, 25 );
594 ret+= "\n"+mNextAlarmEventDateTimeString; 603 ret+= "\n"+mNextAlarmEventDateTimeString;
595 return ret; 604 return ret;
596} 605}
597void CalendarLocal::registerAlarm() 606void CalendarLocal::registerAlarm()
598{ 607{
599 mLastAlarmNotificationString = getAlarmNotification(); 608 mLastAlarmNotificationString = getAlarmNotification();
600 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 609 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
601 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 610 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
602// #ifndef DESKTOP_VERSION 611// #ifndef DESKTOP_VERSION
603// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 612// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
604// #endif 613// #endif
605} 614}
606void CalendarLocal::deRegisterAlarm() 615void CalendarLocal::deRegisterAlarm()
607{ 616{
608 if ( mLastAlarmNotificationString.isNull() ) 617 if ( mLastAlarmNotificationString.isNull() )
609 return; 618 return;
610 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 619 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
611 620
612 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 621 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
613 mNextAlarmEventDateTime = QDateTime(); 622 mNextAlarmEventDateTime = QDateTime();
614// #ifndef DESKTOP_VERSION 623// #ifndef DESKTOP_VERSION
615// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 624// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
616// #endif 625// #endif
617} 626}
618 627
619QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 628QPtrList<Todo> CalendarLocal::todos( const QDate &date )
620{ 629{
621 QPtrList<Todo> todos; 630 QPtrList<Todo> todos;
622 631
623 Todo *todo; 632 Todo *todo;
624 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 633 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
625 if ( !todo->calEnabled() ) continue; 634 if ( !todo->calEnabled() ) continue;
626 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 635 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
627 todos.append( todo ); 636 todos.append( todo );
628 } 637 }
629 } 638 }
630 639
631 filter()->apply( &todos ); 640 filter()->apply( &todos );
632 return todos; 641 return todos;
633} 642}
634void CalendarLocal::reInitAlarmSettings() 643void CalendarLocal::reInitAlarmSettings()
635{ 644{
636 if ( !mNextAlarmIncidence ) { 645 if ( !mNextAlarmIncidence ) {
637 nextAlarm( 1000 ); 646 nextAlarm( 1000 );
638 } 647 }
639 deRegisterAlarm(); 648 deRegisterAlarm();
640 mNextAlarmIncidence = 0; 649 mNextAlarmIncidence = 0;
641 checkAlarmForIncidence( 0, false ); 650 checkAlarmForIncidence( 0, false );
642 651
643} 652}
644 653
645 654
646 655
647QDateTime CalendarLocal::nextAlarm( int daysTo ) 656QDateTime CalendarLocal::nextAlarm( int daysTo )
648{ 657{
649 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 658 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
650 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 659 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
651 QDateTime next; 660 QDateTime next;
652 Event *e; 661 Event *e;
653 bool ok; 662 bool ok;
654 bool found = false; 663 bool found = false;
655 int offset; 664 int offset;
656 mNextAlarmIncidence = 0; 665 mNextAlarmIncidence = 0;
657 for( e = mEventList.first(); e; e = mEventList.next() ) { 666 for( e = mEventList.first(); e; e = mEventList.next() ) {
658 if ( !e->calEnabled() ) continue; 667 if ( !e->calEnabled() ) continue;
659 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 668 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
660 if ( ok ) { 669 if ( ok ) {
661 if ( next < nextA ) { 670 if ( next < nextA ) {
662 nextA = next; 671 nextA = next;
663 found = true; 672 found = true;
664 mNextSummary = e->summary(); 673 mNextSummary = e->summary();
665 mNextAlarmEventDateTime = next.addSecs(offset ) ; 674 mNextAlarmEventDateTime = next.addSecs(offset ) ;
666 mNextAlarmIncidence = (Incidence *) e; 675 mNextAlarmIncidence = (Incidence *) e;
667 } 676 }
668 } 677 }
669 } 678 }
670 Todo *t; 679 Todo *t;
671 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 680 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
672 if ( !t->calEnabled() ) continue; 681 if ( !t->calEnabled() ) continue;
673 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 682 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
674 if ( ok ) { 683 if ( ok ) {
675 if ( next < nextA ) { 684 if ( next < nextA ) {
676 nextA = next; 685 nextA = next;
677 found = true; 686 found = true;
678 mNextSummary = t->summary(); 687 mNextSummary = t->summary();
679 mNextAlarmEventDateTime = next.addSecs(offset ); 688 mNextAlarmEventDateTime = next.addSecs(offset );
680 mNextAlarmIncidence = (Incidence *) t; 689 mNextAlarmIncidence = (Incidence *) t;
681 } 690 }
682 } 691 }
683 } 692 }
684 if ( mNextAlarmIncidence ) { 693 if ( mNextAlarmIncidence ) {
685 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 694 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
686 mNextAlarmDateTime = nextA; 695 mNextAlarmDateTime = nextA;
687 } 696 }
688 return nextA; 697 return nextA;
689} 698}
690Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 699Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
691{ 700{
692 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 701 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
693} 702}
694 703
695Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 704Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
696{ 705{
697 706
698 Alarm::List alarms; 707 Alarm::List alarms;
699 708
700 Event *e; 709 Event *e;
701 710
702 for( e = mEventList.first(); e; e = mEventList.next() ) { 711 for( e = mEventList.first(); e; e = mEventList.next() ) {
703 if ( !e->calEnabled() ) continue; 712 if ( !e->calEnabled() ) continue;
704 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 713 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
705 else appendAlarms( alarms, e, from, to ); 714 else appendAlarms( alarms, e, from, to );
706 } 715 }
707 716
708 Todo *t; 717 Todo *t;
709 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 718 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
710 if ( !t->calEnabled() ) continue; 719 if ( !t->calEnabled() ) continue;
711 appendAlarms( alarms, t, from, to ); 720 appendAlarms( alarms, t, from, to );
712 } 721 }
713 722
714 return alarms; 723 return alarms;
715} 724}
716 725
717void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 726void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
718 const QDateTime &from, const QDateTime &to ) 727 const QDateTime &from, const QDateTime &to )
719{ 728{
720 QPtrList<Alarm> alarmList = incidence->alarms(); 729 QPtrList<Alarm> alarmList = incidence->alarms();
721 Alarm *alarm; 730 Alarm *alarm;
722 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 731 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
723// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 732// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
724// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 733// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
725 if ( alarm->enabled() ) { 734 if ( alarm->enabled() ) {
726 if ( alarm->time() >= from && alarm->time() <= to ) { 735 if ( alarm->time() >= from && alarm->time() <= to ) {
727 alarms.append( alarm ); 736 alarms.append( alarm );
728 } 737 }
729 } 738 }
730 } 739 }
731} 740}
732 741
733void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 742void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
734 Incidence *incidence, 743 Incidence *incidence,
735 const QDateTime &from, 744 const QDateTime &from,
736 const QDateTime &to ) 745 const QDateTime &to )
737{ 746{
738 747
739 QPtrList<Alarm> alarmList = incidence->alarms(); 748 QPtrList<Alarm> alarmList = incidence->alarms();
740 Alarm *alarm; 749 Alarm *alarm;
741 QDateTime qdt; 750 QDateTime qdt;
742 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 751 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
743 if (incidence->recursOn(from.date())) { 752 if (incidence->recursOn(from.date())) {
744 qdt.setTime(alarm->time().time()); 753 qdt.setTime(alarm->time().time());
745 qdt.setDate(from.date()); 754 qdt.setDate(from.date());
746 } 755 }
747 else qdt = alarm->time(); 756 else qdt = alarm->time();
748 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 757 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
749 if ( alarm->enabled() ) { 758 if ( alarm->enabled() ) {
750 if ( qdt >= from && qdt <= to ) { 759 if ( qdt >= from && qdt <= to ) {
751 alarms.append( alarm ); 760 alarms.append( alarm );
752 } 761 }
753 } 762 }
754 } 763 }
755} 764}
756 765
757 766
758/****************************** PROTECTED METHODS ****************************/ 767/****************************** PROTECTED METHODS ****************************/
759 768
760// after changes are made to an event, this should be called. 769// after changes are made to an event, this should be called.
761void CalendarLocal::update( IncidenceBase *incidence ) 770void CalendarLocal::update( IncidenceBase *incidence )
762{ 771{
763 incidence->setSyncStatus( Event::SYNCMOD ); 772 incidence->setSyncStatus( Event::SYNCMOD );
764 incidence->setLastModified( QDateTime::currentDateTime() ); 773 incidence->setLastModified( QDateTime::currentDateTime() );
765 // we should probably update the revision number here, 774 // we should probably update the revision number here,
766 // or internally in the Event itself when certain things change. 775 // or internally in the Event itself when certain things change.
767 // need to verify with ical documentation. 776 // need to verify with ical documentation.
768 777
769 setModified( true ); 778 setModified( true );
770} 779}
771 780
772void CalendarLocal::insertEvent( Event *event ) 781void CalendarLocal::insertEvent( Event *event )
773{ 782{
774 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 783 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
775} 784}
776 785
777 786
778QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 787QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
779{ 788{
780 QPtrList<Event> eventList; 789 QPtrList<Event> eventList;
781 790
782 Event *event; 791 Event *event;
783 for( event = mEventList.first(); event; event = mEventList.next() ) { 792 for( event = mEventList.first(); event; event = mEventList.next() ) {
784 if ( !event->calEnabled() ) continue; 793 if ( !event->calEnabled() ) continue;
785 if ( event->doesRecur() ) { 794 if ( event->doesRecur() ) {
786 if ( event->isMultiDay() ) { 795 if ( event->isMultiDay() ) {
787 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 796 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
788 int i; 797 int i;
789 for ( i = 0; i <= extraDays; i++ ) { 798 for ( i = 0; i <= extraDays; i++ ) {
790 if ( event->recursOn( qd.addDays( -i ) ) ) { 799 if ( event->recursOn( qd.addDays( -i ) ) ) {
791 eventList.append( event ); 800 eventList.append( event );
792 break; 801 break;
793 } 802 }
794 } 803 }
795 } else { 804 } else {
796 if ( event->recursOn( qd ) ) 805 if ( event->recursOn( qd ) )
797 eventList.append( event ); 806 eventList.append( event );
798 } 807 }
799 } else { 808 } else {
800 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 809 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
801 eventList.append( event ); 810 eventList.append( event );
802 } 811 }
803 } 812 }
804 } 813 }
805 814
806 if ( !sorted ) { 815 if ( !sorted ) {
807 return eventList; 816 return eventList;
808 } 817 }
809 818
810 // kdDebug(5800) << "Sorting events for date\n" << endl; 819 // kdDebug(5800) << "Sorting events for date\n" << endl;
811 // now, we have to sort it based on dtStart.time() 820 // now, we have to sort it based on dtStart.time()
812 QPtrList<Event> eventListSorted; 821 QPtrList<Event> eventListSorted;
813 Event *sortEvent; 822 Event *sortEvent;
814 for ( event = eventList.first(); event; event = eventList.next() ) { 823 for ( event = eventList.first(); event; event = eventList.next() ) {
815 sortEvent = eventListSorted.first(); 824 sortEvent = eventListSorted.first();
816 int i = 0; 825 int i = 0;
817 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 826 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
818 { 827 {
819 i++; 828 i++;
820 sortEvent = eventListSorted.next(); 829 sortEvent = eventListSorted.next();
821 } 830 }
822 eventListSorted.insert( i, event ); 831 eventListSorted.insert( i, event );
823 } 832 }
824 return eventListSorted; 833 return eventListSorted;
825} 834}
826 835
827 836
828QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 837QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
829 bool inclusive ) 838 bool inclusive )
830{ 839{
831 Event *event = 0; 840 Event *event = 0;
832 841
833 QPtrList<Event> eventList; 842 QPtrList<Event> eventList;
834 843
835 // Get non-recurring events 844 // Get non-recurring events
836 for( event = mEventList.first(); event; event = mEventList.next() ) { 845 for( event = mEventList.first(); event; event = mEventList.next() ) {
837 if ( !event->calEnabled() ) continue; 846 if ( !event->calEnabled() ) continue;
838 if ( event->doesRecur() ) { 847 if ( event->doesRecur() ) {
839 QDate rStart = event->dtStart().date(); 848 QDate rStart = event->dtStart().date();
840 bool found = false; 849 bool found = false;
841 if ( inclusive ) { 850 if ( inclusive ) {
842 if ( rStart >= start && rStart <= end ) { 851 if ( rStart >= start && rStart <= end ) {
843 // Start date of event is in range. Now check for end date. 852 // Start date of event is in range. Now check for end date.
844 // if duration is negative, event recurs forever, so do not include it. 853 // if duration is negative, event recurs forever, so do not include it.
845 if ( event->recurrence()->duration() == 0 ) { // End date set 854 if ( event->recurrence()->duration() == 0 ) { // End date set
846 QDate rEnd = event->recurrence()->endDate(); 855 QDate rEnd = event->recurrence()->endDate();
847 if ( rEnd >= start && rEnd <= end ) { // End date within range 856 if ( rEnd >= start && rEnd <= end ) { // End date within range
848 found = true; 857 found = true;
849 } 858 }
850 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 859 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
851 // TODO: Calculate end date from duration. Should be done in Event 860 // TODO: Calculate end date from duration. Should be done in Event
852 // For now exclude all events with a duration. 861 // For now exclude all events with a duration.
853 } 862 }
854 } 863 }
855 } else { 864 } else {
856 bool founOne; 865 bool founOne;
857 QDate next = event->getNextOccurence( start, &founOne ).date(); 866 QDate next = event->getNextOccurence( start, &founOne ).date();
858 if ( founOne ) { 867 if ( founOne ) {
859 if ( next <= end ) { 868 if ( next <= end ) {
860 found = true; 869 found = true;
861 } 870 }
862 } 871 }
863 872
864 /* 873 /*
865 // crap !!! 874 // crap !!!
866 if ( rStart <= end ) { // Start date not after range 875 if ( rStart <= end ) { // Start date not after range
867 if ( rStart >= start ) { // Start date within range 876 if ( rStart >= start ) { // Start date within range
868 found = true; 877 found = true;
869 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 878 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
870 found = true; 879 found = true;
871 } else if ( event->recurrence()->duration() == 0 ) { // End date set 880 } else if ( event->recurrence()->duration() == 0 ) { // End date set
872 QDate rEnd = event->recurrence()->endDate(); 881 QDate rEnd = event->recurrence()->endDate();
873 if ( rEnd >= start && rEnd <= end ) { // End date within range 882 if ( rEnd >= start && rEnd <= end ) { // End date within range
874 found = true; 883 found = true;
875 } 884 }
876 } else { // Duration set 885 } else { // Duration set
877 // TODO: Calculate end date from duration. Should be done in Event 886 // TODO: Calculate end date from duration. Should be done in Event
878 // For now include all events with a duration. 887 // For now include all events with a duration.
879 found = true; 888 found = true;
880 } 889 }
881 } 890 }
882 */ 891 */
883 892
884 } 893 }
885 894
886 if ( found ) eventList.append( event ); 895 if ( found ) eventList.append( event );
887 } else { 896 } else {
888 QDate s = event->dtStart().date(); 897 QDate s = event->dtStart().date();
889 QDate e = event->dtEnd().date(); 898 QDate e = event->dtEnd().date();
890 899
891 if ( inclusive ) { 900 if ( inclusive ) {
892 if ( s >= start && e <= end ) { 901 if ( s >= start && e <= end ) {
893 eventList.append( event ); 902 eventList.append( event );
894 } 903 }
895 } else { 904 } else {
896 if ( ( e >= start && s <= end ) ) { 905 if ( ( e >= start && s <= end ) ) {
897 eventList.append( event ); 906 eventList.append( event );
898 } 907 }
899 } 908 }
900 } 909 }
901 } 910 }
902 911
903 return eventList; 912 return eventList;
904} 913}
905 914
906QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 915QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
907{ 916{
908 return rawEventsForDate( qdt.date() ); 917 return rawEventsForDate( qdt.date() );
909} 918}
910 919
911QPtrList<Event> CalendarLocal::rawEvents() 920QPtrList<Event> CalendarLocal::rawEvents()
912{ 921{
913 QPtrList<Event> el; 922 QPtrList<Event> el;
914 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 923 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
915 if ( it->calEnabled() ) el.append( it ); 924 if ( it->calEnabled() ) el.append( it );
916 return el; 925 return el;
917} 926}
918 927
919bool CalendarLocal::addJournal(Journal *journal) 928bool CalendarLocal::addJournal(Journal *journal)
920{ 929{
921 mJournalList.append(journal); 930 mJournalList.append(journal);
922 931
923 journal->registerObserver( this ); 932 journal->registerObserver( this );
924 933
925 setModified( true ); 934 setModified( true );
926 if ( journal->calID() == 0 ) 935 if ( journal->calID() == 0 )
927 journal->setCalID_block( mDefaultCalendar ); 936 journal->setCalID_block( mDefaultCalendar );
928 journal->setCalEnabled( true ); 937 journal->setCalEnabled( true );
929 return true; 938 return true;
930} 939}
931 940
932void CalendarLocal::deleteJournal( Journal *journal ) 941void CalendarLocal::deleteJournal( Journal *journal )
933{ 942{
934 clearUndo(journal); 943 clearUndo(journal);
935 if ( mJournalList.removeRef(journal) ) { 944 if ( mJournalList.removeRef(journal) ) {
936 setModified( true ); 945 setModified( true );
937 } 946 }
938} 947}
939 948
940QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date ) 949QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date )
941{ 950{
942 QPtrList<Journal> el; 951 QPtrList<Journal> el;
943 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 952 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
944 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it ); 953 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it );
945 return el; 954 return el;
946} 955}
947Journal *CalendarLocal::journal( const QDate &date ) 956Journal *CalendarLocal::journal( const QDate &date )
948{ 957{
949// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 958// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
950 959
951 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 960 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
952 if ( it->calEnabled() && it->dtStart().date() == date ) 961 if ( it->calEnabled() && it->dtStart().date() == date )
953 return it; 962 return it;
954 963
955 return 0; 964 return 0;
956} 965}
957 966
958Journal *CalendarLocal::journal( const QString &uid ) 967Journal *CalendarLocal::journal( const QString &uid )
959{ 968{
960 Journal * retVal = 0; 969 Journal * retVal = 0;
961 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 970 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
962 if ( it->calEnabled() && it->uid() == uid ) { 971 if ( it->calEnabled() && it->uid() == uid ) {
963 if ( retVal ) { 972 if ( retVal ) {
964 if ( retVal->calID() > it->calID() ) { 973 if ( retVal->calID() > it->calID() ) {
965 retVal = it; 974 retVal = it;
966 } 975 }
967 } else { 976 } else {
968 retVal = it; 977 retVal = it;
969 } 978 }
970 } 979 }
971 return retVal; 980 return retVal;
972} 981}
973 982
974QPtrList<Journal> CalendarLocal::journals() 983QPtrList<Journal> CalendarLocal::journals()
975{ 984{
976 QPtrList<Journal> el; 985 QPtrList<Journal> el;
977 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 986 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
978 if ( it->calEnabled() ) el.append( it ); 987 if ( it->calEnabled() ) el.append( it );
979 return el; 988 return el;
980} 989}
981void CalendarLocal::setCalendarRemove( int id ) 990void CalendarLocal::setCalendarRemove( int id )
982{ 991{
983 992
984 { 993 {
985 QPtrList<Event> EventList = mEventList; 994 QPtrList<Event> EventList = mEventList;
986 Event * ev = EventList.first(); 995 Event * ev = EventList.first();
987 while ( ev ) { 996 while ( ev ) {
988 if ( ev->calID() == id && ev->uid().left( 15 ) != QString("last-syncEvent-") ) 997 if ( ev->calID() == id && ev->uid().left( 15 ) != QString("last-syncEvent-") )
989 deleteEvent( ev ); 998 deleteEvent( ev );
990 ev = EventList.next(); 999 ev = EventList.next();
991 } 1000 }
992 } 1001 }
993 { 1002 {
994 1003
995 QPtrList<Todo> TodoList = mTodoList; 1004 QPtrList<Todo> TodoList = mTodoList;
996 Todo * ev = TodoList.first(); 1005 Todo * ev = TodoList.first();
997 while ( ev ) { 1006 while ( ev ) {
998 if ( ev->calID() == id ) 1007 if ( ev->calID() == id )
999 deleteTodo( ev ); 1008 deleteTodo( ev );
1000 ev = TodoList.next(); 1009 ev = TodoList.next();
1001 } 1010 }
1002 } 1011 }
1003 { 1012 {
1004 QPtrList<Journal> JournalList = mJournalList; 1013 QPtrList<Journal> JournalList = mJournalList;
1005 Journal * ev = JournalList.first(); 1014 Journal * ev = JournalList.first();
1006 while ( ev ) { 1015 while ( ev ) {
1007 if ( ev->calID() == id ) 1016 if ( ev->calID() == id )
1008 deleteJournal( ev ); 1017 deleteJournal( ev );
1009 ev = JournalList.next(); 1018 ev = JournalList.next();
1010 } 1019 }
1011 } 1020 }
1012 1021
1013 clearUndo(0); 1022 clearUndo(0);
1014 1023
1015} 1024}
1016 1025
1017void CalendarLocal::setAllCalendarEnabled( bool enable ) 1026void CalendarLocal::setAllCalendarEnabled( bool enable )
1018{ 1027{
1019 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1028 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1020 it->setCalEnabled( enable ); 1029 it->setCalEnabled( enable );
1021 1030
1022 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1031 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1023 it->setCalEnabled( enable ); 1032 it->setCalEnabled( enable );
1024 1033
1025 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1034 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1026 it->setCalEnabled( enable ); 1035 it->setCalEnabled( enable );
1027 1036
1028 1037
1029} 1038}
1030void CalendarLocal::setCalendarEnabled( int id, bool enable ) 1039void CalendarLocal::setCalendarEnabled( int id, bool enable )
1031{ 1040{
1032 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1041 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1033 if ( it->calID() == id ) it->setCalEnabled( enable ); 1042 if ( it->calID() == id ) it->setCalEnabled( enable );
1034 1043
1035 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1044 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1036 if ( it->calID() == id ) it->setCalEnabled( enable ); 1045 if ( it->calID() == id ) it->setCalEnabled( enable );
1037 1046
1038 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1047 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1039 if ( it->calID() == id ) it->setCalEnabled( enable ); 1048 if ( it->calID() == id ) it->setCalEnabled( enable );
1040 1049
1041} 1050}
1042 1051
1043void CalendarLocal::setReadOnly( int id, bool enable ) 1052void CalendarLocal::setReadOnly( int id, bool enable )
1044{ 1053{
1045 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1054 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1046 if ( it->calID() == id ) it->setReadOnly( enable ); 1055 if ( it->calID() == id ) it->setReadOnly( enable );
1047 1056
1048 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1057 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1049 if ( it->calID() == id ) it->setReadOnly( enable ); 1058 if ( it->calID() == id ) it->setReadOnly( enable );
1050 1059
1051 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1060 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1052 if ( it->calID() == id ) it->setReadOnly( enable ); 1061 if ( it->calID() == id ) it->setReadOnly( enable );
1053 1062
1054} 1063}
1055 1064
1056void CalendarLocal::setAlarmEnabled( int id, bool enable ) 1065void CalendarLocal::setAlarmEnabled( int id, bool enable )
1057{ 1066{
1058 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1067 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1059 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1068 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1060 1069
1061 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1070 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1062 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1071 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1063 1072
1064 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1073 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1065 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1074 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1066 reInitAlarmSettings(); 1075 reInitAlarmSettings();
1067 1076
1068} 1077}
1069void CalendarLocal::setDefaultCalendarEnabledOnly() 1078void CalendarLocal::setDefaultCalendarEnabledOnly()
1070{ 1079{
1071 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1080 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1072 it->setCalEnabled( it->calID() == mDefaultCalendar ); 1081 it->setCalEnabled( it->calID() == mDefaultCalendar );
1073 1082
1074 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1083 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1075 it->setCalEnabled( it->calID() == mDefaultCalendar); 1084 it->setCalEnabled( it->calID() == mDefaultCalendar);
1076 1085
1077 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1086 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1078 it->setCalEnabled( it->calID() == mDefaultCalendar); 1087 it->setCalEnabled( it->calID() == mDefaultCalendar);
1079 1088
1080} 1089}
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index b70f0c9..b611704 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,233 +1,233 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 void addCalendar( Calendar* ); 46 void addCalendar( Calendar* );
47 bool addCalendarFile( QString name, int id ); 47 bool addCalendarFile( QString name, int id );
48 bool mergeCalendarFile( QString name ); 48 bool mergeCalendarFile( QString name );
49 bool mergeCalendar( Calendar* cal ); 49 bool mergeCalendar( Calendar* cal );
50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ); 50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates, bool enabledOnly = false );
51 void setSyncEventsReadOnly(); 51 void setSyncEventsReadOnly();
52 void setSyncEventsEnabled(); 52 void setSyncEventsEnabled();
53 void stopAllTodos(); 53 void stopAllTodos();
54 /** 54 /**
55 Loads a calendar on disk in vCalendar or iCalendar format into the current 55 Loads a calendar on disk in vCalendar or iCalendar format into the current
56 calendar. Any information already present is lost. 56 calendar. Any information already present is lost.
57 @return true, if successfull, false on error. 57 @return true, if successfull, false on error.
58 @param fileName the name of the calendar on disk. 58 @param fileName the name of the calendar on disk.
59 */ 59 */
60 bool load( const QString &fileName ); 60 bool load( const QString &fileName );
61 /** 61 /**
62 Writes out the calendar to disk in the specified \a format. 62 Writes out the calendar to disk in the specified \a format.
63 CalendarLocal takes ownership of the CalFormat object. 63 CalendarLocal takes ownership of the CalFormat object.
64 @return true, if successfull, false on error. 64 @return true, if successfull, false on error.
65 @param fileName the name of the file 65 @param fileName the name of the file
66 */ 66 */
67 bool save( const QString &fileName, CalFormat *format = 0 ); 67 bool save( const QString &fileName, CalFormat *format = 0 );
68 68
69 /** 69 /**
70 Clears out the current calendar, freeing all used memory etc. etc. 70 Clears out the current calendar, freeing all used memory etc. etc.
71 */ 71 */
72 void close(); 72 void close();
73 73
74 void save() {} 74 void save() {}
75 75
76 /** 76 /**
77 Add Event to calendar. 77 Add Event to calendar.
78 */ 78 */
79 void removeSyncInfo( QString syncProfile); 79 void removeSyncInfo( QString syncProfile);
80 bool addAnniversaryNoDup( Event *event ); 80 bool addAnniversaryNoDup( Event *event );
81 bool addEventNoDup( Event *event ); 81 bool addEventNoDup( Event *event );
82 bool addEvent( Event *event ); 82 bool addEvent( Event *event );
83 /** 83 /**
84 Deletes an event from this calendar. 84 Deletes an event from this calendar.
85 */ 85 */
86 void deleteEvent( Event *event ); 86 void deleteEvent( Event *event );
87 87
88 /** 88 /**
89 Retrieves an event on the basis of the unique string ID. 89 Retrieves an event on the basis of the unique string ID.
90 */ 90 */
91 Event *event( const QString &uid ); 91 Event *event( const QString &uid );
92 /** 92 /**
93 Return unfiltered list of all events in calendar. 93 Return unfiltered list of all events in calendar.
94 */ 94 */
95 QPtrList<Event> rawEvents(); 95 QPtrList<Event> rawEvents();
96 QPtrList<Event> getExternLastSyncEvents(); 96 QPtrList<Event> getExternLastSyncEvents();
97 /** 97 /**
98 Add a todo to the todolist. 98 Add a todo to the todolist.
99 */ 99 */
100 bool addTodo( Todo *todo ); 100 bool addTodo( Todo *todo );
101 bool addTodoNoDup( Todo *todo ); 101 bool addTodoNoDup( Todo *todo );
102 /** 102 /**
103 Remove a todo from the todolist. 103 Remove a todo from the todolist.
104 */ 104 */
105 void deleteTodo( Todo * ); 105 void deleteTodo( Todo * );
106 /** 106 /**
107 Searches todolist for an event with this unique string identifier, 107 Searches todolist for an event with this unique string identifier,
108 returns a pointer or null. 108 returns a pointer or null.
109 */ 109 */
110 Todo *todo( const QString &uid ); 110 Todo *todo( const QString &uid );
111 /** 111 /**
112 Return list of all todos. 112 Return list of all todos.
113 */ 113 */
114 QPtrList<Todo> rawTodos(); 114 QPtrList<Todo> rawTodos();
115 /** 115 /**
116 Returns list of todos due on the specified date. 116 Returns list of todos due on the specified date.
117 */ 117 */
118 QPtrList<Todo> todos( const QDate &date ); 118 QPtrList<Todo> todos( const QDate &date );
119 /** 119 /**
120 Return list of all todos. 120 Return list of all todos.
121 121
122 Workaround because compiler does not recognize function of base class. 122 Workaround because compiler does not recognize function of base class.
123 */ 123 */
124 QPtrList<Todo> todos() { return Calendar::todos(); } 124 QPtrList<Todo> todos() { return Calendar::todos(); }
125 125
126 /** 126 /**
127 Add a Journal entry to calendar. 127 Add a Journal entry to calendar.
128 */ 128 */
129 bool addJournal( Journal * ); 129 bool addJournal( Journal * );
130 /** 130 /**
131 Remove a Journal from the calendar. 131 Remove a Journal from the calendar.
132 */ 132 */
133 void deleteJournal( Journal * ); 133 void deleteJournal( Journal * );
134 /** 134 /**
135 Return Journal for given date. 135 Return Journal for given date.
136 */ 136 */
137 Journal *journal( const QDate & ); 137 Journal *journal( const QDate & );
138 QPtrList<Journal> journals4Date( const QDate & ); 138 QPtrList<Journal> journals4Date( const QDate & );
139 /** 139 /**
140 Return Journal with given UID. 140 Return Journal with given UID.
141 */ 141 */
142 Journal *journal( const QString &uid ); 142 Journal *journal( const QString &uid );
143 /** 143 /**
144 Return list of all Journals stored in calendar. 144 Return list of all Journals stored in calendar.
145 */ 145 */
146 QPtrList<Journal> journals(); 146 QPtrList<Journal> journals();
147 147
148 /** 148 /**
149 Return all alarms, which ocur in the given time interval. 149 Return all alarms, which ocur in the given time interval.
150 */ 150 */
151 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 151 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
152 152
153 /** 153 /**
154 Return all alarms, which ocur before given date. 154 Return all alarms, which ocur before given date.
155 */ 155 */
156 Alarm::List alarmsTo( const QDateTime &to ); 156 Alarm::List alarmsTo( const QDateTime &to );
157 157
158 QDateTime nextAlarm( int daysTo ) ; 158 QDateTime nextAlarm( int daysTo ) ;
159 QDateTime nextAlarmEventDateTime() const; 159 QDateTime nextAlarmEventDateTime() const;
160 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 160 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
161 void registerAlarm(); 161 void registerAlarm();
162 void deRegisterAlarm(); 162 void deRegisterAlarm();
163 QString getAlarmNotification(); 163 QString getAlarmNotification();
164 QString nextSummary() const ; 164 QString nextSummary() const ;
165 /** 165 /**
166 This method should be called whenever a Event is modified directly 166 This method should be called whenever a Event is modified directly
167 via it's pointer. It makes sure that the calendar is internally 167 via it's pointer. It makes sure that the calendar is internally
168 consistent. 168 consistent.
169 */ 169 */
170 void update( IncidenceBase *incidence ); 170 void update( IncidenceBase *incidence );
171 171
172 /** 172 /**
173 Builds and then returns a list of all events that match for the 173 Builds and then returns a list of all events that match for the
174 date specified. useful for dayView, etc. etc. 174 date specified. useful for dayView, etc. etc.
175 */ 175 */
176 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false ); 176 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false );
177 /** 177 /**
178 Get unfiltered events for date \a qdt. 178 Get unfiltered events for date \a qdt.
179 */ 179 */
180 QPtrList<Event> rawEventsForDate( const QDateTime &qdt ); 180 QPtrList<Event> rawEventsForDate( const QDateTime &qdt );
181 /** 181 /**
182 Get unfiltered events in a range of dates. If inclusive is set to true, 182 Get unfiltered events in a range of dates. If inclusive is set to true,
183 only events are returned, which are completely included in the range. 183 only events are returned, which are completely included in the range.
184 */ 184 */
185 QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 185 QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
186 bool inclusive = false ); 186 bool inclusive = false );
187 Todo *todo( QString, QString ); 187 Todo *todo( QString, QString );
188 Event *event( QString, QString ); 188 Event *event( QString, QString );
189 void getIncidenceCount( int calId, int& events, int & todos, int & journals); 189 void getIncidenceCount( int calId, int& events, int & todos, int & journals);
190 190
191public slots: 191public slots:
192 void setCalendarEnabled( int id, bool enable ); 192 void setCalendarEnabled( int id, bool enable );
193 void setAlarmEnabled( int id, bool enable ); 193 void setAlarmEnabled( int id, bool enable );
194 void setReadOnly( int id, bool enable ); 194 void setReadOnly( int id, bool enable );
195 void setDefaultCalendarEnabledOnly(); 195 void setDefaultCalendarEnabledOnly();
196 void setCalendarRemove( int id ); 196 void setCalendarRemove( int id );
197 void setAllCalendarEnabled( bool enable ); 197 void setAllCalendarEnabled( bool enable );
198 198
199 protected: 199 protected:
200 200
201 // Event* mNextAlarmEvent; 201 // Event* mNextAlarmEvent;
202 QString mNextSummary; 202 QString mNextSummary;
203 QString mNextAlarmEventDateTimeString; 203 QString mNextAlarmEventDateTimeString;
204 QString mLastAlarmNotificationString; 204 QString mLastAlarmNotificationString;
205 QDateTime mNextAlarmEventDateTime; 205 QDateTime mNextAlarmEventDateTime;
206 QDateTime mNextAlarmDateTime; 206 QDateTime mNextAlarmDateTime;
207 void reInitAlarmSettings(); 207 void reInitAlarmSettings();
208 208
209 /** Notification function of IncidenceBase::Observer. */ 209 /** Notification function of IncidenceBase::Observer. */
210 void incidenceUpdated( IncidenceBase *i ) { update( i ); } 210 void incidenceUpdated( IncidenceBase *i ) { update( i ); }
211 211
212 /** inserts an event into its "proper place" in the calendar. */ 212 /** inserts an event into its "proper place" in the calendar. */
213 void insertEvent( Event *event ); 213 void insertEvent( Event *event );
214 214
215 /** Append alarms of incidence in interval to list of alarms. */ 215 /** Append alarms of incidence in interval to list of alarms. */
216 void appendAlarms( Alarm::List &alarms, Incidence *incidence, 216 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
217 const QDateTime &from, const QDateTime &to ); 217 const QDateTime &from, const QDateTime &to );
218 218
219 /** Append alarms of recurring events in interval to list of alarms. */ 219 /** Append alarms of recurring events in interval to list of alarms. */
220 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence, 220 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
221 const QDateTime &from, const QDateTime &to ); 221 const QDateTime &from, const QDateTime &to );
222 222
223 private: 223 private:
224 void init(); 224 void init();
225 225
226 QPtrList<Event> mEventList; 226 QPtrList<Event> mEventList;
227 QPtrList<Todo> mTodoList; 227 QPtrList<Todo> mTodoList;
228 QPtrList<Journal> mJournalList; 228 QPtrList<Journal> mJournalList;
229}; 229};
230 230
231} 231}
232 232
233#endif 233#endif