summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-10-22 14:49:34 (UTC)
committer zautrix <zautrix>2005-10-22 14:49:34 (UTC)
commit30550b912b291ccedc8ab100004ba8c5ed216097 (patch) (unidiff)
tree9b815bc396ce304b1e975226306da5a498e70259
parent2e5c0a288f7c54cce7e0327ddbbd160f242758f1 (diff)
downloadkdepimpi-30550b912b291ccedc8ab100004ba8c5ed216097.zip
kdepimpi-30550b912b291ccedc8ab100004ba8c5ed216097.tar.gz
kdepimpi-30550b912b291ccedc8ab100004ba8c5ed216097.tar.bz2
fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 2ba8528..e31a6e1 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,5160 +1,5160 @@
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("Loading of calendar(s) failed")); 838 KMessageBox::error(this,message, i18n("Loading 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( "Project1"); 911 root1->setSummary( "Project1");
912 root1->setPriority( 1 ); 912 root1->setPriority( 1 );
913 root1->setCategories( QString( "Cat_Pro1") ); 913 root1->setCategories( QString( "Cat_Pro1") );
914 root1->setDescription( "This is a test description of a root Project" ); 914 root1->setDescription( "This is a test description of a root Project" );
915 root1->setPercentComplete( 20 ); 915 root1->setPercentComplete( 20 );
916 updateView(); 916 updateView();
917 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 917 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
918 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 918 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
919 919
920 nt = new Todo; 920 nt = new Todo;
921 mCalendar->addTodo( nt ); 921 mCalendar->addTodo( nt );
922 nt->setSummary( "Planning Project1"); 922 nt->setSummary( "Planning Project1");
923 nt->setPriority( 1 ); 923 nt->setPriority( 1 );
924 nt->setDescription( "This is a test description of Planning Project1" ); 924 nt->setDescription( "This is a test description of Planning Project1" );
925 nt->setPercentComplete( 20 ); 925 nt->setPercentComplete( 20 );
926 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 926 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
927 927
928 928
929 Todo * sub1 = nt; 929 Todo * sub1 = nt;
930 sub1->setRelatedTo( root1 ); 930 sub1->setRelatedTo( root1 );
931 931
932 nt = new Todo; 932 nt = new Todo;
933 mCalendar->addTodo( nt ); 933 mCalendar->addTodo( nt );
934 nt->setSummary( "Planning Project1: Lutz"); 934 nt->setSummary( "Planning Project1: Lutz");
935 nt->setPriority( 1 ); 935 nt->setPriority( 1 );
936 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" );
937 nt->setPercentComplete( 20 ); 937 nt->setPercentComplete( 20 );
938 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 938 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
939 Todo * workLutz11 = nt; 939 Todo * workLutz11 = nt;
940 workLutz11->setRelatedTo( sub1 ); 940 workLutz11->setRelatedTo( sub1 );
941 941
942 nt = new Todo; 942 nt = new Todo;
943 mCalendar->addTodo( nt ); 943 mCalendar->addTodo( nt );
944 nt->setSummary( "Planning Project1: Norbert"); 944 nt->setSummary( "Planning Project1: Norbert");
945 nt->setPriority( 1 ); 945 nt->setPriority( 1 );
946 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" );
947 nt->setPercentComplete( 20 ); 947 nt->setPercentComplete( 20 );
948 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 948 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
949 Todo * workNorbert11 = nt; 949 Todo * workNorbert11 = nt;
950 workNorbert11->setRelatedTo( sub1 ); 950 workNorbert11->setRelatedTo( sub1 );
951 951
952 nt = new Todo; 952 nt = new Todo;
953 mCalendar->addTodo( nt ); 953 mCalendar->addTodo( nt );
954 nt->setSummary( "Work on 1"); 954 nt->setSummary( "Work on 1");
955 nt->setPriority( 1 ); 955 nt->setPriority( 1 );
956 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") ); 957 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
958 nt->setPercentComplete( 20 ); 958 nt->setPercentComplete( 20 );
959 959
960 Todo * sub2 = nt; 960 Todo * sub2 = nt;
961 sub2->setRelatedTo( root1 ); 961 sub2->setRelatedTo( root1 );
962 962
963 963
964 nt = new Todo; 964 nt = new Todo;
965 mCalendar->addTodo( nt ); 965 mCalendar->addTodo( nt );
966 nt->setSummary( "Work on 1: Lutz"); 966 nt->setSummary( "Work on 1: Lutz");
967 nt->setPriority( 1 ); 967 nt->setPriority( 1 );
968 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") ); 969 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
970 nt->setPercentComplete( 20 ); 970 nt->setPercentComplete( 20 );
971 Todo * workLutz12 = nt; 971 Todo * workLutz12 = nt;
972 workLutz12->setRelatedTo( sub2 ); 972 workLutz12->setRelatedTo( sub2 );
973 973
974 nt = new Todo; 974 nt = new Todo;
975 mCalendar->addTodo( nt ); 975 mCalendar->addTodo( nt );
976 nt->setSummary( "Work on 1: Norbert"); 976 nt->setSummary( "Work on 1: Norbert");
977 nt->setPriority( 1 ); 977 nt->setPriority( 1 );
978 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") ); 979 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
980 nt->setPercentComplete( 20 ); 980 nt->setPercentComplete( 20 );
981 Todo * workNorbert12 = nt; 981 Todo * workNorbert12 = nt;
982 workNorbert12->setRelatedTo( sub2 ); 982 workNorbert12->setRelatedTo( sub2 );
983 983
984 int secLenRunning = 7200; 984 int secLenRunning = 7200;
985 int secLenPausing = 3600 * 3; 985 int secLenPausing = 3600 * 3;
986 int dayInterval = 1; 986 int dayInterval = 1;
987 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 987 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
988 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 988 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
989 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);
990 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 990 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
991 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 991 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
992 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 992 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
993 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 993 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
994 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 994 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
995 995
996 } 996 }
997 997
998 { 998 {
999 Todo * root1 = new Todo; 999 Todo * root1 = new Todo;
1000 mCalendar->addTodo( root1 ); 1000 mCalendar->addTodo( root1 );
1001 root1->setSummary( "Project2"); 1001 root1->setSummary( "Project2");
1002 root1->setPriority( 1 ); 1002 root1->setPriority( 1 );
1003 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" );
1004 root1->setPercentComplete( 20 ); 1004 root1->setPercentComplete( 20 );
1005 root1->setCategories( QString( "Cat_Pro2") ); 1005 root1->setCategories( QString( "Cat_Pro2") );
1006 updateView(); 1006 updateView();
1007 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1007 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1008 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 1008 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1009 int secLenRunning = 7200; 1009 int secLenRunning = 7200;
1010 int secLenPausing = 3600 * 3; 1010 int secLenPausing = 3600 * 3;
1011 int dayInterval = 1; 1011 int dayInterval = 1;
1012 1012
1013 nt = new Todo; 1013 nt = new Todo;
1014 mCalendar->addTodo( nt ); 1014 mCalendar->addTodo( nt );
1015 nt->setSummary( "Planning Project2"); 1015 nt->setSummary( "Planning Project2");
1016 nt->setPriority( 1 ); 1016 nt->setPriority( 1 );
1017 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") ); 1018 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1019 nt->setPercentComplete( 20 ); 1019 nt->setPercentComplete( 20 );
1020 1020
1021 1021
1022 Todo * sub1 = nt; 1022 Todo * sub1 = nt;
1023 sub1->setRelatedTo( root1 ); 1023 sub1->setRelatedTo( root1 );
1024 1024
1025 nt = new Todo; 1025 nt = new Todo;
1026 mCalendar->addTodo( nt ); 1026 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning Project2: Lutz"); 1027 nt->setSummary( "Planning Project2: Lutz");
1028 nt->setPriority( 1 ); 1028 nt->setPriority( 1 );
1029 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") ); 1030 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1031 nt->setPercentComplete( 20 ); 1031 nt->setPercentComplete( 20 );
1032 Todo * workLutz11 = nt; 1032 Todo * workLutz11 = nt;
1033 workLutz11->setRelatedTo( sub1 ); 1033 workLutz11->setRelatedTo( sub1 );
1034 1034
1035 nt = new Todo; 1035 nt = new Todo;
1036 mCalendar->addTodo( nt ); 1036 mCalendar->addTodo( nt );
1037 nt->setSummary( "Planning Project2: Norbert"); 1037 nt->setSummary( "Planning Project2: Norbert");
1038 nt->setPriority( 1 ); 1038 nt->setPriority( 1 );
1039 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") ); 1040 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1041 nt->setPercentComplete( 20 ); 1041 nt->setPercentComplete( 20 );
1042 Todo * workNorbert11 = nt; 1042 Todo * workNorbert11 = nt;
1043 workNorbert11->setRelatedTo( sub1 ); 1043 workNorbert11->setRelatedTo( sub1 );
1044 1044
1045 nt = new Todo; 1045 nt = new Todo;
1046 mCalendar->addTodo( nt ); 1046 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2"); 1047 nt->setSummary( "Work on 2");
1048 nt->setPriority( 1 ); 1048 nt->setPriority( 1 );
1049 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") ); 1050 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1051 nt->setPercentComplete( 20 ); 1051 nt->setPercentComplete( 20 );
1052 1052
1053 Todo * sub2 = nt; 1053 Todo * sub2 = nt;
1054 sub2->setRelatedTo( root1 ); 1054 sub2->setRelatedTo( root1 );
1055 1055
1056 1056
1057 nt = new Todo; 1057 nt = new Todo;
1058 mCalendar->addTodo( nt ); 1058 mCalendar->addTodo( nt );
1059 nt->setSummary( "Work on 2: Lutz"); 1059 nt->setSummary( "Work on 2: Lutz");
1060 nt->setPriority( 1 ); 1060 nt->setPriority( 1 );
1061 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") ); 1062 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1063 nt->setPercentComplete( 20 ); 1063 nt->setPercentComplete( 20 );
1064 Todo * workLutz12 = nt; 1064 Todo * workLutz12 = nt;
1065 workLutz12->setRelatedTo( sub2 ); 1065 workLutz12->setRelatedTo( sub2 );
1066 1066
1067 nt = new Todo; 1067 nt = new Todo;
1068 mCalendar->addTodo( nt ); 1068 mCalendar->addTodo( nt );
1069 nt->setSummary( "Work on 2: Norbert"); 1069 nt->setSummary( "Work on 2: Norbert");
1070 nt->setPriority( 1 ); 1070 nt->setPriority( 1 );
1071 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") ); 1072 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1073 nt->setPercentComplete( 20 ); 1073 nt->setPercentComplete( 20 );
1074 Todo * workNorbert12 = nt; 1074 Todo * workNorbert12 = nt;
1075 workNorbert12->setRelatedTo( sub2 ); 1075 workNorbert12->setRelatedTo( sub2 );
1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1077 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);
1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1080 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);
1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1083 } 1083 }
1084 updateView(); 1084 updateView();
1085#endif 1085#endif
1086 1086
1087} 1087}
1088void 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 )
1089{ 1089{
1090 static int ccc = 0; 1090 static int ccc = 0;
1091 ++ccc; 1091 ++ccc;
1092 QDateTime t_start = start; 1092 QDateTime t_start = start;
1093 runT->setPriority( 5 ); 1093 runT->setPriority( 5 );
1094 runT->setPercentComplete( 0 ); 1094 runT->setPercentComplete( 0 );
1095 int count = 0; 1095 int count = 0;
1096 int prio = 5; 1096 int prio = 5;
1097 int complete = 0; 1097 int complete = 0;
1098 while ( t_start < end ) { 1098 while ( t_start < end ) {
1099 ++count; 1099 ++count;
1100 if ( count > ccc ) { 1100 if ( count > ccc ) {
1101 count = 0; 1101 count = 0;
1102 --prio; 1102 --prio;
1103 if ( prio == 0 ) prio = 5; 1103 if ( prio == 0 ) prio = 5;
1104 complete += 20; 1104 complete += 20;
1105 if ( complete > 100 ) complete = 0; 1105 if ( complete > 100 ) complete = 0;
1106 runT->setPriority( prio ); 1106 runT->setPriority( prio );
1107 runT->setPercentComplete( complete ); 1107 runT->setPercentComplete( complete );
1108 } 1108 }
1109 runT->setRunning( true ); 1109 runT->setRunning( true );
1110 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 ) );
1111 if ( dayInterval ) 1111 if ( dayInterval )
1112 t_start = t_start.addDays( dayInterval ); 1112 t_start = t_start.addDays( dayInterval );
1113 else { 1113 else {
1114 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1114 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1115 } 1115 }
1116 } 1116 }
1117} 1117}
1118 1118
1119void CalendarView::showDay( QDate d ) 1119void CalendarView::showDay( QDate d )
1120{ 1120{
1121 dateNavigator()->blockSignals( true ); 1121 dateNavigator()->blockSignals( true );
1122 dateNavigator()->selectDate( d ); 1122 dateNavigator()->selectDate( d );
1123 dateNavigator()->blockSignals( false ); 1123 dateNavigator()->blockSignals( false );
1124 mViewManager->showDayView(); 1124 mViewManager->showDayView();
1125 //dateNavigator()->selectDate( d ); 1125 //dateNavigator()->selectDate( d );
1126} 1126}
1127void CalendarView::timerAlarm() 1127void CalendarView::timerAlarm()
1128{ 1128{
1129 //qDebug("CalendarView::timerAlarm() "); 1129 //qDebug("CalendarView::timerAlarm() ");
1130 computeAlarm(mAlarmNotification ); 1130 computeAlarm(mAlarmNotification );
1131} 1131}
1132 1132
1133void CalendarView::suspendAlarm() 1133void CalendarView::suspendAlarm()
1134{ 1134{
1135 //qDebug(" CalendarView::suspendAlarm() "); 1135 //qDebug(" CalendarView::suspendAlarm() ");
1136 computeAlarm(mSuspendAlarmNotification ); 1136 computeAlarm(mSuspendAlarmNotification );
1137 1137
1138} 1138}
1139 1139
1140void CalendarView::startAlarm( QString mess , QString filename) 1140void CalendarView::startAlarm( QString mess , QString filename)
1141{ 1141{
1142 1142
1143 topLevelWidget()->showNormal(); 1143 topLevelWidget()->showNormal();
1144 topLevelWidget()->setActiveWindow(); 1144 topLevelWidget()->setActiveWindow();
1145 topLevelWidget()->raise(); 1145 topLevelWidget()->raise();
1146 1146
1147 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 );
1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1149 1149
1150} 1150}
1151 1151
1152void CalendarView::checkNextTimerAlarm() 1152void CalendarView::checkNextTimerAlarm()
1153{ 1153{
1154 mCalendar->checkAlarmForIncidence( 0, true ); 1154 mCalendar->checkAlarmForIncidence( 0, true );
1155} 1155}
1156 1156
1157void CalendarView::computeAlarm( QString msg ) 1157void CalendarView::computeAlarm( QString msg )
1158{ 1158{
1159 1159
1160 QString mess = msg; 1160 QString mess = msg;
1161 QString mAlarmMessage = mess.mid( 9 ); 1161 QString mAlarmMessage = mess.mid( 9 );
1162 QString filename = MainWindow::resourcePath(); 1162 QString filename = MainWindow::resourcePath();
1163 filename += "koalarm.wav"; 1163 filename += "koalarm.wav";
1164 QString tempfilename; 1164 QString tempfilename;
1165 if ( mess.left( 13 ) == "suspend_alarm") { 1165 if ( mess.left( 13 ) == "suspend_alarm") {
1166 bool error = false; 1166 bool error = false;
1167 int len = mess.mid( 13 ).find("+++"); 1167 int len = mess.mid( 13 ).find("+++");
1168 if ( len < 2 ) 1168 if ( len < 2 )
1169 error = true; 1169 error = true;
1170 else { 1170 else {
1171 tempfilename = mess.mid( 13, len ); 1171 tempfilename = mess.mid( 13, len );
1172 if ( !QFile::exists( tempfilename ) ) 1172 if ( !QFile::exists( tempfilename ) )
1173 error = true; 1173 error = true;
1174 } 1174 }
1175 if ( ! error ) { 1175 if ( ! error ) {
1176 filename = tempfilename; 1176 filename = tempfilename;
1177 } 1177 }
1178 mAlarmMessage = mess.mid( 13+len+3 ); 1178 mAlarmMessage = mess.mid( 13+len+3 );
1179 //qDebug("suspend file %s ",tempfilename.latin1() ); 1179 //qDebug("suspend file %s ",tempfilename.latin1() );
1180 startAlarm( mAlarmMessage, filename); 1180 startAlarm( mAlarmMessage, filename);
1181 return; 1181 return;
1182 } 1182 }
1183 if ( mess.left( 11 ) == "timer_alarm") { 1183 if ( mess.left( 11 ) == "timer_alarm") {
1184 //mTimerTime = 0; 1184 //mTimerTime = 0;
1185 startAlarm( mess.mid( 11 ), filename ); 1185 startAlarm( mess.mid( 11 ), filename );
1186 return; 1186 return;
1187 } 1187 }
1188 if ( mess.left( 10 ) == "proc_alarm") { 1188 if ( mess.left( 10 ) == "proc_alarm") {
1189 bool error = false; 1189 bool error = false;
1190 int len = mess.mid( 10 ).find("+++"); 1190 int len = mess.mid( 10 ).find("+++");
1191 if ( len < 2 ) 1191 if ( len < 2 )
1192 error = true; 1192 error = true;
1193 else { 1193 else {
1194 tempfilename = mess.mid( 10, len ); 1194 tempfilename = mess.mid( 10, len );
1195 if ( !QFile::exists( tempfilename ) ) 1195 if ( !QFile::exists( tempfilename ) )
1196 error = true; 1196 error = true;
1197 } 1197 }
1198 if ( error ) { 1198 if ( error ) {
1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1200 mAlarmMessage += mess.mid( 10+len+3+9 ); 1200 mAlarmMessage += mess.mid( 10+len+3+9 );
1201 } else { 1201 } else {
1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1203 //qDebug("-----system command %s ",tempfilename.latin1() ); 1203 //qDebug("-----system command %s ",tempfilename.latin1() );
1204#ifndef _WIN32_ 1204#ifndef _WIN32_
1205 if ( vfork () == 0 ) { 1205 if ( vfork () == 0 ) {
1206 execl ( tempfilename.latin1(), 0 ); 1206 execl ( tempfilename.latin1(), 0 );
1207 return; 1207 return;
1208 } 1208 }
1209#else 1209#else
1210 QProcess* p = new QProcess(); 1210 QProcess* p = new QProcess();
1211 p->addArgument( tempfilename.latin1() ); 1211 p->addArgument( tempfilename.latin1() );
1212 p->start(); 1212 p->start();
1213 return; 1213 return;
1214#endif 1214#endif
1215 1215
1216 return; 1216 return;
1217 } 1217 }
1218 1218
1219 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1219 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1220 } 1220 }
1221 if ( mess.left( 11 ) == "audio_alarm") { 1221 if ( mess.left( 11 ) == "audio_alarm") {
1222 bool error = false; 1222 bool error = false;
1223 int len = mess.mid( 11 ).find("+++"); 1223 int len = mess.mid( 11 ).find("+++");
1224 if ( len < 2 ) 1224 if ( len < 2 )
1225 error = true; 1225 error = true;
1226 else { 1226 else {
1227 tempfilename = mess.mid( 11, len ); 1227 tempfilename = mess.mid( 11, len );
1228 if ( !QFile::exists( tempfilename ) ) 1228 if ( !QFile::exists( tempfilename ) )
1229 error = true; 1229 error = true;
1230 } 1230 }
1231 if ( ! error ) { 1231 if ( ! error ) {
1232 filename = tempfilename; 1232 filename = tempfilename;
1233 } 1233 }
1234 mAlarmMessage = mess.mid( 11+len+3+9 ); 1234 mAlarmMessage = mess.mid( 11+len+3+9 );
1235 //qDebug("audio file command %s ",tempfilename.latin1() ); 1235 //qDebug("audio file command %s ",tempfilename.latin1() );
1236 } 1236 }
1237 if ( mess.left( 9 ) == "cal_alarm") { 1237 if ( mess.left( 9 ) == "cal_alarm") {
1238 mAlarmMessage = mess.mid( 9 ) ; 1238 mAlarmMessage = mess.mid( 9 ) ;
1239 } 1239 }
1240 1240
1241 startAlarm( mAlarmMessage, filename ); 1241 startAlarm( mAlarmMessage, filename );
1242 1242
1243 1243
1244} 1244}
1245 1245
1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1247{ 1247{
1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1249 1249
1250 mSuspendAlarmNotification = noti; 1250 mSuspendAlarmNotification = noti;
1251 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1251 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1252 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1252 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1253 mSuspendTimer->start( ms , true ); 1253 mSuspendTimer->start( ms , true );
1254#ifdef DESKTOP_VERSION 1254#ifdef DESKTOP_VERSION
1255 if ( QApplication::desktop()->width() < 1024 ) { 1255 if ( QApplication::desktop()->width() < 1024 ) {
1256 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1256 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1257 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() ); 1257 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() );
1258 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm"; 1258 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm";
1259 QFile file( fn ); 1259 QFile file( fn );
1260 if (!file.open( IO_WriteOnly ) ) { 1260 if (!file.open( IO_WriteOnly ) ) {
1261 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1261 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1262 } else { 1262 } else {
1263 QTextStream ts( &file ); 1263 QTextStream ts( &file );
1264 ts << mess; 1264 ts << mess;
1265 file.close(); 1265 file.close();
1266 } 1266 }
1267 } 1267 }
1268#endif 1268#endif
1269 1269
1270} 1270}
1271 1271
1272void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1272void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1273{ 1273{
1274 mNextAlarmDateTime = qdt; 1274 mNextAlarmDateTime = qdt;
1275 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1275 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1276 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1276 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1277#ifndef DESKTOP_VERSION 1277#ifndef DESKTOP_VERSION
1278 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1278 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1279#endif 1279#endif
1280 return; 1280 return;
1281 } 1281 }
1282#ifdef DESKTOP_VERSION 1282#ifdef DESKTOP_VERSION
1283 if ( QApplication::desktop()->width() < 1024 ) { 1283 if ( QApplication::desktop()->width() < 1024 ) {
1284 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1284 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1285 //qDebug("nextalarm = \n%s ",mess.latin1() ); 1285 //qDebug("nextalarm = \n%s ",mess.latin1() );
1286 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm"; 1286 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm";
1287 QFile file( fn ); 1287 QFile file( fn );
1288 if (!file.open( IO_WriteOnly ) ) { 1288 if (!file.open( IO_WriteOnly ) ) {
1289 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1289 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1290 } else { 1290 } else {
1291 QTextStream ts( &file ); 1291 QTextStream ts( &file );
1292 ts << mess; 1292 ts << mess;
1293 file.close(); 1293 file.close();
1294 } 1294 }
1295 } 1295 }
1296#endif 1296#endif
1297 int maxSec; 1297 int maxSec;
1298 //maxSec = 5; //testing only 1298 //maxSec = 5; //testing only
1299 maxSec = 86400+3600; // one day+1hour 1299 maxSec = 86400+3600; // one day+1hour
1300 mAlarmNotification = noti; 1300 mAlarmNotification = noti;
1301 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1301 int sec = QDateTime::currentDateTime().secsTo( qdt );
1302 if ( sec > maxSec ) { 1302 if ( sec > maxSec ) {
1303 mRecheckAlarmTimer->start( maxSec * 1000 ); 1303 mRecheckAlarmTimer->start( maxSec * 1000 );
1304 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1304 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1305 return; 1305 return;
1306 } else { 1306 } else {
1307 mRecheckAlarmTimer->stop(); 1307 mRecheckAlarmTimer->stop();
1308 } 1308 }
1309 //qDebug("Alarm timer started with secs: %d ", sec); 1309 //qDebug("Alarm timer started with secs: %d ", sec);
1310 mAlarmTimer->start( sec * 1000 , true ); 1310 mAlarmTimer->start( sec * 1000 , true );
1311 1311
1312} 1312}
1313// called by mRecheckAlarmTimer to get next alarm 1313// called by mRecheckAlarmTimer to get next alarm
1314// we need this, because a QTimer has only a max range of 25 days 1314// we need this, because a QTimer has only a max range of 25 days
1315void CalendarView::recheckTimerAlarm() 1315void CalendarView::recheckTimerAlarm()
1316{ 1316{
1317 mAlarmTimer->stop(); 1317 mAlarmTimer->stop();
1318 mRecheckAlarmTimer->stop(); 1318 mRecheckAlarmTimer->stop();
1319 mCalendar->checkAlarmForIncidence( 0, true ); 1319 mCalendar->checkAlarmForIncidence( 0, true );
1320} 1320}
1321#ifndef DESKTOP_VERSION 1321#ifndef DESKTOP_VERSION
1322void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1322void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1323#else 1323#else
1324void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1324void CalendarView::removeAlarm(const QDateTime &, const QString & )
1325#endif 1325#endif
1326{ 1326{
1327 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1327 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1328 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1328 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1329#ifndef DESKTOP_VERSION 1329#ifndef DESKTOP_VERSION
1330 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1330 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1331#endif 1331#endif
1332 return; 1332 return;
1333 } 1333 }
1334 mAlarmTimer->stop(); 1334 mAlarmTimer->stop();
1335} 1335}
1336void CalendarView::selectWeekNum ( int num ) 1336void CalendarView::selectWeekNum ( int num )
1337{ 1337{
1338 dateNavigator()->blockSignals( true ); 1338 dateNavigator()->blockSignals( true );
1339 dateNavigator()->selectWeek( num ); 1339 dateNavigator()->selectWeek( num );
1340 dateNavigator()->blockSignals( false ); 1340 dateNavigator()->blockSignals( false );
1341 mViewManager->showWeekView(); 1341 mViewManager->showWeekView();
1342} 1342}
1343KOViewManager *CalendarView::viewManager() 1343KOViewManager *CalendarView::viewManager()
1344{ 1344{
1345 return mViewManager; 1345 return mViewManager;
1346} 1346}
1347 1347
1348KODialogManager *CalendarView::dialogManager() 1348KODialogManager *CalendarView::dialogManager()
1349{ 1349{
1350 return mDialogManager; 1350 return mDialogManager;
1351} 1351}
1352 1352
1353QDate CalendarView::startDate() 1353QDate CalendarView::startDate()
1354{ 1354{
1355 DateList dates = mNavigator->selectedDates(); 1355 DateList dates = mNavigator->selectedDates();
1356 1356
1357 return dates.first(); 1357 return dates.first();
1358} 1358}
1359 1359
1360QDate CalendarView::endDate() 1360QDate CalendarView::endDate()
1361{ 1361{
1362 DateList dates = mNavigator->selectedDates(); 1362 DateList dates = mNavigator->selectedDates();
1363 1363
1364 return dates.last(); 1364 return dates.last();
1365} 1365}
1366 1366
1367 1367
1368void CalendarView::createPrinter() 1368void CalendarView::createPrinter()
1369{ 1369{
1370#ifndef KORG_NOPRINTER 1370#ifndef KORG_NOPRINTER
1371 if (!mCalPrinter) { 1371 if (!mCalPrinter) {
1372 mCalPrinter = new CalPrinter(this, mCalendar); 1372 mCalPrinter = new CalPrinter(this, mCalendar);
1373 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1373 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1374 } 1374 }
1375#endif 1375#endif
1376} 1376}
1377 1377
1378 1378
1379//KOPrefs::instance()->mWriteBackFile 1379//KOPrefs::instance()->mWriteBackFile
1380//KOPrefs::instance()->mWriteBackExistingOnly 1380//KOPrefs::instance()->mWriteBackExistingOnly
1381 1381
1382// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1382// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1383// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1383// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1384// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1384// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1385// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1385// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1386// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1386// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1387// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1387// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1388 1388
1389int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1389int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1390{ 1390{
1391 1391
1392 // 0 equal 1392 // 0 equal
1393 // 1 take local 1393 // 1 take local
1394 // 2 take remote 1394 // 2 take remote
1395 // 3 cancel 1395 // 3 cancel
1396 QDateTime lastSync = mLastCalendarSync; 1396 QDateTime lastSync = mLastCalendarSync;
1397 QDateTime localMod = local->lastModified(); 1397 QDateTime localMod = local->lastModified();
1398 QDateTime remoteMod = remote->lastModified(); 1398 QDateTime remoteMod = remote->lastModified();
1399 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1399 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1400 bool remCh, locCh; 1400 bool remCh, locCh;
1401 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1401 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1402 //if ( remCh ) 1402 //if ( remCh )
1403 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1403 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1404 locCh = ( localMod > mLastCalendarSync ); 1404 locCh = ( localMod > mLastCalendarSync );
1405 if ( !remCh && ! locCh ) { 1405 if ( !remCh && ! locCh ) {
1406 //qDebug("both not changed "); 1406 //qDebug("both not changed ");
1407 lastSync = localMod.addDays(1); 1407 lastSync = localMod.addDays(1);
1408 if ( mode <= SYNC_PREF_ASK ) 1408 if ( mode <= SYNC_PREF_ASK )
1409 return 0; 1409 return 0;
1410 } else { 1410 } else {
1411 if ( locCh ) { 1411 if ( locCh ) {
1412 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1412 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1413 lastSync = localMod.addDays( -1 ); 1413 lastSync = localMod.addDays( -1 );
1414 if ( !remCh ) 1414 if ( !remCh )
1415 remoteMod = ( lastSync.addDays( -1 ) ); 1415 remoteMod = ( lastSync.addDays( -1 ) );
1416 } else { 1416 } else {
1417 //qDebug(" not loc changed "); 1417 //qDebug(" not loc changed ");
1418 lastSync = localMod.addDays( 1 ); 1418 lastSync = localMod.addDays( 1 );
1419 if ( remCh ) 1419 if ( remCh )
1420 remoteMod =( lastSync.addDays( 1 ) ); 1420 remoteMod =( lastSync.addDays( 1 ) );
1421 1421
1422 } 1422 }
1423 } 1423 }
1424 full = true; 1424 full = true;
1425 if ( mode < SYNC_PREF_ASK ) 1425 if ( mode < SYNC_PREF_ASK )
1426 mode = SYNC_PREF_ASK; 1426 mode = SYNC_PREF_ASK;
1427 } else { 1427 } else {
1428 if ( localMod == remoteMod ) 1428 if ( localMod == remoteMod )
1429 // if ( local->revision() == remote->revision() ) 1429 // if ( local->revision() == remote->revision() )
1430 return 0; 1430 return 0;
1431 1431
1432 } 1432 }
1433 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1433 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1434 1434
1435 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1435 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1436 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1436 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1437 //full = true; //debug only 1437 //full = true; //debug only
1438 if ( full ) { 1438 if ( full ) {
1439 bool equ = false; 1439 bool equ = false;
1440 if ( local->typeID() == eventID ) { 1440 if ( local->typeID() == eventID ) {
1441 equ = (*((Event*) local) == *((Event*) remote)); 1441 equ = (*((Event*) local) == *((Event*) remote));
1442 } 1442 }
1443 else if ( local->typeID() == todoID ) 1443 else if ( local->typeID() == todoID )
1444 equ = (*((Todo*) local) == (*(Todo*) remote)); 1444 equ = (*((Todo*) local) == (*(Todo*) remote));
1445 else if ( local->typeID() == journalID ) 1445 else if ( local->typeID() == journalID )
1446 equ = (*((Journal*) local) == *((Journal*) remote)); 1446 equ = (*((Journal*) local) == *((Journal*) remote));
1447 if ( equ ) { 1447 if ( equ ) {
1448 //qDebug("equal "); 1448 //qDebug("equal ");
1449 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1449 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1450 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1450 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1451 } 1451 }
1452 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1452 if ( mode < SYNC_PREF_FORCE_LOCAL )
1453 return 0; 1453 return 0;
1454 1454
1455 }//else //debug only 1455 }//else //debug only
1456 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1456 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1457 } 1457 }
1458 int result; 1458 int result;
1459 bool localIsNew; 1459 bool localIsNew;
1460 //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() ); 1460 //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() );
1461 1461
1462 1462
1463 // ************************************************ 1463 // ************************************************
1464 // ************************************************ 1464 // ************************************************
1465 // ************************************************ 1465 // ************************************************
1466 // We may have that lastSync > remoteMod AND lastSync > localMod 1466 // We may have that lastSync > remoteMod AND lastSync > localMod
1467 // BUT remoteMod != localMod 1467 // BUT remoteMod != localMod
1468 1468
1469 1469
1470 if ( full && mode < SYNC_PREF_NEWEST ) 1470 if ( full && mode < SYNC_PREF_NEWEST )
1471 mode = SYNC_PREF_ASK; 1471 mode = SYNC_PREF_ASK;
1472 1472
1473 switch( mode ) { 1473 switch( mode ) {
1474 case SYNC_PREF_LOCAL: 1474 case SYNC_PREF_LOCAL:
1475 if ( lastSync > remoteMod ) 1475 if ( lastSync > remoteMod )
1476 return 1; 1476 return 1;
1477 if ( lastSync > localMod ) 1477 if ( lastSync > localMod )
1478 return 2; 1478 return 2;
1479 return 1; 1479 return 1;
1480 break; 1480 break;
1481 case SYNC_PREF_REMOTE: 1481 case SYNC_PREF_REMOTE:
1482 if ( lastSync > localMod ) 1482 if ( lastSync > localMod )
1483 return 2; 1483 return 2;
1484 if ( lastSync > remoteMod ) 1484 if ( lastSync > remoteMod )
1485 return 1; 1485 return 1;
1486 return 2; 1486 return 2;
1487 break; 1487 break;
1488 case SYNC_PREF_NEWEST: 1488 case SYNC_PREF_NEWEST:
1489 if ( localMod >= remoteMod ) 1489 if ( localMod >= remoteMod )
1490 return 1; 1490 return 1;
1491 else 1491 else
1492 return 2; 1492 return 2;
1493 break; 1493 break;
1494 case SYNC_PREF_ASK: 1494 case SYNC_PREF_ASK:
1495 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1495 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1496 if ( lastSync > remoteMod && lastSync > localMod) 1496 if ( lastSync > remoteMod && lastSync > localMod)
1497 return 0; 1497 return 0;
1498 if ( lastSync > remoteMod ) 1498 if ( lastSync > remoteMod )
1499 return 1; 1499 return 1;
1500 if ( lastSync > localMod ) 1500 if ( lastSync > localMod )
1501 return 2; 1501 return 2;
1502 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1502 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1503 localIsNew = localMod >= remoteMod; 1503 localIsNew = localMod >= remoteMod;
1504 if ( localIsNew ) 1504 if ( localIsNew )
1505 getEventViewerDialog()->setColorMode( 1 ); 1505 getEventViewerDialog()->setColorMode( 1 );
1506 else 1506 else
1507 getEventViewerDialog()->setColorMode( 2 ); 1507 getEventViewerDialog()->setColorMode( 2 );
1508 getEventViewerDialog()->setIncidence(local); 1508 getEventViewerDialog()->setIncidence(local);
1509 if ( localIsNew ) 1509 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 2 ); 1510 getEventViewerDialog()->setColorMode( 2 );
1511 else 1511 else
1512 getEventViewerDialog()->setColorMode( 1 ); 1512 getEventViewerDialog()->setColorMode( 1 );
1513 getEventViewerDialog()->addIncidence(remote); 1513 getEventViewerDialog()->addIncidence(remote);
1514 getEventViewerDialog()->setColorMode( 0 ); 1514 getEventViewerDialog()->setColorMode( 0 );
1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1517 getEventViewerDialog()->showMe(); 1517 getEventViewerDialog()->showMe();
1518 result = getEventViewerDialog()->executeS( localIsNew ); 1518 result = getEventViewerDialog()->executeS( localIsNew );
1519 return result; 1519 return result;
1520 1520
1521 break; 1521 break;
1522 case SYNC_PREF_FORCE_LOCAL: 1522 case SYNC_PREF_FORCE_LOCAL:
1523 return 1; 1523 return 1;
1524 break; 1524 break;
1525 case SYNC_PREF_FORCE_REMOTE: 1525 case SYNC_PREF_FORCE_REMOTE:
1526 return 2; 1526 return 2;
1527 break; 1527 break;
1528 1528
1529 default: 1529 default:
1530 // SYNC_PREF_TAKE_BOTH not implemented 1530 // SYNC_PREF_TAKE_BOTH not implemented
1531 break; 1531 break;
1532 } 1532 }
1533 return 0; 1533 return 0;
1534} 1534}
1535Event* CalendarView::getLastSyncEvent() 1535Event* CalendarView::getLastSyncEvent()
1536{ 1536{
1537 Event* lse; 1537 Event* lse;
1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1540 if (!lse) { 1540 if (!lse) {
1541 lse = new Event(); 1541 lse = new Event();
1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1543 QString sum = ""; 1543 QString sum = "";
1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1545 sum = "E: "; 1545 sum = "E: ";
1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1547 lse->setDtStart( mLastCalendarSync ); 1547 lse->setDtStart( mLastCalendarSync );
1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1549 lse->setCategories( i18n("SyncEvent") ); 1549 lse->setCategories( i18n("SyncEvent") );
1550 lse->setReadOnly( true ); 1550 lse->setReadOnly( true );
1551 mCalendar->addEvent( lse ); 1551 mCalendar->addEvent( lse );
1552 } 1552 }
1553 1553
1554 return lse; 1554 return lse;
1555 1555
1556} 1556}
1557 1557
1558// we check, if the to delete event has a id for a profile 1558// we check, if the to delete event has a id for a profile
1559// if yes, we set this id in the profile to delete 1559// if yes, we set this id in the profile to delete
1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1561{ 1561{
1562 if ( lastSync.count() == 0 ) { 1562 if ( lastSync.count() == 0 ) {
1563 //qDebug(" lastSync.count() == 0"); 1563 //qDebug(" lastSync.count() == 0");
1564 return; 1564 return;
1565 } 1565 }
1566 if ( toDelete->typeID() == journalID ) 1566 if ( toDelete->typeID() == journalID )
1567 return; 1567 return;
1568 1568
1569 Event* eve = lastSync.first(); 1569 Event* eve = lastSync.first();
1570 1570
1571 while ( eve ) { 1571 while ( eve ) {
1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1573 if ( !id.isEmpty() ) { 1573 if ( !id.isEmpty() ) {
1574 QString des = eve->description(); 1574 QString des = eve->description();
1575 QString pref = "e"; 1575 QString pref = "e";
1576 if ( toDelete->typeID() == todoID ) 1576 if ( toDelete->typeID() == todoID )
1577 pref = "t"; 1577 pref = "t";
1578 des += pref+ id + ","; 1578 des += pref+ id + ",";
1579 eve->setReadOnly( false ); 1579 eve->setReadOnly( false );
1580 eve->setDescription( des ); 1580 eve->setDescription( des );
1581 //qDebug("setdes %s ", des.latin1()); 1581 //qDebug("setdes %s ", des.latin1());
1582 eve->setReadOnly( true ); 1582 eve->setReadOnly( true );
1583 } 1583 }
1584 eve = lastSync.next(); 1584 eve = lastSync.next();
1585 } 1585 }
1586 1586
1587} 1587}
1588void CalendarView::checkExternalId( Incidence * inc ) 1588void CalendarView::checkExternalId( Incidence * inc )
1589{ 1589{
1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1591 checkExternSyncEvent( lastSync, inc ); 1591 checkExternSyncEvent( lastSync, inc );
1592 1592
1593} 1593}
1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1595{ 1595{
1596 bool syncOK = true; 1596 bool syncOK = true;
1597 int addedEvent = 0; 1597 int addedEvent = 0;
1598 int addedEventR = 0; 1598 int addedEventR = 0;
1599 int deletedEventR = 0; 1599 int deletedEventR = 0;
1600 int deletedEventL = 0; 1600 int deletedEventL = 0;
1601 int changedLocal = 0; 1601 int changedLocal = 0;
1602 int changedRemote = 0; 1602 int changedRemote = 0;
1603 int filteredIN = 0; 1603 int filteredIN = 0;
1604 int filteredOUT = 0; 1604 int filteredOUT = 0;
1605 //QPtrList<Event> el = local->rawEvents(); 1605 //QPtrList<Event> el = local->rawEvents();
1606 Event* eventR; 1606 Event* eventR;
1607 QString uid; 1607 QString uid;
1608 int take; 1608 int take;
1609 Event* eventRSync; 1609 Event* eventRSync;
1610 Event* eventLSync; 1610 Event* eventLSync;
1611 clearAllViews(); 1611 clearAllViews();
1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1614 bool fullDateRange = false; 1614 bool fullDateRange = false;
1615 local->resetTempSyncStat(); 1615 local->resetTempSyncStat();
1616 mLastCalendarSync = QDateTime::currentDateTime(); 1616 mLastCalendarSync = QDateTime::currentDateTime();
1617 if ( mSyncManager->syncWithDesktop() ) { 1617 if ( mSyncManager->syncWithDesktop() ) {
1618 remote->resetPilotStat(1); 1618 remote->resetPilotStat(1);
1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1622 } else { 1622 } else {
1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1624 } 1624 }
1625 } 1625 }
1626 QDateTime modifiedCalendar = mLastCalendarSync; 1626 QDateTime modifiedCalendar = mLastCalendarSync;
1627 eventLSync = getLastSyncEvent(); 1627 eventLSync = getLastSyncEvent();
1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1629 if ( eventR ) { 1629 if ( eventR ) {
1630 qDebug("last-syncEvent on remote found "); 1630 qDebug("last-syncEvent on remote found ");
1631 eventRSync = (Event*) eventR->clone(); 1631 eventRSync = (Event*) eventR->clone();
1632 remote->deleteEvent(eventR ); 1632 remote->deleteEvent(eventR );
1633 1633
1634 } else { 1634 } else {
1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1636 eventRSync = (Event*)eventLSync->clone(); 1636 eventRSync = (Event*)eventLSync->clone();
1637 } else { 1637 } else {
1638 fullDateRange = true; 1638 fullDateRange = true;
1639 eventRSync = new Event(); 1639 eventRSync = new Event();
1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1642 eventRSync->setDtStart( mLastCalendarSync ); 1642 eventRSync->setDtStart( mLastCalendarSync );
1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1644 eventRSync->setCategories( i18n("SyncEvent") ); 1644 eventRSync->setCategories( i18n("SyncEvent") );
1645 } 1645 }
1646 } 1646 }
1647 if ( eventLSync->dtStart() == mLastCalendarSync ) 1647 if ( eventLSync->dtStart() == mLastCalendarSync )
1648 fullDateRange = true; 1648 fullDateRange = true;
1649 1649
1650 if ( ! fullDateRange ) { 1650 if ( ! fullDateRange ) {
1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1652 1652
1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1655 fullDateRange = true; 1655 fullDateRange = true;
1656 } 1656 }
1657 } 1657 }
1658 if ( mSyncManager->syncWithDesktop() ) { 1658 if ( mSyncManager->syncWithDesktop() ) {
1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1660 } 1660 }
1661 if ( fullDateRange ) 1661 if ( fullDateRange )
1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1663 else 1663 else
1664 mLastCalendarSync = eventLSync->dtStart(); 1664 mLastCalendarSync = eventLSync->dtStart();
1665 // for resyncing if own file has changed 1665 // for resyncing if own file has changed
1666 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1666 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1667 mLastCalendarSync = loadedFileVersion; 1667 mLastCalendarSync = loadedFileVersion;
1668 //qDebug("setting mLastCalendarSync "); 1668 //qDebug("setting mLastCalendarSync ");
1669 } 1669 }
1670 //qDebug("*************************** "); 1670 //qDebug("*************************** ");
1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1672 QPtrList<Incidence> er = remote->rawIncidences(); 1672 QPtrList<Incidence> er = remote->rawIncidences();
1673 Incidence* inR = er.first(); 1673 Incidence* inR = er.first();
1674 Incidence* inL; 1674 Incidence* inL;
1675 QProgressBar bar( er.count(),0 ); 1675 QProgressBar bar( er.count(),0 );
1676 bar.setCaption (i18n("Syncing - close to abort!") ); 1676 bar.setCaption (i18n("Syncing - close to abort!") );
1677 1677
1678 // ************** setting up filter ************* 1678 // ************** setting up filter *************
1679 CalFilter *filterIN = 0; 1679 CalFilter *filterIN = 0;
1680 CalFilter *filterOUT = 0; 1680 CalFilter *filterOUT = 0;
1681 CalFilter *filter = mFilters.first(); 1681 CalFilter *filter = mFilters.first();
1682 while(filter) { 1682 while(filter) {
1683 if ( filter->name() == mSyncManager->mFilterInCal ) 1683 if ( filter->name() == mSyncManager->mFilterInCal )
1684 filterIN = filter; 1684 filterIN = filter;
1685 if ( filter->name() == mSyncManager->mFilterOutCal ) 1685 if ( filter->name() == mSyncManager->mFilterOutCal )
1686 filterOUT = filter; 1686 filterOUT = filter;
1687 filter = mFilters.next(); 1687 filter = mFilters.next();
1688 } 1688 }
1689 int w = 300; 1689 int w = 300;
1690 if ( QApplication::desktop()->width() < 320 ) 1690 if ( QApplication::desktop()->width() < 320 )
1691 w = 220; 1691 w = 220;
1692 int h = bar.sizeHint().height() ; 1692 int h = bar.sizeHint().height() ;
1693 int dw = QApplication::desktop()->width(); 1693 int dw = QApplication::desktop()->width();
1694 int dh = QApplication::desktop()->height(); 1694 int dh = QApplication::desktop()->height();
1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1696 bar.show(); 1696 bar.show();
1697 int modulo = (er.count()/10)+1; 1697 int modulo = (er.count()/10)+1;
1698 int incCounter = 0; 1698 int incCounter = 0;
1699 while ( inR ) { 1699 while ( inR ) {
1700 if ( ! bar.isVisible() ) 1700 if ( ! bar.isVisible() )
1701 return false; 1701 return false;
1702 if ( incCounter % modulo == 0 ) 1702 if ( incCounter % modulo == 0 )
1703 bar.setProgress( incCounter ); 1703 bar.setProgress( incCounter );
1704 ++incCounter; 1704 ++incCounter;
1705 uid = inR->uid(); 1705 uid = inR->uid();
1706 bool skipIncidence = false; 1706 bool skipIncidence = false;
1707 if ( uid.left(15) == QString("last-syncEvent-") ) 1707 if ( uid.left(15) == QString("last-syncEvent-") )
1708 skipIncidence = true; 1708 skipIncidence = true;
1709 QString idS; 1709 QString idS;
1710 qApp->processEvents(); 1710 qApp->processEvents();
1711 if ( !skipIncidence ) { 1711 if ( !skipIncidence ) {
1712 inL = local->incidenceForUid( uid , false ); 1712 inL = local->incidenceForUid( uid , false );
1713 if ( inL ) { // maybe conflict - same uid in both calendars 1713 if ( inL ) { // maybe conflict - same uid in both calendars
1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1715 //qDebug("take %d %s ", take, inL->summary().latin1()); 1715 //qDebug("take %d %s ", take, inL->summary().latin1());
1716 if ( take == 3 ) 1716 if ( take == 3 )
1717 return false; 1717 return false;
1718 if ( take == 1 ) {// take local ********************** 1718 if ( take == 1 ) {// take local **********************
1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1721 else 1721 else
1722 idS = inR->IDStr(); 1722 idS = inR->IDStr();
1723 int calID = inR->calID(); 1723 int calID = inR->calID();
1724 remote->deleteIncidence( inR ); 1724 remote->deleteIncidence( inR );
1725 inR = inL->clone(); 1725 inR = inL->clone();
1726 inR->setCalID( calID ); 1726 inR->setCalID( calID );
1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1729 inR->setIDStr( idS ); 1729 inR->setIDStr( idS );
1730 remote->addIncidence( inR ); 1730 remote->addIncidence( inR );
1731 if ( mSyncManager->syncWithDesktop() ) 1731 if ( mSyncManager->syncWithDesktop() )
1732 inR->setPilotId( 2 ); 1732 inR->setPilotId( 2 );
1733 ++changedRemote; 1733 ++changedRemote;
1734 } else {// take remote ********************** 1734 } else {// take remote **********************
1735 if ( !inL->isReadOnly() ) { 1735 if ( !inL->isReadOnly() ) {
1736 idS = inL->IDStr(); 1736 idS = inL->IDStr();
1737 int pid = inL->pilotId(); 1737 int pid = inL->pilotId();
1738 int calID = inL->calID(); 1738 int calID = inL->calID();
1739 local->deleteIncidence( inL ); 1739 local->deleteIncidence( inL );
1740 inL = inR->clone(); 1740 inL = inR->clone();
1741 inL->setCalID( calID ); 1741 inL->setCalID( calID );
1742 if ( mSyncManager->syncWithDesktop() ) 1742 if ( mSyncManager->syncWithDesktop() )
1743 inL->setPilotId( pid ); 1743 inL->setPilotId( pid );
1744 inL->setIDStr( idS ); 1744 inL->setIDStr( idS );
1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1748 } 1748 }
1749 local->addIncidence( inL ); 1749 local->addIncidence( inL );
1750 ++changedLocal; 1750 ++changedLocal;
1751 } 1751 }
1752 } 1752 }
1753 } 1753 }
1754 } else { // no conflict ********** add or delete remote 1754 } else { // no conflict ********** add or delete remote
1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1757 QString des = eventLSync->description(); 1757 QString des = eventLSync->description();
1758 QString pref = "e"; 1758 QString pref = "e";
1759 if ( inR->typeID() == todoID ) 1759 if ( inR->typeID() == todoID )
1760 pref = "t"; 1760 pref = "t";
1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1763 //remote->deleteIncidence( inR ); 1763 //remote->deleteIncidence( inR );
1764 ++deletedEventR; 1764 ++deletedEventR;
1765 } else { 1765 } else {
1766 inR->setLastModified( modifiedCalendar ); 1766 inR->setLastModified( modifiedCalendar );
1767 inL = inR->clone(); 1767 inL = inR->clone();
1768 inL->setIDStr( ":" ); 1768 inL->setIDStr( ":" );
1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1771 1771
1772 inL->setCalID( 0 );// add to default cal 1772 inL->setCalID( 0 );// add to default cal
1773 local->addIncidence( inL ); 1773 local->addIncidence( inL );
1774 ++addedEvent; 1774 ++addedEvent;
1775 1775
1776 } 1776 }
1777 } else { 1777 } else {
1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1779 inR->setLastModified( modifiedCalendar ); 1779 inR->setLastModified( modifiedCalendar );
1780 inL = inR->clone(); 1780 inL = inR->clone();
1781 inL->setIDStr( ":" ); 1781 inL->setIDStr( ":" );
1782 inL->setCalID( 0 );// add to default cal 1782 inL->setCalID( 0 );// add to default cal
1783 local->addIncidence( inL ); 1783 local->addIncidence( inL );
1784 ++addedEvent; 1784 ++addedEvent;
1785 1785
1786 } else { 1786 } else {
1787 checkExternSyncEvent(eventRSyncSharp, inR); 1787 checkExternSyncEvent(eventRSyncSharp, inR);
1788 remote->deleteIncidence( inR ); 1788 remote->deleteIncidence( inR );
1789 ++deletedEventR; 1789 ++deletedEventR;
1790 } 1790 }
1791 } 1791 }
1792 } else { 1792 } else {
1793 ++filteredIN; 1793 ++filteredIN;
1794 } 1794 }
1795 } 1795 }
1796 } 1796 }
1797 inR = er.next(); 1797 inR = er.next();
1798 } 1798 }
1799 QPtrList<Incidence> el = local->rawIncidences(); 1799 QPtrList<Incidence> el = local->rawIncidences();
1800 inL = el.first(); 1800 inL = el.first();
1801 modulo = (el.count()/10)+1; 1801 modulo = (el.count()/10)+1;
1802 bar.setCaption (i18n("Add / remove events") ); 1802 bar.setCaption (i18n("Add / remove events") );
1803 bar.setTotalSteps ( el.count() ) ; 1803 bar.setTotalSteps ( el.count() ) ;
1804 bar.show(); 1804 bar.show();
1805 incCounter = 0; 1805 incCounter = 0;
1806 1806
1807 while ( inL ) { 1807 while ( inL ) {
1808 1808
1809 qApp->processEvents(); 1809 qApp->processEvents();
1810 if ( ! bar.isVisible() ) 1810 if ( ! bar.isVisible() )
1811 return false; 1811 return false;
1812 if ( incCounter % modulo == 0 ) 1812 if ( incCounter % modulo == 0 )
1813 bar.setProgress( incCounter ); 1813 bar.setProgress( incCounter );
1814 ++incCounter; 1814 ++incCounter;
1815 uid = inL->uid(); 1815 uid = inL->uid();
1816 bool skipIncidence = false; 1816 bool skipIncidence = false;
1817 if ( uid.left(15) == QString("last-syncEvent-") ) 1817 if ( uid.left(15) == QString("last-syncEvent-") )
1818 skipIncidence = true; 1818 skipIncidence = true;
1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1820 skipIncidence = true; 1820 skipIncidence = true;
1821 if ( !skipIncidence ) { 1821 if ( !skipIncidence ) {
1822 inR = remote->incidenceForUid( uid , true ); 1822 inR = remote->incidenceForUid( uid , true );
1823 if ( ! inR ) { 1823 if ( ! inR ) {
1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1825 // no conflict ********** add or delete local 1825 // no conflict ********** add or delete local
1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1828 checkExternSyncEvent(eventLSyncSharp, inL); 1828 checkExternSyncEvent(eventLSyncSharp, inL);
1829 local->deleteIncidence( inL ); 1829 local->deleteIncidence( inL );
1830 ++deletedEventL; 1830 ++deletedEventL;
1831 } else { 1831 } else {
1832 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1832 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1833 inL->removeID(mCurrentSyncDevice ); 1833 inL->removeID(mCurrentSyncDevice );
1834 ++addedEventR; 1834 ++addedEventR;
1835 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1835 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1836 inL->setLastModified( modifiedCalendar ); 1836 inL->setLastModified( modifiedCalendar );
1837 inR = inL->clone(); 1837 inR = inL->clone();
1838 inR->setIDStr( ":" ); 1838 inR->setIDStr( ":" );
1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1840 inR->setCalID( 0 );// add to default cal 1840 inR->setCalID( 0 );// add to default cal
1841 remote->addIncidence( inR ); 1841 remote->addIncidence( inR );
1842 } 1842 }
1843 } 1843 }
1844 } else { 1844 } else {
1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1846 checkExternSyncEvent(eventLSyncSharp, inL); 1846 checkExternSyncEvent(eventLSyncSharp, inL);
1847 local->deleteIncidence( inL ); 1847 local->deleteIncidence( inL );
1848 ++deletedEventL; 1848 ++deletedEventL;
1849 } else { 1849 } else {
1850 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1850 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1851 ++addedEventR; 1851 ++addedEventR;
1852 inL->setLastModified( modifiedCalendar ); 1852 inL->setLastModified( modifiedCalendar );
1853 inR = inL->clone(); 1853 inR = inL->clone();
1854 inR->setIDStr( ":" ); 1854 inR->setIDStr( ":" );
1855 inR->setCalID( 0 );// add to default cal 1855 inR->setCalID( 0 );// add to default cal
1856 remote->addIncidence( inR ); 1856 remote->addIncidence( inR );
1857 } 1857 }
1858 } 1858 }
1859 } 1859 }
1860 } else { 1860 } else {
1861 ++filteredOUT; 1861 ++filteredOUT;
1862 } 1862 }
1863 } 1863 }
1864 } 1864 }
1865 inL = el.next(); 1865 inL = el.next();
1866 } 1866 }
1867 int delFut = 0; 1867 int delFut = 0;
1868 int remRem = 0; 1868 int remRem = 0;
1869 if ( mSyncManager->mWriteBackInFuture ) { 1869 if ( mSyncManager->mWriteBackInFuture ) {
1870 er = remote->rawIncidences(); 1870 er = remote->rawIncidences();
1871 remRem = er.count(); 1871 remRem = er.count();
1872 inR = er.first(); 1872 inR = er.first();
1873 QDateTime dt; 1873 QDateTime dt;
1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1876 while ( inR ) { 1876 while ( inR ) {
1877 if ( inR->typeID() == todoID ) { 1877 if ( inR->typeID() == todoID ) {
1878 Todo * t = (Todo*)inR; 1878 Todo * t = (Todo*)inR;
1879 if ( t->hasDueDate() ) 1879 if ( t->hasDueDate() )
1880 dt = t->dtDue(); 1880 dt = t->dtDue();
1881 else 1881 else
1882 dt = cur.addSecs( 62 ); 1882 dt = cur.addSecs( 62 );
1883 } 1883 }
1884 else if (inR->typeID() == eventID ) { 1884 else if (inR->typeID() == eventID ) {
1885 bool ok; 1885 bool ok;
1886 dt = inR->getNextOccurence( cur, &ok ); 1886 dt = inR->getNextOccurence( cur, &ok );
1887 if ( !ok ) 1887 if ( !ok )
1888 dt = cur.addSecs( -62 ); 1888 dt = cur.addSecs( -62 );
1889 } 1889 }
1890 else 1890 else
1891 dt = inR->dtStart(); 1891 dt = inR->dtStart();
1892 if ( dt < cur || dt > end ) { 1892 if ( dt < cur || dt > end ) {
1893 remote->deleteIncidence( inR ); 1893 remote->deleteIncidence( inR );
1894 ++delFut; 1894 ++delFut;
1895 } 1895 }
1896 inR = er.next(); 1896 inR = er.next();
1897 } 1897 }
1898 } 1898 }
1899 bar.hide(); 1899 bar.hide();
1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1901 eventLSync->setReadOnly( false ); 1901 eventLSync->setReadOnly( false );
1902 eventLSync->setDtStart( mLastCalendarSync ); 1902 eventLSync->setDtStart( mLastCalendarSync );
1903 eventRSync->setDtStart( mLastCalendarSync ); 1903 eventRSync->setDtStart( mLastCalendarSync );
1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1908 eventLSync->setReadOnly( true ); 1908 eventLSync->setReadOnly( true );
1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1911 remote->addEvent( eventRSync ); 1911 remote->addEvent( eventRSync );
1912 else 1912 else
1913 delete eventRSync; 1913 delete eventRSync;
1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1915 QString mes; 1915 QString mes;
1916 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 ); 1916 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 );
1917 QString delmess; 1917 QString delmess;
1918 if ( delFut ) { 1918 if ( delFut ) {
1919 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); 1919 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);
1920 mes += delmess; 1920 mes += delmess;
1921 } 1921 }
1922 mes = i18n("Local calendar changed!\n") +mes; 1922 mes = i18n("Local calendar changed!\n") +mes;
1923 mCalendar->checkAlarmForIncidence( 0, true ); 1923 mCalendar->checkAlarmForIncidence( 0, true );
1924 qDebug( mes ); 1924 qDebug( mes );
1925 if ( mSyncManager->mShowSyncSummary ) { 1925 if ( mSyncManager->mShowSyncSummary ) {
1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1928 qDebug("KO: WB cancelled "); 1928 qDebug("KO: WB cancelled ");
1929 mSyncManager->mWriteBackFile = false; 1929 mSyncManager->mWriteBackFile = false;
1930 return syncOK; 1930 return syncOK;
1931 } 1931 }
1932 } 1932 }
1933 return syncOK; 1933 return syncOK;
1934} 1934}
1935 1935
1936void CalendarView::setSyncDevice( QString s ) 1936void CalendarView::setSyncDevice( QString s )
1937{ 1937{
1938 mCurrentSyncDevice= s; 1938 mCurrentSyncDevice= s;
1939} 1939}
1940void CalendarView::setSyncName( QString s ) 1940void CalendarView::setSyncName( QString s )
1941{ 1941{
1942 mCurrentSyncName= s; 1942 mCurrentSyncName= s;
1943} 1943}
1944bool CalendarView::syncCalendar(QString filename, int mode) 1944bool CalendarView::syncCalendar(QString filename, int mode)
1945{ 1945{
1946 //qDebug("syncCalendar %s ", filename.latin1()); 1946 //qDebug("syncCalendar %s ", filename.latin1());
1947 mGlobalSyncMode = SYNC_MODE_NORMAL; 1947 mGlobalSyncMode = SYNC_MODE_NORMAL;
1948 CalendarLocal* calendar = new CalendarLocal(); 1948 CalendarLocal* calendar = new CalendarLocal();
1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1950 FileStorage* storage = new FileStorage( calendar ); 1950 FileStorage* storage = new FileStorage( calendar );
1951 bool syncOK = false; 1951 bool syncOK = false;
1952 storage->setFileName( filename ); 1952 storage->setFileName( filename );
1953 // qDebug("loading ... "); 1953 // qDebug("loading ... ");
1954 if ( storage->load() ) { 1954 if ( storage->load() ) {
1955 getEventViewerDialog()->setSyncMode( true ); 1955 getEventViewerDialog()->setSyncMode( true );
1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1957 getEventViewerDialog()->setSyncMode( false ); 1957 getEventViewerDialog()->setSyncMode( false );
1958 if ( syncOK ) { 1958 if ( syncOK ) {
1959 if ( mSyncManager->mWriteBackFile ) 1959 if ( mSyncManager->mWriteBackFile )
1960 { 1960 {
1961 storage->setSaveFormat( new ICalFormat() ); 1961 storage->setSaveFormat( new ICalFormat() );
1962 storage->save(); 1962 storage->save();
1963 } 1963 }
1964 } 1964 }
1965 setModified( true ); 1965 setModified( true );
1966 } 1966 }
1967 delete storage; 1967 delete storage;
1968 delete calendar; 1968 delete calendar;
1969 if ( syncOK ) 1969 if ( syncOK )
1970 updateView(); 1970 updateView();
1971 return syncOK; 1971 return syncOK;
1972} 1972}
1973 1973
1974void CalendarView::syncExternal( int mode ) 1974void CalendarView::syncExternal( int mode )
1975{ 1975{
1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1977 1977
1978 qApp->processEvents(); 1978 qApp->processEvents();
1979 CalendarLocal* calendar = new CalendarLocal(); 1979 CalendarLocal* calendar = new CalendarLocal();
1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1981 bool syncOK = false; 1981 bool syncOK = false;
1982 bool loadSuccess = false; 1982 bool loadSuccess = false;
1983 PhoneFormat* phoneFormat = 0; 1983 PhoneFormat* phoneFormat = 0;
1984 emit tempDisableBR(true); 1984 emit tempDisableBR(true);
1985#ifndef DESKTOP_VERSION 1985#ifndef DESKTOP_VERSION
1986 SharpFormat* sharpFormat = 0; 1986 SharpFormat* sharpFormat = 0;
1987 if ( mode == 0 ) { // sharp 1987 if ( mode == 0 ) { // sharp
1988 sharpFormat = new SharpFormat () ; 1988 sharpFormat = new SharpFormat () ;
1989 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1989 loadSuccess = sharpFormat->load( calendar, mCalendar );
1990 1990
1991 } else 1991 } else
1992#endif 1992#endif
1993 if ( mode == 1 ) { // phone 1993 if ( mode == 1 ) { // phone
1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1995 mSyncManager->mPhoneDevice, 1995 mSyncManager->mPhoneDevice,
1996 mSyncManager->mPhoneConnection, 1996 mSyncManager->mPhoneConnection,
1997 mSyncManager->mPhoneModel); 1997 mSyncManager->mPhoneModel);
1998 loadSuccess = phoneFormat->load( calendar,mCalendar); 1998 loadSuccess = phoneFormat->load( calendar,mCalendar);
1999 1999
2000 } else { 2000 } else {
2001 emit tempDisableBR(false); 2001 emit tempDisableBR(false);
2002 return; 2002 return;
2003 } 2003 }
2004 if ( loadSuccess ) { 2004 if ( loadSuccess ) {
2005 getEventViewerDialog()->setSyncMode( true ); 2005 getEventViewerDialog()->setSyncMode( true );
2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2007 getEventViewerDialog()->setSyncMode( false ); 2007 getEventViewerDialog()->setSyncMode( false );
2008 qApp->processEvents(); 2008 qApp->processEvents();
2009 if ( syncOK ) { 2009 if ( syncOK ) {
2010 if ( mSyncManager->mWriteBackFile ) 2010 if ( mSyncManager->mWriteBackFile )
2011 { 2011 {
2012 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2012 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2013 Incidence* inc = iL.first(); 2013 Incidence* inc = iL.first();
2014 if ( phoneFormat ) { 2014 if ( phoneFormat ) {
2015 while ( inc ) { 2015 while ( inc ) {
2016 inc->removeID(mCurrentSyncDevice); 2016 inc->removeID(mCurrentSyncDevice);
2017 inc = iL.next(); 2017 inc = iL.next();
2018 } 2018 }
2019 } 2019 }
2020#ifndef DESKTOP_VERSION 2020#ifndef DESKTOP_VERSION
2021 if ( sharpFormat ) 2021 if ( sharpFormat )
2022 sharpFormat->save(calendar); 2022 sharpFormat->save(calendar);
2023#endif 2023#endif
2024 if ( phoneFormat ) 2024 if ( phoneFormat )
2025 phoneFormat->save(calendar); 2025 phoneFormat->save(calendar);
2026 iL = calendar->rawIncidences(); 2026 iL = calendar->rawIncidences();
2027 inc = iL.first(); 2027 inc = iL.first();
2028 Incidence* loc; 2028 Incidence* loc;
2029 while ( inc ) { 2029 while ( inc ) {
2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2031 loc = mCalendar->incidence(inc->uid() ); 2031 loc = mCalendar->incidence(inc->uid() );
2032 if ( loc ) { 2032 if ( loc ) {
2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2035 } 2035 }
2036 } 2036 }
2037 inc = iL.next(); 2037 inc = iL.next();
2038 } 2038 }
2039 Incidence* lse = getLastSyncEvent(); 2039 Incidence* lse = getLastSyncEvent();
2040 if ( lse ) { 2040 if ( lse ) {
2041 lse->setReadOnly( false ); 2041 lse->setReadOnly( false );
2042 lse->setDescription( "" ); 2042 lse->setDescription( "" );
2043 lse->setReadOnly( true ); 2043 lse->setReadOnly( true );
2044 } 2044 }
2045 } 2045 }
2046 } else { 2046 } else {
2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2048 } 2048 }
2049 setModified( true ); 2049 setModified( true );
2050 } else { 2050 } else {
2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2053 question, i18n("Ok")) ; 2053 question, i18n("Ok")) ;
2054 2054
2055 } 2055 }
2056 delete calendar; 2056 delete calendar;
2057 updateView(); 2057 updateView();
2058 emit tempDisableBR(false); 2058 emit tempDisableBR(false);
2059 return ;//syncOK; 2059 return ;//syncOK;
2060 2060
2061} 2061}
2062 2062
2063bool CalendarView::importBday() 2063bool CalendarView::importBday()
2064{ 2064{
2065#ifndef KORG_NOKABC 2065#ifndef KORG_NOKABC
2066 2066
2067#ifdef DESKTOP_VERSION 2067#ifdef DESKTOP_VERSION
2068 int curCal = mCalendar->defaultCalendar(); 2068 int curCal = mCalendar->defaultCalendar();
2069 int bd = mCalEditView->getBirtdayID(); 2069 int bd = mCalEditView->getBirtdayID();
2070 if ( bd == 0 ) 2070 if ( bd == 0 )
2071 return false; 2071 return false;
2072 mCalendar->setDefaultCalendar( bd ); 2072 mCalendar->setDefaultCalendar( bd );
2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2074 KABC::AddressBook::Iterator it; 2074 KABC::AddressBook::Iterator it;
2075 int count = 0; 2075 int count = 0;
2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2077 ++count; 2077 ++count;
2078 } 2078 }
2079 QProgressBar bar(count,0 ); 2079 QProgressBar bar(count,0 );
2080 int w = 300; 2080 int w = 300;
2081 if ( QApplication::desktop()->width() < 320 ) 2081 if ( QApplication::desktop()->width() < 320 )
2082 w = 220; 2082 w = 220;
2083 int h = bar.sizeHint().height() ; 2083 int h = bar.sizeHint().height() ;
2084 int dw = QApplication::desktop()->width(); 2084 int dw = QApplication::desktop()->width();
2085 int dh = QApplication::desktop()->height(); 2085 int dh = QApplication::desktop()->height();
2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2087 bar.show(); 2087 bar.show();
2088 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2088 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2089 qApp->processEvents(); 2089 qApp->processEvents();
2090 count = 0; 2090 count = 0;
2091 int addCount = 0; 2091 int addCount = 0;
2092 KCal::Attendee* a = 0; 2092 KCal::Attendee* a = 0;
2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2094 if ( ! bar.isVisible() ) 2094 if ( ! bar.isVisible() )
2095 return false; 2095 return false;
2096 bar.setProgress( count++ ); 2096 bar.setProgress( count++ );
2097 qApp->processEvents(); 2097 qApp->processEvents();
2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2099 if ( (*it).birthday().date().isValid() ){ 2099 if ( (*it).birthday().date().isValid() ){
2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2102 ++addCount; 2102 ++addCount;
2103 } 2103 }
2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2105 if ( anni.isValid() ){ 2105 if ( anni.isValid() ){
2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2108 ++addCount; 2108 ++addCount;
2109 } 2109 }
2110 } 2110 }
2111 mCalendar->setDefaultCalendar( curCal ); 2111 mCalendar->setDefaultCalendar( curCal );
2112 updateView(); 2112 updateView();
2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2114#else //DESKTOP_VERSION 2114#else //DESKTOP_VERSION
2115 2115
2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2117 // the result should now arrive through method insertBirthdays 2117 // the result should now arrive through method insertBirthdays
2118 2118
2119#endif //DESKTOP_VERSION 2119#endif //DESKTOP_VERSION
2120 2120
2121#endif //KORG_NOKABC 2121#endif //KORG_NOKABC
2122 2122
2123 2123
2124 return true; 2124 return true;
2125} 2125}
2126 2126
2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2129 const QStringList& anniversaryList, const QStringList& realNameList, 2129 const QStringList& anniversaryList, const QStringList& realNameList,
2130 const QStringList& emailList, const QStringList& assembledNameList, 2130 const QStringList& emailList, const QStringList& assembledNameList,
2131 const QStringList& uidList) 2131 const QStringList& uidList)
2132{ 2132{
2133 2133
2134 //qDebug("KO::CalendarView::insertBirthdays"); 2134 //qDebug("KO::CalendarView::insertBirthdays");
2135 if (uid == this->name()) 2135 if (uid == this->name())
2136 { 2136 {
2137 int curCal = mCalendar->defaultCalendar(); 2137 int curCal = mCalendar->defaultCalendar();
2138 int bd = mCalEditView->getBirtdayID(); 2138 int bd = mCalEditView->getBirtdayID();
2139 if ( bd == 0 ) 2139 if ( bd == 0 )
2140 return; 2140 return;
2141 mCalendar->setDefaultCalendar( bd ); 2141 mCalendar->setDefaultCalendar( bd );
2142 2142
2143 2143
2144 int count = birthdayList.count(); 2144 int count = birthdayList.count();
2145 int addCount = 0; 2145 int addCount = 0;
2146 KCal::Attendee* a = 0; 2146 KCal::Attendee* a = 0;
2147 2147
2148 //qDebug("CalView 1 %i", count); 2148 //qDebug("CalView 1 %i", count);
2149 2149
2150 QProgressBar bar(count,0 ); 2150 QProgressBar bar(count,0 );
2151 int w = 300; 2151 int w = 300;
2152 if ( QApplication::desktop()->width() < 320 ) 2152 if ( QApplication::desktop()->width() < 320 )
2153 w = 220; 2153 w = 220;
2154 int h = bar.sizeHint().height() ; 2154 int h = bar.sizeHint().height() ;
2155 int dw = QApplication::desktop()->width(); 2155 int dw = QApplication::desktop()->width();
2156 int dh = QApplication::desktop()->height(); 2156 int dh = QApplication::desktop()->height();
2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2158 bar.show(); 2158 bar.show();
2159 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2159 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2160 qApp->processEvents(); 2160 qApp->processEvents();
2161 2161
2162 QDate birthday; 2162 QDate birthday;
2163 QDate anniversary; 2163 QDate anniversary;
2164 QString realName; 2164 QString realName;
2165 QString email; 2165 QString email;
2166 QString assembledName; 2166 QString assembledName;
2167 QString uid; 2167 QString uid;
2168 bool ok = true; 2168 bool ok = true;
2169 for ( int i = 0; i < count; i++) 2169 for ( int i = 0; i < count; i++)
2170 { 2170 {
2171 if ( ! bar.isVisible() ) 2171 if ( ! bar.isVisible() )
2172 return; 2172 return;
2173 bar.setProgress( i ); 2173 bar.setProgress( i );
2174 qApp->processEvents(); 2174 qApp->processEvents();
2175 2175
2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2177 if (!ok) { 2177 if (!ok) {
2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2179 } 2179 }
2180 2180
2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2182 if (!ok) { 2182 if (!ok) {
2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2184 } 2184 }
2185 realName = realNameList[i]; 2185 realName = realNameList[i];
2186 email = emailList[i]; 2186 email = emailList[i];
2187 assembledName = assembledNameList[i]; 2187 assembledName = assembledNameList[i];
2188 uid = uidList[i]; 2188 uid = uidList[i];
2189 //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() ); 2189 //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() );
2190 2190
2191 if ( birthday.isValid() ){ 2191 if ( birthday.isValid() ){
2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2193 KCal::Attendee::ReqParticipant,uid) ; 2193 KCal::Attendee::ReqParticipant,uid) ;
2194 if ( addAnniversary( birthday, assembledName, a, true ) ) 2194 if ( addAnniversary( birthday, assembledName, a, true ) )
2195 ++addCount; 2195 ++addCount;
2196 } 2196 }
2197 2197
2198 if ( anniversary.isValid() ){ 2198 if ( anniversary.isValid() ){
2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2200 KCal::Attendee::ReqParticipant,uid) ; 2200 KCal::Attendee::ReqParticipant,uid) ;
2201 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2201 if ( addAnniversary( anniversary, assembledName, a, false ) )
2202 ++addCount; 2202 ++addCount;
2203 } 2203 }
2204 } 2204 }
2205 2205
2206 mCalendar->setDefaultCalendar( curCal ); 2206 mCalendar->setDefaultCalendar( curCal );
2207 updateView(); 2207 updateView();
2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2209 2209
2210 } 2210 }
2211 2211
2212} 2212}
2213 2213
2214 2214
2215 2215
2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2217{ 2217{
2218 //qDebug("addAnni "); 2218 //qDebug("addAnni ");
2219 Event * ev = new Event(); 2219 Event * ev = new Event();
2220 ev->setOrganizer(KOPrefs::instance()->email()); 2220 ev->setOrganizer(KOPrefs::instance()->email());
2221 if ( a ) { 2221 if ( a ) {
2222 ev->addAttendee( a ); 2222 ev->addAttendee( a );
2223 } 2223 }
2224 QString kind; 2224 QString kind;
2225 if ( birthday ) { 2225 if ( birthday ) {
2226 kind = i18n( "Birthday" ); 2226 kind = i18n( "Birthday" );
2227 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2227 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2228 } 2228 }
2229 else { 2229 else {
2230 kind = i18n( "Anniversary" ); 2230 kind = i18n( "Anniversary" );
2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2232 } 2232 }
2233 ev->setCategories( kind ); 2233 ev->setCategories( kind );
2234 ev->setDtStart( QDateTime(date) ); 2234 ev->setDtStart( QDateTime(date) );
2235 ev->setDtEnd( QDateTime(date) ); 2235 ev->setDtEnd( QDateTime(date) );
2236 ev->setFloats( true ); 2236 ev->setFloats( true );
2237 Recurrence * rec = ev->recurrence(); 2237 Recurrence * rec = ev->recurrence();
2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2239 rec->addYearlyNum( date.month() ); 2239 rec->addYearlyNum( date.month() );
2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2241 delete ev; 2241 delete ev;
2242 return false; 2242 return false;
2243 } 2243 }
2244 return true; 2244 return true;
2245 2245
2246} 2246}
2247bool CalendarView::importQtopia( const QString &categories, 2247bool CalendarView::importQtopia( const QString &categories,
2248 const QString &datebook, 2248 const QString &datebook,
2249 const QString &todolist ) 2249 const QString &todolist )
2250{ 2250{
2251 2251
2252 QtopiaFormat qtopiaFormat; 2252 QtopiaFormat qtopiaFormat;
2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2257 2257
2258 updateView(); 2258 updateView();
2259 return true; 2259 return true;
2260 2260
2261#if 0 2261#if 0
2262 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2262 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2263 mCurrentSyncDevice = "qtopia-XML"; 2263 mCurrentSyncDevice = "qtopia-XML";
2264 if ( mSyncManager->mAskForPreferences ) 2264 if ( mSyncManager->mAskForPreferences )
2265 edit_sync_options(); 2265 edit_sync_options();
2266 qApp->processEvents(); 2266 qApp->processEvents();
2267 CalendarLocal* calendar = new CalendarLocal(); 2267 CalendarLocal* calendar = new CalendarLocal();
2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2269 bool syncOK = false; 2269 bool syncOK = false;
2270 QtopiaFormat qtopiaFormat; 2270 QtopiaFormat qtopiaFormat;
2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2272 bool loadOk = true; 2272 bool loadOk = true;
2273 if ( !categories.isEmpty() ) 2273 if ( !categories.isEmpty() )
2274 loadOk = qtopiaFormat.load( calendar, categories ); 2274 loadOk = qtopiaFormat.load( calendar, categories );
2275 if ( loadOk && !datebook.isEmpty() ) 2275 if ( loadOk && !datebook.isEmpty() )
2276 loadOk = qtopiaFormat.load( calendar, datebook ); 2276 loadOk = qtopiaFormat.load( calendar, datebook );
2277 if ( loadOk && !todolist.isEmpty() ) 2277 if ( loadOk && !todolist.isEmpty() )
2278 loadOk = qtopiaFormat.load( calendar, todolist ); 2278 loadOk = qtopiaFormat.load( calendar, todolist );
2279 2279
2280 if ( loadOk ) { 2280 if ( loadOk ) {
2281 getEventViewerDialog()->setSyncMode( true ); 2281 getEventViewerDialog()->setSyncMode( true );
2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2283 getEventViewerDialog()->setSyncMode( false ); 2283 getEventViewerDialog()->setSyncMode( false );
2284 qApp->processEvents(); 2284 qApp->processEvents();
2285 if ( syncOK ) { 2285 if ( syncOK ) {
2286 if ( mSyncManager->mWriteBackFile ) 2286 if ( mSyncManager->mWriteBackFile )
2287 { 2287 {
2288 // write back XML file 2288 // write back XML file
2289 2289
2290 } 2290 }
2291 setModified( true ); 2291 setModified( true );
2292 } 2292 }
2293 } else { 2293 } else {
2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2296 question, i18n("Ok")) ; 2296 question, i18n("Ok")) ;
2297 } 2297 }
2298 delete calendar; 2298 delete calendar;
2299 updateView(); 2299 updateView();
2300 return syncOK; 2300 return syncOK;
2301 2301
2302 2302
2303#endif 2303#endif
2304 2304
2305} 2305}
2306 2306
2307void CalendarView::setSyncEventsReadOnly() 2307void CalendarView::setSyncEventsReadOnly()
2308{ 2308{
2309 mCalendar->setSyncEventsReadOnly(); 2309 mCalendar->setSyncEventsReadOnly();
2310} 2310}
2311 2311
2312bool CalendarView::loadCalendars() 2312bool CalendarView::loadCalendars()
2313{ 2313{
2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2315 KopiCalendarFile * cal = calendars.first(); 2315 KopiCalendarFile * cal = calendars.first();
2316 mCalendar->setDefaultCalendar( 1 ); 2316 mCalendar->setDefaultCalendar( 1 );
2317 openCalendar( MainWindow::defaultFileName(), false ); 2317 openCalendar( MainWindow::defaultFileName(), false );
2318 cal = calendars.next(); 2318 cal = calendars.next();
2319 while ( cal ) { 2319 while ( cal ) {
2320 addCalendar( cal ); 2320 addCalendar( cal );
2321 cal = calendars.next(); 2321 cal = calendars.next();
2322 } 2322 }
2323 restoreCalendarSettings(); 2323 restoreCalendarSettings();
2324 return true; 2324 return true;
2325} 2325}
2326bool CalendarView::restoreCalendarSettings() 2326bool CalendarView::restoreCalendarSettings()
2327{ 2327{
2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2329 KopiCalendarFile * cal = calendars.first(); 2329 KopiCalendarFile * cal = calendars.first();
2330 while ( cal ) { 2330 while ( cal ) {
2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2334 if ( cal->isStandard ) 2334 if ( cal->isStandard )
2335 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2335 mCalendar->setDefaultCalendar( cal->mCalNumber );
2336 cal = calendars.next(); 2336 cal = calendars.next();
2337 } 2337 }
2338 setSyncEventsReadOnly(); 2338 setSyncEventsReadOnly();
2339 mCalendar->reInitAlarmSettings(); 2339 mCalendar->reInitAlarmSettings();
2340 updateUnmanagedViews(); 2340 updateUnmanagedViews();
2341 updateView(); 2341 updateView();
2342 return true; 2342 return true;
2343} 2343}
2344void CalendarView::addCalendarId( int id ) 2344void CalendarView::addCalendarId( int id )
2345{ 2345{
2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2347 if ( cal ) 2347 if ( cal )
2348 addCalendar( cal ); 2348 addCalendar( cal );
2349} 2349}
2350bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2350bool CalendarView::addCalendar( KopiCalendarFile * cal )
2351{ 2351{
2352 cal->mErrorOnLoad = false; 2352 cal->mErrorOnLoad = false;
2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2354 cal->mLoadDt = QDateTime::currentDateTime(); 2354 cal->mLoadDt = QDateTime::currentDateTime();
2355 return true; 2355 return true;
2356 } 2356 }
2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2358 cal->mErrorOnLoad = true; 2358 cal->mErrorOnLoad = true;
2359 return false; 2359 return false;
2360} 2360}
2361bool CalendarView::openCalendar(QString filename, bool merge) 2361bool CalendarView::openCalendar(QString filename, bool merge)
2362{ 2362{
2363 2363
2364 if (filename.isEmpty()) { 2364 if (filename.isEmpty()) {
2365 return false; 2365 return false;
2366 } 2366 }
2367 2367
2368 if (!QFile::exists(filename)) { 2368 if (!QFile::exists(filename)) {
2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2370 return false; 2370 return false;
2371 } 2371 }
2372 2372
2373 globalFlagBlockAgenda = 1; 2373 globalFlagBlockAgenda = 1;
2374 clearAllViews(); 2374 clearAllViews();
2375 if (!merge) { 2375 if (!merge) {
2376 mViewManager->setDocumentId( filename ); 2376 mViewManager->setDocumentId( filename );
2377 mCalendar->close(); 2377 mCalendar->close();
2378 } 2378 }
2379 mStorage->setFileName( filename ); 2379 mStorage->setFileName( filename );
2380 2380
2381 if ( mStorage->load() ) { 2381 if ( mStorage->load() ) {
2382 if ( merge ) ;//setModified( true ); 2382 if ( merge ) ;//setModified( true );
2383 else { 2383 else {
2384 //setModified( true ); 2384 //setModified( true );
2385 mViewManager->setDocumentId( filename ); 2385 mViewManager->setDocumentId( filename );
2386 mDialogManager->setDocumentId( filename ); 2386 mDialogManager->setDocumentId( filename );
2387 mTodoList->setDocumentId( filename ); 2387 mTodoList->setDocumentId( filename );
2388 } 2388 }
2389 globalFlagBlockAgenda = 2; 2389 globalFlagBlockAgenda = 2;
2390 // if ( getLastSyncEvent() ) 2390 // if ( getLastSyncEvent() )
2391 // getLastSyncEvent()->setReadOnly( true ); 2391 // getLastSyncEvent()->setReadOnly( true );
2392 mCalendar->reInitAlarmSettings(); 2392 mCalendar->reInitAlarmSettings();
2393 setSyncEventsReadOnly(); 2393 setSyncEventsReadOnly();
2394 //updateUnmanagedViews(); 2394 //updateUnmanagedViews();
2395 //updateView(); 2395 //updateView();
2396 if ( filename != MainWindow::defaultFileName() ) { 2396 if ( filename != MainWindow::defaultFileName() ) {
2397 saveCalendar( MainWindow::defaultFileName() ); 2397 saveCalendar( MainWindow::defaultFileName() );
2398 } else { 2398 } else {
2399 QFileInfo finf ( MainWindow::defaultFileName()); 2399 QFileInfo finf ( MainWindow::defaultFileName());
2400 if ( finf.exists() ) { 2400 if ( finf.exists() ) {
2401 setLoadedFileVersion( finf.lastModified () ); 2401 setLoadedFileVersion( finf.lastModified () );
2402 } 2402 }
2403 } 2403 }
2404 return true; 2404 return true;
2405 } else { 2405 } else {
2406 // while failing to load, the calendar object could 2406 // while failing to load, the calendar object could
2407 // have become partially populated. Clear it out. 2407 // have become partially populated. Clear it out.
2408 if ( !merge ) { 2408 if ( !merge ) {
2409 mCalendar->close(); 2409 mCalendar->close();
2410 mViewManager->setDocumentId( filename ); 2410 mViewManager->setDocumentId( filename );
2411 mDialogManager->setDocumentId( filename ); 2411 mDialogManager->setDocumentId( filename );
2412 mTodoList->setDocumentId( filename ); 2412 mTodoList->setDocumentId( filename );
2413 } 2413 }
2414 2414
2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2416 2416
2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2418 globalFlagBlockAgenda = 2; 2418 globalFlagBlockAgenda = 2;
2419 mCalendar->reInitAlarmSettings(); 2419 mCalendar->reInitAlarmSettings();
2420 setSyncEventsReadOnly(); 2420 setSyncEventsReadOnly();
2421 updateUnmanagedViews(); 2421 updateUnmanagedViews();
2422 updateView(); 2422 updateView();
2423 } 2423 }
2424 return false; 2424 return false;
2425} 2425}
2426void CalendarView::mergeFile( QString fn ) 2426void CalendarView::mergeFile( QString fn )
2427{ 2427{
2428 clearAllViews(); 2428 clearAllViews();
2429 mCalendar->mergeCalendarFile( fn ); 2429 mCalendar->mergeCalendarFile( fn );
2430 mCalendar->reInitAlarmSettings(); 2430 mCalendar->reInitAlarmSettings();
2431 setSyncEventsReadOnly(); 2431 setSyncEventsReadOnly();
2432 updateUnmanagedViews(); 2432 updateUnmanagedViews();
2433 updateView(); 2433 updateView();
2434} 2434}
2435void CalendarView::showOpenError() 2435void CalendarView::showOpenError()
2436{ 2436{
2437 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2437 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2438} 2438}
2439void CalendarView::setLoadedFileVersion(QDateTime dt) 2439void CalendarView::setLoadedFileVersion(QDateTime dt)
2440{ 2440{
2441 loadedFileVersion = dt; 2441 loadedFileVersion = dt;
2442} 2442}
2443bool CalendarView::checkFileChanged(QString fn) 2443bool CalendarView::checkFileChanged(QString fn)
2444{ 2444{
2445 QFileInfo finf ( fn ); 2445 QFileInfo finf ( fn );
2446 if ( !finf.exists() ) 2446 if ( !finf.exists() )
2447 return true; 2447 return true;
2448 QDateTime dt = finf.lastModified (); 2448 QDateTime dt = finf.lastModified ();
2449 if ( dt <= loadedFileVersion ) 2449 if ( dt <= loadedFileVersion )
2450 return false; 2450 return false;
2451 return true; 2451 return true;
2452 2452
2453} 2453}
2454void CalendarView::watchSavedFile() 2454void CalendarView::watchSavedFile()
2455{ 2455{
2456 QFileInfo finf ( MainWindow::defaultFileName()); 2456 QFileInfo finf ( MainWindow::defaultFileName());
2457 if ( !finf.exists() ) 2457 if ( !finf.exists() )
2458 return; 2458 return;
2459 QDateTime dt = finf.lastModified (); 2459 QDateTime dt = finf.lastModified ();
2460 if ( dt < loadedFileVersion ) { 2460 if ( dt < loadedFileVersion ) {
2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2463 return; 2463 return;
2464 } 2464 }
2465 loadedFileVersion = dt; 2465 loadedFileVersion = dt;
2466} 2466}
2467bool CalendarView::checkAllFileVersions() 2467bool CalendarView::checkAllFileVersions()
2468{ 2468{
2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2470 KopiCalendarFile * cal = calendars.first(); 2470 KopiCalendarFile * cal = calendars.first();
2471 mCalendar->setDefaultCalendar( 1 ); 2471 mCalendar->setDefaultCalendar( 1 );
2472 mCalendar->setDefaultCalendarEnabledOnly(); 2472 mCalendar->setDefaultCalendarEnabledOnly();
2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2474 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2474 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2475 restoreCalendarSettings(); 2475 restoreCalendarSettings();
2476 return false; 2476 return false;
2477 } 2477 }
2478 } 2478 }
2479 cal = calendars.next(); 2479 cal = calendars.next();
2480 QDateTime storeTemp = loadedFileVersion; 2480 QDateTime storeTemp = loadedFileVersion;
2481 while ( cal ) { 2481 while ( cal ) {
2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2483 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2483 mCalendar->setDefaultCalendar( cal->mCalNumber );
2484 mCalendar->setDefaultCalendarEnabledOnly(); 2484 mCalendar->setDefaultCalendarEnabledOnly();
2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2486 if ( !checkFileVersion(cal->mFileName )) { 2486 if ( !checkFileVersion(cal->mFileName )) {
2487 loadedFileVersion = storeTemp; 2487 loadedFileVersion = storeTemp;
2488 restoreCalendarSettings(); 2488 restoreCalendarSettings();
2489 return false; 2489 return false;
2490 } 2490 }
2491 } 2491 }
2492 cal = calendars.next(); 2492 cal = calendars.next();
2493 } 2493 }
2494 loadedFileVersion = storeTemp; 2494 loadedFileVersion = storeTemp;
2495 return true; 2495 return true;
2496} 2496}
2497bool CalendarView::checkFileVersion(QString fn) 2497bool CalendarView::checkFileVersion(QString fn)
2498{ 2498{
2499 QFileInfo finf ( fn ); 2499 QFileInfo finf ( fn );
2500 if ( !finf.exists() ) 2500 if ( !finf.exists() )
2501 return true; 2501 return true;
2502 QDateTime dt = finf.lastModified (); 2502 QDateTime dt = finf.lastModified ();
2503 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2503 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2504 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2504 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2505 if ( dt <= loadedFileVersion ) 2505 if ( dt <= loadedFileVersion )
2506 return true; 2506 return true;
2507 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)) , 2507 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)) ,
2508 i18n("KO/Pi Warning"),i18n("Overwrite"), 2508 i18n("KO/Pi Warning"),i18n("Overwrite"),
2509 i18n("Sync+save")); 2509 i18n("Sync+save"));
2510 2510
2511 if ( km == KMessageBox::Cancel ) 2511 if ( km == KMessageBox::Cancel )
2512 return false; 2512 return false;
2513 if ( km == KMessageBox::Yes ) 2513 if ( km == KMessageBox::Yes )
2514 return true; 2514 return true;
2515 2515
2516 setSyncDevice("deleteaftersync" ); 2516 setSyncDevice("deleteaftersync" );
2517 mSyncManager->mAskForPreferences = true; 2517 mSyncManager->mAskForPreferences = true;
2518 mSyncManager->mSyncAlgoPrefs = 3; 2518 mSyncManager->mSyncAlgoPrefs = 3;
2519 mSyncManager->mWriteBackFile = false; 2519 mSyncManager->mWriteBackFile = false;
2520 mSyncManager->mWriteBackExistingOnly = false; 2520 mSyncManager->mWriteBackExistingOnly = false;
2521 mSyncManager->mShowSyncSummary = false; 2521 mSyncManager->mShowSyncSummary = false;
2522 syncCalendar( fn, 3 ); 2522 syncCalendar( fn, 3 );
2523 Event * e = getLastSyncEvent(); 2523 Event * e = getLastSyncEvent();
2524 if ( e ) 2524 if ( e )
2525 mCalendar->deleteEvent( e ); 2525 mCalendar->deleteEvent( e );
2526 return true; 2526 return true;
2527} 2527}
2528bool CalendarView::saveCalendars() 2528bool CalendarView::saveCalendars()
2529{ 2529{
2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2531 KopiCalendarFile * cal = calendars.first(); 2531 KopiCalendarFile * cal = calendars.first();
2532 mCalendar->setDefaultCalendar( 1 ); 2532 mCalendar->setDefaultCalendar( 1 );
2533 mCalendar->setDefaultCalendarEnabledOnly(); 2533 mCalendar->setDefaultCalendarEnabledOnly();
2534 QString saveError; 2534 QString saveError;
2535 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2535 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2536 saveError = cal->mName +"\n"; 2536 saveError = cal->mName +"\n";
2537 cal = calendars.next(); 2537 cal = calendars.next();
2538 while ( cal ) { 2538 while ( cal ) {
2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2540 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2540 mCalendar->setDefaultCalendar( cal->mCalNumber );
2541 mCalendar->setDefaultCalendarEnabledOnly(); 2541 mCalendar->setDefaultCalendarEnabledOnly();
2542 if ( saveCalendar( cal->mFileName ) ) 2542 if ( saveCalendar( cal->mFileName ) )
2543 cal->mLoadDt = QDateTime::currentDateTime(); 2543 cal->mLoadDt = QDateTime::currentDateTime();
2544 else 2544 else
2545 saveError += cal->mName + "\n"; 2545 saveError += cal->mName + "\n";
2546 } 2546 }
2547 cal = calendars.next(); 2547 cal = calendars.next();
2548 } 2548 }
2549 restoreCalendarSettings(); 2549 restoreCalendarSettings();
2550 //saveError = "test error"; 2550 //saveError = "test error";
2551 if ( !saveError.isEmpty() ) { 2551 if ( !saveError.isEmpty() ) {
2552 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2552 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2553 KMessageBox::error(this, saveError, i18n("Error saving data")); 2553 KMessageBox::error(this, saveError, i18n("Error saving data"));
2554 return false; 2554 return false;
2555 } 2555 }
2556 return true; 2556 return true;
2557} 2557}
2558bool CalendarView::saveCalendar( QString filename ) 2558bool CalendarView::saveCalendar( QString filename )
2559{ 2559{
2560 2560
2561 // Store back all unsaved data into calendar object 2561 // Store back all unsaved data into calendar object
2562 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2562 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2563 if ( mViewManager->currentView() ) 2563 if ( mViewManager->currentView() )
2564 mViewManager->currentView()->flushView(); 2564 mViewManager->currentView()->flushView();
2565 2565
2566 2566
2567 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2567 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2568 mStorage->setSaveFormat( new ICalFormat() ); 2568 mStorage->setSaveFormat( new ICalFormat() );
2569 mStorage->setFileName( filename ); 2569 mStorage->setFileName( filename );
2570 bool success; 2570 bool success;
2571 success = mStorage->save(); 2571 success = mStorage->save();
2572 if ( !success ) { 2572 if ( !success ) {
2573 return false; 2573 return false;
2574 } 2574 }
2575 if ( filename == MainWindow::defaultFileName() ) { 2575 if ( filename == MainWindow::defaultFileName() ) {
2576 setLoadedFileVersion( lfv ); 2576 setLoadedFileVersion( lfv );
2577 watchSavedFile(); 2577 watchSavedFile();
2578 } 2578 }
2579 return true; 2579 return true;
2580} 2580}
2581 2581
2582void CalendarView::closeCalendar() 2582void CalendarView::closeCalendar()
2583{ 2583{
2584 2584
2585 // child windows no longer valid 2585 // child windows no longer valid
2586 clearAllViews(); 2586 clearAllViews();
2587 emit closingDown(); 2587 emit closingDown();
2588 2588
2589 mCalendar->close(); 2589 mCalendar->close();
2590 setModified(false); 2590 setModified(false);
2591 updateView(); 2591 updateView();
2592} 2592}
2593 2593
2594void CalendarView::archiveCalendar() 2594void CalendarView::archiveCalendar()
2595{ 2595{
2596 mDialogManager->showArchiveDialog(); 2596 mDialogManager->showArchiveDialog();
2597} 2597}
2598 2598
2599 2599
2600void CalendarView::readSettings() 2600void CalendarView::readSettings()
2601{ 2601{
2602 2602
2603 2603
2604 // mViewManager->showAgendaView(); 2604 // mViewManager->showAgendaView();
2605 QString str; 2605 QString str;
2606 //qDebug("CalendarView::readSettings() "); 2606 //qDebug("CalendarView::readSettings() ");
2607 // read settings from the KConfig, supplying reasonable 2607 // read settings from the KConfig, supplying reasonable
2608 // defaults where none are to be found 2608 // defaults where none are to be found
2609 KConfig *config = KOGlobals::config(); 2609 KConfig *config = KOGlobals::config();
2610#ifndef KORG_NOSPLITTER 2610#ifndef KORG_NOSPLITTER
2611 config->setGroup("KOrganizer Geometry"); 2611 config->setGroup("KOrganizer Geometry");
2612 2612
2613 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2613 QValueList<int> sizes = config->readIntListEntry("Separator1");
2614 if (sizes.count() != 2) { 2614 if (sizes.count() != 2) {
2615 sizes << mDateNavigator->minimumSizeHint().width(); 2615 sizes << mDateNavigator->minimumSizeHint().width();
2616 sizes << 300; 2616 sizes << 300;
2617 } 2617 }
2618 mPanner->setSizes(sizes); 2618 mPanner->setSizes(sizes);
2619 2619
2620 sizes = config->readIntListEntry("Separator2"); 2620 sizes = config->readIntListEntry("Separator2");
2621 if ( ( mResourceView && sizes.count() == 4 ) || 2621 if ( ( mResourceView && sizes.count() == 4 ) ||
2622 ( !mResourceView && sizes.count() == 3 ) ) { 2622 ( !mResourceView && sizes.count() == 3 ) ) {
2623 mLeftSplitter->setSizes(sizes); 2623 mLeftSplitter->setSizes(sizes);
2624 } 2624 }
2625#endif 2625#endif
2626 globalFlagBlockAgenda = 1; 2626 globalFlagBlockAgenda = 1;
2627 mViewManager->showAgendaView(); 2627 mViewManager->showAgendaView();
2628 //mViewManager->readSettings( config ); 2628 //mViewManager->readSettings( config );
2629 mTodoList->restoreLayout(config,QString("Todo Layout")); 2629 mTodoList->restoreLayout(config,QString("Todo Layout"));
2630 readFilterSettings(config); 2630 readFilterSettings(config);
2631 2631
2632#ifdef DESKTOP_VERSION 2632#ifdef DESKTOP_VERSION
2633 config->setGroup("WidgetLayout"); 2633 config->setGroup("WidgetLayout");
2634 QStringList list; 2634 QStringList list;
2635 list = config->readListEntry("MainLayout"); 2635 list = config->readListEntry("MainLayout");
2636 int x,y,w,h; 2636 int x,y,w,h;
2637 if ( ! list.isEmpty() ) { 2637 if ( ! list.isEmpty() ) {
2638 x = list[0].toInt(); 2638 x = list[0].toInt();
2639 y = list[1].toInt(); 2639 y = list[1].toInt();
2640 w = list[2].toInt(); 2640 w = list[2].toInt();
2641 h = list[3].toInt(); 2641 h = list[3].toInt();
2642 KApplication::testCoords( &x,&y,&w,&h ); 2642 KApplication::testCoords( &x,&y,&w,&h );
2643 topLevelWidget()->setGeometry(x,y,w,h); 2643 topLevelWidget()->setGeometry(x,y,w,h);
2644 2644
2645 } else { 2645 } else {
2646 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2646 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2647 } 2647 }
2648 list = config->readListEntry("EditEventLayout"); 2648 list = config->readListEntry("EditEventLayout");
2649 if ( ! list.isEmpty() ) { 2649 if ( ! list.isEmpty() ) {
2650 x = list[0].toInt(); 2650 x = list[0].toInt();
2651 y = list[1].toInt(); 2651 y = list[1].toInt();
2652 w = list[2].toInt(); 2652 w = list[2].toInt();
2653 h = list[3].toInt(); 2653 h = list[3].toInt();
2654 KApplication::testCoords( &x,&y,&w,&h ); 2654 KApplication::testCoords( &x,&y,&w,&h );
2655 mEventEditor->setGeometry(x,y,w,h); 2655 mEventEditor->setGeometry(x,y,w,h);
2656 2656
2657 } 2657 }
2658 list = config->readListEntry("EditTodoLayout"); 2658 list = config->readListEntry("EditTodoLayout");
2659 if ( ! list.isEmpty() ) { 2659 if ( ! list.isEmpty() ) {
2660 x = list[0].toInt(); 2660 x = list[0].toInt();
2661 y = list[1].toInt(); 2661 y = list[1].toInt();
2662 w = list[2].toInt(); 2662 w = list[2].toInt();
2663 h = list[3].toInt(); 2663 h = list[3].toInt();
2664 KApplication::testCoords( &x,&y,&w,&h ); 2664 KApplication::testCoords( &x,&y,&w,&h );
2665 mTodoEditor->setGeometry(x,y,w,h); 2665 mTodoEditor->setGeometry(x,y,w,h);
2666 2666
2667 } 2667 }
2668 list = config->readListEntry("ViewerLayout"); 2668 list = config->readListEntry("ViewerLayout");
2669 if ( ! list.isEmpty() ) { 2669 if ( ! list.isEmpty() ) {
2670 x = list[0].toInt(); 2670 x = list[0].toInt();
2671 y = list[1].toInt(); 2671 y = list[1].toInt();
2672 w = list[2].toInt(); 2672 w = list[2].toInt();
2673 h = list[3].toInt(); 2673 h = list[3].toInt();
2674 KApplication::testCoords( &x,&y,&w,&h ); 2674 KApplication::testCoords( &x,&y,&w,&h );
2675 getEventViewerDialog()->setGeometry(x,y,w,h); 2675 getEventViewerDialog()->setGeometry(x,y,w,h);
2676 } 2676 }
2677#endif 2677#endif
2678 config->setGroup( "Views" ); 2678 config->setGroup( "Views" );
2679 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2679 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2680 2680
2681 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2681 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2682 2682
2683 int resetval = 0; 2683 int resetval = 0;
2684 int maxVal = 0; 2684 int maxVal = 0;
2685 if (sizes.count() != 3) { 2685 if (sizes.count() != 3) {
2686 if ( KOPrefs::instance()->mVerticalScreen ) { 2686 if ( KOPrefs::instance()->mVerticalScreen ) {
2687 resetval = mDateNavigator->sizeHint().width()+2; 2687 resetval = mDateNavigator->sizeHint().width()+2;
2688 } else { 2688 } else {
2689 resetval = mDateNavigator->sizeHint().height()+2; 2689 resetval = mDateNavigator->sizeHint().height()+2;
2690 } 2690 }
2691 } 2691 }
2692 if ( resetval ) { 2692 if ( resetval ) {
2693 sizes.clear(); 2693 sizes.clear();
2694 if ( KOPrefs::instance()->mVerticalScreen ) { 2694 if ( KOPrefs::instance()->mVerticalScreen ) {
2695 maxVal = QApplication::desktop()->width() -10; 2695 maxVal = QApplication::desktop()->width() -10;
2696 } else { 2696 } else {
2697 maxVal = QApplication::desktop()->height()-10; 2697 maxVal = QApplication::desktop()->height()-10;
2698 } 2698 }
2699 sizes << resetval; 2699 sizes << resetval;
2700 if ( maxVal < resetval + resetval) 2700 if ( maxVal < resetval + resetval)
2701 resetval = maxVal - resetval; 2701 resetval = maxVal - resetval;
2702 sizes << resetval; 2702 sizes << resetval;
2703 sizes << 100; 2703 sizes << 100;
2704 } 2704 }
2705 mLeftFrame->setSizes(sizes); 2705 mLeftFrame->setSizes(sizes);
2706 sizes = config->readIntListEntry("Main Splitter Frame"); 2706 sizes = config->readIntListEntry("Main Splitter Frame");
2707 resetval = 0; 2707 resetval = 0;
2708 maxVal = 0; 2708 maxVal = 0;
2709 if (sizes.count() != 2) { 2709 if (sizes.count() != 2) {
2710 if ( !KOPrefs::instance()->mVerticalScreen ) { 2710 if ( !KOPrefs::instance()->mVerticalScreen ) {
2711 resetval = mDateNavigator->sizeHint().width()+2; 2711 resetval = mDateNavigator->sizeHint().width()+2;
2712 } else { 2712 } else {
2713 resetval = mDateNavigator->sizeHint().height()+2; 2713 resetval = mDateNavigator->sizeHint().height()+2;
2714 } 2714 }
2715 } 2715 }
2716 if ( resetval ) { 2716 if ( resetval ) {
2717 sizes.clear(); 2717 sizes.clear();
2718 if ( !KOPrefs::instance()->mVerticalScreen ) { 2718 if ( !KOPrefs::instance()->mVerticalScreen ) {
2719 maxVal = QApplication::desktop()->width() -10; 2719 maxVal = QApplication::desktop()->width() -10;
2720 } else { 2720 } else {
2721 maxVal = QApplication::desktop()->height()-10; 2721 maxVal = QApplication::desktop()->height()-10;
2722 } 2722 }
2723 sizes << resetval; 2723 sizes << resetval;
2724 if ( maxVal < resetval + resetval) 2724 if ( maxVal < resetval + resetval)
2725 resetval = maxVal - resetval; 2725 resetval = maxVal - resetval;
2726 sizes << resetval; 2726 sizes << resetval;
2727 } 2727 }
2728 mMainFrame->setSizes(sizes); 2728 mMainFrame->setSizes(sizes);
2729 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2729 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2730 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2730 else if ( dateCount == 7 ) mNavigator->selectWeek();
2731 else mNavigator->selectDates( dateCount ); 2731 else mNavigator->selectDates( dateCount );
2732 // mViewManager->readSettings( config ); 2732 // mViewManager->readSettings( config );
2733 updateConfig(); 2733 updateConfig();
2734 globalFlagBlockAgenda = 2; 2734 globalFlagBlockAgenda = 2;
2735 mViewManager->readSettings( config ); 2735 mViewManager->readSettings( config );
2736 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2736 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2737} 2737}
2738 2738
2739void CalendarView::checkSuspendAlarm() 2739void CalendarView::checkSuspendAlarm()
2740{ 2740{
2741 if ( mSuspendTimer->isActive() ) { 2741 if ( mSuspendTimer->isActive() ) {
2742 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2742 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2743 } 2743 }
2744} 2744}
2745void CalendarView::writeSettings() 2745void CalendarView::writeSettings()
2746{ 2746{
2747 // kdDebug() << "CalendarView::writeSettings" << endl; 2747 // kdDebug() << "CalendarView::writeSettings" << endl;
2748 2748
2749 KConfig *config = KOGlobals::config(); 2749 KConfig *config = KOGlobals::config();
2750 2750
2751 mViewManager->writeSettings( config ); 2751 mViewManager->writeSettings( config );
2752 mTodoList->saveLayout(config,QString("Todo Layout")); 2752 mTodoList->saveLayout(config,QString("Todo Layout"));
2753 mDialogManager->writeSettings( config ); 2753 mDialogManager->writeSettings( config );
2754 //KOPrefs::instance()->usrWriteConfig(); 2754 //KOPrefs::instance()->usrWriteConfig();
2755 KOPrefs::instance()->writeConfig(); 2755 KOPrefs::instance()->writeConfig();
2756 2756
2757 writeFilterSettings(config); 2757 writeFilterSettings(config);
2758 config->setGroup( "AppRun" ); 2758 config->setGroup( "AppRun" );
2759 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2759 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2760 int days = dt.daysTo( QDate::currentDate() ); 2760 int days = dt.daysTo( QDate::currentDate() );
2761 dt = dt.addDays( days ); 2761 dt = dt.addDays( days );
2762 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2762 int secs = dt.secsTo( QDateTime::currentDateTime() );
2763 config->writeEntry( "LatestProgramStopDays", days ); 2763 config->writeEntry( "LatestProgramStopDays", days );
2764 config->writeEntry( "LatestProgramStopSecs", secs ); 2764 config->writeEntry( "LatestProgramStopSecs", secs );
2765 //qDebug("KO: Writing stop time: %d ", secs); 2765 //qDebug("KO: Writing stop time: %d ", secs);
2766 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2766 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2767 //QDateTime latest = dt.addSecs ( secs ); 2767 //QDateTime latest = dt.addSecs ( secs );
2768 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2768 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2769 config->setGroup( "Views" ); 2769 config->setGroup( "Views" );
2770 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2770 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2771 2771
2772#if 0 2772#if 0
2773 qDebug("********************* "); 2773 qDebug("********************* ");
2774 qDebug("Testcode secsto "); 2774 qDebug("Testcode secsto ");
2775 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2775 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2776 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2776 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2777 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2777 int secsto = dt_nodaylight.secsTo( dt_daylight );
2778 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2778 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2779 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2779 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2780 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2780 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2781 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2781 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2782 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2782 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2783 qDebug("********************* testcode end"); 2783 qDebug("********************* testcode end");
2784 2784
2785#endif 2785#endif
2786 2786
2787 QValueList<int> listINT = mLeftFrame->sizes(); 2787 QValueList<int> listINT = mLeftFrame->sizes();
2788 config->writeEntry("Left Splitter Frame",listINT); 2788 config->writeEntry("Left Splitter Frame",listINT);
2789 QValueList<int> listINT2 = mMainFrame->sizes(); 2789 QValueList<int> listINT2 = mMainFrame->sizes();
2790 config->writeEntry("Main Splitter Frame",listINT2); 2790 config->writeEntry("Main Splitter Frame",listINT2);
2791#ifdef DESKTOP_VERSION 2791#ifdef DESKTOP_VERSION
2792 config->setGroup("WidgetLayout"); 2792 config->setGroup("WidgetLayout");
2793 QStringList list ;//= config->readListEntry("MainLayout"); 2793 QStringList list ;//= config->readListEntry("MainLayout");
2794 int x,y,w,h; 2794 int x,y,w,h;
2795 QWidget* wid; 2795 QWidget* wid;
2796 wid = topLevelWidget(); 2796 wid = topLevelWidget();
2797 x = wid->geometry().x(); 2797 x = wid->geometry().x();
2798 y = wid->geometry().y(); 2798 y = wid->geometry().y();
2799 w = wid->width(); 2799 w = wid->width();
2800 h = wid->height(); 2800 h = wid->height();
2801 list.clear(); 2801 list.clear();
2802 list << QString::number( x ); 2802 list << QString::number( x );
2803 list << QString::number( y ); 2803 list << QString::number( y );
2804 list << QString::number( w ); 2804 list << QString::number( w );
2805 list << QString::number( h ); 2805 list << QString::number( h );
2806 config->writeEntry("MainLayout",list ); 2806 config->writeEntry("MainLayout",list );
2807 2807
2808 wid = mEventEditor; 2808 wid = mEventEditor;
2809 x = wid->geometry().x(); 2809 x = wid->geometry().x();
2810 y = wid->geometry().y(); 2810 y = wid->geometry().y();
2811 w = wid->width(); 2811 w = wid->width();
2812 h = wid->height(); 2812 h = wid->height();
2813 list.clear(); 2813 list.clear();
2814 list << QString::number( x ); 2814 list << QString::number( x );
2815 list << QString::number( y ); 2815 list << QString::number( y );
2816 list << QString::number( w ); 2816 list << QString::number( w );
2817 list << QString::number( h ); 2817 list << QString::number( h );
2818 config->writeEntry("EditEventLayout",list ); 2818 config->writeEntry("EditEventLayout",list );
2819 2819
2820 wid = mTodoEditor; 2820 wid = mTodoEditor;
2821 x = wid->geometry().x(); 2821 x = wid->geometry().x();
2822 y = wid->geometry().y(); 2822 y = wid->geometry().y();
2823 w = wid->width(); 2823 w = wid->width();
2824 h = wid->height(); 2824 h = wid->height();
2825 list.clear(); 2825 list.clear();
2826 list << QString::number( x ); 2826 list << QString::number( x );
2827 list << QString::number( y ); 2827 list << QString::number( y );
2828 list << QString::number( w ); 2828 list << QString::number( w );
2829 list << QString::number( h ); 2829 list << QString::number( h );
2830 config->writeEntry("EditTodoLayout",list ); 2830 config->writeEntry("EditTodoLayout",list );
2831 wid = getEventViewerDialog(); 2831 wid = getEventViewerDialog();
2832 x = wid->geometry().x(); 2832 x = wid->geometry().x();
2833 y = wid->geometry().y(); 2833 y = wid->geometry().y();
2834 w = wid->width(); 2834 w = wid->width();
2835 h = wid->height(); 2835 h = wid->height();
2836 list.clear(); 2836 list.clear();
2837 list << QString::number( x ); 2837 list << QString::number( x );
2838 list << QString::number( y ); 2838 list << QString::number( y );
2839 list << QString::number( w ); 2839 list << QString::number( w );
2840 list << QString::number( h ); 2840 list << QString::number( h );
2841 config->writeEntry("ViewerLayout",list ); 2841 config->writeEntry("ViewerLayout",list );
2842 wid = mDialogManager->getSearchDialog(); 2842 wid = mDialogManager->getSearchDialog();
2843 if ( wid ) { 2843 if ( wid ) {
2844 x = wid->geometry().x(); 2844 x = wid->geometry().x();
2845 y = wid->geometry().y(); 2845 y = wid->geometry().y();
2846 w = wid->width(); 2846 w = wid->width();
2847 h = wid->height(); 2847 h = wid->height();
2848 list.clear(); 2848 list.clear();
2849 list << QString::number( x ); 2849 list << QString::number( x );
2850 list << QString::number( y ); 2850 list << QString::number( y );
2851 list << QString::number( w ); 2851 list << QString::number( w );
2852 list << QString::number( h ); 2852 list << QString::number( h );
2853 config->writeEntry("SearchLayout",list ); 2853 config->writeEntry("SearchLayout",list );
2854 } 2854 }
2855#endif 2855#endif
2856 2856
2857 2857
2858 config->sync(); 2858 config->sync();
2859} 2859}
2860 2860
2861void CalendarView::readFilterSettings(KConfig *config) 2861void CalendarView::readFilterSettings(KConfig *config)
2862{ 2862{
2863 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2863 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2864 2864
2865 mFilters.clear(); 2865 mFilters.clear();
2866 2866
2867 config->setGroup("General"); 2867 config->setGroup("General");
2868 QStringList filterList = config->readListEntry("CalendarFilters"); 2868 QStringList filterList = config->readListEntry("CalendarFilters");
2869 2869
2870 QStringList::ConstIterator it = filterList.begin(); 2870 QStringList::ConstIterator it = filterList.begin();
2871 QStringList::ConstIterator end = filterList.end(); 2871 QStringList::ConstIterator end = filterList.end();
2872 while(it != end) { 2872 while(it != end) {
2873 // kdDebug() << " filter: " << (*it) << endl; 2873 // kdDebug() << " filter: " << (*it) << endl;
2874 2874
2875 CalFilter *filter; 2875 CalFilter *filter;
2876 filter = new CalFilter(*it); 2876 filter = new CalFilter(*it);
2877 config->setGroup("Filter_" + (*it).utf8()); 2877 config->setGroup("Filter_" + (*it).utf8());
2878 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2878 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2879 filter->setCriteria(config->readNumEntry("Criteria",0)); 2879 filter->setCriteria(config->readNumEntry("Criteria",0));
2880 filter->setCategoryList(config->readListEntry("CategoryList")); 2880 filter->setCategoryList(config->readListEntry("CategoryList"));
2881 mFilters.append(filter); 2881 mFilters.append(filter);
2882 2882
2883 ++it; 2883 ++it;
2884 } 2884 }
2885 2885
2886 if (mFilters.count() == 0) { 2886 if (mFilters.count() == 0) {
2887 CalFilter *filter = new CalFilter(i18n("Default")); 2887 CalFilter *filter = new CalFilter(i18n("Default"));
2888 mFilters.append(filter); 2888 mFilters.append(filter);
2889 } 2889 }
2890 mFilterView->updateFilters(); 2890 mFilterView->updateFilters();
2891 config->setGroup("FilterView"); 2891 config->setGroup("FilterView");
2892 2892
2893 mFilterView->blockSignals(true); 2893 mFilterView->blockSignals(true);
2894 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2894 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2895 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2895 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2896 mFilterView->blockSignals(false); 2896 mFilterView->blockSignals(false);
2897 // We do it manually to avoid it being done twice by the above calls 2897 // We do it manually to avoid it being done twice by the above calls
2898 updateFilter(); 2898 updateFilter();
2899} 2899}
2900 2900
2901void CalendarView::writeFilterSettings(KConfig *config) 2901void CalendarView::writeFilterSettings(KConfig *config)
2902{ 2902{
2903 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2903 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2904 2904
2905 QStringList filterList; 2905 QStringList filterList;
2906 2906
2907 CalFilter *filter = mFilters.first(); 2907 CalFilter *filter = mFilters.first();
2908 while(filter) { 2908 while(filter) {
2909 // kdDebug() << " fn: " << filter->name() << endl; 2909 // kdDebug() << " fn: " << filter->name() << endl;
2910 filterList << filter->name(); 2910 filterList << filter->name();
2911 config->setGroup("Filter_" + filter->name().utf8()); 2911 config->setGroup("Filter_" + filter->name().utf8());
2912 config->writeEntry("Criteria",filter->criteria()); 2912 config->writeEntry("Criteria",filter->criteria());
2913 config->writeEntry("CategoryList",filter->categoryList()); 2913 config->writeEntry("CategoryList",filter->categoryList());
2914 filter = mFilters.next(); 2914 filter = mFilters.next();
2915 } 2915 }
2916 config->setGroup("General"); 2916 config->setGroup("General");
2917 config->writeEntry("CalendarFilters",filterList); 2917 config->writeEntry("CalendarFilters",filterList);
2918 2918
2919 config->setGroup("FilterView"); 2919 config->setGroup("FilterView");
2920 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2920 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2921 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2921 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2922} 2922}
2923 2923
2924 2924
2925void CalendarView::goToday() 2925void CalendarView::goToday()
2926{ 2926{
2927 if ( mViewManager->currentView()->isMonthView() ) 2927 if ( mViewManager->currentView()->isMonthView() )
2928 mNavigator->selectTodayMonth(); 2928 mNavigator->selectTodayMonth();
2929 else 2929 else
2930 mNavigator->selectToday(); 2930 mNavigator->selectToday();
2931} 2931}
2932 2932
2933void CalendarView::goNext() 2933void CalendarView::goNext()
2934{ 2934{
2935 mNavigator->selectNext(); 2935 mNavigator->selectNext();
2936} 2936}
2937 2937
2938void CalendarView::goPrevious() 2938void CalendarView::goPrevious()
2939{ 2939{
2940 mNavigator->selectPrevious(); 2940 mNavigator->selectPrevious();
2941} 2941}
2942void CalendarView::goNextMonth() 2942void CalendarView::goNextMonth()
2943{ 2943{
2944 mNavigator->selectNextMonth(); 2944 mNavigator->selectNextMonth();
2945} 2945}
2946 2946
2947void CalendarView::goPreviousMonth() 2947void CalendarView::goPreviousMonth()
2948{ 2948{
2949 mNavigator->selectPreviousMonth(); 2949 mNavigator->selectPreviousMonth();
2950} 2950}
2951 2951
2952void CalendarView::updateConfig() 2952void CalendarView::updateConfig()
2953{ 2953{
2954 if ( KOPrefs::instance()->mUseAppColors ) 2954 if ( KOPrefs::instance()->mUseAppColors )
2955 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2955 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2956 emit configChanged(); 2956 emit configChanged();
2957 mTodoList->updateConfig(); 2957 mTodoList->updateConfig();
2958 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2958 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2959 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2959 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2960 // To make the "fill window" configurations work 2960 // To make the "fill window" configurations work
2961 //mViewManager->raiseCurrentView(); 2961 //mViewManager->raiseCurrentView();
2962} 2962}
2963 2963
2964 2964
2965void CalendarView::eventChanged(Event *event) 2965void CalendarView::eventChanged(Event *event)
2966{ 2966{
2967 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2967 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2968 //updateUnmanagedViews(); 2968 //updateUnmanagedViews();
2969} 2969}
2970 2970
2971void CalendarView::eventAdded(Event *event) 2971void CalendarView::eventAdded(Event *event)
2972{ 2972{
2973 changeEventDisplay(event,KOGlobals::EVENTADDED); 2973 changeEventDisplay(event,KOGlobals::EVENTADDED);
2974} 2974}
2975 2975
2976void CalendarView::eventToBeDeleted(Event *) 2976void CalendarView::eventToBeDeleted(Event *)
2977{ 2977{
2978 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2978 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2979} 2979}
2980 2980
2981void CalendarView::eventDeleted() 2981void CalendarView::eventDeleted()
2982{ 2982{
2983 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2983 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2984} 2984}
2985void CalendarView::changeTodoDisplay(Todo *which, int action) 2985void CalendarView::changeTodoDisplay(Todo *which, int action)
2986{ 2986{
2987 changeIncidenceDisplay((Incidence *)which, action); 2987 changeIncidenceDisplay((Incidence *)which, action);
2988 mDateNavigator->updateView(); //LR 2988 mDateNavigator->updateView(); //LR
2989 //mDialogManager->updateSearchDialog(); 2989 //mDialogManager->updateSearchDialog();
2990 2990
2991 if (which) { 2991 if (which) {
2992 mViewManager->updateWNview(); 2992 mViewManager->updateWNview();
2993 //mTodoList->updateView(); 2993 //mTodoList->updateView();
2994 } 2994 }
2995 2995
2996} 2996}
2997 2997
2998void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2998void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2999{ 2999{
3000 updateUnmanagedViews(); 3000 updateUnmanagedViews();
3001 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 3001 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
3002 if ( action == KOGlobals::EVENTDELETED ) { //delete 3002 if ( action == KOGlobals::EVENTDELETED ) { //delete
3003 mCalendar->checkAlarmForIncidence( 0, true ); 3003 mCalendar->checkAlarmForIncidence( 0, true );
3004 if ( mEventViewerDialog ) 3004 if ( mEventViewerDialog )
3005 mEventViewerDialog->hide(); 3005 mEventViewerDialog->hide();
3006 } 3006 }
3007 else 3007 else
3008 mCalendar->checkAlarmForIncidence( which , false ); 3008 mCalendar->checkAlarmForIncidence( which , false );
3009} 3009}
3010 3010
3011// most of the changeEventDisplays() right now just call the view's 3011// most of the changeEventDisplays() right now just call the view's
3012// total update mode, but they SHOULD be recoded to be more refresh-efficient. 3012// total update mode, but they SHOULD be recoded to be more refresh-efficient.
3013void CalendarView::changeEventDisplay(Event *which, int action) 3013void CalendarView::changeEventDisplay(Event *which, int action)
3014{ 3014{
3015 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 3015 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
3016 changeIncidenceDisplay((Incidence *)which, action); 3016 changeIncidenceDisplay((Incidence *)which, action);
3017 static bool clearallviews = false; 3017 static bool clearallviews = false;
3018 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3018 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3019 if ( clearallviews ) { 3019 if ( clearallviews ) {
3020 clearAllViews(); 3020 clearAllViews();
3021 clearallviews = false; 3021 clearallviews = false;
3022 } 3022 }
3023 return; 3023 return;
3024 } 3024 }
3025 clearallviews = true; 3025 clearallviews = true;
3026 mDateNavigator->updateView(); 3026 mDateNavigator->updateView();
3027 //mDialogManager->updateSearchDialog(); 3027 //mDialogManager->updateSearchDialog();
3028 if (which) { 3028 if (which) {
3029 // If there is an event view visible update the display 3029 // If there is an event view visible update the display
3030 mViewManager->currentView()->changeEventDisplay(which,action); 3030 mViewManager->currentView()->changeEventDisplay(which,action);
3031 // TODO: check, if update needed 3031 // TODO: check, if update needed
3032 // if (which->getTodoStatus()) { 3032 // if (which->getTodoStatus()) {
3033 mTodoList->updateView(); 3033 mTodoList->updateView();
3034 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) { 3034 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) {
3035 mConflictingEvent = which ; 3035 mConflictingEvent = which ;
3036 int time = 1000; 3036 int time = 1000;
3037#ifdef DESKTOP_VERSION 3037#ifdef DESKTOP_VERSION
3038 time = 500; 3038 time = 500;
3039#endif 3039#endif
3040 bool checkC = false; 3040 bool checkC = false;
3041 if ( mConflictingEvent->doesFloat() ) { 3041 if ( mConflictingEvent->doesFloat() ) {
3042 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay 3042 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay
3043 || KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3043 || KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3044 } else { 3044 } else {
3045 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay 3045 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay
3046 || KOPrefs::instance()->mCheckConflictsNonADNonAD; 3046 || KOPrefs::instance()->mCheckConflictsNonADNonAD;
3047 } 3047 }
3048 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent ) 3048 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent )
3049 checkC = false; 3049 checkC = false;
3050 if ( checkC ) 3050 if ( checkC )
3051 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3051 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
3052 } 3052 }
3053 // } 3053 // }
3054 } else { 3054 } else {
3055 mViewManager->currentView()->updateView(); 3055 mViewManager->currentView()->updateView();
3056 } 3056 }
3057} 3057}
3058void CalendarView::checkConflictForEvent() 3058void CalendarView::checkConflictForEvent()
3059{ 3059{
3060 3060
3061 if (!KOPrefs::instance()->mConfirm) 3061 if (!KOPrefs::instance()->mConfirm)
3062 return; 3062 return;
3063 if ( ! mConflictingEvent ) return; 3063 if ( ! mConflictingEvent ) return;
3064 Event * conflictingEvent = mConflictingEvent; 3064 Event * conflictingEvent = mConflictingEvent;
3065 mConflictingEvent = 0; 3065 mConflictingEvent = 0;
3066 QDateTime current = QDateTime::currentDateTime(); 3066 QDateTime current = QDateTime::currentDateTime();
3067 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3067 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3068 return; 3068 return;
3069 } 3069 }
3070 CalFilter *filterIN = 0; 3070 CalFilter *filterIN = 0;
3071 CalFilter *filterALL = 0; 3071 CalFilter *filterALL = 0;
3072 CalFilter *filter = mFilters.first(); 3072 CalFilter *filter = mFilters.first();
3073 while(filter) { 3073 while(filter) {
3074 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem) 3074 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem)
3075 filterIN = filter; 3075 filterIN = filter;
3076 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem ) 3076 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem )
3077 filterALL = filter; 3077 filterALL = filter;
3078 filter = mFilters.next(); 3078 filter = mFilters.next();
3079 } 3079 }
3080 if ( filterIN ) { 3080 if ( filterIN ) {
3081 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) { 3081 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) {
3082 return; 3082 return;
3083 } 3083 }
3084 } 3084 }
3085 QPtrList<Event> testlist = mCalendar->events(); 3085 QPtrList<Event> testlist = mCalendar->events();
3086 Event * test = testlist.first(); 3086 Event * test = testlist.first();
3087 QDateTime conflict; 3087 QDateTime conflict;
3088 QDateTime retVal; 3088 QDateTime retVal;
3089 bool found = false; 3089 bool found = false;
3090 Event * cE = 0; 3090 Event * cE = 0;
3091 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay; 3091 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay;
3092 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3092 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3093 if ( !conflictingEvent->doesFloat() ) { 3093 if ( !conflictingEvent->doesFloat() ) {
3094 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay; 3094 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay;
3095 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD; 3095 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD;
3096 } 3096 }
3097 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3097 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3098 while ( test ) { 3098 while ( test ) {
3099 qApp->processEvents(); 3099 qApp->processEvents();
3100 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad ); 3100 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad );
3101 3101
3102 if ( !skip ) { 3102 if ( !skip ) {
3103 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent ) 3103 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent )
3104 skip = true; 3104 skip = true;
3105 } 3105 }
3106 if ( !skip ) { 3106 if ( !skip ) {
3107 if ( filterALL ) { 3107 if ( filterALL ) {
3108 if ( !filterALL->filterCalendarItem( test ) ) { 3108 if ( !filterALL->filterCalendarItem( test ) ) {
3109 skip = true; 3109 skip = true;
3110 } 3110 }
3111 } 3111 }
3112 if ( !skip ) { 3112 if ( !skip ) {
3113 if ( found ) 3113 if ( found )
3114 skip = !test->matchTime( &current, &conflict ); 3114 skip = !test->matchTime( &current, &conflict );
3115 else 3115 else
3116 skip = !test->matchTime( &current, 0 ); 3116 skip = !test->matchTime( &current, 0 );
3117 if ( !skip ) { 3117 if ( !skip ) {
3118 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3118 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3119 if ( ! found ) { 3119 if ( ! found ) {
3120 conflict = retVal; 3120 conflict = retVal;
3121 cE = test; 3121 cE = test;
3122 } else { 3122 } else {
3123 if ( retVal < conflict ) { 3123 if ( retVal < conflict ) {
3124 conflict = retVal; 3124 conflict = retVal;
3125 cE = test; 3125 cE = test;
3126 } 3126 }
3127 } 3127 }
3128 found = true; 3128 found = true;
3129 } 3129 }
3130 } 3130 }
3131 } 3131 }
3132 } 3132 }
3133 test = testlist.next(); 3133 test = testlist.next();
3134 } 3134 }
3135 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3135 topLevelWidget()->setCaption( i18n("KO/Pi") );
3136 if ( found ) { 3136 if ( found ) {
3137 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()) ) ; 3137 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()) ) ;
3138 qApp->processEvents(); 3138 qApp->processEvents();
3139 int km = KMessageBox::warningContinueCancel(this,mess, 3139 int km = KMessageBox::warningContinueCancel(this,mess,
3140 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!")); 3140 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!"));
3141 if ( km != KMessageBox::Continue ) { 3141 if ( km != KMessageBox::Continue ) {
3142 return; 3142 return;
3143 } 3143 }
3144 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3144 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3145 mViewManager->showDayView(); 3145 mViewManager->showDayView();
3146 mNavigator->slotDaySelect( conflict.date() ); 3146 mNavigator->slotDaySelect( conflict.date() );
3147 int hour = conflict.time().hour(); 3147 int hour = conflict.time().hour();
3148 mViewManager->agendaView()->setStartHour( hour ); 3148 mViewManager->agendaView()->setStartHour( hour );
3149 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3149 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3150 } else 3150 } else
3151 topLevelWidget()->setCaption( i18n("No conflict found") ); 3151 topLevelWidget()->setCaption( i18n("No conflict found") );
3152 return; 3152 return;
3153 3153
3154} 3154}
3155 3155
3156void CalendarView::updateTodoViews() 3156void CalendarView::updateTodoViews()
3157{ 3157{
3158 mTodoList->updateView(); 3158 mTodoList->updateView();
3159 mViewManager->currentView()->updateView(); 3159 mViewManager->currentView()->updateView();
3160 3160
3161} 3161}
3162 3162
3163 3163
3164 3164
3165void CalendarView::clearAllViews() 3165void CalendarView::clearAllViews()
3166{ 3166{
3167 mTodoList->clearList(); 3167 mTodoList->clearList();
3168 mViewManager->clearAllViews(); 3168 mViewManager->clearAllViews();
3169 SearchDialog * sd = mDialogManager->getSearchDialog(); 3169 SearchDialog * sd = mDialogManager->getSearchDialog();
3170 if ( sd ) { 3170 if ( sd ) {
3171 KOListView* kol = sd->listview(); 3171 KOListView* kol = sd->listview();
3172 if ( kol ) 3172 if ( kol )
3173 kol->clearList(); 3173 kol->clearList();
3174 } 3174 }
3175} 3175}
3176void CalendarView::updateView() 3176void CalendarView::updateView()
3177{ 3177{
3178 static bool clearallviews = false; 3178 static bool clearallviews = false;
3179 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3179 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3180 if ( clearallviews ) { 3180 if ( clearallviews ) {
3181 clearAllViews(); 3181 clearAllViews();
3182 clearallviews = false; 3182 clearallviews = false;
3183 } 3183 }
3184 return; 3184 return;
3185 } 3185 }
3186 clearallviews = true; 3186 clearallviews = true;
3187 DateList tmpList = mNavigator->selectedDates(); 3187 DateList tmpList = mNavigator->selectedDates();
3188 3188
3189 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3189 if ( KOPrefs::instance()->mHideNonStartedTodos )
3190 mTodoList->updateView(); 3190 mTodoList->updateView();
3191 // We assume that the navigator only selects consecutive days. 3191 // We assume that the navigator only selects consecutive days.
3192 updateView( tmpList.first(), tmpList.last() ); 3192 updateView( tmpList.first(), tmpList.last() );
3193} 3193}
3194 3194
3195void CalendarView::updateUnmanagedViews() 3195void CalendarView::updateUnmanagedViews()
3196{ 3196{
3197 mDateNavigator->updateDayMatrix(); 3197 mDateNavigator->updateDayMatrix();
3198} 3198}
3199 3199
3200int CalendarView::msgItemDelete(const QString name) 3200int CalendarView::msgItemDelete(const QString name)
3201{ 3201{
3202 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3202 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3203 i18n("This item will be\npermanently deleted."), 3203 i18n("This item will be\npermanently deleted."),
3204 i18n("KO/Pi Confirmation"),i18n("Delete")); 3204 i18n("KO/Pi Confirmation"),i18n("Delete"));
3205} 3205}
3206 3206
3207 3207
3208void CalendarView::edit_cut() 3208void CalendarView::edit_cut()
3209{ 3209{
3210 Event *anEvent=0; 3210 Event *anEvent=0;
3211 3211
3212 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3212 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3213 3213
3214 if (mViewManager->currentView()->isEventView()) { 3214 if (mViewManager->currentView()->isEventView()) {
3215 if ( incidence && incidence->typeID() == eventID ) { 3215 if ( incidence && incidence->typeID() == eventID ) {
3216 anEvent = static_cast<Event *>(incidence); 3216 anEvent = static_cast<Event *>(incidence);
3217 } 3217 }
3218 } 3218 }
3219 3219
3220 if (!anEvent) { 3220 if (!anEvent) {
3221 KNotifyClient::beep(); 3221 KNotifyClient::beep();
3222 return; 3222 return;
3223 } 3223 }
3224 DndFactory factory( mCalendar ); 3224 DndFactory factory( mCalendar );
3225 factory.cutIncidence(anEvent); 3225 factory.cutIncidence(anEvent);
3226 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3226 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3227} 3227}
3228 3228
3229void CalendarView::edit_copy() 3229void CalendarView::edit_copy()
3230{ 3230{
3231 Event *anEvent=0; 3231 Event *anEvent=0;
3232 3232
3233 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3233 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3234 3234
3235 if (mViewManager->currentView()->isEventView()) { 3235 if (mViewManager->currentView()->isEventView()) {
3236 if ( incidence && incidence->typeID() == eventID ) { 3236 if ( incidence && incidence->typeID() == eventID ) {
3237 anEvent = static_cast<Event *>(incidence); 3237 anEvent = static_cast<Event *>(incidence);
3238 } 3238 }
3239 } 3239 }
3240 3240
3241 if (!anEvent) { 3241 if (!anEvent) {
3242 KNotifyClient::beep(); 3242 KNotifyClient::beep();
3243 return; 3243 return;
3244 } 3244 }
3245 DndFactory factory( mCalendar ); 3245 DndFactory factory( mCalendar );
3246 factory.copyIncidence(anEvent); 3246 factory.copyIncidence(anEvent);
3247} 3247}
3248 3248
3249void CalendarView::edit_paste() 3249void CalendarView::edit_paste()
3250{ 3250{
3251 QDate date = mNavigator->selectedDates().first(); 3251 QDate date = mNavigator->selectedDates().first();
3252 3252
3253 DndFactory factory( mCalendar ); 3253 DndFactory factory( mCalendar );
3254 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3254 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3255 3255
3256 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3256 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3257} 3257}
3258void CalendarView::edit_global_options() 3258void CalendarView::edit_global_options()
3259{ 3259{
3260 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3260 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3261 emit save(); 3261 emit save();
3262 emit saveStopTimer(); 3262 emit saveStopTimer();
3263 mDialogManager->showGlobalOptionsDialog(); 3263 mDialogManager->showGlobalOptionsDialog();
3264 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3264 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3265 emit saveStopTimer(); 3265 emit saveStopTimer();
3266 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!"), 3266 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!"),
3267 i18n("Timezone settings"),i18n("Reload"))) { 3267 i18n("Timezone settings"),i18n("Reload"))) {
3268 qDebug("KO: TZ reload cancelled "); 3268 qDebug("KO: TZ reload cancelled ");
3269 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3269 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3270 return; 3270 return;
3271 } 3271 }
3272 qDebug("KO: Timezone change "); 3272 qDebug("KO: Timezone change ");
3273 loadCalendars(); 3273 loadCalendars();
3274 setModified(true); 3274 setModified(true);
3275 } 3275 }
3276 else 3276 else
3277 qDebug("KO: No tz change "); 3277 qDebug("KO: No tz change ");
3278} 3278}
3279void CalendarView::edit_options() 3279void CalendarView::edit_options()
3280{ 3280{
3281 mDialogManager->showOptionsDialog(); 3281 mDialogManager->showOptionsDialog();
3282} 3282}
3283 3283
3284 3284
3285void CalendarView::slotSelectPickerDate( QDate d) 3285void CalendarView::slotSelectPickerDate( QDate d)
3286{ 3286{
3287 mDateFrame->hide(); 3287 mDateFrame->hide();
3288 if ( mDatePickerMode == 1 ) { 3288 if ( mDatePickerMode == 1 ) {
3289 mNavigator->slotDaySelect( d ); 3289 mNavigator->slotDaySelect( d );
3290 } else if ( mDatePickerMode == 2 ) { 3290 } else if ( mDatePickerMode == 2 ) {
3291 if ( mMoveIncidence->typeID() == todoID ) { 3291 if ( mMoveIncidence->typeID() == todoID ) {
3292 Todo * to = (Todo *) mMoveIncidence; 3292 Todo * to = (Todo *) mMoveIncidence;
3293 QTime tim; 3293 QTime tim;
3294 int len = 0; 3294 int len = 0;
3295 if ( to->hasStartDate() && to->hasDueDate() ) 3295 if ( to->hasStartDate() && to->hasDueDate() )
3296 len = to->dtStart().secsTo( to->dtDue()); 3296 len = to->dtStart().secsTo( to->dtDue());
3297 if ( to->hasDueDate() ) 3297 if ( to->hasDueDate() )
3298 tim = to->dtDue().time(); 3298 tim = to->dtDue().time();
3299 else { 3299 else {
3300 tim = QTime ( 0,0,0 ); 3300 tim = QTime ( 0,0,0 );
3301 to->setFloats( true ); 3301 to->setFloats( true );
3302 to->setHasDueDate( true ); 3302 to->setHasDueDate( true );
3303 } 3303 }
3304 QDateTime dt ( d,tim ); 3304 QDateTime dt ( d,tim );
3305 to->setDtDue( dt ); 3305 to->setDtDue( dt );
3306 3306
3307 if ( to->hasStartDate() ) { 3307 if ( to->hasStartDate() ) {
3308 if ( len>0 ) 3308 if ( len>0 )
3309 to->setDtStart(to->dtDue().addSecs( -len )); 3309 to->setDtStart(to->dtDue().addSecs( -len ));
3310 else 3310 else
3311 if (to->dtStart() > to->dtDue() ) 3311 if (to->dtStart() > to->dtDue() )
3312 to->setDtStart(to->dtDue().addDays( -3 )); 3312 to->setDtStart(to->dtDue().addDays( -3 ));
3313 } 3313 }
3314 3314
3315 todoChanged( to ); 3315 todoChanged( to );
3316 } else if ( mMoveIncidence->typeID() == eventID ) { 3316 } else if ( mMoveIncidence->typeID() == eventID ) {
3317 if ( mMoveIncidence->doesRecur() ) { 3317 if ( mMoveIncidence->doesRecur() ) {
3318#if 0 3318#if 0
3319 // PENDING implement this 3319 // PENDING implement this
3320 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3320 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3321 mCalendar()->addIncidence( newInc ); 3321 mCalendar()->addIncidence( newInc );
3322 if ( mMoveIncidence->typeID() == todoID ) 3322 if ( mMoveIncidence->typeID() == todoID )
3323 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3323 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3324 else 3324 else
3325 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3325 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3326 mMoveIncidence = newInc; 3326 mMoveIncidence = newInc;
3327 3327
3328#endif 3328#endif
3329 } 3329 }
3330 QTime tim = mMoveIncidence->dtStart().time(); 3330 QTime tim = mMoveIncidence->dtStart().time();
3331 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3331 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3332 QDateTime dt ( d,tim ); 3332 QDateTime dt ( d,tim );
3333 mMoveIncidence->setDtStart( dt ); 3333 mMoveIncidence->setDtStart( dt );
3334 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3334 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3335 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3335 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3336 } else if ( mMoveIncidence->typeID() == journalID ) { 3336 } else if ( mMoveIncidence->typeID() == journalID ) {
3337 QTime tim = mMoveIncidence->dtStart().time(); 3337 QTime tim = mMoveIncidence->dtStart().time();
3338 QDateTime dt ( d,tim ); 3338 QDateTime dt ( d,tim );
3339 mMoveIncidence->setDtStart( dt ); 3339 mMoveIncidence->setDtStart( dt );
3340 updateView(); 3340 updateView();
3341 } 3341 }
3342 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3342 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3343 } 3343 }
3344} 3344}
3345 3345
3346void CalendarView::removeCategories() 3346void CalendarView::removeCategories()
3347{ 3347{
3348 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3348 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3349 QStringList catList = KOPrefs::instance()->mCustomCategories; 3349 QStringList catList = KOPrefs::instance()->mCustomCategories;
3350 QStringList catIncList; 3350 QStringList catIncList;
3351 QStringList newCatList; 3351 QStringList newCatList;
3352 Incidence* inc = incList.first(); 3352 Incidence* inc = incList.first();
3353 uint i; 3353 uint i;
3354 while ( inc ) { 3354 while ( inc ) {
3355 newCatList.clear(); 3355 newCatList.clear();
3356 catIncList = inc->categories() ; 3356 catIncList = inc->categories() ;
3357 for( i = 0; i< catIncList.count(); ++i ) { 3357 for( i = 0; i< catIncList.count(); ++i ) {
3358 if ( catList.contains (catIncList[i])) 3358 if ( catList.contains (catIncList[i]))
3359 newCatList.append( catIncList[i] ); 3359 newCatList.append( catIncList[i] );
3360 } 3360 }
3361 newCatList.sort(); 3361 newCatList.sort();
3362 inc->setCategories( newCatList.join(",") ); 3362 inc->setCategories( newCatList.join(",") );
3363 inc = incList.next(); 3363 inc = incList.next();
3364 } 3364 }
3365} 3365}
3366 3366
3367int CalendarView::addCategories() 3367int CalendarView::addCategories()
3368{ 3368{
3369 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3369 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3370 QStringList catList = KOPrefs::instance()->mCustomCategories; 3370 QStringList catList = KOPrefs::instance()->mCustomCategories;
3371 QStringList catIncList; 3371 QStringList catIncList;
3372 Incidence* inc = incList.first(); 3372 Incidence* inc = incList.first();
3373 uint i; 3373 uint i;
3374 int count = 0; 3374 int count = 0;
3375 while ( inc ) { 3375 while ( inc ) {
3376 catIncList = inc->categories() ; 3376 catIncList = inc->categories() ;
3377 for( i = 0; i< catIncList.count(); ++i ) { 3377 for( i = 0; i< catIncList.count(); ++i ) {
3378 if ( !catList.contains (catIncList[i])) { 3378 if ( !catList.contains (catIncList[i])) {
3379 catList.append( catIncList[i] ); 3379 catList.append( catIncList[i] );
3380 //qDebug("add cat %s ", catIncList[i].latin1()); 3380 //qDebug("add cat %s ", catIncList[i].latin1());
3381 ++count; 3381 ++count;
3382 } 3382 }
3383 } 3383 }
3384 inc = incList.next(); 3384 inc = incList.next();
3385 } 3385 }
3386 catList.sort(); 3386 catList.sort();
3387 KOPrefs::instance()->mCustomCategories = catList; 3387 KOPrefs::instance()->mCustomCategories = catList;
3388 return count; 3388 return count;
3389} 3389}
3390 3390
3391void CalendarView::editCategories() 3391void CalendarView::editCategories()
3392{ 3392{
3393 qDebug("CalendarView::editCategories() "); 3393 qDebug("CalendarView::editCategories() ");
3394 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3394 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3395 ced.exec(); 3395 ced.exec();
3396} 3396}
3397void CalendarView::manageCategories() 3397void CalendarView::manageCategories()
3398{ 3398{
3399 KOCatPrefs* cp = new KOCatPrefs(); 3399 KOCatPrefs* cp = new KOCatPrefs();
3400 cp->show(); 3400 cp->show();
3401 int w =cp->sizeHint().width() ; 3401 int w =cp->sizeHint().width() ;
3402 int h = cp->sizeHint().height() ; 3402 int h = cp->sizeHint().height() ;
3403 int dw = QApplication::desktop()->width(); 3403 int dw = QApplication::desktop()->width();
3404 int dh = QApplication::desktop()->height(); 3404 int dh = QApplication::desktop()->height();
3405 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3405 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3406 if ( !cp->exec() ) { 3406 if ( !cp->exec() ) {
3407 delete cp; 3407 delete cp;
3408 return; 3408 return;
3409 } 3409 }
3410 int count = 0; 3410 int count = 0;
3411 if ( cp->addCat() ) { 3411 if ( cp->addCat() ) {
3412 count = addCategories(); 3412 count = addCategories();
3413 if ( count ) { 3413 if ( count ) {
3414 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3414 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3415 writeSettings(); 3415 writeSettings();
3416 } else 3416 } else
3417 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3417 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3418 } else { 3418 } else {
3419 removeCategories(); 3419 removeCategories();
3420 updateView(); 3420 updateView();
3421 } 3421 }
3422 delete cp; 3422 delete cp;
3423} 3423}
3424 3424
3425void CalendarView::beamIncidence(Incidence * Inc) 3425void CalendarView::beamIncidence(Incidence * Inc)
3426{ 3426{
3427 QPtrList<Incidence> delSel ; 3427 QPtrList<Incidence> delSel ;
3428 delSel.append(Inc); 3428 delSel.append(Inc);
3429 beamIncidenceList( delSel ); 3429 beamIncidenceList( delSel );
3430} 3430}
3431void CalendarView::beamCalendar() 3431void CalendarView::beamCalendar()
3432{ 3432{
3433 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3433 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3434 //qDebug("beamCalendar() "); 3434 //qDebug("beamCalendar() ");
3435 beamIncidenceList( delSel ); 3435 beamIncidenceList( delSel );
3436} 3436}
3437void CalendarView::beamFilteredCalendar() 3437void CalendarView::beamFilteredCalendar()
3438{ 3438{
3439 QPtrList<Incidence> delSel = mCalendar->incidences(); 3439 QPtrList<Incidence> delSel = mCalendar->incidences();
3440 //qDebug("beamFilteredCalendar() "); 3440 //qDebug("beamFilteredCalendar() ");
3441 beamIncidenceList( delSel ); 3441 beamIncidenceList( delSel );
3442} 3442}
3443void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3443void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3444{ 3444{
3445 3445
3446 KOBeamPrefs beamDialog; 3446 KOBeamPrefs beamDialog;
3447 if ( beamDialog.exec () == QDialog::Rejected ) 3447 if ( beamDialog.exec () == QDialog::Rejected )
3448 return; 3448 return;
3449#ifdef DESKTOP_VERSION 3449#ifdef DESKTOP_VERSION
3450 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3450 QString fn = locateLocal( "tmp", "kopibeamfile" );
3451#else 3451#else
3452 QString fn = "/tmp/kopibeamfile"; 3452 QString fn = "/tmp/kopibeamfile";
3453#endif 3453#endif
3454 QString mes; 3454 QString mes;
3455 bool createbup = true; 3455 bool createbup = true;
3456 if ( createbup ) { 3456 if ( createbup ) {
3457 QString description = "\n"; 3457 QString description = "\n";
3458 CalendarLocal* cal = new CalendarLocal(); 3458 CalendarLocal* cal = new CalendarLocal();
3459 if ( beamDialog.beamLocal() ) 3459 if ( beamDialog.beamLocal() )
3460 cal->setLocalTime(); 3460 cal->setLocalTime();
3461 else 3461 else
3462 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3462 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3463 Incidence *incidence = delSel.first(); 3463 Incidence *incidence = delSel.first();
3464 bool addText = false; 3464 bool addText = false;
3465 if ( delSel.count() < 10 ) 3465 if ( delSel.count() < 10 )
3466 addText = true; 3466 addText = true;
3467 else { 3467 else {
3468 description.sprintf(i18n(" %d items?"),delSel.count() ); 3468 description.sprintf(i18n(" %d items?"),delSel.count() );
3469 } 3469 }
3470 while ( incidence ) { 3470 while ( incidence ) {
3471 Incidence *in = incidence->clone(); 3471 Incidence *in = incidence->clone();
3472 if ( ! in->summary().isEmpty() ) { 3472 if ( ! in->summary().isEmpty() ) {
3473 in->setDescription(""); 3473 in->setDescription("");
3474 } else { 3474 } else {
3475 in->setSummary( in->description().left(20)); 3475 in->setSummary( in->description().left(20));
3476 in->setDescription(""); 3476 in->setDescription("");
3477 } 3477 }
3478 if ( addText ) 3478 if ( addText )
3479 description += in->summary() + "\n"; 3479 description += in->summary() + "\n";
3480 cal->addIncidence( in ); 3480 cal->addIncidence( in );
3481 incidence = delSel.next(); 3481 incidence = delSel.next();
3482 } 3482 }
3483 if ( beamDialog.beamVcal() ) { 3483 if ( beamDialog.beamVcal() ) {
3484 fn += ".vcs"; 3484 fn += ".vcs";
3485 FileStorage storage( cal, fn, new VCalFormat ); 3485 FileStorage storage( cal, fn, new VCalFormat );
3486 storage.save(); 3486 storage.save();
3487 } else { 3487 } else {
3488 fn += ".ics"; 3488 fn += ".ics";
3489 FileStorage storage( cal, fn, new ICalFormat( ) ); 3489 FileStorage storage( cal, fn, new ICalFormat( ) );
3490 storage.save(); 3490 storage.save();
3491 } 3491 }
3492 delete cal; 3492 delete cal;
3493 mes = i18n("KO/Pi: Ready for beaming"); 3493 mes = i18n("KO/Pi: Ready for beaming");
3494 topLevelWidget()->setCaption(mes); 3494 topLevelWidget()->setCaption(mes);
3495 KApplication::convert2latin1( fn ); 3495 KApplication::convert2latin1( fn );
3496#ifndef DESKTOP_VERSION 3496#ifndef DESKTOP_VERSION
3497 Ir *ir = new Ir( this ); 3497 Ir *ir = new Ir( this );
3498 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3498 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3499 ir->send( fn, description, "text/x-vCalendar" ); 3499 ir->send( fn, description, "text/x-vCalendar" );
3500#endif 3500#endif
3501 } 3501 }
3502} 3502}
3503 3503
3504#ifndef DESKTOP_VERSION 3504#ifndef DESKTOP_VERSION
3505void CalendarView::beamDone( Ir *ir ) 3505void CalendarView::beamDone( Ir *ir )
3506{ 3506{
3507 delete ir; 3507 delete ir;
3508 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3508 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3509 topLevelWidget()->raise(); 3509 topLevelWidget()->raise();
3510} 3510}
3511#else 3511#else
3512void CalendarView::beamDone( Ir *){;} 3512void CalendarView::beamDone( Ir *){;}
3513#endif 3513#endif
3514void CalendarView::moveIncidence(Incidence * inc ) 3514void CalendarView::moveIncidence(Incidence * inc )
3515{ 3515{
3516 if ( !inc ) return; 3516 if ( !inc ) return;
3517 showDatePickerPopup(); 3517 showDatePickerPopup();
3518 mDatePickerMode = 2; 3518 mDatePickerMode = 2;
3519 mMoveIncidence = inc ; 3519 mMoveIncidence = inc ;
3520 QDate da; 3520 QDate da;
3521 if ( mMoveIncidence->typeID() == todoID ) { 3521 if ( mMoveIncidence->typeID() == todoID ) {
3522 Todo * to = (Todo *) mMoveIncidence; 3522 Todo * to = (Todo *) mMoveIncidence;
3523 if ( to->hasDueDate() ) 3523 if ( to->hasDueDate() )
3524 da = to->dtDue().date(); 3524 da = to->dtDue().date();
3525 else 3525 else
3526 da = QDate::currentDate(); 3526 da = QDate::currentDate();
3527 } else { 3527 } else {
3528 da = mMoveIncidence->dtStart().date(); 3528 da = mMoveIncidence->dtStart().date();
3529 } 3529 }
3530 //PENDING set date for recurring incidence to date of recurrence 3530 //PENDING set date for recurring incidence to date of recurrence
3531 //mMoveIncidenceOldDate; 3531 //mMoveIncidenceOldDate;
3532 mDatePicker->setDate( da ); 3532 mDatePicker->setDate( da );
3533} 3533}
3534void CalendarView::showDatePickerPopup() 3534void CalendarView::showDatePickerPopup()
3535{ 3535{
3536 if ( mDateFrame->isVisible() ) 3536 if ( mDateFrame->isVisible() )
3537 mDateFrame->hide(); 3537 mDateFrame->hide();
3538 else { 3538 else {
3539 int offX = 0, offY = 0; 3539 int offX = 0, offY = 0;
3540#ifdef DESKTOP_VERSION 3540#ifdef DESKTOP_VERSION
3541 int w =mDatePicker->sizeHint().width() ; 3541 int w =mDatePicker->sizeHint().width() ;
3542 int h = mDatePicker->sizeHint().height() ; 3542 int h = mDatePicker->sizeHint().height() ;
3543 int dw = topLevelWidget()->width(); 3543 int dw = topLevelWidget()->width();
3544 int dh = topLevelWidget()->height(); 3544 int dh = topLevelWidget()->height();
3545 offX = topLevelWidget()->x(); 3545 offX = topLevelWidget()->x();
3546 offY = topLevelWidget()->y(); 3546 offY = topLevelWidget()->y();
3547#else 3547#else
3548 int w =mDatePicker->sizeHint().width() ; 3548 int w =mDatePicker->sizeHint().width() ;
3549 int h = mDatePicker->sizeHint().height() ; 3549 int h = mDatePicker->sizeHint().height() ;
3550 int dw = QApplication::desktop()->width(); 3550 int dw = QApplication::desktop()->width();
3551 int dh = QApplication::desktop()->height(); 3551 int dh = QApplication::desktop()->height();
3552#endif 3552#endif
3553 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3553 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3554 mDateFrame->show(); 3554 mDateFrame->show();
3555 } 3555 }
3556} 3556}
3557void CalendarView::showDatePicker( ) 3557void CalendarView::showDatePicker( )
3558{ 3558{
3559 showDatePickerPopup(); 3559 showDatePickerPopup();
3560 mDatePickerMode = 1; 3560 mDatePickerMode = 1;
3561 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3561 mDatePicker->setDate( mNavigator->selectedDates().first() );
3562} 3562}
3563 3563
3564void CalendarView::showEventEditor() 3564void CalendarView::showEventEditor()
3565{ 3565{
3566#ifdef DESKTOP_VERSION 3566#ifdef DESKTOP_VERSION
3567 int x,y,w,h; 3567 int x,y,w,h;
3568 x = mEventEditor->geometry().x(); 3568 x = mEventEditor->geometry().x();
3569 y = mEventEditor->geometry().y(); 3569 y = mEventEditor->geometry().y();
3570 w = mEventEditor->width(); 3570 w = mEventEditor->width();
3571 h = mEventEditor->height(); 3571 h = mEventEditor->height();
3572 mEventEditor->show(); 3572 mEventEditor->show();
3573 mEventEditor->setGeometry(x,y,w,h); 3573 mEventEditor->setGeometry(x,y,w,h);
3574#else 3574#else
3575 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3575 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3576 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3576 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3577 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3577 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3578 qApp->processEvents(); 3578 qApp->processEvents();
3579 delete mEventEditor; 3579 delete mEventEditor;
3580 mEventEditor = mDialogManager->getEventEditor(); 3580 mEventEditor = mDialogManager->getEventEditor();
3581 topLevelWidget()->setCaption( i18n("") ); 3581 topLevelWidget()->setCaption( i18n("") );
3582 } 3582 }
3583 mEventEditor->showMaximized(); 3583 mEventEditor->showMaximized();
3584#endif 3584#endif
3585} 3585}
3586void CalendarView::showTodoEditor() 3586void CalendarView::showTodoEditor()
3587{ 3587{
3588#ifdef DESKTOP_VERSION 3588#ifdef DESKTOP_VERSION
3589 int x,y,w,h; 3589 int x,y,w,h;
3590 x = mTodoEditor->geometry().x(); 3590 x = mTodoEditor->geometry().x();
3591 y = mTodoEditor->geometry().y(); 3591 y = mTodoEditor->geometry().y();
3592 w = mTodoEditor->width(); 3592 w = mTodoEditor->width();
3593 h = mTodoEditor->height(); 3593 h = mTodoEditor->height();
3594 mTodoEditor->show(); 3594 mTodoEditor->show();
3595 mTodoEditor->setGeometry(x,y,w,h); 3595 mTodoEditor->setGeometry(x,y,w,h);
3596#else 3596#else
3597 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3597 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3598 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3598 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3599 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3599 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3600 qApp->processEvents(); 3600 qApp->processEvents();
3601 delete mTodoEditor; 3601 delete mTodoEditor;
3602 mTodoEditor = mDialogManager->getTodoEditor(); 3602 mTodoEditor = mDialogManager->getTodoEditor();
3603 topLevelWidget()->setCaption( i18n("") ); 3603 topLevelWidget()->setCaption( i18n("") );
3604 } 3604 }
3605 mTodoEditor->showMaximized(); 3605 mTodoEditor->showMaximized();
3606#endif 3606#endif
3607} 3607}
3608 3608
3609void CalendarView::cloneIncidence() 3609void CalendarView::cloneIncidence()
3610{ 3610{
3611 Incidence *incidence = currentSelection(); 3611 Incidence *incidence = currentSelection();
3612 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3612 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3613 if ( incidence ) { 3613 if ( incidence ) {
3614 cloneIncidence(incidence); 3614 cloneIncidence(incidence);
3615 } 3615 }
3616} 3616}
3617void CalendarView::moveIncidence() 3617void CalendarView::moveIncidence()
3618{ 3618{
3619 Incidence *incidence = currentSelection(); 3619 Incidence *incidence = currentSelection();
3620 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3620 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3621 if ( incidence ) { 3621 if ( incidence ) {
3622 moveIncidence(incidence); 3622 moveIncidence(incidence);
3623 } 3623 }
3624} 3624}
3625void CalendarView::beamIncidence() 3625void CalendarView::beamIncidence()
3626{ 3626{
3627 Incidence *incidence = currentSelection(); 3627 Incidence *incidence = currentSelection();
3628 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3628 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3629 if ( incidence ) { 3629 if ( incidence ) {
3630 beamIncidence(incidence); 3630 beamIncidence(incidence);
3631 } 3631 }
3632} 3632}
3633void CalendarView::toggleCancelIncidence() 3633void CalendarView::toggleCancelIncidence()
3634{ 3634{
3635 Incidence *incidence = currentSelection(); 3635 Incidence *incidence = currentSelection();
3636 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3636 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3637 if ( incidence ) { 3637 if ( incidence ) {
3638 cancelIncidence(incidence); 3638 cancelIncidence(incidence);
3639 } 3639 }
3640} 3640}
3641 3641
3642 3642
3643void CalendarView::cancelIncidence(Incidence * inc ) 3643void CalendarView::cancelIncidence(Incidence * inc )
3644{ 3644{
3645 inc->setCancelled( ! inc->cancelled() ); 3645 inc->setCancelled( ! inc->cancelled() );
3646 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3646 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3647 updateView(); 3647 updateView();
3648} 3648}
3649void CalendarView::cloneIncidence(Incidence * orgInc ) 3649void CalendarView::cloneIncidence(Incidence * orgInc )
3650{ 3650{
3651 Incidence * newInc = orgInc->clone(); 3651 Incidence * newInc = orgInc->clone();
3652 newInc->recreate(); 3652 newInc->recreate();
3653 3653
3654 if ( newInc->typeID() == todoID ) { 3654 if ( newInc->typeID() == todoID ) {
3655 Todo* t = (Todo*) newInc; 3655 Todo* t = (Todo*) newInc;
3656 bool cloneSub = false; 3656 bool cloneSub = false;
3657 if ( orgInc->relations().count() ) { 3657 if ( orgInc->relations().count() ) {
3658 int result = KMessageBox::warningYesNoCancel(this, 3658 int result = KMessageBox::warningYesNoCancel(this,
3659 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 ) ), 3659 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 ) ),
3660 i18n("Todo has subtodos"), 3660 i18n("Todo has subtodos"),
3661 i18n("Yes"), 3661 i18n("Yes"),
3662 i18n("No")); 3662 i18n("No"));
3663 3663
3664 if ( result == KMessageBox::Cancel ) { 3664 if ( result == KMessageBox::Cancel ) {
3665 delete t; 3665 delete t;
3666 return; 3666 return;
3667 } 3667 }
3668 if (result == KMessageBox::Yes) cloneSub = true; 3668 if (result == KMessageBox::Yes) cloneSub = true;
3669 } 3669 }
3670 showTodoEditor(); 3670 showTodoEditor();
3671 mTodoEditor->editTodo( t ); 3671 mTodoEditor->editTodo( t );
3672 if ( mTodoEditor->exec() ) { 3672 if ( mTodoEditor->exec() ) {
3673 if ( cloneSub ) { 3673 if ( cloneSub ) {
3674 orgInc->cloneRelations( t ); 3674 orgInc->cloneRelations( t );
3675 mCalendar->addIncidenceBranch( t ); 3675 mCalendar->addIncidenceBranch( t );
3676 updateView(); 3676 updateView();
3677 3677
3678 } else { 3678 } else {
3679 mCalendar->addTodo( t ); 3679 mCalendar->addTodo( t );
3680 updateView(); 3680 updateView();
3681 } 3681 }
3682 } else { 3682 } else {
3683 delete t; 3683 delete t;
3684 } 3684 }
3685 } 3685 }
3686 else if ( newInc->typeID() == eventID ) { 3686 else if ( newInc->typeID() == eventID ) {
3687 Event* e = (Event*) newInc; 3687 Event* e = (Event*) newInc;
3688 showEventEditor(); 3688 showEventEditor();
3689 mEventEditor->editEvent( e ); 3689 mEventEditor->editEvent( e );
3690 if ( mEventEditor->exec() ) { 3690 if ( mEventEditor->exec() ) {
3691 mCalendar->addEvent( e ); 3691 mCalendar->addEvent( e );
3692 updateView(); 3692 updateView();
3693 } else { 3693 } else {
3694 delete e; 3694 delete e;
3695 } 3695 }
3696 } else if ( newInc->typeID() == journalID ) { 3696 } else if ( newInc->typeID() == journalID ) {
3697 mCalendar->addJournal( (Journal*) newInc ); 3697 mCalendar->addJournal( (Journal*) newInc );
3698 editJournal( (Journal*) newInc ); 3698 editJournal( (Journal*) newInc );
3699 } 3699 }
3700 setActiveWindow(); 3700 setActiveWindow();
3701} 3701}
3702 3702
3703void CalendarView::newEvent() 3703void CalendarView::newEvent()
3704{ 3704{
3705 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3705 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3706 KOAgendaView *aView = mViewManager->agendaView(); 3706 KOAgendaView *aView = mViewManager->agendaView();
3707 if (aView) { 3707 if (aView) {
3708 if (aView->selectionStart().isValid()) { 3708 if (aView->selectionStart().isValid()) {
3709 if (aView->selectedIsAllDay()) { 3709 if (aView->selectedIsAllDay()) {
3710 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3710 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3711 } else { 3711 } else {
3712 newEvent(aView->selectionStart(),aView->selectionEnd()); 3712 newEvent(aView->selectionStart(),aView->selectionEnd());
3713 } 3713 }
3714 return; 3714 return;
3715 } 3715 }
3716 } 3716 }
3717 3717
3718 QDate date = mNavigator->selectedDates().first(); 3718 QDate date = mNavigator->selectedDates().first();
3719#if 0 3719#if 0
3720 QDateTime current = QDateTime::currentDateTime(); 3720 QDateTime current = QDateTime::currentDateTime();
3721 if ( date <= current.date() ) { 3721 if ( date <= current.date() ) {
3722 int hour = current.time().hour() +1; 3722 int hour = current.time().hour() +1;
3723 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3723 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3724 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3724 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3725 } else 3725 } else
3726#endif 3726#endif
3727 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3727 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3728 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3728 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3729 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3729 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3730} 3730}
3731 3731
3732void CalendarView::newEvent(QDateTime fh) 3732void CalendarView::newEvent(QDateTime fh)
3733{ 3733{
3734 newEvent(fh, 3734 newEvent(fh,
3735 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3735 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3736} 3736}
3737 3737
3738void CalendarView::newEvent(QDate dt) 3738void CalendarView::newEvent(QDate dt)
3739{ 3739{
3740 newEvent(QDateTime(dt, QTime(0,0,0)), 3740 newEvent(QDateTime(dt, QTime(0,0,0)),
3741 QDateTime(dt, QTime(0,0,0)), true); 3741 QDateTime(dt, QTime(0,0,0)), true);
3742} 3742}
3743void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3743void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3744{ 3744{
3745 newEvent(fromHint, toHint, false); 3745 newEvent(fromHint, toHint, false);
3746} 3746}
3747void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3747void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3748{ 3748{
3749 3749
3750 showEventEditor(); 3750 showEventEditor();
3751 mEventEditor->newEvent(fromHint,toHint,allDay); 3751 mEventEditor->newEvent(fromHint,toHint,allDay);
3752 if ( mFilterView->filtersEnabled() ) { 3752 if ( mFilterView->filtersEnabled() ) {
3753 CalFilter *filter = mFilterView->selectedFilter(); 3753 CalFilter *filter = mFilterView->selectedFilter();
3754 if (filter && filter->showCategories()) { 3754 if (filter && filter->showCategories()) {
3755 mEventEditor->setCategories(filter->categoryList().join(",") ); 3755 mEventEditor->setCategories(filter->categoryList().join(",") );
3756 } 3756 }
3757 if ( filter ) 3757 if ( filter )
3758 mEventEditor->setSecrecy( filter->getSecrecy() ); 3758 mEventEditor->setSecrecy( filter->getSecrecy() );
3759 } 3759 }
3760 mEventEditor->exec(); 3760 mEventEditor->exec();
3761 setActiveWindow(); 3761 setActiveWindow();
3762} 3762}
3763void CalendarView::todoAdded(Todo * t) 3763void CalendarView::todoAdded(Todo * t)
3764{ 3764{
3765 3765
3766 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3766 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3767 updateTodoViews(); 3767 updateTodoViews();
3768} 3768}
3769void CalendarView::todoChanged(Todo * t) 3769void CalendarView::todoChanged(Todo * t)
3770{ 3770{
3771 emit todoModified( t, 4 ); 3771 emit todoModified( t, 4 );
3772 // updateTodoViews(); 3772 // updateTodoViews();
3773} 3773}
3774void CalendarView::todoToBeDeleted(Todo *) 3774void CalendarView::todoToBeDeleted(Todo *)
3775{ 3775{
3776 //qDebug("todoToBeDeleted(Todo *) "); 3776 //qDebug("todoToBeDeleted(Todo *) ");
3777 updateTodoViews(); 3777 updateTodoViews();
3778} 3778}
3779void CalendarView::todoDeleted() 3779void CalendarView::todoDeleted()
3780{ 3780{
3781 //qDebug(" todoDeleted()"); 3781 //qDebug(" todoDeleted()");
3782 updateTodoViews(); 3782 updateTodoViews();
3783} 3783}
3784 3784
3785 3785
3786void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3786void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3787{ 3787{
3788 showTodoEditor(); 3788 showTodoEditor();
3789 mTodoEditor->newTodo(dt,0,allday); 3789 mTodoEditor->newTodo(dt,0,allday);
3790 if ( mFilterView->filtersEnabled() ) { 3790 if ( mFilterView->filtersEnabled() ) {
3791 CalFilter *filter = mFilterView->selectedFilter(); 3791 CalFilter *filter = mFilterView->selectedFilter();
3792 if (filter && filter->showCategories()) { 3792 if (filter && filter->showCategories()) {
3793 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3793 mTodoEditor->setCategories(filter->categoryList().join(",") );
3794 } 3794 }
3795 if ( filter ) 3795 if ( filter )
3796 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3796 mTodoEditor->setSecrecy( filter->getSecrecy() );
3797 } 3797 }
3798 mTodoEditor->exec(); 3798 mTodoEditor->exec();
3799 setActiveWindow(); 3799 setActiveWindow();
3800} 3800}
3801 3801
3802void CalendarView::newTodo() 3802void CalendarView::newTodo()
3803{ 3803{
3804 newTodoDateTime( QDateTime(),true ); 3804 newTodoDateTime( QDateTime(),true );
3805} 3805}
3806 3806
3807void CalendarView::newSubTodo() 3807void CalendarView::newSubTodo()
3808{ 3808{
3809 Todo *todo = selectedTodo(); 3809 Todo *todo = selectedTodo();
3810 if ( todo ) newSubTodo( todo ); 3810 if ( todo ) newSubTodo( todo );
3811} 3811}
3812 3812
3813void CalendarView::newSubTodo(Todo *parentEvent) 3813void CalendarView::newSubTodo(Todo *parentEvent)
3814{ 3814{
3815 3815
3816 showTodoEditor(); 3816 showTodoEditor();
3817 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3817 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3818 mTodoEditor->exec(); 3818 mTodoEditor->exec();
3819 setActiveWindow(); 3819 setActiveWindow();
3820} 3820}
3821 3821
3822void CalendarView::newFloatingEvent() 3822void CalendarView::newFloatingEvent()
3823{ 3823{
3824 DateList tmpList = mNavigator->selectedDates(); 3824 DateList tmpList = mNavigator->selectedDates();
3825 QDate date = tmpList.first(); 3825 QDate date = tmpList.first();
3826 3826
3827 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3827 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3828 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3828 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3829} 3829}
3830 3830
3831 3831
3832void CalendarView::editEvent( Event *event ) 3832void CalendarView::editEvent( Event *event )
3833{ 3833{
3834 3834
3835 if ( !event ) return; 3835 if ( !event ) return;
3836 if ( event->isReadOnly() ) { 3836 if ( event->isReadOnly() ) {
3837 showEvent( event ); 3837 showEvent( event );
3838 return; 3838 return;
3839 } 3839 }
3840 showEventEditor(); 3840 showEventEditor();
3841 mEventEditor->editEvent( event , mFlagEditDescription); 3841 mEventEditor->editEvent( event , mFlagEditDescription);
3842 mEventEditor->exec(); 3842 mEventEditor->exec();
3843 setActiveWindow(); 3843 setActiveWindow();
3844 3844
3845} 3845}
3846void CalendarView::editJournal( Journal *jour ) 3846void CalendarView::editJournal( Journal *jour )
3847{ 3847{
3848 if ( !jour ) return; 3848 if ( !jour ) return;
3849 mDialogManager->hideSearchDialog(); 3849 mDialogManager->hideSearchDialog();
3850 mViewManager->showJournalView(); 3850 mViewManager->showJournalView();
3851 mNavigator->slotDaySelect( jour->dtStart().date() ); 3851 mNavigator->slotDaySelect( jour->dtStart().date() );
3852} 3852}
3853void CalendarView::editTodo( Todo *todo ) 3853void CalendarView::editTodo( Todo *todo )
3854{ 3854{
3855 if ( !todo ) return; 3855 if ( !todo ) return;
3856 3856
3857 if ( todo->isReadOnly() ) { 3857 if ( todo->isReadOnly() ) {
3858 showTodo( todo ); 3858 showTodo( todo );
3859 return; 3859 return;
3860 } 3860 }
3861 showTodoEditor(); 3861 showTodoEditor();
3862 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3862 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3863 mTodoEditor->exec(); 3863 mTodoEditor->exec();
3864 setActiveWindow(); 3864 setActiveWindow();
3865 3865
3866} 3866}
3867 3867
3868KOEventViewerDialog* CalendarView::getEventViewerDialog() 3868KOEventViewerDialog* CalendarView::getEventViewerDialog()
3869{ 3869{
3870 if ( !mEventViewerDialog ) { 3870 if ( !mEventViewerDialog ) {
3871 mEventViewerDialog = new KOEventViewerDialog(0); 3871 mEventViewerDialog = new KOEventViewerDialog(0);
3872 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3872 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3873 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3873 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3874 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3874 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3875 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3875 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3876 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3876 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3877 viewManager(), SLOT( showAgendaView( bool ) ) ); 3877 viewManager(), SLOT( showAgendaView( bool ) ) );
3878 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3878 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3879 this, SLOT( slotViewerClosed() ) ); 3879 this, SLOT( slotViewerClosed() ) );
3880 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3880 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3881 this, SLOT( todoChanged(Todo *) ) ); 3881 this, SLOT( todoChanged(Todo *) ) );
3882 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3882 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3883 mEventViewerDialog->resize( 640, 480 ); 3883 mEventViewerDialog->resize( 640, 480 );
3884 3884
3885 } 3885 }
3886 return mEventViewerDialog; 3886 return mEventViewerDialog;
3887} 3887}
3888void CalendarView::showEvent(Event *event) 3888void CalendarView::showEvent(Event *event)
3889{ 3889{
3890 getEventViewerDialog()->setEvent(event); 3890 getEventViewerDialog()->setEvent(event);
3891 getEventViewerDialog()->showMe(); 3891 getEventViewerDialog()->showMe();
3892} 3892}
3893 3893
3894void CalendarView::showTodo(Todo *event) 3894void CalendarView::showTodo(Todo *event)
3895{ 3895{
3896 getEventViewerDialog()->setTodo(event); 3896 getEventViewerDialog()->setTodo(event);
3897 getEventViewerDialog()->showMe(); 3897 getEventViewerDialog()->showMe();
3898} 3898}
3899void CalendarView::showJournal( Journal *jour ) 3899void CalendarView::showJournal( Journal *jour )
3900{ 3900{
3901 getEventViewerDialog()->setJournal(jour); 3901 getEventViewerDialog()->setJournal(jour);
3902 getEventViewerDialog()->showMe(); 3902 getEventViewerDialog()->showMe();
3903 3903
3904} 3904}
3905// void CalendarView::todoModified (Todo *event, int changed) 3905// void CalendarView::todoModified (Todo *event, int changed)
3906// { 3906// {
3907// // if (mDialogList.find (event) != mDialogList.end ()) { 3907// // if (mDialogList.find (event) != mDialogList.end ()) {
3908// // kdDebug() << "Todo modified and open" << endl; 3908// // kdDebug() << "Todo modified and open" << endl;
3909// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3909// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3910// // temp->modified (changed); 3910// // temp->modified (changed);
3911 3911
3912// // } 3912// // }
3913 3913
3914// mViewManager->updateView(); 3914// mViewManager->updateView();
3915// } 3915// }
3916 3916
3917void CalendarView::appointment_show() 3917void CalendarView::appointment_show()
3918{ 3918{
3919 Event *anEvent = 0; 3919 Event *anEvent = 0;
3920 3920
3921 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3921 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3922 3922
3923 if (mViewManager->currentView()->isEventView()) { 3923 if (mViewManager->currentView()->isEventView()) {
3924 if ( incidence && incidence->typeID() == eventID ) { 3924 if ( incidence && incidence->typeID() == eventID ) {
3925 anEvent = static_cast<Event *>(incidence); 3925 anEvent = static_cast<Event *>(incidence);
3926 } 3926 }
3927 } 3927 }
3928 3928
3929 if (!anEvent) { 3929 if (!anEvent) {
3930 KNotifyClient::beep(); 3930 KNotifyClient::beep();
3931 return; 3931 return;
3932 } 3932 }
3933 3933
3934 showEvent(anEvent); 3934 showEvent(anEvent);
3935} 3935}
3936 3936
3937void CalendarView::appointment_edit() 3937void CalendarView::appointment_edit()
3938{ 3938{
3939 Event *anEvent = 0; 3939 Event *anEvent = 0;
3940 3940
3941 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3941 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3942 3942
3943 if (mViewManager->currentView()->isEventView()) { 3943 if (mViewManager->currentView()->isEventView()) {
3944 if ( incidence && incidence->typeID() == eventID ) { 3944 if ( incidence && incidence->typeID() == eventID ) {
3945 anEvent = static_cast<Event *>(incidence); 3945 anEvent = static_cast<Event *>(incidence);
3946 } 3946 }
3947 } 3947 }
3948 3948
3949 if (!anEvent) { 3949 if (!anEvent) {
3950 KNotifyClient::beep(); 3950 KNotifyClient::beep();
3951 return; 3951 return;
3952 } 3952 }
3953 3953
3954 editEvent(anEvent); 3954 editEvent(anEvent);
3955} 3955}
3956 3956
3957void CalendarView::appointment_delete() 3957void CalendarView::appointment_delete()
3958{ 3958{
3959 Event *anEvent = 0; 3959 Event *anEvent = 0;
3960 3960
3961 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3961 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3962 3962
3963 if (mViewManager->currentView()->isEventView()) { 3963 if (mViewManager->currentView()->isEventView()) {
3964 if ( incidence && incidence->typeID() == eventID ) { 3964 if ( incidence && incidence->typeID() == eventID ) {
3965 anEvent = static_cast<Event *>(incidence); 3965 anEvent = static_cast<Event *>(incidence);
3966 } 3966 }
3967 } 3967 }
3968 3968
3969 if (!anEvent) { 3969 if (!anEvent) {
3970 KNotifyClient::beep(); 3970 KNotifyClient::beep();
3971 return; 3971 return;
3972 } 3972 }
3973 3973
3974 deleteEvent(anEvent); 3974 deleteEvent(anEvent);
3975} 3975}
3976 3976
3977void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3977void CalendarView::todo_resub( Todo * parent, Todo * sub )
3978{ 3978{
3979 if (!sub) return; 3979 if (!sub) return;
3980 if ( sub->relatedTo() == parent ) 3980 if ( sub->relatedTo() == parent )
3981 return; 3981 return;
3982 sub->setRelatedTo(parent); 3982 sub->setRelatedTo(parent);
3983 sub->updated(); 3983 sub->updated();
3984 setModified(true); 3984 setModified(true);
3985 updateView(); 3985 updateView();
3986} 3986}
3987void CalendarView::todo_unsub(Todo *anTodo ) 3987void CalendarView::todo_unsub(Todo *anTodo )
3988{ 3988{
3989 todo_resub( 0, anTodo ); 3989 todo_resub( 0, anTodo );
3990} 3990}
3991 3991
3992void CalendarView::deleteTodo(Todo *todo) 3992void CalendarView::deleteTodo(Todo *todo)
3993{ 3993{
3994 if (!todo) { 3994 if (!todo) {
3995 KNotifyClient::beep(); 3995 KNotifyClient::beep();
3996 return; 3996 return;
3997 } 3997 }
3998 if (KOPrefs::instance()->mConfirm) { 3998 if (KOPrefs::instance()->mConfirm) {
3999 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 3999 QString text = KGlobal::formatMessage ( todo->summary(),0 );
4000 if (!todo->relations().isEmpty()) { 4000 if (!todo->relations().isEmpty()) {
4001 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 4001 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
4002 4002
4003 } 4003 }
4004 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 4004 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
4005 case KMessageBox::Continue: // OK 4005 case KMessageBox::Continue: // OK
4006 bool deleteT = false; 4006 bool deleteT = false;
4007 if (!todo->relations().isEmpty()) { 4007 if (!todo->relations().isEmpty()) {
4008 deleteT = removeCompletedSubTodos( todo ); 4008 deleteT = removeCompletedSubTodos( todo );
4009 } 4009 }
4010 // deleteT == true: todo already deleted in removeCompletedSubTodos 4010 // deleteT == true: todo already deleted in removeCompletedSubTodos
4011 if ( !deleteT ) { 4011 if ( !deleteT ) {
4012 checkExternalId( todo ); 4012 checkExternalId( todo );
4013 calendar()->deleteTodo(todo); 4013 calendar()->deleteTodo(todo);
4014 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4014 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4015 updateView();
4016 } 4015 }
4016 updateView();
4017 break; 4017 break;
4018 } // switch 4018 } // switch
4019 } else { 4019 } else {
4020 checkExternalId( todo ); 4020 checkExternalId( todo );
4021 mCalendar->deleteTodo(todo); 4021 mCalendar->deleteTodo(todo);
4022 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4022 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4023 updateView(); 4023 updateView();
4024 } 4024 }
4025 4025
4026 emit updateSearchDialog(); 4026 emit updateSearchDialog();
4027} 4027}
4028void CalendarView::deleteJournal(Journal *jour) 4028void CalendarView::deleteJournal(Journal *jour)
4029{ 4029{
4030 if (!jour) { 4030 if (!jour) {
4031 KNotifyClient::beep(); 4031 KNotifyClient::beep();
4032 return; 4032 return;
4033 } 4033 }
4034 if (KOPrefs::instance()->mConfirm) { 4034 if (KOPrefs::instance()->mConfirm) {
4035 4035
4036 QString des; 4036 QString des;
4037 if ( !jour->summary().isEmpty() ) { 4037 if ( !jour->summary().isEmpty() ) {
4038 des = jour->summary(); 4038 des = jour->summary();
4039 } else { 4039 } else {
4040 des = jour->description().left(30); 4040 des = jour->description().left(30);
4041 des = des.simplifyWhiteSpace (); 4041 des = des.simplifyWhiteSpace ();
4042 des.replace (QRegExp ("\\n"),"" ); 4042 des.replace (QRegExp ("\\n"),"" );
4043 des.replace (QRegExp ("\\r"),"" ); 4043 des.replace (QRegExp ("\\r"),"" );
4044 } 4044 }
4045 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 4045 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
4046 case KMessageBox::Continue: // OK 4046 case KMessageBox::Continue: // OK
4047 calendar()->deleteJournal(jour); 4047 calendar()->deleteJournal(jour);
4048 updateView(); 4048 updateView();
4049 break; 4049 break;
4050 } // switch 4050 } // switch
4051 } else { 4051 } else {
4052 calendar()->deleteJournal(jour);; 4052 calendar()->deleteJournal(jour);;
4053 updateView(); 4053 updateView();
4054 } 4054 }
4055 emit updateSearchDialog(); 4055 emit updateSearchDialog();
4056} 4056}
4057 4057
4058void CalendarView::deleteEvent(Event *anEvent) 4058void CalendarView::deleteEvent(Event *anEvent)
4059{ 4059{
4060 if (!anEvent) { 4060 if (!anEvent) {
4061 KNotifyClient::beep(); 4061 KNotifyClient::beep();
4062 return; 4062 return;
4063 } 4063 }
4064 4064
4065 if (anEvent->doesRecur()) { 4065 if (anEvent->doesRecur()) {
4066 QDate itemDate = mViewManager->currentSelectionDate(); 4066 QDate itemDate = mViewManager->currentSelectionDate();
4067 int km; 4067 int km;
4068 if (!itemDate.isValid()) { 4068 if (!itemDate.isValid()) {
4069 //kdDebug() << "Date Not Valid" << endl; 4069 //kdDebug() << "Date Not Valid" << endl;
4070 if (KOPrefs::instance()->mConfirm) { 4070 if (KOPrefs::instance()->mConfirm) {
4071 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4071 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4072 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 4072 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
4073 i18n("KO/Pi Confirmation"),i18n("Delete All")); 4073 i18n("KO/Pi Confirmation"),i18n("Delete All"));
4074 if ( km == KMessageBox::Continue ) 4074 if ( km == KMessageBox::Continue )
4075 km = KMessageBox::No; // No = all below 4075 km = KMessageBox::No; // No = all below
4076 } else 4076 } else
4077 km = KMessageBox::No; 4077 km = KMessageBox::No;
4078 } else { 4078 } else {
4079 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4079 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4080 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 4080 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
4081 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 4081 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
4082 i18n("KO/Pi Confirmation"),i18n("Current"), 4082 i18n("KO/Pi Confirmation"),i18n("Current"),
4083 i18n("All")); 4083 i18n("All"));
4084 } 4084 }
4085 switch(km) { 4085 switch(km) {
4086 4086
4087 case KMessageBox::No: // Continue // all 4087 case KMessageBox::No: // Continue // all
4088 //qDebug("KMessageBox::No "); 4088 //qDebug("KMessageBox::No ");
4089 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4089 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4090 schedule(Scheduler::Cancel,anEvent); 4090 schedule(Scheduler::Cancel,anEvent);
4091 4091
4092 checkExternalId( anEvent); 4092 checkExternalId( anEvent);
4093 mCalendar->deleteEvent(anEvent); 4093 mCalendar->deleteEvent(anEvent);
4094 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4094 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
4095 break; 4095 break;
4096 4096
4097 // Disabled because it does not work 4097 // Disabled because it does not work
4098 //#if 0 4098 //#if 0
4099 case KMessageBox::Yes: // just this one 4099 case KMessageBox::Yes: // just this one
4100 //QDate qd = mNavigator->selectedDates().first(); 4100 //QDate qd = mNavigator->selectedDates().first();
4101 //if (!qd.isValid()) { 4101 //if (!qd.isValid()) {
4102 // kdDebug() << "no date selected, or invalid date" << endl; 4102 // kdDebug() << "no date selected, or invalid date" << endl;
4103 // KNotifyClient::beep(); 4103 // KNotifyClient::beep();
4104 // return; 4104 // return;
4105 //} 4105 //}
4106 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4106 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4107 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4107 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4108 anEvent->addExDate(itemDate); 4108 anEvent->addExDate(itemDate);
4109 int duration = anEvent->recurrence()->duration(); 4109 int duration = anEvent->recurrence()->duration();
4110 if ( duration > 0 ) { 4110 if ( duration > 0 ) {
4111 anEvent->recurrence()->setDuration( duration - 1 ); 4111 anEvent->recurrence()->setDuration( duration - 1 );
4112 } 4112 }
4113 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4113 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4114 } 4114 }
4115 break; 4115 break;
4116 //#endif 4116 //#endif
4117 } // switch 4117 } // switch
4118 } else { 4118 } else {
4119 if (KOPrefs::instance()->mConfirm) { 4119 if (KOPrefs::instance()->mConfirm) {
4120 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4120 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4121 i18n("\nAre you sure you want\nto delete this event?"), 4121 i18n("\nAre you sure you want\nto delete this event?"),
4122 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4122 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4123 case KMessageBox::Continue: // OK 4123 case KMessageBox::Continue: // OK
4124 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4124 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4125 schedule(Scheduler::Cancel,anEvent); 4125 schedule(Scheduler::Cancel,anEvent);
4126 checkExternalId( anEvent); 4126 checkExternalId( anEvent);
4127 mCalendar->deleteEvent(anEvent); 4127 mCalendar->deleteEvent(anEvent);
4128 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4128 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4129 break; 4129 break;
4130 } // switch 4130 } // switch
4131 } else { 4131 } else {
4132 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4132 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4133 schedule(Scheduler::Cancel,anEvent); 4133 schedule(Scheduler::Cancel,anEvent);
4134 checkExternalId( anEvent); 4134 checkExternalId( anEvent);
4135 mCalendar->deleteEvent(anEvent); 4135 mCalendar->deleteEvent(anEvent);
4136 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4136 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4137 } 4137 }
4138 } // if-else 4138 } // if-else
4139 emit updateSearchDialog(); 4139 emit updateSearchDialog();
4140} 4140}
4141 4141
4142bool CalendarView::deleteEvent(const QString &uid) 4142bool CalendarView::deleteEvent(const QString &uid)
4143{ 4143{
4144 Event *ev = mCalendar->event(uid); 4144 Event *ev = mCalendar->event(uid);
4145 if (ev) { 4145 if (ev) {
4146 deleteEvent(ev); 4146 deleteEvent(ev);
4147 return true; 4147 return true;
4148 } else { 4148 } else {
4149 return false; 4149 return false;
4150 } 4150 }
4151} 4151}
4152 4152
4153/*****************************************************************************/ 4153/*****************************************************************************/
4154 4154
4155void CalendarView::action_mail() 4155void CalendarView::action_mail()
4156{ 4156{
4157#ifndef KORG_NOMAIL 4157#ifndef KORG_NOMAIL
4158 KOMailClient mailClient; 4158 KOMailClient mailClient;
4159 4159
4160 Incidence *incidence = currentSelection(); 4160 Incidence *incidence = currentSelection();
4161 4161
4162 if (!incidence) { 4162 if (!incidence) {
4163 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4163 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4164 return; 4164 return;
4165 } 4165 }
4166 if(incidence->attendeeCount() == 0 ) { 4166 if(incidence->attendeeCount() == 0 ) {
4167 KMessageBox::sorry(this, 4167 KMessageBox::sorry(this,
4168 i18n("Can't generate mail:\nNo attendees defined.\n")); 4168 i18n("Can't generate mail:\nNo attendees defined.\n"));
4169 return; 4169 return;
4170 } 4170 }
4171 4171
4172 CalendarLocal cal_tmp; 4172 CalendarLocal cal_tmp;
4173 Event *event = 0; 4173 Event *event = 0;
4174 Event *ev = 0; 4174 Event *ev = 0;
4175 if ( incidence && incidence->typeID() == eventID ) { 4175 if ( incidence && incidence->typeID() == eventID ) {
4176 event = static_cast<Event *>(incidence); 4176 event = static_cast<Event *>(incidence);
4177 ev = new Event(*event); 4177 ev = new Event(*event);
4178 cal_tmp.addEvent(ev); 4178 cal_tmp.addEvent(ev);
4179 } 4179 }
4180 ICalFormat mForm(); 4180 ICalFormat mForm();
4181 QString attachment = mForm.toString( &cal_tmp ); 4181 QString attachment = mForm.toString( &cal_tmp );
4182 if (ev) delete(ev); 4182 if (ev) delete(ev);
4183 4183
4184 mailClient.mailAttendees(currentSelection(), attachment); 4184 mailClient.mailAttendees(currentSelection(), attachment);
4185 4185
4186#endif 4186#endif
4187 4187
4188#if 0 4188#if 0
4189 Event *anEvent = 0; 4189 Event *anEvent = 0;
4190 if (mViewManager->currentView()->isEventView()) { 4190 if (mViewManager->currentView()->isEventView()) {
4191 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4191 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
4192 } 4192 }
4193 4193
4194 if (!anEvent) { 4194 if (!anEvent) {
4195 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4195 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4196 return; 4196 return;
4197 } 4197 }
4198 if(anEvent->attendeeCount() == 0 ) { 4198 if(anEvent->attendeeCount() == 0 ) {
4199 KMessageBox::sorry(this, 4199 KMessageBox::sorry(this,
4200 i18n("Can't generate mail:\nNo attendees defined.\n")); 4200 i18n("Can't generate mail:\nNo attendees defined.\n"));
4201 return; 4201 return;
4202 } 4202 }
4203 4203
4204 mailobject.emailEvent(anEvent); 4204 mailobject.emailEvent(anEvent);
4205#endif 4205#endif
4206} 4206}
4207 4207
4208 4208
4209void CalendarView::schedule_publish(Incidence *incidence) 4209void CalendarView::schedule_publish(Incidence *incidence)
4210{ 4210{
4211 Event *event = 0; 4211 Event *event = 0;
4212 Todo *todo = 0; 4212 Todo *todo = 0;
4213 4213
4214 if (incidence == 0) { 4214 if (incidence == 0) {
4215 incidence = mViewManager->currentView()->selectedIncidences().first(); 4215 incidence = mViewManager->currentView()->selectedIncidences().first();
4216 if (incidence == 0) { 4216 if (incidence == 0) {
4217 incidence = mTodoList->selectedIncidences().first(); 4217 incidence = mTodoList->selectedIncidences().first();
4218 } 4218 }
4219 } 4219 }
4220 if ( incidence && incidence->typeID() == eventID ) { 4220 if ( incidence && incidence->typeID() == eventID ) {
4221 event = static_cast<Event *>(incidence); 4221 event = static_cast<Event *>(incidence);
4222 } else { 4222 } else {
4223 if ( incidence && incidence->typeID() == todoID ) { 4223 if ( incidence && incidence->typeID() == todoID ) {
4224 todo = static_cast<Todo *>(incidence); 4224 todo = static_cast<Todo *>(incidence);
4225 } 4225 }
4226 } 4226 }
4227 4227
4228 if (!event && !todo) { 4228 if (!event && !todo) {
4229 KMessageBox::sorry(this,i18n("No event selected.")); 4229 KMessageBox::sorry(this,i18n("No event selected."));
4230 return; 4230 return;
4231 } 4231 }
4232 4232
4233 PublishDialog *publishdlg = new PublishDialog(); 4233 PublishDialog *publishdlg = new PublishDialog();
4234 if (incidence->attendeeCount()>0) { 4234 if (incidence->attendeeCount()>0) {
4235 QPtrList<Attendee> attendees = incidence->attendees(); 4235 QPtrList<Attendee> attendees = incidence->attendees();
4236 attendees.first(); 4236 attendees.first();
4237 while ( attendees.current()!=0 ) { 4237 while ( attendees.current()!=0 ) {
4238 publishdlg->addAttendee(attendees.current()); 4238 publishdlg->addAttendee(attendees.current());
4239 attendees.next(); 4239 attendees.next();
4240 } 4240 }
4241 } 4241 }
4242 bool send = true; 4242 bool send = true;
4243 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 4243 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
4244 if ( publishdlg->exec() != QDialog::Accepted ) 4244 if ( publishdlg->exec() != QDialog::Accepted )
4245 send = false; 4245 send = false;
4246 } 4246 }
4247 if ( send ) { 4247 if ( send ) {
4248 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4248 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4249 if ( event ) { 4249 if ( event ) {
4250 Event *ev = new Event(*event); 4250 Event *ev = new Event(*event);
4251 ev->registerObserver(0); 4251 ev->registerObserver(0);
4252 ev->clearAttendees(); 4252 ev->clearAttendees();
4253 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4253 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4254 delete(ev); 4254 delete(ev);
4255 } 4255 }
4256 } else { 4256 } else {
4257 if ( todo ) { 4257 if ( todo ) {
4258 Todo *ev = new Todo(*todo); 4258 Todo *ev = new Todo(*todo);
4259 ev->registerObserver(0); 4259 ev->registerObserver(0);
4260 ev->clearAttendees(); 4260 ev->clearAttendees();
4261 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4261 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4262 delete(ev); 4262 delete(ev);
4263 } 4263 }
4264 } 4264 }
4265 } 4265 }
4266 } 4266 }
4267 delete publishdlg; 4267 delete publishdlg;
4268} 4268}
4269 4269
4270void CalendarView::schedule_request(Incidence *incidence) 4270void CalendarView::schedule_request(Incidence *incidence)
4271{ 4271{
4272 schedule(Scheduler::Request,incidence); 4272 schedule(Scheduler::Request,incidence);
4273} 4273}
4274 4274
4275void CalendarView::schedule_refresh(Incidence *incidence) 4275void CalendarView::schedule_refresh(Incidence *incidence)
4276{ 4276{
4277 schedule(Scheduler::Refresh,incidence); 4277 schedule(Scheduler::Refresh,incidence);
4278} 4278}
4279 4279
4280void CalendarView::schedule_cancel(Incidence *incidence) 4280void CalendarView::schedule_cancel(Incidence *incidence)
4281{ 4281{
4282 schedule(Scheduler::Cancel,incidence); 4282 schedule(Scheduler::Cancel,incidence);
4283} 4283}
4284 4284
4285void CalendarView::schedule_add(Incidence *incidence) 4285void CalendarView::schedule_add(Incidence *incidence)
4286{ 4286{
4287 schedule(Scheduler::Add,incidence); 4287 schedule(Scheduler::Add,incidence);
4288} 4288}
4289 4289
4290void CalendarView::schedule_reply(Incidence *incidence) 4290void CalendarView::schedule_reply(Incidence *incidence)
4291{ 4291{
4292 schedule(Scheduler::Reply,incidence); 4292 schedule(Scheduler::Reply,incidence);
4293} 4293}
4294 4294
4295void CalendarView::schedule_counter(Incidence *incidence) 4295void CalendarView::schedule_counter(Incidence *incidence)
4296{ 4296{
4297 schedule(Scheduler::Counter,incidence); 4297 schedule(Scheduler::Counter,incidence);
4298} 4298}
4299 4299
4300void CalendarView::schedule_declinecounter(Incidence *incidence) 4300void CalendarView::schedule_declinecounter(Incidence *incidence)
4301{ 4301{
4302 schedule(Scheduler::Declinecounter,incidence); 4302 schedule(Scheduler::Declinecounter,incidence);
4303} 4303}
4304 4304
4305void CalendarView::schedule_publish_freebusy(int daysToPublish) 4305void CalendarView::schedule_publish_freebusy(int daysToPublish)
4306{ 4306{
4307 QDateTime start = QDateTime::currentDateTime(); 4307 QDateTime start = QDateTime::currentDateTime();
4308 QDateTime end = start.addDays(daysToPublish); 4308 QDateTime end = start.addDays(daysToPublish);
4309 4309
4310 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 4310 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
4311 freebusy->setOrganizer(KOPrefs::instance()->email()); 4311 freebusy->setOrganizer(KOPrefs::instance()->email());
4312 4312
4313 4313
4314 PublishDialog *publishdlg = new PublishDialog(); 4314 PublishDialog *publishdlg = new PublishDialog();
4315 if ( publishdlg->exec() == QDialog::Accepted ) { 4315 if ( publishdlg->exec() == QDialog::Accepted ) {
4316 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4316 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4317 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 4317 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
4318 delete(freebusy); 4318 delete(freebusy);
4319 } 4319 }
4320 } 4320 }
4321 delete publishdlg; 4321 delete publishdlg;
4322} 4322}
4323 4323
4324void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 4324void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
4325{ 4325{
4326 Event *event = 0; 4326 Event *event = 0;
4327 Todo *todo = 0; 4327 Todo *todo = 0;
4328 4328
4329 if (incidence == 0) { 4329 if (incidence == 0) {
4330 incidence = mViewManager->currentView()->selectedIncidences().first(); 4330 incidence = mViewManager->currentView()->selectedIncidences().first();
4331 if (incidence == 0) { 4331 if (incidence == 0) {
4332 incidence = mTodoList->selectedIncidences().first(); 4332 incidence = mTodoList->selectedIncidences().first();
4333 } 4333 }
4334 } 4334 }
4335 if ( incidence && incidence->typeID() == eventID ) { 4335 if ( incidence && incidence->typeID() == eventID ) {
4336 event = static_cast<Event *>(incidence); 4336 event = static_cast<Event *>(incidence);
4337 } 4337 }
4338 if ( incidence && incidence->typeID() == todoID ) { 4338 if ( incidence && incidence->typeID() == todoID ) {
4339 todo = static_cast<Todo *>(incidence); 4339 todo = static_cast<Todo *>(incidence);
4340 } 4340 }
4341 4341
4342 if (!event && !todo) { 4342 if (!event && !todo) {
4343 KMessageBox::sorry(this,i18n("No event selected.")); 4343 KMessageBox::sorry(this,i18n("No event selected."));
4344 return; 4344 return;
4345 } 4345 }
4346 4346
4347 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 4347 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
4348 KMessageBox::sorry(this,i18n("The event has no attendees.")); 4348 KMessageBox::sorry(this,i18n("The event has no attendees."));
4349 return; 4349 return;
4350 } 4350 }
4351 4351
4352 Event *ev = 0; 4352 Event *ev = 0;
4353 if (event) ev = new Event(*event); 4353 if (event) ev = new Event(*event);
4354 Todo *to = 0; 4354 Todo *to = 0;
4355 if (todo) to = new Todo(*todo); 4355 if (todo) to = new Todo(*todo);
4356 4356
4357 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 4357 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
4358 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 4358 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
4359 if (!me) { 4359 if (!me) {
4360 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4360 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4361 return; 4361 return;
4362 } 4362 }
4363 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4363 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4364 StatusDialog *statdlg = new StatusDialog(this); 4364 StatusDialog *statdlg = new StatusDialog(this);
4365 if (!statdlg->exec()==QDialog::Accepted) return; 4365 if (!statdlg->exec()==QDialog::Accepted) return;
4366 me->setStatus( statdlg->status() ); 4366 me->setStatus( statdlg->status() );
4367 delete(statdlg); 4367 delete(statdlg);
4368 } 4368 }
4369 Attendee *menew = new Attendee(*me); 4369 Attendee *menew = new Attendee(*me);
4370 if (ev) { 4370 if (ev) {
4371 ev->clearAttendees(); 4371 ev->clearAttendees();
4372 ev->addAttendee(menew,false); 4372 ev->addAttendee(menew,false);
4373 } else { 4373 } else {
4374 if (to) { 4374 if (to) {
4375 todo->clearAttendees(); 4375 todo->clearAttendees();
4376 todo->addAttendee(menew,false); 4376 todo->addAttendee(menew,false);
4377 } 4377 }
4378 } 4378 }
4379 } 4379 }
4380 4380
4381 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4381 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4382 if (ev) { 4382 if (ev) {
4383 if ( !dlg->addMessage(ev,method) ) delete(ev); 4383 if ( !dlg->addMessage(ev,method) ) delete(ev);
4384 } else { 4384 } else {
4385 if (to) { 4385 if (to) {
4386 if ( !dlg->addMessage(to,method) ) delete(to); 4386 if ( !dlg->addMessage(to,method) ) delete(to);
4387 } 4387 }
4388 } 4388 }
4389} 4389}
4390 4390
4391void CalendarView::openAddressbook() 4391void CalendarView::openAddressbook()
4392{ 4392{
4393 KRun::runCommand("kaddressbook"); 4393 KRun::runCommand("kaddressbook");
4394} 4394}
4395 4395
4396void CalendarView::setModified(bool modified) 4396void CalendarView::setModified(bool modified)
4397{ 4397{
4398 //qDebug("CalendarView::setModified %d ", modified); 4398 //qDebug("CalendarView::setModified %d ", modified);
4399 if ( modified ) 4399 if ( modified )
4400 emit signalmodified(); 4400 emit signalmodified();
4401 mModified = modified; 4401 mModified = modified;
4402 if ( mModified ) 4402 if ( mModified )
4403 emit modifiedChanged(mModified); 4403 emit modifiedChanged(mModified);
4404 4404
4405} 4405}
4406 4406
4407bool CalendarView::isReadOnly() 4407bool CalendarView::isReadOnly()
4408{ 4408{
4409 return mReadOnly; 4409 return mReadOnly;
4410} 4410}
4411 4411
4412void CalendarView::setReadOnly(bool readOnly) 4412void CalendarView::setReadOnly(bool readOnly)
4413{ 4413{
4414 if (mReadOnly != readOnly) { 4414 if (mReadOnly != readOnly) {
4415 mReadOnly = readOnly; 4415 mReadOnly = readOnly;
4416 emit readOnlyChanged(mReadOnly); 4416 emit readOnlyChanged(mReadOnly);
4417 } 4417 }
4418} 4418}
4419 4419
4420bool CalendarView::isModified() 4420bool CalendarView::isModified()
4421{ 4421{
4422 return mModified; 4422 return mModified;
4423} 4423}
4424void CalendarView::slotprintSelInc() 4424void CalendarView::slotprintSelInc()
4425{ 4425{
4426 if ( currentSelection() == 0 ) { 4426 if ( currentSelection() == 0 ) {
4427 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4427 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4428 return; 4428 return;
4429 } 4429 }
4430 showIncidence(); 4430 showIncidence();
4431 getEventViewerDialog()->print(); 4431 getEventViewerDialog()->print();
4432 4432
4433} 4433}
4434void CalendarView::printSetup() 4434void CalendarView::printSetup()
4435{ 4435{
4436#ifndef KORG_NOPRINTER 4436#ifndef KORG_NOPRINTER
4437 createPrinter(); 4437 createPrinter();
4438 4438
4439 mCalPrinter->setupPrinter(); 4439 mCalPrinter->setupPrinter();
4440#endif 4440#endif
4441} 4441}
4442 4442
4443void CalendarView::print() 4443void CalendarView::print()
4444{ 4444{
4445#ifndef KORG_NOPRINTER 4445#ifndef KORG_NOPRINTER
4446 createPrinter(); 4446 createPrinter();
4447 4447
4448 DateList tmpDateList = mNavigator->selectedDates(); 4448 DateList tmpDateList = mNavigator->selectedDates();
4449 mCalPrinter->print(CalPrinter::Month, 4449 mCalPrinter->print(CalPrinter::Month,
4450 tmpDateList.first(), tmpDateList.last()); 4450 tmpDateList.first(), tmpDateList.last());
4451#endif 4451#endif
4452} 4452}
4453 4453
4454void CalendarView::printPreview() 4454void CalendarView::printPreview()
4455{ 4455{
4456#ifndef KORG_NOPRINTER 4456#ifndef KORG_NOPRINTER
4457 kdDebug() << "CalendarView::printPreview()" << endl; 4457 kdDebug() << "CalendarView::printPreview()" << endl;
4458 4458
4459 createPrinter(); 4459 createPrinter();
4460 4460
4461 DateList tmpDateList = mNavigator->selectedDates(); 4461 DateList tmpDateList = mNavigator->selectedDates();
4462 4462
4463 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4463 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4464 tmpDateList.last()); 4464 tmpDateList.last());
4465#endif 4465#endif
4466} 4466}
4467bool CalendarView::exportICalendar( QString filename ) 4467bool CalendarView::exportICalendar( QString filename )
4468{ 4468{
4469 // Force correct extension 4469 // Force correct extension
4470 if (filename.right(4) != ".ics") filename += ".ics"; 4470 if (filename.right(4) != ".ics") filename += ".ics";
4471 4471
4472 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4472 FileStorage storage( mCalendar, filename, new ICalFormat() );
4473 return storage.save(); 4473 return storage.save();
4474} 4474}
4475 4475
4476bool CalendarView::exportICalendar() 4476bool CalendarView::exportICalendar()
4477{ 4477{
4478 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) ); 4478 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) );
4479} 4479}
4480 4480
4481bool CalendarView::exportVCalendar( QString filename ) 4481bool CalendarView::exportVCalendar( QString filename )
4482{ 4482{
4483 if (mCalendar->journals().count() > 0) { 4483 if (mCalendar->journals().count() > 0) {
4484 int result = KMessageBox::warningContinueCancel(this, 4484 int result = KMessageBox::warningContinueCancel(this,
4485 i18n("The journal entries can not be\nexported to a vCalendar file."), 4485 i18n("The journal entries can not be\nexported to a vCalendar file."),
4486 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4486 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4487 true); 4487 true);
4488 if (result != KMessageBox::Continue) return false; 4488 if (result != KMessageBox::Continue) return false;
4489 } 4489 }
4490 4490
4491 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4491 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4492 4492
4493 // Force correct extension 4493 // Force correct extension
4494 if (filename.right(4) != ".vcs") filename += ".vcs"; 4494 if (filename.right(4) != ".vcs") filename += ".vcs";
4495 4495
4496 FileStorage storage( mCalendar, filename, new VCalFormat ); 4496 FileStorage storage( mCalendar, filename, new VCalFormat );
4497 return storage.save(); 4497 return storage.save();
4498 4498
4499} 4499}
4500 4500
4501void CalendarView::eventUpdated(Incidence *) 4501void CalendarView::eventUpdated(Incidence *)
4502{ 4502{
4503 setModified(); 4503 setModified();
4504 // Don't call updateView here. The code, which has caused the update of the 4504 // Don't call updateView here. The code, which has caused the update of the
4505 // event is responsible for updating the view. 4505 // event is responsible for updating the view.
4506 // updateView(); 4506 // updateView();
4507} 4507}
4508 4508
4509void CalendarView::adaptNavigationUnits() 4509void CalendarView::adaptNavigationUnits()
4510{ 4510{
4511 if (mViewManager->currentView()->isEventView()) { 4511 if (mViewManager->currentView()->isEventView()) {
4512 int days = mViewManager->currentView()->currentDateCount(); 4512 int days = mViewManager->currentView()->currentDateCount();
4513 if (days == 1) { 4513 if (days == 1) {
4514 emit changeNavStringPrev(i18n("&Previous Day")); 4514 emit changeNavStringPrev(i18n("&Previous Day"));
4515 emit changeNavStringNext(i18n("&Next Day")); 4515 emit changeNavStringNext(i18n("&Next Day"));
4516 } else { 4516 } else {
4517 emit changeNavStringPrev(i18n("&Previous Week")); 4517 emit changeNavStringPrev(i18n("&Previous Week"));
4518 emit changeNavStringNext(i18n("&Next Week")); 4518 emit changeNavStringNext(i18n("&Next Week"));
4519 } 4519 }
4520 } 4520 }
4521} 4521}
4522 4522
4523void CalendarView::processMainViewSelection( Incidence *incidence ) 4523void CalendarView::processMainViewSelection( Incidence *incidence )
4524{ 4524{
4525 if ( incidence ) mTodoList->clearSelection(); 4525 if ( incidence ) mTodoList->clearSelection();
4526 processIncidenceSelection( incidence ); 4526 processIncidenceSelection( incidence );
4527} 4527}
4528 4528
4529void CalendarView::processTodoListSelection( Incidence *incidence ) 4529void CalendarView::processTodoListSelection( Incidence *incidence )
4530{ 4530{
4531 if ( incidence && mViewManager->currentView() ) { 4531 if ( incidence && mViewManager->currentView() ) {
4532 mViewManager->currentView()->clearSelection(); 4532 mViewManager->currentView()->clearSelection();
4533 } 4533 }
4534 processIncidenceSelection( incidence ); 4534 processIncidenceSelection( incidence );
4535} 4535}
4536 4536
4537void CalendarView::processIncidenceSelection( Incidence *incidence ) 4537void CalendarView::processIncidenceSelection( Incidence *incidence )
4538{ 4538{
4539 emit incidenceSelected( incidence ); 4539 emit incidenceSelected( incidence );
4540 if ( incidence == mSelectedIncidence ) return; 4540 if ( incidence == mSelectedIncidence ) return;
4541 mSelectedIncidence = incidence; 4541 mSelectedIncidence = incidence;
4542 4542
4543 if ( incidence && incidence->typeID() == eventID ) { 4543 if ( incidence && incidence->typeID() == eventID ) {
4544 Event *event = static_cast<Event *>( incidence ); 4544 Event *event = static_cast<Event *>( incidence );
4545 if ( event->organizer() == KOPrefs::instance()->email() ) { 4545 if ( event->organizer() == KOPrefs::instance()->email() ) {
4546 emit organizerEventsSelected( true ); 4546 emit organizerEventsSelected( true );
4547 } else { 4547 } else {
4548 emit organizerEventsSelected(false); 4548 emit organizerEventsSelected(false);
4549 } 4549 }
4550 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4550 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4551 KOPrefs::instance()->email() ) ) { 4551 KOPrefs::instance()->email() ) ) {
4552 emit groupEventsSelected( true ); 4552 emit groupEventsSelected( true );
4553 } else { 4553 } else {
4554 emit groupEventsSelected(false); 4554 emit groupEventsSelected(false);
4555 } 4555 }
4556 return; 4556 return;
4557 } else { 4557 } else {
4558 if ( incidence && incidence->typeID() == todoID ) { 4558 if ( incidence && incidence->typeID() == todoID ) {
4559 emit todoSelected( true ); 4559 emit todoSelected( true );
4560 Todo *event = static_cast<Todo *>( incidence ); 4560 Todo *event = static_cast<Todo *>( incidence );
4561 if ( event->organizer() == KOPrefs::instance()->email() ) { 4561 if ( event->organizer() == KOPrefs::instance()->email() ) {
4562 emit organizerEventsSelected( true ); 4562 emit organizerEventsSelected( true );
4563 } else { 4563 } else {
4564 emit organizerEventsSelected(false); 4564 emit organizerEventsSelected(false);
4565 } 4565 }
4566 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4566 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4567 KOPrefs::instance()->email() ) ) { 4567 KOPrefs::instance()->email() ) ) {
4568 emit groupEventsSelected( true ); 4568 emit groupEventsSelected( true );
4569 } else { 4569 } else {
4570 emit groupEventsSelected(false); 4570 emit groupEventsSelected(false);
4571 } 4571 }
4572 return; 4572 return;
4573 } else { 4573 } else {
4574 emit todoSelected( false ); 4574 emit todoSelected( false );
4575 emit organizerEventsSelected(false); 4575 emit organizerEventsSelected(false);
4576 emit groupEventsSelected(false); 4576 emit groupEventsSelected(false);
4577 } 4577 }
4578 return; 4578 return;
4579 } 4579 }
4580 4580
4581 /* if ( incidence && incidence->typeID() == todoID ) { 4581 /* if ( incidence && incidence->typeID() == todoID ) {
4582 emit todoSelected( true ); 4582 emit todoSelected( true );
4583 } else { 4583 } else {
4584 emit todoSelected( false ); 4584 emit todoSelected( false );
4585 }*/ 4585 }*/
4586} 4586}
4587 4587
4588 4588
4589void CalendarView::checkClipboard() 4589void CalendarView::checkClipboard()
4590{ 4590{
4591#ifndef KORG_NODND 4591#ifndef KORG_NODND
4592 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4592 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4593 emit pasteEnabled(true); 4593 emit pasteEnabled(true);
4594 } else { 4594 } else {
4595 emit pasteEnabled(false); 4595 emit pasteEnabled(false);
4596 } 4596 }
4597#endif 4597#endif
4598} 4598}
4599 4599
4600void CalendarView::showDates(const DateList &selectedDates) 4600void CalendarView::showDates(const DateList &selectedDates)
4601{ 4601{
4602 // kdDebug() << "CalendarView::selectDates()" << endl; 4602 // kdDebug() << "CalendarView::selectDates()" << endl;
4603 4603
4604 4604
4605 if ( !mBlockShowDates ) { 4605 if ( !mBlockShowDates ) {
4606 if ( mViewManager->currentView() ) { 4606 if ( mViewManager->currentView() ) {
4607 updateView( selectedDates.first(), selectedDates.last() ); 4607 updateView( selectedDates.first(), selectedDates.last() );
4608 } else { 4608 } else {
4609 mViewManager->showAgendaView(); 4609 mViewManager->showAgendaView();
4610 } 4610 }
4611 } 4611 }
4612 4612
4613 QDate date = selectedDates.first(); 4613 QDate date = selectedDates.first();
4614 if ( ! date.isValid() ) { 4614 if ( ! date.isValid() ) {
4615 topLevelWidget()->setCaption(""); 4615 topLevelWidget()->setCaption("");
4616 return; 4616 return;
4617 } 4617 }
4618 4618
4619 QString selDates; 4619 QString selDates;
4620 selDates = KGlobal::locale()->formatDate( date, true); 4620 selDates = KGlobal::locale()->formatDate( date, true);
4621 if (selectedDates.first() < selectedDates.last() ) 4621 if (selectedDates.first() < selectedDates.last() )
4622 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4622 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4623 else { 4623 else {
4624 QString addString; 4624 QString addString;
4625 if ( date == QDateTime::currentDateTime().date() ) 4625 if ( date == QDateTime::currentDateTime().date() )
4626 addString = i18n("Today"); 4626 addString = i18n("Today");
4627 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4627 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4628 addString = i18n("Tomorrow"); 4628 addString = i18n("Tomorrow");
4629 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4629 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4630 addString = i18n("Yesterday"); 4630 addString = i18n("Yesterday");
4631 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4631 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4632 addString = i18n("Day before yesterday"); 4632 addString = i18n("Day before yesterday");
4633 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4633 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4634 addString = i18n("Day after tomorrow"); 4634 addString = i18n("Day after tomorrow");
4635 if ( !addString.isEmpty() ) { 4635 if ( !addString.isEmpty() ) {
4636 topLevelWidget()->setCaption( addString+", " + selDates ); 4636 topLevelWidget()->setCaption( addString+", " + selDates );
4637 return; 4637 return;
4638 } 4638 }
4639 } 4639 }
4640 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4640 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4641 4641
4642} 4642}
4643 4643
4644QPtrList<CalFilter> CalendarView::filters() 4644QPtrList<CalFilter> CalendarView::filters()
4645{ 4645{
4646 return mFilters; 4646 return mFilters;
4647 4647
4648} 4648}
4649void CalendarView::editFilters() 4649void CalendarView::editFilters()
4650{ 4650{
4651 // kdDebug() << "CalendarView::editFilters()" << endl; 4651 // kdDebug() << "CalendarView::editFilters()" << endl;
4652 4652
4653 CalFilter *filter = mFilters.first(); 4653 CalFilter *filter = mFilters.first();
4654 while(filter) { 4654 while(filter) {
4655 filter = mFilters.next(); 4655 filter = mFilters.next();
4656 } 4656 }
4657 4657
4658 mDialogManager->showFilterEditDialog(&mFilters); 4658 mDialogManager->showFilterEditDialog(&mFilters);
4659 updateFilter(); 4659 updateFilter();
4660} 4660}
4661void CalendarView::toggleFilter() 4661void CalendarView::toggleFilter()
4662{ 4662{
4663 if ( mLeftFrame->isHidden() ) { 4663 if ( mLeftFrame->isHidden() ) {
4664 toggleExpand(); 4664 toggleExpand();
4665 showFilter( true ); 4665 showFilter( true );
4666 } else 4666 } else
4667 showFilter(! mCalEditView->isVisible()); 4667 showFilter(! mCalEditView->isVisible());
4668} 4668}
4669 4669
4670KOFilterView *CalendarView::filterView() 4670KOFilterView *CalendarView::filterView()
4671{ 4671{
4672 return mFilterView; 4672 return mFilterView;
4673} 4673}
4674void CalendarView::selectFilter( int fil ) 4674void CalendarView::selectFilter( int fil )
4675{ 4675{
4676 mFilterView->setSelectedFilter( fil ); 4676 mFilterView->setSelectedFilter( fil );
4677 updateUnmanagedViews(); 4677 updateUnmanagedViews();
4678} 4678}
4679void CalendarView::showFilter(bool visible) 4679void CalendarView::showFilter(bool visible)
4680{ 4680{
4681#if 1 4681#if 1
4682 if (visible) { 4682 if (visible) {
4683 mCalEditView->readConfig(); 4683 mCalEditView->readConfig();
4684 mCalEditView->show(); 4684 mCalEditView->show();
4685 QValueList<int> sizes; 4685 QValueList<int> sizes;
4686 sizes = mLeftFrame->sizes(); 4686 sizes = mLeftFrame->sizes();
4687 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4687 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4688 sizes.clear(); 4688 sizes.clear();
4689 sizes << 100; 4689 sizes << 100;
4690 sizes << 0; 4690 sizes << 0;
4691 sizes << 0; 4691 sizes << 0;
4692 sizes << 100; 4692 sizes << 100;
4693 mLeftFrame->setSizes(sizes); 4693 mLeftFrame->setSizes(sizes);
4694 } 4694 }
4695#if 0 4695#if 0
4696 sizes = mLeftFrame->sizes(); 4696 sizes = mLeftFrame->sizes();
4697 int ccc = 0; 4697 int ccc = 0;
4698 while ( ccc < sizes.count()) { 4698 while ( ccc < sizes.count()) {
4699 qDebug("size %d %d ", ccc, sizes[ccc]); 4699 qDebug("size %d %d ", ccc, sizes[ccc]);
4700 ++ccc; 4700 ++ccc;
4701 } 4701 }
4702#endif 4702#endif
4703 4703
4704 } 4704 }
4705 else { 4705 else {
4706 mCalEditView->hide(); 4706 mCalEditView->hide();
4707 } 4707 }
4708#else 4708#else
4709 if (visible) mFilterView->show(); 4709 if (visible) mFilterView->show();
4710 else mFilterView->hide(); 4710 else mFilterView->hide();
4711#endif 4711#endif
4712} 4712}
4713void CalendarView::toggleFilerEnabled( ) 4713void CalendarView::toggleFilerEnabled( )
4714{ 4714{
4715 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4715 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4716 if ( !mFilterView->filtersEnabled() ) 4716 if ( !mFilterView->filtersEnabled() )
4717 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4717 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4718 updateUnmanagedViews(); 4718 updateUnmanagedViews();
4719 4719
4720} 4720}
4721void CalendarView::updateFilter() 4721void CalendarView::updateFilter()
4722{ 4722{
4723 CalFilter *filter = mFilterView->selectedFilter(); 4723 CalFilter *filter = mFilterView->selectedFilter();
4724 if (filter) { 4724 if (filter) {
4725 QString mess; 4725 QString mess;
4726 if (mFilterView->filtersEnabled()) { 4726 if (mFilterView->filtersEnabled()) {
4727 mess = i18n("Filter selected: ")+filter->name(); 4727 mess = i18n("Filter selected: ")+filter->name();
4728 filter->setEnabled(true); 4728 filter->setEnabled(true);
4729 } 4729 }
4730 else filter->setEnabled(false); 4730 else filter->setEnabled(false);
4731 mCalendar->setFilter(filter); 4731 mCalendar->setFilter(filter);
4732 updateView(); 4732 updateView();
4733 if ( !mess.isEmpty() ) 4733 if ( !mess.isEmpty() )
4734 topLevelWidget()->setCaption( mess ); 4734 topLevelWidget()->setCaption( mess );
4735 4735
4736 } 4736 }
4737 emit filtersUpdated(); 4737 emit filtersUpdated();
4738} 4738}
4739 4739
4740void CalendarView::filterEdited() 4740void CalendarView::filterEdited()
4741{ 4741{
4742 mFilterView->updateFilters(); 4742 mFilterView->updateFilters();
4743 updateFilter(); 4743 updateFilter();
4744 writeSettings(); 4744 writeSettings();
4745} 4745}
4746 4746
4747 4747
4748void CalendarView::takeOverEvent() 4748void CalendarView::takeOverEvent()
4749{ 4749{
4750 Incidence *incidence = currentSelection(); 4750 Incidence *incidence = currentSelection();
4751 4751
4752 if (!incidence) return; 4752 if (!incidence) return;
4753 4753
4754 incidence->setOrganizer(KOPrefs::instance()->email()); 4754 incidence->setOrganizer(KOPrefs::instance()->email());
4755 incidence->recreate(); 4755 incidence->recreate();
4756 incidence->setReadOnly(false); 4756 incidence->setReadOnly(false);
4757 4757
4758 updateView(); 4758 updateView();
4759} 4759}
4760 4760
4761void CalendarView::takeOverCalendar() 4761void CalendarView::takeOverCalendar()
4762{ 4762{
4763 // TODO: Create Calendar::allIncidences() function and use it here 4763 // TODO: Create Calendar::allIncidences() function and use it here
4764 4764
4765 clearAllViews(); 4765 clearAllViews();
4766 QPtrList<Event> events = mCalendar->events(); 4766 QPtrList<Event> events = mCalendar->events();
4767 for(uint i=0; i<events.count(); ++i) { 4767 for(uint i=0; i<events.count(); ++i) {
4768 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4768 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4769 events.at(i)->recreate(); 4769 events.at(i)->recreate();
4770 events.at(i)->setReadOnly(false); 4770 events.at(i)->setReadOnly(false);
4771 } 4771 }
4772 4772
4773 QPtrList<Todo> todos = mCalendar->todos(); 4773 QPtrList<Todo> todos = mCalendar->todos();
4774 for(uint i=0; i<todos.count(); ++i) { 4774 for(uint i=0; i<todos.count(); ++i) {
4775 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4775 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4776 todos.at(i)->recreate(); 4776 todos.at(i)->recreate();
4777 todos.at(i)->setReadOnly(false); 4777 todos.at(i)->setReadOnly(false);
4778 } 4778 }
4779 4779
4780 QPtrList<Journal> journals = mCalendar->journals(); 4780 QPtrList<Journal> journals = mCalendar->journals();
4781 for(uint i=0; i<journals.count(); ++i) { 4781 for(uint i=0; i<journals.count(); ++i) {
4782 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4782 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4783 journals.at(i)->recreate(); 4783 journals.at(i)->recreate();
4784 journals.at(i)->setReadOnly(false); 4784 journals.at(i)->setReadOnly(false);
4785 } 4785 }
4786 4786
4787 updateView(); 4787 updateView();
4788} 4788}
4789 4789
4790void CalendarView::showIntro() 4790void CalendarView::showIntro()
4791{ 4791{
4792 kdDebug() << "To be implemented." << endl; 4792 kdDebug() << "To be implemented." << endl;
4793} 4793}
4794 4794
4795QWidgetStack *CalendarView::viewStack() 4795QWidgetStack *CalendarView::viewStack()
4796{ 4796{
4797 return mRightFrame; 4797 return mRightFrame;
4798} 4798}
4799 4799
4800QWidget *CalendarView::leftFrame() 4800QWidget *CalendarView::leftFrame()
4801{ 4801{
4802 return ( QWidget *)mLeftFrame; 4802 return ( QWidget *)mLeftFrame;
4803} 4803}
4804 4804
4805DateNavigator *CalendarView::dateNavigator() 4805DateNavigator *CalendarView::dateNavigator()
4806{ 4806{
4807 return mNavigator; 4807 return mNavigator;
4808} 4808}
4809 4809
4810KDateNavigator* CalendarView::dateNavigatorWidget() 4810KDateNavigator* CalendarView::dateNavigatorWidget()
4811{ 4811{
4812 return mDateNavigator->navigatorView(); 4812 return mDateNavigator->navigatorView();
4813} 4813}
4814void CalendarView::toggleDateNavigatorWidget() 4814void CalendarView::toggleDateNavigatorWidget()
4815{ 4815{
4816 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4816 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4817 4817
4818 if (!KOPrefs::instance()->mShowDateNavigator ) 4818 if (!KOPrefs::instance()->mShowDateNavigator )
4819 mDateNavigator->hide(); 4819 mDateNavigator->hide();
4820 else 4820 else
4821 mDateNavigator->show(); 4821 mDateNavigator->show();
4822} 4822}
4823void CalendarView::addView(KOrg::BaseView *view) 4823void CalendarView::addView(KOrg::BaseView *view)
4824{ 4824{
4825 mViewManager->addView(view); 4825 mViewManager->addView(view);
4826} 4826}
4827 4827
4828void CalendarView::showView(KOrg::BaseView *view) 4828void CalendarView::showView(KOrg::BaseView *view)
4829{ 4829{
4830 mViewManager->showView(view, mLeftFrame->isVisible()); 4830 mViewManager->showView(view, mLeftFrame->isVisible());
4831} 4831}
4832 4832
4833Incidence *CalendarView::currentSelection() 4833Incidence *CalendarView::currentSelection()
4834{ 4834{
4835 return mViewManager->currentSelection(); 4835 return mViewManager->currentSelection();
4836} 4836}
4837void CalendarView::toggleAllDaySize() 4837void CalendarView::toggleAllDaySize()
4838{ 4838{
4839 /* 4839 /*
4840 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4840 if ( KOPrefs::instance()->mAllDaySize > 47 )
4841 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4841 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4842 else 4842 else
4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4844 */ 4844 */
4845 viewManager()->agendaView()->toggleAllDay(); 4845 viewManager()->agendaView()->toggleAllDay();
4846} 4846}
4847void CalendarView::toggleExpand() 4847void CalendarView::toggleExpand()
4848{ 4848{
4849 // if ( mLeftFrame->isHidden() ) { 4849 // if ( mLeftFrame->isHidden() ) {
4850 // mLeftFrame->show(); 4850 // mLeftFrame->show();
4851 // emit calendarViewExpanded( false ); 4851 // emit calendarViewExpanded( false );
4852 // } else { 4852 // } else {
4853 // mLeftFrame->hide(); 4853 // mLeftFrame->hide();
4854 // emit calendarViewExpanded( true ); 4854 // emit calendarViewExpanded( true );
4855 // } 4855 // }
4856 //qDebug(" CalendarView::toggleExpand()"); 4856 //qDebug(" CalendarView::toggleExpand()");
4857 globalFlagBlockAgenda = 1; 4857 globalFlagBlockAgenda = 1;
4858 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4858 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4859 globalFlagBlockAgenda = 5; 4859 globalFlagBlockAgenda = 5;
4860 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4860 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4861 //mViewManager->showView( 0, true ); 4861 //mViewManager->showView( 0, true );
4862} 4862}
4863 4863
4864void CalendarView::calendarModified( bool modified, Calendar * ) 4864void CalendarView::calendarModified( bool modified, Calendar * )
4865{ 4865{
4866 setModified( modified ); 4866 setModified( modified );
4867} 4867}
4868 4868
4869Todo *CalendarView::selectedTodo() 4869Todo *CalendarView::selectedTodo()
4870{ 4870{
4871 Incidence *incidence = currentSelection(); 4871 Incidence *incidence = currentSelection();
4872 if ( incidence && incidence->typeID() == todoID ) { 4872 if ( incidence && incidence->typeID() == todoID ) {
4873 return static_cast<Todo *>( incidence ); 4873 return static_cast<Todo *>( incidence );
4874 } 4874 }
4875 4875
4876 incidence = mTodoList->selectedIncidences().first(); 4876 incidence = mTodoList->selectedIncidences().first();
4877 if ( incidence && incidence->typeID() == todoID ) { 4877 if ( incidence && incidence->typeID() == todoID ) {
4878 return static_cast<Todo *>( incidence ); 4878 return static_cast<Todo *>( incidence );
4879 } 4879 }
4880 4880
4881 return 0; 4881 return 0;
4882} 4882}
4883 4883
4884void CalendarView::showIncidence() 4884void CalendarView::showIncidence()
4885{ 4885{
4886 mViewerCallerIsSearchDialog = false; 4886 mViewerCallerIsSearchDialog = false;
4887 Incidence *incidence = currentSelection(); 4887 Incidence *incidence = currentSelection();
4888 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4888 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4889 if ( incidence ) { 4889 if ( incidence ) {
4890 ShowIncidenceVisitor v; 4890 ShowIncidenceVisitor v;
4891 v.act( incidence, this ); 4891 v.act( incidence, this );
4892 } 4892 }
4893} 4893}
4894void CalendarView::editIncidenceDescription() 4894void CalendarView::editIncidenceDescription()
4895{ 4895{
4896 mFlagEditDescription = true; 4896 mFlagEditDescription = true;
4897 editIncidence(); 4897 editIncidence();
4898 mFlagEditDescription = false; 4898 mFlagEditDescription = false;
4899} 4899}
4900void CalendarView::editIncidence() 4900void CalendarView::editIncidence()
4901{ 4901{
4902 // qDebug("editIncidence() "); 4902 // qDebug("editIncidence() ");
4903 Incidence *incidence = currentSelection(); 4903 Incidence *incidence = currentSelection();
4904 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4904 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4905 if ( incidence ) { 4905 if ( incidence ) {
4906 EditIncidenceVisitor v; 4906 EditIncidenceVisitor v;
4907 v.act( incidence, this ); 4907 v.act( incidence, this );
4908 } 4908 }
4909} 4909}
4910 4910
4911void CalendarView::deleteIncidence() 4911void CalendarView::deleteIncidence()
4912{ 4912{
4913 Incidence *incidence = currentSelection(); 4913 Incidence *incidence = currentSelection();
4914 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4914 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4915 if ( incidence ) { 4915 if ( incidence ) {
4916 deleteIncidence(incidence); 4916 deleteIncidence(incidence);
4917 } 4917 }
4918} 4918}
4919void CalendarView::showIncidence(QString uid) 4919void CalendarView::showIncidence(QString uid)
4920{ 4920{
4921 Incidence *inc = mCalendar->incidence( uid ); 4921 Incidence *inc = mCalendar->incidence( uid );
4922 if ( inc ) 4922 if ( inc )
4923 showIncidence( inc ); 4923 showIncidence( inc );
4924} 4924}
4925void CalendarView::showIncidence(Incidence *incidence) 4925void CalendarView::showIncidence(Incidence *incidence)
4926{ 4926{
4927 mViewerCallerIsSearchDialog = false; 4927 mViewerCallerIsSearchDialog = false;
4928 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4928 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4929 if ( sender() && mDialogManager->getSearchDialog() ) { 4929 if ( sender() && mDialogManager->getSearchDialog() ) {
4930 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4930 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4931 mViewerCallerIsSearchDialog = true; 4931 mViewerCallerIsSearchDialog = true;
4932 } 4932 }
4933 } 4933 }
4934 if ( incidence ) { 4934 if ( incidence ) {
4935 ShowIncidenceVisitor v; 4935 ShowIncidenceVisitor v;
4936 v.act( incidence, this ); 4936 v.act( incidence, this );
4937 } 4937 }
4938} 4938}
4939 4939
4940void CalendarView::editIncidence(Incidence *incidence) 4940void CalendarView::editIncidence(Incidence *incidence)
4941{ 4941{
4942 if ( incidence ) { 4942 if ( incidence ) {
4943 4943
4944 EditIncidenceVisitor v; 4944 EditIncidenceVisitor v;
4945 v.act( incidence, this ); 4945 v.act( incidence, this );
4946 4946
4947 } 4947 }
4948} 4948}
4949 4949
4950void CalendarView::deleteIncidence(Incidence *incidence) 4950void CalendarView::deleteIncidence(Incidence *incidence)
4951{ 4951{
4952 //qDebug(" CalendarView::deleteIncidence "); 4952 //qDebug(" CalendarView::deleteIncidence ");
4953 if ( incidence == 0 ) { 4953 if ( incidence == 0 ) {
4954 updateView(); 4954 updateView();
4955 emit updateSearchDialog(); 4955 emit updateSearchDialog();
4956 return; 4956 return;
4957 } 4957 }
4958 if ( incidence ) { 4958 if ( incidence ) {
4959 DeleteIncidenceVisitor v; 4959 DeleteIncidenceVisitor v;
4960 v.act( incidence, this ); 4960 v.act( incidence, this );
4961 } 4961 }
4962} 4962}
4963 4963
4964 4964
4965void CalendarView::lookForOutgoingMessages() 4965void CalendarView::lookForOutgoingMessages()
4966{ 4966{
4967 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 4967 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4968 ogd->loadMessages(); 4968 ogd->loadMessages();
4969} 4969}
4970 4970
4971void CalendarView::lookForIncomingMessages() 4971void CalendarView::lookForIncomingMessages()
4972{ 4972{
4973 IncomingDialog *icd = mDialogManager->incomingDialog(); 4973 IncomingDialog *icd = mDialogManager->incomingDialog();
4974 icd->retrieve(); 4974 icd->retrieve();
4975} 4975}
4976 4976
4977bool CalendarView::removeCompletedSubTodos( Todo* t ) 4977bool CalendarView::removeCompletedSubTodos( Todo* t )
4978{ 4978{
4979 bool deleteTodo = true; 4979 bool deleteTodo = true;
4980 QPtrList<Incidence> subTodos; 4980 QPtrList<Incidence> subTodos;
4981 Incidence *aTodo; 4981 Incidence *aTodo;
4982 subTodos = t->relations(); 4982 subTodos = t->relations();
4983 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 4983 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4984 if (! removeCompletedSubTodos( (Todo*) aTodo )) 4984 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4985 deleteTodo = false; 4985 deleteTodo = false;
4986 } 4986 }
4987 if ( deleteTodo ) { 4987 if ( deleteTodo ) {
4988 if ( t->isCompleted() && !t->doesRecur()) { 4988 if ( t->isCompleted() && !t->doesRecur()) {
4989 checkExternalId( t ); 4989 checkExternalId( t );
4990 mCalendar->deleteTodo( t ); 4990 mCalendar->deleteTodo( t );
4991 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 4991 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4992 } 4992 }
4993 else 4993 else
4994 deleteTodo = false; 4994 deleteTodo = false;
4995 } 4995 }
4996 return deleteTodo; 4996 return deleteTodo;
4997 4997
4998} 4998}
4999void CalendarView::purgeCompleted() 4999void CalendarView::purgeCompleted()
5000{ 5000{
5001 int result = KMessageBox::warningContinueCancel(this, 5001 int result = KMessageBox::warningContinueCancel(this,
5002 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5002 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5003 5003
5004 if (result == KMessageBox::Continue) { 5004 if (result == KMessageBox::Continue) {
5005 5005
5006 QPtrList<Todo> todoCal; 5006 QPtrList<Todo> todoCal;
5007 QPtrList<Todo> rootTodos; 5007 QPtrList<Todo> rootTodos;
5008 //QPtrList<Incidence> rel; 5008 //QPtrList<Incidence> rel;
5009 Todo *aTodo; 5009 Todo *aTodo;
5010 todoCal = calendar()->todos(); 5010 todoCal = calendar()->todos();
5011 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5011 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5012 if ( !aTodo->relatedTo() ) 5012 if ( !aTodo->relatedTo() )
5013 rootTodos.append( aTodo ); 5013 rootTodos.append( aTodo );
5014 } 5014 }
5015 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5015 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5016 removeCompletedSubTodos( aTodo ); 5016 removeCompletedSubTodos( aTodo );
5017 } 5017 }
5018 5018
5019 updateView(); 5019 updateView();
5020 } 5020 }
5021} 5021}
5022 5022
5023void CalendarView::slotCalendarChanged() 5023void CalendarView::slotCalendarChanged()
5024{ 5024{
5025 ; 5025 ;
5026} 5026}
5027 5027
5028void CalendarView::keyPressEvent ( QKeyEvent *e) 5028void CalendarView::keyPressEvent ( QKeyEvent *e)
5029{ 5029{
5030 //qDebug("CalendarView::keyPressEvent "); 5030 //qDebug("CalendarView::keyPressEvent ");
5031 e->ignore(); 5031 e->ignore();
5032} 5032}
5033 5033
5034 5034
5035bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 5035bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
5036{ 5036{
5037 5037
5038 if ( manager != mSyncManager) 5038 if ( manager != mSyncManager)
5039 qDebug("KO: Internal error-1. SyncManager mismatch "); 5039 qDebug("KO: Internal error-1. SyncManager mismatch ");
5040 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5040 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5041 qDebug("KO: SyncKDE request detected!"); 5041 qDebug("KO: SyncKDE request detected!");
5042 } 5042 }
5043 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5043 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5044 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5044 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5045 return syncCalendar( filename, mode ); 5045 return syncCalendar( filename, mode );
5046} 5046}
5047bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5047bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5048{ 5048{
5049 //mSyncManager = manager; 5049 //mSyncManager = manager;
5050 if ( manager != mSyncManager) 5050 if ( manager != mSyncManager)
5051 qDebug("KO: Internal error-2. SyncManager mismatch "); 5051 qDebug("KO: Internal error-2. SyncManager mismatch ");
5052 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5052 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5053 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5053 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5054 if ( resource == "sharp" ) 5054 if ( resource == "sharp" )
5055 syncExternal( 0 ); 5055 syncExternal( 0 );
5056 if ( resource == "phone" ) 5056 if ( resource == "phone" )
5057 syncExternal( 1 ); 5057 syncExternal( 1 );
5058 // pending setmodified 5058 // pending setmodified
5059 return true; 5059 return true;
5060} 5060}
5061void CalendarView::setSyncManager(KSyncManager* manager) 5061void CalendarView::setSyncManager(KSyncManager* manager)
5062{ 5062{
5063 mSyncManager = manager; 5063 mSyncManager = manager;
5064} 5064}
5065 5065
5066void CalendarView::removeSyncInfo( QString syncProfile) 5066void CalendarView::removeSyncInfo( QString syncProfile)
5067{ 5067{
5068 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5068 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5069 mCalendar->removeSyncInfo( syncProfile ); 5069 mCalendar->removeSyncInfo( syncProfile );
5070 5070
5071} 5071}
5072 5072
5073void CalendarView::undo_delete() 5073void CalendarView::undo_delete()
5074{ 5074{
5075 //qDebug("undo_delete() "); 5075 //qDebug("undo_delete() ");
5076 Incidence* undo = mCalendar->undoIncidence(); 5076 Incidence* undo = mCalendar->undoIncidence();
5077 if ( !undo ) { 5077 if ( !undo ) {
5078 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5078 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5079 i18n("KO/Pi")); 5079 i18n("KO/Pi"));
5080 return; 5080 return;
5081 } 5081 }
5082 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5082 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5083 i18n("\nAre you sure you want\nto restore this?"), 5083 i18n("\nAre you sure you want\nto restore this?"),
5084 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5084 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5085 mCalendar->undoDeleteIncidence(); 5085 mCalendar->undoDeleteIncidence();
5086 updateView(); 5086 updateView();
5087 } 5087 }
5088} 5088}
5089 5089
5090void CalendarView::slotViewerClosed() 5090void CalendarView::slotViewerClosed()
5091{ 5091{
5092 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5092 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5093} 5093}
5094 5094
5095void CalendarView::resetFocus() 5095void CalendarView::resetFocus()
5096{ 5096{
5097 if ( mViewerCallerIsSearchDialog ) { 5097 if ( mViewerCallerIsSearchDialog ) {
5098 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5098 if ( mDialogManager->getSearchDialog()->isVisible() ){
5099 mDialogManager->getSearchDialog()->raise(); 5099 mDialogManager->getSearchDialog()->raise();
5100 mDialogManager->getSearchDialog()->setActiveWindow(); 5100 mDialogManager->getSearchDialog()->setActiveWindow();
5101 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5101 mDialogManager->getSearchDialog()->listview()->resetFocus();
5102 } else 5102 } else
5103 mViewerCallerIsSearchDialog = false; 5103 mViewerCallerIsSearchDialog = false;
5104 } 5104 }
5105 if ( !mViewerCallerIsSearchDialog ) { 5105 if ( !mViewerCallerIsSearchDialog ) {
5106 //mViewManager->currentView()->setFocus(); 5106 //mViewManager->currentView()->setFocus();
5107 //qDebug("sssssssssssssssset focus "); 5107 //qDebug("sssssssssssssssset focus ");
5108 topLevelWidget()->raise(); 5108 topLevelWidget()->raise();
5109 setActiveWindow(); 5109 setActiveWindow();
5110 //setFocus(); 5110 //setFocus();
5111 } 5111 }
5112 mViewerCallerIsSearchDialog = false; 5112 mViewerCallerIsSearchDialog = false;
5113} 5113}
5114 5114
5115void CalendarView::showNextAlarms() 5115void CalendarView::showNextAlarms()
5116{ 5116{
5117 QString message; 5117 QString message;
5118 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5118 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
5119 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5119 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
5120 QString sum = mCalendar->nextSummary(); 5120 QString sum = mCalendar->nextSummary();
5121 QDateTime nextA = mNextAlarmDateTime; 5121 QDateTime nextA = mNextAlarmDateTime;
5122 QDateTime cur = QDateTime::currentDateTime(); 5122 QDateTime cur = QDateTime::currentDateTime();
5123 int secs = cur.secsTo( nextA ); 5123 int secs = cur.secsTo( nextA );
5124 int min = secs /60; 5124 int min = secs /60;
5125 int hours = min /60; 5125 int hours = min /60;
5126 min = min % 60; 5126 min = min % 60;
5127 int days = hours /24; 5127 int days = hours /24;
5128 hours = hours % 24; 5128 hours = hours % 24;
5129 5129
5130 //message = i18n("The next alarm is in:\n"); 5130 //message = i18n("The next alarm is in:\n");
5131 if ( days > 1 ) 5131 if ( days > 1 )
5132 message += i18n("%1 days\n").arg( days ); 5132 message += i18n("%1 days\n").arg( days );
5133 else if ( days == 1 ) 5133 else if ( days == 1 )
5134 message += i18n("1 day\n"); 5134 message += i18n("1 day\n");
5135 if ( hours > 1 ) 5135 if ( hours > 1 )
5136 message += i18n("%1 hours\n").arg( hours ); 5136 message += i18n("%1 hours\n").arg( hours );
5137 else if ( hours == 1 ) 5137 else if ( hours == 1 )
5138 message += i18n("1 hour\n"); 5138 message += i18n("1 hour\n");
5139 if ( min > 1 ) 5139 if ( min > 1 )
5140 message += i18n("%1 minutes\n").arg( min ); 5140 message += i18n("%1 minutes\n").arg( min );
5141 else if ( min == 1 ) 5141 else if ( min == 1 )
5142 message += i18n("1 minute\n"); 5142 message += i18n("1 minute\n");
5143 if ( message.isEmpty() ) 5143 if ( message.isEmpty() )
5144 message = i18n("The next alarm is in\nless than one minute!"); 5144 message = i18n("The next alarm is in\nless than one minute!");
5145 else 5145 else
5146 message = i18n("The next alarm is in:\n") + message; 5146 message = i18n("The next alarm is in:\n") + message;
5147 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5147 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
5148 } else { 5148 } else {
5149 message = i18n("There is no next alarm."); 5149 message = i18n("There is no next alarm.");
5150 5150
5151 } 5151 }
5152#ifdef DESKTOP_VERSION 5152#ifdef DESKTOP_VERSION
5153 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5153 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
5154 message += i18n("\nThe internal alarm notification is disabled!\n"); 5154 message += i18n("\nThe internal alarm notification is disabled!\n");
5155 message += i18n("Enable it in the settings menu, TAB alarm."); 5155 message += i18n("Enable it in the settings menu, TAB alarm.");
5156 } 5156 }
5157 5157
5158#endif 5158#endif
5159 KMessageBox::information( this, message); 5159 KMessageBox::information( this, message);
5160} 5160}