summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-08-04 04:08:59 (UTC)
committer zautrix <zautrix>2005-08-04 04:08:59 (UTC)
commit7c639808d3d78e323857e0a110237e6d77bf04c8 (patch) (unidiff)
tree793083edac43e84821257aed8782c29dfb88632f
parentbfa3d79c4172c4a8efebb1f2801e152a3a706dca (diff)
downloadkdepimpi-7c639808d3d78e323857e0a110237e6d77bf04c8.zip
kdepimpi-7c639808d3d78e323857e0a110237e6d77bf04c8.tar.gz
kdepimpi-7c639808d3d78e323857e0a110237e6d77bf04c8.tar.bz2
fixxx
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 7566b22..d51187a 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,4130 +1,4144 @@
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 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy (NoFocus ); 370 setFocusPolicy (NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 mConflictingEvent = 0; 373 mConflictingEvent = 0;
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 480
481 mTodoList->setNavigator( mNavigator ); 481 mTodoList->setNavigator( mNavigator );
482#if 0 482#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 483 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 484 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 485 leftFrameLayout->addWidget(mTodoList, 2 );
486 486
487 } else { 487 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 488 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 489 leftFrameLayout->addWidget(mFilterView );
490 } 490 }
491#endif 491#endif
492 mFilterView->hide(); 492 mFilterView->hide();
493 mCalEditView->hide(); 493 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 494 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 495 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 497 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 498 rightLayout->addWidget( mRightFrame, 10 );
499 499
500 //mLeftFrame = (QWidget *)leftFrame; 500 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 501 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 506 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 510 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 511 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 512 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 513 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 514#endif
515 515
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 517 SLOT( showDates( const KCal::DateList & ) ) );
518 518
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 521
522 522
523 523
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 525 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 526
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 528 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 529
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 530 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 531 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 532 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 533 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 534 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 535 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 536 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 537 mNavigator, SLOT( selectNextMonth() ) );
538 538
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 539 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 540 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 541 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 542 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 544 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 545
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 548#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 550 SLOT( incidenceAdded( Incidence *) ) );
551#endif 551#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 553
554 connect( this, SIGNAL( configChanged() ), 554 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 555 mDateNavigator, SLOT( updateConfig() ) );
556 556
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 557 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 558 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 560 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 562 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 564 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 566 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 569 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 571 SIGNAL( todoModified( Todo *, int ) ) );
572 572
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 574 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 576 this, SLOT (cancelIncidence( Incidence * ) ) );
577 577
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 579 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 581 this, SLOT ( beamIncidence( Incidence * ) ) );
582 582
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 584 this, SLOT ( todo_unsub( Todo * ) ) );
585 585
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 587 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 589 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 590 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 591 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 592
593 593
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 598
599 599
600 600
601 601
602 602
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 603 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 604 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 606 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 608
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 609 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 610
611 mDateFrame = new QVBox(0,0,WType_Popup); 611 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 614 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 615 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 616 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 618
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 620
621 mEventEditor = mDialogManager->getEventEditor(); 621 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 622 mTodoEditor = mDialogManager->getTodoEditor();
623 623
624 mFlagEditDescription = false; 624 mFlagEditDescription = false;
625 625
626 mSuspendTimer = new QTimer( this ); 626 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 627 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 628 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 632 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 634 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 636
637 637
638#ifndef DESKTOP_VERSION 638#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 639//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 642#endif
643 mDateNavigator->setCalendar( mCalendar ); 643 mDateNavigator->setCalendar( mCalendar );
644} 644}
645 645
646 646
647CalendarView::~CalendarView() 647CalendarView::~CalendarView()
648{ 648{
649 // kdDebug() << "~CalendarView()" << endl; 649 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 650 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 651 delete mDialogManager;
652 delete mViewManager; 652 delete mViewManager;
653 delete mStorage; 653 delete mStorage;
654 delete mDateFrame ; 654 delete mDateFrame ;
655 delete mEventViewerDialog; 655 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 656 //kdDebug() << "~CalendarView() done" << endl;
657} 657}
658 658
659 659
660void CalendarView::nextConflict( bool all, bool allday ) 660void CalendarView::nextConflict( bool all, bool allday )
661{ 661{
662 static bool block = false; 662 static bool block = false;
663 if ( block ) return; 663 if ( block ) return;
664 block = true; 664 block = true;
665 QPtrList<Event> testlist = mCalendar->events(); 665 QPtrList<Event> testlist = mCalendar->events();
666 Event * test = testlist.first(); 666 Event * test = testlist.first();
667 while ( test ) { 667 while ( test ) {
668 test->setTagged( false ); 668 test->setTagged( false );
669 test = testlist.next(); 669 test = testlist.next();
670 } 670 }
671 QTime st ( 0,0,0); 671 QTime st ( 0,0,0);
672 if ( mViewManager->currentView() == mViewManager->agendaView() ) 672 if ( mViewManager->currentView() == mViewManager->agendaView() )
673 st = mViewManager->agendaView()->agenda()->getEndTime(); 673 st = mViewManager->agendaView()->agenda()->getEndTime();
674 //qDebug("time %s ", st.toString().latin1()); 674 //qDebug("time %s ", st.toString().latin1());
675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
676 QDateTime conflict; 676 QDateTime conflict;
677 QDateTime retVal; 677 QDateTime retVal;
678 bool found = false; 678 bool found = false;
679 Event * cE = 0; 679 Event * cE = 0;
680 Event * cE2 = 0; 680 Event * cE2 = 0;
681 QPtrList<Event> testlist2 = testlist; 681 QPtrList<Event> testlist2 = testlist;
682 test = testlist.first(); 682 test = testlist.first();
683 bool skip = false; 683 bool skip = false;
684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm; 685 //QTime tm;
686 //tm.start(); 686 //tm.start();
687 while ( test ) { 687 while ( test ) {
688 qApp->processEvents(); 688 qApp->processEvents();
689 skip = false; 689 skip = false;
690 if ( !all ) skip = ( allday != test->doesFloat() ); 690 if ( !all ) skip = ( allday != test->doesFloat() );
691 if ( !skip ) { 691 if ( !skip ) {
692 if ( found ) 692 if ( found )
693 skip = !test->matchTime( &startDT, &conflict ); 693 skip = !test->matchTime( &startDT, &conflict );
694 else 694 else
695 skip = !test->matchTime( &startDT, 0 ); 695 skip = !test->matchTime( &startDT, 0 );
696 } 696 }
697 if ( !skip ) { 697 if ( !skip ) {
698 Event * test2 = testlist2.first(); 698 Event * test2 = testlist2.first();
699 while ( test2 ) { 699 while ( test2 ) {
700 skip = test2->isTagged(); 700 skip = test2->isTagged();
701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) { 702 if ( !skip ) {
703 if ( found ) 703 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict ); 704 skip = !test2->matchTime( &startDT, &conflict );
705 else 705 else
706 skip = !test2->matchTime( &startDT, 0 ); 706 skip = !test2->matchTime( &startDT, 0 );
707 } 707 }
708 if ( !skip ) { 708 if ( !skip ) {
709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
710 //qDebug("overlap "); 710 //qDebug("overlap ");
711 if ( ! found ) { 711 if ( ! found ) {
712 if ( retVal >= startDT ) { 712 if ( retVal >= startDT ) {
713 conflict = retVal; 713 conflict = retVal;
714 cE = test; 714 cE = test;
715 cE2 = test2; 715 cE2 = test2;
716 found = true; 716 found = true;
717 } 717 }
718 } else { 718 } else {
719 if ( retVal >= startDT && retVal < conflict ) { 719 if ( retVal >= startDT && retVal < conflict ) {
720 conflict = retVal; 720 conflict = retVal;
721 cE = test; 721 cE = test;
722 cE2 = test2; 722 cE2 = test2;
723 } 723 }
724 } 724 }
725 } 725 }
726 } 726 }
727 test2 = testlist2.next(); 727 test2 = testlist2.next();
728 } 728 }
729 } 729 }
730 test->setTagged( true ); 730 test->setTagged( true );
731 test = testlist.next(); 731 test = testlist.next();
732 } 732 }
733 //qDebug("Search time : %d", tm.elapsed()); 733 //qDebug("Search time : %d", tm.elapsed());
734 if ( found ) { 734 if ( found ) {
735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
736 mViewManager->showDayView(); 736 mViewManager->showDayView();
737 mNavigator->slotDaySelect( conflict.date() ); 737 mNavigator->slotDaySelect( conflict.date() );
738 int hour = conflict.time().hour(); 738 int hour = conflict.time().hour();
739 mViewManager->agendaView()->setStartHour( hour ); 739 mViewManager->agendaView()->setStartHour( hour );
740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
741 block = false; 741 block = false;
742 return; 742 return;
743 } 743 }
744 744
745 topLevelWidget()->setCaption( i18n("No conflict found") ); 745 topLevelWidget()->setCaption( i18n("No conflict found") );
746 //qDebug("No conflict found "); 746 //qDebug("No conflict found ");
747 block = false; 747 block = false;
748 return; 748 return;
749} 749}
750 750
751void CalendarView::conflictAll() 751void CalendarView::conflictAll()
752{ 752{
753 nextConflict ( true, true ); 753 nextConflict ( true, true );
754} 754}
755void CalendarView::conflictAllday() 755void CalendarView::conflictAllday()
756{ 756{
757 nextConflict ( false, true ); 757 nextConflict ( false, true );
758} 758}
759void CalendarView::conflictNotAll() 759void CalendarView::conflictNotAll()
760{ 760{
761 nextConflict ( false, false ); 761 nextConflict ( false, false );
762} 762}
763 763
764void CalendarView::setCalReadOnly( int id, bool readO ) 764void CalendarView::setCalReadOnly( int id, bool readO )
765{ 765{
766 if ( readO ) { 766 if ( readO ) {
767 emit save(); 767 emit save();
768 } 768 }
769 mCalendar->setReadOnly( id, readO ); 769 mCalendar->setReadOnly( id, readO );
770} 770}
771void CalendarView::setScrollBarStep(int val ) 771void CalendarView::setScrollBarStep(int val )
772{ 772{
773#ifdef DESKTOP_VERSION 773#ifdef DESKTOP_VERSION
774 mDateScrollBar->setLineStep ( val ); 774 mDateScrollBar->setLineStep ( val );
775#endif 775#endif
776} 776}
777void CalendarView::scrollBarValue(int val ) 777void CalendarView::scrollBarValue(int val )
778{ 778{
779#ifdef DESKTOP_VERSION 779#ifdef DESKTOP_VERSION
780 if ( QApplication::desktop()->width() < 800 ) return; 780 if ( QApplication::desktop()->width() < 800 ) return;
781 static bool block = false; 781 static bool block = false;
782 if ( block ) return; 782 if ( block ) return;
783 block = true; 783 block = true;
784 int count = mNavigator->selectedDates().count(); 784 int count = mNavigator->selectedDates().count();
785 int day = mNavigator->selectedDates().first().dayOfYear(); 785 int day = mNavigator->selectedDates().first().dayOfYear();
786 int stepdays = val; 786 int stepdays = val;
787 if ( mDateScrollBar->lineStep () <= count ) { 787 if ( mDateScrollBar->lineStep () <= count ) {
788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
789 //qDebug("VAL %d ",val ); 789 //qDebug("VAL %d ",val );
790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
791 stepdays = day+stepdays; 791 stepdays = day+stepdays;
792 if ( stepdays < 0 ) stepdays = 0; 792 if ( stepdays < 0 ) stepdays = 0;
793 } 793 }
794 if ( stepdays == day ) { 794 if ( stepdays == day ) {
795 block = false; 795 block = false;
796 return; 796 return;
797 } 797 }
798 int year = mNavigator->selectedDates().first().year(); 798 int year = mNavigator->selectedDates().first().year();
799 QDate d ( year,1,1 ); 799 QDate d ( year,1,1 );
800 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 800 mNavigator->selectDates( d.addDays( stepdays-1) , count );
801 block = false; 801 block = false;
802#endif 802#endif
803 803
804} 804}
805void CalendarView::updateView(const QDate &start, const QDate &end) 805void CalendarView::updateView(const QDate &start, const QDate &end)
806{ 806{
807#ifdef DESKTOP_VERSION 807#ifdef DESKTOP_VERSION
808 if ( ! mDateScrollBar->draggingSlider () ) { 808 if ( ! mDateScrollBar->draggingSlider () ) {
809 int dof = start.dayOfYear(); 809 int dof = start.dayOfYear();
810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
811 if ( dof != mDateScrollBar->value() ) { 811 if ( dof != mDateScrollBar->value() ) {
812 mDateScrollBar->blockSignals( true ); 812 mDateScrollBar->blockSignals( true );
813 mDateScrollBar->setValue( start.dayOfYear()); 813 mDateScrollBar->setValue( start.dayOfYear());
814 mDateScrollBar->blockSignals( false ); 814 mDateScrollBar->blockSignals( false );
815 } 815 }
816 } 816 }
817#endif 817#endif
818 mTodoList->updateView(); 818 mTodoList->updateView();
819 mViewManager->updateView(start, end); 819 mViewManager->updateView(start, end);
820 //mDateNavigator->updateView(); 820 //mDateNavigator->updateView();
821} 821}
822 822
823 823
824 824
825void CalendarView::checkFiles() 825void CalendarView::checkFiles()
826{ 826{
827 QString message; 827 QString message;
828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
829 KopiCalendarFile * cal = calendars.first(); 829 KopiCalendarFile * cal = calendars.first();
830 while ( cal ) { 830 while ( cal ) {
831 if ( cal->mErrorOnLoad ) { 831 if ( cal->mErrorOnLoad ) {
832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
833 } 833 }
834 cal = calendars.next(); 834 cal = calendars.next();
835 } 835 }
836 if ( !message.isEmpty() ) { 836 if ( !message.isEmpty() ) {
837 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); 837 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);
838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
839 } 839 }
840 static bool firstTime = true; 840 static bool firstTime = true;
841 if ( firstTime ) { 841 if ( firstTime ) {
842 firstTime = false; 842 firstTime = false;
843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
844 } 844 }
845} 845}
846void CalendarView::checkAlarms() 846void CalendarView::checkAlarms()
847{ 847{
848 KConfig *config = KOGlobals::config(); 848 KConfig *config = KOGlobals::config();
849 config->setGroup( "AppRun" ); 849 config->setGroup( "AppRun" );
850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
851 int daysto = dt.daysTo( QDate::currentDate() ); 851 int daysto = dt.daysTo( QDate::currentDate() );
852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
853 dt = dt.addDays( days ); 853 dt = dt.addDays( days );
854 int secto = dt.secsTo( QDateTime::currentDateTime() ); 854 int secto = dt.secsTo( QDateTime::currentDateTime() );
855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
856 //qDebug("KO: Reading program stop %d ", secs); 856 //qDebug("KO: Reading program stop %d ", secs);
857 //secs -= ( 3600 * 24*3 ); // debug only 857 //secs -= ( 3600 * 24*3 ); // debug only
858 QDateTime latest = dt.addSecs ( secs ); 858 QDateTime latest = dt.addSecs ( secs );
859 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 859 qDebug("KO: Last termination on %s ", latest.toString().latin1());
860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
861 QPtrList<Incidence> el = mCalendar->rawIncidences(); 861 QPtrList<Incidence> el = mCalendar->rawIncidences();
862 QPtrList<Incidence> al; 862 QPtrList<Incidence> al;
863 Incidence* inL = el.first(); 863 Incidence* inL = el.first();
864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
866 while ( inL ) { 866 while ( inL ) {
867 bool ok = false; 867 bool ok = false;
868 int offset = 0; 868 int offset = 0;
869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
870 if ( ok ) { 870 if ( ok ) {
871 //qDebug("OK %s",next.toString().latin1()); 871 //qDebug("OK %s",next.toString().latin1());
872 if ( next < cur ) { 872 if ( next < cur ) {
873 al.append( inL ); 873 al.append( inL );
874 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 874 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
875 } 875 }
876 } 876 }
877 inL = el.next(); 877 inL = el.next();
878 } 878 }
879 if ( al.count() ) { 879 if ( al.count() ) {
880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
881 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 881 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
882 QVBoxLayout* lay = new QVBoxLayout( dia ); 882 QVBoxLayout* lay = new QVBoxLayout( dia );
883 lay->setSpacing( 0 ); 883 lay->setSpacing( 0 );
884 lay->setMargin( 0 ); 884 lay->setMargin( 0 );
885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
887 lay->addWidget( matb ); 887 lay->addWidget( matb );
888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
889 int wid = 210; 889 int wid = 210;
890 int x = QApplication::desktop()->width() - wid - 7; 890 int x = QApplication::desktop()->width() - wid - 7;
891 int y = QApplication::desktop()->height() - wid - 70; 891 int y = QApplication::desktop()->height() - wid - 70;
892 dia->setGeometry ( x,y,wid,wid); 892 dia->setGeometry ( x,y,wid,wid);
893 } else { 893 } else {
894 int si = 220; 894 int si = 220;
895 if ( QApplication::desktop()->width() > 470 ) 895 if ( QApplication::desktop()->width() > 470 )
896 si = 400; 896 si = 400;
897 dia->resize(si,si/2); 897 dia->resize(si,si/2);
898 } 898 }
899 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 899 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
900 dia->show(); 900 dia->show();
901 901
902 } 902 }
903#if 0 903#if 0
904 // for creating timetracker test data 904 // for creating timetracker test data
905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
906 Todo * nt; 906 Todo * nt;
907 mCalendar->close(); 907 mCalendar->close();
908 { 908 {
909 Todo * root1 = new Todo; 909 Todo * root1 = new Todo;
910 mCalendar->addTodo( root1 ); 910 mCalendar->addTodo( root1 );
911 root1->setSummary( "Project_1"); 911 root1->setSummary( "Project1");
912 root1->setPriority( 1 ); 912 root1->setPriority( 1 );
913 root1->setCategories( QString( "Cat_Pro1") );
913 root1->setDescription( "This is a test description of a root Project" ); 914 root1->setDescription( "This is a test description of a root Project" );
914 root1->setPercentComplete( 20 ); 915 root1->setPercentComplete( 20 );
915 updateView(); 916 updateView();
916 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 917 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
917 QDateTime end = QDateTime ( QDate( 2005,8,1), QTime ( 0,0,0) ); 918 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
918 919
919 nt = new Todo; 920 nt = new Todo;
920 mCalendar->addTodo( nt ); 921 mCalendar->addTodo( nt );
921 nt->setSummary( "Planning_Project_1"); 922 nt->setSummary( "Planning Project1");
922 nt->setPriority( 1 ); 923 nt->setPriority( 1 );
923 nt->setDescription( "This is a test description of Planning_Project_1" ); 924 nt->setDescription( "This is a test description of Planning Project1" );
924 nt->setPercentComplete( 20 ); 925 nt->setPercentComplete( 20 );
926 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
925 927
926 928
927 Todo * sub1 = nt; 929 Todo * sub1 = nt;
928 sub1->setRelatedTo( root1 ); 930 sub1->setRelatedTo( root1 );
929 931
930 nt = new Todo; 932 nt = new Todo;
931 mCalendar->addTodo( nt ); 933 mCalendar->addTodo( nt );
932 nt->setSummary( "Planning_Project_1: Lutz"); 934 nt->setSummary( "Planning Project1: Lutz");
933 nt->setPriority( 1 ); 935 nt->setPriority( 1 );
934 nt->setDescription( "This todo counts the actual work of a person on a project" ); 936 nt->setDescription( "This todo counts the actual work of a person on a project" );
935 nt->setPercentComplete( 20 ); 937 nt->setPercentComplete( 20 );
938 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
936 Todo * workLutz11 = nt; 939 Todo * workLutz11 = nt;
937 workLutz11->setRelatedTo( sub1 ); 940 workLutz11->setRelatedTo( sub1 );
938 941
939 nt = new Todo; 942 nt = new Todo;
940 mCalendar->addTodo( nt ); 943 mCalendar->addTodo( nt );
941 nt->setSummary( "Planning_Project_1: Norbert"); 944 nt->setSummary( "Planning Project1: Norbert");
942 nt->setPriority( 1 ); 945 nt->setPriority( 1 );
943 nt->setDescription( "This todo counts the actual work of a person on a project" ); 946 nt->setDescription( "This todo counts the actual work of a person on a project" );
944 nt->setPercentComplete( 20 ); 947 nt->setPercentComplete( 20 );
948 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
945 Todo * workNorbert11 = nt; 949 Todo * workNorbert11 = nt;
946 workNorbert11->setRelatedTo( sub1 ); 950 workNorbert11->setRelatedTo( sub1 );
947 951
948 nt = new Todo; 952 nt = new Todo;
949 mCalendar->addTodo( nt ); 953 mCalendar->addTodo( nt );
950 nt->setSummary( "Work on 1"); 954 nt->setSummary( "Work on 1");
951 nt->setPriority( 1 ); 955 nt->setPriority( 1 );
952 nt->setDescription( "This is a test description of Work Project_1" ); 956 nt->setDescription( "This is a test description of Work Project_1" );
957 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
953 nt->setPercentComplete( 20 ); 958 nt->setPercentComplete( 20 );
954 959
955 Todo * sub2 = nt; 960 Todo * sub2 = nt;
956 sub2->setRelatedTo( root1 ); 961 sub2->setRelatedTo( root1 );
957 962
958 963
959 nt = new Todo; 964 nt = new Todo;
960 mCalendar->addTodo( nt ); 965 mCalendar->addTodo( nt );
961 nt->setSummary( "Work on 1: Lutz"); 966 nt->setSummary( "Work on 1: Lutz");
962 nt->setPriority( 1 ); 967 nt->setPriority( 1 );
963 nt->setDescription( "This todo counts the actual work of a person on a project" ); 968 nt->setDescription( "This todo counts the actual work of a person on a project" );
969 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
964 nt->setPercentComplete( 20 ); 970 nt->setPercentComplete( 20 );
965 Todo * workLutz12 = nt; 971 Todo * workLutz12 = nt;
966 workLutz12->setRelatedTo( sub2 ); 972 workLutz12->setRelatedTo( sub2 );
967 973
968 nt = new Todo; 974 nt = new Todo;
969 mCalendar->addTodo( nt ); 975 mCalendar->addTodo( nt );
970 nt->setSummary( "Work on 1: Norbert"); 976 nt->setSummary( "Work on 1: Norbert");
971 nt->setPriority( 1 ); 977 nt->setPriority( 1 );
972 nt->setDescription( "This todo counts the actual work of a person on a project" ); 978 nt->setDescription( "This todo counts the actual work of a person on a project" );
979 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
973 nt->setPercentComplete( 20 ); 980 nt->setPercentComplete( 20 );
974 Todo * workNorbert12 = nt; 981 Todo * workNorbert12 = nt;
975 workNorbert12->setRelatedTo( sub2 ); 982 workNorbert12->setRelatedTo( sub2 );
976 983
977 int secLenRunning = 7200; 984 int secLenRunning = 7200;
978 int secLenPausing = 3600 * 3; 985 int secLenPausing = 3600 * 3;
979 int dayInterval = 1; 986 int dayInterval = 1;
980 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 987 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
981 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 988 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
982 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 989 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
983 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 990 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
984 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 991 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
985 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 992 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
986 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 993 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
987 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 994 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
988 995
989 } 996 }
990 997
991 { 998 {
992 Todo * root1 = new Todo; 999 Todo * root1 = new Todo;
993 mCalendar->addTodo( root1 ); 1000 mCalendar->addTodo( root1 );
994 root1->setSummary( "Project_2"); 1001 root1->setSummary( "Project2");
995 root1->setPriority( 1 ); 1002 root1->setPriority( 1 );
996 root1->setDescription( "This is a test description of a root Project 2" ); 1003 root1->setDescription( "This is a test description of a root Project 2" );
997 root1->setPercentComplete( 20 ); 1004 root1->setPercentComplete( 20 );
1005 root1->setCategories( QString( "Cat_Pro2") );
998 updateView(); 1006 updateView();
999 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1007 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1000 QDateTime end = QDateTime ( QDate( 2005,8,1), QTime ( 0,0,0) ); 1008 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1001 int secLenRunning = 7200; 1009 int secLenRunning = 7200;
1002 int secLenPausing = 3600 * 3; 1010 int secLenPausing = 3600 * 3;
1003 int dayInterval = 1; 1011 int dayInterval = 1;
1004 1012
1005 nt = new Todo; 1013 nt = new Todo;
1006 mCalendar->addTodo( nt ); 1014 mCalendar->addTodo( nt );
1007 nt->setSummary( "Planning_Project_2"); 1015 nt->setSummary( "Planning Project2");
1008 nt->setPriority( 1 ); 1016 nt->setPriority( 1 );
1009 nt->setDescription( "This is a test description of Planning_Project_2" ); 1017 nt->setDescription( "This is a test description of Planning_Project_2" );
1018 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1010 nt->setPercentComplete( 20 ); 1019 nt->setPercentComplete( 20 );
1011 1020
1012 1021
1013 Todo * sub1 = nt; 1022 Todo * sub1 = nt;
1014 sub1->setRelatedTo( root1 ); 1023 sub1->setRelatedTo( root1 );
1015 1024
1016 nt = new Todo; 1025 nt = new Todo;
1017 mCalendar->addTodo( nt ); 1026 mCalendar->addTodo( nt );
1018 nt->setSummary( "Planning_Project_2: Lutz"); 1027 nt->setSummary( "Planning Project2: Lutz");
1019 nt->setPriority( 1 ); 1028 nt->setPriority( 1 );
1020 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1029 nt->setDescription( "This todo counts the actual work of a person on a project" );
1030 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1021 nt->setPercentComplete( 20 ); 1031 nt->setPercentComplete( 20 );
1022 Todo * workLutz11 = nt; 1032 Todo * workLutz11 = nt;
1023 workLutz11->setRelatedTo( sub1 ); 1033 workLutz11->setRelatedTo( sub1 );
1024 1034
1025 nt = new Todo; 1035 nt = new Todo;
1026 mCalendar->addTodo( nt ); 1036 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning_Project_2: Norbert"); 1037 nt->setSummary( "Planning Project2: Norbert");
1028 nt->setPriority( 1 ); 1038 nt->setPriority( 1 );
1029 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1039 nt->setDescription( "This todo counts the actual work of a person on a project" );
1040 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1030 nt->setPercentComplete( 20 ); 1041 nt->setPercentComplete( 20 );
1031 Todo * workNorbert11 = nt; 1042 Todo * workNorbert11 = nt;
1032 workNorbert11->setRelatedTo( sub1 ); 1043 workNorbert11->setRelatedTo( sub1 );
1033 1044
1034 nt = new Todo; 1045 nt = new Todo;
1035 mCalendar->addTodo( nt ); 1046 mCalendar->addTodo( nt );
1036 nt->setSummary( "Work on 2"); 1047 nt->setSummary( "Work on 2");
1037 nt->setPriority( 1 ); 1048 nt->setPriority( 1 );
1038 nt->setDescription( "This is a test description of Work Project_2" ); 1049 nt->setDescription( "This is a test description of Work Project_2" );
1050 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1039 nt->setPercentComplete( 20 ); 1051 nt->setPercentComplete( 20 );
1040 1052
1041 Todo * sub2 = nt; 1053 Todo * sub2 = nt;
1042 sub2->setRelatedTo( root1 ); 1054 sub2->setRelatedTo( root1 );
1043 1055
1044 1056
1045 nt = new Todo; 1057 nt = new Todo;
1046 mCalendar->addTodo( nt ); 1058 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2: Lutz"); 1059 nt->setSummary( "Work on 2: Lutz");
1048 nt->setPriority( 1 ); 1060 nt->setPriority( 1 );
1049 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1061 nt->setDescription( "This todo counts the actual work of a person on a project" );
1062 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1050 nt->setPercentComplete( 20 ); 1063 nt->setPercentComplete( 20 );
1051 Todo * workLutz12 = nt; 1064 Todo * workLutz12 = nt;
1052 workLutz12->setRelatedTo( sub2 ); 1065 workLutz12->setRelatedTo( sub2 );
1053 1066
1054 nt = new Todo; 1067 nt = new Todo;
1055 mCalendar->addTodo( nt ); 1068 mCalendar->addTodo( nt );
1056 nt->setSummary( "Work on 2: Norbert"); 1069 nt->setSummary( "Work on 2: Norbert");
1057 nt->setPriority( 1 ); 1070 nt->setPriority( 1 );
1058 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1071 nt->setDescription( "This todo counts the actual work of a person on a project" );
1072 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1059 nt->setPercentComplete( 20 ); 1073 nt->setPercentComplete( 20 );
1060 Todo * workNorbert12 = nt; 1074 Todo * workNorbert12 = nt;
1061 workNorbert12->setRelatedTo( sub2 ); 1075 workNorbert12->setRelatedTo( sub2 );
1062 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1063 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1077 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1064 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1065 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1066 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1080 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1067 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1068 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1069 } 1083 }
1070 updateView(); 1084 updateView();
1071#endif 1085#endif
1072 1086
1073} 1087}
1074void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1088void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1075{ 1089{
1076 static int ccc = 0; 1090 static int ccc = 0;
1077 ++ccc; 1091 ++ccc;
1078 QDateTime t_start = start; 1092 QDateTime t_start = start;
1079 runT->setPriority( 5 ); 1093 runT->setPriority( 5 );
1080 runT->setPercentComplete( 0 ); 1094 runT->setPercentComplete( 0 );
1081 int count = 0; 1095 int count = 0;
1082 int prio = 5; 1096 int prio = 5;
1083 int complete = 0; 1097 int complete = 0;
1084 while ( t_start < end ) { 1098 while ( t_start < end ) {
1085 ++count; 1099 ++count;
1086 if ( count > ccc ) { 1100 if ( count > ccc ) {
1087 count = 0; 1101 count = 0;
1088 --prio; 1102 --prio;
1089 if ( prio == 0 ) prio = 5; 1103 if ( prio == 0 ) prio = 5;
1090 complete += 20; 1104 complete += 20;
1091 if ( complete > 100 ) complete = 0; 1105 if ( complete > 100 ) complete = 0;
1092 runT->setPriority( prio ); 1106 runT->setPriority( prio );
1093 runT->setPercentComplete( complete ); 1107 runT->setPercentComplete( complete );
1094 } 1108 }
1095 runT->setRunning( true ); 1109 runT->setRunning( true );
1096 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1110 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1097 if ( dayInterval ) 1111 if ( dayInterval )
1098 t_start = t_start.addDays( dayInterval ); 1112 t_start = t_start.addDays( dayInterval );
1099 else { 1113 else {
1100 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1114 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1101 } 1115 }
1102 } 1116 }
1103} 1117}
1104 1118
1105void CalendarView::showDay( QDate d ) 1119void CalendarView::showDay( QDate d )
1106{ 1120{
1107 dateNavigator()->blockSignals( true ); 1121 dateNavigator()->blockSignals( true );
1108 dateNavigator()->selectDate( d ); 1122 dateNavigator()->selectDate( d );
1109 dateNavigator()->blockSignals( false ); 1123 dateNavigator()->blockSignals( false );
1110 mViewManager->showDayView(); 1124 mViewManager->showDayView();
1111 //dateNavigator()->selectDate( d ); 1125 //dateNavigator()->selectDate( d );
1112} 1126}
1113void CalendarView::timerAlarm() 1127void CalendarView::timerAlarm()
1114{ 1128{
1115 //qDebug("CalendarView::timerAlarm() "); 1129 //qDebug("CalendarView::timerAlarm() ");
1116 computeAlarm(mAlarmNotification ); 1130 computeAlarm(mAlarmNotification );
1117} 1131}
1118 1132
1119void CalendarView::suspendAlarm() 1133void CalendarView::suspendAlarm()
1120{ 1134{
1121 //qDebug(" CalendarView::suspendAlarm() "); 1135 //qDebug(" CalendarView::suspendAlarm() ");
1122 computeAlarm(mSuspendAlarmNotification ); 1136 computeAlarm(mSuspendAlarmNotification );
1123 1137
1124} 1138}
1125 1139
1126void CalendarView::startAlarm( QString mess , QString filename) 1140void CalendarView::startAlarm( QString mess , QString filename)
1127{ 1141{
1128 1142
1129 topLevelWidget()->showNormal(); 1143 topLevelWidget()->showNormal();
1130 topLevelWidget()->setActiveWindow(); 1144 topLevelWidget()->setActiveWindow();
1131 topLevelWidget()->raise(); 1145 topLevelWidget()->raise();
1132 1146
1133 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1147 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1134 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1135 1149
1136} 1150}
1137 1151
1138void CalendarView::checkNextTimerAlarm() 1152void CalendarView::checkNextTimerAlarm()
1139{ 1153{
1140 mCalendar->checkAlarmForIncidence( 0, true ); 1154 mCalendar->checkAlarmForIncidence( 0, true );
1141} 1155}
1142 1156
1143void CalendarView::computeAlarm( QString msg ) 1157void CalendarView::computeAlarm( QString msg )
1144{ 1158{
1145 1159
1146 QString mess = msg; 1160 QString mess = msg;
1147 QString mAlarmMessage = mess.mid( 9 ); 1161 QString mAlarmMessage = mess.mid( 9 );
1148 QString filename = MainWindow::resourcePath(); 1162 QString filename = MainWindow::resourcePath();
1149 filename += "koalarm.wav"; 1163 filename += "koalarm.wav";
1150 QString tempfilename; 1164 QString tempfilename;
1151 if ( mess.left( 13 ) == "suspend_alarm") { 1165 if ( mess.left( 13 ) == "suspend_alarm") {
1152 bool error = false; 1166 bool error = false;
1153 int len = mess.mid( 13 ).find("+++"); 1167 int len = mess.mid( 13 ).find("+++");
1154 if ( len < 2 ) 1168 if ( len < 2 )
1155 error = true; 1169 error = true;
1156 else { 1170 else {
1157 tempfilename = mess.mid( 13, len ); 1171 tempfilename = mess.mid( 13, len );
1158 if ( !QFile::exists( tempfilename ) ) 1172 if ( !QFile::exists( tempfilename ) )
1159 error = true; 1173 error = true;
1160 } 1174 }
1161 if ( ! error ) { 1175 if ( ! error ) {
1162 filename = tempfilename; 1176 filename = tempfilename;
1163 } 1177 }
1164 mAlarmMessage = mess.mid( 13+len+3 ); 1178 mAlarmMessage = mess.mid( 13+len+3 );
1165 //qDebug("suspend file %s ",tempfilename.latin1() ); 1179 //qDebug("suspend file %s ",tempfilename.latin1() );
1166 startAlarm( mAlarmMessage, filename); 1180 startAlarm( mAlarmMessage, filename);
1167 return; 1181 return;
1168 } 1182 }
1169 if ( mess.left( 11 ) == "timer_alarm") { 1183 if ( mess.left( 11 ) == "timer_alarm") {
1170 //mTimerTime = 0; 1184 //mTimerTime = 0;
1171 startAlarm( mess.mid( 11 ), filename ); 1185 startAlarm( mess.mid( 11 ), filename );
1172 return; 1186 return;
1173 } 1187 }
1174 if ( mess.left( 10 ) == "proc_alarm") { 1188 if ( mess.left( 10 ) == "proc_alarm") {
1175 bool error = false; 1189 bool error = false;
1176 int len = mess.mid( 10 ).find("+++"); 1190 int len = mess.mid( 10 ).find("+++");
1177 if ( len < 2 ) 1191 if ( len < 2 )
1178 error = true; 1192 error = true;
1179 else { 1193 else {
1180 tempfilename = mess.mid( 10, len ); 1194 tempfilename = mess.mid( 10, len );
1181 if ( !QFile::exists( tempfilename ) ) 1195 if ( !QFile::exists( tempfilename ) )
1182 error = true; 1196 error = true;
1183 } 1197 }
1184 if ( error ) { 1198 if ( error ) {
1185 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1186 mAlarmMessage += mess.mid( 10+len+3+9 ); 1200 mAlarmMessage += mess.mid( 10+len+3+9 );
1187 } else { 1201 } else {
1188 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1189 //qDebug("-----system command %s ",tempfilename.latin1() ); 1203 //qDebug("-----system command %s ",tempfilename.latin1() );
1190#ifndef _WIN32_ 1204#ifndef _WIN32_
1191 if ( vfork () == 0 ) { 1205 if ( vfork () == 0 ) {
1192 execl ( tempfilename.latin1(), 0 ); 1206 execl ( tempfilename.latin1(), 0 );
1193 return; 1207 return;
1194 } 1208 }
1195#else 1209#else
1196 QProcess* p = new QProcess(); 1210 QProcess* p = new QProcess();
1197 p->addArgument( tempfilename.latin1() ); 1211 p->addArgument( tempfilename.latin1() );
1198 p->start(); 1212 p->start();
1199 return; 1213 return;
1200#endif 1214#endif
1201 1215
1202 return; 1216 return;
1203 } 1217 }
1204 1218
1205 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1219 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1206 } 1220 }
1207 if ( mess.left( 11 ) == "audio_alarm") { 1221 if ( mess.left( 11 ) == "audio_alarm") {
1208 bool error = false; 1222 bool error = false;
1209 int len = mess.mid( 11 ).find("+++"); 1223 int len = mess.mid( 11 ).find("+++");
1210 if ( len < 2 ) 1224 if ( len < 2 )
1211 error = true; 1225 error = true;
1212 else { 1226 else {
1213 tempfilename = mess.mid( 11, len ); 1227 tempfilename = mess.mid( 11, len );
1214 if ( !QFile::exists( tempfilename ) ) 1228 if ( !QFile::exists( tempfilename ) )
1215 error = true; 1229 error = true;
1216 } 1230 }
1217 if ( ! error ) { 1231 if ( ! error ) {
1218 filename = tempfilename; 1232 filename = tempfilename;
1219 } 1233 }
1220 mAlarmMessage = mess.mid( 11+len+3+9 ); 1234 mAlarmMessage = mess.mid( 11+len+3+9 );
1221 //qDebug("audio file command %s ",tempfilename.latin1() ); 1235 //qDebug("audio file command %s ",tempfilename.latin1() );
1222 } 1236 }
1223 if ( mess.left( 9 ) == "cal_alarm") { 1237 if ( mess.left( 9 ) == "cal_alarm") {
1224 mAlarmMessage = mess.mid( 9 ) ; 1238 mAlarmMessage = mess.mid( 9 ) ;
1225 } 1239 }
1226 1240
1227 startAlarm( mAlarmMessage, filename ); 1241 startAlarm( mAlarmMessage, filename );
1228 1242
1229 1243
1230} 1244}
1231 1245
1232void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1233{ 1247{
1234 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1235 1249
1236 mSuspendAlarmNotification = noti; 1250 mSuspendAlarmNotification = noti;
1237 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1251 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1238 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1252 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1239 mSuspendTimer->start( ms , true ); 1253 mSuspendTimer->start( ms , true );
1240 1254
1241} 1255}
1242 1256
1243void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1257void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1244{ 1258{
1245 mNextAlarmDateTime = qdt; 1259 mNextAlarmDateTime = qdt;
1246 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1260 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1247 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1261 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1248#ifndef DESKTOP_VERSION 1262#ifndef DESKTOP_VERSION
1249 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1263 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1250#endif 1264#endif
1251 return; 1265 return;
1252 } 1266 }
1253 int maxSec; 1267 int maxSec;
1254 //maxSec = 5; //testing only 1268 //maxSec = 5; //testing only
1255 maxSec = 86400+3600; // one day+1hour 1269 maxSec = 86400+3600; // one day+1hour
1256 mAlarmNotification = noti; 1270 mAlarmNotification = noti;
1257 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1271 int sec = QDateTime::currentDateTime().secsTo( qdt );
1258 if ( sec > maxSec ) { 1272 if ( sec > maxSec ) {
1259 mRecheckAlarmTimer->start( maxSec * 1000 ); 1273 mRecheckAlarmTimer->start( maxSec * 1000 );
1260 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1274 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1261 return; 1275 return;
1262 } else { 1276 } else {
1263 mRecheckAlarmTimer->stop(); 1277 mRecheckAlarmTimer->stop();
1264 } 1278 }
1265 //qDebug("Alarm timer started with secs: %d ", sec); 1279 //qDebug("Alarm timer started with secs: %d ", sec);
1266 mAlarmTimer->start( sec *1000 , true ); 1280 mAlarmTimer->start( sec *1000 , true );
1267 1281
1268} 1282}
1269// called by mRecheckAlarmTimer to get next alarm 1283// called by mRecheckAlarmTimer to get next alarm
1270// we need this, because a QTimer has only a max range of 25 days 1284// we need this, because a QTimer has only a max range of 25 days
1271void CalendarView::recheckTimerAlarm() 1285void CalendarView::recheckTimerAlarm()
1272{ 1286{
1273 mAlarmTimer->stop(); 1287 mAlarmTimer->stop();
1274 mRecheckAlarmTimer->stop(); 1288 mRecheckAlarmTimer->stop();
1275 mCalendar->checkAlarmForIncidence( 0, true ); 1289 mCalendar->checkAlarmForIncidence( 0, true );
1276} 1290}
1277#ifndef DESKTOP_VERSION 1291#ifndef DESKTOP_VERSION
1278void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1292void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1279#else 1293#else
1280void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1294void CalendarView::removeAlarm(const QDateTime &, const QString & )
1281#endif 1295#endif
1282{ 1296{
1283 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1297 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1284 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1298 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1285#ifndef DESKTOP_VERSION 1299#ifndef DESKTOP_VERSION
1286 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1300 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1287#endif 1301#endif
1288 return; 1302 return;
1289 } 1303 }
1290 mAlarmTimer->stop(); 1304 mAlarmTimer->stop();
1291} 1305}
1292void CalendarView::selectWeekNum ( int num ) 1306void CalendarView::selectWeekNum ( int num )
1293{ 1307{
1294 dateNavigator()->blockSignals( true ); 1308 dateNavigator()->blockSignals( true );
1295 dateNavigator()->selectWeek( num ); 1309 dateNavigator()->selectWeek( num );
1296 dateNavigator()->blockSignals( false ); 1310 dateNavigator()->blockSignals( false );
1297 mViewManager->showWeekView(); 1311 mViewManager->showWeekView();
1298} 1312}
1299KOViewManager *CalendarView::viewManager() 1313KOViewManager *CalendarView::viewManager()
1300{ 1314{
1301 return mViewManager; 1315 return mViewManager;
1302} 1316}
1303 1317
1304KODialogManager *CalendarView::dialogManager() 1318KODialogManager *CalendarView::dialogManager()
1305{ 1319{
1306 return mDialogManager; 1320 return mDialogManager;
1307} 1321}
1308 1322
1309QDate CalendarView::startDate() 1323QDate CalendarView::startDate()
1310{ 1324{
1311 DateList dates = mNavigator->selectedDates(); 1325 DateList dates = mNavigator->selectedDates();
1312 1326
1313 return dates.first(); 1327 return dates.first();
1314} 1328}
1315 1329
1316QDate CalendarView::endDate() 1330QDate CalendarView::endDate()
1317{ 1331{
1318 DateList dates = mNavigator->selectedDates(); 1332 DateList dates = mNavigator->selectedDates();
1319 1333
1320 return dates.last(); 1334 return dates.last();
1321} 1335}
1322 1336
1323 1337
1324void CalendarView::createPrinter() 1338void CalendarView::createPrinter()
1325{ 1339{
1326#ifndef KORG_NOPRINTER 1340#ifndef KORG_NOPRINTER
1327 if (!mCalPrinter) { 1341 if (!mCalPrinter) {
1328 mCalPrinter = new CalPrinter(this, mCalendar); 1342 mCalPrinter = new CalPrinter(this, mCalendar);
1329 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1343 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1330 } 1344 }
1331#endif 1345#endif
1332} 1346}
1333 1347
1334 1348
1335//KOPrefs::instance()->mWriteBackFile 1349//KOPrefs::instance()->mWriteBackFile
1336//KOPrefs::instance()->mWriteBackExistingOnly 1350//KOPrefs::instance()->mWriteBackExistingOnly
1337 1351
1338// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1352// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1339// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1353// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1340// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1354// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1341// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1355// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1342// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1356// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1343// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1357// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1344 1358
1345int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1359int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1346{ 1360{
1347 1361
1348 // 0 equal 1362 // 0 equal
1349 // 1 take local 1363 // 1 take local
1350 // 2 take remote 1364 // 2 take remote
1351 // 3 cancel 1365 // 3 cancel
1352 QDateTime lastSync = mLastCalendarSync; 1366 QDateTime lastSync = mLastCalendarSync;
1353 QDateTime localMod = local->lastModified(); 1367 QDateTime localMod = local->lastModified();
1354 QDateTime remoteMod = remote->lastModified(); 1368 QDateTime remoteMod = remote->lastModified();
1355 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1369 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1356 bool remCh, locCh; 1370 bool remCh, locCh;
1357 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1371 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1358 //if ( remCh ) 1372 //if ( remCh )
1359 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1373 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1360 locCh = ( localMod > mLastCalendarSync ); 1374 locCh = ( localMod > mLastCalendarSync );
1361 if ( !remCh && ! locCh ) { 1375 if ( !remCh && ! locCh ) {
1362 //qDebug("both not changed "); 1376 //qDebug("both not changed ");
1363 lastSync = localMod.addDays(1); 1377 lastSync = localMod.addDays(1);
1364 if ( mode <= SYNC_PREF_ASK ) 1378 if ( mode <= SYNC_PREF_ASK )
1365 return 0; 1379 return 0;
1366 } else { 1380 } else {
1367 if ( locCh ) { 1381 if ( locCh ) {
1368 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1382 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1369 lastSync = localMod.addDays( -1 ); 1383 lastSync = localMod.addDays( -1 );
1370 if ( !remCh ) 1384 if ( !remCh )
1371 remoteMod = ( lastSync.addDays( -1 ) ); 1385 remoteMod = ( lastSync.addDays( -1 ) );
1372 } else { 1386 } else {
1373 //qDebug(" not loc changed "); 1387 //qDebug(" not loc changed ");
1374 lastSync = localMod.addDays( 1 ); 1388 lastSync = localMod.addDays( 1 );
1375 if ( remCh ) 1389 if ( remCh )
1376 remoteMod =( lastSync.addDays( 1 ) ); 1390 remoteMod =( lastSync.addDays( 1 ) );
1377 1391
1378 } 1392 }
1379 } 1393 }
1380 full = true; 1394 full = true;
1381 if ( mode < SYNC_PREF_ASK ) 1395 if ( mode < SYNC_PREF_ASK )
1382 mode = SYNC_PREF_ASK; 1396 mode = SYNC_PREF_ASK;
1383 } else { 1397 } else {
1384 if ( localMod == remoteMod ) 1398 if ( localMod == remoteMod )
1385 // if ( local->revision() == remote->revision() ) 1399 // if ( local->revision() == remote->revision() )
1386 return 0; 1400 return 0;
1387 1401
1388 } 1402 }
1389 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1403 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1390 1404
1391 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1405 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1392 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1406 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1393 //full = true; //debug only 1407 //full = true; //debug only
1394 if ( full ) { 1408 if ( full ) {
1395 bool equ = false; 1409 bool equ = false;
1396 if ( local->typeID() == eventID ) { 1410 if ( local->typeID() == eventID ) {
1397 equ = (*((Event*) local) == *((Event*) remote)); 1411 equ = (*((Event*) local) == *((Event*) remote));
1398 } 1412 }
1399 else if ( local->typeID() == todoID ) 1413 else if ( local->typeID() == todoID )
1400 equ = (*((Todo*) local) == (*(Todo*) remote)); 1414 equ = (*((Todo*) local) == (*(Todo*) remote));
1401 else if ( local->typeID() == journalID ) 1415 else if ( local->typeID() == journalID )
1402 equ = (*((Journal*) local) == *((Journal*) remote)); 1416 equ = (*((Journal*) local) == *((Journal*) remote));
1403 if ( equ ) { 1417 if ( equ ) {
1404 //qDebug("equal "); 1418 //qDebug("equal ");
1405 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1419 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1406 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1420 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1407 } 1421 }
1408 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1422 if ( mode < SYNC_PREF_FORCE_LOCAL )
1409 return 0; 1423 return 0;
1410 1424
1411 }//else //debug only 1425 }//else //debug only
1412 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1426 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1413 } 1427 }
1414 int result; 1428 int result;
1415 bool localIsNew; 1429 bool localIsNew;
1416 //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() ); 1430 //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() );
1417 1431
1418 1432
1419 // ************************************************ 1433 // ************************************************
1420 // ************************************************ 1434 // ************************************************
1421 // ************************************************ 1435 // ************************************************
1422 // We may have that lastSync > remoteMod AND lastSync > localMod 1436 // We may have that lastSync > remoteMod AND lastSync > localMod
1423 // BUT remoteMod != localMod 1437 // BUT remoteMod != localMod
1424 1438
1425 1439
1426 if ( full && mode < SYNC_PREF_NEWEST ) 1440 if ( full && mode < SYNC_PREF_NEWEST )
1427 mode = SYNC_PREF_ASK; 1441 mode = SYNC_PREF_ASK;
1428 1442
1429 switch( mode ) { 1443 switch( mode ) {
1430 case SYNC_PREF_LOCAL: 1444 case SYNC_PREF_LOCAL:
1431 if ( lastSync > remoteMod ) 1445 if ( lastSync > remoteMod )
1432 return 1; 1446 return 1;
1433 if ( lastSync > localMod ) 1447 if ( lastSync > localMod )
1434 return 2; 1448 return 2;
1435 return 1; 1449 return 1;
1436 break; 1450 break;
1437 case SYNC_PREF_REMOTE: 1451 case SYNC_PREF_REMOTE:
1438 if ( lastSync > localMod ) 1452 if ( lastSync > localMod )
1439 return 2; 1453 return 2;
1440 if ( lastSync > remoteMod ) 1454 if ( lastSync > remoteMod )
1441 return 1; 1455 return 1;
1442 return 2; 1456 return 2;
1443 break; 1457 break;
1444 case SYNC_PREF_NEWEST: 1458 case SYNC_PREF_NEWEST:
1445 if ( localMod >= remoteMod ) 1459 if ( localMod >= remoteMod )
1446 return 1; 1460 return 1;
1447 else 1461 else
1448 return 2; 1462 return 2;
1449 break; 1463 break;
1450 case SYNC_PREF_ASK: 1464 case SYNC_PREF_ASK:
1451 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1465 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1452 if ( lastSync > remoteMod && lastSync > localMod) 1466 if ( lastSync > remoteMod && lastSync > localMod)
1453 return 0; 1467 return 0;
1454 if ( lastSync > remoteMod ) 1468 if ( lastSync > remoteMod )
1455 return 1; 1469 return 1;
1456 if ( lastSync > localMod ) 1470 if ( lastSync > localMod )
1457 return 2; 1471 return 2;
1458 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1472 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1459 localIsNew = localMod >= remoteMod; 1473 localIsNew = localMod >= remoteMod;
1460 if ( localIsNew ) 1474 if ( localIsNew )
1461 getEventViewerDialog()->setColorMode( 1 ); 1475 getEventViewerDialog()->setColorMode( 1 );
1462 else 1476 else
1463 getEventViewerDialog()->setColorMode( 2 ); 1477 getEventViewerDialog()->setColorMode( 2 );
1464 getEventViewerDialog()->setIncidence(local); 1478 getEventViewerDialog()->setIncidence(local);
1465 if ( localIsNew ) 1479 if ( localIsNew )
1466 getEventViewerDialog()->setColorMode( 2 ); 1480 getEventViewerDialog()->setColorMode( 2 );
1467 else 1481 else
1468 getEventViewerDialog()->setColorMode( 1 ); 1482 getEventViewerDialog()->setColorMode( 1 );
1469 getEventViewerDialog()->addIncidence(remote); 1483 getEventViewerDialog()->addIncidence(remote);
1470 getEventViewerDialog()->setColorMode( 0 ); 1484 getEventViewerDialog()->setColorMode( 0 );
1471 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1485 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1472 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1486 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1473 getEventViewerDialog()->showMe(); 1487 getEventViewerDialog()->showMe();
1474 result = getEventViewerDialog()->executeS( localIsNew ); 1488 result = getEventViewerDialog()->executeS( localIsNew );
1475 return result; 1489 return result;
1476 1490
1477 break; 1491 break;
1478 case SYNC_PREF_FORCE_LOCAL: 1492 case SYNC_PREF_FORCE_LOCAL:
1479 return 1; 1493 return 1;
1480 break; 1494 break;
1481 case SYNC_PREF_FORCE_REMOTE: 1495 case SYNC_PREF_FORCE_REMOTE:
1482 return 2; 1496 return 2;
1483 break; 1497 break;
1484 1498
1485 default: 1499 default:
1486 // SYNC_PREF_TAKE_BOTH not implemented 1500 // SYNC_PREF_TAKE_BOTH not implemented
1487 break; 1501 break;
1488 } 1502 }
1489 return 0; 1503 return 0;
1490} 1504}
1491Event* CalendarView::getLastSyncEvent() 1505Event* CalendarView::getLastSyncEvent()
1492{ 1506{
1493 Event* lse; 1507 Event* lse;
1494 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1508 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1495 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1509 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1496 if (!lse) { 1510 if (!lse) {
1497 lse = new Event(); 1511 lse = new Event();
1498 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1512 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1499 QString sum = ""; 1513 QString sum = "";
1500 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1514 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1501 sum = "E: "; 1515 sum = "E: ";
1502 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1516 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1503 lse->setDtStart( mLastCalendarSync ); 1517 lse->setDtStart( mLastCalendarSync );
1504 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1518 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1505 lse->setCategories( i18n("SyncEvent") ); 1519 lse->setCategories( i18n("SyncEvent") );
1506 lse->setReadOnly( true ); 1520 lse->setReadOnly( true );
1507 mCalendar->addEvent( lse ); 1521 mCalendar->addEvent( lse );
1508 } 1522 }
1509 1523
1510 return lse; 1524 return lse;
1511 1525
1512} 1526}
1513 1527
1514// we check, if the to delete event has a id for a profile 1528// we check, if the to delete event has a id for a profile
1515// if yes, we set this id in the profile to delete 1529// if yes, we set this id in the profile to delete
1516void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1530void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1517{ 1531{
1518 if ( lastSync.count() == 0 ) { 1532 if ( lastSync.count() == 0 ) {
1519 //qDebug(" lastSync.count() == 0"); 1533 //qDebug(" lastSync.count() == 0");
1520 return; 1534 return;
1521 } 1535 }
1522 if ( toDelete->typeID() == journalID ) 1536 if ( toDelete->typeID() == journalID )
1523 return; 1537 return;
1524 1538
1525 Event* eve = lastSync.first(); 1539 Event* eve = lastSync.first();
1526 1540
1527 while ( eve ) { 1541 while ( eve ) {
1528 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1542 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1529 if ( !id.isEmpty() ) { 1543 if ( !id.isEmpty() ) {
1530 QString des = eve->description(); 1544 QString des = eve->description();
1531 QString pref = "e"; 1545 QString pref = "e";
1532 if ( toDelete->typeID() == todoID ) 1546 if ( toDelete->typeID() == todoID )
1533 pref = "t"; 1547 pref = "t";
1534 des += pref+ id + ","; 1548 des += pref+ id + ",";
1535 eve->setReadOnly( false ); 1549 eve->setReadOnly( false );
1536 eve->setDescription( des ); 1550 eve->setDescription( des );
1537 //qDebug("setdes %s ", des.latin1()); 1551 //qDebug("setdes %s ", des.latin1());
1538 eve->setReadOnly( true ); 1552 eve->setReadOnly( true );
1539 } 1553 }
1540 eve = lastSync.next(); 1554 eve = lastSync.next();
1541 } 1555 }
1542 1556
1543} 1557}
1544void CalendarView::checkExternalId( Incidence * inc ) 1558void CalendarView::checkExternalId( Incidence * inc )
1545{ 1559{
1546 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1560 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1547 checkExternSyncEvent( lastSync, inc ); 1561 checkExternSyncEvent( lastSync, inc );
1548 1562
1549} 1563}
1550bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1564bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1551{ 1565{
1552 bool syncOK = true; 1566 bool syncOK = true;
1553 int addedEvent = 0; 1567 int addedEvent = 0;
1554 int addedEventR = 0; 1568 int addedEventR = 0;
1555 int deletedEventR = 0; 1569 int deletedEventR = 0;
1556 int deletedEventL = 0; 1570 int deletedEventL = 0;
1557 int changedLocal = 0; 1571 int changedLocal = 0;
1558 int changedRemote = 0; 1572 int changedRemote = 0;
1559 int filteredIN = 0; 1573 int filteredIN = 0;
1560 int filteredOUT = 0; 1574 int filteredOUT = 0;
1561 //QPtrList<Event> el = local->rawEvents(); 1575 //QPtrList<Event> el = local->rawEvents();
1562 Event* eventR; 1576 Event* eventR;
1563 QString uid; 1577 QString uid;
1564 int take; 1578 int take;
1565 Event* eventRSync; 1579 Event* eventRSync;
1566 Event* eventLSync; 1580 Event* eventLSync;
1567 clearAllViews(); 1581 clearAllViews();
1568 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1582 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1569 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1583 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1570 bool fullDateRange = false; 1584 bool fullDateRange = false;
1571 local->resetTempSyncStat(); 1585 local->resetTempSyncStat();
1572 mLastCalendarSync = QDateTime::currentDateTime(); 1586 mLastCalendarSync = QDateTime::currentDateTime();
1573 if ( mSyncManager->syncWithDesktop() ) { 1587 if ( mSyncManager->syncWithDesktop() ) {
1574 remote->resetPilotStat(1); 1588 remote->resetPilotStat(1);
1575 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1589 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1576 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1590 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1577 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1591 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1578 } else { 1592 } else {
1579 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1593 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1580 } 1594 }
1581 } 1595 }
1582 QDateTime modifiedCalendar = mLastCalendarSync; 1596 QDateTime modifiedCalendar = mLastCalendarSync;
1583 eventLSync = getLastSyncEvent(); 1597 eventLSync = getLastSyncEvent();
1584 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1598 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1585 if ( eventR ) { 1599 if ( eventR ) {
1586 qDebug("last-syncEvent on remote found "); 1600 qDebug("last-syncEvent on remote found ");
1587 eventRSync = (Event*) eventR->clone(); 1601 eventRSync = (Event*) eventR->clone();
1588 remote->deleteEvent(eventR ); 1602 remote->deleteEvent(eventR );
1589 1603
1590 } else { 1604 } else {
1591 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1605 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1592 eventRSync = (Event*)eventLSync->clone(); 1606 eventRSync = (Event*)eventLSync->clone();
1593 } else { 1607 } else {
1594 fullDateRange = true; 1608 fullDateRange = true;
1595 eventRSync = new Event(); 1609 eventRSync = new Event();
1596 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1610 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1597 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1611 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1598 eventRSync->setDtStart( mLastCalendarSync ); 1612 eventRSync->setDtStart( mLastCalendarSync );
1599 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1613 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1600 eventRSync->setCategories( i18n("SyncEvent") ); 1614 eventRSync->setCategories( i18n("SyncEvent") );
1601 } 1615 }
1602 } 1616 }
1603 if ( eventLSync->dtStart() == mLastCalendarSync ) 1617 if ( eventLSync->dtStart() == mLastCalendarSync )
1604 fullDateRange = true; 1618 fullDateRange = true;
1605 1619
1606 if ( ! fullDateRange ) { 1620 if ( ! fullDateRange ) {
1607 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1621 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1608 1622
1609 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1623 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1610 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1624 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1611 fullDateRange = true; 1625 fullDateRange = true;
1612 } 1626 }
1613 } 1627 }
1614 if ( mSyncManager->syncWithDesktop() ) { 1628 if ( mSyncManager->syncWithDesktop() ) {
1615 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1629 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1616 } 1630 }
1617 if ( fullDateRange ) 1631 if ( fullDateRange )
1618 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1632 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1619 else 1633 else
1620 mLastCalendarSync = eventLSync->dtStart(); 1634 mLastCalendarSync = eventLSync->dtStart();
1621 // for resyncing if own file has changed 1635 // for resyncing if own file has changed
1622 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1636 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1623 mLastCalendarSync = loadedFileVersion; 1637 mLastCalendarSync = loadedFileVersion;
1624 //qDebug("setting mLastCalendarSync "); 1638 //qDebug("setting mLastCalendarSync ");
1625 } 1639 }
1626 //qDebug("*************************** "); 1640 //qDebug("*************************** ");
1627 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1641 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1628 QPtrList<Incidence> er = remote->rawIncidences(); 1642 QPtrList<Incidence> er = remote->rawIncidences();
1629 Incidence* inR = er.first(); 1643 Incidence* inR = er.first();
1630 Incidence* inL; 1644 Incidence* inL;
1631 QProgressBar bar( er.count(),0 ); 1645 QProgressBar bar( er.count(),0 );
1632 bar.setCaption (i18n("Syncing - close to abort!") ); 1646 bar.setCaption (i18n("Syncing - close to abort!") );
1633 1647
1634 // ************** setting up filter ************* 1648 // ************** setting up filter *************
1635 CalFilter *filterIN = 0; 1649 CalFilter *filterIN = 0;
1636 CalFilter *filterOUT = 0; 1650 CalFilter *filterOUT = 0;
1637 CalFilter *filter = mFilters.first(); 1651 CalFilter *filter = mFilters.first();
1638 while(filter) { 1652 while(filter) {
1639 if ( filter->name() == mSyncManager->mFilterInCal ) 1653 if ( filter->name() == mSyncManager->mFilterInCal )
1640 filterIN = filter; 1654 filterIN = filter;
1641 if ( filter->name() == mSyncManager->mFilterOutCal ) 1655 if ( filter->name() == mSyncManager->mFilterOutCal )
1642 filterOUT = filter; 1656 filterOUT = filter;
1643 filter = mFilters.next(); 1657 filter = mFilters.next();
1644 } 1658 }
1645 int w = 300; 1659 int w = 300;
1646 if ( QApplication::desktop()->width() < 320 ) 1660 if ( QApplication::desktop()->width() < 320 )
1647 w = 220; 1661 w = 220;
1648 int h = bar.sizeHint().height() ; 1662 int h = bar.sizeHint().height() ;
1649 int dw = QApplication::desktop()->width(); 1663 int dw = QApplication::desktop()->width();
1650 int dh = QApplication::desktop()->height(); 1664 int dh = QApplication::desktop()->height();
1651 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1665 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1652 bar.show(); 1666 bar.show();
1653 int modulo = (er.count()/10)+1; 1667 int modulo = (er.count()/10)+1;
1654 int incCounter = 0; 1668 int incCounter = 0;
1655 while ( inR ) { 1669 while ( inR ) {
1656 if ( ! bar.isVisible() ) 1670 if ( ! bar.isVisible() )
1657 return false; 1671 return false;
1658 if ( incCounter % modulo == 0 ) 1672 if ( incCounter % modulo == 0 )
1659 bar.setProgress( incCounter ); 1673 bar.setProgress( incCounter );
1660 ++incCounter; 1674 ++incCounter;
1661 uid = inR->uid(); 1675 uid = inR->uid();
1662 bool skipIncidence = false; 1676 bool skipIncidence = false;
1663 if ( uid.left(15) == QString("last-syncEvent-") ) 1677 if ( uid.left(15) == QString("last-syncEvent-") )
1664 skipIncidence = true; 1678 skipIncidence = true;
1665 QString idS; 1679 QString idS;
1666 qApp->processEvents(); 1680 qApp->processEvents();
1667 if ( !skipIncidence ) { 1681 if ( !skipIncidence ) {
1668 inL = local->incidenceForUid( uid , false ); 1682 inL = local->incidenceForUid( uid , false );
1669 if ( inL ) { // maybe conflict - same uid in both calendars 1683 if ( inL ) { // maybe conflict - same uid in both calendars
1670 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1684 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1671 //qDebug("take %d %s ", take, inL->summary().latin1()); 1685 //qDebug("take %d %s ", take, inL->summary().latin1());
1672 if ( take == 3 ) 1686 if ( take == 3 )
1673 return false; 1687 return false;
1674 if ( take == 1 ) {// take local ********************** 1688 if ( take == 1 ) {// take local **********************
1675 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1689 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1676 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1690 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1677 else 1691 else
1678 idS = inR->IDStr(); 1692 idS = inR->IDStr();
1679 int calID = inR->calID(); 1693 int calID = inR->calID();
1680 remote->deleteIncidence( inR ); 1694 remote->deleteIncidence( inR );
1681 inR = inL->clone(); 1695 inR = inL->clone();
1682 inR->setCalID( calID ); 1696 inR->setCalID( calID );
1683 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1697 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1684 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1698 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1685 inR->setIDStr( idS ); 1699 inR->setIDStr( idS );
1686 remote->addIncidence( inR ); 1700 remote->addIncidence( inR );
1687 if ( mSyncManager->syncWithDesktop() ) 1701 if ( mSyncManager->syncWithDesktop() )
1688 inR->setPilotId( 2 ); 1702 inR->setPilotId( 2 );
1689 ++changedRemote; 1703 ++changedRemote;
1690 } else {// take remote ********************** 1704 } else {// take remote **********************
1691 if ( !inL->isReadOnly() ) { 1705 if ( !inL->isReadOnly() ) {
1692 idS = inL->IDStr(); 1706 idS = inL->IDStr();
1693 int pid = inL->pilotId(); 1707 int pid = inL->pilotId();
1694 int calID = inL->calID(); 1708 int calID = inL->calID();
1695 local->deleteIncidence( inL ); 1709 local->deleteIncidence( inL );
1696 inL = inR->clone(); 1710 inL = inR->clone();
1697 inL->setCalID( calID ); 1711 inL->setCalID( calID );
1698 if ( mSyncManager->syncWithDesktop() ) 1712 if ( mSyncManager->syncWithDesktop() )
1699 inL->setPilotId( pid ); 1713 inL->setPilotId( pid );
1700 inL->setIDStr( idS ); 1714 inL->setIDStr( idS );
1701 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1715 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1702 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1716 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1703 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1717 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1704 } 1718 }
1705 local->addIncidence( inL ); 1719 local->addIncidence( inL );
1706 ++changedLocal; 1720 ++changedLocal;
1707 } 1721 }
1708 } 1722 }
1709 } 1723 }
1710 } else { // no conflict ********** add or delete remote 1724 } else { // no conflict ********** add or delete remote
1711 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1725 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1712 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1726 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1713 QString des = eventLSync->description(); 1727 QString des = eventLSync->description();
1714 QString pref = "e"; 1728 QString pref = "e";
1715 if ( inR->typeID() == todoID ) 1729 if ( inR->typeID() == todoID )
1716 pref = "t"; 1730 pref = "t";
1717 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1731 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1718 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1732 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1719 //remote->deleteIncidence( inR ); 1733 //remote->deleteIncidence( inR );
1720 ++deletedEventR; 1734 ++deletedEventR;
1721 } else { 1735 } else {
1722 inR->setLastModified( modifiedCalendar ); 1736 inR->setLastModified( modifiedCalendar );
1723 inL = inR->clone(); 1737 inL = inR->clone();
1724 inL->setIDStr( ":" ); 1738 inL->setIDStr( ":" );
1725 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1739 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1726 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1740 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1727 1741
1728 inL->setCalID( 0 );// add to default cal 1742 inL->setCalID( 0 );// add to default cal
1729 local->addIncidence( inL ); 1743 local->addIncidence( inL );
1730 ++addedEvent; 1744 ++addedEvent;
1731 1745
1732 } 1746 }
1733 } else { 1747 } else {
1734 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1748 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1735 inR->setLastModified( modifiedCalendar ); 1749 inR->setLastModified( modifiedCalendar );
1736 inL = inR->clone(); 1750 inL = inR->clone();
1737 inL->setIDStr( ":" ); 1751 inL->setIDStr( ":" );
1738 inL->setCalID( 0 );// add to default cal 1752 inL->setCalID( 0 );// add to default cal
1739 local->addIncidence( inL ); 1753 local->addIncidence( inL );
1740 ++addedEvent; 1754 ++addedEvent;
1741 1755
1742 } else { 1756 } else {
1743 checkExternSyncEvent(eventRSyncSharp, inR); 1757 checkExternSyncEvent(eventRSyncSharp, inR);
1744 remote->deleteIncidence( inR ); 1758 remote->deleteIncidence( inR );
1745 ++deletedEventR; 1759 ++deletedEventR;
1746 } 1760 }
1747 } 1761 }
1748 } else { 1762 } else {
1749 ++filteredIN; 1763 ++filteredIN;
1750 } 1764 }
1751 } 1765 }
1752 } 1766 }
1753 inR = er.next(); 1767 inR = er.next();
1754 } 1768 }
1755 QPtrList<Incidence> el = local->rawIncidences(); 1769 QPtrList<Incidence> el = local->rawIncidences();
1756 inL = el.first(); 1770 inL = el.first();
1757 modulo = (el.count()/10)+1; 1771 modulo = (el.count()/10)+1;
1758 bar.setCaption (i18n("Add / remove events") ); 1772 bar.setCaption (i18n("Add / remove events") );
1759 bar.setTotalSteps ( el.count() ) ; 1773 bar.setTotalSteps ( el.count() ) ;
1760 bar.show(); 1774 bar.show();
1761 incCounter = 0; 1775 incCounter = 0;
1762 1776
1763 while ( inL ) { 1777 while ( inL ) {
1764 1778
1765 qApp->processEvents(); 1779 qApp->processEvents();
1766 if ( ! bar.isVisible() ) 1780 if ( ! bar.isVisible() )
1767 return false; 1781 return false;
1768 if ( incCounter % modulo == 0 ) 1782 if ( incCounter % modulo == 0 )
1769 bar.setProgress( incCounter ); 1783 bar.setProgress( incCounter );
1770 ++incCounter; 1784 ++incCounter;
1771 uid = inL->uid(); 1785 uid = inL->uid();
1772 bool skipIncidence = false; 1786 bool skipIncidence = false;
1773 if ( uid.left(15) == QString("last-syncEvent-") ) 1787 if ( uid.left(15) == QString("last-syncEvent-") )
1774 skipIncidence = true; 1788 skipIncidence = true;
1775 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1789 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1776 skipIncidence = true; 1790 skipIncidence = true;
1777 if ( !skipIncidence ) { 1791 if ( !skipIncidence ) {
1778 inR = remote->incidenceForUid( uid , true ); 1792 inR = remote->incidenceForUid( uid , true );
1779 if ( ! inR ) { 1793 if ( ! inR ) {
1780 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1794 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1781 // no conflict ********** add or delete local 1795 // no conflict ********** add or delete local
1782 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1796 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1783 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1797 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1784 checkExternSyncEvent(eventLSyncSharp, inL); 1798 checkExternSyncEvent(eventLSyncSharp, inL);
1785 local->deleteIncidence( inL ); 1799 local->deleteIncidence( inL );
1786 ++deletedEventL; 1800 ++deletedEventL;
1787 } else { 1801 } else {
1788 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1802 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1789 inL->removeID(mCurrentSyncDevice ); 1803 inL->removeID(mCurrentSyncDevice );
1790 ++addedEventR; 1804 ++addedEventR;
1791 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1805 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1792 inL->setLastModified( modifiedCalendar ); 1806 inL->setLastModified( modifiedCalendar );
1793 inR = inL->clone(); 1807 inR = inL->clone();
1794 inR->setIDStr( ":" ); 1808 inR->setIDStr( ":" );
1795 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1809 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1796 inR->setCalID( 0 );// add to default cal 1810 inR->setCalID( 0 );// add to default cal
1797 remote->addIncidence( inR ); 1811 remote->addIncidence( inR );
1798 } 1812 }
1799 } 1813 }
1800 } else { 1814 } else {
1801 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1815 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1802 checkExternSyncEvent(eventLSyncSharp, inL); 1816 checkExternSyncEvent(eventLSyncSharp, inL);
1803 local->deleteIncidence( inL ); 1817 local->deleteIncidence( inL );
1804 ++deletedEventL; 1818 ++deletedEventL;
1805 } else { 1819 } else {
1806 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1820 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1807 ++addedEventR; 1821 ++addedEventR;
1808 inL->setLastModified( modifiedCalendar ); 1822 inL->setLastModified( modifiedCalendar );
1809 inR = inL->clone(); 1823 inR = inL->clone();
1810 inR->setIDStr( ":" ); 1824 inR->setIDStr( ":" );
1811 inR->setCalID( 0 );// add to default cal 1825 inR->setCalID( 0 );// add to default cal
1812 remote->addIncidence( inR ); 1826 remote->addIncidence( inR );
1813 } 1827 }
1814 } 1828 }
1815 } 1829 }
1816 } else { 1830 } else {
1817 ++filteredOUT; 1831 ++filteredOUT;
1818 } 1832 }
1819 } 1833 }
1820 } 1834 }
1821 inL = el.next(); 1835 inL = el.next();
1822 } 1836 }
1823 int delFut = 0; 1837 int delFut = 0;
1824 int remRem = 0; 1838 int remRem = 0;
1825 if ( mSyncManager->mWriteBackInFuture ) { 1839 if ( mSyncManager->mWriteBackInFuture ) {
1826 er = remote->rawIncidences(); 1840 er = remote->rawIncidences();
1827 remRem = er.count(); 1841 remRem = er.count();
1828 inR = er.first(); 1842 inR = er.first();
1829 QDateTime dt; 1843 QDateTime dt;
1830 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1844 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1831 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1845 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1832 while ( inR ) { 1846 while ( inR ) {
1833 if ( inR->typeID() == todoID ) { 1847 if ( inR->typeID() == todoID ) {
1834 Todo * t = (Todo*)inR; 1848 Todo * t = (Todo*)inR;
1835 if ( t->hasDueDate() ) 1849 if ( t->hasDueDate() )
1836 dt = t->dtDue(); 1850 dt = t->dtDue();
1837 else 1851 else
1838 dt = cur.addSecs( 62 ); 1852 dt = cur.addSecs( 62 );
1839 } 1853 }
1840 else if (inR->typeID() == eventID ) { 1854 else if (inR->typeID() == eventID ) {
1841 bool ok; 1855 bool ok;
1842 dt = inR->getNextOccurence( cur, &ok ); 1856 dt = inR->getNextOccurence( cur, &ok );
1843 if ( !ok ) 1857 if ( !ok )
1844 dt = cur.addSecs( -62 ); 1858 dt = cur.addSecs( -62 );
1845 } 1859 }
1846 else 1860 else
1847 dt = inR->dtStart(); 1861 dt = inR->dtStart();
1848 if ( dt < cur || dt > end ) { 1862 if ( dt < cur || dt > end ) {
1849 remote->deleteIncidence( inR ); 1863 remote->deleteIncidence( inR );
1850 ++delFut; 1864 ++delFut;
1851 } 1865 }
1852 inR = er.next(); 1866 inR = er.next();
1853 } 1867 }
1854 } 1868 }
1855 bar.hide(); 1869 bar.hide();
1856 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1870 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1857 eventLSync->setReadOnly( false ); 1871 eventLSync->setReadOnly( false );
1858 eventLSync->setDtStart( mLastCalendarSync ); 1872 eventLSync->setDtStart( mLastCalendarSync );
1859 eventRSync->setDtStart( mLastCalendarSync ); 1873 eventRSync->setDtStart( mLastCalendarSync );
1860 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1874 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1861 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1875 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1862 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1876 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1863 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1877 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1864 eventLSync->setReadOnly( true ); 1878 eventLSync->setReadOnly( true );
1865 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1879 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1866 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1880 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1867 remote->addEvent( eventRSync ); 1881 remote->addEvent( eventRSync );
1868 else 1882 else
1869 delete eventRSync; 1883 delete eventRSync;
1870 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1884 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1871 QString mes; 1885 QString mes;
1872 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 ); 1886 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 );
1873 QString delmess; 1887 QString delmess;
1874 if ( delFut ) { 1888 if ( delFut ) {
1875 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); 1889 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);
1876 mes += delmess; 1890 mes += delmess;
1877 } 1891 }
1878 mes = i18n("Local calendar changed!\n") +mes; 1892 mes = i18n("Local calendar changed!\n") +mes;
1879 mCalendar->checkAlarmForIncidence( 0, true ); 1893 mCalendar->checkAlarmForIncidence( 0, true );
1880 qDebug( mes ); 1894 qDebug( mes );
1881 if ( mSyncManager->mShowSyncSummary ) { 1895 if ( mSyncManager->mShowSyncSummary ) {
1882 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1896 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1883 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1897 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1884 qDebug("KO: WB cancelled "); 1898 qDebug("KO: WB cancelled ");
1885 mSyncManager->mWriteBackFile = false; 1899 mSyncManager->mWriteBackFile = false;
1886 return syncOK; 1900 return syncOK;
1887 } 1901 }
1888 } 1902 }
1889 return syncOK; 1903 return syncOK;
1890} 1904}
1891 1905
1892void CalendarView::setSyncDevice( QString s ) 1906void CalendarView::setSyncDevice( QString s )
1893{ 1907{
1894 mCurrentSyncDevice= s; 1908 mCurrentSyncDevice= s;
1895} 1909}
1896void CalendarView::setSyncName( QString s ) 1910void CalendarView::setSyncName( QString s )
1897{ 1911{
1898 mCurrentSyncName= s; 1912 mCurrentSyncName= s;
1899} 1913}
1900bool CalendarView::syncCalendar(QString filename, int mode) 1914bool CalendarView::syncCalendar(QString filename, int mode)
1901{ 1915{
1902 //qDebug("syncCalendar %s ", filename.latin1()); 1916 //qDebug("syncCalendar %s ", filename.latin1());
1903 mGlobalSyncMode = SYNC_MODE_NORMAL; 1917 mGlobalSyncMode = SYNC_MODE_NORMAL;
1904 CalendarLocal* calendar = new CalendarLocal(); 1918 CalendarLocal* calendar = new CalendarLocal();
1905 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1919 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1906 FileStorage* storage = new FileStorage( calendar ); 1920 FileStorage* storage = new FileStorage( calendar );
1907 bool syncOK = false; 1921 bool syncOK = false;
1908 storage->setFileName( filename ); 1922 storage->setFileName( filename );
1909 // qDebug("loading ... "); 1923 // qDebug("loading ... ");
1910 if ( storage->load() ) { 1924 if ( storage->load() ) {
1911 getEventViewerDialog()->setSyncMode( true ); 1925 getEventViewerDialog()->setSyncMode( true );
1912 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1926 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1913 getEventViewerDialog()->setSyncMode( false ); 1927 getEventViewerDialog()->setSyncMode( false );
1914 if ( syncOK ) { 1928 if ( syncOK ) {
1915 if ( mSyncManager->mWriteBackFile ) 1929 if ( mSyncManager->mWriteBackFile )
1916 { 1930 {
1917 storage->setSaveFormat( new ICalFormat() ); 1931 storage->setSaveFormat( new ICalFormat() );
1918 storage->save(); 1932 storage->save();
1919 } 1933 }
1920 } 1934 }
1921 setModified( true ); 1935 setModified( true );
1922 } 1936 }
1923 delete storage; 1937 delete storage;
1924 delete calendar; 1938 delete calendar;
1925 if ( syncOK ) 1939 if ( syncOK )
1926 updateView(); 1940 updateView();
1927 return syncOK; 1941 return syncOK;
1928} 1942}
1929 1943
1930void CalendarView::syncExternal( int mode ) 1944void CalendarView::syncExternal( int mode )
1931{ 1945{
1932 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1946 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1933 1947
1934 qApp->processEvents(); 1948 qApp->processEvents();
1935 CalendarLocal* calendar = new CalendarLocal(); 1949 CalendarLocal* calendar = new CalendarLocal();
1936 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1950 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1937 bool syncOK = false; 1951 bool syncOK = false;
1938 bool loadSuccess = false; 1952 bool loadSuccess = false;
1939 PhoneFormat* phoneFormat = 0; 1953 PhoneFormat* phoneFormat = 0;
1940 emit tempDisableBR(true); 1954 emit tempDisableBR(true);
1941#ifndef DESKTOP_VERSION 1955#ifndef DESKTOP_VERSION
1942 SharpFormat* sharpFormat = 0; 1956 SharpFormat* sharpFormat = 0;
1943 if ( mode == 0 ) { // sharp 1957 if ( mode == 0 ) { // sharp
1944 sharpFormat = new SharpFormat () ; 1958 sharpFormat = new SharpFormat () ;
1945 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1959 loadSuccess = sharpFormat->load( calendar, mCalendar );
1946 1960
1947 } else 1961 } else
1948#endif 1962#endif
1949 if ( mode == 1 ) { // phone 1963 if ( mode == 1 ) { // phone
1950 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1964 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1951 mSyncManager->mPhoneDevice, 1965 mSyncManager->mPhoneDevice,
1952 mSyncManager->mPhoneConnection, 1966 mSyncManager->mPhoneConnection,
1953 mSyncManager->mPhoneModel); 1967 mSyncManager->mPhoneModel);
1954 loadSuccess = phoneFormat->load( calendar,mCalendar); 1968 loadSuccess = phoneFormat->load( calendar,mCalendar);
1955 1969
1956 } else { 1970 } else {
1957 emit tempDisableBR(false); 1971 emit tempDisableBR(false);
1958 return; 1972 return;
1959 } 1973 }
1960 if ( loadSuccess ) { 1974 if ( loadSuccess ) {
1961 getEventViewerDialog()->setSyncMode( true ); 1975 getEventViewerDialog()->setSyncMode( true );
1962 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1976 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1963 getEventViewerDialog()->setSyncMode( false ); 1977 getEventViewerDialog()->setSyncMode( false );
1964 qApp->processEvents(); 1978 qApp->processEvents();
1965 if ( syncOK ) { 1979 if ( syncOK ) {
1966 if ( mSyncManager->mWriteBackFile ) 1980 if ( mSyncManager->mWriteBackFile )
1967 { 1981 {
1968 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1982 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1969 Incidence* inc = iL.first(); 1983 Incidence* inc = iL.first();
1970 if ( phoneFormat ) { 1984 if ( phoneFormat ) {
1971 while ( inc ) { 1985 while ( inc ) {
1972 inc->removeID(mCurrentSyncDevice); 1986 inc->removeID(mCurrentSyncDevice);
1973 inc = iL.next(); 1987 inc = iL.next();
1974 } 1988 }
1975 } 1989 }
1976#ifndef DESKTOP_VERSION 1990#ifndef DESKTOP_VERSION
1977 if ( sharpFormat ) 1991 if ( sharpFormat )
1978 sharpFormat->save(calendar); 1992 sharpFormat->save(calendar);
1979#endif 1993#endif
1980 if ( phoneFormat ) 1994 if ( phoneFormat )
1981 phoneFormat->save(calendar); 1995 phoneFormat->save(calendar);
1982 iL = calendar->rawIncidences(); 1996 iL = calendar->rawIncidences();
1983 inc = iL.first(); 1997 inc = iL.first();
1984 Incidence* loc; 1998 Incidence* loc;
1985 while ( inc ) { 1999 while ( inc ) {
1986 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2000 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1987 loc = mCalendar->incidence(inc->uid() ); 2001 loc = mCalendar->incidence(inc->uid() );
1988 if ( loc ) { 2002 if ( loc ) {
1989 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2003 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1990 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2004 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1991 } 2005 }
1992 } 2006 }
1993 inc = iL.next(); 2007 inc = iL.next();
1994 } 2008 }
1995 Incidence* lse = getLastSyncEvent(); 2009 Incidence* lse = getLastSyncEvent();
1996 if ( lse ) { 2010 if ( lse ) {
1997 lse->setReadOnly( false ); 2011 lse->setReadOnly( false );
1998 lse->setDescription( "" ); 2012 lse->setDescription( "" );
1999 lse->setReadOnly( true ); 2013 lse->setReadOnly( true );
2000 } 2014 }
2001 } 2015 }
2002 } else { 2016 } else {
2003 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2017 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2004 } 2018 }
2005 setModified( true ); 2019 setModified( true );
2006 } else { 2020 } else {
2007 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2021 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2008 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2022 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2009 question, i18n("Ok")) ; 2023 question, i18n("Ok")) ;
2010 2024
2011 } 2025 }
2012 delete calendar; 2026 delete calendar;
2013 updateView(); 2027 updateView();
2014 emit tempDisableBR(false); 2028 emit tempDisableBR(false);
2015 return ;//syncOK; 2029 return ;//syncOK;
2016 2030
2017} 2031}
2018 2032
2019bool CalendarView::importBday() 2033bool CalendarView::importBday()
2020{ 2034{
2021#ifndef KORG_NOKABC 2035#ifndef KORG_NOKABC
2022 2036
2023#ifdef DESKTOP_VERSION 2037#ifdef DESKTOP_VERSION
2024 int curCal = mCalendar->defaultCalendar(); 2038 int curCal = mCalendar->defaultCalendar();
2025 int bd = mCalEditView->getBirtdayID(); 2039 int bd = mCalEditView->getBirtdayID();
2026 if ( bd == 0 ) 2040 if ( bd == 0 )
2027 return false; 2041 return false;
2028 mCalendar->setDefaultCalendar( bd ); 2042 mCalendar->setDefaultCalendar( bd );
2029 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2043 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2030 KABC::AddressBook::Iterator it; 2044 KABC::AddressBook::Iterator it;
2031 int count = 0; 2045 int count = 0;
2032 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2046 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2033 ++count; 2047 ++count;
2034 } 2048 }
2035 QProgressBar bar(count,0 ); 2049 QProgressBar bar(count,0 );
2036 int w = 300; 2050 int w = 300;
2037 if ( QApplication::desktop()->width() < 320 ) 2051 if ( QApplication::desktop()->width() < 320 )
2038 w = 220; 2052 w = 220;
2039 int h = bar.sizeHint().height() ; 2053 int h = bar.sizeHint().height() ;
2040 int dw = QApplication::desktop()->width(); 2054 int dw = QApplication::desktop()->width();
2041 int dh = QApplication::desktop()->height(); 2055 int dh = QApplication::desktop()->height();
2042 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2056 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2043 bar.show(); 2057 bar.show();
2044 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2058 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2045 qApp->processEvents(); 2059 qApp->processEvents();
2046 count = 0; 2060 count = 0;
2047 int addCount = 0; 2061 int addCount = 0;
2048 KCal::Attendee* a = 0; 2062 KCal::Attendee* a = 0;
2049 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2063 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2050 if ( ! bar.isVisible() ) 2064 if ( ! bar.isVisible() )
2051 return false; 2065 return false;
2052 bar.setProgress( count++ ); 2066 bar.setProgress( count++ );
2053 qApp->processEvents(); 2067 qApp->processEvents();
2054 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2068 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2055 if ( (*it).birthday().date().isValid() ){ 2069 if ( (*it).birthday().date().isValid() ){
2056 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2070 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2057 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2071 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2058 ++addCount; 2072 ++addCount;
2059 } 2073 }
2060 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2074 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2061 if ( anni.isValid() ){ 2075 if ( anni.isValid() ){
2062 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2076 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2063 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2077 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2064 ++addCount; 2078 ++addCount;
2065 } 2079 }
2066 } 2080 }
2067 mCalendar->setDefaultCalendar( curCal ); 2081 mCalendar->setDefaultCalendar( curCal );
2068 updateView(); 2082 updateView();
2069 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2083 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2070#else //DESKTOP_VERSION 2084#else //DESKTOP_VERSION
2071 2085
2072 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2086 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2073 // the result should now arrive through method insertBirthdays 2087 // the result should now arrive through method insertBirthdays
2074 2088
2075#endif //DESKTOP_VERSION 2089#endif //DESKTOP_VERSION
2076 2090
2077#endif //KORG_NOKABC 2091#endif //KORG_NOKABC
2078 2092
2079 2093
2080 return true; 2094 return true;
2081} 2095}
2082 2096
2083// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2097// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2084void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2098void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2085 const QStringList& anniversaryList, const QStringList& realNameList, 2099 const QStringList& anniversaryList, const QStringList& realNameList,
2086 const QStringList& emailList, const QStringList& assembledNameList, 2100 const QStringList& emailList, const QStringList& assembledNameList,
2087 const QStringList& uidList) 2101 const QStringList& uidList)
2088{ 2102{
2089 2103
2090 //qDebug("KO::CalendarView::insertBirthdays"); 2104 //qDebug("KO::CalendarView::insertBirthdays");
2091 if (uid == this->name()) 2105 if (uid == this->name())
2092 { 2106 {
2093 int curCal = mCalendar->defaultCalendar(); 2107 int curCal = mCalendar->defaultCalendar();
2094 int bd = mCalEditView->getBirtdayID(); 2108 int bd = mCalEditView->getBirtdayID();
2095 if ( bd == 0 ) 2109 if ( bd == 0 )
2096 return; 2110 return;
2097 mCalendar->setDefaultCalendar( bd ); 2111 mCalendar->setDefaultCalendar( bd );
2098 2112
2099 2113
2100 int count = birthdayList.count(); 2114 int count = birthdayList.count();
2101 int addCount = 0; 2115 int addCount = 0;
2102 KCal::Attendee* a = 0; 2116 KCal::Attendee* a = 0;
2103 2117
2104 //qDebug("CalView 1 %i", count); 2118 //qDebug("CalView 1 %i", count);
2105 2119
2106 QProgressBar bar(count,0 ); 2120 QProgressBar bar(count,0 );
2107 int w = 300; 2121 int w = 300;
2108 if ( QApplication::desktop()->width() < 320 ) 2122 if ( QApplication::desktop()->width() < 320 )
2109 w = 220; 2123 w = 220;
2110 int h = bar.sizeHint().height() ; 2124 int h = bar.sizeHint().height() ;
2111 int dw = QApplication::desktop()->width(); 2125 int dw = QApplication::desktop()->width();
2112 int dh = QApplication::desktop()->height(); 2126 int dh = QApplication::desktop()->height();
2113 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2127 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2114 bar.show(); 2128 bar.show();
2115 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2129 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2116 qApp->processEvents(); 2130 qApp->processEvents();
2117 2131
2118 QDate birthday; 2132 QDate birthday;
2119 QDate anniversary; 2133 QDate anniversary;
2120 QString realName; 2134 QString realName;
2121 QString email; 2135 QString email;
2122 QString assembledName; 2136 QString assembledName;
2123 QString uid; 2137 QString uid;
2124 bool ok = true; 2138 bool ok = true;
2125 for ( int i = 0; i < count; i++) 2139 for ( int i = 0; i < count; i++)
2126 { 2140 {
2127 if ( ! bar.isVisible() ) 2141 if ( ! bar.isVisible() )
2128 return; 2142 return;
2129 bar.setProgress( i ); 2143 bar.setProgress( i );
2130 qApp->processEvents(); 2144 qApp->processEvents();
2131 2145
2132 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2146 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2133 if (!ok) { 2147 if (!ok) {
2134 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2148 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2135 } 2149 }
2136 2150
2137 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2151 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2138 if (!ok) { 2152 if (!ok) {
2139 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2153 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2140 } 2154 }
2141 realName = realNameList[i]; 2155 realName = realNameList[i];
2142 email = emailList[i]; 2156 email = emailList[i];
2143 assembledName = assembledNameList[i]; 2157 assembledName = assembledNameList[i];
2144 uid = uidList[i]; 2158 uid = uidList[i];
2145 //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() ); 2159 //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() );
2146 2160
2147 if ( birthday.isValid() ){ 2161 if ( birthday.isValid() ){
2148 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2162 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2149 KCal::Attendee::ReqParticipant,uid) ; 2163 KCal::Attendee::ReqParticipant,uid) ;
2150 if ( addAnniversary( birthday, assembledName, a, true ) ) 2164 if ( addAnniversary( birthday, assembledName, a, true ) )
2151 ++addCount; 2165 ++addCount;
2152 } 2166 }
2153 2167
2154 if ( anniversary.isValid() ){ 2168 if ( anniversary.isValid() ){
2155 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2169 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2156 KCal::Attendee::ReqParticipant,uid) ; 2170 KCal::Attendee::ReqParticipant,uid) ;
2157 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2171 if ( addAnniversary( anniversary, assembledName, a, false ) )
2158 ++addCount; 2172 ++addCount;
2159 } 2173 }
2160 } 2174 }
2161 2175
2162 mCalendar->setDefaultCalendar( curCal ); 2176 mCalendar->setDefaultCalendar( curCal );
2163 updateView(); 2177 updateView();
2164 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2178 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2165 2179
2166 } 2180 }
2167 2181
2168} 2182}
2169 2183
2170 2184
2171 2185
2172bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2186bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2173{ 2187{
2174 //qDebug("addAnni "); 2188 //qDebug("addAnni ");
2175 Event * ev = new Event(); 2189 Event * ev = new Event();
2176 ev->setOrganizer(KOPrefs::instance()->email()); 2190 ev->setOrganizer(KOPrefs::instance()->email());
2177 if ( a ) { 2191 if ( a ) {
2178 ev->addAttendee( a ); 2192 ev->addAttendee( a );
2179 } 2193 }
2180 QString kind; 2194 QString kind;
2181 if ( birthday ) { 2195 if ( birthday ) {
2182 kind = i18n( "Birthday" ); 2196 kind = i18n( "Birthday" );
2183 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2197 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2184 } 2198 }
2185 else { 2199 else {
2186 kind = i18n( "Anniversary" ); 2200 kind = i18n( "Anniversary" );
2187 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2201 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2188 } 2202 }
2189 ev->setCategories( kind ); 2203 ev->setCategories( kind );
2190 ev->setDtStart( QDateTime(date) ); 2204 ev->setDtStart( QDateTime(date) );
2191 ev->setDtEnd( QDateTime(date) ); 2205 ev->setDtEnd( QDateTime(date) );
2192 ev->setFloats( true ); 2206 ev->setFloats( true );
2193 Recurrence * rec = ev->recurrence(); 2207 Recurrence * rec = ev->recurrence();
2194 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2208 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2195 rec->addYearlyNum( date.month() ); 2209 rec->addYearlyNum( date.month() );
2196 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2210 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2197 delete ev; 2211 delete ev;
2198 return false; 2212 return false;
2199 } 2213 }
2200 return true; 2214 return true;
2201 2215
2202} 2216}
2203bool CalendarView::importQtopia( const QString &categories, 2217bool CalendarView::importQtopia( const QString &categories,
2204 const QString &datebook, 2218 const QString &datebook,
2205 const QString &todolist ) 2219 const QString &todolist )
2206{ 2220{
2207 2221
2208 QtopiaFormat qtopiaFormat; 2222 QtopiaFormat qtopiaFormat;
2209 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2223 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2210 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2224 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2211 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2225 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2212 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2226 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2213 2227
2214 updateView(); 2228 updateView();
2215 return true; 2229 return true;
2216 2230
2217#if 0 2231#if 0
2218 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2232 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2219 mCurrentSyncDevice = "qtopia-XML"; 2233 mCurrentSyncDevice = "qtopia-XML";
2220 if ( mSyncManager->mAskForPreferences ) 2234 if ( mSyncManager->mAskForPreferences )
2221 edit_sync_options(); 2235 edit_sync_options();
2222 qApp->processEvents(); 2236 qApp->processEvents();
2223 CalendarLocal* calendar = new CalendarLocal(); 2237 CalendarLocal* calendar = new CalendarLocal();
2224 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2238 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2225 bool syncOK = false; 2239 bool syncOK = false;
2226 QtopiaFormat qtopiaFormat; 2240 QtopiaFormat qtopiaFormat;
2227 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2241 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2228 bool loadOk = true; 2242 bool loadOk = true;
2229 if ( !categories.isEmpty() ) 2243 if ( !categories.isEmpty() )
2230 loadOk = qtopiaFormat.load( calendar, categories ); 2244 loadOk = qtopiaFormat.load( calendar, categories );
2231 if ( loadOk && !datebook.isEmpty() ) 2245 if ( loadOk && !datebook.isEmpty() )
2232 loadOk = qtopiaFormat.load( calendar, datebook ); 2246 loadOk = qtopiaFormat.load( calendar, datebook );
2233 if ( loadOk && !todolist.isEmpty() ) 2247 if ( loadOk && !todolist.isEmpty() )
2234 loadOk = qtopiaFormat.load( calendar, todolist ); 2248 loadOk = qtopiaFormat.load( calendar, todolist );
2235 2249
2236 if ( loadOk ) { 2250 if ( loadOk ) {
2237 getEventViewerDialog()->setSyncMode( true ); 2251 getEventViewerDialog()->setSyncMode( true );
2238 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2252 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2239 getEventViewerDialog()->setSyncMode( false ); 2253 getEventViewerDialog()->setSyncMode( false );
2240 qApp->processEvents(); 2254 qApp->processEvents();
2241 if ( syncOK ) { 2255 if ( syncOK ) {
2242 if ( mSyncManager->mWriteBackFile ) 2256 if ( mSyncManager->mWriteBackFile )
2243 { 2257 {
2244 // write back XML file 2258 // write back XML file
2245 2259
2246 } 2260 }
2247 setModified( true ); 2261 setModified( true );
2248 } 2262 }
2249 } else { 2263 } else {
2250 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2264 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2251 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2265 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2252 question, i18n("Ok")) ; 2266 question, i18n("Ok")) ;
2253 } 2267 }
2254 delete calendar; 2268 delete calendar;
2255 updateView(); 2269 updateView();
2256 return syncOK; 2270 return syncOK;
2257 2271
2258 2272
2259#endif 2273#endif
2260 2274
2261} 2275}
2262 2276
2263void CalendarView::setSyncEventsReadOnly() 2277void CalendarView::setSyncEventsReadOnly()
2264{ 2278{
2265 mCalendar->setSyncEventsReadOnly(); 2279 mCalendar->setSyncEventsReadOnly();
2266} 2280}
2267 2281
2268bool CalendarView::loadCalendars() 2282bool CalendarView::loadCalendars()
2269{ 2283{
2270 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2284 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2271 KopiCalendarFile * cal = calendars.first(); 2285 KopiCalendarFile * cal = calendars.first();
2272 mCalendar->setDefaultCalendar( 1 ); 2286 mCalendar->setDefaultCalendar( 1 );
2273 openCalendar( MainWindow::defaultFileName(), false ); 2287 openCalendar( MainWindow::defaultFileName(), false );
2274 cal = calendars.next(); 2288 cal = calendars.next();
2275 while ( cal ) { 2289 while ( cal ) {
2276 addCalendar( cal ); 2290 addCalendar( cal );
2277 cal = calendars.next(); 2291 cal = calendars.next();
2278 } 2292 }
2279 restoreCalendarSettings(); 2293 restoreCalendarSettings();
2280 return true; 2294 return true;
2281} 2295}
2282bool CalendarView::restoreCalendarSettings() 2296bool CalendarView::restoreCalendarSettings()
2283{ 2297{
2284 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2298 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2285 KopiCalendarFile * cal = calendars.first(); 2299 KopiCalendarFile * cal = calendars.first();
2286 while ( cal ) { 2300 while ( cal ) {
2287 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2301 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2288 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2302 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2289 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2303 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2290 if ( cal->isStandard ) 2304 if ( cal->isStandard )
2291 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2305 mCalendar->setDefaultCalendar( cal->mCalNumber );
2292 cal = calendars.next(); 2306 cal = calendars.next();
2293 } 2307 }
2294 setSyncEventsReadOnly(); 2308 setSyncEventsReadOnly();
2295 mCalendar->reInitAlarmSettings(); 2309 mCalendar->reInitAlarmSettings();
2296 updateUnmanagedViews(); 2310 updateUnmanagedViews();
2297 updateView(); 2311 updateView();
2298 return true; 2312 return true;
2299} 2313}
2300void CalendarView::addCalendarId( int id ) 2314void CalendarView::addCalendarId( int id )
2301{ 2315{
2302 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2316 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2303 if ( cal ) 2317 if ( cal )
2304 addCalendar( cal ); 2318 addCalendar( cal );
2305} 2319}
2306bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2320bool CalendarView::addCalendar( KopiCalendarFile * cal )
2307{ 2321{
2308 cal->mErrorOnLoad = false; 2322 cal->mErrorOnLoad = false;
2309 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2323 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2310 cal->mLoadDt = QDateTime::currentDateTime(); 2324 cal->mLoadDt = QDateTime::currentDateTime();
2311 return true; 2325 return true;
2312 } 2326 }
2313 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2327 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2314 cal->mErrorOnLoad = true; 2328 cal->mErrorOnLoad = true;
2315 return false; 2329 return false;
2316} 2330}
2317bool CalendarView::openCalendar(QString filename, bool merge) 2331bool CalendarView::openCalendar(QString filename, bool merge)
2318{ 2332{
2319 2333
2320 if (filename.isEmpty()) { 2334 if (filename.isEmpty()) {
2321 return false; 2335 return false;
2322 } 2336 }
2323 2337
2324 if (!QFile::exists(filename)) { 2338 if (!QFile::exists(filename)) {
2325 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2339 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2326 return false; 2340 return false;
2327 } 2341 }
2328 2342
2329 globalFlagBlockAgenda = 1; 2343 globalFlagBlockAgenda = 1;
2330 clearAllViews(); 2344 clearAllViews();
2331 if (!merge) { 2345 if (!merge) {
2332 mViewManager->setDocumentId( filename ); 2346 mViewManager->setDocumentId( filename );
2333 mCalendar->close(); 2347 mCalendar->close();
2334 } 2348 }
2335 mStorage->setFileName( filename ); 2349 mStorage->setFileName( filename );
2336 2350
2337 if ( mStorage->load() ) { 2351 if ( mStorage->load() ) {
2338 if ( merge ) ;//setModified( true ); 2352 if ( merge ) ;//setModified( true );
2339 else { 2353 else {
2340 //setModified( true ); 2354 //setModified( true );
2341 mViewManager->setDocumentId( filename ); 2355 mViewManager->setDocumentId( filename );
2342 mDialogManager->setDocumentId( filename ); 2356 mDialogManager->setDocumentId( filename );
2343 mTodoList->setDocumentId( filename ); 2357 mTodoList->setDocumentId( filename );
2344 } 2358 }
2345 globalFlagBlockAgenda = 2; 2359 globalFlagBlockAgenda = 2;
2346 // if ( getLastSyncEvent() ) 2360 // if ( getLastSyncEvent() )
2347 // getLastSyncEvent()->setReadOnly( true ); 2361 // getLastSyncEvent()->setReadOnly( true );
2348 mCalendar->reInitAlarmSettings(); 2362 mCalendar->reInitAlarmSettings();
2349 setSyncEventsReadOnly(); 2363 setSyncEventsReadOnly();
2350 updateUnmanagedViews(); 2364 updateUnmanagedViews();
2351 updateView(); 2365 updateView();
2352 if ( filename != MainWindow::defaultFileName() ) { 2366 if ( filename != MainWindow::defaultFileName() ) {
2353 saveCalendar( MainWindow::defaultFileName() ); 2367 saveCalendar( MainWindow::defaultFileName() );
2354 } else { 2368 } else {
2355 QFileInfo finf ( MainWindow::defaultFileName()); 2369 QFileInfo finf ( MainWindow::defaultFileName());
2356 if ( finf.exists() ) { 2370 if ( finf.exists() ) {
2357 setLoadedFileVersion( finf.lastModified () ); 2371 setLoadedFileVersion( finf.lastModified () );
2358 } 2372 }
2359 } 2373 }
2360 return true; 2374 return true;
2361 } else { 2375 } else {
2362 // while failing to load, the calendar object could 2376 // while failing to load, the calendar object could
2363 // have become partially populated. Clear it out. 2377 // have become partially populated. Clear it out.
2364 if ( !merge ) { 2378 if ( !merge ) {
2365 mCalendar->close(); 2379 mCalendar->close();
2366 mViewManager->setDocumentId( filename ); 2380 mViewManager->setDocumentId( filename );
2367 mDialogManager->setDocumentId( filename ); 2381 mDialogManager->setDocumentId( filename );
2368 mTodoList->setDocumentId( filename ); 2382 mTodoList->setDocumentId( filename );
2369 } 2383 }
2370 2384
2371 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2385 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2372 2386
2373 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2387 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2374 globalFlagBlockAgenda = 2; 2388 globalFlagBlockAgenda = 2;
2375 mCalendar->reInitAlarmSettings(); 2389 mCalendar->reInitAlarmSettings();
2376 setSyncEventsReadOnly(); 2390 setSyncEventsReadOnly();
2377 updateUnmanagedViews(); 2391 updateUnmanagedViews();
2378 updateView(); 2392 updateView();
2379 } 2393 }
2380 return false; 2394 return false;
2381} 2395}
2382void CalendarView::mergeFile( QString fn ) 2396void CalendarView::mergeFile( QString fn )
2383{ 2397{
2384 clearAllViews(); 2398 clearAllViews();
2385 mCalendar->mergeCalendarFile( fn ); 2399 mCalendar->mergeCalendarFile( fn );
2386 mCalendar->reInitAlarmSettings(); 2400 mCalendar->reInitAlarmSettings();
2387 setSyncEventsReadOnly(); 2401 setSyncEventsReadOnly();
2388 updateUnmanagedViews(); 2402 updateUnmanagedViews();
2389 updateView(); 2403 updateView();
2390} 2404}
2391void CalendarView::showOpenError() 2405void CalendarView::showOpenError()
2392{ 2406{
2393 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2407 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2394} 2408}
2395void CalendarView::setLoadedFileVersion(QDateTime dt) 2409void CalendarView::setLoadedFileVersion(QDateTime dt)
2396{ 2410{
2397 loadedFileVersion = dt; 2411 loadedFileVersion = dt;
2398} 2412}
2399bool CalendarView::checkFileChanged(QString fn) 2413bool CalendarView::checkFileChanged(QString fn)
2400{ 2414{
2401 QFileInfo finf ( fn ); 2415 QFileInfo finf ( fn );
2402 if ( !finf.exists() ) 2416 if ( !finf.exists() )
2403 return true; 2417 return true;
2404 QDateTime dt = finf.lastModified (); 2418 QDateTime dt = finf.lastModified ();
2405 if ( dt <= loadedFileVersion ) 2419 if ( dt <= loadedFileVersion )
2406 return false; 2420 return false;
2407 return true; 2421 return true;
2408 2422
2409} 2423}
2410void CalendarView::watchSavedFile() 2424void CalendarView::watchSavedFile()
2411{ 2425{
2412 QFileInfo finf ( MainWindow::defaultFileName()); 2426 QFileInfo finf ( MainWindow::defaultFileName());
2413 if ( !finf.exists() ) 2427 if ( !finf.exists() )
2414 return; 2428 return;
2415 QDateTime dt = finf.lastModified (); 2429 QDateTime dt = finf.lastModified ();
2416 if ( dt < loadedFileVersion ) { 2430 if ( dt < loadedFileVersion ) {
2417 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2431 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2418 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2432 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2419 return; 2433 return;
2420 } 2434 }
2421 loadedFileVersion = dt; 2435 loadedFileVersion = dt;
2422} 2436}
2423bool CalendarView::checkAllFileVersions() 2437bool CalendarView::checkAllFileVersions()
2424{ 2438{
2425 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2439 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2426 KopiCalendarFile * cal = calendars.first(); 2440 KopiCalendarFile * cal = calendars.first();
2427 mCalendar->setDefaultCalendar( 1 ); 2441 mCalendar->setDefaultCalendar( 1 );
2428 mCalendar->setDefaultCalendarEnabledOnly(); 2442 mCalendar->setDefaultCalendarEnabledOnly();
2429 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2443 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2430 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2444 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2431 restoreCalendarSettings(); 2445 restoreCalendarSettings();
2432 return false; 2446 return false;
2433 } 2447 }
2434 } 2448 }
2435 cal = calendars.next(); 2449 cal = calendars.next();
2436 QDateTime storeTemp = loadedFileVersion; 2450 QDateTime storeTemp = loadedFileVersion;
2437 while ( cal ) { 2451 while ( cal ) {
2438 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2452 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2439 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2453 mCalendar->setDefaultCalendar( cal->mCalNumber );
2440 mCalendar->setDefaultCalendarEnabledOnly(); 2454 mCalendar->setDefaultCalendarEnabledOnly();
2441 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2455 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2442 if ( !checkFileVersion(cal->mFileName )) { 2456 if ( !checkFileVersion(cal->mFileName )) {
2443 loadedFileVersion = storeTemp; 2457 loadedFileVersion = storeTemp;
2444 restoreCalendarSettings(); 2458 restoreCalendarSettings();
2445 return false; 2459 return false;
2446 } 2460 }
2447 } 2461 }
2448 cal = calendars.next(); 2462 cal = calendars.next();
2449 } 2463 }
2450 loadedFileVersion = storeTemp; 2464 loadedFileVersion = storeTemp;
2451 return true; 2465 return true;
2452} 2466}
2453bool CalendarView::checkFileVersion(QString fn) 2467bool CalendarView::checkFileVersion(QString fn)
2454{ 2468{
2455 QFileInfo finf ( fn ); 2469 QFileInfo finf ( fn );
2456 if ( !finf.exists() ) 2470 if ( !finf.exists() )
2457 return true; 2471 return true;
2458 QDateTime dt = finf.lastModified (); 2472 QDateTime dt = finf.lastModified ();
2459 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2473 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2460 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2474 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2461 if ( dt <= loadedFileVersion ) 2475 if ( dt <= loadedFileVersion )
2462 return true; 2476 return true;
2463 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)) , 2477 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)) ,
2464 i18n("KO/Pi Warning"),i18n("Overwrite"), 2478 i18n("KO/Pi Warning"),i18n("Overwrite"),
2465 i18n("Sync+save")); 2479 i18n("Sync+save"));
2466 2480
2467 if ( km == KMessageBox::Cancel ) 2481 if ( km == KMessageBox::Cancel )
2468 return false; 2482 return false;
2469 if ( km == KMessageBox::Yes ) 2483 if ( km == KMessageBox::Yes )
2470 return true; 2484 return true;
2471 2485
2472 setSyncDevice("deleteaftersync" ); 2486 setSyncDevice("deleteaftersync" );
2473 mSyncManager->mAskForPreferences = true; 2487 mSyncManager->mAskForPreferences = true;
2474 mSyncManager->mSyncAlgoPrefs = 3; 2488 mSyncManager->mSyncAlgoPrefs = 3;
2475 mSyncManager->mWriteBackFile = false; 2489 mSyncManager->mWriteBackFile = false;
2476 mSyncManager->mWriteBackExistingOnly = false; 2490 mSyncManager->mWriteBackExistingOnly = false;
2477 mSyncManager->mShowSyncSummary = false; 2491 mSyncManager->mShowSyncSummary = false;
2478 syncCalendar( fn, 3 ); 2492 syncCalendar( fn, 3 );
2479 Event * e = getLastSyncEvent(); 2493 Event * e = getLastSyncEvent();
2480 if ( e ) 2494 if ( e )
2481 mCalendar->deleteEvent( e ); 2495 mCalendar->deleteEvent( e );
2482 return true; 2496 return true;
2483} 2497}
2484bool CalendarView::saveCalendars() 2498bool CalendarView::saveCalendars()
2485{ 2499{
2486 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2500 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2487 KopiCalendarFile * cal = calendars.first(); 2501 KopiCalendarFile * cal = calendars.first();
2488 mCalendar->setDefaultCalendar( 1 ); 2502 mCalendar->setDefaultCalendar( 1 );
2489 mCalendar->setDefaultCalendarEnabledOnly(); 2503 mCalendar->setDefaultCalendarEnabledOnly();
2490 saveCalendar( MainWindow::defaultFileName() ); 2504 saveCalendar( MainWindow::defaultFileName() );
2491 cal = calendars.next(); 2505 cal = calendars.next();
2492 while ( cal ) { 2506 while ( cal ) {
2493 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2507 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2494 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2508 mCalendar->setDefaultCalendar( cal->mCalNumber );
2495 mCalendar->setDefaultCalendarEnabledOnly(); 2509 mCalendar->setDefaultCalendarEnabledOnly();
2496 if ( saveCalendar( cal->mFileName ) ) 2510 if ( saveCalendar( cal->mFileName ) )
2497 cal->mLoadDt = QDateTime::currentDateTime(); 2511 cal->mLoadDt = QDateTime::currentDateTime();
2498 } 2512 }
2499 cal = calendars.next(); 2513 cal = calendars.next();
2500 } 2514 }
2501 restoreCalendarSettings(); 2515 restoreCalendarSettings();
2502 return true; 2516 return true;
2503} 2517}
2504bool CalendarView::saveCalendar( QString filename ) 2518bool CalendarView::saveCalendar( QString filename )
2505{ 2519{
2506 2520
2507 // Store back all unsaved data into calendar object 2521 // Store back all unsaved data into calendar object
2508 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2522 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2509 if ( mViewManager->currentView() ) 2523 if ( mViewManager->currentView() )
2510 mViewManager->currentView()->flushView(); 2524 mViewManager->currentView()->flushView();
2511 2525
2512 2526
2513 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2527 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2514 mStorage->setSaveFormat( new ICalFormat() ); 2528 mStorage->setSaveFormat( new ICalFormat() );
2515 mStorage->setFileName( filename ); 2529 mStorage->setFileName( filename );
2516 bool success; 2530 bool success;
2517 success = mStorage->save(); 2531 success = mStorage->save();
2518 if ( !success ) { 2532 if ( !success ) {
2519 return false; 2533 return false;
2520 } 2534 }
2521 if ( filename == MainWindow::defaultFileName() ) { 2535 if ( filename == MainWindow::defaultFileName() ) {
2522 setLoadedFileVersion( lfv ); 2536 setLoadedFileVersion( lfv );
2523 watchSavedFile(); 2537 watchSavedFile();
2524 } 2538 }
2525 return true; 2539 return true;
2526} 2540}
2527 2541
2528void CalendarView::closeCalendar() 2542void CalendarView::closeCalendar()
2529{ 2543{
2530 2544
2531 // child windows no longer valid 2545 // child windows no longer valid
2532 clearAllViews(); 2546 clearAllViews();
2533 emit closingDown(); 2547 emit closingDown();
2534 2548
2535 mCalendar->close(); 2549 mCalendar->close();
2536 setModified(false); 2550 setModified(false);
2537 updateView(); 2551 updateView();
2538} 2552}
2539 2553
2540void CalendarView::archiveCalendar() 2554void CalendarView::archiveCalendar()
2541{ 2555{
2542 mDialogManager->showArchiveDialog(); 2556 mDialogManager->showArchiveDialog();
2543} 2557}
2544 2558
2545 2559
2546void CalendarView::readSettings() 2560void CalendarView::readSettings()
2547{ 2561{
2548 2562
2549 2563
2550 // mViewManager->showAgendaView(); 2564 // mViewManager->showAgendaView();
2551 QString str; 2565 QString str;
2552 //qDebug("CalendarView::readSettings() "); 2566 //qDebug("CalendarView::readSettings() ");
2553 // read settings from the KConfig, supplying reasonable 2567 // read settings from the KConfig, supplying reasonable
2554 // defaults where none are to be found 2568 // defaults where none are to be found
2555 KConfig *config = KOGlobals::config(); 2569 KConfig *config = KOGlobals::config();
2556#ifndef KORG_NOSPLITTER 2570#ifndef KORG_NOSPLITTER
2557 config->setGroup("KOrganizer Geometry"); 2571 config->setGroup("KOrganizer Geometry");
2558 2572
2559 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2573 QValueList<int> sizes = config->readIntListEntry("Separator1");
2560 if (sizes.count() != 2) { 2574 if (sizes.count() != 2) {
2561 sizes << mDateNavigator->minimumSizeHint().width(); 2575 sizes << mDateNavigator->minimumSizeHint().width();
2562 sizes << 300; 2576 sizes << 300;
2563 } 2577 }
2564 mPanner->setSizes(sizes); 2578 mPanner->setSizes(sizes);
2565 2579
2566 sizes = config->readIntListEntry("Separator2"); 2580 sizes = config->readIntListEntry("Separator2");
2567 if ( ( mResourceView && sizes.count() == 4 ) || 2581 if ( ( mResourceView && sizes.count() == 4 ) ||
2568 ( !mResourceView && sizes.count() == 3 ) ) { 2582 ( !mResourceView && sizes.count() == 3 ) ) {
2569 mLeftSplitter->setSizes(sizes); 2583 mLeftSplitter->setSizes(sizes);
2570 } 2584 }
2571#endif 2585#endif
2572 globalFlagBlockAgenda = 1; 2586 globalFlagBlockAgenda = 1;
2573 mViewManager->showAgendaView(); 2587 mViewManager->showAgendaView();
2574 //mViewManager->readSettings( config ); 2588 //mViewManager->readSettings( config );
2575 mTodoList->restoreLayout(config,QString("Todo Layout")); 2589 mTodoList->restoreLayout(config,QString("Todo Layout"));
2576 readFilterSettings(config); 2590 readFilterSettings(config);
2577 2591
2578#ifdef DESKTOP_VERSION 2592#ifdef DESKTOP_VERSION
2579 config->setGroup("WidgetLayout"); 2593 config->setGroup("WidgetLayout");
2580 QStringList list; 2594 QStringList list;
2581 list = config->readListEntry("MainLayout"); 2595 list = config->readListEntry("MainLayout");
2582 int x,y,w,h; 2596 int x,y,w,h;
2583 if ( ! list.isEmpty() ) { 2597 if ( ! list.isEmpty() ) {
2584 x = list[0].toInt(); 2598 x = list[0].toInt();
2585 y = list[1].toInt(); 2599 y = list[1].toInt();
2586 w = list[2].toInt(); 2600 w = list[2].toInt();
2587 h = list[3].toInt(); 2601 h = list[3].toInt();
2588 KApplication::testCoords( &x,&y,&w,&h ); 2602 KApplication::testCoords( &x,&y,&w,&h );
2589 topLevelWidget()->setGeometry(x,y,w,h); 2603 topLevelWidget()->setGeometry(x,y,w,h);
2590 2604
2591 } else { 2605 } else {
2592 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2606 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2593 } 2607 }
2594 list = config->readListEntry("EditEventLayout"); 2608 list = config->readListEntry("EditEventLayout");
2595 if ( ! list.isEmpty() ) { 2609 if ( ! list.isEmpty() ) {
2596 x = list[0].toInt(); 2610 x = list[0].toInt();
2597 y = list[1].toInt(); 2611 y = list[1].toInt();
2598 w = list[2].toInt(); 2612 w = list[2].toInt();
2599 h = list[3].toInt(); 2613 h = list[3].toInt();
2600 KApplication::testCoords( &x,&y,&w,&h ); 2614 KApplication::testCoords( &x,&y,&w,&h );
2601 mEventEditor->setGeometry(x,y,w,h); 2615 mEventEditor->setGeometry(x,y,w,h);
2602 2616
2603 } 2617 }
2604 list = config->readListEntry("EditTodoLayout"); 2618 list = config->readListEntry("EditTodoLayout");
2605 if ( ! list.isEmpty() ) { 2619 if ( ! list.isEmpty() ) {
2606 x = list[0].toInt(); 2620 x = list[0].toInt();
2607 y = list[1].toInt(); 2621 y = list[1].toInt();
2608 w = list[2].toInt(); 2622 w = list[2].toInt();
2609 h = list[3].toInt(); 2623 h = list[3].toInt();
2610 KApplication::testCoords( &x,&y,&w,&h ); 2624 KApplication::testCoords( &x,&y,&w,&h );
2611 mTodoEditor->setGeometry(x,y,w,h); 2625 mTodoEditor->setGeometry(x,y,w,h);
2612 2626
2613 } 2627 }
2614 list = config->readListEntry("ViewerLayout"); 2628 list = config->readListEntry("ViewerLayout");
2615 if ( ! list.isEmpty() ) { 2629 if ( ! list.isEmpty() ) {
2616 x = list[0].toInt(); 2630 x = list[0].toInt();
2617 y = list[1].toInt(); 2631 y = list[1].toInt();
2618 w = list[2].toInt(); 2632 w = list[2].toInt();
2619 h = list[3].toInt(); 2633 h = list[3].toInt();
2620 KApplication::testCoords( &x,&y,&w,&h ); 2634 KApplication::testCoords( &x,&y,&w,&h );
2621 getEventViewerDialog()->setGeometry(x,y,w,h); 2635 getEventViewerDialog()->setGeometry(x,y,w,h);
2622 } 2636 }
2623#endif 2637#endif
2624 config->setGroup( "Views" ); 2638 config->setGroup( "Views" );
2625 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2639 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2626 2640
2627 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2641 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2628 2642
2629 int resetval = 0; 2643 int resetval = 0;
2630 int maxVal = 0; 2644 int maxVal = 0;
2631 if (sizes.count() != 3) { 2645 if (sizes.count() != 3) {
2632 if ( KOPrefs::instance()->mVerticalScreen ) { 2646 if ( KOPrefs::instance()->mVerticalScreen ) {
2633 resetval = mDateNavigator->sizeHint().width()+2; 2647 resetval = mDateNavigator->sizeHint().width()+2;
2634 } else { 2648 } else {
2635 resetval = mDateNavigator->sizeHint().height()+2; 2649 resetval = mDateNavigator->sizeHint().height()+2;
2636 } 2650 }
2637 } 2651 }
2638 if ( resetval ) { 2652 if ( resetval ) {
2639 sizes.clear(); 2653 sizes.clear();
2640 if ( KOPrefs::instance()->mVerticalScreen ) { 2654 if ( KOPrefs::instance()->mVerticalScreen ) {
2641 maxVal = QApplication::desktop()->width() -10; 2655 maxVal = QApplication::desktop()->width() -10;
2642 } else { 2656 } else {
2643 maxVal = QApplication::desktop()->height()-10; 2657 maxVal = QApplication::desktop()->height()-10;
2644 } 2658 }
2645 sizes << resetval; 2659 sizes << resetval;
2646 if ( maxVal < resetval + resetval) 2660 if ( maxVal < resetval + resetval)
2647 resetval = maxVal - resetval; 2661 resetval = maxVal - resetval;
2648 sizes << resetval; 2662 sizes << resetval;
2649 sizes << 100; 2663 sizes << 100;
2650 } 2664 }
2651 mLeftFrame->setSizes(sizes); 2665 mLeftFrame->setSizes(sizes);
2652 sizes = config->readIntListEntry("Main Splitter Frame"); 2666 sizes = config->readIntListEntry("Main Splitter Frame");
2653 resetval = 0; 2667 resetval = 0;
2654 maxVal = 0; 2668 maxVal = 0;
2655 if (sizes.count() != 2) { 2669 if (sizes.count() != 2) {
2656 if ( !KOPrefs::instance()->mVerticalScreen ) { 2670 if ( !KOPrefs::instance()->mVerticalScreen ) {
2657 resetval = mDateNavigator->sizeHint().width()+2; 2671 resetval = mDateNavigator->sizeHint().width()+2;
2658 } else { 2672 } else {
2659 resetval = mDateNavigator->sizeHint().height()+2; 2673 resetval = mDateNavigator->sizeHint().height()+2;
2660 } 2674 }
2661 } 2675 }
2662 if ( resetval ) { 2676 if ( resetval ) {
2663 sizes.clear(); 2677 sizes.clear();
2664 if ( !KOPrefs::instance()->mVerticalScreen ) { 2678 if ( !KOPrefs::instance()->mVerticalScreen ) {
2665 maxVal = QApplication::desktop()->width() -10; 2679 maxVal = QApplication::desktop()->width() -10;
2666 } else { 2680 } else {
2667 maxVal = QApplication::desktop()->height()-10; 2681 maxVal = QApplication::desktop()->height()-10;
2668 } 2682 }
2669 sizes << resetval; 2683 sizes << resetval;
2670 if ( maxVal < resetval + resetval) 2684 if ( maxVal < resetval + resetval)
2671 resetval = maxVal - resetval; 2685 resetval = maxVal - resetval;
2672 sizes << resetval; 2686 sizes << resetval;
2673 } 2687 }
2674 mMainFrame->setSizes(sizes); 2688 mMainFrame->setSizes(sizes);
2675 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2689 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2676 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2690 else if ( dateCount == 7 ) mNavigator->selectWeek();
2677 else mNavigator->selectDates( dateCount ); 2691 else mNavigator->selectDates( dateCount );
2678 // mViewManager->readSettings( config ); 2692 // mViewManager->readSettings( config );
2679 updateConfig(); 2693 updateConfig();
2680 globalFlagBlockAgenda = 2; 2694 globalFlagBlockAgenda = 2;
2681 mViewManager->readSettings( config ); 2695 mViewManager->readSettings( config );
2682 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2696 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2683} 2697}
2684 2698
2685void CalendarView::checkSuspendAlarm() 2699void CalendarView::checkSuspendAlarm()
2686{ 2700{
2687 if ( mSuspendTimer->isActive() ) { 2701 if ( mSuspendTimer->isActive() ) {
2688 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2702 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2689 } 2703 }
2690} 2704}
2691void CalendarView::writeSettings() 2705void CalendarView::writeSettings()
2692{ 2706{
2693 // kdDebug() << "CalendarView::writeSettings" << endl; 2707 // kdDebug() << "CalendarView::writeSettings" << endl;
2694 2708
2695 KConfig *config = KOGlobals::config(); 2709 KConfig *config = KOGlobals::config();
2696 2710
2697 mViewManager->writeSettings( config ); 2711 mViewManager->writeSettings( config );
2698 mTodoList->saveLayout(config,QString("Todo Layout")); 2712 mTodoList->saveLayout(config,QString("Todo Layout"));
2699 mDialogManager->writeSettings( config ); 2713 mDialogManager->writeSettings( config );
2700 //KOPrefs::instance()->usrWriteConfig(); 2714 //KOPrefs::instance()->usrWriteConfig();
2701 KOPrefs::instance()->writeConfig(); 2715 KOPrefs::instance()->writeConfig();
2702 2716
2703 writeFilterSettings(config); 2717 writeFilterSettings(config);
2704 config->setGroup( "AppRun" ); 2718 config->setGroup( "AppRun" );
2705 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2719 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2706 int days = dt.daysTo( QDate::currentDate() ); 2720 int days = dt.daysTo( QDate::currentDate() );
2707 dt = dt.addDays( days ); 2721 dt = dt.addDays( days );
2708 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2722 int secs = dt.secsTo( QDateTime::currentDateTime() );
2709 config->writeEntry( "LatestProgramStopDays", days ); 2723 config->writeEntry( "LatestProgramStopDays", days );
2710 config->writeEntry( "LatestProgramStopSecs", secs ); 2724 config->writeEntry( "LatestProgramStopSecs", secs );
2711 //qDebug("KO: Writing stop time: %d ", secs); 2725 //qDebug("KO: Writing stop time: %d ", secs);
2712 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2726 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2713 //QDateTime latest = dt.addSecs ( secs ); 2727 //QDateTime latest = dt.addSecs ( secs );
2714 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2728 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2715 config->setGroup( "Views" ); 2729 config->setGroup( "Views" );
2716 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2730 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2717 2731
2718#if 0 2732#if 0
2719 qDebug("********************* "); 2733 qDebug("********************* ");
2720 qDebug("Testcode secsto "); 2734 qDebug("Testcode secsto ");
2721 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2735 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2722 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2736 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2723 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2737 int secsto = dt_nodaylight.secsTo( dt_daylight );
2724 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2738 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2725 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2739 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2726 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2740 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2727 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2741 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2728 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2742 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2729 qDebug("********************* testcode end"); 2743 qDebug("********************* testcode end");
2730 2744
2731#endif 2745#endif
2732 2746
2733 QValueList<int> listINT = mLeftFrame->sizes(); 2747 QValueList<int> listINT = mLeftFrame->sizes();
2734 config->writeEntry("Left Splitter Frame",listINT); 2748 config->writeEntry("Left Splitter Frame",listINT);
2735 QValueList<int> listINT2 = mMainFrame->sizes(); 2749 QValueList<int> listINT2 = mMainFrame->sizes();
2736 config->writeEntry("Main Splitter Frame",listINT2); 2750 config->writeEntry("Main Splitter Frame",listINT2);
2737#ifdef DESKTOP_VERSION 2751#ifdef DESKTOP_VERSION
2738 config->setGroup("WidgetLayout"); 2752 config->setGroup("WidgetLayout");
2739 QStringList list ;//= config->readListEntry("MainLayout"); 2753 QStringList list ;//= config->readListEntry("MainLayout");
2740 int x,y,w,h; 2754 int x,y,w,h;
2741 QWidget* wid; 2755 QWidget* wid;
2742 wid = topLevelWidget(); 2756 wid = topLevelWidget();
2743 x = wid->geometry().x(); 2757 x = wid->geometry().x();
2744 y = wid->geometry().y(); 2758 y = wid->geometry().y();
2745 w = wid->width(); 2759 w = wid->width();
2746 h = wid->height(); 2760 h = wid->height();
2747 list.clear(); 2761 list.clear();
2748 list << QString::number( x ); 2762 list << QString::number( x );
2749 list << QString::number( y ); 2763 list << QString::number( y );
2750 list << QString::number( w ); 2764 list << QString::number( w );
2751 list << QString::number( h ); 2765 list << QString::number( h );
2752 config->writeEntry("MainLayout",list ); 2766 config->writeEntry("MainLayout",list );
2753 2767
2754 wid = mEventEditor; 2768 wid = mEventEditor;
2755 x = wid->geometry().x(); 2769 x = wid->geometry().x();
2756 y = wid->geometry().y(); 2770 y = wid->geometry().y();
2757 w = wid->width(); 2771 w = wid->width();
2758 h = wid->height(); 2772 h = wid->height();
2759 list.clear(); 2773 list.clear();
2760 list << QString::number( x ); 2774 list << QString::number( x );
2761 list << QString::number( y ); 2775 list << QString::number( y );
2762 list << QString::number( w ); 2776 list << QString::number( w );
2763 list << QString::number( h ); 2777 list << QString::number( h );
2764 config->writeEntry("EditEventLayout",list ); 2778 config->writeEntry("EditEventLayout",list );
2765 2779
2766 wid = mTodoEditor; 2780 wid = mTodoEditor;
2767 x = wid->geometry().x(); 2781 x = wid->geometry().x();
2768 y = wid->geometry().y(); 2782 y = wid->geometry().y();
2769 w = wid->width(); 2783 w = wid->width();
2770 h = wid->height(); 2784 h = wid->height();
2771 list.clear(); 2785 list.clear();
2772 list << QString::number( x ); 2786 list << QString::number( x );
2773 list << QString::number( y ); 2787 list << QString::number( y );
2774 list << QString::number( w ); 2788 list << QString::number( w );
2775 list << QString::number( h ); 2789 list << QString::number( h );
2776 config->writeEntry("EditTodoLayout",list ); 2790 config->writeEntry("EditTodoLayout",list );
2777 wid = getEventViewerDialog(); 2791 wid = getEventViewerDialog();
2778 x = wid->geometry().x(); 2792 x = wid->geometry().x();
2779 y = wid->geometry().y(); 2793 y = wid->geometry().y();
2780 w = wid->width(); 2794 w = wid->width();
2781 h = wid->height(); 2795 h = wid->height();
2782 list.clear(); 2796 list.clear();
2783 list << QString::number( x ); 2797 list << QString::number( x );
2784 list << QString::number( y ); 2798 list << QString::number( y );
2785 list << QString::number( w ); 2799 list << QString::number( w );
2786 list << QString::number( h ); 2800 list << QString::number( h );
2787 config->writeEntry("ViewerLayout",list ); 2801 config->writeEntry("ViewerLayout",list );
2788 wid = mDialogManager->getSearchDialog(); 2802 wid = mDialogManager->getSearchDialog();
2789 if ( wid ) { 2803 if ( wid ) {
2790 x = wid->geometry().x(); 2804 x = wid->geometry().x();
2791 y = wid->geometry().y(); 2805 y = wid->geometry().y();
2792 w = wid->width(); 2806 w = wid->width();
2793 h = wid->height(); 2807 h = wid->height();
2794 list.clear(); 2808 list.clear();
2795 list << QString::number( x ); 2809 list << QString::number( x );
2796 list << QString::number( y ); 2810 list << QString::number( y );
2797 list << QString::number( w ); 2811 list << QString::number( w );
2798 list << QString::number( h ); 2812 list << QString::number( h );
2799 config->writeEntry("SearchLayout",list ); 2813 config->writeEntry("SearchLayout",list );
2800 } 2814 }
2801#endif 2815#endif
2802 2816
2803 2817
2804 config->sync(); 2818 config->sync();
2805} 2819}
2806 2820
2807void CalendarView::readFilterSettings(KConfig *config) 2821void CalendarView::readFilterSettings(KConfig *config)
2808{ 2822{
2809 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2823 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2810 2824
2811 mFilters.clear(); 2825 mFilters.clear();
2812 2826
2813 config->setGroup("General"); 2827 config->setGroup("General");
2814 QStringList filterList = config->readListEntry("CalendarFilters"); 2828 QStringList filterList = config->readListEntry("CalendarFilters");
2815 2829
2816 QStringList::ConstIterator it = filterList.begin(); 2830 QStringList::ConstIterator it = filterList.begin();
2817 QStringList::ConstIterator end = filterList.end(); 2831 QStringList::ConstIterator end = filterList.end();
2818 while(it != end) { 2832 while(it != end) {
2819 // kdDebug() << " filter: " << (*it) << endl; 2833 // kdDebug() << " filter: " << (*it) << endl;
2820 2834
2821 CalFilter *filter; 2835 CalFilter *filter;
2822 filter = new CalFilter(*it); 2836 filter = new CalFilter(*it);
2823 config->setGroup("Filter_" + (*it).utf8()); 2837 config->setGroup("Filter_" + (*it).utf8());
2824 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2838 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2825 filter->setCriteria(config->readNumEntry("Criteria",0)); 2839 filter->setCriteria(config->readNumEntry("Criteria",0));
2826 filter->setCategoryList(config->readListEntry("CategoryList")); 2840 filter->setCategoryList(config->readListEntry("CategoryList"));
2827 mFilters.append(filter); 2841 mFilters.append(filter);
2828 2842
2829 ++it; 2843 ++it;
2830 } 2844 }
2831 2845
2832 if (mFilters.count() == 0) { 2846 if (mFilters.count() == 0) {
2833 CalFilter *filter = new CalFilter(i18n("Default")); 2847 CalFilter *filter = new CalFilter(i18n("Default"));
2834 mFilters.append(filter); 2848 mFilters.append(filter);
2835 } 2849 }
2836 mFilterView->updateFilters(); 2850 mFilterView->updateFilters();
2837 config->setGroup("FilterView"); 2851 config->setGroup("FilterView");
2838 2852
2839 mFilterView->blockSignals(true); 2853 mFilterView->blockSignals(true);
2840 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2854 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2841 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2855 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2842 mFilterView->blockSignals(false); 2856 mFilterView->blockSignals(false);
2843 // We do it manually to avoid it being done twice by the above calls 2857 // We do it manually to avoid it being done twice by the above calls
2844 updateFilter(); 2858 updateFilter();
2845} 2859}
2846 2860
2847void CalendarView::writeFilterSettings(KConfig *config) 2861void CalendarView::writeFilterSettings(KConfig *config)
2848{ 2862{
2849 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2863 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2850 2864
2851 QStringList filterList; 2865 QStringList filterList;
2852 2866
2853 CalFilter *filter = mFilters.first(); 2867 CalFilter *filter = mFilters.first();
2854 while(filter) { 2868 while(filter) {
2855 // kdDebug() << " fn: " << filter->name() << endl; 2869 // kdDebug() << " fn: " << filter->name() << endl;
2856 filterList << filter->name(); 2870 filterList << filter->name();
2857 config->setGroup("Filter_" + filter->name().utf8()); 2871 config->setGroup("Filter_" + filter->name().utf8());
2858 config->writeEntry("Criteria",filter->criteria()); 2872 config->writeEntry("Criteria",filter->criteria());
2859 config->writeEntry("CategoryList",filter->categoryList()); 2873 config->writeEntry("CategoryList",filter->categoryList());
2860 filter = mFilters.next(); 2874 filter = mFilters.next();
2861 } 2875 }
2862 config->setGroup("General"); 2876 config->setGroup("General");
2863 config->writeEntry("CalendarFilters",filterList); 2877 config->writeEntry("CalendarFilters",filterList);
2864 2878
2865 config->setGroup("FilterView"); 2879 config->setGroup("FilterView");
2866 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2880 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2867 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2881 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2868} 2882}
2869 2883
2870 2884
2871void CalendarView::goToday() 2885void CalendarView::goToday()
2872{ 2886{
2873 if ( mViewManager->currentView()->isMonthView() ) 2887 if ( mViewManager->currentView()->isMonthView() )
2874 mNavigator->selectTodayMonth(); 2888 mNavigator->selectTodayMonth();
2875 else 2889 else
2876 mNavigator->selectToday(); 2890 mNavigator->selectToday();
2877} 2891}
2878 2892
2879void CalendarView::goNext() 2893void CalendarView::goNext()
2880{ 2894{
2881 mNavigator->selectNext(); 2895 mNavigator->selectNext();
2882} 2896}
2883 2897
2884void CalendarView::goPrevious() 2898void CalendarView::goPrevious()
2885{ 2899{
2886 mNavigator->selectPrevious(); 2900 mNavigator->selectPrevious();
2887} 2901}
2888void CalendarView::goNextMonth() 2902void CalendarView::goNextMonth()
2889{ 2903{
2890 mNavigator->selectNextMonth(); 2904 mNavigator->selectNextMonth();
2891} 2905}
2892 2906
2893void CalendarView::goPreviousMonth() 2907void CalendarView::goPreviousMonth()
2894{ 2908{
2895 mNavigator->selectPreviousMonth(); 2909 mNavigator->selectPreviousMonth();
2896} 2910}
2897 2911
2898void CalendarView::updateConfig() 2912void CalendarView::updateConfig()
2899{ 2913{
2900 if ( KOPrefs::instance()->mUseAppColors ) 2914 if ( KOPrefs::instance()->mUseAppColors )
2901 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2915 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2902 emit configChanged(); 2916 emit configChanged();
2903 mTodoList->updateConfig(); 2917 mTodoList->updateConfig();
2904 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2918 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2905 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2919 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2906 // To make the "fill window" configurations work 2920 // To make the "fill window" configurations work
2907 //mViewManager->raiseCurrentView(); 2921 //mViewManager->raiseCurrentView();
2908} 2922}
2909 2923
2910 2924
2911void CalendarView::eventChanged(Event *event) 2925void CalendarView::eventChanged(Event *event)
2912{ 2926{
2913 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2927 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2914 //updateUnmanagedViews(); 2928 //updateUnmanagedViews();
2915} 2929}
2916 2930
2917void CalendarView::eventAdded(Event *event) 2931void CalendarView::eventAdded(Event *event)
2918{ 2932{
2919 changeEventDisplay(event,KOGlobals::EVENTADDED); 2933 changeEventDisplay(event,KOGlobals::EVENTADDED);
2920} 2934}
2921 2935
2922void CalendarView::eventToBeDeleted(Event *) 2936void CalendarView::eventToBeDeleted(Event *)
2923{ 2937{
2924 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2938 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2925} 2939}
2926 2940
2927void CalendarView::eventDeleted() 2941void CalendarView::eventDeleted()
2928{ 2942{
2929 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2943 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2930} 2944}
2931void CalendarView::changeTodoDisplay(Todo *which, int action) 2945void CalendarView::changeTodoDisplay(Todo *which, int action)
2932{ 2946{
2933 changeIncidenceDisplay((Incidence *)which, action); 2947 changeIncidenceDisplay((Incidence *)which, action);
2934 mDateNavigator->updateView(); //LR 2948 mDateNavigator->updateView(); //LR
2935 //mDialogManager->updateSearchDialog(); 2949 //mDialogManager->updateSearchDialog();
2936 2950
2937 if (which) { 2951 if (which) {
2938 mViewManager->updateWNview(); 2952 mViewManager->updateWNview();
2939 //mTodoList->updateView(); 2953 //mTodoList->updateView();
2940 } 2954 }
2941 2955
2942} 2956}
2943 2957
2944void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2958void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2945{ 2959{
2946 updateUnmanagedViews(); 2960 updateUnmanagedViews();
2947 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2961 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2948 if ( action == KOGlobals::EVENTDELETED ) { //delete 2962 if ( action == KOGlobals::EVENTDELETED ) { //delete
2949 mCalendar->checkAlarmForIncidence( 0, true ); 2963 mCalendar->checkAlarmForIncidence( 0, true );
2950 if ( mEventViewerDialog ) 2964 if ( mEventViewerDialog )
2951 mEventViewerDialog->hide(); 2965 mEventViewerDialog->hide();
2952 } 2966 }
2953 else 2967 else
2954 mCalendar->checkAlarmForIncidence( which , false ); 2968 mCalendar->checkAlarmForIncidence( which , false );
2955} 2969}
2956 2970
2957// most of the changeEventDisplays() right now just call the view's 2971// most of the changeEventDisplays() right now just call the view's
2958// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2972// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2959void CalendarView::changeEventDisplay(Event *which, int action) 2973void CalendarView::changeEventDisplay(Event *which, int action)
2960{ 2974{
2961 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2975 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2962 changeIncidenceDisplay((Incidence *)which, action); 2976 changeIncidenceDisplay((Incidence *)which, action);
2963 static bool clearallviews = false; 2977 static bool clearallviews = false;
2964 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2978 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2965 if ( clearallviews ) { 2979 if ( clearallviews ) {
2966 clearAllViews(); 2980 clearAllViews();
2967 clearallviews = false; 2981 clearallviews = false;
2968 } 2982 }
2969 return; 2983 return;
2970 } 2984 }
2971 clearallviews = true; 2985 clearallviews = true;
2972 mDateNavigator->updateView(); 2986 mDateNavigator->updateView();
2973 //mDialogManager->updateSearchDialog(); 2987 //mDialogManager->updateSearchDialog();
2974 if (which) { 2988 if (which) {
2975 // If there is an event view visible update the display 2989 // If there is an event view visible update the display
2976 mViewManager->currentView()->changeEventDisplay(which,action); 2990 mViewManager->currentView()->changeEventDisplay(which,action);
2977 // TODO: check, if update needed 2991 // TODO: check, if update needed
2978 // if (which->getTodoStatus()) { 2992 // if (which->getTodoStatus()) {
2979 mTodoList->updateView(); 2993 mTodoList->updateView();
2980 if ( action != KOGlobals::EVENTDELETED ) { 2994 if ( action != KOGlobals::EVENTDELETED ) {
2981 mConflictingEvent = which ; 2995 mConflictingEvent = which ;
2982 int time = 1000; 2996 int time = 1000;
2983#ifdef DESKTOP_VERSION 2997#ifdef DESKTOP_VERSION
2984 time = 500; 2998 time = 500;
2985#endif 2999#endif
2986 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3000 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
2987 } 3001 }
2988 // } 3002 // }
2989 } else { 3003 } else {
2990 mViewManager->currentView()->updateView(); 3004 mViewManager->currentView()->updateView();
2991 } 3005 }
2992} 3006}
2993void CalendarView::checkConflictForEvent() 3007void CalendarView::checkConflictForEvent()
2994{ 3008{
2995 3009
2996 if (!KOPrefs::instance()->mConfirm) 3010 if (!KOPrefs::instance()->mConfirm)
2997 return; 3011 return;
2998 if ( ! mConflictingEvent ) return; 3012 if ( ! mConflictingEvent ) return;
2999 Event * conflictingEvent = mConflictingEvent; 3013 Event * conflictingEvent = mConflictingEvent;
3000 mConflictingEvent = 0; 3014 mConflictingEvent = 0;
3001 QDateTime current = QDateTime::currentDateTime(); 3015 QDateTime current = QDateTime::currentDateTime();
3002 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3016 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3003 return; 3017 return;
3004 } 3018 }
3005 QPtrList<Event> testlist = mCalendar->events(); 3019 QPtrList<Event> testlist = mCalendar->events();
3006 Event * test = testlist.first(); 3020 Event * test = testlist.first();
3007 QDateTime conflict; 3021 QDateTime conflict;
3008 QDateTime retVal; 3022 QDateTime retVal;
3009 bool found = false; 3023 bool found = false;
3010 Event * cE = 0; 3024 Event * cE = 0;
3011 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3025 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3012 while ( test ) { 3026 while ( test ) {
3013 qApp->processEvents(); 3027 qApp->processEvents();
3014 bool skip = false; 3028 bool skip = false;
3015 if ( found ) 3029 if ( found )
3016 skip = !test->matchTime( &current, &conflict ); 3030 skip = !test->matchTime( &current, &conflict );
3017 else 3031 else
3018 skip = !test->matchTime( &current, 0 ); 3032 skip = !test->matchTime( &current, 0 );
3019 if ( !skip && !test->doesFloat() ) { 3033 if ( !skip && !test->doesFloat() ) {
3020 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3034 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3021 if ( ! found ) { 3035 if ( ! found ) {
3022 conflict = retVal; 3036 conflict = retVal;
3023 cE = test; 3037 cE = test;
3024 } else { 3038 } else {
3025 if ( retVal < conflict ) { 3039 if ( retVal < conflict ) {
3026 conflict = retVal; 3040 conflict = retVal;
3027 cE = test; 3041 cE = test;
3028 } 3042 }
3029 } 3043 }
3030 found = true; 3044 found = true;
3031 } 3045 }
3032 } 3046 }
3033 test = testlist.next(); 3047 test = testlist.next();
3034 } 3048 }
3035 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3049 topLevelWidget()->setCaption( i18n("KO/Pi") );
3036 if ( found ) { 3050 if ( found ) {
3037 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()) ) ; 3051 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()) ) ;
3038 qApp->processEvents(); 3052 qApp->processEvents();
3039 int km = KMessageBox::warningContinueCancel(this,mess, 3053 int km = KMessageBox::warningContinueCancel(this,mess,
3040 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); 3054 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!"));
3041 if ( km != KMessageBox::Continue ) { 3055 if ( km != KMessageBox::Continue ) {
3042 return; 3056 return;
3043 } 3057 }
3044 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3058 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3045 mViewManager->showDayView(); 3059 mViewManager->showDayView();
3046 mNavigator->slotDaySelect( conflict.date() ); 3060 mNavigator->slotDaySelect( conflict.date() );
3047 int hour = conflict.time().hour(); 3061 int hour = conflict.time().hour();
3048 mViewManager->agendaView()->setStartHour( hour ); 3062 mViewManager->agendaView()->setStartHour( hour );
3049 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3063 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3050 } else 3064 } else
3051 topLevelWidget()->setCaption( i18n("No conflict found") ); 3065 topLevelWidget()->setCaption( i18n("No conflict found") );
3052 return; 3066 return;
3053 3067
3054} 3068}
3055 3069
3056void CalendarView::updateTodoViews() 3070void CalendarView::updateTodoViews()
3057{ 3071{
3058 mTodoList->updateView(); 3072 mTodoList->updateView();
3059 mViewManager->currentView()->updateView(); 3073 mViewManager->currentView()->updateView();
3060 3074
3061} 3075}
3062 3076
3063 3077
3064 3078
3065void CalendarView::clearAllViews() 3079void CalendarView::clearAllViews()
3066{ 3080{
3067 mTodoList->clearList(); 3081 mTodoList->clearList();
3068 mViewManager->clearAllViews(); 3082 mViewManager->clearAllViews();
3069 SearchDialog * sd = mDialogManager->getSearchDialog(); 3083 SearchDialog * sd = mDialogManager->getSearchDialog();
3070 if ( sd ) { 3084 if ( sd ) {
3071 KOListView* kol = sd->listview(); 3085 KOListView* kol = sd->listview();
3072 if ( kol ) 3086 if ( kol )
3073 kol->clearList(); 3087 kol->clearList();
3074 } 3088 }
3075} 3089}
3076void CalendarView::updateView() 3090void CalendarView::updateView()
3077{ 3091{
3078 static bool clearallviews = false; 3092 static bool clearallviews = false;
3079 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3093 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3080 if ( clearallviews ) { 3094 if ( clearallviews ) {
3081 clearAllViews(); 3095 clearAllViews();
3082 clearallviews = false; 3096 clearallviews = false;
3083 } 3097 }
3084 return; 3098 return;
3085 } 3099 }
3086 clearallviews = true; 3100 clearallviews = true;
3087 DateList tmpList = mNavigator->selectedDates(); 3101 DateList tmpList = mNavigator->selectedDates();
3088 3102
3089 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3103 if ( KOPrefs::instance()->mHideNonStartedTodos )
3090 mTodoList->updateView(); 3104 mTodoList->updateView();
3091 // We assume that the navigator only selects consecutive days. 3105 // We assume that the navigator only selects consecutive days.
3092 updateView( tmpList.first(), tmpList.last() ); 3106 updateView( tmpList.first(), tmpList.last() );
3093} 3107}
3094 3108
3095void CalendarView::updateUnmanagedViews() 3109void CalendarView::updateUnmanagedViews()
3096{ 3110{
3097 mDateNavigator->updateDayMatrix(); 3111 mDateNavigator->updateDayMatrix();
3098} 3112}
3099 3113
3100int CalendarView::msgItemDelete(const QString name) 3114int CalendarView::msgItemDelete(const QString name)
3101{ 3115{
3102 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3116 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3103 i18n("This item will be\npermanently deleted."), 3117 i18n("This item will be\npermanently deleted."),
3104 i18n("KO/Pi Confirmation"),i18n("Delete")); 3118 i18n("KO/Pi Confirmation"),i18n("Delete"));
3105} 3119}
3106 3120
3107 3121
3108void CalendarView::edit_cut() 3122void CalendarView::edit_cut()
3109{ 3123{
3110 Event *anEvent=0; 3124 Event *anEvent=0;
3111 3125
3112 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3126 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3113 3127
3114 if (mViewManager->currentView()->isEventView()) { 3128 if (mViewManager->currentView()->isEventView()) {
3115 if ( incidence && incidence->typeID() == eventID ) { 3129 if ( incidence && incidence->typeID() == eventID ) {
3116 anEvent = static_cast<Event *>(incidence); 3130 anEvent = static_cast<Event *>(incidence);
3117 } 3131 }
3118 } 3132 }
3119 3133
3120 if (!anEvent) { 3134 if (!anEvent) {
3121 KNotifyClient::beep(); 3135 KNotifyClient::beep();
3122 return; 3136 return;
3123 } 3137 }
3124 DndFactory factory( mCalendar ); 3138 DndFactory factory( mCalendar );
3125 factory.cutIncidence(anEvent); 3139 factory.cutIncidence(anEvent);
3126 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3140 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3127} 3141}
3128 3142
3129void CalendarView::edit_copy() 3143void CalendarView::edit_copy()
3130{ 3144{
3131 Event *anEvent=0; 3145 Event *anEvent=0;
3132 3146
3133 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3147 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3134 3148
3135 if (mViewManager->currentView()->isEventView()) { 3149 if (mViewManager->currentView()->isEventView()) {
3136 if ( incidence && incidence->typeID() == eventID ) { 3150 if ( incidence && incidence->typeID() == eventID ) {
3137 anEvent = static_cast<Event *>(incidence); 3151 anEvent = static_cast<Event *>(incidence);
3138 } 3152 }
3139 } 3153 }
3140 3154
3141 if (!anEvent) { 3155 if (!anEvent) {
3142 KNotifyClient::beep(); 3156 KNotifyClient::beep();
3143 return; 3157 return;
3144 } 3158 }
3145 DndFactory factory( mCalendar ); 3159 DndFactory factory( mCalendar );
3146 factory.copyIncidence(anEvent); 3160 factory.copyIncidence(anEvent);
3147} 3161}
3148 3162
3149void CalendarView::edit_paste() 3163void CalendarView::edit_paste()
3150{ 3164{
3151 QDate date = mNavigator->selectedDates().first(); 3165 QDate date = mNavigator->selectedDates().first();
3152 3166
3153 DndFactory factory( mCalendar ); 3167 DndFactory factory( mCalendar );
3154 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3168 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3155 3169
3156 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3170 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3157} 3171}
3158void CalendarView::edit_global_options() 3172void CalendarView::edit_global_options()
3159{ 3173{
3160 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3174 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3161 emit save(); 3175 emit save();
3162 emit saveStopTimer(); 3176 emit saveStopTimer();
3163 mDialogManager->showGlobalOptionsDialog(); 3177 mDialogManager->showGlobalOptionsDialog();
3164 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3178 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3165 emit saveStopTimer(); 3179 emit saveStopTimer();
3166 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!"), 3180 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!"),
3167 i18n("Timezone settings"),i18n("Reload"))) { 3181 i18n("Timezone settings"),i18n("Reload"))) {
3168 qDebug("KO: TZ reload cancelled "); 3182 qDebug("KO: TZ reload cancelled ");
3169 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3183 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3170 return; 3184 return;
3171 } 3185 }
3172 qDebug("KO: Timezone change "); 3186 qDebug("KO: Timezone change ");
3173 loadCalendars(); 3187 loadCalendars();
3174 setModified(true); 3188 setModified(true);
3175 } 3189 }
3176 else 3190 else
3177 qDebug("KO: No tz change "); 3191 qDebug("KO: No tz change ");
3178} 3192}
3179void CalendarView::edit_options() 3193void CalendarView::edit_options()
3180{ 3194{
3181 mDialogManager->showOptionsDialog(); 3195 mDialogManager->showOptionsDialog();
3182} 3196}
3183 3197
3184 3198
3185void CalendarView::slotSelectPickerDate( QDate d) 3199void CalendarView::slotSelectPickerDate( QDate d)
3186{ 3200{
3187 mDateFrame->hide(); 3201 mDateFrame->hide();
3188 if ( mDatePickerMode == 1 ) { 3202 if ( mDatePickerMode == 1 ) {
3189 mNavigator->slotDaySelect( d ); 3203 mNavigator->slotDaySelect( d );
3190 } else if ( mDatePickerMode == 2 ) { 3204 } else if ( mDatePickerMode == 2 ) {
3191 if ( mMoveIncidence->typeID() == todoID ) { 3205 if ( mMoveIncidence->typeID() == todoID ) {
3192 Todo * to = (Todo *) mMoveIncidence; 3206 Todo * to = (Todo *) mMoveIncidence;
3193 QTime tim; 3207 QTime tim;
3194 int len = 0; 3208 int len = 0;
3195 if ( to->hasStartDate() && to->hasDueDate() ) 3209 if ( to->hasStartDate() && to->hasDueDate() )
3196 len = to->dtStart().secsTo( to->dtDue()); 3210 len = to->dtStart().secsTo( to->dtDue());
3197 if ( to->hasDueDate() ) 3211 if ( to->hasDueDate() )
3198 tim = to->dtDue().time(); 3212 tim = to->dtDue().time();
3199 else { 3213 else {
3200 tim = QTime ( 0,0,0 ); 3214 tim = QTime ( 0,0,0 );
3201 to->setFloats( true ); 3215 to->setFloats( true );
3202 to->setHasDueDate( true ); 3216 to->setHasDueDate( true );
3203 } 3217 }
3204 QDateTime dt ( d,tim ); 3218 QDateTime dt ( d,tim );
3205 to->setDtDue( dt ); 3219 to->setDtDue( dt );
3206 3220
3207 if ( to->hasStartDate() ) { 3221 if ( to->hasStartDate() ) {
3208 if ( len>0 ) 3222 if ( len>0 )
3209 to->setDtStart(to->dtDue().addSecs( -len )); 3223 to->setDtStart(to->dtDue().addSecs( -len ));
3210 else 3224 else
3211 if (to->dtStart() > to->dtDue() ) 3225 if (to->dtStart() > to->dtDue() )
3212 to->setDtStart(to->dtDue().addDays( -3 )); 3226 to->setDtStart(to->dtDue().addDays( -3 ));
3213 } 3227 }
3214 3228
3215 todoChanged( to ); 3229 todoChanged( to );
3216 } else if ( mMoveIncidence->typeID() == eventID ) { 3230 } else if ( mMoveIncidence->typeID() == eventID ) {
3217 if ( mMoveIncidence->doesRecur() ) { 3231 if ( mMoveIncidence->doesRecur() ) {
3218#if 0 3232#if 0
3219 // PENDING implement this 3233 // PENDING implement this
3220 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3234 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3221 mCalendar()->addIncidence( newInc ); 3235 mCalendar()->addIncidence( newInc );
3222 if ( mMoveIncidence->typeID() == todoID ) 3236 if ( mMoveIncidence->typeID() == todoID )
3223 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3237 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3224 else 3238 else
3225 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3239 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3226 mMoveIncidence = newInc; 3240 mMoveIncidence = newInc;
3227 3241
3228#endif 3242#endif
3229 } 3243 }
3230 QTime tim = mMoveIncidence->dtStart().time(); 3244 QTime tim = mMoveIncidence->dtStart().time();
3231 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3245 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3232 QDateTime dt ( d,tim ); 3246 QDateTime dt ( d,tim );
3233 mMoveIncidence->setDtStart( dt ); 3247 mMoveIncidence->setDtStart( dt );
3234 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3248 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3235 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3249 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3236 } else if ( mMoveIncidence->typeID() == journalID ) { 3250 } else if ( mMoveIncidence->typeID() == journalID ) {
3237 QTime tim = mMoveIncidence->dtStart().time(); 3251 QTime tim = mMoveIncidence->dtStart().time();
3238 QDateTime dt ( d,tim ); 3252 QDateTime dt ( d,tim );
3239 mMoveIncidence->setDtStart( dt ); 3253 mMoveIncidence->setDtStart( dt );
3240 updateView(); 3254 updateView();
3241 } 3255 }
3242 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3256 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3243 } 3257 }
3244} 3258}
3245 3259
3246void CalendarView::removeCategories() 3260void CalendarView::removeCategories()
3247{ 3261{
3248 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3262 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3249 QStringList catList = KOPrefs::instance()->mCustomCategories; 3263 QStringList catList = KOPrefs::instance()->mCustomCategories;
3250 QStringList catIncList; 3264 QStringList catIncList;
3251 QStringList newCatList; 3265 QStringList newCatList;
3252 Incidence* inc = incList.first(); 3266 Incidence* inc = incList.first();
3253 uint i; 3267 uint i;
3254 while ( inc ) { 3268 while ( inc ) {
3255 newCatList.clear(); 3269 newCatList.clear();
3256 catIncList = inc->categories() ; 3270 catIncList = inc->categories() ;
3257 for( i = 0; i< catIncList.count(); ++i ) { 3271 for( i = 0; i< catIncList.count(); ++i ) {
3258 if ( catList.contains (catIncList[i])) 3272 if ( catList.contains (catIncList[i]))
3259 newCatList.append( catIncList[i] ); 3273 newCatList.append( catIncList[i] );
3260 } 3274 }
3261 newCatList.sort(); 3275 newCatList.sort();
3262 inc->setCategories( newCatList.join(",") ); 3276 inc->setCategories( newCatList.join(",") );
3263 inc = incList.next(); 3277 inc = incList.next();
3264 } 3278 }
3265} 3279}
3266 3280
3267int CalendarView::addCategories() 3281int CalendarView::addCategories()
3268{ 3282{
3269 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3283 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3270 QStringList catList = KOPrefs::instance()->mCustomCategories; 3284 QStringList catList = KOPrefs::instance()->mCustomCategories;
3271 QStringList catIncList; 3285 QStringList catIncList;
3272 Incidence* inc = incList.first(); 3286 Incidence* inc = incList.first();
3273 uint i; 3287 uint i;
3274 int count = 0; 3288 int count = 0;
3275 while ( inc ) { 3289 while ( inc ) {
3276 catIncList = inc->categories() ; 3290 catIncList = inc->categories() ;
3277 for( i = 0; i< catIncList.count(); ++i ) { 3291 for( i = 0; i< catIncList.count(); ++i ) {
3278 if ( !catList.contains (catIncList[i])) { 3292 if ( !catList.contains (catIncList[i])) {
3279 catList.append( catIncList[i] ); 3293 catList.append( catIncList[i] );
3280 //qDebug("add cat %s ", catIncList[i].latin1()); 3294 //qDebug("add cat %s ", catIncList[i].latin1());
3281 ++count; 3295 ++count;
3282 } 3296 }
3283 } 3297 }
3284 inc = incList.next(); 3298 inc = incList.next();
3285 } 3299 }
3286 catList.sort(); 3300 catList.sort();
3287 KOPrefs::instance()->mCustomCategories = catList; 3301 KOPrefs::instance()->mCustomCategories = catList;
3288 return count; 3302 return count;
3289} 3303}
3290 3304
3291void CalendarView::editCategories() 3305void CalendarView::editCategories()
3292{ 3306{
3293 qDebug("CalendarView::editCategories() "); 3307 qDebug("CalendarView::editCategories() ");
3294 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3308 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3295 ced.exec(); 3309 ced.exec();
3296} 3310}
3297void CalendarView::manageCategories() 3311void CalendarView::manageCategories()
3298{ 3312{
3299 KOCatPrefs* cp = new KOCatPrefs(); 3313 KOCatPrefs* cp = new KOCatPrefs();
3300 cp->show(); 3314 cp->show();
3301 int w =cp->sizeHint().width() ; 3315 int w =cp->sizeHint().width() ;
3302 int h = cp->sizeHint().height() ; 3316 int h = cp->sizeHint().height() ;
3303 int dw = QApplication::desktop()->width(); 3317 int dw = QApplication::desktop()->width();
3304 int dh = QApplication::desktop()->height(); 3318 int dh = QApplication::desktop()->height();
3305 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3319 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3306 if ( !cp->exec() ) { 3320 if ( !cp->exec() ) {
3307 delete cp; 3321 delete cp;
3308 return; 3322 return;
3309 } 3323 }
3310 int count = 0; 3324 int count = 0;
3311 if ( cp->addCat() ) { 3325 if ( cp->addCat() ) {
3312 count = addCategories(); 3326 count = addCategories();
3313 if ( count ) { 3327 if ( count ) {
3314 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3328 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3315 writeSettings(); 3329 writeSettings();
3316 } else 3330 } else
3317 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3331 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3318 } else { 3332 } else {
3319 removeCategories(); 3333 removeCategories();
3320 updateView(); 3334 updateView();
3321 } 3335 }
3322 delete cp; 3336 delete cp;
3323} 3337}
3324 3338
3325void CalendarView::beamIncidence(Incidence * Inc) 3339void CalendarView::beamIncidence(Incidence * Inc)
3326{ 3340{
3327 QPtrList<Incidence> delSel ; 3341 QPtrList<Incidence> delSel ;
3328 delSel.append(Inc); 3342 delSel.append(Inc);
3329 beamIncidenceList( delSel ); 3343 beamIncidenceList( delSel );
3330} 3344}
3331void CalendarView::beamCalendar() 3345void CalendarView::beamCalendar()
3332{ 3346{
3333 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3347 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3334 //qDebug("beamCalendar() "); 3348 //qDebug("beamCalendar() ");
3335 beamIncidenceList( delSel ); 3349 beamIncidenceList( delSel );
3336} 3350}
3337void CalendarView::beamFilteredCalendar() 3351void CalendarView::beamFilteredCalendar()
3338{ 3352{
3339 QPtrList<Incidence> delSel = mCalendar->incidences(); 3353 QPtrList<Incidence> delSel = mCalendar->incidences();
3340 //qDebug("beamFilteredCalendar() "); 3354 //qDebug("beamFilteredCalendar() ");
3341 beamIncidenceList( delSel ); 3355 beamIncidenceList( delSel );
3342} 3356}
3343void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3357void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3344{ 3358{
3345 3359
3346 KOBeamPrefs beamDialog; 3360 KOBeamPrefs beamDialog;
3347 if ( beamDialog.exec () == QDialog::Rejected ) 3361 if ( beamDialog.exec () == QDialog::Rejected )
3348 return; 3362 return;
3349#ifdef DESKTOP_VERSION 3363#ifdef DESKTOP_VERSION
3350 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3364 QString fn = locateLocal( "tmp", "kopibeamfile" );
3351#else 3365#else
3352 QString fn = "/tmp/kopibeamfile"; 3366 QString fn = "/tmp/kopibeamfile";
3353#endif 3367#endif
3354 QString mes; 3368 QString mes;
3355 bool createbup = true; 3369 bool createbup = true;
3356 if ( createbup ) { 3370 if ( createbup ) {
3357 QString description = "\n"; 3371 QString description = "\n";
3358 CalendarLocal* cal = new CalendarLocal(); 3372 CalendarLocal* cal = new CalendarLocal();
3359 if ( beamDialog.beamLocal() ) 3373 if ( beamDialog.beamLocal() )
3360 cal->setLocalTime(); 3374 cal->setLocalTime();
3361 else 3375 else
3362 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3376 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3363 Incidence *incidence = delSel.first(); 3377 Incidence *incidence = delSel.first();
3364 bool addText = false; 3378 bool addText = false;
3365 if ( delSel.count() < 10 ) 3379 if ( delSel.count() < 10 )
3366 addText = true; 3380 addText = true;
3367 else { 3381 else {
3368 description.sprintf(i18n(" %d items?"),delSel.count() ); 3382 description.sprintf(i18n(" %d items?"),delSel.count() );
3369 } 3383 }
3370 while ( incidence ) { 3384 while ( incidence ) {
3371 Incidence *in = incidence->clone(); 3385 Incidence *in = incidence->clone();
3372 if ( ! in->summary().isEmpty() ) { 3386 if ( ! in->summary().isEmpty() ) {
3373 in->setDescription(""); 3387 in->setDescription("");
3374 } else { 3388 } else {
3375 in->setSummary( in->description().left(20)); 3389 in->setSummary( in->description().left(20));
3376 in->setDescription(""); 3390 in->setDescription("");
3377 } 3391 }
3378 if ( addText ) 3392 if ( addText )
3379 description += in->summary() + "\n"; 3393 description += in->summary() + "\n";
3380 cal->addIncidence( in ); 3394 cal->addIncidence( in );
3381 incidence = delSel.next(); 3395 incidence = delSel.next();
3382 } 3396 }
3383 if ( beamDialog.beamVcal() ) { 3397 if ( beamDialog.beamVcal() ) {
3384 fn += ".vcs"; 3398 fn += ".vcs";
3385 FileStorage storage( cal, fn, new VCalFormat ); 3399 FileStorage storage( cal, fn, new VCalFormat );
3386 storage.save(); 3400 storage.save();
3387 } else { 3401 } else {
3388 fn += ".ics"; 3402 fn += ".ics";
3389 FileStorage storage( cal, fn, new ICalFormat( ) ); 3403 FileStorage storage( cal, fn, new ICalFormat( ) );
3390 storage.save(); 3404 storage.save();
3391 } 3405 }
3392 delete cal; 3406 delete cal;
3393 mes = i18n("KO/Pi: Ready for beaming"); 3407 mes = i18n("KO/Pi: Ready for beaming");
3394 topLevelWidget()->setCaption(mes); 3408 topLevelWidget()->setCaption(mes);
3395 KApplication::convert2latin1( fn ); 3409 KApplication::convert2latin1( fn );
3396#ifndef DESKTOP_VERSION 3410#ifndef DESKTOP_VERSION
3397 Ir *ir = new Ir( this ); 3411 Ir *ir = new Ir( this );
3398 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3412 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3399 ir->send( fn, description, "text/x-vCalendar" ); 3413 ir->send( fn, description, "text/x-vCalendar" );
3400#endif 3414#endif
3401 } 3415 }
3402} 3416}
3403 3417
3404#ifndef DESKTOP_VERSION 3418#ifndef DESKTOP_VERSION
3405void CalendarView::beamDone( Ir *ir ) 3419void CalendarView::beamDone( Ir *ir )
3406{ 3420{
3407 delete ir; 3421 delete ir;
3408 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3422 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3409 topLevelWidget()->raise(); 3423 topLevelWidget()->raise();
3410} 3424}
3411#else 3425#else
3412void CalendarView::beamDone( Ir *){;} 3426void CalendarView::beamDone( Ir *){;}
3413#endif 3427#endif
3414void CalendarView::moveIncidence(Incidence * inc ) 3428void CalendarView::moveIncidence(Incidence * inc )
3415{ 3429{
3416 if ( !inc ) return; 3430 if ( !inc ) return;
3417 showDatePickerPopup(); 3431 showDatePickerPopup();
3418 mDatePickerMode = 2; 3432 mDatePickerMode = 2;
3419 mMoveIncidence = inc ; 3433 mMoveIncidence = inc ;
3420 QDate da; 3434 QDate da;
3421 if ( mMoveIncidence->typeID() == todoID ) { 3435 if ( mMoveIncidence->typeID() == todoID ) {
3422 Todo * to = (Todo *) mMoveIncidence; 3436 Todo * to = (Todo *) mMoveIncidence;
3423 if ( to->hasDueDate() ) 3437 if ( to->hasDueDate() )
3424 da = to->dtDue().date(); 3438 da = to->dtDue().date();
3425 else 3439 else
3426 da = QDate::currentDate(); 3440 da = QDate::currentDate();
3427 } else { 3441 } else {
3428 da = mMoveIncidence->dtStart().date(); 3442 da = mMoveIncidence->dtStart().date();
3429 } 3443 }
3430 //PENDING set date for recurring incidence to date of recurrence 3444 //PENDING set date for recurring incidence to date of recurrence
3431 //mMoveIncidenceOldDate; 3445 //mMoveIncidenceOldDate;
3432 mDatePicker->setDate( da ); 3446 mDatePicker->setDate( da );
3433} 3447}
3434void CalendarView::showDatePickerPopup() 3448void CalendarView::showDatePickerPopup()
3435{ 3449{
3436 if ( mDateFrame->isVisible() ) 3450 if ( mDateFrame->isVisible() )
3437 mDateFrame->hide(); 3451 mDateFrame->hide();
3438 else { 3452 else {
3439 int offX = 0, offY = 0; 3453 int offX = 0, offY = 0;
3440#ifdef DESKTOP_VERSION 3454#ifdef DESKTOP_VERSION
3441 int w =mDatePicker->sizeHint().width() ; 3455 int w =mDatePicker->sizeHint().width() ;
3442 int h = mDatePicker->sizeHint().height() ; 3456 int h = mDatePicker->sizeHint().height() ;
3443 int dw = topLevelWidget()->width(); 3457 int dw = topLevelWidget()->width();
3444 int dh = topLevelWidget()->height(); 3458 int dh = topLevelWidget()->height();
3445 offX = topLevelWidget()->x(); 3459 offX = topLevelWidget()->x();
3446 offY = topLevelWidget()->y(); 3460 offY = topLevelWidget()->y();
3447#else 3461#else
3448 int w =mDatePicker->sizeHint().width() ; 3462 int w =mDatePicker->sizeHint().width() ;
3449 int h = mDatePicker->sizeHint().height() ; 3463 int h = mDatePicker->sizeHint().height() ;
3450 int dw = QApplication::desktop()->width(); 3464 int dw = QApplication::desktop()->width();
3451 int dh = QApplication::desktop()->height(); 3465 int dh = QApplication::desktop()->height();
3452#endif 3466#endif
3453 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3467 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3454 mDateFrame->show(); 3468 mDateFrame->show();
3455 } 3469 }
3456} 3470}
3457void CalendarView::showDatePicker( ) 3471void CalendarView::showDatePicker( )
3458{ 3472{
3459 showDatePickerPopup(); 3473 showDatePickerPopup();
3460 mDatePickerMode = 1; 3474 mDatePickerMode = 1;
3461 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3475 mDatePicker->setDate( mNavigator->selectedDates().first() );
3462} 3476}
3463 3477
3464void CalendarView::showEventEditor() 3478void CalendarView::showEventEditor()
3465{ 3479{
3466#ifdef DESKTOP_VERSION 3480#ifdef DESKTOP_VERSION
3467 int x,y,w,h; 3481 int x,y,w,h;
3468 x = mEventEditor->geometry().x(); 3482 x = mEventEditor->geometry().x();
3469 y = mEventEditor->geometry().y(); 3483 y = mEventEditor->geometry().y();
3470 w = mEventEditor->width(); 3484 w = mEventEditor->width();
3471 h = mEventEditor->height(); 3485 h = mEventEditor->height();
3472 mEventEditor->show(); 3486 mEventEditor->show();
3473 mEventEditor->setGeometry(x,y,w,h); 3487 mEventEditor->setGeometry(x,y,w,h);
3474#else 3488#else
3475 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3489 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3476 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3490 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3477 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3491 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3478 qApp->processEvents(); 3492 qApp->processEvents();
3479 delete mEventEditor; 3493 delete mEventEditor;
3480 mEventEditor = mDialogManager->getEventEditor(); 3494 mEventEditor = mDialogManager->getEventEditor();
3481 topLevelWidget()->setCaption( i18n("") ); 3495 topLevelWidget()->setCaption( i18n("") );
3482 } 3496 }
3483 mEventEditor->showMaximized(); 3497 mEventEditor->showMaximized();
3484#endif 3498#endif
3485} 3499}
3486void CalendarView::showTodoEditor() 3500void CalendarView::showTodoEditor()
3487{ 3501{
3488#ifdef DESKTOP_VERSION 3502#ifdef DESKTOP_VERSION
3489 int x,y,w,h; 3503 int x,y,w,h;
3490 x = mTodoEditor->geometry().x(); 3504 x = mTodoEditor->geometry().x();
3491 y = mTodoEditor->geometry().y(); 3505 y = mTodoEditor->geometry().y();
3492 w = mTodoEditor->width(); 3506 w = mTodoEditor->width();
3493 h = mTodoEditor->height(); 3507 h = mTodoEditor->height();
3494 mTodoEditor->show(); 3508 mTodoEditor->show();
3495 mTodoEditor->setGeometry(x,y,w,h); 3509 mTodoEditor->setGeometry(x,y,w,h);
3496#else 3510#else
3497 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3511 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3498 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3512 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3499 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3513 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3500 qApp->processEvents(); 3514 qApp->processEvents();
3501 delete mTodoEditor; 3515 delete mTodoEditor;
3502 mTodoEditor = mDialogManager->getTodoEditor(); 3516 mTodoEditor = mDialogManager->getTodoEditor();
3503 topLevelWidget()->setCaption( i18n("") ); 3517 topLevelWidget()->setCaption( i18n("") );
3504 } 3518 }
3505 mTodoEditor->showMaximized(); 3519 mTodoEditor->showMaximized();
3506#endif 3520#endif
3507} 3521}
3508 3522
3509void CalendarView::cloneIncidence() 3523void CalendarView::cloneIncidence()
3510{ 3524{
3511 Incidence *incidence = currentSelection(); 3525 Incidence *incidence = currentSelection();
3512 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3526 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3513 if ( incidence ) { 3527 if ( incidence ) {
3514 cloneIncidence(incidence); 3528 cloneIncidence(incidence);
3515 } 3529 }
3516} 3530}
3517void CalendarView::moveIncidence() 3531void CalendarView::moveIncidence()
3518{ 3532{
3519 Incidence *incidence = currentSelection(); 3533 Incidence *incidence = currentSelection();
3520 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3534 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3521 if ( incidence ) { 3535 if ( incidence ) {
3522 moveIncidence(incidence); 3536 moveIncidence(incidence);
3523 } 3537 }
3524} 3538}
3525void CalendarView::beamIncidence() 3539void CalendarView::beamIncidence()
3526{ 3540{
3527 Incidence *incidence = currentSelection(); 3541 Incidence *incidence = currentSelection();
3528 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3542 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3529 if ( incidence ) { 3543 if ( incidence ) {
3530 beamIncidence(incidence); 3544 beamIncidence(incidence);
3531 } 3545 }
3532} 3546}
3533void CalendarView::toggleCancelIncidence() 3547void CalendarView::toggleCancelIncidence()
3534{ 3548{
3535 Incidence *incidence = currentSelection(); 3549 Incidence *incidence = currentSelection();
3536 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3550 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3537 if ( incidence ) { 3551 if ( incidence ) {
3538 cancelIncidence(incidence); 3552 cancelIncidence(incidence);
3539 } 3553 }
3540} 3554}
3541 3555
3542 3556
3543void CalendarView::cancelIncidence(Incidence * inc ) 3557void CalendarView::cancelIncidence(Incidence * inc )
3544{ 3558{
3545 inc->setCancelled( ! inc->cancelled() ); 3559 inc->setCancelled( ! inc->cancelled() );
3546 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3560 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3547 updateView(); 3561 updateView();
3548} 3562}
3549void CalendarView::cloneIncidence(Incidence * orgInc ) 3563void CalendarView::cloneIncidence(Incidence * orgInc )
3550{ 3564{
3551 Incidence * newInc = orgInc->clone(); 3565 Incidence * newInc = orgInc->clone();
3552 newInc->recreate(); 3566 newInc->recreate();
3553 3567
3554 if ( newInc->typeID() == todoID ) { 3568 if ( newInc->typeID() == todoID ) {
3555 Todo* t = (Todo*) newInc; 3569 Todo* t = (Todo*) newInc;
3556 bool cloneSub = false; 3570 bool cloneSub = false;
3557 if ( orgInc->relations().count() ) { 3571 if ( orgInc->relations().count() ) {
3558 int result = KMessageBox::warningYesNoCancel(this, 3572 int result = KMessageBox::warningYesNoCancel(this,
3559 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 ) ), 3573 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 ) ),
3560 i18n("Todo has subtodos"), 3574 i18n("Todo has subtodos"),
3561 i18n("Yes"), 3575 i18n("Yes"),
3562 i18n("No")); 3576 i18n("No"));
3563 3577
3564 if ( result == KMessageBox::Cancel ) { 3578 if ( result == KMessageBox::Cancel ) {
3565 delete t; 3579 delete t;
3566 return; 3580 return;
3567 } 3581 }
3568 if (result == KMessageBox::Yes) cloneSub = true; 3582 if (result == KMessageBox::Yes) cloneSub = true;
3569 } 3583 }
3570 showTodoEditor(); 3584 showTodoEditor();
3571 mTodoEditor->editTodo( t ); 3585 mTodoEditor->editTodo( t );
3572 if ( mTodoEditor->exec() ) { 3586 if ( mTodoEditor->exec() ) {
3573 if ( cloneSub ) { 3587 if ( cloneSub ) {
3574 orgInc->cloneRelations( t ); 3588 orgInc->cloneRelations( t );
3575 mCalendar->addIncidenceBranch( t ); 3589 mCalendar->addIncidenceBranch( t );
3576 updateView(); 3590 updateView();
3577 3591
3578 } else { 3592 } else {
3579 mCalendar->addTodo( t ); 3593 mCalendar->addTodo( t );
3580 updateView(); 3594 updateView();
3581 } 3595 }
3582 } else { 3596 } else {
3583 delete t; 3597 delete t;
3584 } 3598 }
3585 } 3599 }
3586 else if ( newInc->typeID() == eventID ) { 3600 else if ( newInc->typeID() == eventID ) {
3587 Event* e = (Event*) newInc; 3601 Event* e = (Event*) newInc;
3588 showEventEditor(); 3602 showEventEditor();
3589 mEventEditor->editEvent( e ); 3603 mEventEditor->editEvent( e );
3590 if ( mEventEditor->exec() ) { 3604 if ( mEventEditor->exec() ) {
3591 mCalendar->addEvent( e ); 3605 mCalendar->addEvent( e );
3592 updateView(); 3606 updateView();
3593 } else { 3607 } else {
3594 delete e; 3608 delete e;
3595 } 3609 }
3596 } else if ( newInc->typeID() == journalID ) { 3610 } else if ( newInc->typeID() == journalID ) {
3597 mCalendar->addJournal( (Journal*) newInc ); 3611 mCalendar->addJournal( (Journal*) newInc );
3598 editJournal( (Journal*) newInc ); 3612 editJournal( (Journal*) newInc );
3599 } 3613 }
3600 setActiveWindow(); 3614 setActiveWindow();
3601} 3615}
3602 3616
3603void CalendarView::newEvent() 3617void CalendarView::newEvent()
3604{ 3618{
3605 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3619 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3606 KOAgendaView *aView = mViewManager->agendaView(); 3620 KOAgendaView *aView = mViewManager->agendaView();
3607 if (aView) { 3621 if (aView) {
3608 if (aView->selectionStart().isValid()) { 3622 if (aView->selectionStart().isValid()) {
3609 if (aView->selectedIsAllDay()) { 3623 if (aView->selectedIsAllDay()) {
3610 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3624 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3611 } else { 3625 } else {
3612 newEvent(aView->selectionStart(),aView->selectionEnd()); 3626 newEvent(aView->selectionStart(),aView->selectionEnd());
3613 } 3627 }
3614 return; 3628 return;
3615 } 3629 }
3616 } 3630 }
3617 3631
3618 QDate date = mNavigator->selectedDates().first(); 3632 QDate date = mNavigator->selectedDates().first();
3619#if 0 3633#if 0
3620 QDateTime current = QDateTime::currentDateTime(); 3634 QDateTime current = QDateTime::currentDateTime();
3621 if ( date <= current.date() ) { 3635 if ( date <= current.date() ) {
3622 int hour = current.time().hour() +1; 3636 int hour = current.time().hour() +1;
3623 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3637 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3624 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3638 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3625 } else 3639 } else
3626#endif 3640#endif
3627 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3641 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3628 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3642 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3629 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3643 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3630} 3644}
3631 3645
3632void CalendarView::newEvent(QDateTime fh) 3646void CalendarView::newEvent(QDateTime fh)
3633{ 3647{
3634 newEvent(fh, 3648 newEvent(fh,
3635 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3649 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3636} 3650}
3637 3651
3638void CalendarView::newEvent(QDate dt) 3652void CalendarView::newEvent(QDate dt)
3639{ 3653{
3640 newEvent(QDateTime(dt, QTime(0,0,0)), 3654 newEvent(QDateTime(dt, QTime(0,0,0)),
3641 QDateTime(dt, QTime(0,0,0)), true); 3655 QDateTime(dt, QTime(0,0,0)), true);
3642} 3656}
3643void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3657void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3644{ 3658{
3645 newEvent(fromHint, toHint, false); 3659 newEvent(fromHint, toHint, false);
3646} 3660}
3647void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3661void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3648{ 3662{
3649 3663
3650 showEventEditor(); 3664 showEventEditor();
3651 mEventEditor->newEvent(fromHint,toHint,allDay); 3665 mEventEditor->newEvent(fromHint,toHint,allDay);
3652 if ( mFilterView->filtersEnabled() ) { 3666 if ( mFilterView->filtersEnabled() ) {
3653 CalFilter *filter = mFilterView->selectedFilter(); 3667 CalFilter *filter = mFilterView->selectedFilter();
3654 if (filter && filter->showCategories()) { 3668 if (filter && filter->showCategories()) {
3655 mEventEditor->setCategories(filter->categoryList().join(",") ); 3669 mEventEditor->setCategories(filter->categoryList().join(",") );
3656 } 3670 }
3657 if ( filter ) 3671 if ( filter )
3658 mEventEditor->setSecrecy( filter->getSecrecy() ); 3672 mEventEditor->setSecrecy( filter->getSecrecy() );
3659 } 3673 }
3660 mEventEditor->exec(); 3674 mEventEditor->exec();
3661 setActiveWindow(); 3675 setActiveWindow();
3662} 3676}
3663void CalendarView::todoAdded(Todo * t) 3677void CalendarView::todoAdded(Todo * t)
3664{ 3678{
3665 3679
3666 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3680 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3667 updateTodoViews(); 3681 updateTodoViews();
3668} 3682}
3669void CalendarView::todoChanged(Todo * t) 3683void CalendarView::todoChanged(Todo * t)
3670{ 3684{
3671 emit todoModified( t, 4 ); 3685 emit todoModified( t, 4 );
3672 // updateTodoViews(); 3686 // updateTodoViews();
3673} 3687}
3674void CalendarView::todoToBeDeleted(Todo *) 3688void CalendarView::todoToBeDeleted(Todo *)
3675{ 3689{
3676 //qDebug("todoToBeDeleted(Todo *) "); 3690 //qDebug("todoToBeDeleted(Todo *) ");
3677 updateTodoViews(); 3691 updateTodoViews();
3678} 3692}
3679void CalendarView::todoDeleted() 3693void CalendarView::todoDeleted()
3680{ 3694{
3681 //qDebug(" todoDeleted()"); 3695 //qDebug(" todoDeleted()");
3682 updateTodoViews(); 3696 updateTodoViews();
3683} 3697}
3684 3698
3685 3699
3686void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3700void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3687{ 3701{
3688 showTodoEditor(); 3702 showTodoEditor();
3689 mTodoEditor->newTodo(dt,0,allday); 3703 mTodoEditor->newTodo(dt,0,allday);
3690 if ( mFilterView->filtersEnabled() ) { 3704 if ( mFilterView->filtersEnabled() ) {
3691 CalFilter *filter = mFilterView->selectedFilter(); 3705 CalFilter *filter = mFilterView->selectedFilter();
3692 if (filter && filter->showCategories()) { 3706 if (filter && filter->showCategories()) {
3693 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3707 mTodoEditor->setCategories(filter->categoryList().join(",") );
3694 } 3708 }
3695 if ( filter ) 3709 if ( filter )
3696 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3710 mTodoEditor->setSecrecy( filter->getSecrecy() );
3697 } 3711 }
3698 mTodoEditor->exec(); 3712 mTodoEditor->exec();
3699 setActiveWindow(); 3713 setActiveWindow();
3700} 3714}
3701 3715
3702void CalendarView::newTodo() 3716void CalendarView::newTodo()
3703{ 3717{
3704 newTodoDateTime( QDateTime(),true ); 3718 newTodoDateTime( QDateTime(),true );
3705} 3719}
3706 3720
3707void CalendarView::newSubTodo() 3721void CalendarView::newSubTodo()
3708{ 3722{
3709 Todo *todo = selectedTodo(); 3723 Todo *todo = selectedTodo();
3710 if ( todo ) newSubTodo( todo ); 3724 if ( todo ) newSubTodo( todo );
3711} 3725}
3712 3726
3713void CalendarView::newSubTodo(Todo *parentEvent) 3727void CalendarView::newSubTodo(Todo *parentEvent)
3714{ 3728{
3715 3729
3716 showTodoEditor(); 3730 showTodoEditor();
3717 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3731 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3718 mTodoEditor->exec(); 3732 mTodoEditor->exec();
3719 setActiveWindow(); 3733 setActiveWindow();
3720} 3734}
3721 3735
3722void CalendarView::newFloatingEvent() 3736void CalendarView::newFloatingEvent()
3723{ 3737{
3724 DateList tmpList = mNavigator->selectedDates(); 3738 DateList tmpList = mNavigator->selectedDates();
3725 QDate date = tmpList.first(); 3739 QDate date = tmpList.first();
3726 3740
3727 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3741 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3728 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3742 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3729} 3743}
3730 3744
3731 3745
3732void CalendarView::editEvent( Event *event ) 3746void CalendarView::editEvent( Event *event )
3733{ 3747{
3734 3748
3735 if ( !event ) return; 3749 if ( !event ) return;
3736 if ( event->isReadOnly() ) { 3750 if ( event->isReadOnly() ) {
3737 showEvent( event ); 3751 showEvent( event );
3738 return; 3752 return;
3739 } 3753 }
3740 showEventEditor(); 3754 showEventEditor();
3741 mEventEditor->editEvent( event , mFlagEditDescription); 3755 mEventEditor->editEvent( event , mFlagEditDescription);
3742 mEventEditor->exec(); 3756 mEventEditor->exec();
3743 setActiveWindow(); 3757 setActiveWindow();
3744 3758
3745} 3759}
3746void CalendarView::editJournal( Journal *jour ) 3760void CalendarView::editJournal( Journal *jour )
3747{ 3761{
3748 if ( !jour ) return; 3762 if ( !jour ) return;
3749 mDialogManager->hideSearchDialog(); 3763 mDialogManager->hideSearchDialog();
3750 mViewManager->showJournalView(); 3764 mViewManager->showJournalView();
3751 mNavigator->slotDaySelect( jour->dtStart().date() ); 3765 mNavigator->slotDaySelect( jour->dtStart().date() );
3752} 3766}
3753void CalendarView::editTodo( Todo *todo ) 3767void CalendarView::editTodo( Todo *todo )
3754{ 3768{
3755 if ( !todo ) return; 3769 if ( !todo ) return;
3756 3770
3757 if ( todo->isReadOnly() ) { 3771 if ( todo->isReadOnly() ) {
3758 showTodo( todo ); 3772 showTodo( todo );
3759 return; 3773 return;
3760 } 3774 }
3761 showTodoEditor(); 3775 showTodoEditor();
3762 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3776 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3763 mTodoEditor->exec(); 3777 mTodoEditor->exec();
3764 setActiveWindow(); 3778 setActiveWindow();
3765 3779
3766} 3780}
3767 3781
3768KOEventViewerDialog* CalendarView::getEventViewerDialog() 3782KOEventViewerDialog* CalendarView::getEventViewerDialog()
3769{ 3783{
3770 if ( !mEventViewerDialog ) { 3784 if ( !mEventViewerDialog ) {
3771 mEventViewerDialog = new KOEventViewerDialog(0); 3785 mEventViewerDialog = new KOEventViewerDialog(0);
3772 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3786 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3773 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3787 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3774 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3788 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3775 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3789 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3776 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3790 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3777 viewManager(), SLOT( showAgendaView( bool ) ) ); 3791 viewManager(), SLOT( showAgendaView( bool ) ) );
3778 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3792 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3779 this, SLOT( slotViewerClosed() ) ); 3793 this, SLOT( slotViewerClosed() ) );
3780 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3794 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3781 this, SLOT( todoChanged(Todo *) ) ); 3795 this, SLOT( todoChanged(Todo *) ) );
3782 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3796 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3783 mEventViewerDialog->resize( 640, 480 ); 3797 mEventViewerDialog->resize( 640, 480 );
3784 3798
3785 } 3799 }
3786 return mEventViewerDialog; 3800 return mEventViewerDialog;
3787} 3801}
3788void CalendarView::showEvent(Event *event) 3802void CalendarView::showEvent(Event *event)
3789{ 3803{
3790 getEventViewerDialog()->setEvent(event); 3804 getEventViewerDialog()->setEvent(event);
3791 getEventViewerDialog()->showMe(); 3805 getEventViewerDialog()->showMe();
3792} 3806}
3793 3807
3794void CalendarView::showTodo(Todo *event) 3808void CalendarView::showTodo(Todo *event)
3795{ 3809{
3796 getEventViewerDialog()->setTodo(event); 3810 getEventViewerDialog()->setTodo(event);
3797 getEventViewerDialog()->showMe(); 3811 getEventViewerDialog()->showMe();
3798} 3812}
3799void CalendarView::showJournal( Journal *jour ) 3813void CalendarView::showJournal( Journal *jour )
3800{ 3814{
3801 getEventViewerDialog()->setJournal(jour); 3815 getEventViewerDialog()->setJournal(jour);
3802 getEventViewerDialog()->showMe(); 3816 getEventViewerDialog()->showMe();
3803 3817
3804} 3818}
3805// void CalendarView::todoModified (Todo *event, int changed) 3819// void CalendarView::todoModified (Todo *event, int changed)
3806// { 3820// {
3807// // if (mDialogList.find (event) != mDialogList.end ()) { 3821// // if (mDialogList.find (event) != mDialogList.end ()) {
3808// // kdDebug() << "Todo modified and open" << endl; 3822// // kdDebug() << "Todo modified and open" << endl;
3809// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3823// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3810// // temp->modified (changed); 3824// // temp->modified (changed);
3811 3825
3812// // } 3826// // }
3813 3827
3814// mViewManager->updateView(); 3828// mViewManager->updateView();
3815// } 3829// }
3816 3830
3817void CalendarView::appointment_show() 3831void CalendarView::appointment_show()
3818{ 3832{
3819 Event *anEvent = 0; 3833 Event *anEvent = 0;
3820 3834
3821 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3835 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3822 3836
3823 if (mViewManager->currentView()->isEventView()) { 3837 if (mViewManager->currentView()->isEventView()) {
3824 if ( incidence && incidence->typeID() == eventID ) { 3838 if ( incidence && incidence->typeID() == eventID ) {
3825 anEvent = static_cast<Event *>(incidence); 3839 anEvent = static_cast<Event *>(incidence);
3826 } 3840 }
3827 } 3841 }
3828 3842
3829 if (!anEvent) { 3843 if (!anEvent) {
3830 KNotifyClient::beep(); 3844 KNotifyClient::beep();
3831 return; 3845 return;
3832 } 3846 }
3833 3847
3834 showEvent(anEvent); 3848 showEvent(anEvent);
3835} 3849}
3836 3850
3837void CalendarView::appointment_edit() 3851void CalendarView::appointment_edit()
3838{ 3852{
3839 Event *anEvent = 0; 3853 Event *anEvent = 0;
3840 3854
3841 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3855 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3842 3856
3843 if (mViewManager->currentView()->isEventView()) { 3857 if (mViewManager->currentView()->isEventView()) {
3844 if ( incidence && incidence->typeID() == eventID ) { 3858 if ( incidence && incidence->typeID() == eventID ) {
3845 anEvent = static_cast<Event *>(incidence); 3859 anEvent = static_cast<Event *>(incidence);
3846 } 3860 }
3847 } 3861 }
3848 3862
3849 if (!anEvent) { 3863 if (!anEvent) {
3850 KNotifyClient::beep(); 3864 KNotifyClient::beep();
3851 return; 3865 return;
3852 } 3866 }
3853 3867
3854 editEvent(anEvent); 3868 editEvent(anEvent);
3855} 3869}
3856 3870
3857void CalendarView::appointment_delete() 3871void CalendarView::appointment_delete()
3858{ 3872{
3859 Event *anEvent = 0; 3873 Event *anEvent = 0;
3860 3874
3861 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3875 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3862 3876
3863 if (mViewManager->currentView()->isEventView()) { 3877 if (mViewManager->currentView()->isEventView()) {
3864 if ( incidence && incidence->typeID() == eventID ) { 3878 if ( incidence && incidence->typeID() == eventID ) {
3865 anEvent = static_cast<Event *>(incidence); 3879 anEvent = static_cast<Event *>(incidence);
3866 } 3880 }
3867 } 3881 }
3868 3882
3869 if (!anEvent) { 3883 if (!anEvent) {
3870 KNotifyClient::beep(); 3884 KNotifyClient::beep();
3871 return; 3885 return;
3872 } 3886 }
3873 3887
3874 deleteEvent(anEvent); 3888 deleteEvent(anEvent);
3875} 3889}
3876 3890
3877void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3891void CalendarView::todo_resub( Todo * parent, Todo * sub )
3878{ 3892{
3879 if (!sub) return; 3893 if (!sub) return;
3880 if ( sub->relatedTo() == parent ) 3894 if ( sub->relatedTo() == parent )
3881 return; 3895 return;
3882 sub->setRelatedTo(parent); 3896 sub->setRelatedTo(parent);
3883 sub->updated(); 3897 sub->updated();
3884 setModified(true); 3898 setModified(true);
3885 updateView(); 3899 updateView();
3886} 3900}
3887void CalendarView::todo_unsub(Todo *anTodo ) 3901void CalendarView::todo_unsub(Todo *anTodo )
3888{ 3902{
3889 todo_resub( 0, anTodo ); 3903 todo_resub( 0, anTodo );
3890} 3904}
3891 3905
3892void CalendarView::deleteTodo(Todo *todo) 3906void CalendarView::deleteTodo(Todo *todo)
3893{ 3907{
3894 if (!todo) { 3908 if (!todo) {
3895 KNotifyClient::beep(); 3909 KNotifyClient::beep();
3896 return; 3910 return;
3897 } 3911 }
3898 if (KOPrefs::instance()->mConfirm) { 3912 if (KOPrefs::instance()->mConfirm) {
3899 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 3913 QString text = KGlobal::formatMessage ( todo->summary(),0 );
3900 if (!todo->relations().isEmpty()) { 3914 if (!todo->relations().isEmpty()) {
3901 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 3915 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
3902 3916
3903 } 3917 }
3904 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 3918 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
3905 case KMessageBox::Continue: // OK 3919 case KMessageBox::Continue: // OK
3906 bool deleteT = false; 3920 bool deleteT = false;
3907 if (!todo->relations().isEmpty()) { 3921 if (!todo->relations().isEmpty()) {
3908 deleteT = removeCompletedSubTodos( todo ); 3922 deleteT = removeCompletedSubTodos( todo );
3909 } 3923 }
3910 // deleteT == true: todo already deleted in removeCompletedSubTodos 3924 // deleteT == true: todo already deleted in removeCompletedSubTodos
3911 if ( !deleteT ) { 3925 if ( !deleteT ) {
3912 checkExternalId( todo ); 3926 checkExternalId( todo );
3913 calendar()->deleteTodo(todo); 3927 calendar()->deleteTodo(todo);
3914 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3928 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3915 updateView(); 3929 updateView();
3916 } 3930 }
3917 break; 3931 break;
3918 } // switch 3932 } // switch
3919 } else { 3933 } else {
3920 checkExternalId( todo ); 3934 checkExternalId( todo );
3921 mCalendar->deleteTodo(todo); 3935 mCalendar->deleteTodo(todo);
3922 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3936 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3923 updateView(); 3937 updateView();
3924 } 3938 }
3925 3939
3926 emit updateSearchDialog(); 3940 emit updateSearchDialog();
3927} 3941}
3928void CalendarView::deleteJournal(Journal *jour) 3942void CalendarView::deleteJournal(Journal *jour)
3929{ 3943{
3930 if (!jour) { 3944 if (!jour) {
3931 KNotifyClient::beep(); 3945 KNotifyClient::beep();
3932 return; 3946 return;
3933 } 3947 }
3934 if (KOPrefs::instance()->mConfirm) { 3948 if (KOPrefs::instance()->mConfirm) {
3935 3949
3936 QString des; 3950 QString des;
3937 if ( !jour->summary().isEmpty() ) { 3951 if ( !jour->summary().isEmpty() ) {
3938 des = jour->summary(); 3952 des = jour->summary();
3939 } else { 3953 } else {
3940 des = jour->description().left(30); 3954 des = jour->description().left(30);
3941 des = des.simplifyWhiteSpace (); 3955 des = des.simplifyWhiteSpace ();
3942 des.replace (QRegExp ("\\n"),"" ); 3956 des.replace (QRegExp ("\\n"),"" );
3943 des.replace (QRegExp ("\\r"),"" ); 3957 des.replace (QRegExp ("\\r"),"" );
3944 } 3958 }
3945 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 3959 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
3946 case KMessageBox::Continue: // OK 3960 case KMessageBox::Continue: // OK
3947 calendar()->deleteJournal(jour); 3961 calendar()->deleteJournal(jour);
3948 updateView(); 3962 updateView();
3949 break; 3963 break;
3950 } // switch 3964 } // switch
3951 } else { 3965 } else {
3952 calendar()->deleteJournal(jour);; 3966 calendar()->deleteJournal(jour);;
3953 updateView(); 3967 updateView();
3954 } 3968 }
3955 emit updateSearchDialog(); 3969 emit updateSearchDialog();
3956} 3970}
3957 3971
3958void CalendarView::deleteEvent(Event *anEvent) 3972void CalendarView::deleteEvent(Event *anEvent)
3959{ 3973{
3960 if (!anEvent) { 3974 if (!anEvent) {
3961 KNotifyClient::beep(); 3975 KNotifyClient::beep();
3962 return; 3976 return;
3963 } 3977 }
3964 3978
3965 if (anEvent->doesRecur()) { 3979 if (anEvent->doesRecur()) {
3966 QDate itemDate = mViewManager->currentSelectionDate(); 3980 QDate itemDate = mViewManager->currentSelectionDate();
3967 int km; 3981 int km;
3968 if (!itemDate.isValid()) { 3982 if (!itemDate.isValid()) {
3969 //kdDebug() << "Date Not Valid" << endl; 3983 //kdDebug() << "Date Not Valid" << endl;
3970 if (KOPrefs::instance()->mConfirm) { 3984 if (KOPrefs::instance()->mConfirm) {
3971 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3985 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3972 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 3986 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
3973 i18n("KO/Pi Confirmation"),i18n("Delete All")); 3987 i18n("KO/Pi Confirmation"),i18n("Delete All"));
3974 if ( km == KMessageBox::Continue ) 3988 if ( km == KMessageBox::Continue )
3975 km = KMessageBox::No; // No = all below 3989 km = KMessageBox::No; // No = all below
3976 } else 3990 } else
3977 km = KMessageBox::No; 3991 km = KMessageBox::No;
3978 } else { 3992 } else {
3979 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3993 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3980 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 3994 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
3981 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 3995 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
3982 i18n("KO/Pi Confirmation"),i18n("Current"), 3996 i18n("KO/Pi Confirmation"),i18n("Current"),
3983 i18n("All")); 3997 i18n("All"));
3984 } 3998 }
3985 switch(km) { 3999 switch(km) {
3986 4000
3987 case KMessageBox::No: // Continue // all 4001 case KMessageBox::No: // Continue // all
3988 //qDebug("KMessageBox::No "); 4002 //qDebug("KMessageBox::No ");
3989 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4003 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3990 schedule(Scheduler::Cancel,anEvent); 4004 schedule(Scheduler::Cancel,anEvent);
3991 4005
3992 checkExternalId( anEvent); 4006 checkExternalId( anEvent);
3993 mCalendar->deleteEvent(anEvent); 4007 mCalendar->deleteEvent(anEvent);
3994 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4008 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
3995 break; 4009 break;
3996 4010
3997 // Disabled because it does not work 4011 // Disabled because it does not work
3998 //#if 0 4012 //#if 0
3999 case KMessageBox::Yes: // just this one 4013 case KMessageBox::Yes: // just this one
4000 //QDate qd = mNavigator->selectedDates().first(); 4014 //QDate qd = mNavigator->selectedDates().first();
4001 //if (!qd.isValid()) { 4015 //if (!qd.isValid()) {
4002 // kdDebug() << "no date selected, or invalid date" << endl; 4016 // kdDebug() << "no date selected, or invalid date" << endl;
4003 // KNotifyClient::beep(); 4017 // KNotifyClient::beep();
4004 // return; 4018 // return;
4005 //} 4019 //}
4006 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4020 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4007 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4021 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4008 anEvent->addExDate(itemDate); 4022 anEvent->addExDate(itemDate);
4009 int duration = anEvent->recurrence()->duration(); 4023 int duration = anEvent->recurrence()->duration();
4010 if ( duration > 0 ) { 4024 if ( duration > 0 ) {
4011 anEvent->recurrence()->setDuration( duration - 1 ); 4025 anEvent->recurrence()->setDuration( duration - 1 );
4012 } 4026 }
4013 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4027 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4014 } 4028 }
4015 break; 4029 break;
4016 //#endif 4030 //#endif
4017 } // switch 4031 } // switch
4018 } else { 4032 } else {
4019 if (KOPrefs::instance()->mConfirm) { 4033 if (KOPrefs::instance()->mConfirm) {
4020 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4034 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4021 i18n("\nAre you sure you want\nto delete this event?"), 4035 i18n("\nAre you sure you want\nto delete this event?"),
4022 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4036 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4023 case KMessageBox::Continue: // OK 4037 case KMessageBox::Continue: // OK
4024 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4038 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4025 schedule(Scheduler::Cancel,anEvent); 4039 schedule(Scheduler::Cancel,anEvent);
4026 checkExternalId( anEvent); 4040 checkExternalId( anEvent);
4027 mCalendar->deleteEvent(anEvent); 4041 mCalendar->deleteEvent(anEvent);
4028 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4042 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4029 break; 4043 break;
4030 } // switch 4044 } // switch
4031 } else { 4045 } else {
4032 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4046 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4033 schedule(Scheduler::Cancel,anEvent); 4047 schedule(Scheduler::Cancel,anEvent);
4034 checkExternalId( anEvent); 4048 checkExternalId( anEvent);
4035 mCalendar->deleteEvent(anEvent); 4049 mCalendar->deleteEvent(anEvent);
4036 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4050 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4037 } 4051 }
4038 } // if-else 4052 } // if-else
4039 emit updateSearchDialog(); 4053 emit updateSearchDialog();
4040} 4054}
4041 4055
4042bool CalendarView::deleteEvent(const QString &uid) 4056bool CalendarView::deleteEvent(const QString &uid)
4043{ 4057{
4044 Event *ev = mCalendar->event(uid); 4058 Event *ev = mCalendar->event(uid);
4045 if (ev) { 4059 if (ev) {
4046 deleteEvent(ev); 4060 deleteEvent(ev);
4047 return true; 4061 return true;
4048 } else { 4062 } else {
4049 return false; 4063 return false;
4050 } 4064 }
4051} 4065}
4052 4066
4053/*****************************************************************************/ 4067/*****************************************************************************/
4054 4068
4055void CalendarView::action_mail() 4069void CalendarView::action_mail()
4056{ 4070{
4057#ifndef KORG_NOMAIL 4071#ifndef KORG_NOMAIL
4058 KOMailClient mailClient; 4072 KOMailClient mailClient;
4059 4073
4060 Incidence *incidence = currentSelection(); 4074 Incidence *incidence = currentSelection();
4061 4075
4062 if (!incidence) { 4076 if (!incidence) {
4063 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4077 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4064 return; 4078 return;
4065 } 4079 }
4066 if(incidence->attendeeCount() == 0 ) { 4080 if(incidence->attendeeCount() == 0 ) {
4067 KMessageBox::sorry(this, 4081 KMessageBox::sorry(this,
4068 i18n("Can't generate mail:\nNo attendees defined.\n")); 4082 i18n("Can't generate mail:\nNo attendees defined.\n"));
4069 return; 4083 return;
4070 } 4084 }
4071 4085
4072 CalendarLocal cal_tmp; 4086 CalendarLocal cal_tmp;
4073 Event *event = 0; 4087 Event *event = 0;
4074 Event *ev = 0; 4088 Event *ev = 0;
4075 if ( incidence && incidence->typeID() == eventID ) { 4089 if ( incidence && incidence->typeID() == eventID ) {
4076 event = static_cast<Event *>(incidence); 4090 event = static_cast<Event *>(incidence);
4077 ev = new Event(*event); 4091 ev = new Event(*event);
4078 cal_tmp.addEvent(ev); 4092 cal_tmp.addEvent(ev);
4079 } 4093 }
4080 ICalFormat mForm(); 4094 ICalFormat mForm();
4081 QString attachment = mForm.toString( &cal_tmp ); 4095 QString attachment = mForm.toString( &cal_tmp );
4082 if (ev) delete(ev); 4096 if (ev) delete(ev);
4083 4097
4084 mailClient.mailAttendees(currentSelection(), attachment); 4098 mailClient.mailAttendees(currentSelection(), attachment);
4085 4099
4086#endif 4100#endif
4087 4101
4088#if 0 4102#if 0
4089 Event *anEvent = 0; 4103 Event *anEvent = 0;
4090 if (mViewManager->currentView()->isEventView()) { 4104 if (mViewManager->currentView()->isEventView()) {
4091 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4105 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
4092 } 4106 }
4093 4107
4094 if (!anEvent) { 4108 if (!anEvent) {
4095 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4109 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4096 return; 4110 return;
4097 } 4111 }
4098 if(anEvent->attendeeCount() == 0 ) { 4112 if(anEvent->attendeeCount() == 0 ) {
4099 KMessageBox::sorry(this, 4113 KMessageBox::sorry(this,
4100 i18n("Can't generate mail:\nNo attendees defined.\n")); 4114 i18n("Can't generate mail:\nNo attendees defined.\n"));
4101 return; 4115 return;
4102 } 4116 }
4103 4117
4104 mailobject.emailEvent(anEvent); 4118 mailobject.emailEvent(anEvent);
4105#endif 4119#endif
4106} 4120}
4107 4121
4108 4122
4109void CalendarView::schedule_publish(Incidence *incidence) 4123void CalendarView::schedule_publish(Incidence *incidence)
4110{ 4124{
4111 Event *event = 0; 4125 Event *event = 0;
4112 Todo *todo = 0; 4126 Todo *todo = 0;
4113 4127
4114 if (incidence == 0) { 4128 if (incidence == 0) {
4115 incidence = mViewManager->currentView()->selectedIncidences().first(); 4129 incidence = mViewManager->currentView()->selectedIncidences().first();
4116 if (incidence == 0) { 4130 if (incidence == 0) {
4117 incidence = mTodoList->selectedIncidences().first(); 4131 incidence = mTodoList->selectedIncidences().first();
4118 } 4132 }
4119 } 4133 }
4120 if ( incidence && incidence->typeID() == eventID ) { 4134 if ( incidence && incidence->typeID() == eventID ) {
4121 event = static_cast<Event *>(incidence); 4135 event = static_cast<Event *>(incidence);
4122 } else { 4136 } else {
4123 if ( incidence && incidence->typeID() == todoID ) { 4137 if ( incidence && incidence->typeID() == todoID ) {
4124 todo = static_cast<Todo *>(incidence); 4138 todo = static_cast<Todo *>(incidence);
4125 } 4139 }
4126 } 4140 }
4127 4141
4128 if (!event && !todo) { 4142 if (!event && !todo) {
4129 KMessageBox::sorry(this,i18n("No event selected.")); 4143 KMessageBox::sorry(this,i18n("No event selected."));
4130 return; 4144 return;