summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-07-31 12:48:10 (UTC)
committer zautrix <zautrix>2005-07-31 12:48:10 (UTC)
commit4fa00d59fd2895036e9f3bce7902bf6360679a0b (patch) (unidiff)
tree6d66c464aac30fc4aa9d5ace6ed08feb075a0182
parent40d43ebcc70748da775532a16f187c733aca8c8e (diff)
downloadkdepimpi-4fa00d59fd2895036e9f3bce7902bf6360679a0b.zip
kdepimpi-4fa00d59fd2895036e9f3bce7902bf6360679a0b.tar.gz
kdepimpi-4fa00d59fd2895036e9f3bce7902bf6360679a0b.tar.bz2
creating tt test data
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp204
-rw-r--r--korganizer/calendarview.h1
2 files changed, 202 insertions, 3 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index a1b1d71..8269910 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,2441 +1,2639 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy (NoFocus ); 370 setFocusPolicy (NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 mConflictingEvent = 0; 373 mConflictingEvent = 0;
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 480
481 mTodoList->setNavigator( mNavigator ); 481 mTodoList->setNavigator( mNavigator );
482#if 0 482#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 483 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 484 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 485 leftFrameLayout->addWidget(mTodoList, 2 );
486 486
487 } else { 487 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 488 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 489 leftFrameLayout->addWidget(mFilterView );
490 } 490 }
491#endif 491#endif
492 mFilterView->hide(); 492 mFilterView->hide();
493 mCalEditView->hide(); 493 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 494 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 495 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 497 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 498 rightLayout->addWidget( mRightFrame, 10 );
499 499
500 //mLeftFrame = (QWidget *)leftFrame; 500 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 501 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 506 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 510 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 511 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 512 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 513 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 514#endif
515 515
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 517 SLOT( showDates( const KCal::DateList & ) ) );
518 518
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 521
522 522
523 523
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 525 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 526
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 528 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 529
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 530 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 531 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 532 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 533 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 534 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 535 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 536 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 537 mNavigator, SLOT( selectNextMonth() ) );
538 538
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 539 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 540 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 541 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 542 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 544 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 545
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 548#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 550 SLOT( incidenceAdded( Incidence *) ) );
551#endif 551#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 553
554 connect( this, SIGNAL( configChanged() ), 554 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 555 mDateNavigator, SLOT( updateConfig() ) );
556 556
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 557 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 558 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 560 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 562 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 564 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 566 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 569 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 571 SIGNAL( todoModified( Todo *, int ) ) );
572 572
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 574 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 576 this, SLOT (cancelIncidence( Incidence * ) ) );
577 577
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 579 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 581 this, SLOT ( beamIncidence( Incidence * ) ) );
582 582
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 584 this, SLOT ( todo_unsub( Todo * ) ) );
585 585
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 587 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 589 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 590 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 591 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 592
593 593
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 598
599 599
600 600
601 601
602 602
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 603 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 604 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 606 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 608
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 609 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 610
611 mDateFrame = new QVBox(0,0,WType_Popup); 611 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 614 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 615 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 616 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 618
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 620
621 mEventEditor = mDialogManager->getEventEditor(); 621 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 622 mTodoEditor = mDialogManager->getTodoEditor();
623 623
624 mFlagEditDescription = false; 624 mFlagEditDescription = false;
625 625
626 mSuspendTimer = new QTimer( this ); 626 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 627 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 628 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 632 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 634 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 636
637 637
638#ifndef DESKTOP_VERSION 638#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 639//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 642#endif
643 mDateNavigator->setCalendar( mCalendar ); 643 mDateNavigator->setCalendar( mCalendar );
644} 644}
645 645
646 646
647CalendarView::~CalendarView() 647CalendarView::~CalendarView()
648{ 648{
649 // kdDebug() << "~CalendarView()" << endl; 649 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 650 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 651 delete mDialogManager;
652 delete mViewManager; 652 delete mViewManager;
653 delete mStorage; 653 delete mStorage;
654 delete mDateFrame ; 654 delete mDateFrame ;
655 delete mEventViewerDialog; 655 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 656 //kdDebug() << "~CalendarView() done" << endl;
657} 657}
658 658
659 659
660void CalendarView::nextConflict( bool all, bool allday ) 660void CalendarView::nextConflict( bool all, bool allday )
661{ 661{
662 static bool block = false; 662 static bool block = false;
663 if ( block ) return; 663 if ( block ) return;
664 block = true; 664 block = true;
665 QPtrList<Event> testlist = mCalendar->events(); 665 QPtrList<Event> testlist = mCalendar->events();
666 Event * test = testlist.first(); 666 Event * test = testlist.first();
667 while ( test ) { 667 while ( test ) {
668 test->setTagged( false ); 668 test->setTagged( false );
669 test = testlist.next(); 669 test = testlist.next();
670 } 670 }
671 QTime st ( 0,0,0); 671 QTime st ( 0,0,0);
672 if ( mViewManager->currentView() == mViewManager->agendaView() ) 672 if ( mViewManager->currentView() == mViewManager->agendaView() )
673 st = mViewManager->agendaView()->agenda()->getEndTime(); 673 st = mViewManager->agendaView()->agenda()->getEndTime();
674 //qDebug("time %s ", st.toString().latin1()); 674 //qDebug("time %s ", st.toString().latin1());
675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
676 QDateTime conflict; 676 QDateTime conflict;
677 QDateTime retVal; 677 QDateTime retVal;
678 bool found = false; 678 bool found = false;
679 Event * cE = 0; 679 Event * cE = 0;
680 Event * cE2 = 0; 680 Event * cE2 = 0;
681 QPtrList<Event> testlist2 = testlist; 681 QPtrList<Event> testlist2 = testlist;
682 test = testlist.first(); 682 test = testlist.first();
683 bool skip = false; 683 bool skip = false;
684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm; 685 //QTime tm;
686 //tm.start(); 686 //tm.start();
687 while ( test ) { 687 while ( test ) {
688 qApp->processEvents(); 688 qApp->processEvents();
689 skip = false; 689 skip = false;
690 if ( !all ) skip = ( allday != test->doesFloat() ); 690 if ( !all ) skip = ( allday != test->doesFloat() );
691 if ( !skip ) { 691 if ( !skip ) {
692 if ( found ) 692 if ( found )
693 skip = !test->matchTime( &startDT, &conflict ); 693 skip = !test->matchTime( &startDT, &conflict );
694 else 694 else
695 skip = !test->matchTime( &startDT, 0 ); 695 skip = !test->matchTime( &startDT, 0 );
696 } 696 }
697 if ( !skip ) { 697 if ( !skip ) {
698 Event * test2 = testlist2.first(); 698 Event * test2 = testlist2.first();
699 while ( test2 ) { 699 while ( test2 ) {
700 skip = test2->isTagged(); 700 skip = test2->isTagged();
701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) { 702 if ( !skip ) {
703 if ( found ) 703 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict ); 704 skip = !test2->matchTime( &startDT, &conflict );
705 else 705 else
706 skip = !test2->matchTime( &startDT, 0 ); 706 skip = !test2->matchTime( &startDT, 0 );
707 } 707 }
708 if ( !skip ) { 708 if ( !skip ) {
709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
710 //qDebug("overlap "); 710 //qDebug("overlap ");
711 if ( ! found ) { 711 if ( ! found ) {
712 if ( retVal >= startDT ) { 712 if ( retVal >= startDT ) {
713 conflict = retVal; 713 conflict = retVal;
714 cE = test; 714 cE = test;
715 cE2 = test2; 715 cE2 = test2;
716 found = true; 716 found = true;
717 } 717 }
718 } else { 718 } else {
719 if ( retVal >= startDT && retVal < conflict ) { 719 if ( retVal >= startDT && retVal < conflict ) {
720 conflict = retVal; 720 conflict = retVal;
721 cE = test; 721 cE = test;
722 cE2 = test2; 722 cE2 = test2;
723 } 723 }
724 } 724 }
725 } 725 }
726 } 726 }
727 test2 = testlist2.next(); 727 test2 = testlist2.next();
728 } 728 }
729 } 729 }
730 test->setTagged( true ); 730 test->setTagged( true );
731 test = testlist.next(); 731 test = testlist.next();
732 } 732 }
733 //qDebug("Search time : %d", tm.elapsed()); 733 //qDebug("Search time : %d", tm.elapsed());
734 if ( found ) { 734 if ( found ) {
735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
736 mViewManager->showDayView(); 736 mViewManager->showDayView();
737 mNavigator->slotDaySelect( conflict.date() ); 737 mNavigator->slotDaySelect( conflict.date() );
738 int hour = conflict.time().hour(); 738 int hour = conflict.time().hour();
739 mViewManager->agendaView()->setStartHour( hour ); 739 mViewManager->agendaView()->setStartHour( hour );
740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
741 block = false; 741 block = false;
742 return; 742 return;
743 } 743 }
744 744
745 topLevelWidget()->setCaption( i18n("No conflict found") ); 745 topLevelWidget()->setCaption( i18n("No conflict found") );
746 //qDebug("No conflict found "); 746 //qDebug("No conflict found ");
747 block = false; 747 block = false;
748 return; 748 return;
749} 749}
750 750
751void CalendarView::conflictAll() 751void CalendarView::conflictAll()
752{ 752{
753 nextConflict ( true, true ); 753 nextConflict ( true, true );
754} 754}
755void CalendarView::conflictAllday() 755void CalendarView::conflictAllday()
756{ 756{
757 nextConflict ( false, true ); 757 nextConflict ( false, true );
758} 758}
759void CalendarView::conflictNotAll() 759void CalendarView::conflictNotAll()
760{ 760{
761 nextConflict ( false, false ); 761 nextConflict ( false, false );
762} 762}
763 763
764void CalendarView::setCalReadOnly( int id, bool readO ) 764void CalendarView::setCalReadOnly( int id, bool readO )
765{ 765{
766 if ( readO ) { 766 if ( readO ) {
767 emit save(); 767 emit save();
768 } 768 }
769 mCalendar->setReadOnly( id, readO ); 769 mCalendar->setReadOnly( id, readO );
770} 770}
771void CalendarView::setScrollBarStep(int val ) 771void CalendarView::setScrollBarStep(int val )
772{ 772{
773#ifdef DESKTOP_VERSION 773#ifdef DESKTOP_VERSION
774 mDateScrollBar->setLineStep ( val ); 774 mDateScrollBar->setLineStep ( val );
775#endif 775#endif
776} 776}
777void CalendarView::scrollBarValue(int val ) 777void CalendarView::scrollBarValue(int val )
778{ 778{
779#ifdef DESKTOP_VERSION 779#ifdef DESKTOP_VERSION
780 if ( QApplication::desktop()->width() < 800 ) return; 780 if ( QApplication::desktop()->width() < 800 ) return;
781 static bool block = false; 781 static bool block = false;
782 if ( block ) return; 782 if ( block ) return;
783 block = true; 783 block = true;
784 int count = mNavigator->selectedDates().count(); 784 int count = mNavigator->selectedDates().count();
785 int day = mNavigator->selectedDates().first().dayOfYear(); 785 int day = mNavigator->selectedDates().first().dayOfYear();
786 int stepdays = val; 786 int stepdays = val;
787 if ( mDateScrollBar->lineStep () <= count ) { 787 if ( mDateScrollBar->lineStep () <= count ) {
788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
789 //qDebug("VAL %d ",val ); 789 //qDebug("VAL %d ",val );
790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
791 stepdays = day+stepdays; 791 stepdays = day+stepdays;
792 if ( stepdays < 0 ) stepdays = 0; 792 if ( stepdays < 0 ) stepdays = 0;
793 } 793 }
794 if ( stepdays == day ) { 794 if ( stepdays == day ) {
795 block = false; 795 block = false;
796 return; 796 return;
797 } 797 }
798 int year = mNavigator->selectedDates().first().year(); 798 int year = mNavigator->selectedDates().first().year();
799 QDate d ( year,1,1 ); 799 QDate d ( year,1,1 );
800 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 800 mNavigator->selectDates( d.addDays( stepdays-1) , count );
801 block = false; 801 block = false;
802#endif 802#endif
803 803
804} 804}
805void CalendarView::updateView(const QDate &start, const QDate &end) 805void CalendarView::updateView(const QDate &start, const QDate &end)
806{ 806{
807#ifdef DESKTOP_VERSION 807#ifdef DESKTOP_VERSION
808 if ( ! mDateScrollBar->draggingSlider () ) { 808 if ( ! mDateScrollBar->draggingSlider () ) {
809 int dof = start.dayOfYear(); 809 int dof = start.dayOfYear();
810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
811 if ( dof != mDateScrollBar->value() ) { 811 if ( dof != mDateScrollBar->value() ) {
812 mDateScrollBar->blockSignals( true ); 812 mDateScrollBar->blockSignals( true );
813 mDateScrollBar->setValue( start.dayOfYear()); 813 mDateScrollBar->setValue( start.dayOfYear());
814 mDateScrollBar->blockSignals( false ); 814 mDateScrollBar->blockSignals( false );
815 } 815 }
816 } 816 }
817#endif 817#endif
818 mTodoList->updateView(); 818 mTodoList->updateView();
819 mViewManager->updateView(start, end); 819 mViewManager->updateView(start, end);
820 //mDateNavigator->updateView(); 820 //mDateNavigator->updateView();
821} 821}
822 822
823 823
824 824
825void CalendarView::checkFiles() 825void CalendarView::checkFiles()
826{ 826{
827 QString message; 827 QString message;
828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
829 KopiCalendarFile * cal = calendars.first(); 829 KopiCalendarFile * cal = calendars.first();
830 while ( cal ) { 830 while ( cal ) {
831 if ( cal->mErrorOnLoad ) { 831 if ( cal->mErrorOnLoad ) {
832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
833 } 833 }
834 cal = calendars.next(); 834 cal = calendars.next();
835 } 835 }
836 if ( !message.isEmpty() ) { 836 if ( !message.isEmpty() ) {
837 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 837 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
839 } 839 }
840 static bool firstTime = true; 840 static bool firstTime = true;
841 if ( firstTime ) { 841 if ( firstTime ) {
842 firstTime = false; 842 firstTime = false;
843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
844 } 844 }
845} 845}
846void CalendarView::checkAlarms() 846void CalendarView::checkAlarms()
847{ 847{
848
849
850 KConfig *config = KOGlobals::config(); 848 KConfig *config = KOGlobals::config();
851 config->setGroup( "AppRun" ); 849 config->setGroup( "AppRun" );
852 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
853 int daysto = dt.daysTo( QDate::currentDate() ); 851 int daysto = dt.daysTo( QDate::currentDate() );
854 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
855 dt = dt.addDays( days ); 853 dt = dt.addDays( days );
856 int secto = dt.secsTo( QDateTime::currentDateTime() ); 854 int secto = dt.secsTo( QDateTime::currentDateTime() );
857 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
858 //qDebug("KO: Reading program stop %d ", secs); 856 //qDebug("KO: Reading program stop %d ", secs);
859 //secs -= ( 3600 * 24*3 ); // debug only 857 //secs -= ( 3600 * 24*3 ); // debug only
860 QDateTime latest = dt.addSecs ( secs ); 858 QDateTime latest = dt.addSecs ( secs );
861 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 859 qDebug("KO: Last termination on %s ", latest.toString().latin1());
862 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
863 QPtrList<Incidence> el = mCalendar->rawIncidences(); 861 QPtrList<Incidence> el = mCalendar->rawIncidences();
864 QPtrList<Incidence> al; 862 QPtrList<Incidence> al;
865 Incidence* inL = el.first(); 863 Incidence* inL = el.first();
866 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
867 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
868 while ( inL ) { 866 while ( inL ) {
869 bool ok = false; 867 bool ok = false;
870 int offset = 0; 868 int offset = 0;
871 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
872 if ( ok ) { 870 if ( ok ) {
873 //qDebug("OK %s",next.toString().latin1()); 871 //qDebug("OK %s",next.toString().latin1());
874 if ( next < cur ) { 872 if ( next < cur ) {
875 al.append( inL ); 873 al.append( inL );
876 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 874 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
877 } 875 }
878 } 876 }
879 inL = el.next(); 877 inL = el.next();
880 } 878 }
881 if ( al.count() ) { 879 if ( al.count() ) {
882 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
883 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 881 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
884 QVBoxLayout* lay = new QVBoxLayout( dia ); 882 QVBoxLayout* lay = new QVBoxLayout( dia );
885 lay->setSpacing( 0 ); 883 lay->setSpacing( 0 );
886 lay->setMargin( 0 ); 884 lay->setMargin( 0 );
887 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
888 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
889 lay->addWidget( matb ); 887 lay->addWidget( matb );
890 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
891 int wid = 210; 889 int wid = 210;
892 int x = QApplication::desktop()->width() - wid - 7; 890 int x = QApplication::desktop()->width() - wid - 7;
893 int y = QApplication::desktop()->height() - wid - 70; 891 int y = QApplication::desktop()->height() - wid - 70;
894 dia->setGeometry ( x,y,wid,wid); 892 dia->setGeometry ( x,y,wid,wid);
895 } else { 893 } else {
896 int si = 220; 894 int si = 220;
897 if ( QApplication::desktop()->width() > 470 ) 895 if ( QApplication::desktop()->width() > 470 )
898 si = 400; 896 si = 400;
899 dia->resize(si,si/2); 897 dia->resize(si,si/2);
900 } 898 }
901 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 899 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
902 dia->show(); 900 dia->show();
903 901
904 } 902 }
903#if 0
904 // for creating timetracker test data
905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
906 Todo * nt;
907 mCalendar->close();
908 {
909 Todo * root1 = new Todo;
910 mCalendar->addTodo( root1 );
911 root1->setSummary( "Project_1");
912 root1->setPriority( 1 );
913 root1->setDescription( "This is a test description of a root Project" );
914 root1->setPercentComplete( 20 );
915 updateView();
916 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
917 QDateTime end = QDateTime ( QDate( 2005,8,1), QTime ( 0,0,0) );
918
919 nt = new Todo;
920 mCalendar->addTodo( nt );
921 nt->setSummary( "Planning_Project_1");
922 nt->setPriority( 1 );
923 nt->setDescription( "This is a test description of Planning_Project_1" );
924 nt->setPercentComplete( 20 );
925
926
927 Todo * sub1 = nt;
928 sub1->setRelatedTo( root1 );
929
930 nt = new Todo;
931 mCalendar->addTodo( nt );
932 nt->setSummary( "Planning_Project_1: Lutz");
933 nt->setPriority( 1 );
934 nt->setDescription( "This todo counts the actual work of a person on a project" );
935 nt->setPercentComplete( 20 );
936 Todo * workLutz11 = nt;
937 workLutz11->setRelatedTo( sub1 );
938
939 nt = new Todo;
940 mCalendar->addTodo( nt );
941 nt->setSummary( "Planning_Project_1: Norbert");
942 nt->setPriority( 1 );
943 nt->setDescription( "This todo counts the actual work of a person on a project" );
944 nt->setPercentComplete( 20 );
945 Todo * workNorbert11 = nt;
946 workNorbert11->setRelatedTo( sub1 );
947
948 nt = new Todo;
949 mCalendar->addTodo( nt );
950 nt->setSummary( "Work on 1");
951 nt->setPriority( 1 );
952 nt->setDescription( "This is a test description of Work Project_1" );
953 nt->setPercentComplete( 20 );
954
955 Todo * sub2 = nt;
956 sub2->setRelatedTo( root1 );
957
958
959 nt = new Todo;
960 mCalendar->addTodo( nt );
961 nt->setSummary( "Work on 1: Lutz");
962 nt->setPriority( 1 );
963 nt->setDescription( "This todo counts the actual work of a person on a project" );
964 nt->setPercentComplete( 20 );
965 Todo * workLutz12 = nt;
966 workLutz12->setRelatedTo( sub2 );
967
968 nt = new Todo;
969 mCalendar->addTodo( nt );
970 nt->setSummary( "Work on 1: Norbert");
971 nt->setPriority( 1 );
972 nt->setDescription( "This todo counts the actual work of a person on a project" );
973 nt->setPercentComplete( 20 );
974 Todo * workNorbert12 = nt;
975 workNorbert12->setRelatedTo( sub2 );
976
977 int secLenRunning = 7200;
978 int secLenPausing = 3600 * 3;
979 int dayInterval = 1;
980 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
981 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
982 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
983 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
984 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
985 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
986 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
987 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
988
989 }
990
991 {
992 Todo * root1 = new Todo;
993 mCalendar->addTodo( root1 );
994 root1->setSummary( "Project_2");
995 root1->setPriority( 1 );
996 root1->setDescription( "This is a test description of a root Project 2" );
997 root1->setPercentComplete( 20 );
998 updateView();
999 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1000 QDateTime end = QDateTime ( QDate( 2005,8,1), QTime ( 0,0,0) );
1001 int secLenRunning = 7200;
1002 int secLenPausing = 3600 * 3;
1003 int dayInterval = 1;
1004
1005 nt = new Todo;
1006 mCalendar->addTodo( nt );
1007 nt->setSummary( "Planning_Project_2");
1008 nt->setPriority( 1 );
1009 nt->setDescription( "This is a test description of Planning_Project_2" );
1010 nt->setPercentComplete( 20 );
1011
1012
1013 Todo * sub1 = nt;
1014 sub1->setRelatedTo( root1 );
1015
1016 nt = new Todo;
1017 mCalendar->addTodo( nt );
1018 nt->setSummary( "Planning_Project_2: Lutz");
1019 nt->setPriority( 1 );
1020 nt->setDescription( "This todo counts the actual work of a person on a project" );
1021 nt->setPercentComplete( 20 );
1022 Todo * workLutz11 = nt;
1023 workLutz11->setRelatedTo( sub1 );
1024
1025 nt = new Todo;
1026 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning_Project_2: Norbert");
1028 nt->setPriority( 1 );
1029 nt->setDescription( "This todo counts the actual work of a person on a project" );
1030 nt->setPercentComplete( 20 );
1031 Todo * workNorbert11 = nt;
1032 workNorbert11->setRelatedTo( sub1 );
1033
1034 nt = new Todo;
1035 mCalendar->addTodo( nt );
1036 nt->setSummary( "Work on 2");
1037 nt->setPriority( 1 );
1038 nt->setDescription( "This is a test description of Work Project_2" );
1039 nt->setPercentComplete( 20 );
1040
1041 Todo * sub2 = nt;
1042 sub2->setRelatedTo( root1 );
1043
1044
1045 nt = new Todo;
1046 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2: Lutz");
1048 nt->setPriority( 1 );
1049 nt->setDescription( "This todo counts the actual work of a person on a project" );
1050 nt->setPercentComplete( 20 );
1051 Todo * workLutz12 = nt;
1052 workLutz12->setRelatedTo( sub2 );
1053
1054 nt = new Todo;
1055 mCalendar->addTodo( nt );
1056 nt->setSummary( "Work on 2: Norbert");
1057 nt->setPriority( 1 );
1058 nt->setDescription( "This todo counts the actual work of a person on a project" );
1059 nt->setPercentComplete( 20 );
1060 Todo * workNorbert12 = nt;
1061 workNorbert12->setRelatedTo( sub2 );
1062 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1063 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1064 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1065 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1066 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1067 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1068 createRunningDate4Todo( workNorbert11, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1069 }
1070 updateView();
1071#endif
1072}
1073void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1074{
1075 static int ccc = 0;
1076 ++ccc;
1077 QDateTime t_start = start;
1078 runT->setPriority( 5 );
1079 runT->setPercentComplete( 0 );
1080 int count = 0;
1081 int prio = 5;
1082 int complete = 0;
1083 while ( t_start < end ) {
1084 ++count;
1085 if ( count > ccc ) {
1086 count = 0;
1087 --prio;
1088 if ( prio == 0 ) prio = 5;
1089 complete += 20;
1090 if ( complete > 100 ) complete = 0;
1091 runT->setPriority( prio );
1092 runT->setPercentComplete( complete );
1093 }
1094 runT->setRunning( true );
1095 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1096 if ( dayInterval )
1097 t_start = t_start.addDays( dayInterval );
1098 else {
1099 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1100 }
1101 }
905} 1102}
1103
906void CalendarView::showDay( QDate d ) 1104void CalendarView::showDay( QDate d )
907{ 1105{
908 dateNavigator()->blockSignals( true ); 1106 dateNavigator()->blockSignals( true );
909 dateNavigator()->selectDate( d ); 1107 dateNavigator()->selectDate( d );
910 dateNavigator()->blockSignals( false ); 1108 dateNavigator()->blockSignals( false );
911 mViewManager->showDayView(); 1109 mViewManager->showDayView();
912 //dateNavigator()->selectDate( d ); 1110 //dateNavigator()->selectDate( d );
913} 1111}
914void CalendarView::timerAlarm() 1112void CalendarView::timerAlarm()
915{ 1113{
916 //qDebug("CalendarView::timerAlarm() "); 1114 //qDebug("CalendarView::timerAlarm() ");
917 computeAlarm(mAlarmNotification ); 1115 computeAlarm(mAlarmNotification );
918} 1116}
919 1117
920void CalendarView::suspendAlarm() 1118void CalendarView::suspendAlarm()
921{ 1119{
922 //qDebug(" CalendarView::suspendAlarm() "); 1120 //qDebug(" CalendarView::suspendAlarm() ");
923 computeAlarm(mSuspendAlarmNotification ); 1121 computeAlarm(mSuspendAlarmNotification );
924 1122
925} 1123}
926 1124
927void CalendarView::startAlarm( QString mess , QString filename) 1125void CalendarView::startAlarm( QString mess , QString filename)
928{ 1126{
929 1127
930 topLevelWidget()->showNormal(); 1128 topLevelWidget()->showNormal();
931 topLevelWidget()->setActiveWindow(); 1129 topLevelWidget()->setActiveWindow();
932 topLevelWidget()->raise(); 1130 topLevelWidget()->raise();
933 1131
934 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1132 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
935 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1133 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
936 1134
937} 1135}
938 1136
939void CalendarView::checkNextTimerAlarm() 1137void CalendarView::checkNextTimerAlarm()
940{ 1138{
941 mCalendar->checkAlarmForIncidence( 0, true ); 1139 mCalendar->checkAlarmForIncidence( 0, true );
942} 1140}
943 1141
944void CalendarView::computeAlarm( QString msg ) 1142void CalendarView::computeAlarm( QString msg )
945{ 1143{
946 1144
947 QString mess = msg; 1145 QString mess = msg;
948 QString mAlarmMessage = mess.mid( 9 ); 1146 QString mAlarmMessage = mess.mid( 9 );
949 QString filename = MainWindow::resourcePath(); 1147 QString filename = MainWindow::resourcePath();
950 filename += "koalarm.wav"; 1148 filename += "koalarm.wav";
951 QString tempfilename; 1149 QString tempfilename;
952 if ( mess.left( 13 ) == "suspend_alarm") { 1150 if ( mess.left( 13 ) == "suspend_alarm") {
953 bool error = false; 1151 bool error = false;
954 int len = mess.mid( 13 ).find("+++"); 1152 int len = mess.mid( 13 ).find("+++");
955 if ( len < 2 ) 1153 if ( len < 2 )
956 error = true; 1154 error = true;
957 else { 1155 else {
958 tempfilename = mess.mid( 13, len ); 1156 tempfilename = mess.mid( 13, len );
959 if ( !QFile::exists( tempfilename ) ) 1157 if ( !QFile::exists( tempfilename ) )
960 error = true; 1158 error = true;
961 } 1159 }
962 if ( ! error ) { 1160 if ( ! error ) {
963 filename = tempfilename; 1161 filename = tempfilename;
964 } 1162 }
965 mAlarmMessage = mess.mid( 13+len+3 ); 1163 mAlarmMessage = mess.mid( 13+len+3 );
966 //qDebug("suspend file %s ",tempfilename.latin1() ); 1164 //qDebug("suspend file %s ",tempfilename.latin1() );
967 startAlarm( mAlarmMessage, filename); 1165 startAlarm( mAlarmMessage, filename);
968 return; 1166 return;
969 } 1167 }
970 if ( mess.left( 11 ) == "timer_alarm") { 1168 if ( mess.left( 11 ) == "timer_alarm") {
971 //mTimerTime = 0; 1169 //mTimerTime = 0;
972 startAlarm( mess.mid( 11 ), filename ); 1170 startAlarm( mess.mid( 11 ), filename );
973 return; 1171 return;
974 } 1172 }
975 if ( mess.left( 10 ) == "proc_alarm") { 1173 if ( mess.left( 10 ) == "proc_alarm") {
976 bool error = false; 1174 bool error = false;
977 int len = mess.mid( 10 ).find("+++"); 1175 int len = mess.mid( 10 ).find("+++");
978 if ( len < 2 ) 1176 if ( len < 2 )
979 error = true; 1177 error = true;
980 else { 1178 else {
981 tempfilename = mess.mid( 10, len ); 1179 tempfilename = mess.mid( 10, len );
982 if ( !QFile::exists( tempfilename ) ) 1180 if ( !QFile::exists( tempfilename ) )
983 error = true; 1181 error = true;
984 } 1182 }
985 if ( error ) { 1183 if ( error ) {
986 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1184 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
987 mAlarmMessage += mess.mid( 10+len+3+9 ); 1185 mAlarmMessage += mess.mid( 10+len+3+9 );
988 } else { 1186 } else {
989 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1187 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
990 //qDebug("-----system command %s ",tempfilename.latin1() ); 1188 //qDebug("-----system command %s ",tempfilename.latin1() );
991#ifndef _WIN32_ 1189#ifndef _WIN32_
992 if ( vfork () == 0 ) { 1190 if ( vfork () == 0 ) {
993 execl ( tempfilename.latin1(), 0 ); 1191 execl ( tempfilename.latin1(), 0 );
994 return; 1192 return;
995 } 1193 }
996#else 1194#else
997 QProcess* p = new QProcess(); 1195 QProcess* p = new QProcess();
998 p->addArgument( tempfilename.latin1() ); 1196 p->addArgument( tempfilename.latin1() );
999 p->start(); 1197 p->start();
1000 return; 1198 return;
1001#endif 1199#endif
1002 1200
1003 return; 1201 return;
1004 } 1202 }
1005 1203
1006 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1204 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1007 } 1205 }
1008 if ( mess.left( 11 ) == "audio_alarm") { 1206 if ( mess.left( 11 ) == "audio_alarm") {
1009 bool error = false; 1207 bool error = false;
1010 int len = mess.mid( 11 ).find("+++"); 1208 int len = mess.mid( 11 ).find("+++");
1011 if ( len < 2 ) 1209 if ( len < 2 )
1012 error = true; 1210 error = true;
1013 else { 1211 else {
1014 tempfilename = mess.mid( 11, len ); 1212 tempfilename = mess.mid( 11, len );
1015 if ( !QFile::exists( tempfilename ) ) 1213 if ( !QFile::exists( tempfilename ) )
1016 error = true; 1214 error = true;
1017 } 1215 }
1018 if ( ! error ) { 1216 if ( ! error ) {
1019 filename = tempfilename; 1217 filename = tempfilename;
1020 } 1218 }
1021 mAlarmMessage = mess.mid( 11+len+3+9 ); 1219 mAlarmMessage = mess.mid( 11+len+3+9 );
1022 //qDebug("audio file command %s ",tempfilename.latin1() ); 1220 //qDebug("audio file command %s ",tempfilename.latin1() );
1023 } 1221 }
1024 if ( mess.left( 9 ) == "cal_alarm") { 1222 if ( mess.left( 9 ) == "cal_alarm") {
1025 mAlarmMessage = mess.mid( 9 ) ; 1223 mAlarmMessage = mess.mid( 9 ) ;
1026 } 1224 }
1027 1225
1028 startAlarm( mAlarmMessage, filename ); 1226 startAlarm( mAlarmMessage, filename );
1029 1227
1030 1228
1031} 1229}
1032 1230
1033void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1231void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1034{ 1232{
1035 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1233 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1036 1234
1037 mSuspendAlarmNotification = noti; 1235 mSuspendAlarmNotification = noti;
1038 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1236 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1039 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1237 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1040 mSuspendTimer->start( ms , true ); 1238 mSuspendTimer->start( ms , true );
1041 1239
1042} 1240}
1043 1241
1044void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1242void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1045{ 1243{
1046 mNextAlarmDateTime = qdt; 1244 mNextAlarmDateTime = qdt;
1047 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1245 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1048 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1246 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1049#ifndef DESKTOP_VERSION 1247#ifndef DESKTOP_VERSION
1050 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1248 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1051#endif 1249#endif
1052 return; 1250 return;
1053 } 1251 }
1054 int maxSec; 1252 int maxSec;
1055 //maxSec = 5; //testing only 1253 //maxSec = 5; //testing only
1056 maxSec = 86400+3600; // one day+1hour 1254 maxSec = 86400+3600; // one day+1hour
1057 mAlarmNotification = noti; 1255 mAlarmNotification = noti;
1058 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1256 int sec = QDateTime::currentDateTime().secsTo( qdt );
1059 if ( sec > maxSec ) { 1257 if ( sec > maxSec ) {
1060 mRecheckAlarmTimer->start( maxSec * 1000 ); 1258 mRecheckAlarmTimer->start( maxSec * 1000 );
1061 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1259 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1062 return; 1260 return;
1063 } else { 1261 } else {
1064 mRecheckAlarmTimer->stop(); 1262 mRecheckAlarmTimer->stop();
1065 } 1263 }
1066 //qDebug("Alarm timer started with secs: %d ", sec); 1264 //qDebug("Alarm timer started with secs: %d ", sec);
1067 mAlarmTimer->start( sec *1000 , true ); 1265 mAlarmTimer->start( sec *1000 , true );
1068 1266
1069} 1267}
1070// called by mRecheckAlarmTimer to get next alarm 1268// called by mRecheckAlarmTimer to get next alarm
1071// we need this, because a QTimer has only a max range of 25 days 1269// we need this, because a QTimer has only a max range of 25 days
1072void CalendarView::recheckTimerAlarm() 1270void CalendarView::recheckTimerAlarm()
1073{ 1271{
1074 mAlarmTimer->stop(); 1272 mAlarmTimer->stop();
1075 mRecheckAlarmTimer->stop(); 1273 mRecheckAlarmTimer->stop();
1076 mCalendar->checkAlarmForIncidence( 0, true ); 1274 mCalendar->checkAlarmForIncidence( 0, true );
1077} 1275}
1078#ifndef DESKTOP_VERSION 1276#ifndef DESKTOP_VERSION
1079void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1277void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1080#else 1278#else
1081void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1279void CalendarView::removeAlarm(const QDateTime &, const QString & )
1082#endif 1280#endif
1083{ 1281{
1084 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1282 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1085 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1283 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1086#ifndef DESKTOP_VERSION 1284#ifndef DESKTOP_VERSION
1087 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1285 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1088#endif 1286#endif
1089 return; 1287 return;
1090 } 1288 }
1091 mAlarmTimer->stop(); 1289 mAlarmTimer->stop();
1092} 1290}
1093void CalendarView::selectWeekNum ( int num ) 1291void CalendarView::selectWeekNum ( int num )
1094{ 1292{
1095 dateNavigator()->blockSignals( true ); 1293 dateNavigator()->blockSignals( true );
1096 dateNavigator()->selectWeek( num ); 1294 dateNavigator()->selectWeek( num );
1097 dateNavigator()->blockSignals( false ); 1295 dateNavigator()->blockSignals( false );
1098 mViewManager->showWeekView(); 1296 mViewManager->showWeekView();
1099} 1297}
1100KOViewManager *CalendarView::viewManager() 1298KOViewManager *CalendarView::viewManager()
1101{ 1299{
1102 return mViewManager; 1300 return mViewManager;
1103} 1301}
1104 1302
1105KODialogManager *CalendarView::dialogManager() 1303KODialogManager *CalendarView::dialogManager()
1106{ 1304{
1107 return mDialogManager; 1305 return mDialogManager;
1108} 1306}
1109 1307
1110QDate CalendarView::startDate() 1308QDate CalendarView::startDate()
1111{ 1309{
1112 DateList dates = mNavigator->selectedDates(); 1310 DateList dates = mNavigator->selectedDates();
1113 1311
1114 return dates.first(); 1312 return dates.first();
1115} 1313}
1116 1314
1117QDate CalendarView::endDate() 1315QDate CalendarView::endDate()
1118{ 1316{
1119 DateList dates = mNavigator->selectedDates(); 1317 DateList dates = mNavigator->selectedDates();
1120 1318
1121 return dates.last(); 1319 return dates.last();
1122} 1320}
1123 1321
1124 1322
1125void CalendarView::createPrinter() 1323void CalendarView::createPrinter()
1126{ 1324{
1127#ifndef KORG_NOPRINTER 1325#ifndef KORG_NOPRINTER
1128 if (!mCalPrinter) { 1326 if (!mCalPrinter) {
1129 mCalPrinter = new CalPrinter(this, mCalendar); 1327 mCalPrinter = new CalPrinter(this, mCalendar);
1130 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1328 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1131 } 1329 }
1132#endif 1330#endif
1133} 1331}
1134 1332
1135 1333
1136//KOPrefs::instance()->mWriteBackFile 1334//KOPrefs::instance()->mWriteBackFile
1137//KOPrefs::instance()->mWriteBackExistingOnly 1335//KOPrefs::instance()->mWriteBackExistingOnly
1138 1336
1139// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1337// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1140// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1338// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1141// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1339// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1142// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1340// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1143// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1341// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1144// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1342// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1145 1343
1146int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1344int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1147{ 1345{
1148 1346
1149 // 0 equal 1347 // 0 equal
1150 // 1 take local 1348 // 1 take local
1151 // 2 take remote 1349 // 2 take remote
1152 // 3 cancel 1350 // 3 cancel
1153 QDateTime lastSync = mLastCalendarSync; 1351 QDateTime lastSync = mLastCalendarSync;
1154 QDateTime localMod = local->lastModified(); 1352 QDateTime localMod = local->lastModified();
1155 QDateTime remoteMod = remote->lastModified(); 1353 QDateTime remoteMod = remote->lastModified();
1156 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1354 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1157 bool remCh, locCh; 1355 bool remCh, locCh;
1158 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1356 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1159 //if ( remCh ) 1357 //if ( remCh )
1160 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1358 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1161 locCh = ( localMod > mLastCalendarSync ); 1359 locCh = ( localMod > mLastCalendarSync );
1162 if ( !remCh && ! locCh ) { 1360 if ( !remCh && ! locCh ) {
1163 //qDebug("both not changed "); 1361 //qDebug("both not changed ");
1164 lastSync = localMod.addDays(1); 1362 lastSync = localMod.addDays(1);
1165 if ( mode <= SYNC_PREF_ASK ) 1363 if ( mode <= SYNC_PREF_ASK )
1166 return 0; 1364 return 0;
1167 } else { 1365 } else {
1168 if ( locCh ) { 1366 if ( locCh ) {
1169 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1367 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1170 lastSync = localMod.addDays( -1 ); 1368 lastSync = localMod.addDays( -1 );
1171 if ( !remCh ) 1369 if ( !remCh )
1172 remoteMod = ( lastSync.addDays( -1 ) ); 1370 remoteMod = ( lastSync.addDays( -1 ) );
1173 } else { 1371 } else {
1174 //qDebug(" not loc changed "); 1372 //qDebug(" not loc changed ");
1175 lastSync = localMod.addDays( 1 ); 1373 lastSync = localMod.addDays( 1 );
1176 if ( remCh ) 1374 if ( remCh )
1177 remoteMod =( lastSync.addDays( 1 ) ); 1375 remoteMod =( lastSync.addDays( 1 ) );
1178 1376
1179 } 1377 }
1180 } 1378 }
1181 full = true; 1379 full = true;
1182 if ( mode < SYNC_PREF_ASK ) 1380 if ( mode < SYNC_PREF_ASK )
1183 mode = SYNC_PREF_ASK; 1381 mode = SYNC_PREF_ASK;
1184 } else { 1382 } else {
1185 if ( localMod == remoteMod ) 1383 if ( localMod == remoteMod )
1186 // if ( local->revision() == remote->revision() ) 1384 // if ( local->revision() == remote->revision() )
1187 return 0; 1385 return 0;
1188 1386
1189 } 1387 }
1190 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1388 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1191 1389
1192 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1390 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1193 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1391 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1194 //full = true; //debug only 1392 //full = true; //debug only
1195 if ( full ) { 1393 if ( full ) {
1196 bool equ = false; 1394 bool equ = false;
1197 if ( local->typeID() == eventID ) { 1395 if ( local->typeID() == eventID ) {
1198 equ = (*((Event*) local) == *((Event*) remote)); 1396 equ = (*((Event*) local) == *((Event*) remote));
1199 } 1397 }
1200 else if ( local->typeID() == todoID ) 1398 else if ( local->typeID() == todoID )
1201 equ = (*((Todo*) local) == (*(Todo*) remote)); 1399 equ = (*((Todo*) local) == (*(Todo*) remote));
1202 else if ( local->typeID() == journalID ) 1400 else if ( local->typeID() == journalID )
1203 equ = (*((Journal*) local) == *((Journal*) remote)); 1401 equ = (*((Journal*) local) == *((Journal*) remote));
1204 if ( equ ) { 1402 if ( equ ) {
1205 //qDebug("equal "); 1403 //qDebug("equal ");
1206 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1207 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1405 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1208 } 1406 }
1209 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1407 if ( mode < SYNC_PREF_FORCE_LOCAL )
1210 return 0; 1408 return 0;
1211 1409
1212 }//else //debug only 1410 }//else //debug only
1213 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1411 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1214 } 1412 }
1215 int result; 1413 int result;
1216 bool localIsNew; 1414 bool localIsNew;
1217 //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() ); 1415 //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() );
1218 1416
1219 1417
1220 // ************************************************ 1418 // ************************************************
1221 // ************************************************ 1419 // ************************************************
1222 // ************************************************ 1420 // ************************************************
1223 // We may have that lastSync > remoteMod AND lastSync > localMod 1421 // We may have that lastSync > remoteMod AND lastSync > localMod
1224 // BUT remoteMod != localMod 1422 // BUT remoteMod != localMod
1225 1423
1226 1424
1227 if ( full && mode < SYNC_PREF_NEWEST ) 1425 if ( full && mode < SYNC_PREF_NEWEST )
1228 mode = SYNC_PREF_ASK; 1426 mode = SYNC_PREF_ASK;
1229 1427
1230 switch( mode ) { 1428 switch( mode ) {
1231 case SYNC_PREF_LOCAL: 1429 case SYNC_PREF_LOCAL:
1232 if ( lastSync > remoteMod ) 1430 if ( lastSync > remoteMod )
1233 return 1; 1431 return 1;
1234 if ( lastSync > localMod ) 1432 if ( lastSync > localMod )
1235 return 2; 1433 return 2;
1236 return 1; 1434 return 1;
1237 break; 1435 break;
1238 case SYNC_PREF_REMOTE: 1436 case SYNC_PREF_REMOTE:
1239 if ( lastSync > localMod ) 1437 if ( lastSync > localMod )
1240 return 2; 1438 return 2;
1241 if ( lastSync > remoteMod ) 1439 if ( lastSync > remoteMod )
1242 return 1; 1440 return 1;
1243 return 2; 1441 return 2;
1244 break; 1442 break;
1245 case SYNC_PREF_NEWEST: 1443 case SYNC_PREF_NEWEST:
1246 if ( localMod >= remoteMod ) 1444 if ( localMod >= remoteMod )
1247 return 1; 1445 return 1;
1248 else 1446 else
1249 return 2; 1447 return 2;
1250 break; 1448 break;
1251 case SYNC_PREF_ASK: 1449 case SYNC_PREF_ASK:
1252 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1450 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1253 if ( lastSync > remoteMod && lastSync > localMod) 1451 if ( lastSync > remoteMod && lastSync > localMod)
1254 return 0; 1452 return 0;
1255 if ( lastSync > remoteMod ) 1453 if ( lastSync > remoteMod )
1256 return 1; 1454 return 1;
1257 if ( lastSync > localMod ) 1455 if ( lastSync > localMod )
1258 return 2; 1456 return 2;
1259 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1457 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1260 localIsNew = localMod >= remoteMod; 1458 localIsNew = localMod >= remoteMod;
1261 if ( localIsNew ) 1459 if ( localIsNew )
1262 getEventViewerDialog()->setColorMode( 1 ); 1460 getEventViewerDialog()->setColorMode( 1 );
1263 else 1461 else
1264 getEventViewerDialog()->setColorMode( 2 ); 1462 getEventViewerDialog()->setColorMode( 2 );
1265 getEventViewerDialog()->setIncidence(local); 1463 getEventViewerDialog()->setIncidence(local);
1266 if ( localIsNew ) 1464 if ( localIsNew )
1267 getEventViewerDialog()->setColorMode( 2 ); 1465 getEventViewerDialog()->setColorMode( 2 );
1268 else 1466 else
1269 getEventViewerDialog()->setColorMode( 1 ); 1467 getEventViewerDialog()->setColorMode( 1 );
1270 getEventViewerDialog()->addIncidence(remote); 1468 getEventViewerDialog()->addIncidence(remote);
1271 getEventViewerDialog()->setColorMode( 0 ); 1469 getEventViewerDialog()->setColorMode( 0 );
1272 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1470 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1273 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1471 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1274 getEventViewerDialog()->showMe(); 1472 getEventViewerDialog()->showMe();
1275 result = getEventViewerDialog()->executeS( localIsNew ); 1473 result = getEventViewerDialog()->executeS( localIsNew );
1276 return result; 1474 return result;
1277 1475
1278 break; 1476 break;
1279 case SYNC_PREF_FORCE_LOCAL: 1477 case SYNC_PREF_FORCE_LOCAL:
1280 return 1; 1478 return 1;
1281 break; 1479 break;
1282 case SYNC_PREF_FORCE_REMOTE: 1480 case SYNC_PREF_FORCE_REMOTE:
1283 return 2; 1481 return 2;
1284 break; 1482 break;
1285 1483
1286 default: 1484 default:
1287 // SYNC_PREF_TAKE_BOTH not implemented 1485 // SYNC_PREF_TAKE_BOTH not implemented
1288 break; 1486 break;
1289 } 1487 }
1290 return 0; 1488 return 0;
1291} 1489}
1292Event* CalendarView::getLastSyncEvent() 1490Event* CalendarView::getLastSyncEvent()
1293{ 1491{
1294 Event* lse; 1492 Event* lse;
1295 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1493 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1296 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1494 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1297 if (!lse) { 1495 if (!lse) {
1298 lse = new Event(); 1496 lse = new Event();
1299 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1497 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1300 QString sum = ""; 1498 QString sum = "";
1301 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1499 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1302 sum = "E: "; 1500 sum = "E: ";
1303 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1501 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1304 lse->setDtStart( mLastCalendarSync ); 1502 lse->setDtStart( mLastCalendarSync );
1305 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1503 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1306 lse->setCategories( i18n("SyncEvent") ); 1504 lse->setCategories( i18n("SyncEvent") );
1307 lse->setReadOnly( true ); 1505 lse->setReadOnly( true );
1308 mCalendar->addEvent( lse ); 1506 mCalendar->addEvent( lse );
1309 } 1507 }
1310 1508
1311 return lse; 1509 return lse;
1312 1510
1313} 1511}
1314 1512
1315// we check, if the to delete event has a id for a profile 1513// we check, if the to delete event has a id for a profile
1316// if yes, we set this id in the profile to delete 1514// if yes, we set this id in the profile to delete
1317void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1515void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1318{ 1516{
1319 if ( lastSync.count() == 0 ) { 1517 if ( lastSync.count() == 0 ) {
1320 //qDebug(" lastSync.count() == 0"); 1518 //qDebug(" lastSync.count() == 0");
1321 return; 1519 return;
1322 } 1520 }
1323 if ( toDelete->typeID() == journalID ) 1521 if ( toDelete->typeID() == journalID )
1324 return; 1522 return;
1325 1523
1326 Event* eve = lastSync.first(); 1524 Event* eve = lastSync.first();
1327 1525
1328 while ( eve ) { 1526 while ( eve ) {
1329 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1527 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1330 if ( !id.isEmpty() ) { 1528 if ( !id.isEmpty() ) {
1331 QString des = eve->description(); 1529 QString des = eve->description();
1332 QString pref = "e"; 1530 QString pref = "e";
1333 if ( toDelete->typeID() == todoID ) 1531 if ( toDelete->typeID() == todoID )
1334 pref = "t"; 1532 pref = "t";
1335 des += pref+ id + ","; 1533 des += pref+ id + ",";
1336 eve->setReadOnly( false ); 1534 eve->setReadOnly( false );
1337 eve->setDescription( des ); 1535 eve->setDescription( des );
1338 //qDebug("setdes %s ", des.latin1()); 1536 //qDebug("setdes %s ", des.latin1());
1339 eve->setReadOnly( true ); 1537 eve->setReadOnly( true );
1340 } 1538 }
1341 eve = lastSync.next(); 1539 eve = lastSync.next();
1342 } 1540 }
1343 1541
1344} 1542}
1345void CalendarView::checkExternalId( Incidence * inc ) 1543void CalendarView::checkExternalId( Incidence * inc )
1346{ 1544{
1347 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1545 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1348 checkExternSyncEvent( lastSync, inc ); 1546 checkExternSyncEvent( lastSync, inc );
1349 1547
1350} 1548}
1351bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1549bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1352{ 1550{
1353 bool syncOK = true; 1551 bool syncOK = true;
1354 int addedEvent = 0; 1552 int addedEvent = 0;
1355 int addedEventR = 0; 1553 int addedEventR = 0;
1356 int deletedEventR = 0; 1554 int deletedEventR = 0;
1357 int deletedEventL = 0; 1555 int deletedEventL = 0;
1358 int changedLocal = 0; 1556 int changedLocal = 0;
1359 int changedRemote = 0; 1557 int changedRemote = 0;
1360 int filteredIN = 0; 1558 int filteredIN = 0;
1361 int filteredOUT = 0; 1559 int filteredOUT = 0;
1362 //QPtrList<Event> el = local->rawEvents(); 1560 //QPtrList<Event> el = local->rawEvents();
1363 Event* eventR; 1561 Event* eventR;
1364 QString uid; 1562 QString uid;
1365 int take; 1563 int take;
1366 Event* eventRSync; 1564 Event* eventRSync;
1367 Event* eventLSync; 1565 Event* eventLSync;
1368 clearAllViews(); 1566 clearAllViews();
1369 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1567 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1370 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1568 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1371 bool fullDateRange = false; 1569 bool fullDateRange = false;
1372 local->resetTempSyncStat(); 1570 local->resetTempSyncStat();
1373 mLastCalendarSync = QDateTime::currentDateTime(); 1571 mLastCalendarSync = QDateTime::currentDateTime();
1374 if ( mSyncManager->syncWithDesktop() ) { 1572 if ( mSyncManager->syncWithDesktop() ) {
1375 remote->resetPilotStat(1); 1573 remote->resetPilotStat(1);
1376 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1574 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1377 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1575 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1378 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1576 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1379 } else { 1577 } else {
1380 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1578 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1381 } 1579 }
1382 } 1580 }
1383 QDateTime modifiedCalendar = mLastCalendarSync; 1581 QDateTime modifiedCalendar = mLastCalendarSync;
1384 eventLSync = getLastSyncEvent(); 1582 eventLSync = getLastSyncEvent();
1385 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1583 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1386 if ( eventR ) { 1584 if ( eventR ) {
1387 qDebug("last-syncEvent on remote found "); 1585 qDebug("last-syncEvent on remote found ");
1388 eventRSync = (Event*) eventR->clone(); 1586 eventRSync = (Event*) eventR->clone();
1389 remote->deleteEvent(eventR ); 1587 remote->deleteEvent(eventR );
1390 1588
1391 } else { 1589 } else {
1392 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1590 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1393 eventRSync = (Event*)eventLSync->clone(); 1591 eventRSync = (Event*)eventLSync->clone();
1394 } else { 1592 } else {
1395 fullDateRange = true; 1593 fullDateRange = true;
1396 eventRSync = new Event(); 1594 eventRSync = new Event();
1397 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1595 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1398 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1596 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1399 eventRSync->setDtStart( mLastCalendarSync ); 1597 eventRSync->setDtStart( mLastCalendarSync );
1400 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1598 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1401 eventRSync->setCategories( i18n("SyncEvent") ); 1599 eventRSync->setCategories( i18n("SyncEvent") );
1402 } 1600 }
1403 } 1601 }
1404 if ( eventLSync->dtStart() == mLastCalendarSync ) 1602 if ( eventLSync->dtStart() == mLastCalendarSync )
1405 fullDateRange = true; 1603 fullDateRange = true;
1406 1604
1407 if ( ! fullDateRange ) { 1605 if ( ! fullDateRange ) {
1408 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1606 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1409 1607
1410 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1608 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1411 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1609 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1412 fullDateRange = true; 1610 fullDateRange = true;
1413 } 1611 }
1414 } 1612 }
1415 if ( mSyncManager->syncWithDesktop() ) { 1613 if ( mSyncManager->syncWithDesktop() ) {
1416 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1614 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1417 } 1615 }
1418 if ( fullDateRange ) 1616 if ( fullDateRange )
1419 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1617 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1420 else 1618 else
1421 mLastCalendarSync = eventLSync->dtStart(); 1619 mLastCalendarSync = eventLSync->dtStart();
1422 // for resyncing if own file has changed 1620 // for resyncing if own file has changed
1423 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1621 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1424 mLastCalendarSync = loadedFileVersion; 1622 mLastCalendarSync = loadedFileVersion;
1425 //qDebug("setting mLastCalendarSync "); 1623 //qDebug("setting mLastCalendarSync ");
1426 } 1624 }
1427 //qDebug("*************************** "); 1625 //qDebug("*************************** ");
1428 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1626 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1429 QPtrList<Incidence> er = remote->rawIncidences(); 1627 QPtrList<Incidence> er = remote->rawIncidences();
1430 Incidence* inR = er.first(); 1628 Incidence* inR = er.first();
1431 Incidence* inL; 1629 Incidence* inL;
1432 QProgressBar bar( er.count(),0 ); 1630 QProgressBar bar( er.count(),0 );
1433 bar.setCaption (i18n("Syncing - close to abort!") ); 1631 bar.setCaption (i18n("Syncing - close to abort!") );
1434 1632
1435 // ************** setting up filter ************* 1633 // ************** setting up filter *************
1436 CalFilter *filterIN = 0; 1634 CalFilter *filterIN = 0;
1437 CalFilter *filterOUT = 0; 1635 CalFilter *filterOUT = 0;
1438 CalFilter *filter = mFilters.first(); 1636 CalFilter *filter = mFilters.first();
1439 while(filter) { 1637 while(filter) {
1440 if ( filter->name() == mSyncManager->mFilterInCal ) 1638 if ( filter->name() == mSyncManager->mFilterInCal )
1441 filterIN = filter; 1639 filterIN = filter;
1442 if ( filter->name() == mSyncManager->mFilterOutCal ) 1640 if ( filter->name() == mSyncManager->mFilterOutCal )
1443 filterOUT = filter; 1641 filterOUT = filter;
1444 filter = mFilters.next(); 1642 filter = mFilters.next();
1445 } 1643 }
1446 int w = 300; 1644 int w = 300;
1447 if ( QApplication::desktop()->width() < 320 ) 1645 if ( QApplication::desktop()->width() < 320 )
1448 w = 220; 1646 w = 220;
1449 int h = bar.sizeHint().height() ; 1647 int h = bar.sizeHint().height() ;
1450 int dw = QApplication::desktop()->width(); 1648 int dw = QApplication::desktop()->width();
1451 int dh = QApplication::desktop()->height(); 1649 int dh = QApplication::desktop()->height();
1452 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1650 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1453 bar.show(); 1651 bar.show();
1454 int modulo = (er.count()/10)+1; 1652 int modulo = (er.count()/10)+1;
1455 int incCounter = 0; 1653 int incCounter = 0;
1456 while ( inR ) { 1654 while ( inR ) {
1457 if ( ! bar.isVisible() ) 1655 if ( ! bar.isVisible() )
1458 return false; 1656 return false;
1459 if ( incCounter % modulo == 0 ) 1657 if ( incCounter % modulo == 0 )
1460 bar.setProgress( incCounter ); 1658 bar.setProgress( incCounter );
1461 ++incCounter; 1659 ++incCounter;
1462 uid = inR->uid(); 1660 uid = inR->uid();
1463 bool skipIncidence = false; 1661 bool skipIncidence = false;
1464 if ( uid.left(15) == QString("last-syncEvent-") ) 1662 if ( uid.left(15) == QString("last-syncEvent-") )
1465 skipIncidence = true; 1663 skipIncidence = true;
1466 QString idS; 1664 QString idS;
1467 qApp->processEvents(); 1665 qApp->processEvents();
1468 if ( !skipIncidence ) { 1666 if ( !skipIncidence ) {
1469 inL = local->incidenceForUid( uid , false ); 1667 inL = local->incidenceForUid( uid , false );
1470 if ( inL ) { // maybe conflict - same uid in both calendars 1668 if ( inL ) { // maybe conflict - same uid in both calendars
1471 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1669 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1472 //qDebug("take %d %s ", take, inL->summary().latin1()); 1670 //qDebug("take %d %s ", take, inL->summary().latin1());
1473 if ( take == 3 ) 1671 if ( take == 3 )
1474 return false; 1672 return false;
1475 if ( take == 1 ) {// take local ********************** 1673 if ( take == 1 ) {// take local **********************
1476 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1674 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1477 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1675 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1478 else 1676 else
1479 idS = inR->IDStr(); 1677 idS = inR->IDStr();
1480 int calID = inR->calID(); 1678 int calID = inR->calID();
1481 remote->deleteIncidence( inR ); 1679 remote->deleteIncidence( inR );
1482 inR = inL->clone(); 1680 inR = inL->clone();
1483 inR->setCalID( calID ); 1681 inR->setCalID( calID );
1484 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1682 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1485 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1683 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1486 inR->setIDStr( idS ); 1684 inR->setIDStr( idS );
1487 remote->addIncidence( inR ); 1685 remote->addIncidence( inR );
1488 if ( mSyncManager->syncWithDesktop() ) 1686 if ( mSyncManager->syncWithDesktop() )
1489 inR->setPilotId( 2 ); 1687 inR->setPilotId( 2 );
1490 ++changedRemote; 1688 ++changedRemote;
1491 } else {// take remote ********************** 1689 } else {// take remote **********************
1492 if ( !inL->isReadOnly() ) { 1690 if ( !inL->isReadOnly() ) {
1493 idS = inL->IDStr(); 1691 idS = inL->IDStr();
1494 int pid = inL->pilotId(); 1692 int pid = inL->pilotId();
1495 int calID = inL->calID(); 1693 int calID = inL->calID();
1496 local->deleteIncidence( inL ); 1694 local->deleteIncidence( inL );
1497 inL = inR->clone(); 1695 inL = inR->clone();
1498 inL->setCalID( calID ); 1696 inL->setCalID( calID );
1499 if ( mSyncManager->syncWithDesktop() ) 1697 if ( mSyncManager->syncWithDesktop() )
1500 inL->setPilotId( pid ); 1698 inL->setPilotId( pid );
1501 inL->setIDStr( idS ); 1699 inL->setIDStr( idS );
1502 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1700 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1503 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1701 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1504 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1702 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1505 } 1703 }
1506 local->addIncidence( inL ); 1704 local->addIncidence( inL );
1507 ++changedLocal; 1705 ++changedLocal;
1508 } 1706 }
1509 } 1707 }
1510 } 1708 }
1511 } else { // no conflict ********** add or delete remote 1709 } else { // no conflict ********** add or delete remote
1512 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1710 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1513 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1711 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1514 QString des = eventLSync->description(); 1712 QString des = eventLSync->description();
1515 QString pref = "e"; 1713 QString pref = "e";
1516 if ( inR->typeID() == todoID ) 1714 if ( inR->typeID() == todoID )
1517 pref = "t"; 1715 pref = "t";
1518 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1716 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1519 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1717 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1520 //remote->deleteIncidence( inR ); 1718 //remote->deleteIncidence( inR );
1521 ++deletedEventR; 1719 ++deletedEventR;
1522 } else { 1720 } else {
1523 inR->setLastModified( modifiedCalendar ); 1721 inR->setLastModified( modifiedCalendar );
1524 inL = inR->clone(); 1722 inL = inR->clone();
1525 inL->setIDStr( ":" ); 1723 inL->setIDStr( ":" );
1526 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1724 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1527 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1725 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1528 1726
1529 inL->setCalID( 0 );// add to default cal 1727 inL->setCalID( 0 );// add to default cal
1530 local->addIncidence( inL ); 1728 local->addIncidence( inL );
1531 ++addedEvent; 1729 ++addedEvent;
1532 1730
1533 } 1731 }
1534 } else { 1732 } else {
1535 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1733 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1536 inR->setLastModified( modifiedCalendar ); 1734 inR->setLastModified( modifiedCalendar );
1537 inL = inR->clone(); 1735 inL = inR->clone();
1538 inL->setIDStr( ":" ); 1736 inL->setIDStr( ":" );
1539 inL->setCalID( 0 );// add to default cal 1737 inL->setCalID( 0 );// add to default cal
1540 local->addIncidence( inL ); 1738 local->addIncidence( inL );
1541 ++addedEvent; 1739 ++addedEvent;
1542 1740
1543 } else { 1741 } else {
1544 checkExternSyncEvent(eventRSyncSharp, inR); 1742 checkExternSyncEvent(eventRSyncSharp, inR);
1545 remote->deleteIncidence( inR ); 1743 remote->deleteIncidence( inR );
1546 ++deletedEventR; 1744 ++deletedEventR;
1547 } 1745 }
1548 } 1746 }
1549 } else { 1747 } else {
1550 ++filteredIN; 1748 ++filteredIN;
1551 } 1749 }
1552 } 1750 }
1553 } 1751 }
1554 inR = er.next(); 1752 inR = er.next();
1555 } 1753 }
1556 QPtrList<Incidence> el = local->rawIncidences(); 1754 QPtrList<Incidence> el = local->rawIncidences();
1557 inL = el.first(); 1755 inL = el.first();
1558 modulo = (el.count()/10)+1; 1756 modulo = (el.count()/10)+1;
1559 bar.setCaption (i18n("Add / remove events") ); 1757 bar.setCaption (i18n("Add / remove events") );
1560 bar.setTotalSteps ( el.count() ) ; 1758 bar.setTotalSteps ( el.count() ) ;
1561 bar.show(); 1759 bar.show();
1562 incCounter = 0; 1760 incCounter = 0;
1563 1761
1564 while ( inL ) { 1762 while ( inL ) {
1565 1763
1566 qApp->processEvents(); 1764 qApp->processEvents();
1567 if ( ! bar.isVisible() ) 1765 if ( ! bar.isVisible() )
1568 return false; 1766 return false;
1569 if ( incCounter % modulo == 0 ) 1767 if ( incCounter % modulo == 0 )
1570 bar.setProgress( incCounter ); 1768 bar.setProgress( incCounter );
1571 ++incCounter; 1769 ++incCounter;
1572 uid = inL->uid(); 1770 uid = inL->uid();
1573 bool skipIncidence = false; 1771 bool skipIncidence = false;
1574 if ( uid.left(15) == QString("last-syncEvent-") ) 1772 if ( uid.left(15) == QString("last-syncEvent-") )
1575 skipIncidence = true; 1773 skipIncidence = true;
1576 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1774 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1577 skipIncidence = true; 1775 skipIncidence = true;
1578 if ( !skipIncidence ) { 1776 if ( !skipIncidence ) {
1579 inR = remote->incidenceForUid( uid , true ); 1777 inR = remote->incidenceForUid( uid , true );
1580 if ( ! inR ) { 1778 if ( ! inR ) {
1581 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1779 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1582 // no conflict ********** add or delete local 1780 // no conflict ********** add or delete local
1583 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1584 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1782 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1585 checkExternSyncEvent(eventLSyncSharp, inL); 1783 checkExternSyncEvent(eventLSyncSharp, inL);
1586 local->deleteIncidence( inL ); 1784 local->deleteIncidence( inL );
1587 ++deletedEventL; 1785 ++deletedEventL;
1588 } else { 1786 } else {
1589 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1787 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1590 inL->removeID(mCurrentSyncDevice ); 1788 inL->removeID(mCurrentSyncDevice );
1591 ++addedEventR; 1789 ++addedEventR;
1592 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1790 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1593 inL->setLastModified( modifiedCalendar ); 1791 inL->setLastModified( modifiedCalendar );
1594 inR = inL->clone(); 1792 inR = inL->clone();
1595 inR->setIDStr( ":" ); 1793 inR->setIDStr( ":" );
1596 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1794 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1597 inR->setCalID( 0 );// add to default cal 1795 inR->setCalID( 0 );// add to default cal
1598 remote->addIncidence( inR ); 1796 remote->addIncidence( inR );
1599 } 1797 }
1600 } 1798 }
1601 } else { 1799 } else {
1602 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1800 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1603 checkExternSyncEvent(eventLSyncSharp, inL); 1801 checkExternSyncEvent(eventLSyncSharp, inL);
1604 local->deleteIncidence( inL ); 1802 local->deleteIncidence( inL );
1605 ++deletedEventL; 1803 ++deletedEventL;
1606 } else { 1804 } else {
1607 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1805 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1608 ++addedEventR; 1806 ++addedEventR;
1609 inL->setLastModified( modifiedCalendar ); 1807 inL->setLastModified( modifiedCalendar );
1610 inR = inL->clone(); 1808 inR = inL->clone();
1611 inR->setIDStr( ":" ); 1809 inR->setIDStr( ":" );
1612 inR->setCalID( 0 );// add to default cal 1810 inR->setCalID( 0 );// add to default cal
1613 remote->addIncidence( inR ); 1811 remote->addIncidence( inR );
1614 } 1812 }
1615 } 1813 }
1616 } 1814 }
1617 } else { 1815 } else {
1618 ++filteredOUT; 1816 ++filteredOUT;
1619 } 1817 }
1620 } 1818 }
1621 } 1819 }
1622 inL = el.next(); 1820 inL = el.next();
1623 } 1821 }
1624 int delFut = 0; 1822 int delFut = 0;
1625 int remRem = 0; 1823 int remRem = 0;
1626 if ( mSyncManager->mWriteBackInFuture ) { 1824 if ( mSyncManager->mWriteBackInFuture ) {
1627 er = remote->rawIncidences(); 1825 er = remote->rawIncidences();
1628 remRem = er.count(); 1826 remRem = er.count();
1629 inR = er.first(); 1827 inR = er.first();
1630 QDateTime dt; 1828 QDateTime dt;
1631 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1829 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1632 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1830 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1633 while ( inR ) { 1831 while ( inR ) {
1634 if ( inR->typeID() == todoID ) { 1832 if ( inR->typeID() == todoID ) {
1635 Todo * t = (Todo*)inR; 1833 Todo * t = (Todo*)inR;
1636 if ( t->hasDueDate() ) 1834 if ( t->hasDueDate() )
1637 dt = t->dtDue(); 1835 dt = t->dtDue();
1638 else 1836 else
1639 dt = cur.addSecs( 62 ); 1837 dt = cur.addSecs( 62 );
1640 } 1838 }
1641 else if (inR->typeID() == eventID ) { 1839 else if (inR->typeID() == eventID ) {
1642 bool ok; 1840 bool ok;
1643 dt = inR->getNextOccurence( cur, &ok ); 1841 dt = inR->getNextOccurence( cur, &ok );
1644 if ( !ok ) 1842 if ( !ok )
1645 dt = cur.addSecs( -62 ); 1843 dt = cur.addSecs( -62 );
1646 } 1844 }
1647 else 1845 else
1648 dt = inR->dtStart(); 1846 dt = inR->dtStart();
1649 if ( dt < cur || dt > end ) { 1847 if ( dt < cur || dt > end ) {
1650 remote->deleteIncidence( inR ); 1848 remote->deleteIncidence( inR );
1651 ++delFut; 1849 ++delFut;
1652 } 1850 }
1653 inR = er.next(); 1851 inR = er.next();
1654 } 1852 }
1655 } 1853 }
1656 bar.hide(); 1854 bar.hide();
1657 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1855 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1658 eventLSync->setReadOnly( false ); 1856 eventLSync->setReadOnly( false );
1659 eventLSync->setDtStart( mLastCalendarSync ); 1857 eventLSync->setDtStart( mLastCalendarSync );
1660 eventRSync->setDtStart( mLastCalendarSync ); 1858 eventRSync->setDtStart( mLastCalendarSync );
1661 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1859 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1662 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1860 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1663 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1861 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1664 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1862 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1665 eventLSync->setReadOnly( true ); 1863 eventLSync->setReadOnly( true );
1666 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1864 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1667 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1865 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1668 remote->addEvent( eventRSync ); 1866 remote->addEvent( eventRSync );
1669 else 1867 else
1670 delete eventRSync; 1868 delete eventRSync;
1671 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1869 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1672 QString mes; 1870 QString mes;
1673 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 ); 1871 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 );
1674 QString delmess; 1872 QString delmess;
1675 if ( delFut ) { 1873 if ( delFut ) {
1676 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); 1874 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);
1677 mes += delmess; 1875 mes += delmess;
1678 } 1876 }
1679 mes = i18n("Local calendar changed!\n") +mes; 1877 mes = i18n("Local calendar changed!\n") +mes;
1680 mCalendar->checkAlarmForIncidence( 0, true ); 1878 mCalendar->checkAlarmForIncidence( 0, true );
1681 qDebug( mes ); 1879 qDebug( mes );
1682 if ( mSyncManager->mShowSyncSummary ) { 1880 if ( mSyncManager->mShowSyncSummary ) {
1683 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1881 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1684 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1882 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1685 qDebug("KO: WB cancelled "); 1883 qDebug("KO: WB cancelled ");
1686 mSyncManager->mWriteBackFile = false; 1884 mSyncManager->mWriteBackFile = false;
1687 return syncOK; 1885 return syncOK;
1688 } 1886 }
1689 } 1887 }
1690 return syncOK; 1888 return syncOK;
1691} 1889}
1692 1890
1693void CalendarView::setSyncDevice( QString s ) 1891void CalendarView::setSyncDevice( QString s )
1694{ 1892{
1695 mCurrentSyncDevice= s; 1893 mCurrentSyncDevice= s;
1696} 1894}
1697void CalendarView::setSyncName( QString s ) 1895void CalendarView::setSyncName( QString s )
1698{ 1896{
1699 mCurrentSyncName= s; 1897 mCurrentSyncName= s;
1700} 1898}
1701bool CalendarView::syncCalendar(QString filename, int mode) 1899bool CalendarView::syncCalendar(QString filename, int mode)
1702{ 1900{
1703 //qDebug("syncCalendar %s ", filename.latin1()); 1901 //qDebug("syncCalendar %s ", filename.latin1());
1704 mGlobalSyncMode = SYNC_MODE_NORMAL; 1902 mGlobalSyncMode = SYNC_MODE_NORMAL;
1705 CalendarLocal* calendar = new CalendarLocal(); 1903 CalendarLocal* calendar = new CalendarLocal();
1706 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1904 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1707 FileStorage* storage = new FileStorage( calendar ); 1905 FileStorage* storage = new FileStorage( calendar );
1708 bool syncOK = false; 1906 bool syncOK = false;
1709 storage->setFileName( filename ); 1907 storage->setFileName( filename );
1710 // qDebug("loading ... "); 1908 // qDebug("loading ... ");
1711 if ( storage->load() ) { 1909 if ( storage->load() ) {
1712 getEventViewerDialog()->setSyncMode( true ); 1910 getEventViewerDialog()->setSyncMode( true );
1713 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1911 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1714 getEventViewerDialog()->setSyncMode( false ); 1912 getEventViewerDialog()->setSyncMode( false );
1715 if ( syncOK ) { 1913 if ( syncOK ) {
1716 if ( mSyncManager->mWriteBackFile ) 1914 if ( mSyncManager->mWriteBackFile )
1717 { 1915 {
1718 storage->setSaveFormat( new ICalFormat() ); 1916 storage->setSaveFormat( new ICalFormat() );
1719 storage->save(); 1917 storage->save();
1720 } 1918 }
1721 } 1919 }
1722 setModified( true ); 1920 setModified( true );
1723 } 1921 }
1724 delete storage; 1922 delete storage;
1725 delete calendar; 1923 delete calendar;
1726 if ( syncOK ) 1924 if ( syncOK )
1727 updateView(); 1925 updateView();
1728 return syncOK; 1926 return syncOK;
1729} 1927}
1730 1928
1731void CalendarView::syncExternal( int mode ) 1929void CalendarView::syncExternal( int mode )
1732{ 1930{
1733 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1931 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1734 1932
1735 qApp->processEvents(); 1933 qApp->processEvents();
1736 CalendarLocal* calendar = new CalendarLocal(); 1934 CalendarLocal* calendar = new CalendarLocal();
1737 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1935 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1738 bool syncOK = false; 1936 bool syncOK = false;
1739 bool loadSuccess = false; 1937 bool loadSuccess = false;
1740 PhoneFormat* phoneFormat = 0; 1938 PhoneFormat* phoneFormat = 0;
1741 emit tempDisableBR(true); 1939 emit tempDisableBR(true);
1742#ifndef DESKTOP_VERSION 1940#ifndef DESKTOP_VERSION
1743 SharpFormat* sharpFormat = 0; 1941 SharpFormat* sharpFormat = 0;
1744 if ( mode == 0 ) { // sharp 1942 if ( mode == 0 ) { // sharp
1745 sharpFormat = new SharpFormat () ; 1943 sharpFormat = new SharpFormat () ;
1746 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1944 loadSuccess = sharpFormat->load( calendar, mCalendar );
1747 1945
1748 } else 1946 } else
1749#endif 1947#endif
1750 if ( mode == 1 ) { // phone 1948 if ( mode == 1 ) { // phone
1751 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1949 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1752 mSyncManager->mPhoneDevice, 1950 mSyncManager->mPhoneDevice,
1753 mSyncManager->mPhoneConnection, 1951 mSyncManager->mPhoneConnection,
1754 mSyncManager->mPhoneModel); 1952 mSyncManager->mPhoneModel);
1755 loadSuccess = phoneFormat->load( calendar,mCalendar); 1953 loadSuccess = phoneFormat->load( calendar,mCalendar);
1756 1954
1757 } else { 1955 } else {
1758 emit tempDisableBR(false); 1956 emit tempDisableBR(false);
1759 return; 1957 return;
1760 } 1958 }
1761 if ( loadSuccess ) { 1959 if ( loadSuccess ) {
1762 getEventViewerDialog()->setSyncMode( true ); 1960 getEventViewerDialog()->setSyncMode( true );
1763 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1961 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1764 getEventViewerDialog()->setSyncMode( false ); 1962 getEventViewerDialog()->setSyncMode( false );
1765 qApp->processEvents(); 1963 qApp->processEvents();
1766 if ( syncOK ) { 1964 if ( syncOK ) {
1767 if ( mSyncManager->mWriteBackFile ) 1965 if ( mSyncManager->mWriteBackFile )
1768 { 1966 {
1769 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1967 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1770 Incidence* inc = iL.first(); 1968 Incidence* inc = iL.first();
1771 if ( phoneFormat ) { 1969 if ( phoneFormat ) {
1772 while ( inc ) { 1970 while ( inc ) {
1773 inc->removeID(mCurrentSyncDevice); 1971 inc->removeID(mCurrentSyncDevice);
1774 inc = iL.next(); 1972 inc = iL.next();
1775 } 1973 }
1776 } 1974 }
1777#ifndef DESKTOP_VERSION 1975#ifndef DESKTOP_VERSION
1778 if ( sharpFormat ) 1976 if ( sharpFormat )
1779 sharpFormat->save(calendar); 1977 sharpFormat->save(calendar);
1780#endif 1978#endif
1781 if ( phoneFormat ) 1979 if ( phoneFormat )
1782 phoneFormat->save(calendar); 1980 phoneFormat->save(calendar);
1783 iL = calendar->rawIncidences(); 1981 iL = calendar->rawIncidences();
1784 inc = iL.first(); 1982 inc = iL.first();
1785 Incidence* loc; 1983 Incidence* loc;
1786 while ( inc ) { 1984 while ( inc ) {
1787 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1985 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1788 loc = mCalendar->incidence(inc->uid() ); 1986 loc = mCalendar->incidence(inc->uid() );
1789 if ( loc ) { 1987 if ( loc ) {
1790 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1988 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1791 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1989 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1792 } 1990 }
1793 } 1991 }
1794 inc = iL.next(); 1992 inc = iL.next();
1795 } 1993 }
1796 Incidence* lse = getLastSyncEvent(); 1994 Incidence* lse = getLastSyncEvent();
1797 if ( lse ) { 1995 if ( lse ) {
1798 lse->setReadOnly( false ); 1996 lse->setReadOnly( false );
1799 lse->setDescription( "" ); 1997 lse->setDescription( "" );
1800 lse->setReadOnly( true ); 1998 lse->setReadOnly( true );
1801 } 1999 }
1802 } 2000 }
1803 } else { 2001 } else {
1804 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2002 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
1805 } 2003 }
1806 setModified( true ); 2004 setModified( true );
1807 } else { 2005 } else {
1808 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2006 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1809 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2007 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1810 question, i18n("Ok")) ; 2008 question, i18n("Ok")) ;
1811 2009
1812 } 2010 }
1813 delete calendar; 2011 delete calendar;
1814 updateView(); 2012 updateView();
1815 emit tempDisableBR(false); 2013 emit tempDisableBR(false);
1816 return ;//syncOK; 2014 return ;//syncOK;
1817 2015
1818} 2016}
1819 2017
1820bool CalendarView::importBday() 2018bool CalendarView::importBday()
1821{ 2019{
1822#ifndef KORG_NOKABC 2020#ifndef KORG_NOKABC
1823 2021
1824#ifdef DESKTOP_VERSION 2022#ifdef DESKTOP_VERSION
1825 int curCal = mCalendar->defaultCalendar(); 2023 int curCal = mCalendar->defaultCalendar();
1826 int bd = mCalEditView->getBirtdayID(); 2024 int bd = mCalEditView->getBirtdayID();
1827 if ( bd == 0 ) 2025 if ( bd == 0 )
1828 return false; 2026 return false;
1829 mCalendar->setDefaultCalendar( bd ); 2027 mCalendar->setDefaultCalendar( bd );
1830 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2028 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1831 KABC::AddressBook::Iterator it; 2029 KABC::AddressBook::Iterator it;
1832 int count = 0; 2030 int count = 0;
1833 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2031 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1834 ++count; 2032 ++count;
1835 } 2033 }
1836 QProgressBar bar(count,0 ); 2034 QProgressBar bar(count,0 );
1837 int w = 300; 2035 int w = 300;
1838 if ( QApplication::desktop()->width() < 320 ) 2036 if ( QApplication::desktop()->width() < 320 )
1839 w = 220; 2037 w = 220;
1840 int h = bar.sizeHint().height() ; 2038 int h = bar.sizeHint().height() ;
1841 int dw = QApplication::desktop()->width(); 2039 int dw = QApplication::desktop()->width();
1842 int dh = QApplication::desktop()->height(); 2040 int dh = QApplication::desktop()->height();
1843 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2041 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1844 bar.show(); 2042 bar.show();
1845 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2043 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1846 qApp->processEvents(); 2044 qApp->processEvents();
1847 count = 0; 2045 count = 0;
1848 int addCount = 0; 2046 int addCount = 0;
1849 KCal::Attendee* a = 0; 2047 KCal::Attendee* a = 0;
1850 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2048 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1851 if ( ! bar.isVisible() ) 2049 if ( ! bar.isVisible() )
1852 return false; 2050 return false;
1853 bar.setProgress( count++ ); 2051 bar.setProgress( count++ );
1854 qApp->processEvents(); 2052 qApp->processEvents();
1855 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2053 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1856 if ( (*it).birthday().date().isValid() ){ 2054 if ( (*it).birthday().date().isValid() ){
1857 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2055 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1858 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2056 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1859 ++addCount; 2057 ++addCount;
1860 } 2058 }
1861 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2059 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1862 if ( anni.isValid() ){ 2060 if ( anni.isValid() ){
1863 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2061 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1864 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2062 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1865 ++addCount; 2063 ++addCount;
1866 } 2064 }
1867 } 2065 }
1868 mCalendar->setDefaultCalendar( curCal ); 2066 mCalendar->setDefaultCalendar( curCal );
1869 updateView(); 2067 updateView();
1870 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2068 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1871#else //DESKTOP_VERSION 2069#else //DESKTOP_VERSION
1872 2070
1873 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2071 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
1874 // the result should now arrive through method insertBirthdays 2072 // the result should now arrive through method insertBirthdays
1875 2073
1876#endif //DESKTOP_VERSION 2074#endif //DESKTOP_VERSION
1877 2075
1878#endif //KORG_NOKABC 2076#endif //KORG_NOKABC
1879 2077
1880 2078
1881 return true; 2079 return true;
1882} 2080}
1883 2081
1884// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2082// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
1885void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2083void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
1886 const QStringList& anniversaryList, const QStringList& realNameList, 2084 const QStringList& anniversaryList, const QStringList& realNameList,
1887 const QStringList& emailList, const QStringList& assembledNameList, 2085 const QStringList& emailList, const QStringList& assembledNameList,
1888 const QStringList& uidList) 2086 const QStringList& uidList)
1889{ 2087{
1890 2088
1891 //qDebug("KO::CalendarView::insertBirthdays"); 2089 //qDebug("KO::CalendarView::insertBirthdays");
1892 if (uid == this->name()) 2090 if (uid == this->name())
1893 { 2091 {
1894 int curCal = mCalendar->defaultCalendar(); 2092 int curCal = mCalendar->defaultCalendar();
1895 int bd = mCalEditView->getBirtdayID(); 2093 int bd = mCalEditView->getBirtdayID();
1896 if ( bd == 0 ) 2094 if ( bd == 0 )
1897 return; 2095 return;
1898 mCalendar->setDefaultCalendar( bd ); 2096 mCalendar->setDefaultCalendar( bd );
1899 2097
1900 2098
1901 int count = birthdayList.count(); 2099 int count = birthdayList.count();
1902 int addCount = 0; 2100 int addCount = 0;
1903 KCal::Attendee* a = 0; 2101 KCal::Attendee* a = 0;
1904 2102
1905 //qDebug("CalView 1 %i", count); 2103 //qDebug("CalView 1 %i", count);
1906 2104
1907 QProgressBar bar(count,0 ); 2105 QProgressBar bar(count,0 );
1908 int w = 300; 2106 int w = 300;
1909 if ( QApplication::desktop()->width() < 320 ) 2107 if ( QApplication::desktop()->width() < 320 )
1910 w = 220; 2108 w = 220;
1911 int h = bar.sizeHint().height() ; 2109 int h = bar.sizeHint().height() ;
1912 int dw = QApplication::desktop()->width(); 2110 int dw = QApplication::desktop()->width();
1913 int dh = QApplication::desktop()->height(); 2111 int dh = QApplication::desktop()->height();
1914 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2112 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1915 bar.show(); 2113 bar.show();
1916 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2114 bar.setCaption (i18n("inserting birthdays - close to abort!") );
1917 qApp->processEvents(); 2115 qApp->processEvents();
1918 2116
1919 QDate birthday; 2117 QDate birthday;
1920 QDate anniversary; 2118 QDate anniversary;
1921 QString realName; 2119 QString realName;
1922 QString email; 2120 QString email;
1923 QString assembledName; 2121 QString assembledName;
1924 QString uid; 2122 QString uid;
1925 bool ok = true; 2123 bool ok = true;
1926 for ( int i = 0; i < count; i++) 2124 for ( int i = 0; i < count; i++)
1927 { 2125 {
1928 if ( ! bar.isVisible() ) 2126 if ( ! bar.isVisible() )
1929 return; 2127 return;
1930 bar.setProgress( i ); 2128 bar.setProgress( i );
1931 qApp->processEvents(); 2129 qApp->processEvents();
1932 2130
1933 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2131 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
1934 if (!ok) { 2132 if (!ok) {
1935 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2133 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
1936 } 2134 }
1937 2135
1938 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2136 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
1939 if (!ok) { 2137 if (!ok) {
1940 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2138 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
1941 } 2139 }
1942 realName = realNameList[i]; 2140 realName = realNameList[i];
1943 email = emailList[i]; 2141 email = emailList[i];
1944 assembledName = assembledNameList[i]; 2142 assembledName = assembledNameList[i];
1945 uid = uidList[i]; 2143 uid = uidList[i];
1946 //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() ); 2144 //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() );
1947 2145
1948 if ( birthday.isValid() ){ 2146 if ( birthday.isValid() ){
1949 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2147 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1950 KCal::Attendee::ReqParticipant,uid) ; 2148 KCal::Attendee::ReqParticipant,uid) ;
1951 if ( addAnniversary( birthday, assembledName, a, true ) ) 2149 if ( addAnniversary( birthday, assembledName, a, true ) )
1952 ++addCount; 2150 ++addCount;
1953 } 2151 }
1954 2152
1955 if ( anniversary.isValid() ){ 2153 if ( anniversary.isValid() ){
1956 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2154 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1957 KCal::Attendee::ReqParticipant,uid) ; 2155 KCal::Attendee::ReqParticipant,uid) ;
1958 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2156 if ( addAnniversary( anniversary, assembledName, a, false ) )
1959 ++addCount; 2157 ++addCount;
1960 } 2158 }
1961 } 2159 }
1962 2160
1963 mCalendar->setDefaultCalendar( curCal ); 2161 mCalendar->setDefaultCalendar( curCal );
1964 updateView(); 2162 updateView();
1965 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2163 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1966 2164
1967 } 2165 }
1968 2166
1969} 2167}
1970 2168
1971 2169
1972 2170
1973bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2171bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1974{ 2172{
1975 //qDebug("addAnni "); 2173 //qDebug("addAnni ");
1976 Event * ev = new Event(); 2174 Event * ev = new Event();
1977 ev->setOrganizer(KOPrefs::instance()->email()); 2175 ev->setOrganizer(KOPrefs::instance()->email());
1978 if ( a ) { 2176 if ( a ) {
1979 ev->addAttendee( a ); 2177 ev->addAttendee( a );
1980 } 2178 }
1981 QString kind; 2179 QString kind;
1982 if ( birthday ) { 2180 if ( birthday ) {
1983 kind = i18n( "Birthday" ); 2181 kind = i18n( "Birthday" );
1984 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2182 ev->setSummary( name + " (" + QString::number(date.year()) +")");
1985 } 2183 }
1986 else { 2184 else {
1987 kind = i18n( "Anniversary" ); 2185 kind = i18n( "Anniversary" );
1988 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2186 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
1989 } 2187 }
1990 ev->setCategories( kind ); 2188 ev->setCategories( kind );
1991 ev->setDtStart( QDateTime(date) ); 2189 ev->setDtStart( QDateTime(date) );
1992 ev->setDtEnd( QDateTime(date) ); 2190 ev->setDtEnd( QDateTime(date) );
1993 ev->setFloats( true ); 2191 ev->setFloats( true );
1994 Recurrence * rec = ev->recurrence(); 2192 Recurrence * rec = ev->recurrence();
1995 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2193 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1996 rec->addYearlyNum( date.month() ); 2194 rec->addYearlyNum( date.month() );
1997 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2195 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1998 delete ev; 2196 delete ev;
1999 return false; 2197 return false;
2000 } 2198 }
2001 return true; 2199 return true;
2002 2200
2003} 2201}
2004bool CalendarView::importQtopia( const QString &categories, 2202bool CalendarView::importQtopia( const QString &categories,
2005 const QString &datebook, 2203 const QString &datebook,
2006 const QString &todolist ) 2204 const QString &todolist )
2007{ 2205{
2008 2206
2009 QtopiaFormat qtopiaFormat; 2207 QtopiaFormat qtopiaFormat;
2010 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2208 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2011 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2209 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2012 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2210 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2013 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2211 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2014 2212
2015 updateView(); 2213 updateView();
2016 return true; 2214 return true;
2017 2215
2018#if 0 2216#if 0
2019 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2217 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2020 mCurrentSyncDevice = "qtopia-XML"; 2218 mCurrentSyncDevice = "qtopia-XML";
2021 if ( mSyncManager->mAskForPreferences ) 2219 if ( mSyncManager->mAskForPreferences )
2022 edit_sync_options(); 2220 edit_sync_options();
2023 qApp->processEvents(); 2221 qApp->processEvents();
2024 CalendarLocal* calendar = new CalendarLocal(); 2222 CalendarLocal* calendar = new CalendarLocal();
2025 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2223 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2026 bool syncOK = false; 2224 bool syncOK = false;
2027 QtopiaFormat qtopiaFormat; 2225 QtopiaFormat qtopiaFormat;
2028 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2226 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2029 bool loadOk = true; 2227 bool loadOk = true;
2030 if ( !categories.isEmpty() ) 2228 if ( !categories.isEmpty() )
2031 loadOk = qtopiaFormat.load( calendar, categories ); 2229 loadOk = qtopiaFormat.load( calendar, categories );
2032 if ( loadOk && !datebook.isEmpty() ) 2230 if ( loadOk && !datebook.isEmpty() )
2033 loadOk = qtopiaFormat.load( calendar, datebook ); 2231 loadOk = qtopiaFormat.load( calendar, datebook );
2034 if ( loadOk && !todolist.isEmpty() ) 2232 if ( loadOk && !todolist.isEmpty() )
2035 loadOk = qtopiaFormat.load( calendar, todolist ); 2233 loadOk = qtopiaFormat.load( calendar, todolist );
2036 2234
2037 if ( loadOk ) { 2235 if ( loadOk ) {
2038 getEventViewerDialog()->setSyncMode( true ); 2236 getEventViewerDialog()->setSyncMode( true );
2039 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2237 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2040 getEventViewerDialog()->setSyncMode( false ); 2238 getEventViewerDialog()->setSyncMode( false );
2041 qApp->processEvents(); 2239 qApp->processEvents();
2042 if ( syncOK ) { 2240 if ( syncOK ) {
2043 if ( mSyncManager->mWriteBackFile ) 2241 if ( mSyncManager->mWriteBackFile )
2044 { 2242 {
2045 // write back XML file 2243 // write back XML file
2046 2244
2047 } 2245 }
2048 setModified( true ); 2246 setModified( true );
2049 } 2247 }
2050 } else { 2248 } else {
2051 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2249 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2052 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2250 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2053 question, i18n("Ok")) ; 2251 question, i18n("Ok")) ;
2054 } 2252 }
2055 delete calendar; 2253 delete calendar;
2056 updateView(); 2254 updateView();
2057 return syncOK; 2255 return syncOK;
2058 2256
2059 2257
2060#endif 2258#endif
2061 2259
2062} 2260}
2063 2261
2064void CalendarView::setSyncEventsReadOnly() 2262void CalendarView::setSyncEventsReadOnly()
2065{ 2263{
2066 mCalendar->setSyncEventsReadOnly(); 2264 mCalendar->setSyncEventsReadOnly();
2067} 2265}
2068 2266
2069bool CalendarView::loadCalendars() 2267bool CalendarView::loadCalendars()
2070{ 2268{
2071 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2269 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2072 KopiCalendarFile * cal = calendars.first(); 2270 KopiCalendarFile * cal = calendars.first();
2073 mCalendar->setDefaultCalendar( 1 ); 2271 mCalendar->setDefaultCalendar( 1 );
2074 openCalendar( MainWindow::defaultFileName(), false ); 2272 openCalendar( MainWindow::defaultFileName(), false );
2075 cal = calendars.next(); 2273 cal = calendars.next();
2076 while ( cal ) { 2274 while ( cal ) {
2077 addCalendar( cal ); 2275 addCalendar( cal );
2078 cal = calendars.next(); 2276 cal = calendars.next();
2079 } 2277 }
2080 restoreCalendarSettings(); 2278 restoreCalendarSettings();
2081 return true; 2279 return true;
2082} 2280}
2083bool CalendarView::restoreCalendarSettings() 2281bool CalendarView::restoreCalendarSettings()
2084{ 2282{
2085 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2283 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2086 KopiCalendarFile * cal = calendars.first(); 2284 KopiCalendarFile * cal = calendars.first();
2087 while ( cal ) { 2285 while ( cal ) {
2088 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2286 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2089 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2287 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2090 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2288 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2091 if ( cal->isStandard ) 2289 if ( cal->isStandard )
2092 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2290 mCalendar->setDefaultCalendar( cal->mCalNumber );
2093 cal = calendars.next(); 2291 cal = calendars.next();
2094 } 2292 }
2095 setSyncEventsReadOnly(); 2293 setSyncEventsReadOnly();
2096 mCalendar->reInitAlarmSettings(); 2294 mCalendar->reInitAlarmSettings();
2097 updateUnmanagedViews(); 2295 updateUnmanagedViews();
2098 updateView(); 2296 updateView();
2099 return true; 2297 return true;
2100} 2298}
2101void CalendarView::addCalendarId( int id ) 2299void CalendarView::addCalendarId( int id )
2102{ 2300{
2103 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2301 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2104 if ( cal ) 2302 if ( cal )
2105 addCalendar( cal ); 2303 addCalendar( cal );
2106} 2304}
2107bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2305bool CalendarView::addCalendar( KopiCalendarFile * cal )
2108{ 2306{
2109 cal->mErrorOnLoad = false; 2307 cal->mErrorOnLoad = false;
2110 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2308 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2111 cal->mLoadDt = QDateTime::currentDateTime(); 2309 cal->mLoadDt = QDateTime::currentDateTime();
2112 return true; 2310 return true;
2113 } 2311 }
2114 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2312 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2115 cal->mErrorOnLoad = true; 2313 cal->mErrorOnLoad = true;
2116 return false; 2314 return false;
2117} 2315}
2118bool CalendarView::openCalendar(QString filename, bool merge) 2316bool CalendarView::openCalendar(QString filename, bool merge)
2119{ 2317{
2120 2318
2121 if (filename.isEmpty()) { 2319 if (filename.isEmpty()) {
2122 return false; 2320 return false;
2123 } 2321 }
2124 2322
2125 if (!QFile::exists(filename)) { 2323 if (!QFile::exists(filename)) {
2126 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2324 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2127 return false; 2325 return false;
2128 } 2326 }
2129 2327
2130 globalFlagBlockAgenda = 1; 2328 globalFlagBlockAgenda = 1;
2131 clearAllViews(); 2329 clearAllViews();
2132 if (!merge) { 2330 if (!merge) {
2133 mViewManager->setDocumentId( filename ); 2331 mViewManager->setDocumentId( filename );
2134 mCalendar->close(); 2332 mCalendar->close();
2135 } 2333 }
2136 mStorage->setFileName( filename ); 2334 mStorage->setFileName( filename );
2137 2335
2138 if ( mStorage->load() ) { 2336 if ( mStorage->load() ) {
2139 if ( merge ) ;//setModified( true ); 2337 if ( merge ) ;//setModified( true );
2140 else { 2338 else {
2141 //setModified( true ); 2339 //setModified( true );
2142 mViewManager->setDocumentId( filename ); 2340 mViewManager->setDocumentId( filename );
2143 mDialogManager->setDocumentId( filename ); 2341 mDialogManager->setDocumentId( filename );
2144 mTodoList->setDocumentId( filename ); 2342 mTodoList->setDocumentId( filename );
2145 } 2343 }
2146 globalFlagBlockAgenda = 2; 2344 globalFlagBlockAgenda = 2;
2147 // if ( getLastSyncEvent() ) 2345 // if ( getLastSyncEvent() )
2148 // getLastSyncEvent()->setReadOnly( true ); 2346 // getLastSyncEvent()->setReadOnly( true );
2149 mCalendar->reInitAlarmSettings(); 2347 mCalendar->reInitAlarmSettings();
2150 setSyncEventsReadOnly(); 2348 setSyncEventsReadOnly();
2151 updateUnmanagedViews(); 2349 updateUnmanagedViews();
2152 updateView(); 2350 updateView();
2153 if ( filename != MainWindow::defaultFileName() ) { 2351 if ( filename != MainWindow::defaultFileName() ) {
2154 saveCalendar( MainWindow::defaultFileName() ); 2352 saveCalendar( MainWindow::defaultFileName() );
2155 } else { 2353 } else {
2156 QFileInfo finf ( MainWindow::defaultFileName()); 2354 QFileInfo finf ( MainWindow::defaultFileName());
2157 if ( finf.exists() ) { 2355 if ( finf.exists() ) {
2158 setLoadedFileVersion( finf.lastModified () ); 2356 setLoadedFileVersion( finf.lastModified () );
2159 } 2357 }
2160 } 2358 }
2161 return true; 2359 return true;
2162 } else { 2360 } else {
2163 // while failing to load, the calendar object could 2361 // while failing to load, the calendar object could
2164 // have become partially populated. Clear it out. 2362 // have become partially populated. Clear it out.
2165 if ( !merge ) { 2363 if ( !merge ) {
2166 mCalendar->close(); 2364 mCalendar->close();
2167 mViewManager->setDocumentId( filename ); 2365 mViewManager->setDocumentId( filename );
2168 mDialogManager->setDocumentId( filename ); 2366 mDialogManager->setDocumentId( filename );
2169 mTodoList->setDocumentId( filename ); 2367 mTodoList->setDocumentId( filename );
2170 } 2368 }
2171 2369
2172 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2370 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2173 2371
2174 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2372 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2175 globalFlagBlockAgenda = 2; 2373 globalFlagBlockAgenda = 2;
2176 mCalendar->reInitAlarmSettings(); 2374 mCalendar->reInitAlarmSettings();
2177 setSyncEventsReadOnly(); 2375 setSyncEventsReadOnly();
2178 updateUnmanagedViews(); 2376 updateUnmanagedViews();
2179 updateView(); 2377 updateView();
2180 } 2378 }
2181 return false; 2379 return false;
2182} 2380}
2183void CalendarView::mergeFile( QString fn ) 2381void CalendarView::mergeFile( QString fn )
2184{ 2382{
2185 clearAllViews(); 2383 clearAllViews();
2186 mCalendar->mergeCalendarFile( fn ); 2384 mCalendar->mergeCalendarFile( fn );
2187 mCalendar->reInitAlarmSettings(); 2385 mCalendar->reInitAlarmSettings();
2188 setSyncEventsReadOnly(); 2386 setSyncEventsReadOnly();
2189 updateUnmanagedViews(); 2387 updateUnmanagedViews();
2190 updateView(); 2388 updateView();
2191} 2389}
2192void CalendarView::showOpenError() 2390void CalendarView::showOpenError()
2193{ 2391{
2194 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2392 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2195} 2393}
2196void CalendarView::setLoadedFileVersion(QDateTime dt) 2394void CalendarView::setLoadedFileVersion(QDateTime dt)
2197{ 2395{
2198 loadedFileVersion = dt; 2396 loadedFileVersion = dt;
2199} 2397}
2200bool CalendarView::checkFileChanged(QString fn) 2398bool CalendarView::checkFileChanged(QString fn)
2201{ 2399{
2202 QFileInfo finf ( fn ); 2400 QFileInfo finf ( fn );
2203 if ( !finf.exists() ) 2401 if ( !finf.exists() )
2204 return true; 2402 return true;
2205 QDateTime dt = finf.lastModified (); 2403 QDateTime dt = finf.lastModified ();
2206 if ( dt <= loadedFileVersion ) 2404 if ( dt <= loadedFileVersion )
2207 return false; 2405 return false;
2208 return true; 2406 return true;
2209 2407
2210} 2408}
2211void CalendarView::watchSavedFile() 2409void CalendarView::watchSavedFile()
2212{ 2410{
2213 QFileInfo finf ( MainWindow::defaultFileName()); 2411 QFileInfo finf ( MainWindow::defaultFileName());
2214 if ( !finf.exists() ) 2412 if ( !finf.exists() )
2215 return; 2413 return;
2216 QDateTime dt = finf.lastModified (); 2414 QDateTime dt = finf.lastModified ();
2217 if ( dt < loadedFileVersion ) { 2415 if ( dt < loadedFileVersion ) {
2218 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2416 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2219 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2417 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2220 return; 2418 return;
2221 } 2419 }
2222 loadedFileVersion = dt; 2420 loadedFileVersion = dt;
2223} 2421}
2224bool CalendarView::checkAllFileVersions() 2422bool CalendarView::checkAllFileVersions()
2225{ 2423{
2226 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2424 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2227 KopiCalendarFile * cal = calendars.first(); 2425 KopiCalendarFile * cal = calendars.first();
2228 mCalendar->setDefaultCalendar( 1 ); 2426 mCalendar->setDefaultCalendar( 1 );
2229 mCalendar->setDefaultCalendarEnabledOnly(); 2427 mCalendar->setDefaultCalendarEnabledOnly();
2230 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2428 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2231 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2429 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2232 restoreCalendarSettings(); 2430 restoreCalendarSettings();
2233 return false; 2431 return false;
2234 } 2432 }
2235 } 2433 }
2236 cal = calendars.next(); 2434 cal = calendars.next();
2237 QDateTime storeTemp = loadedFileVersion; 2435 QDateTime storeTemp = loadedFileVersion;
2238 while ( cal ) { 2436 while ( cal ) {
2239 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2437 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2240 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2438 mCalendar->setDefaultCalendar( cal->mCalNumber );
2241 mCalendar->setDefaultCalendarEnabledOnly(); 2439 mCalendar->setDefaultCalendarEnabledOnly();
2242 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2440 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2243 if ( !checkFileVersion(cal->mFileName )) { 2441 if ( !checkFileVersion(cal->mFileName )) {
2244 loadedFileVersion = storeTemp; 2442 loadedFileVersion = storeTemp;
2245 restoreCalendarSettings(); 2443 restoreCalendarSettings();
2246 return false; 2444 return false;
2247 } 2445 }
2248 } 2446 }
2249 cal = calendars.next(); 2447 cal = calendars.next();
2250 } 2448 }
2251 loadedFileVersion = storeTemp; 2449 loadedFileVersion = storeTemp;
2252 return true; 2450 return true;
2253} 2451}
2254bool CalendarView::checkFileVersion(QString fn) 2452bool CalendarView::checkFileVersion(QString fn)
2255{ 2453{
2256 QFileInfo finf ( fn ); 2454 QFileInfo finf ( fn );
2257 if ( !finf.exists() ) 2455 if ( !finf.exists() )
2258 return true; 2456 return true;
2259 QDateTime dt = finf.lastModified (); 2457 QDateTime dt = finf.lastModified ();
2260 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2458 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2261 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2459 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2262 if ( dt <= loadedFileVersion ) 2460 if ( dt <= loadedFileVersion )
2263 return true; 2461 return true;
2264 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)) , 2462 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)) ,
2265 i18n("KO/Pi Warning"),i18n("Overwrite"), 2463 i18n("KO/Pi Warning"),i18n("Overwrite"),
2266 i18n("Sync+save")); 2464 i18n("Sync+save"));
2267 2465
2268 if ( km == KMessageBox::Cancel ) 2466 if ( km == KMessageBox::Cancel )
2269 return false; 2467 return false;
2270 if ( km == KMessageBox::Yes ) 2468 if ( km == KMessageBox::Yes )
2271 return true; 2469 return true;
2272 2470
2273 setSyncDevice("deleteaftersync" ); 2471 setSyncDevice("deleteaftersync" );
2274 mSyncManager->mAskForPreferences = true; 2472 mSyncManager->mAskForPreferences = true;
2275 mSyncManager->mSyncAlgoPrefs = 3; 2473 mSyncManager->mSyncAlgoPrefs = 3;
2276 mSyncManager->mWriteBackFile = false; 2474 mSyncManager->mWriteBackFile = false;
2277 mSyncManager->mWriteBackExistingOnly = false; 2475 mSyncManager->mWriteBackExistingOnly = false;
2278 mSyncManager->mShowSyncSummary = false; 2476 mSyncManager->mShowSyncSummary = false;
2279 syncCalendar( fn, 3 ); 2477 syncCalendar( fn, 3 );
2280 Event * e = getLastSyncEvent(); 2478 Event * e = getLastSyncEvent();
2281 if ( e ) 2479 if ( e )
2282 mCalendar->deleteEvent( e ); 2480 mCalendar->deleteEvent( e );
2283 return true; 2481 return true;
2284} 2482}
2285bool CalendarView::saveCalendars() 2483bool CalendarView::saveCalendars()
2286{ 2484{
2287 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2485 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2288 KopiCalendarFile * cal = calendars.first(); 2486 KopiCalendarFile * cal = calendars.first();
2289 mCalendar->setDefaultCalendar( 1 ); 2487 mCalendar->setDefaultCalendar( 1 );
2290 mCalendar->setDefaultCalendarEnabledOnly(); 2488 mCalendar->setDefaultCalendarEnabledOnly();
2291 saveCalendar( MainWindow::defaultFileName() ); 2489 saveCalendar( MainWindow::defaultFileName() );
2292 cal = calendars.next(); 2490 cal = calendars.next();
2293 while ( cal ) { 2491 while ( cal ) {
2294 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2492 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2295 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2493 mCalendar->setDefaultCalendar( cal->mCalNumber );
2296 mCalendar->setDefaultCalendarEnabledOnly(); 2494 mCalendar->setDefaultCalendarEnabledOnly();
2297 if ( saveCalendar( cal->mFileName ) ) 2495 if ( saveCalendar( cal->mFileName ) )
2298 cal->mLoadDt = QDateTime::currentDateTime(); 2496 cal->mLoadDt = QDateTime::currentDateTime();
2299 } 2497 }
2300 cal = calendars.next(); 2498 cal = calendars.next();
2301 } 2499 }
2302 restoreCalendarSettings(); 2500 restoreCalendarSettings();
2303 return true; 2501 return true;
2304} 2502}
2305bool CalendarView::saveCalendar( QString filename ) 2503bool CalendarView::saveCalendar( QString filename )
2306{ 2504{
2307 2505
2308 // Store back all unsaved data into calendar object 2506 // Store back all unsaved data into calendar object
2309 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2507 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2310 if ( mViewManager->currentView() ) 2508 if ( mViewManager->currentView() )
2311 mViewManager->currentView()->flushView(); 2509 mViewManager->currentView()->flushView();
2312 2510
2313 2511
2314 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2512 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2315 mStorage->setSaveFormat( new ICalFormat() ); 2513 mStorage->setSaveFormat( new ICalFormat() );
2316 mStorage->setFileName( filename ); 2514 mStorage->setFileName( filename );
2317 bool success; 2515 bool success;
2318 success = mStorage->save(); 2516 success = mStorage->save();
2319 if ( !success ) { 2517 if ( !success ) {
2320 return false; 2518 return false;
2321 } 2519 }
2322 if ( filename == MainWindow::defaultFileName() ) { 2520 if ( filename == MainWindow::defaultFileName() ) {
2323 setLoadedFileVersion( lfv ); 2521 setLoadedFileVersion( lfv );
2324 watchSavedFile(); 2522 watchSavedFile();
2325 } 2523 }
2326 return true; 2524 return true;
2327} 2525}
2328 2526
2329void CalendarView::closeCalendar() 2527void CalendarView::closeCalendar()
2330{ 2528{
2331 2529
2332 // child windows no longer valid 2530 // child windows no longer valid
2333 clearAllViews(); 2531 clearAllViews();
2334 emit closingDown(); 2532 emit closingDown();
2335 2533
2336 mCalendar->close(); 2534 mCalendar->close();
2337 setModified(false); 2535 setModified(false);
2338 updateView(); 2536 updateView();
2339} 2537}
2340 2538
2341void CalendarView::archiveCalendar() 2539void CalendarView::archiveCalendar()
2342{ 2540{
2343 mDialogManager->showArchiveDialog(); 2541 mDialogManager->showArchiveDialog();
2344} 2542}
2345 2543
2346 2544
2347void CalendarView::readSettings() 2545void CalendarView::readSettings()
2348{ 2546{
2349 2547
2350 2548
2351 // mViewManager->showAgendaView(); 2549 // mViewManager->showAgendaView();
2352 QString str; 2550 QString str;
2353 //qDebug("CalendarView::readSettings() "); 2551 //qDebug("CalendarView::readSettings() ");
2354 // read settings from the KConfig, supplying reasonable 2552 // read settings from the KConfig, supplying reasonable
2355 // defaults where none are to be found 2553 // defaults where none are to be found
2356 KConfig *config = KOGlobals::config(); 2554 KConfig *config = KOGlobals::config();
2357#ifndef KORG_NOSPLITTER 2555#ifndef KORG_NOSPLITTER
2358 config->setGroup("KOrganizer Geometry"); 2556 config->setGroup("KOrganizer Geometry");
2359 2557
2360 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2558 QValueList<int> sizes = config->readIntListEntry("Separator1");
2361 if (sizes.count() != 2) { 2559 if (sizes.count() != 2) {
2362 sizes << mDateNavigator->minimumSizeHint().width(); 2560 sizes << mDateNavigator->minimumSizeHint().width();
2363 sizes << 300; 2561 sizes << 300;
2364 } 2562 }
2365 mPanner->setSizes(sizes); 2563 mPanner->setSizes(sizes);
2366 2564
2367 sizes = config->readIntListEntry("Separator2"); 2565 sizes = config->readIntListEntry("Separator2");
2368 if ( ( mResourceView && sizes.count() == 4 ) || 2566 if ( ( mResourceView && sizes.count() == 4 ) ||
2369 ( !mResourceView && sizes.count() == 3 ) ) { 2567 ( !mResourceView && sizes.count() == 3 ) ) {
2370 mLeftSplitter->setSizes(sizes); 2568 mLeftSplitter->setSizes(sizes);
2371 } 2569 }
2372#endif 2570#endif
2373 globalFlagBlockAgenda = 1; 2571 globalFlagBlockAgenda = 1;
2374 mViewManager->showAgendaView(); 2572 mViewManager->showAgendaView();
2375 //mViewManager->readSettings( config ); 2573 //mViewManager->readSettings( config );
2376 mTodoList->restoreLayout(config,QString("Todo Layout")); 2574 mTodoList->restoreLayout(config,QString("Todo Layout"));
2377 readFilterSettings(config); 2575 readFilterSettings(config);
2378 2576
2379#ifdef DESKTOP_VERSION 2577#ifdef DESKTOP_VERSION
2380 config->setGroup("WidgetLayout"); 2578 config->setGroup("WidgetLayout");
2381 QStringList list; 2579 QStringList list;
2382 list = config->readListEntry("MainLayout"); 2580 list = config->readListEntry("MainLayout");
2383 int x,y,w,h; 2581 int x,y,w,h;
2384 if ( ! list.isEmpty() ) { 2582 if ( ! list.isEmpty() ) {
2385 x = list[0].toInt(); 2583 x = list[0].toInt();
2386 y = list[1].toInt(); 2584 y = list[1].toInt();
2387 w = list[2].toInt(); 2585 w = list[2].toInt();
2388 h = list[3].toInt(); 2586 h = list[3].toInt();
2389 KApplication::testCoords( &x,&y,&w,&h ); 2587 KApplication::testCoords( &x,&y,&w,&h );
2390 topLevelWidget()->setGeometry(x,y,w,h); 2588 topLevelWidget()->setGeometry(x,y,w,h);
2391 2589
2392 } else { 2590 } else {
2393 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2591 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2394 } 2592 }
2395 list = config->readListEntry("EditEventLayout"); 2593 list = config->readListEntry("EditEventLayout");
2396 if ( ! list.isEmpty() ) { 2594 if ( ! list.isEmpty() ) {
2397 x = list[0].toInt(); 2595 x = list[0].toInt();
2398 y = list[1].toInt(); 2596 y = list[1].toInt();
2399 w = list[2].toInt(); 2597 w = list[2].toInt();
2400 h = list[3].toInt(); 2598 h = list[3].toInt();
2401 KApplication::testCoords( &x,&y,&w,&h ); 2599 KApplication::testCoords( &x,&y,&w,&h );
2402 mEventEditor->setGeometry(x,y,w,h); 2600 mEventEditor->setGeometry(x,y,w,h);
2403 2601
2404 } 2602 }
2405 list = config->readListEntry("EditTodoLayout"); 2603 list = config->readListEntry("EditTodoLayout");
2406 if ( ! list.isEmpty() ) { 2604 if ( ! list.isEmpty() ) {
2407 x = list[0].toInt(); 2605 x = list[0].toInt();
2408 y = list[1].toInt(); 2606 y = list[1].toInt();
2409 w = list[2].toInt(); 2607 w = list[2].toInt();
2410 h = list[3].toInt(); 2608 h = list[3].toInt();
2411 KApplication::testCoords( &x,&y,&w,&h ); 2609 KApplication::testCoords( &x,&y,&w,&h );
2412 mTodoEditor->setGeometry(x,y,w,h); 2610 mTodoEditor->setGeometry(x,y,w,h);
2413 2611
2414 } 2612 }
2415 list = config->readListEntry("ViewerLayout"); 2613 list = config->readListEntry("ViewerLayout");
2416 if ( ! list.isEmpty() ) { 2614 if ( ! list.isEmpty() ) {
2417 x = list[0].toInt(); 2615 x = list[0].toInt();
2418 y = list[1].toInt(); 2616 y = list[1].toInt();
2419 w = list[2].toInt(); 2617 w = list[2].toInt();
2420 h = list[3].toInt(); 2618 h = list[3].toInt();
2421 KApplication::testCoords( &x,&y,&w,&h ); 2619 KApplication::testCoords( &x,&y,&w,&h );
2422 getEventViewerDialog()->setGeometry(x,y,w,h); 2620 getEventViewerDialog()->setGeometry(x,y,w,h);
2423 } 2621 }
2424#endif 2622#endif
2425 config->setGroup( "Views" ); 2623 config->setGroup( "Views" );
2426 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2624 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2427 2625
2428 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2626 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2429 2627
2430 int resetval = 0; 2628 int resetval = 0;
2431 int maxVal = 0; 2629 int maxVal = 0;
2432 if (sizes.count() != 3) { 2630 if (sizes.count() != 3) {
2433 if ( KOPrefs::instance()->mVerticalScreen ) { 2631 if ( KOPrefs::instance()->mVerticalScreen ) {
2434 resetval = mDateNavigator->sizeHint().width()+2; 2632 resetval = mDateNavigator->sizeHint().width()+2;
2435 } else { 2633 } else {
2436 resetval = mDateNavigator->sizeHint().height()+2; 2634 resetval = mDateNavigator->sizeHint().height()+2;
2437 } 2635 }
2438 } 2636 }
2439 if ( resetval ) { 2637 if ( resetval ) {
2440 sizes.clear(); 2638 sizes.clear();
2441 if ( KOPrefs::instance()->mVerticalScreen ) { 2639 if ( KOPrefs::instance()->mVerticalScreen ) {
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 1debef7..b223315 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,667 +1,668 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#include <qscrollbar.h> 33#include <qscrollbar.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qtopia/ir.h> 35#include <qtopia/ir.h>
36#else 36#else
37#define Ir char 37#define Ir char
38#endif 38#endif
39#include <libkcal/calendar.h> 39#include <libkcal/calendar.h>
40#include <libkcal/scheduler.h> 40#include <libkcal/scheduler.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <KDGanttMinimizeSplitter.h> 43#include <KDGanttMinimizeSplitter.h>
44 44
45#include <korganizer/calendarviewbase.h> 45#include <korganizer/calendarviewbase.h>
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn ); 141 void mergeFile( QString fn );
142 142
143 signals: 143 signals:
144 void save (); 144 void save ();
145 void saveStopTimer (); 145 void saveStopTimer ();
146 void tempDisableBR(bool); 146 void tempDisableBR(bool);
147 /** This todo has been modified */ 147 /** This todo has been modified */
148 void todoModified(Todo *, int); 148 void todoModified(Todo *, int);
149 149
150 /** when change is made to options dialog, the topwidget will catch this 150 /** when change is made to options dialog, the topwidget will catch this
151 * and emit this signal which notifies all widgets which have registered 151 * and emit this signal which notifies all widgets which have registered
152 * for notification to update their settings. */ 152 * for notification to update their settings. */
153 void configChanged(); 153 void configChanged();
154 /** emitted when the topwidget is closing down, so that any attached 154 /** emitted when the topwidget is closing down, so that any attached
155 child windows can also close. */ 155 child windows can also close. */
156 void closingDown(); 156 void closingDown();
157 /** emitted right before we die */ 157 /** emitted right before we die */
158 void closed(QWidget *); 158 void closed(QWidget *);
159 159
160 /** Emitted when state of modified flag changes */ 160 /** Emitted when state of modified flag changes */
161 void modifiedChanged(bool); 161 void modifiedChanged(bool);
162 void signalmodified(); 162 void signalmodified();
163 163
164 /** Emitted when state of read-only flag changes */ 164 /** Emitted when state of read-only flag changes */
165 void readOnlyChanged(bool); 165 void readOnlyChanged(bool);
166 166
167 /** Emitted when the unit of navigation changes */ 167 /** Emitted when the unit of navigation changes */
168 void changeNavStringPrev(const QString &); 168 void changeNavStringPrev(const QString &);
169 void changeNavStringNext(const QString &); 169 void changeNavStringNext(const QString &);
170 170
171 /** Emitted when state of events selection has changed and user is organizer*/ 171 /** Emitted when state of events selection has changed and user is organizer*/
172 void organizerEventsSelected(bool); 172 void organizerEventsSelected(bool);
173 /** Emitted when state of events selection has changed and user is attendee*/ 173 /** Emitted when state of events selection has changed and user is attendee*/
174 void groupEventsSelected(bool); 174 void groupEventsSelected(bool);
175 /** 175 /**
176 Emitted when an incidence gets selected. If the selection is cleared the 176 Emitted when an incidence gets selected. If the selection is cleared the
177 signal is emitted with 0 as argument. 177 signal is emitted with 0 as argument.
178 */ 178 */
179 void incidenceSelected( Incidence * ); 179 void incidenceSelected( Incidence * );
180 /** Emitted, when a todoitem is selected or deselected. */ 180 /** Emitted, when a todoitem is selected or deselected. */
181 void todoSelected( bool ); 181 void todoSelected( bool );
182 182
183 /** 183 /**
184 Emitted, when clipboard content changes. Parameter indicates if paste 184 Emitted, when clipboard content changes. Parameter indicates if paste
185 is possible or not. 185 is possible or not.
186 */ 186 */
187 void pasteEnabled(bool); 187 void pasteEnabled(bool);
188 188
189 /** Emitted, when the number of incoming messages has changed. */ 189 /** Emitted, when the number of incoming messages has changed. */
190 void numIncomingChanged(int); 190 void numIncomingChanged(int);
191 191
192 /** Emitted, when the number of outgoing messages has changed. */ 192 /** Emitted, when the number of outgoing messages has changed. */
193 void numOutgoingChanged(int); 193 void numOutgoingChanged(int);
194 194
195 /** Send status message, which can e.g. be displayed in the status bar. */ 195 /** Send status message, which can e.g. be displayed in the status bar. */
196 void statusMessage(const QString &); 196 void statusMessage(const QString &);
197 197
198 void calendarViewExpanded( bool ); 198 void calendarViewExpanded( bool );
199 void updateSearchDialog(); 199 void updateSearchDialog();
200 void filtersUpdated(); 200 void filtersUpdated();
201 201
202 202
203 public slots: 203 public slots:
204 void nextConflict( bool all, bool allday ); 204 void nextConflict( bool all, bool allday );
205 void conflictAll(); 205 void conflictAll();
206 void conflictAllday(); 206 void conflictAllday();
207 void conflictNotAll(); 207 void conflictNotAll();
208 void setCalReadOnly( int id, bool readO ); 208 void setCalReadOnly( int id, bool readO );
209 void checkAlarms(); 209 void checkAlarms();
210 void checkFiles(); 210 void checkFiles();
211 void slotprintSelInc(); 211 void slotprintSelInc();
212 void showNextAlarms(); 212 void showNextAlarms();
213 void showOpenError(); 213 void showOpenError();
214 void watchSavedFile(); 214 void watchSavedFile();
215 void recheckTimerAlarm(); 215 void recheckTimerAlarm();
216 void checkNextTimerAlarm(); 216 void checkNextTimerAlarm();
217 void addAlarm(const QDateTime &qdt, const QString &noti ); 217 void addAlarm(const QDateTime &qdt, const QString &noti );
218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
219 void removeAlarm(const QDateTime &qdt, const QString &noti ); 219 void removeAlarm(const QDateTime &qdt, const QString &noti );
220 220
221 /** options dialog made a changed to the configuration. we catch this 221 /** options dialog made a changed to the configuration. we catch this
222 * and notify all widgets which need to update their configuration. */ 222 * and notify all widgets which need to update their configuration. */
223 void updateConfig(); 223 void updateConfig();
224 224
225 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 225 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
226 const QStringList& anniversaryList, const QStringList& realNameList, 226 const QStringList& anniversaryList, const QStringList& realNameList,
227 const QStringList& emailList, const QStringList& assembledNameList, 227 const QStringList& emailList, const QStringList& assembledNameList,
228 const QStringList& uidList); 228 const QStringList& uidList);
229 229
230 /** 230 /**
231 Load calendar from file \a filename. If \a merge is true, load 231 Load calendar from file \a filename. If \a merge is true, load
232 calendar into existing one, if it is false, clear calendar, before 232 calendar into existing one, if it is false, clear calendar, before
233 loading. Return true, if calendar could be successfully loaded. 233 loading. Return true, if calendar could be successfully loaded.
234 */ 234 */
235 bool openCalendar(QString filename, bool merge=false); 235 bool openCalendar(QString filename, bool merge=false);
236 bool loadCalendars(); 236 bool loadCalendars();
237 bool saveCalendars(); 237 bool saveCalendars();
238 bool restoreCalendarSettings(); 238 bool restoreCalendarSettings();
239 bool addCalendar( KopiCalendarFile * ); 239 bool addCalendar( KopiCalendarFile * );
240 void addCalendarId( int id ); 240 void addCalendarId( int id );
241 bool syncCalendar(QString filename,int mode = 0 ); 241 bool syncCalendar(QString filename,int mode = 0 );
242 242
243 /** 243 /**
244 Save calendar data to file. Return true if calendar could be 244 Save calendar data to file. Return true if calendar could be
245 successfully saved. 245 successfully saved.
246 */ 246 */
247 bool saveCalendar(QString filename); 247 bool saveCalendar(QString filename);
248 248
249 /** 249 /**
250 Close calendar. Clear calendar data and reset views to display an empty 250 Close calendar. Clear calendar data and reset views to display an empty
251 calendar. 251 calendar.
252 */ 252 */
253 void closeCalendar(); 253 void closeCalendar();
254 254
255 /** Archive old events of calendar */ 255 /** Archive old events of calendar */
256 void archiveCalendar(); 256 void archiveCalendar();
257 257
258 void showIncidence(); 258 void showIncidence();
259 void editIncidence(); 259 void editIncidence();
260 void editIncidenceDescription(); 260 void editIncidenceDescription();
261 void deleteIncidence(); 261 void deleteIncidence();
262 void cloneIncidence(); 262 void cloneIncidence();
263 void moveIncidence(); 263 void moveIncidence();
264 void beamIncidence(); 264 void beamIncidence();
265 void toggleCancelIncidence(); 265 void toggleCancelIncidence();
266 266
267 /** create an editeventwin with supplied date/time, and if bool is true, 267 /** create an editeventwin with supplied date/time, and if bool is true,
268 * make the event take all day. */ 268 * make the event take all day. */
269 void newEvent(QDateTime, QDateTime, bool allDay ); 269 void newEvent(QDateTime, QDateTime, bool allDay );
270 void newEvent(QDateTime, QDateTime); 270 void newEvent(QDateTime, QDateTime);
271 void newEvent(QDateTime fh); 271 void newEvent(QDateTime fh);
272 void newEvent(QDate dt); 272 void newEvent(QDate dt);
273 /** create new event without having a date hint. Takes current date as 273 /** create new event without having a date hint. Takes current date as
274 default hint. */ 274 default hint. */
275 void newEvent(); 275 void newEvent();
276 void newFloatingEvent(); 276 void newFloatingEvent();
277 277
278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
279 void showIncidence(Incidence *); 279 void showIncidence(Incidence *);
280 void showIncidence(QString uid); 280 void showIncidence(QString uid);
281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
282 void editIncidence(Incidence *); 282 void editIncidence(Incidence *);
283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
284 void deleteIncidence(Incidence *); 284 void deleteIncidence(Incidence *);
285 void cloneIncidence(Incidence *); 285 void cloneIncidence(Incidence *);
286 void cancelIncidence(Incidence *); 286 void cancelIncidence(Incidence *);
287 /** Create an editor for the supplied event. */ 287 /** Create an editor for the supplied event. */
288 void editEvent(Event *); 288 void editEvent(Event *);
289 /** Delete the supplied event. */ 289 /** Delete the supplied event. */
290 void deleteEvent(Event *); 290 void deleteEvent(Event *);
291 /** Delete the event with the given unique ID. Returns false, if event wasn't 291 /** Delete the event with the given unique ID. Returns false, if event wasn't
292 found. */ 292 found. */
293 bool deleteEvent(const QString &uid); 293 bool deleteEvent(const QString &uid);
294 /** Create a read-only viewer dialog for the supplied event. */ 294 /** Create a read-only viewer dialog for the supplied event. */
295 void showEvent(Event *); 295 void showEvent(Event *);
296 296
297 void editJournal(Journal *); 297 void editJournal(Journal *);
298 void showJournal(Journal *); 298 void showJournal(Journal *);
299 void deleteJournal(Journal *); 299 void deleteJournal(Journal *);
300 /** Create an editor dialog for a todo */ 300 /** Create an editor dialog for a todo */
301 void editTodo(Todo *); 301 void editTodo(Todo *);
302 /** Create a read-only viewer dialog for the supplied todo */ 302 /** Create a read-only viewer dialog for the supplied todo */
303 void showTodo(Todo *); 303 void showTodo(Todo *);
304 /** create new todo */ 304 /** create new todo */
305 void newTodo(); 305 void newTodo();
306 void newTodoDateTime(QDateTime, bool allday); 306 void newTodoDateTime(QDateTime, bool allday);
307 /** create new todo with a parent todo */ 307 /** create new todo with a parent todo */
308 void newSubTodo(); 308 void newSubTodo();
309 /** create new todo with a parent todo */ 309 /** create new todo with a parent todo */
310 void newSubTodo(Todo *); 310 void newSubTodo(Todo *);
311 /** Delete todo */ 311 /** Delete todo */
312 void deleteTodo(Todo *); 312 void deleteTodo(Todo *);
313 313
314 314
315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
316 * emitted as result. */ 316 * emitted as result. */
317 void checkClipboard(); 317 void checkClipboard();
318 318
319 /** using the KConfig associated with the kapp variable, read in the 319 /** using the KConfig associated with the kapp variable, read in the
320 * settings from the config file. 320 * settings from the config file.
321 */ 321 */
322 void readSettings(); 322 void readSettings();
323 323
324 /** write current state to config file. */ 324 /** write current state to config file. */
325 void writeSettings(); 325 void writeSettings();
326 326
327 /** read settings for calendar filters */ 327 /** read settings for calendar filters */
328 void readFilterSettings(KConfig *config); 328 void readFilterSettings(KConfig *config);
329 329
330 /** write settings for calendar filters */ 330 /** write settings for calendar filters */
331 void writeFilterSettings(KConfig *config); 331 void writeFilterSettings(KConfig *config);
332 332
333 /** passes on the message that an event has changed to the currently 333 /** passes on the message that an event has changed to the currently
334 * activated view so that it can make appropriate display changes. */ 334 * activated view so that it can make appropriate display changes. */
335 void changeEventDisplay(Event *, int); 335 void changeEventDisplay(Event *, int);
336 void changeIncidenceDisplay(Incidence *, int); 336 void changeIncidenceDisplay(Incidence *, int);
337 void changeTodoDisplay(Todo *, int); 337 void changeTodoDisplay(Todo *, int);
338 338
339 void eventAdded(Event *); 339 void eventAdded(Event *);
340 void eventChanged(Event *); 340 void eventChanged(Event *);
341 void eventToBeDeleted(Event *); 341 void eventToBeDeleted(Event *);
342 void eventDeleted(); 342 void eventDeleted();
343 343
344 void todoAdded(Todo *); 344 void todoAdded(Todo *);
345 void todoChanged(Todo *); 345 void todoChanged(Todo *);
346 void todoToBeDeleted(Todo *); 346 void todoToBeDeleted(Todo *);
347 void todoDeleted(); 347 void todoDeleted();
348 348
349 void updateView(const QDate &start, const QDate &end); 349 void updateView(const QDate &start, const QDate &end);
350 void updateView(); 350 void updateView();
351 void clearAllViews(); 351 void clearAllViews();
352 352
353 /** Full update of visible todo views */ 353 /** Full update of visible todo views */
354 void updateTodoViews(); 354 void updateTodoViews();
355 355
356 void updateUnmanagedViews(); 356 void updateUnmanagedViews();
357 357
358 /** cut the current appointment to the clipboard */ 358 /** cut the current appointment to the clipboard */
359 void edit_cut(); 359 void edit_cut();
360 360
361 /** copy the current appointment(s) to the clipboard */ 361 /** copy the current appointment(s) to the clipboard */
362 void edit_copy(); 362 void edit_copy();
363 363
364 /** paste the current vobject(s) in the clipboard buffer into calendar */ 364 /** paste the current vobject(s) in the clipboard buffer into calendar */
365 void edit_paste(); 365 void edit_paste();
366 366
367 /** edit viewing and configuration options. */ 367 /** edit viewing and configuration options. */
368 void edit_options(); 368 void edit_options();
369 void edit_global_options(); 369 void edit_global_options();
370 /** 370 /**
371 Functions for printing, previewing a print, and setting up printing 371 Functions for printing, previewing a print, and setting up printing
372 parameters. 372 parameters.
373 */ 373 */
374 void print(); 374 void print();
375 void printSetup(); 375 void printSetup();
376 void printPreview(); 376 void printPreview();
377 377
378 /** Export as iCalendar file */ 378 /** Export as iCalendar file */
379 void exportICalendar(); 379 void exportICalendar();
380 380
381 /** Export as vCalendar file */ 381 /** Export as vCalendar file */
382 bool exportVCalendar( QString fn); 382 bool exportVCalendar( QString fn);
383 383
384 /** pop up a dialog to show an existing appointment. */ 384 /** pop up a dialog to show an existing appointment. */
385 void appointment_show(); 385 void appointment_show();
386 /** 386 /**
387 * pop up an Appointment Dialog to edit an existing appointment.Get 387 * pop up an Appointment Dialog to edit an existing appointment.Get
388 * information on the appointment from the list of unique IDs that is 388 * information on the appointment from the list of unique IDs that is
389 * currently in the View, called currIds. 389 * currently in the View, called currIds.
390 */ 390 */
391 void appointment_edit(); 391 void appointment_edit();
392 /** 392 /**
393 * pop up dialog confirming deletion of currently selected event in the 393 * pop up dialog confirming deletion of currently selected event in the
394 * View. 394 * View.
395 */ 395 */
396 void appointment_delete(); 396 void appointment_delete();
397 397
398 /** mails the currently selected event to a particular user as a vCalendar 398 /** mails the currently selected event to a particular user as a vCalendar
399 attachment. */ 399 attachment. */
400 void action_mail(); 400 void action_mail();
401 401
402 /* frees a subtodo from it's relation */ 402 /* frees a subtodo from it's relation */
403 void todo_unsub( Todo * ); 403 void todo_unsub( Todo * );
404 void todo_resub( Todo * parent, Todo * sub ); 404 void todo_resub( Todo * parent, Todo * sub );
405 405
406 /** Take ownership of selected event. */ 406 /** Take ownership of selected event. */
407 void takeOverEvent(); 407 void takeOverEvent();
408 408
409 /** Take ownership of all events in calendar. */ 409 /** Take ownership of all events in calendar. */
410 void takeOverCalendar(); 410 void takeOverCalendar();
411 411
412 /** query whether or not the calendar is "dirty". */ 412 /** query whether or not the calendar is "dirty". */
413 bool isModified(); 413 bool isModified();
414 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 414 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
415 void setModified(bool modified=true); 415 void setModified(bool modified=true);
416 416
417 /** query if the calendar is read-only. */ 417 /** query if the calendar is read-only. */
418 bool isReadOnly(); 418 bool isReadOnly();
419 /** set state of calendar to read-only */ 419 /** set state of calendar to read-only */
420 void setReadOnly(bool readOnly=true); 420 void setReadOnly(bool readOnly=true);
421 421
422 void eventUpdated(Incidence *); 422 void eventUpdated(Incidence *);
423 423
424 /* iTIP scheduling actions */ 424 /* iTIP scheduling actions */
425 void schedule_publish(Incidence *incidence = 0); 425 void schedule_publish(Incidence *incidence = 0);
426 void schedule_request(Incidence *incidence = 0); 426 void schedule_request(Incidence *incidence = 0);
427 void schedule_refresh(Incidence *incidence = 0); 427 void schedule_refresh(Incidence *incidence = 0);
428 void schedule_cancel(Incidence *incidence = 0); 428 void schedule_cancel(Incidence *incidence = 0);
429 void schedule_add(Incidence *incidence = 0); 429 void schedule_add(Incidence *incidence = 0);
430 void schedule_reply(Incidence *incidence = 0); 430 void schedule_reply(Incidence *incidence = 0);
431 void schedule_counter(Incidence *incidence = 0); 431 void schedule_counter(Incidence *incidence = 0);
432 void schedule_declinecounter(Incidence *incidence = 0); 432 void schedule_declinecounter(Incidence *incidence = 0);
433 void schedule_publish_freebusy(int daysToPublish = 30); 433 void schedule_publish_freebusy(int daysToPublish = 30);
434 434
435 void openAddressbook(); 435 void openAddressbook();
436 436
437 void editFilters(); 437 void editFilters();
438 void toggleFilerEnabled(); 438 void toggleFilerEnabled();
439 QPtrList<CalFilter> filters(); 439 QPtrList<CalFilter> filters();
440 void toggleFilter(); 440 void toggleFilter();
441 void showFilter(bool visible); 441 void showFilter(bool visible);
442 void updateFilter(); 442 void updateFilter();
443 void filterEdited(); 443 void filterEdited();
444 void selectFilter( int ); 444 void selectFilter( int );
445 KOFilterView *filterView(); 445 KOFilterView *filterView();
446 446
447 void showIntro(); 447 void showIntro();
448 448
449 /** Move the curdatepient view date to today */ 449 /** Move the curdatepient view date to today */
450 void goToday(); 450 void goToday();
451 451
452 /** Move to the next date(s) in the current view */ 452 /** Move to the next date(s) in the current view */
453 void goNext(); 453 void goNext();
454 454
455 /** Move to the previous date(s) in the current view */ 455 /** Move to the previous date(s) in the current view */
456 void goPrevious(); 456 void goPrevious();
457 /** Move to the next date(s) in the current view */ 457 /** Move to the next date(s) in the current view */
458 void goNextMonth(); 458 void goNextMonth();
459 459
460 /** Move to the previous date(s) in the current view */ 460 /** Move to the previous date(s) in the current view */
461 void goPreviousMonth(); 461 void goPreviousMonth();
462 462
463 void toggleExpand(); 463 void toggleExpand();
464 void toggleDateNavigatorWidget(); 464 void toggleDateNavigatorWidget();
465 void toggleAllDaySize(); 465 void toggleAllDaySize();
466 466
467 /** Look for new messages in the inbox */ 467 /** Look for new messages in the inbox */
468 void lookForIncomingMessages(); 468 void lookForIncomingMessages();
469 /** Look for new messages in the outbox */ 469 /** Look for new messages in the outbox */
470 void lookForOutgoingMessages(); 470 void lookForOutgoingMessages();
471 471
472 void processMainViewSelection( Incidence * ); 472 void processMainViewSelection( Incidence * );
473 void processTodoListSelection( Incidence * ); 473 void processTodoListSelection( Incidence * );
474 474
475 void processIncidenceSelection( Incidence * ); 475 void processIncidenceSelection( Incidence * );
476 476
477 void purgeCompleted(); 477 void purgeCompleted();
478 bool removeCompletedSubTodos( Todo* ); 478 bool removeCompletedSubTodos( Todo* );
479 void slotCalendarChanged(); 479 void slotCalendarChanged();
480 bool importBday(); 480 bool importBday();
481 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 481 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
482 bool importQtopia( const QString &categoriesFile, 482 bool importQtopia( const QString &categoriesFile,
483 const QString &datebookFile, 483 const QString &datebookFile,
484 const QString &tasklistFile ); 484 const QString &tasklistFile );
485 void syncExternal( int mode ); 485 void syncExternal( int mode );
486 void slotSelectPickerDate( QDate ) ; 486 void slotSelectPickerDate( QDate ) ;
487 void showDatePicker() ; 487 void showDatePicker() ;
488 void showDatePickerPopup() ; 488 void showDatePickerPopup() ;
489 void moveIncidence(Incidence *) ; 489 void moveIncidence(Incidence *) ;
490 void beamIncidence(Incidence *) ; 490 void beamIncidence(Incidence *) ;
491 void beamCalendar() ; 491 void beamCalendar() ;
492 void beamFilteredCalendar() ; 492 void beamFilteredCalendar() ;
493 void beamIncidenceList(QPtrList<Incidence>) ; 493 void beamIncidenceList(QPtrList<Incidence>) ;
494 void manageCategories(); 494 void manageCategories();
495 void editCategories(); 495 void editCategories();
496 int addCategories(); 496 int addCategories();
497 void removeCategories(); 497 void removeCategories();
498 void setSyncDevice( QString ); 498 void setSyncDevice( QString );
499 void setSyncName( QString ); 499 void setSyncName( QString );
500 void showDay( QDate ); 500 void showDay( QDate );
501 void undo_delete(); 501 void undo_delete();
502 protected slots: 502 protected slots:
503 void resetFocus(); 503 void resetFocus();
504 void scrollBarValue(int); 504 void scrollBarValue(int);
505 void slotViewerClosed(); 505 void slotViewerClosed();
506 void timerAlarm(); 506 void timerAlarm();
507 void suspendAlarm(); 507 void suspendAlarm();
508 void beamDone( Ir *ir ); 508 void beamDone( Ir *ir );
509 /** Select a view or adapt the current view to display the specified dates. */ 509 /** Select a view or adapt the current view to display the specified dates. */
510 void showDates( const KCal::DateList & ); 510 void showDates( const KCal::DateList & );
511 void selectWeekNum ( int ); 511 void selectWeekNum ( int );
512 void checkConflictForEvent(); 512 void checkConflictForEvent();
513 513
514 public: 514 public:
515 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval );
515 // show a standard warning 516 // show a standard warning
516 // returns KMsgBox::yesNoCancel() 517 // returns KMsgBox::yesNoCancel()
517 int msgCalModified(); 518 int msgCalModified();
518 virtual bool sync(KSyncManager* manager, QString filename, int mode); 519 virtual bool sync(KSyncManager* manager, QString filename, int mode);
519 520
520 virtual bool syncExternal(KSyncManager* manager, QString resource); 521 virtual bool syncExternal(KSyncManager* manager, QString resource);
521 virtual void removeSyncInfo( QString syncProfile); 522 virtual void removeSyncInfo( QString syncProfile);
522 void setSyncManager(KSyncManager* manager); 523 void setSyncManager(KSyncManager* manager);
523 void setLoadedFileVersion(QDateTime); 524 void setLoadedFileVersion(QDateTime);
524 bool checkFileVersion(QString fn); 525 bool checkFileVersion(QString fn);
525 bool checkAllFileVersions(); 526 bool checkAllFileVersions();
526 bool checkFileChanged(QString fn); 527 bool checkFileChanged(QString fn);
527 Event* getLastSyncEvent(); 528 Event* getLastSyncEvent();
528 /** Adapt navigation units correpsonding to step size of navigation of the 529 /** Adapt navigation units correpsonding to step size of navigation of the
529 * current view. 530 * current view.
530 */ 531 */
531 void adaptNavigationUnits(); 532 void adaptNavigationUnits();
532 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 533 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
533 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 534 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
534 //Attendee* getYourAttendee(Event *event); 535 //Attendee* getYourAttendee(Event *event);
535 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 536 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
536 void setScrollBarStep(int val ); 537 void setScrollBarStep(int val );
537 538
538 protected: 539 protected:
539 Event *mConflictingEvent; 540 Event *mConflictingEvent;
540 void schedule(Scheduler::Method, Incidence *incidence = 0); 541 void schedule(Scheduler::Method, Incidence *incidence = 0);
541 542
542 // returns KMsgBox::OKCandel() 543 // returns KMsgBox::OKCandel()
543 int msgItemDelete(const QString name); 544 int msgItemDelete(const QString name);
544 void showEventEditor(); 545 void showEventEditor();
545 void showTodoEditor(); 546 void showTodoEditor();
546 Todo *selectedTodo(); 547 Todo *selectedTodo();
547 private: 548 private:
548#ifdef DESKTOP_VERSION 549#ifdef DESKTOP_VERSION
549 QScrollBar * mDateScrollBar; 550 QScrollBar * mDateScrollBar;
550#endif 551#endif
551 QDateTime mNextAlarmDateTime; 552 QDateTime mNextAlarmDateTime;
552 bool mViewerCallerIsSearchDialog; 553 bool mViewerCallerIsSearchDialog;
553 bool mBlockShowDates; 554 bool mBlockShowDates;
554 KSyncManager* mSyncManager; 555 KSyncManager* mSyncManager;
555 AlarmDialog * mAlarmDialog; 556 AlarmDialog * mAlarmDialog;
556 QString mAlarmNotification; 557 QString mAlarmNotification;
557 QString mSuspendAlarmNotification; 558 QString mSuspendAlarmNotification;
558 QTimer* mSuspendTimer; 559 QTimer* mSuspendTimer;
559 QTimer* mAlarmTimer; 560 QTimer* mAlarmTimer;
560 QTimer* mRecheckAlarmTimer; 561 QTimer* mRecheckAlarmTimer;
561 void computeAlarm( QString ); 562 void computeAlarm( QString );
562 void startAlarm( QString, QString ); 563 void startAlarm( QString, QString );
563 void setSyncEventsReadOnly(); 564 void setSyncEventsReadOnly();
564 565
565 QDateTime loadedFileVersion; 566 QDateTime loadedFileVersion;
566 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 567 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
567 void checkExternalId( Incidence * inc ); 568 void checkExternalId( Incidence * inc );
568 int mGlobalSyncMode; 569 int mGlobalSyncMode;
569 QString mCurrentSyncDevice; 570 QString mCurrentSyncDevice;
570 QString mCurrentSyncName; 571 QString mCurrentSyncName;
571 void init(); 572 void init();
572 int mDatePickerMode; 573 int mDatePickerMode;
573 bool mFlagEditDescription; 574 bool mFlagEditDescription;
574 QDateTime mLastCalendarSync; 575 QDateTime mLastCalendarSync;
575 void createPrinter(); 576 void createPrinter();
576 577
577 void calendarModified( bool, Calendar * ); 578 void calendarModified( bool, Calendar * );
578 579
579 CalPrinter *mCalPrinter; 580 CalPrinter *mCalPrinter;
580 581
581 QSplitter *mPanner; 582 QSplitter *mPanner;
582 QSplitter *mLeftSplitter; 583 QSplitter *mLeftSplitter;
583 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame; 584 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame;
584 QWidgetStack *mRightFrame; 585 QWidgetStack *mRightFrame;
585 586
586 KDatePicker* mDatePicker; 587 KDatePicker* mDatePicker;
587 QVBox* mDateFrame; 588 QVBox* mDateFrame;
588 589
589 DateNavigatorContainer *mDateNavigator; // widget showing small month view. 590 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
590 591
591 KOFilterView *mFilterView; 592 KOFilterView *mFilterView;
592 KOCalEditView *mCalEditView; 593 KOCalEditView *mCalEditView;
593 594
594 ResourceView *mResourceView; 595 ResourceView *mResourceView;
595 596
596 // calendar object for this viewing instance 597 // calendar object for this viewing instance
597 Calendar *mCalendar; 598 Calendar *mCalendar;
598 599
599 CalendarResourceManager *mResourceManager; 600 CalendarResourceManager *mResourceManager;
600 601
601 FileStorage *mStorage; 602 FileStorage *mStorage;
602 603
603 DateNavigator *mNavigator; 604 DateNavigator *mNavigator;
604 605
605 KOViewManager *mViewManager; 606 KOViewManager *mViewManager;
606 KODialogManager *mDialogManager; 607 KODialogManager *mDialogManager;
607 608
608 // Calendar filters 609 // Calendar filters
609 QPtrList<CalFilter> mFilters; 610 QPtrList<CalFilter> mFilters;
610 611
611 // various housekeeping variables. 612 // various housekeeping variables.
612 bool mModified; // flag indicating if calendar is modified 613 bool mModified; // flag indicating if calendar is modified
613 bool mReadOnly; // flag indicating if calendar is read-only 614 bool mReadOnly; // flag indicating if calendar is read-only
614 QDate mSaveSingleDate; 615 QDate mSaveSingleDate;
615 616
616 Incidence *mSelectedIncidence; 617 Incidence *mSelectedIncidence;
617 Incidence *mMoveIncidence; 618 Incidence *mMoveIncidence;
618 QDate mMoveIncidenceOldDate; 619 QDate mMoveIncidenceOldDate;
619 KOTodoView *mTodoList; 620 KOTodoView *mTodoList;
620 KOEventEditor * mEventEditor; 621 KOEventEditor * mEventEditor;
621 KOTodoEditor * mTodoEditor; 622 KOTodoEditor * mTodoEditor;
622 KOEventViewerDialog * mEventViewerDialog; 623 KOEventViewerDialog * mEventViewerDialog;
623 void keyPressEvent ( QKeyEvent *e) ; 624 void keyPressEvent ( QKeyEvent *e) ;
624 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 625 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
625}; 626};
626 627
627 628
628class CalendarViewVisitor : public Incidence::Visitor 629class CalendarViewVisitor : public Incidence::Visitor
629{ 630{
630 public: 631 public:
631 CalendarViewVisitor() : mView( 0 ) {} 632 CalendarViewVisitor() : mView( 0 ) {}
632 633
633 bool act( Incidence *incidence, CalendarView *view ) 634 bool act( Incidence *incidence, CalendarView *view )
634 { 635 {
635 mView = view; 636 mView = view;
636 return incidence->accept( *this ); 637 return incidence->accept( *this );
637 } 638 }
638 639
639 protected: 640 protected:
640 CalendarView *mView; 641 CalendarView *mView;
641}; 642};
642 643
643class ShowIncidenceVisitor : public CalendarViewVisitor 644class ShowIncidenceVisitor : public CalendarViewVisitor
644{ 645{
645 protected: 646 protected:
646 bool visit( Event *event ) { mView->showEvent( event ); return true; } 647 bool visit( Event *event ) { mView->showEvent( event ); return true; }
647 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 648 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
648 bool visit( Journal * j ) { mView->showJournal( j );return true; } 649 bool visit( Journal * j ) { mView->showJournal( j );return true; }
649}; 650};
650 651
651class EditIncidenceVisitor : public CalendarViewVisitor 652class EditIncidenceVisitor : public CalendarViewVisitor
652{ 653{
653 protected: 654 protected:
654 bool visit( Event *event ) { mView->editEvent( event ); return true; } 655 bool visit( Event *event ) { mView->editEvent( event ); return true; }
655 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 656 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
656 bool visit( Journal *j ) { mView->editJournal( j); return true; } 657 bool visit( Journal *j ) { mView->editJournal( j); return true; }
657}; 658};
658 659
659class DeleteIncidenceVisitor : public CalendarViewVisitor 660class DeleteIncidenceVisitor : public CalendarViewVisitor
660{ 661{
661 protected: 662 protected:
662 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 663 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
663 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 664 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
664 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 665 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
665}; 666};
666 667
667#endif 668#endif