summaryrefslogtreecommitdiffabout
Unidiff
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,4859 +1,5057 @@
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 ) {
2442 maxVal = QApplication::desktop()->width() -10; 2640 maxVal = QApplication::desktop()->width() -10;
2443 } else { 2641 } else {
2444 maxVal = QApplication::desktop()->height()-10; 2642 maxVal = QApplication::desktop()->height()-10;
2445 } 2643 }
2446 sizes << resetval; 2644 sizes << resetval;
2447 if ( maxVal < resetval + resetval) 2645 if ( maxVal < resetval + resetval)
2448 resetval = maxVal - resetval; 2646 resetval = maxVal - resetval;
2449 sizes << resetval; 2647 sizes << resetval;
2450 sizes << 100; 2648 sizes << 100;
2451 } 2649 }
2452 mLeftFrame->setSizes(sizes); 2650 mLeftFrame->setSizes(sizes);
2453 sizes = config->readIntListEntry("Main Splitter Frame"); 2651 sizes = config->readIntListEntry("Main Splitter Frame");
2454 resetval = 0; 2652 resetval = 0;
2455 maxVal = 0; 2653 maxVal = 0;
2456 if (sizes.count() != 2) { 2654 if (sizes.count() != 2) {
2457 if ( !KOPrefs::instance()->mVerticalScreen ) { 2655 if ( !KOPrefs::instance()->mVerticalScreen ) {
2458 resetval = mDateNavigator->sizeHint().width()+2; 2656 resetval = mDateNavigator->sizeHint().width()+2;
2459 } else { 2657 } else {
2460 resetval = mDateNavigator->sizeHint().height()+2; 2658 resetval = mDateNavigator->sizeHint().height()+2;
2461 } 2659 }
2462 } 2660 }
2463 if ( resetval ) { 2661 if ( resetval ) {
2464 sizes.clear(); 2662 sizes.clear();
2465 if ( !KOPrefs::instance()->mVerticalScreen ) { 2663 if ( !KOPrefs::instance()->mVerticalScreen ) {
2466 maxVal = QApplication::desktop()->width() -10; 2664 maxVal = QApplication::desktop()->width() -10;
2467 } else { 2665 } else {
2468 maxVal = QApplication::desktop()->height()-10; 2666 maxVal = QApplication::desktop()->height()-10;
2469 } 2667 }
2470 sizes << resetval; 2668 sizes << resetval;
2471 if ( maxVal < resetval + resetval) 2669 if ( maxVal < resetval + resetval)
2472 resetval = maxVal - resetval; 2670 resetval = maxVal - resetval;
2473 sizes << resetval; 2671 sizes << resetval;
2474 } 2672 }
2475 mMainFrame->setSizes(sizes); 2673 mMainFrame->setSizes(sizes);
2476 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2674 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2477 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2675 else if ( dateCount == 7 ) mNavigator->selectWeek();
2478 else mNavigator->selectDates( dateCount ); 2676 else mNavigator->selectDates( dateCount );
2479 // mViewManager->readSettings( config ); 2677 // mViewManager->readSettings( config );
2480 updateConfig(); 2678 updateConfig();
2481 globalFlagBlockAgenda = 2; 2679 globalFlagBlockAgenda = 2;
2482 mViewManager->readSettings( config ); 2680 mViewManager->readSettings( config );
2483 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2681 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2484} 2682}
2485 2683
2486void CalendarView::checkSuspendAlarm() 2684void CalendarView::checkSuspendAlarm()
2487{ 2685{
2488 if ( mSuspendTimer->isActive() ) { 2686 if ( mSuspendTimer->isActive() ) {
2489 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2687 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2490 } 2688 }
2491} 2689}
2492void CalendarView::writeSettings() 2690void CalendarView::writeSettings()
2493{ 2691{
2494 // kdDebug() << "CalendarView::writeSettings" << endl; 2692 // kdDebug() << "CalendarView::writeSettings" << endl;
2495 2693
2496 KConfig *config = KOGlobals::config(); 2694 KConfig *config = KOGlobals::config();
2497 2695
2498 mViewManager->writeSettings( config ); 2696 mViewManager->writeSettings( config );
2499 mTodoList->saveLayout(config,QString("Todo Layout")); 2697 mTodoList->saveLayout(config,QString("Todo Layout"));
2500 mDialogManager->writeSettings( config ); 2698 mDialogManager->writeSettings( config );
2501 //KOPrefs::instance()->usrWriteConfig(); 2699 //KOPrefs::instance()->usrWriteConfig();
2502 KOPrefs::instance()->writeConfig(); 2700 KOPrefs::instance()->writeConfig();
2503 2701
2504 writeFilterSettings(config); 2702 writeFilterSettings(config);
2505 config->setGroup( "AppRun" ); 2703 config->setGroup( "AppRun" );
2506 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2704 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2507 int days = dt.daysTo( QDate::currentDate() ); 2705 int days = dt.daysTo( QDate::currentDate() );
2508 dt = dt.addDays( days ); 2706 dt = dt.addDays( days );
2509 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2707 int secs = dt.secsTo( QDateTime::currentDateTime() );
2510 config->writeEntry( "LatestProgramStopDays", days ); 2708 config->writeEntry( "LatestProgramStopDays", days );
2511 config->writeEntry( "LatestProgramStopSecs", secs ); 2709 config->writeEntry( "LatestProgramStopSecs", secs );
2512 //qDebug("KO: Writing stop time: %d ", secs); 2710 //qDebug("KO: Writing stop time: %d ", secs);
2513 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2711 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2514 //QDateTime latest = dt.addSecs ( secs ); 2712 //QDateTime latest = dt.addSecs ( secs );
2515 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2713 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2516 config->setGroup( "Views" ); 2714 config->setGroup( "Views" );
2517 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2715 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2518 2716
2519#if 0 2717#if 0
2520 qDebug("********************* "); 2718 qDebug("********************* ");
2521 qDebug("Testcode secsto "); 2719 qDebug("Testcode secsto ");
2522 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2720 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2523 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2721 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2524 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2722 int secsto = dt_nodaylight.secsTo( dt_daylight );
2525 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2723 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2526 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2724 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2527 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2725 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2528 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2726 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2529 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2727 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2530 qDebug("********************* testcode end"); 2728 qDebug("********************* testcode end");
2531 2729
2532#endif 2730#endif
2533 2731
2534 QValueList<int> listINT = mLeftFrame->sizes(); 2732 QValueList<int> listINT = mLeftFrame->sizes();
2535 config->writeEntry("Left Splitter Frame",listINT); 2733 config->writeEntry("Left Splitter Frame",listINT);
2536 QValueList<int> listINT2 = mMainFrame->sizes(); 2734 QValueList<int> listINT2 = mMainFrame->sizes();
2537 config->writeEntry("Main Splitter Frame",listINT2); 2735 config->writeEntry("Main Splitter Frame",listINT2);
2538#ifdef DESKTOP_VERSION 2736#ifdef DESKTOP_VERSION
2539 config->setGroup("WidgetLayout"); 2737 config->setGroup("WidgetLayout");
2540 QStringList list ;//= config->readListEntry("MainLayout"); 2738 QStringList list ;//= config->readListEntry("MainLayout");
2541 int x,y,w,h; 2739 int x,y,w,h;
2542 QWidget* wid; 2740 QWidget* wid;
2543 wid = topLevelWidget(); 2741 wid = topLevelWidget();
2544 x = wid->geometry().x(); 2742 x = wid->geometry().x();
2545 y = wid->geometry().y(); 2743 y = wid->geometry().y();
2546 w = wid->width(); 2744 w = wid->width();
2547 h = wid->height(); 2745 h = wid->height();
2548 list.clear(); 2746 list.clear();
2549 list << QString::number( x ); 2747 list << QString::number( x );
2550 list << QString::number( y ); 2748 list << QString::number( y );
2551 list << QString::number( w ); 2749 list << QString::number( w );
2552 list << QString::number( h ); 2750 list << QString::number( h );
2553 config->writeEntry("MainLayout",list ); 2751 config->writeEntry("MainLayout",list );
2554 2752
2555 wid = mEventEditor; 2753 wid = mEventEditor;
2556 x = wid->geometry().x(); 2754 x = wid->geometry().x();
2557 y = wid->geometry().y(); 2755 y = wid->geometry().y();
2558 w = wid->width(); 2756 w = wid->width();
2559 h = wid->height(); 2757 h = wid->height();
2560 list.clear(); 2758 list.clear();
2561 list << QString::number( x ); 2759 list << QString::number( x );
2562 list << QString::number( y ); 2760 list << QString::number( y );
2563 list << QString::number( w ); 2761 list << QString::number( w );
2564 list << QString::number( h ); 2762 list << QString::number( h );
2565 config->writeEntry("EditEventLayout",list ); 2763 config->writeEntry("EditEventLayout",list );
2566 2764
2567 wid = mTodoEditor; 2765 wid = mTodoEditor;
2568 x = wid->geometry().x(); 2766 x = wid->geometry().x();
2569 y = wid->geometry().y(); 2767 y = wid->geometry().y();
2570 w = wid->width(); 2768 w = wid->width();
2571 h = wid->height(); 2769 h = wid->height();
2572 list.clear(); 2770 list.clear();
2573 list << QString::number( x ); 2771 list << QString::number( x );
2574 list << QString::number( y ); 2772 list << QString::number( y );
2575 list << QString::number( w ); 2773 list << QString::number( w );
2576 list << QString::number( h ); 2774 list << QString::number( h );
2577 config->writeEntry("EditTodoLayout",list ); 2775 config->writeEntry("EditTodoLayout",list );
2578 wid = getEventViewerDialog(); 2776 wid = getEventViewerDialog();
2579 x = wid->geometry().x(); 2777 x = wid->geometry().x();
2580 y = wid->geometry().y(); 2778 y = wid->geometry().y();
2581 w = wid->width(); 2779 w = wid->width();
2582 h = wid->height(); 2780 h = wid->height();
2583 list.clear(); 2781 list.clear();
2584 list << QString::number( x ); 2782 list << QString::number( x );
2585 list << QString::number( y ); 2783 list << QString::number( y );
2586 list << QString::number( w ); 2784 list << QString::number( w );
2587 list << QString::number( h ); 2785 list << QString::number( h );
2588 config->writeEntry("ViewerLayout",list ); 2786 config->writeEntry("ViewerLayout",list );
2589 wid = mDialogManager->getSearchDialog(); 2787 wid = mDialogManager->getSearchDialog();
2590 if ( wid ) { 2788 if ( wid ) {
2591 x = wid->geometry().x(); 2789 x = wid->geometry().x();
2592 y = wid->geometry().y(); 2790 y = wid->geometry().y();
2593 w = wid->width(); 2791 w = wid->width();
2594 h = wid->height(); 2792 h = wid->height();
2595 list.clear(); 2793 list.clear();
2596 list << QString::number( x ); 2794 list << QString::number( x );
2597 list << QString::number( y ); 2795 list << QString::number( y );
2598 list << QString::number( w ); 2796 list << QString::number( w );
2599 list << QString::number( h ); 2797 list << QString::number( h );
2600 config->writeEntry("SearchLayout",list ); 2798 config->writeEntry("SearchLayout",list );
2601 } 2799 }
2602#endif 2800#endif
2603 2801
2604 2802
2605 config->sync(); 2803 config->sync();
2606} 2804}
2607 2805
2608void CalendarView::readFilterSettings(KConfig *config) 2806void CalendarView::readFilterSettings(KConfig *config)
2609{ 2807{
2610 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2808 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2611 2809
2612 mFilters.clear(); 2810 mFilters.clear();
2613 2811
2614 config->setGroup("General"); 2812 config->setGroup("General");
2615 QStringList filterList = config->readListEntry("CalendarFilters"); 2813 QStringList filterList = config->readListEntry("CalendarFilters");
2616 2814
2617 QStringList::ConstIterator it = filterList.begin(); 2815 QStringList::ConstIterator it = filterList.begin();
2618 QStringList::ConstIterator end = filterList.end(); 2816 QStringList::ConstIterator end = filterList.end();
2619 while(it != end) { 2817 while(it != end) {
2620 // kdDebug() << " filter: " << (*it) << endl; 2818 // kdDebug() << " filter: " << (*it) << endl;
2621 2819
2622 CalFilter *filter; 2820 CalFilter *filter;
2623 filter = new CalFilter(*it); 2821 filter = new CalFilter(*it);
2624 config->setGroup("Filter_" + (*it).utf8()); 2822 config->setGroup("Filter_" + (*it).utf8());
2625 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2823 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2626 filter->setCriteria(config->readNumEntry("Criteria",0)); 2824 filter->setCriteria(config->readNumEntry("Criteria",0));
2627 filter->setCategoryList(config->readListEntry("CategoryList")); 2825 filter->setCategoryList(config->readListEntry("CategoryList"));
2628 mFilters.append(filter); 2826 mFilters.append(filter);
2629 2827
2630 ++it; 2828 ++it;
2631 } 2829 }
2632 2830
2633 if (mFilters.count() == 0) { 2831 if (mFilters.count() == 0) {
2634 CalFilter *filter = new CalFilter(i18n("Default")); 2832 CalFilter *filter = new CalFilter(i18n("Default"));
2635 mFilters.append(filter); 2833 mFilters.append(filter);
2636 } 2834 }
2637 mFilterView->updateFilters(); 2835 mFilterView->updateFilters();
2638 config->setGroup("FilterView"); 2836 config->setGroup("FilterView");
2639 2837
2640 mFilterView->blockSignals(true); 2838 mFilterView->blockSignals(true);
2641 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2839 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2642 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2840 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2643 mFilterView->blockSignals(false); 2841 mFilterView->blockSignals(false);
2644 // We do it manually to avoid it being done twice by the above calls 2842 // We do it manually to avoid it being done twice by the above calls
2645 updateFilter(); 2843 updateFilter();
2646} 2844}
2647 2845
2648void CalendarView::writeFilterSettings(KConfig *config) 2846void CalendarView::writeFilterSettings(KConfig *config)
2649{ 2847{
2650 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2848 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2651 2849
2652 QStringList filterList; 2850 QStringList filterList;
2653 2851
2654 CalFilter *filter = mFilters.first(); 2852 CalFilter *filter = mFilters.first();
2655 while(filter) { 2853 while(filter) {
2656 // kdDebug() << " fn: " << filter->name() << endl; 2854 // kdDebug() << " fn: " << filter->name() << endl;
2657 filterList << filter->name(); 2855 filterList << filter->name();
2658 config->setGroup("Filter_" + filter->name().utf8()); 2856 config->setGroup("Filter_" + filter->name().utf8());
2659 config->writeEntry("Criteria",filter->criteria()); 2857 config->writeEntry("Criteria",filter->criteria());
2660 config->writeEntry("CategoryList",filter->categoryList()); 2858 config->writeEntry("CategoryList",filter->categoryList());
2661 filter = mFilters.next(); 2859 filter = mFilters.next();
2662 } 2860 }
2663 config->setGroup("General"); 2861 config->setGroup("General");
2664 config->writeEntry("CalendarFilters",filterList); 2862 config->writeEntry("CalendarFilters",filterList);
2665 2863
2666 config->setGroup("FilterView"); 2864 config->setGroup("FilterView");
2667 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2865 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2668 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2866 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2669} 2867}
2670 2868
2671 2869
2672void CalendarView::goToday() 2870void CalendarView::goToday()
2673{ 2871{
2674 if ( mViewManager->currentView()->isMonthView() ) 2872 if ( mViewManager->currentView()->isMonthView() )
2675 mNavigator->selectTodayMonth(); 2873 mNavigator->selectTodayMonth();
2676 else 2874 else
2677 mNavigator->selectToday(); 2875 mNavigator->selectToday();
2678} 2876}
2679 2877
2680void CalendarView::goNext() 2878void CalendarView::goNext()
2681{ 2879{
2682 mNavigator->selectNext(); 2880 mNavigator->selectNext();
2683} 2881}
2684 2882
2685void CalendarView::goPrevious() 2883void CalendarView::goPrevious()
2686{ 2884{
2687 mNavigator->selectPrevious(); 2885 mNavigator->selectPrevious();
2688} 2886}
2689void CalendarView::goNextMonth() 2887void CalendarView::goNextMonth()
2690{ 2888{
2691 mNavigator->selectNextMonth(); 2889 mNavigator->selectNextMonth();
2692} 2890}
2693 2891
2694void CalendarView::goPreviousMonth() 2892void CalendarView::goPreviousMonth()
2695{ 2893{
2696 mNavigator->selectPreviousMonth(); 2894 mNavigator->selectPreviousMonth();
2697} 2895}
2698 2896
2699void CalendarView::updateConfig() 2897void CalendarView::updateConfig()
2700{ 2898{
2701 if ( KOPrefs::instance()->mUseAppColors ) 2899 if ( KOPrefs::instance()->mUseAppColors )
2702 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2900 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2703 emit configChanged(); 2901 emit configChanged();
2704 mTodoList->updateConfig(); 2902 mTodoList->updateConfig();
2705 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2903 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2706 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2904 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2707 // To make the "fill window" configurations work 2905 // To make the "fill window" configurations work
2708 //mViewManager->raiseCurrentView(); 2906 //mViewManager->raiseCurrentView();
2709} 2907}
2710 2908
2711 2909
2712void CalendarView::eventChanged(Event *event) 2910void CalendarView::eventChanged(Event *event)
2713{ 2911{
2714 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2912 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2715 //updateUnmanagedViews(); 2913 //updateUnmanagedViews();
2716} 2914}
2717 2915
2718void CalendarView::eventAdded(Event *event) 2916void CalendarView::eventAdded(Event *event)
2719{ 2917{
2720 changeEventDisplay(event,KOGlobals::EVENTADDED); 2918 changeEventDisplay(event,KOGlobals::EVENTADDED);
2721} 2919}
2722 2920
2723void CalendarView::eventToBeDeleted(Event *) 2921void CalendarView::eventToBeDeleted(Event *)
2724{ 2922{
2725 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2923 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2726} 2924}
2727 2925
2728void CalendarView::eventDeleted() 2926void CalendarView::eventDeleted()
2729{ 2927{
2730 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2928 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2731} 2929}
2732void CalendarView::changeTodoDisplay(Todo *which, int action) 2930void CalendarView::changeTodoDisplay(Todo *which, int action)
2733{ 2931{
2734 changeIncidenceDisplay((Incidence *)which, action); 2932 changeIncidenceDisplay((Incidence *)which, action);
2735 mDateNavigator->updateView(); //LR 2933 mDateNavigator->updateView(); //LR
2736 //mDialogManager->updateSearchDialog(); 2934 //mDialogManager->updateSearchDialog();
2737 2935
2738 if (which) { 2936 if (which) {
2739 mViewManager->updateWNview(); 2937 mViewManager->updateWNview();
2740 //mTodoList->updateView(); 2938 //mTodoList->updateView();
2741 } 2939 }
2742 2940
2743} 2941}
2744 2942
2745void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2943void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2746{ 2944{
2747 updateUnmanagedViews(); 2945 updateUnmanagedViews();
2748 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2946 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2749 if ( action == KOGlobals::EVENTDELETED ) { //delete 2947 if ( action == KOGlobals::EVENTDELETED ) { //delete
2750 mCalendar->checkAlarmForIncidence( 0, true ); 2948 mCalendar->checkAlarmForIncidence( 0, true );
2751 if ( mEventViewerDialog ) 2949 if ( mEventViewerDialog )
2752 mEventViewerDialog->hide(); 2950 mEventViewerDialog->hide();
2753 } 2951 }
2754 else 2952 else
2755 mCalendar->checkAlarmForIncidence( which , false ); 2953 mCalendar->checkAlarmForIncidence( which , false );
2756} 2954}
2757 2955
2758// most of the changeEventDisplays() right now just call the view's 2956// most of the changeEventDisplays() right now just call the view's
2759// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2957// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2760void CalendarView::changeEventDisplay(Event *which, int action) 2958void CalendarView::changeEventDisplay(Event *which, int action)
2761{ 2959{
2762 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2960 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2763 changeIncidenceDisplay((Incidence *)which, action); 2961 changeIncidenceDisplay((Incidence *)which, action);
2764 static bool clearallviews = false; 2962 static bool clearallviews = false;
2765 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2963 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2766 if ( clearallviews ) { 2964 if ( clearallviews ) {
2767 clearAllViews(); 2965 clearAllViews();
2768 clearallviews = false; 2966 clearallviews = false;
2769 } 2967 }
2770 return; 2968 return;
2771 } 2969 }
2772 clearallviews = true; 2970 clearallviews = true;
2773 mDateNavigator->updateView(); 2971 mDateNavigator->updateView();
2774 //mDialogManager->updateSearchDialog(); 2972 //mDialogManager->updateSearchDialog();
2775 if (which) { 2973 if (which) {
2776 // If there is an event view visible update the display 2974 // If there is an event view visible update the display
2777 mViewManager->currentView()->changeEventDisplay(which,action); 2975 mViewManager->currentView()->changeEventDisplay(which,action);
2778 // TODO: check, if update needed 2976 // TODO: check, if update needed
2779 // if (which->getTodoStatus()) { 2977 // if (which->getTodoStatus()) {
2780 mTodoList->updateView(); 2978 mTodoList->updateView();
2781 if ( action != KOGlobals::EVENTDELETED ) { 2979 if ( action != KOGlobals::EVENTDELETED ) {
2782 mConflictingEvent = which ; 2980 mConflictingEvent = which ;
2783 int time = 1000; 2981 int time = 1000;
2784#ifdef DESKTOP_VERSION 2982#ifdef DESKTOP_VERSION
2785 time = 500; 2983 time = 500;
2786#endif 2984#endif
2787 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 2985 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
2788 } 2986 }
2789 // } 2987 // }
2790 } else { 2988 } else {
2791 mViewManager->currentView()->updateView(); 2989 mViewManager->currentView()->updateView();
2792 } 2990 }
2793} 2991}
2794void CalendarView::checkConflictForEvent() 2992void CalendarView::checkConflictForEvent()
2795{ 2993{
2796 2994
2797 if (!KOPrefs::instance()->mConfirm) 2995 if (!KOPrefs::instance()->mConfirm)
2798 return; 2996 return;
2799 if ( ! mConflictingEvent ) return; 2997 if ( ! mConflictingEvent ) return;
2800 Event * conflictingEvent = mConflictingEvent; 2998 Event * conflictingEvent = mConflictingEvent;
2801 mConflictingEvent = 0; 2999 mConflictingEvent = 0;
2802 QDateTime current = QDateTime::currentDateTime(); 3000 QDateTime current = QDateTime::currentDateTime();
2803 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3001 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
2804 return; 3002 return;
2805 } 3003 }
2806 QPtrList<Event> testlist = mCalendar->events(); 3004 QPtrList<Event> testlist = mCalendar->events();
2807 Event * test = testlist.first(); 3005 Event * test = testlist.first();
2808 QDateTime conflict; 3006 QDateTime conflict;
2809 QDateTime retVal; 3007 QDateTime retVal;
2810 bool found = false; 3008 bool found = false;
2811 Event * cE = 0; 3009 Event * cE = 0;
2812 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3010 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
2813 while ( test ) { 3011 while ( test ) {
2814 qApp->processEvents(); 3012 qApp->processEvents();
2815 bool skip = false; 3013 bool skip = false;
2816 if ( found ) 3014 if ( found )
2817 skip = !test->matchTime( &current, &conflict ); 3015 skip = !test->matchTime( &current, &conflict );
2818 else 3016 else
2819 skip = !test->matchTime( &current, 0 ); 3017 skip = !test->matchTime( &current, 0 );
2820 if ( !skip && !test->doesFloat() ) { 3018 if ( !skip && !test->doesFloat() ) {
2821 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3019 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
2822 if ( ! found ) { 3020 if ( ! found ) {
2823 conflict = retVal; 3021 conflict = retVal;
2824 cE = test; 3022 cE = test;
2825 } else { 3023 } else {
2826 if ( retVal < conflict ) { 3024 if ( retVal < conflict ) {
2827 conflict = retVal; 3025 conflict = retVal;
2828 cE = test; 3026 cE = test;
2829 } 3027 }
2830 } 3028 }
2831 found = true; 3029 found = true;
2832 } 3030 }
2833 } 3031 }
2834 test = testlist.next(); 3032 test = testlist.next();
2835 } 3033 }
2836 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3034 topLevelWidget()->setCaption( i18n("KO/Pi") );
2837 if ( found ) { 3035 if ( found ) {
2838 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 3036 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
2839 qApp->processEvents(); 3037 qApp->processEvents();
2840 int km = KMessageBox::warningContinueCancel(this,mess, 3038 int km = KMessageBox::warningContinueCancel(this,mess,
2841 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); 3039 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!"));
2842 if ( km != KMessageBox::Continue ) { 3040 if ( km != KMessageBox::Continue ) {
2843 return; 3041 return;
2844 } 3042 }
2845 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3043 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
2846 mViewManager->showDayView(); 3044 mViewManager->showDayView();
2847 mNavigator->slotDaySelect( conflict.date() ); 3045 mNavigator->slotDaySelect( conflict.date() );
2848 int hour = conflict.time().hour(); 3046 int hour = conflict.time().hour();
2849 mViewManager->agendaView()->setStartHour( hour ); 3047 mViewManager->agendaView()->setStartHour( hour );
2850 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3048 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
2851 } else 3049 } else
2852 topLevelWidget()->setCaption( i18n("No conflict found") ); 3050 topLevelWidget()->setCaption( i18n("No conflict found") );
2853 return; 3051 return;
2854 3052
2855} 3053}
2856 3054
2857void CalendarView::updateTodoViews() 3055void CalendarView::updateTodoViews()
2858{ 3056{
2859 mTodoList->updateView(); 3057 mTodoList->updateView();
2860 mViewManager->currentView()->updateView(); 3058 mViewManager->currentView()->updateView();
2861 3059
2862} 3060}
2863 3061
2864 3062
2865 3063
2866void CalendarView::clearAllViews() 3064void CalendarView::clearAllViews()
2867{ 3065{
2868 mTodoList->clearList(); 3066 mTodoList->clearList();
2869 mViewManager->clearAllViews(); 3067 mViewManager->clearAllViews();
2870 SearchDialog * sd = mDialogManager->getSearchDialog(); 3068 SearchDialog * sd = mDialogManager->getSearchDialog();
2871 if ( sd ) { 3069 if ( sd ) {
2872 KOListView* kol = sd->listview(); 3070 KOListView* kol = sd->listview();
2873 if ( kol ) 3071 if ( kol )
2874 kol->clearList(); 3072 kol->clearList();
2875 } 3073 }
2876} 3074}
2877void CalendarView::updateView() 3075void CalendarView::updateView()
2878{ 3076{
2879 static bool clearallviews = false; 3077 static bool clearallviews = false;
2880 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3078 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2881 if ( clearallviews ) { 3079 if ( clearallviews ) {
2882 clearAllViews(); 3080 clearAllViews();
2883 clearallviews = false; 3081 clearallviews = false;
2884 } 3082 }
2885 return; 3083 return;
2886 } 3084 }
2887 clearallviews = true; 3085 clearallviews = true;
2888 DateList tmpList = mNavigator->selectedDates(); 3086 DateList tmpList = mNavigator->selectedDates();
2889 3087
2890 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3088 if ( KOPrefs::instance()->mHideNonStartedTodos )
2891 mTodoList->updateView(); 3089 mTodoList->updateView();
2892 // We assume that the navigator only selects consecutive days. 3090 // We assume that the navigator only selects consecutive days.
2893 updateView( tmpList.first(), tmpList.last() ); 3091 updateView( tmpList.first(), tmpList.last() );
2894} 3092}
2895 3093
2896void CalendarView::updateUnmanagedViews() 3094void CalendarView::updateUnmanagedViews()
2897{ 3095{
2898 mDateNavigator->updateDayMatrix(); 3096 mDateNavigator->updateDayMatrix();
2899} 3097}
2900 3098
2901int CalendarView::msgItemDelete(const QString name) 3099int CalendarView::msgItemDelete(const QString name)
2902{ 3100{
2903 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3101 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2904 i18n("This item will be\npermanently deleted."), 3102 i18n("This item will be\npermanently deleted."),
2905 i18n("KO/Pi Confirmation"),i18n("Delete")); 3103 i18n("KO/Pi Confirmation"),i18n("Delete"));
2906} 3104}
2907 3105
2908 3106
2909void CalendarView::edit_cut() 3107void CalendarView::edit_cut()
2910{ 3108{
2911 Event *anEvent=0; 3109 Event *anEvent=0;
2912 3110
2913 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3111 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2914 3112
2915 if (mViewManager->currentView()->isEventView()) { 3113 if (mViewManager->currentView()->isEventView()) {
2916 if ( incidence && incidence->typeID() == eventID ) { 3114 if ( incidence && incidence->typeID() == eventID ) {
2917 anEvent = static_cast<Event *>(incidence); 3115 anEvent = static_cast<Event *>(incidence);
2918 } 3116 }
2919 } 3117 }
2920 3118
2921 if (!anEvent) { 3119 if (!anEvent) {
2922 KNotifyClient::beep(); 3120 KNotifyClient::beep();
2923 return; 3121 return;
2924 } 3122 }
2925 DndFactory factory( mCalendar ); 3123 DndFactory factory( mCalendar );
2926 factory.cutIncidence(anEvent); 3124 factory.cutIncidence(anEvent);
2927 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3125 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2928} 3126}
2929 3127
2930void CalendarView::edit_copy() 3128void CalendarView::edit_copy()
2931{ 3129{
2932 Event *anEvent=0; 3130 Event *anEvent=0;
2933 3131
2934 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3132 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2935 3133
2936 if (mViewManager->currentView()->isEventView()) { 3134 if (mViewManager->currentView()->isEventView()) {
2937 if ( incidence && incidence->typeID() == eventID ) { 3135 if ( incidence && incidence->typeID() == eventID ) {
2938 anEvent = static_cast<Event *>(incidence); 3136 anEvent = static_cast<Event *>(incidence);
2939 } 3137 }
2940 } 3138 }
2941 3139
2942 if (!anEvent) { 3140 if (!anEvent) {
2943 KNotifyClient::beep(); 3141 KNotifyClient::beep();
2944 return; 3142 return;
2945 } 3143 }
2946 DndFactory factory( mCalendar ); 3144 DndFactory factory( mCalendar );
2947 factory.copyIncidence(anEvent); 3145 factory.copyIncidence(anEvent);
2948} 3146}
2949 3147
2950void CalendarView::edit_paste() 3148void CalendarView::edit_paste()
2951{ 3149{
2952 QDate date = mNavigator->selectedDates().first(); 3150 QDate date = mNavigator->selectedDates().first();
2953 3151
2954 DndFactory factory( mCalendar ); 3152 DndFactory factory( mCalendar );
2955 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3153 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
2956 3154
2957 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3155 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2958} 3156}
2959void CalendarView::edit_global_options() 3157void CalendarView::edit_global_options()
2960{ 3158{
2961 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3159 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
2962 emit save(); 3160 emit save();
2963 emit saveStopTimer(); 3161 emit saveStopTimer();
2964 mDialogManager->showGlobalOptionsDialog(); 3162 mDialogManager->showGlobalOptionsDialog();
2965 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3163 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
2966 emit saveStopTimer(); 3164 emit saveStopTimer();
2967 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 3165 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
2968 i18n("Timezone settings"),i18n("Reload"))) { 3166 i18n("Timezone settings"),i18n("Reload"))) {
2969 qDebug("KO: TZ reload cancelled "); 3167 qDebug("KO: TZ reload cancelled ");
2970 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3168 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2971 return; 3169 return;
2972 } 3170 }
2973 qDebug("KO: Timezone change "); 3171 qDebug("KO: Timezone change ");
2974 loadCalendars(); 3172 loadCalendars();
2975 setModified(true); 3173 setModified(true);
2976 } 3174 }
2977 else 3175 else
2978 qDebug("KO: No tz change "); 3176 qDebug("KO: No tz change ");
2979} 3177}
2980void CalendarView::edit_options() 3178void CalendarView::edit_options()
2981{ 3179{
2982 mDialogManager->showOptionsDialog(); 3180 mDialogManager->showOptionsDialog();
2983} 3181}
2984 3182
2985 3183
2986void CalendarView::slotSelectPickerDate( QDate d) 3184void CalendarView::slotSelectPickerDate( QDate d)
2987{ 3185{
2988 mDateFrame->hide(); 3186 mDateFrame->hide();
2989 if ( mDatePickerMode == 1 ) { 3187 if ( mDatePickerMode == 1 ) {
2990 mNavigator->slotDaySelect( d ); 3188 mNavigator->slotDaySelect( d );
2991 } else if ( mDatePickerMode == 2 ) { 3189 } else if ( mDatePickerMode == 2 ) {
2992 if ( mMoveIncidence->typeID() == todoID ) { 3190 if ( mMoveIncidence->typeID() == todoID ) {
2993 Todo * to = (Todo *) mMoveIncidence; 3191 Todo * to = (Todo *) mMoveIncidence;
2994 QTime tim; 3192 QTime tim;
2995 int len = 0; 3193 int len = 0;
2996 if ( to->hasStartDate() && to->hasDueDate() ) 3194 if ( to->hasStartDate() && to->hasDueDate() )
2997 len = to->dtStart().secsTo( to->dtDue()); 3195 len = to->dtStart().secsTo( to->dtDue());
2998 if ( to->hasDueDate() ) 3196 if ( to->hasDueDate() )
2999 tim = to->dtDue().time(); 3197 tim = to->dtDue().time();
3000 else { 3198 else {
3001 tim = QTime ( 0,0,0 ); 3199 tim = QTime ( 0,0,0 );
3002 to->setFloats( true ); 3200 to->setFloats( true );
3003 to->setHasDueDate( true ); 3201 to->setHasDueDate( true );
3004 } 3202 }
3005 QDateTime dt ( d,tim ); 3203 QDateTime dt ( d,tim );
3006 to->setDtDue( dt ); 3204 to->setDtDue( dt );
3007 3205
3008 if ( to->hasStartDate() ) { 3206 if ( to->hasStartDate() ) {
3009 if ( len>0 ) 3207 if ( len>0 )
3010 to->setDtStart(to->dtDue().addSecs( -len )); 3208 to->setDtStart(to->dtDue().addSecs( -len ));
3011 else 3209 else
3012 if (to->dtStart() > to->dtDue() ) 3210 if (to->dtStart() > to->dtDue() )
3013 to->setDtStart(to->dtDue().addDays( -3 )); 3211 to->setDtStart(to->dtDue().addDays( -3 ));
3014 } 3212 }
3015 3213
3016 todoChanged( to ); 3214 todoChanged( to );
3017 } else if ( mMoveIncidence->typeID() == eventID ) { 3215 } else if ( mMoveIncidence->typeID() == eventID ) {
3018 if ( mMoveIncidence->doesRecur() ) { 3216 if ( mMoveIncidence->doesRecur() ) {
3019#if 0 3217#if 0
3020 // PENDING implement this 3218 // PENDING implement this
3021 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3219 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3022 mCalendar()->addIncidence( newInc ); 3220 mCalendar()->addIncidence( newInc );
3023 if ( mMoveIncidence->typeID() == todoID ) 3221 if ( mMoveIncidence->typeID() == todoID )
3024 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3222 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3025 else 3223 else
3026 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3224 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3027 mMoveIncidence = newInc; 3225 mMoveIncidence = newInc;
3028 3226
3029#endif 3227#endif
3030 } 3228 }
3031 QTime tim = mMoveIncidence->dtStart().time(); 3229 QTime tim = mMoveIncidence->dtStart().time();
3032 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3230 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3033 QDateTime dt ( d,tim ); 3231 QDateTime dt ( d,tim );
3034 mMoveIncidence->setDtStart( dt ); 3232 mMoveIncidence->setDtStart( dt );
3035 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3233 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3036 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3234 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3037 } else if ( mMoveIncidence->typeID() == journalID ) { 3235 } else if ( mMoveIncidence->typeID() == journalID ) {
3038 QTime tim = mMoveIncidence->dtStart().time(); 3236 QTime tim = mMoveIncidence->dtStart().time();
3039 QDateTime dt ( d,tim ); 3237 QDateTime dt ( d,tim );
3040 mMoveIncidence->setDtStart( dt ); 3238 mMoveIncidence->setDtStart( dt );
3041 updateView(); 3239 updateView();
3042 } 3240 }
3043 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3241 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3044 } 3242 }
3045} 3243}
3046 3244
3047void CalendarView::removeCategories() 3245void CalendarView::removeCategories()
3048{ 3246{
3049 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3247 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3050 QStringList catList = KOPrefs::instance()->mCustomCategories; 3248 QStringList catList = KOPrefs::instance()->mCustomCategories;
3051 QStringList catIncList; 3249 QStringList catIncList;
3052 QStringList newCatList; 3250 QStringList newCatList;
3053 Incidence* inc = incList.first(); 3251 Incidence* inc = incList.first();
3054 uint i; 3252 uint i;
3055 while ( inc ) { 3253 while ( inc ) {
3056 newCatList.clear(); 3254 newCatList.clear();
3057 catIncList = inc->categories() ; 3255 catIncList = inc->categories() ;
3058 for( i = 0; i< catIncList.count(); ++i ) { 3256 for( i = 0; i< catIncList.count(); ++i ) {
3059 if ( catList.contains (catIncList[i])) 3257 if ( catList.contains (catIncList[i]))
3060 newCatList.append( catIncList[i] ); 3258 newCatList.append( catIncList[i] );
3061 } 3259 }
3062 newCatList.sort(); 3260 newCatList.sort();
3063 inc->setCategories( newCatList.join(",") ); 3261 inc->setCategories( newCatList.join(",") );
3064 inc = incList.next(); 3262 inc = incList.next();
3065 } 3263 }
3066} 3264}
3067 3265
3068int CalendarView::addCategories() 3266int CalendarView::addCategories()
3069{ 3267{
3070 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3268 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3071 QStringList catList = KOPrefs::instance()->mCustomCategories; 3269 QStringList catList = KOPrefs::instance()->mCustomCategories;
3072 QStringList catIncList; 3270 QStringList catIncList;
3073 Incidence* inc = incList.first(); 3271 Incidence* inc = incList.first();
3074 uint i; 3272 uint i;
3075 int count = 0; 3273 int count = 0;
3076 while ( inc ) { 3274 while ( inc ) {
3077 catIncList = inc->categories() ; 3275 catIncList = inc->categories() ;
3078 for( i = 0; i< catIncList.count(); ++i ) { 3276 for( i = 0; i< catIncList.count(); ++i ) {
3079 if ( !catList.contains (catIncList[i])) { 3277 if ( !catList.contains (catIncList[i])) {
3080 catList.append( catIncList[i] ); 3278 catList.append( catIncList[i] );
3081 //qDebug("add cat %s ", catIncList[i].latin1()); 3279 //qDebug("add cat %s ", catIncList[i].latin1());
3082 ++count; 3280 ++count;
3083 } 3281 }
3084 } 3282 }
3085 inc = incList.next(); 3283 inc = incList.next();
3086 } 3284 }
3087 catList.sort(); 3285 catList.sort();
3088 KOPrefs::instance()->mCustomCategories = catList; 3286 KOPrefs::instance()->mCustomCategories = catList;
3089 return count; 3287 return count;
3090} 3288}
3091 3289
3092void CalendarView::editCategories() 3290void CalendarView::editCategories()
3093{ 3291{
3094 qDebug("CalendarView::editCategories() "); 3292 qDebug("CalendarView::editCategories() ");
3095 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3293 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3096 ced.exec(); 3294 ced.exec();
3097} 3295}
3098void CalendarView::manageCategories() 3296void CalendarView::manageCategories()
3099{ 3297{
3100 KOCatPrefs* cp = new KOCatPrefs(); 3298 KOCatPrefs* cp = new KOCatPrefs();
3101 cp->show(); 3299 cp->show();
3102 int w =cp->sizeHint().width() ; 3300 int w =cp->sizeHint().width() ;
3103 int h = cp->sizeHint().height() ; 3301 int h = cp->sizeHint().height() ;
3104 int dw = QApplication::desktop()->width(); 3302 int dw = QApplication::desktop()->width();
3105 int dh = QApplication::desktop()->height(); 3303 int dh = QApplication::desktop()->height();
3106 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3304 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3107 if ( !cp->exec() ) { 3305 if ( !cp->exec() ) {
3108 delete cp; 3306 delete cp;
3109 return; 3307 return;
3110 } 3308 }
3111 int count = 0; 3309 int count = 0;
3112 if ( cp->addCat() ) { 3310 if ( cp->addCat() ) {
3113 count = addCategories(); 3311 count = addCategories();
3114 if ( count ) { 3312 if ( count ) {
3115 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3313 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3116 writeSettings(); 3314 writeSettings();
3117 } else 3315 } else
3118 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3316 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3119 } else { 3317 } else {
3120 removeCategories(); 3318 removeCategories();
3121 updateView(); 3319 updateView();
3122 } 3320 }
3123 delete cp; 3321 delete cp;
3124} 3322}
3125 3323
3126void CalendarView::beamIncidence(Incidence * Inc) 3324void CalendarView::beamIncidence(Incidence * Inc)
3127{ 3325{
3128 QPtrList<Incidence> delSel ; 3326 QPtrList<Incidence> delSel ;
3129 delSel.append(Inc); 3327 delSel.append(Inc);
3130 beamIncidenceList( delSel ); 3328 beamIncidenceList( delSel );
3131} 3329}
3132void CalendarView::beamCalendar() 3330void CalendarView::beamCalendar()
3133{ 3331{
3134 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3332 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3135 //qDebug("beamCalendar() "); 3333 //qDebug("beamCalendar() ");
3136 beamIncidenceList( delSel ); 3334 beamIncidenceList( delSel );
3137} 3335}
3138void CalendarView::beamFilteredCalendar() 3336void CalendarView::beamFilteredCalendar()
3139{ 3337{
3140 QPtrList<Incidence> delSel = mCalendar->incidences(); 3338 QPtrList<Incidence> delSel = mCalendar->incidences();
3141 //qDebug("beamFilteredCalendar() "); 3339 //qDebug("beamFilteredCalendar() ");
3142 beamIncidenceList( delSel ); 3340 beamIncidenceList( delSel );
3143} 3341}
3144void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3342void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3145{ 3343{
3146 3344
3147 KOBeamPrefs beamDialog; 3345 KOBeamPrefs beamDialog;
3148 if ( beamDialog.exec () == QDialog::Rejected ) 3346 if ( beamDialog.exec () == QDialog::Rejected )
3149 return; 3347 return;
3150#ifdef DESKTOP_VERSION 3348#ifdef DESKTOP_VERSION
3151 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3349 QString fn = locateLocal( "tmp", "kopibeamfile" );
3152#else 3350#else
3153 QString fn = "/tmp/kopibeamfile"; 3351 QString fn = "/tmp/kopibeamfile";
3154#endif 3352#endif
3155 QString mes; 3353 QString mes;
3156 bool createbup = true; 3354 bool createbup = true;
3157 if ( createbup ) { 3355 if ( createbup ) {
3158 QString description = "\n"; 3356 QString description = "\n";
3159 CalendarLocal* cal = new CalendarLocal(); 3357 CalendarLocal* cal = new CalendarLocal();
3160 if ( beamDialog.beamLocal() ) 3358 if ( beamDialog.beamLocal() )
3161 cal->setLocalTime(); 3359 cal->setLocalTime();
3162 else 3360 else
3163 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3361 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3164 Incidence *incidence = delSel.first(); 3362 Incidence *incidence = delSel.first();
3165 bool addText = false; 3363 bool addText = false;
3166 if ( delSel.count() < 10 ) 3364 if ( delSel.count() < 10 )
3167 addText = true; 3365 addText = true;
3168 else { 3366 else {
3169 description.sprintf(i18n(" %d items?"),delSel.count() ); 3367 description.sprintf(i18n(" %d items?"),delSel.count() );
3170 } 3368 }
3171 while ( incidence ) { 3369 while ( incidence ) {
3172 Incidence *in = incidence->clone(); 3370 Incidence *in = incidence->clone();
3173 if ( ! in->summary().isEmpty() ) { 3371 if ( ! in->summary().isEmpty() ) {
3174 in->setDescription(""); 3372 in->setDescription("");
3175 } else { 3373 } else {
3176 in->setSummary( in->description().left(20)); 3374 in->setSummary( in->description().left(20));
3177 in->setDescription(""); 3375 in->setDescription("");
3178 } 3376 }
3179 if ( addText ) 3377 if ( addText )
3180 description += in->summary() + "\n"; 3378 description += in->summary() + "\n";
3181 cal->addIncidence( in ); 3379 cal->addIncidence( in );
3182 incidence = delSel.next(); 3380 incidence = delSel.next();
3183 } 3381 }
3184 if ( beamDialog.beamVcal() ) { 3382 if ( beamDialog.beamVcal() ) {
3185 fn += ".vcs"; 3383 fn += ".vcs";
3186 FileStorage storage( cal, fn, new VCalFormat ); 3384 FileStorage storage( cal, fn, new VCalFormat );
3187 storage.save(); 3385 storage.save();
3188 } else { 3386 } else {
3189 fn += ".ics"; 3387 fn += ".ics";
3190 FileStorage storage( cal, fn, new ICalFormat( ) ); 3388 FileStorage storage( cal, fn, new ICalFormat( ) );
3191 storage.save(); 3389 storage.save();
3192 } 3390 }
3193 delete cal; 3391 delete cal;
3194 mes = i18n("KO/Pi: Ready for beaming"); 3392 mes = i18n("KO/Pi: Ready for beaming");
3195 topLevelWidget()->setCaption(mes); 3393 topLevelWidget()->setCaption(mes);
3196 KApplication::convert2latin1( fn ); 3394 KApplication::convert2latin1( fn );
3197#ifndef DESKTOP_VERSION 3395#ifndef DESKTOP_VERSION
3198 Ir *ir = new Ir( this ); 3396 Ir *ir = new Ir( this );
3199 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3397 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3200 ir->send( fn, description, "text/x-vCalendar" ); 3398 ir->send( fn, description, "text/x-vCalendar" );
3201#endif 3399#endif
3202 } 3400 }
3203} 3401}
3204 3402
3205#ifndef DESKTOP_VERSION 3403#ifndef DESKTOP_VERSION
3206void CalendarView::beamDone( Ir *ir ) 3404void CalendarView::beamDone( Ir *ir )
3207{ 3405{
3208 delete ir; 3406 delete ir;
3209 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3407 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3210 topLevelWidget()->raise(); 3408 topLevelWidget()->raise();
3211} 3409}
3212#else 3410#else
3213void CalendarView::beamDone( Ir *){;} 3411void CalendarView::beamDone( Ir *){;}
3214#endif 3412#endif
3215void CalendarView::moveIncidence(Incidence * inc ) 3413void CalendarView::moveIncidence(Incidence * inc )
3216{ 3414{
3217 if ( !inc ) return; 3415 if ( !inc ) return;
3218 showDatePickerPopup(); 3416 showDatePickerPopup();
3219 mDatePickerMode = 2; 3417 mDatePickerMode = 2;
3220 mMoveIncidence = inc ; 3418 mMoveIncidence = inc ;
3221 QDate da; 3419 QDate da;
3222 if ( mMoveIncidence->typeID() == todoID ) { 3420 if ( mMoveIncidence->typeID() == todoID ) {
3223 Todo * to = (Todo *) mMoveIncidence; 3421 Todo * to = (Todo *) mMoveIncidence;
3224 if ( to->hasDueDate() ) 3422 if ( to->hasDueDate() )
3225 da = to->dtDue().date(); 3423 da = to->dtDue().date();
3226 else 3424 else
3227 da = QDate::currentDate(); 3425 da = QDate::currentDate();
3228 } else { 3426 } else {
3229 da = mMoveIncidence->dtStart().date(); 3427 da = mMoveIncidence->dtStart().date();
3230 } 3428 }
3231 //PENDING set date for recurring incidence to date of recurrence 3429 //PENDING set date for recurring incidence to date of recurrence
3232 //mMoveIncidenceOldDate; 3430 //mMoveIncidenceOldDate;
3233 mDatePicker->setDate( da ); 3431 mDatePicker->setDate( da );
3234} 3432}
3235void CalendarView::showDatePickerPopup() 3433void CalendarView::showDatePickerPopup()
3236{ 3434{
3237 if ( mDateFrame->isVisible() ) 3435 if ( mDateFrame->isVisible() )
3238 mDateFrame->hide(); 3436 mDateFrame->hide();
3239 else { 3437 else {
3240 int offX = 0, offY = 0; 3438 int offX = 0, offY = 0;
3241#ifdef DESKTOP_VERSION 3439#ifdef DESKTOP_VERSION
3242 int w =mDatePicker->sizeHint().width() ; 3440 int w =mDatePicker->sizeHint().width() ;
3243 int h = mDatePicker->sizeHint().height() ; 3441 int h = mDatePicker->sizeHint().height() ;
3244 int dw = topLevelWidget()->width(); 3442 int dw = topLevelWidget()->width();
3245 int dh = topLevelWidget()->height(); 3443 int dh = topLevelWidget()->height();
3246 offX = topLevelWidget()->x(); 3444 offX = topLevelWidget()->x();
3247 offY = topLevelWidget()->y(); 3445 offY = topLevelWidget()->y();
3248#else 3446#else
3249 int w =mDatePicker->sizeHint().width() ; 3447 int w =mDatePicker->sizeHint().width() ;
3250 int h = mDatePicker->sizeHint().height() ; 3448 int h = mDatePicker->sizeHint().height() ;
3251 int dw = QApplication::desktop()->width(); 3449 int dw = QApplication::desktop()->width();
3252 int dh = QApplication::desktop()->height(); 3450 int dh = QApplication::desktop()->height();
3253#endif 3451#endif
3254 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3452 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3255 mDateFrame->show(); 3453 mDateFrame->show();
3256 } 3454 }
3257} 3455}
3258void CalendarView::showDatePicker( ) 3456void CalendarView::showDatePicker( )
3259{ 3457{
3260 showDatePickerPopup(); 3458 showDatePickerPopup();
3261 mDatePickerMode = 1; 3459 mDatePickerMode = 1;
3262 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3460 mDatePicker->setDate( mNavigator->selectedDates().first() );
3263} 3461}
3264 3462
3265void CalendarView::showEventEditor() 3463void CalendarView::showEventEditor()
3266{ 3464{
3267#ifdef DESKTOP_VERSION 3465#ifdef DESKTOP_VERSION
3268 int x,y,w,h; 3466 int x,y,w,h;
3269 x = mEventEditor->geometry().x(); 3467 x = mEventEditor->geometry().x();
3270 y = mEventEditor->geometry().y(); 3468 y = mEventEditor->geometry().y();
3271 w = mEventEditor->width(); 3469 w = mEventEditor->width();
3272 h = mEventEditor->height(); 3470 h = mEventEditor->height();
3273 mEventEditor->show(); 3471 mEventEditor->show();
3274 mEventEditor->setGeometry(x,y,w,h); 3472 mEventEditor->setGeometry(x,y,w,h);
3275#else 3473#else
3276 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3474 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3277 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3475 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3278 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3476 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3279 qApp->processEvents(); 3477 qApp->processEvents();
3280 delete mEventEditor; 3478 delete mEventEditor;
3281 mEventEditor = mDialogManager->getEventEditor(); 3479 mEventEditor = mDialogManager->getEventEditor();
3282 topLevelWidget()->setCaption( i18n("") ); 3480 topLevelWidget()->setCaption( i18n("") );
3283 } 3481 }
3284 mEventEditor->showMaximized(); 3482 mEventEditor->showMaximized();
3285#endif 3483#endif
3286} 3484}
3287void CalendarView::showTodoEditor() 3485void CalendarView::showTodoEditor()
3288{ 3486{
3289#ifdef DESKTOP_VERSION 3487#ifdef DESKTOP_VERSION
3290 int x,y,w,h; 3488 int x,y,w,h;
3291 x = mTodoEditor->geometry().x(); 3489 x = mTodoEditor->geometry().x();
3292 y = mTodoEditor->geometry().y(); 3490 y = mTodoEditor->geometry().y();
3293 w = mTodoEditor->width(); 3491 w = mTodoEditor->width();
3294 h = mTodoEditor->height(); 3492 h = mTodoEditor->height();
3295 mTodoEditor->show(); 3493 mTodoEditor->show();
3296 mTodoEditor->setGeometry(x,y,w,h); 3494 mTodoEditor->setGeometry(x,y,w,h);
3297#else 3495#else
3298 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3496 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3299 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3497 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3300 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3498 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3301 qApp->processEvents(); 3499 qApp->processEvents();
3302 delete mTodoEditor; 3500 delete mTodoEditor;
3303 mTodoEditor = mDialogManager->getTodoEditor(); 3501 mTodoEditor = mDialogManager->getTodoEditor();
3304 topLevelWidget()->setCaption( i18n("") ); 3502 topLevelWidget()->setCaption( i18n("") );
3305 } 3503 }
3306 mTodoEditor->showMaximized(); 3504 mTodoEditor->showMaximized();
3307#endif 3505#endif
3308} 3506}
3309 3507
3310void CalendarView::cloneIncidence() 3508void CalendarView::cloneIncidence()
3311{ 3509{
3312 Incidence *incidence = currentSelection(); 3510 Incidence *incidence = currentSelection();
3313 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3511 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3314 if ( incidence ) { 3512 if ( incidence ) {
3315 cloneIncidence(incidence); 3513 cloneIncidence(incidence);
3316 } 3514 }
3317} 3515}
3318void CalendarView::moveIncidence() 3516void CalendarView::moveIncidence()
3319{ 3517{
3320 Incidence *incidence = currentSelection(); 3518 Incidence *incidence = currentSelection();
3321 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3519 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3322 if ( incidence ) { 3520 if ( incidence ) {
3323 moveIncidence(incidence); 3521 moveIncidence(incidence);
3324 } 3522 }
3325} 3523}
3326void CalendarView::beamIncidence() 3524void CalendarView::beamIncidence()
3327{ 3525{
3328 Incidence *incidence = currentSelection(); 3526 Incidence *incidence = currentSelection();
3329 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3527 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3330 if ( incidence ) { 3528 if ( incidence ) {
3331 beamIncidence(incidence); 3529 beamIncidence(incidence);
3332 } 3530 }
3333} 3531}
3334void CalendarView::toggleCancelIncidence() 3532void CalendarView::toggleCancelIncidence()
3335{ 3533{
3336 Incidence *incidence = currentSelection(); 3534 Incidence *incidence = currentSelection();
3337 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3535 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3338 if ( incidence ) { 3536 if ( incidence ) {
3339 cancelIncidence(incidence); 3537 cancelIncidence(incidence);
3340 } 3538 }
3341} 3539}
3342 3540
3343 3541
3344void CalendarView::cancelIncidence(Incidence * inc ) 3542void CalendarView::cancelIncidence(Incidence * inc )
3345{ 3543{
3346 inc->setCancelled( ! inc->cancelled() ); 3544 inc->setCancelled( ! inc->cancelled() );
3347 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3545 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3348 updateView(); 3546 updateView();
3349} 3547}
3350void CalendarView::cloneIncidence(Incidence * orgInc ) 3548void CalendarView::cloneIncidence(Incidence * orgInc )
3351{ 3549{
3352 Incidence * newInc = orgInc->clone(); 3550 Incidence * newInc = orgInc->clone();
3353 newInc->recreate(); 3551 newInc->recreate();
3354 3552
3355 if ( newInc->typeID() == todoID ) { 3553 if ( newInc->typeID() == todoID ) {
3356 Todo* t = (Todo*) newInc; 3554 Todo* t = (Todo*) newInc;
3357 bool cloneSub = false; 3555 bool cloneSub = false;
3358 if ( orgInc->relations().count() ) { 3556 if ( orgInc->relations().count() ) {
3359 int result = KMessageBox::warningYesNoCancel(this, 3557 int result = KMessageBox::warningYesNoCancel(this,
3360 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), 3558 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ),
3361 i18n("Todo has subtodos"), 3559 i18n("Todo has subtodos"),
3362 i18n("Yes"), 3560 i18n("Yes"),
3363 i18n("No")); 3561 i18n("No"));
3364 3562
3365 if ( result == KMessageBox::Cancel ) { 3563 if ( result == KMessageBox::Cancel ) {
3366 delete t; 3564 delete t;
3367 return; 3565 return;
3368 } 3566 }
3369 if (result == KMessageBox::Yes) cloneSub = true; 3567 if (result == KMessageBox::Yes) cloneSub = true;
3370 } 3568 }
3371 showTodoEditor(); 3569 showTodoEditor();
3372 mTodoEditor->editTodo( t ); 3570 mTodoEditor->editTodo( t );
3373 if ( mTodoEditor->exec() ) { 3571 if ( mTodoEditor->exec() ) {
3374 if ( cloneSub ) { 3572 if ( cloneSub ) {
3375 orgInc->cloneRelations( t ); 3573 orgInc->cloneRelations( t );
3376 mCalendar->addIncidenceBranch( t ); 3574 mCalendar->addIncidenceBranch( t );
3377 updateView(); 3575 updateView();
3378 3576
3379 } else { 3577 } else {
3380 mCalendar->addTodo( t ); 3578 mCalendar->addTodo( t );
3381 updateView(); 3579 updateView();
3382 } 3580 }
3383 } else { 3581 } else {
3384 delete t; 3582 delete t;
3385 } 3583 }
3386 } 3584 }
3387 else if ( newInc->typeID() == eventID ) { 3585 else if ( newInc->typeID() == eventID ) {
3388 Event* e = (Event*) newInc; 3586 Event* e = (Event*) newInc;
3389 showEventEditor(); 3587 showEventEditor();
3390 mEventEditor->editEvent( e ); 3588 mEventEditor->editEvent( e );
3391 if ( mEventEditor->exec() ) { 3589 if ( mEventEditor->exec() ) {
3392 mCalendar->addEvent( e ); 3590 mCalendar->addEvent( e );
3393 updateView(); 3591 updateView();
3394 } else { 3592 } else {
3395 delete e; 3593 delete e;
3396 } 3594 }
3397 } else if ( newInc->typeID() == journalID ) { 3595 } else if ( newInc->typeID() == journalID ) {
3398 mCalendar->addJournal( (Journal*) newInc ); 3596 mCalendar->addJournal( (Journal*) newInc );
3399 editJournal( (Journal*) newInc ); 3597 editJournal( (Journal*) newInc );
3400 } 3598 }
3401 setActiveWindow(); 3599 setActiveWindow();
3402} 3600}
3403 3601
3404void CalendarView::newEvent() 3602void CalendarView::newEvent()
3405{ 3603{
3406 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3604 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3407 KOAgendaView *aView = mViewManager->agendaView(); 3605 KOAgendaView *aView = mViewManager->agendaView();
3408 if (aView) { 3606 if (aView) {
3409 if (aView->selectionStart().isValid()) { 3607 if (aView->selectionStart().isValid()) {
3410 if (aView->selectedIsAllDay()) { 3608 if (aView->selectedIsAllDay()) {
3411 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3609 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3412 } else { 3610 } else {
3413 newEvent(aView->selectionStart(),aView->selectionEnd()); 3611 newEvent(aView->selectionStart(),aView->selectionEnd());
3414 } 3612 }
3415 return; 3613 return;
3416 } 3614 }
3417 } 3615 }
3418 3616
3419 QDate date = mNavigator->selectedDates().first(); 3617 QDate date = mNavigator->selectedDates().first();
3420#if 0 3618#if 0
3421 QDateTime current = QDateTime::currentDateTime(); 3619 QDateTime current = QDateTime::currentDateTime();
3422 if ( date <= current.date() ) { 3620 if ( date <= current.date() ) {
3423 int hour = current.time().hour() +1; 3621 int hour = current.time().hour() +1;
3424 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3622 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3425 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3623 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3426 } else 3624 } else
3427#endif 3625#endif
3428 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3626 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3429 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3627 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3430 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3628 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3431} 3629}
3432 3630
3433void CalendarView::newEvent(QDateTime fh) 3631void CalendarView::newEvent(QDateTime fh)
3434{ 3632{
3435 newEvent(fh, 3633 newEvent(fh,
3436 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3634 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3437} 3635}
3438 3636
3439void CalendarView::newEvent(QDate dt) 3637void CalendarView::newEvent(QDate dt)
3440{ 3638{
3441 newEvent(QDateTime(dt, QTime(0,0,0)), 3639 newEvent(QDateTime(dt, QTime(0,0,0)),
3442 QDateTime(dt, QTime(0,0,0)), true); 3640 QDateTime(dt, QTime(0,0,0)), true);
3443} 3641}
3444void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3642void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3445{ 3643{
3446 newEvent(fromHint, toHint, false); 3644 newEvent(fromHint, toHint, false);
3447} 3645}
3448void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3646void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3449{ 3647{
3450 3648
3451 showEventEditor(); 3649 showEventEditor();
3452 mEventEditor->newEvent(fromHint,toHint,allDay); 3650 mEventEditor->newEvent(fromHint,toHint,allDay);
3453 if ( mFilterView->filtersEnabled() ) { 3651 if ( mFilterView->filtersEnabled() ) {
3454 CalFilter *filter = mFilterView->selectedFilter(); 3652 CalFilter *filter = mFilterView->selectedFilter();
3455 if (filter && filter->showCategories()) { 3653 if (filter && filter->showCategories()) {
3456 mEventEditor->setCategories(filter->categoryList().join(",") ); 3654 mEventEditor->setCategories(filter->categoryList().join(",") );
3457 } 3655 }
3458 if ( filter ) 3656 if ( filter )
3459 mEventEditor->setSecrecy( filter->getSecrecy() ); 3657 mEventEditor->setSecrecy( filter->getSecrecy() );
3460 } 3658 }
3461 mEventEditor->exec(); 3659 mEventEditor->exec();
3462 setActiveWindow(); 3660 setActiveWindow();
3463} 3661}
3464void CalendarView::todoAdded(Todo * t) 3662void CalendarView::todoAdded(Todo * t)
3465{ 3663{
3466 3664
3467 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3665 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3468 updateTodoViews(); 3666 updateTodoViews();
3469} 3667}
3470void CalendarView::todoChanged(Todo * t) 3668void CalendarView::todoChanged(Todo * t)
3471{ 3669{
3472 emit todoModified( t, 4 ); 3670 emit todoModified( t, 4 );
3473 // updateTodoViews(); 3671 // updateTodoViews();
3474} 3672}
3475void CalendarView::todoToBeDeleted(Todo *) 3673void CalendarView::todoToBeDeleted(Todo *)
3476{ 3674{
3477 //qDebug("todoToBeDeleted(Todo *) "); 3675 //qDebug("todoToBeDeleted(Todo *) ");
3478 updateTodoViews(); 3676 updateTodoViews();
3479} 3677}
3480void CalendarView::todoDeleted() 3678void CalendarView::todoDeleted()
3481{ 3679{
3482 //qDebug(" todoDeleted()"); 3680 //qDebug(" todoDeleted()");
3483 updateTodoViews(); 3681 updateTodoViews();
3484} 3682}
3485 3683
3486 3684
3487void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3685void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3488{ 3686{
3489 showTodoEditor(); 3687 showTodoEditor();
3490 mTodoEditor->newTodo(dt,0,allday); 3688 mTodoEditor->newTodo(dt,0,allday);
3491 if ( mFilterView->filtersEnabled() ) { 3689 if ( mFilterView->filtersEnabled() ) {
3492 CalFilter *filter = mFilterView->selectedFilter(); 3690 CalFilter *filter = mFilterView->selectedFilter();
3493 if (filter && filter->showCategories()) { 3691 if (filter && filter->showCategories()) {
3494 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3692 mTodoEditor->setCategories(filter->categoryList().join(",") );
3495 } 3693 }
3496 if ( filter ) 3694 if ( filter )
3497 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3695 mTodoEditor->setSecrecy( filter->getSecrecy() );
3498 } 3696 }
3499 mTodoEditor->exec(); 3697 mTodoEditor->exec();
3500 setActiveWindow(); 3698 setActiveWindow();
3501} 3699}
3502 3700
3503void CalendarView::newTodo() 3701void CalendarView::newTodo()
3504{ 3702{
3505 newTodoDateTime( QDateTime(),true ); 3703 newTodoDateTime( QDateTime(),true );
3506} 3704}
3507 3705
3508void CalendarView::newSubTodo() 3706void CalendarView::newSubTodo()
3509{ 3707{
3510 Todo *todo = selectedTodo(); 3708 Todo *todo = selectedTodo();
3511 if ( todo ) newSubTodo( todo ); 3709 if ( todo ) newSubTodo( todo );
3512} 3710}
3513 3711
3514void CalendarView::newSubTodo(Todo *parentEvent) 3712void CalendarView::newSubTodo(Todo *parentEvent)
3515{ 3713{
3516 3714
3517 showTodoEditor(); 3715 showTodoEditor();
3518 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3716 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3519 mTodoEditor->exec(); 3717 mTodoEditor->exec();
3520 setActiveWindow(); 3718 setActiveWindow();
3521} 3719}
3522 3720
3523void CalendarView::newFloatingEvent() 3721void CalendarView::newFloatingEvent()
3524{ 3722{
3525 DateList tmpList = mNavigator->selectedDates(); 3723 DateList tmpList = mNavigator->selectedDates();
3526 QDate date = tmpList.first(); 3724 QDate date = tmpList.first();
3527 3725
3528 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3726 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3529 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3727 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3530} 3728}
3531 3729
3532 3730
3533void CalendarView::editEvent( Event *event ) 3731void CalendarView::editEvent( Event *event )
3534{ 3732{
3535 3733
3536 if ( !event ) return; 3734 if ( !event ) return;
3537 if ( event->isReadOnly() ) { 3735 if ( event->isReadOnly() ) {
3538 showEvent( event ); 3736 showEvent( event );
3539 return; 3737 return;
3540 } 3738 }
3541 showEventEditor(); 3739 showEventEditor();
3542 mEventEditor->editEvent( event , mFlagEditDescription); 3740 mEventEditor->editEvent( event , mFlagEditDescription);
3543 mEventEditor->exec(); 3741 mEventEditor->exec();
3544 setActiveWindow(); 3742 setActiveWindow();
3545 3743
3546} 3744}
3547void CalendarView::editJournal( Journal *jour ) 3745void CalendarView::editJournal( Journal *jour )
3548{ 3746{
3549 if ( !jour ) return; 3747 if ( !jour ) return;
3550 mDialogManager->hideSearchDialog(); 3748 mDialogManager->hideSearchDialog();
3551 mViewManager->showJournalView(); 3749 mViewManager->showJournalView();
3552 mNavigator->slotDaySelect( jour->dtStart().date() ); 3750 mNavigator->slotDaySelect( jour->dtStart().date() );
3553} 3751}
3554void CalendarView::editTodo( Todo *todo ) 3752void CalendarView::editTodo( Todo *todo )
3555{ 3753{
3556 if ( !todo ) return; 3754 if ( !todo ) return;
3557 3755
3558 if ( todo->isReadOnly() ) { 3756 if ( todo->isReadOnly() ) {
3559 showTodo( todo ); 3757 showTodo( todo );
3560 return; 3758 return;
3561 } 3759 }
3562 showTodoEditor(); 3760 showTodoEditor();
3563 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3761 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3564 mTodoEditor->exec(); 3762 mTodoEditor->exec();
3565 setActiveWindow(); 3763 setActiveWindow();
3566 3764
3567} 3765}
3568 3766
3569KOEventViewerDialog* CalendarView::getEventViewerDialog() 3767KOEventViewerDialog* CalendarView::getEventViewerDialog()
3570{ 3768{
3571 if ( !mEventViewerDialog ) { 3769 if ( !mEventViewerDialog ) {
3572 mEventViewerDialog = new KOEventViewerDialog(0); 3770 mEventViewerDialog = new KOEventViewerDialog(0);
3573 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3771 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3574 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3772 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3575 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3773 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3576 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3774 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3577 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3775 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3578 viewManager(), SLOT( showAgendaView( bool ) ) ); 3776 viewManager(), SLOT( showAgendaView( bool ) ) );
3579 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3777 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3580 this, SLOT( slotViewerClosed() ) ); 3778 this, SLOT( slotViewerClosed() ) );
3581 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3779 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3582 this, SLOT( todoChanged(Todo *) ) ); 3780 this, SLOT( todoChanged(Todo *) ) );
3583 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3781 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3584 mEventViewerDialog->resize( 640, 480 ); 3782 mEventViewerDialog->resize( 640, 480 );
3585 3783
3586 } 3784 }
3587 return mEventViewerDialog; 3785 return mEventViewerDialog;
3588} 3786}
3589void CalendarView::showEvent(Event *event) 3787void CalendarView::showEvent(Event *event)
3590{ 3788{
3591 getEventViewerDialog()->setEvent(event); 3789 getEventViewerDialog()->setEvent(event);
3592 getEventViewerDialog()->showMe(); 3790 getEventViewerDialog()->showMe();
3593} 3791}
3594 3792
3595void CalendarView::showTodo(Todo *event) 3793void CalendarView::showTodo(Todo *event)
3596{ 3794{
3597 getEventViewerDialog()->setTodo(event); 3795 getEventViewerDialog()->setTodo(event);
3598 getEventViewerDialog()->showMe(); 3796 getEventViewerDialog()->showMe();
3599} 3797}
3600void CalendarView::showJournal( Journal *jour ) 3798void CalendarView::showJournal( Journal *jour )
3601{ 3799{
3602 getEventViewerDialog()->setJournal(jour); 3800 getEventViewerDialog()->setJournal(jour);
3603 getEventViewerDialog()->showMe(); 3801 getEventViewerDialog()->showMe();
3604 3802
3605} 3803}
3606// void CalendarView::todoModified (Todo *event, int changed) 3804// void CalendarView::todoModified (Todo *event, int changed)
3607// { 3805// {
3608// // if (mDialogList.find (event) != mDialogList.end ()) { 3806// // if (mDialogList.find (event) != mDialogList.end ()) {
3609// // kdDebug() << "Todo modified and open" << endl; 3807// // kdDebug() << "Todo modified and open" << endl;
3610// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3808// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3611// // temp->modified (changed); 3809// // temp->modified (changed);
3612 3810
3613// // } 3811// // }
3614 3812
3615// mViewManager->updateView(); 3813// mViewManager->updateView();
3616// } 3814// }
3617 3815
3618void CalendarView::appointment_show() 3816void CalendarView::appointment_show()
3619{ 3817{
3620 Event *anEvent = 0; 3818 Event *anEvent = 0;
3621 3819
3622 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3820 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3623 3821
3624 if (mViewManager->currentView()->isEventView()) { 3822 if (mViewManager->currentView()->isEventView()) {
3625 if ( incidence && incidence->typeID() == eventID ) { 3823 if ( incidence && incidence->typeID() == eventID ) {
3626 anEvent = static_cast<Event *>(incidence); 3824 anEvent = static_cast<Event *>(incidence);
3627 } 3825 }
3628 } 3826 }
3629 3827
3630 if (!anEvent) { 3828 if (!anEvent) {
3631 KNotifyClient::beep(); 3829 KNotifyClient::beep();
3632 return; 3830 return;
3633 } 3831 }
3634 3832
3635 showEvent(anEvent); 3833 showEvent(anEvent);
3636} 3834}
3637 3835
3638void CalendarView::appointment_edit() 3836void CalendarView::appointment_edit()
3639{ 3837{
3640 Event *anEvent = 0; 3838 Event *anEvent = 0;
3641 3839
3642 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3840 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3643 3841
3644 if (mViewManager->currentView()->isEventView()) { 3842 if (mViewManager->currentView()->isEventView()) {
3645 if ( incidence && incidence->typeID() == eventID ) { 3843 if ( incidence && incidence->typeID() == eventID ) {
3646 anEvent = static_cast<Event *>(incidence); 3844 anEvent = static_cast<Event *>(incidence);
3647 } 3845 }
3648 } 3846 }
3649 3847
3650 if (!anEvent) { 3848 if (!anEvent) {
3651 KNotifyClient::beep(); 3849 KNotifyClient::beep();
3652 return; 3850 return;
3653 } 3851 }
3654 3852
3655 editEvent(anEvent); 3853 editEvent(anEvent);
3656} 3854}
3657 3855
3658void CalendarView::appointment_delete() 3856void CalendarView::appointment_delete()
3659{ 3857{
3660 Event *anEvent = 0; 3858 Event *anEvent = 0;
3661 3859
3662 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3860 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3663 3861
3664 if (mViewManager->currentView()->isEventView()) { 3862 if (mViewManager->currentView()->isEventView()) {
3665 if ( incidence && incidence->typeID() == eventID ) { 3863 if ( incidence && incidence->typeID() == eventID ) {
3666 anEvent = static_cast<Event *>(incidence); 3864 anEvent = static_cast<Event *>(incidence);
3667 } 3865 }
3668 } 3866 }
3669 3867
3670 if (!anEvent) { 3868 if (!anEvent) {
3671 KNotifyClient::beep(); 3869 KNotifyClient::beep();
3672 return; 3870 return;
3673 } 3871 }
3674 3872
3675 deleteEvent(anEvent); 3873 deleteEvent(anEvent);
3676} 3874}
3677 3875
3678void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3876void CalendarView::todo_resub( Todo * parent, Todo * sub )
3679{ 3877{
3680 if (!sub) return; 3878 if (!sub) return;
3681 if ( sub->relatedTo() == parent ) 3879 if ( sub->relatedTo() == parent )
3682 return; 3880 return;
3683 sub->setRelatedTo(parent); 3881 sub->setRelatedTo(parent);
3684 sub->updated(); 3882 sub->updated();
3685 setModified(true); 3883 setModified(true);
3686 updateView(); 3884 updateView();
3687} 3885}
3688void CalendarView::todo_unsub(Todo *anTodo ) 3886void CalendarView::todo_unsub(Todo *anTodo )
3689{ 3887{
3690 todo_resub( 0, anTodo ); 3888 todo_resub( 0, anTodo );
3691} 3889}
3692 3890
3693void CalendarView::deleteTodo(Todo *todo) 3891void CalendarView::deleteTodo(Todo *todo)
3694{ 3892{
3695 if (!todo) { 3893 if (!todo) {
3696 KNotifyClient::beep(); 3894 KNotifyClient::beep();
3697 return; 3895 return;
3698 } 3896 }
3699 if (KOPrefs::instance()->mConfirm) { 3897 if (KOPrefs::instance()->mConfirm) {
3700 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 3898 QString text = KGlobal::formatMessage ( todo->summary(),0 );
3701 if (!todo->relations().isEmpty()) { 3899 if (!todo->relations().isEmpty()) {
3702 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 3900 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
3703 3901
3704 } 3902 }
3705 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 3903 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
3706 case KMessageBox::Continue: // OK 3904 case KMessageBox::Continue: // OK
3707 bool deleteT = false; 3905 bool deleteT = false;
3708 if (!todo->relations().isEmpty()) { 3906 if (!todo->relations().isEmpty()) {
3709 deleteT = removeCompletedSubTodos( todo ); 3907 deleteT = removeCompletedSubTodos( todo );
3710 } 3908 }
3711 // deleteT == true: todo already deleted in removeCompletedSubTodos 3909 // deleteT == true: todo already deleted in removeCompletedSubTodos
3712 if ( !deleteT ) { 3910 if ( !deleteT ) {
3713 checkExternalId( todo ); 3911 checkExternalId( todo );
3714 calendar()->deleteTodo(todo); 3912 calendar()->deleteTodo(todo);
3715 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3913 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3716 updateView(); 3914 updateView();
3717 } 3915 }
3718 break; 3916 break;
3719 } // switch 3917 } // switch
3720 } else { 3918 } else {
3721 checkExternalId( todo ); 3919 checkExternalId( todo );
3722 mCalendar->deleteTodo(todo); 3920 mCalendar->deleteTodo(todo);
3723 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3921 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3724 updateView(); 3922 updateView();
3725 } 3923 }
3726 3924
3727 emit updateSearchDialog(); 3925 emit updateSearchDialog();
3728} 3926}
3729void CalendarView::deleteJournal(Journal *jour) 3927void CalendarView::deleteJournal(Journal *jour)
3730{ 3928{
3731 if (!jour) { 3929 if (!jour) {
3732 KNotifyClient::beep(); 3930 KNotifyClient::beep();
3733 return; 3931 return;
3734 } 3932 }
3735 if (KOPrefs::instance()->mConfirm) { 3933 if (KOPrefs::instance()->mConfirm) {
3736 3934
3737 QString des; 3935 QString des;
3738 if ( !jour->summary().isEmpty() ) { 3936 if ( !jour->summary().isEmpty() ) {
3739 des = jour->summary(); 3937 des = jour->summary();
3740 } else { 3938 } else {
3741 des = jour->description().left(30); 3939 des = jour->description().left(30);
3742 des = des.simplifyWhiteSpace (); 3940 des = des.simplifyWhiteSpace ();
3743 des.replace (QRegExp ("\\n"),"" ); 3941 des.replace (QRegExp ("\\n"),"" );
3744 des.replace (QRegExp ("\\r"),"" ); 3942 des.replace (QRegExp ("\\r"),"" );
3745 } 3943 }
3746 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 3944 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
3747 case KMessageBox::Continue: // OK 3945 case KMessageBox::Continue: // OK
3748 calendar()->deleteJournal(jour); 3946 calendar()->deleteJournal(jour);
3749 updateView(); 3947 updateView();
3750 break; 3948 break;
3751 } // switch 3949 } // switch
3752 } else { 3950 } else {
3753 calendar()->deleteJournal(jour);; 3951 calendar()->deleteJournal(jour);;
3754 updateView(); 3952 updateView();
3755 } 3953 }
3756 emit updateSearchDialog(); 3954 emit updateSearchDialog();
3757} 3955}
3758 3956
3759void CalendarView::deleteEvent(Event *anEvent) 3957void CalendarView::deleteEvent(Event *anEvent)
3760{ 3958{
3761 if (!anEvent) { 3959 if (!anEvent) {
3762 KNotifyClient::beep(); 3960 KNotifyClient::beep();
3763 return; 3961 return;
3764 } 3962 }
3765 3963
3766 if (anEvent->doesRecur()) { 3964 if (anEvent->doesRecur()) {
3767 QDate itemDate = mViewManager->currentSelectionDate(); 3965 QDate itemDate = mViewManager->currentSelectionDate();
3768 int km; 3966 int km;
3769 if (!itemDate.isValid()) { 3967 if (!itemDate.isValid()) {
3770 //kdDebug() << "Date Not Valid" << endl; 3968 //kdDebug() << "Date Not Valid" << endl;
3771 if (KOPrefs::instance()->mConfirm) { 3969 if (KOPrefs::instance()->mConfirm) {
3772 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3970 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3773 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 3971 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
3774 i18n("KO/Pi Confirmation"),i18n("Delete All")); 3972 i18n("KO/Pi Confirmation"),i18n("Delete All"));
3775 if ( km == KMessageBox::Continue ) 3973 if ( km == KMessageBox::Continue )
3776 km = KMessageBox::No; // No = all below 3974 km = KMessageBox::No; // No = all below
3777 } else 3975 } else
3778 km = KMessageBox::No; 3976 km = KMessageBox::No;
3779 } else { 3977 } else {
3780 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 3978 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3781 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 3979 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
3782 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 3980 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
3783 i18n("KO/Pi Confirmation"),i18n("Current"), 3981 i18n("KO/Pi Confirmation"),i18n("Current"),
3784 i18n("All")); 3982 i18n("All"));
3785 } 3983 }
3786 switch(km) { 3984 switch(km) {
3787 3985
3788 case KMessageBox::No: // Continue // all 3986 case KMessageBox::No: // Continue // all
3789 //qDebug("KMessageBox::No "); 3987 //qDebug("KMessageBox::No ");
3790 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3988 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3791 schedule(Scheduler::Cancel,anEvent); 3989 schedule(Scheduler::Cancel,anEvent);
3792 3990
3793 checkExternalId( anEvent); 3991 checkExternalId( anEvent);
3794 mCalendar->deleteEvent(anEvent); 3992 mCalendar->deleteEvent(anEvent);
3795 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 3993 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
3796 break; 3994 break;
3797 3995
3798 // Disabled because it does not work 3996 // Disabled because it does not work
3799 //#if 0 3997 //#if 0
3800 case KMessageBox::Yes: // just this one 3998 case KMessageBox::Yes: // just this one
3801 //QDate qd = mNavigator->selectedDates().first(); 3999 //QDate qd = mNavigator->selectedDates().first();
3802 //if (!qd.isValid()) { 4000 //if (!qd.isValid()) {
3803 // kdDebug() << "no date selected, or invalid date" << endl; 4001 // kdDebug() << "no date selected, or invalid date" << endl;
3804 // KNotifyClient::beep(); 4002 // KNotifyClient::beep();
3805 // return; 4003 // return;
3806 //} 4004 //}
3807 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4005 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
3808 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4006 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
3809 anEvent->addExDate(itemDate); 4007 anEvent->addExDate(itemDate);
3810 int duration = anEvent->recurrence()->duration(); 4008 int duration = anEvent->recurrence()->duration();
3811 if ( duration > 0 ) { 4009 if ( duration > 0 ) {
3812 anEvent->recurrence()->setDuration( duration - 1 ); 4010 anEvent->recurrence()->setDuration( duration - 1 );
3813 } 4011 }
3814 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4012 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
3815 } 4013 }
3816 break; 4014 break;
3817 //#endif 4015 //#endif
3818 } // switch 4016 } // switch
3819 } else { 4017 } else {
3820 if (KOPrefs::instance()->mConfirm) { 4018 if (KOPrefs::instance()->mConfirm) {
3821 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4019 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
3822 i18n("\nAre you sure you want\nto delete this event?"), 4020 i18n("\nAre you sure you want\nto delete this event?"),
3823 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4021 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
3824 case KMessageBox::Continue: // OK 4022 case KMessageBox::Continue: // OK
3825 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4023 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3826 schedule(Scheduler::Cancel,anEvent); 4024 schedule(Scheduler::Cancel,anEvent);
3827 checkExternalId( anEvent); 4025 checkExternalId( anEvent);
3828 mCalendar->deleteEvent(anEvent); 4026 mCalendar->deleteEvent(anEvent);
3829 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4027 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3830 break; 4028 break;
3831 } // switch 4029 } // switch
3832 } else { 4030 } else {
3833 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4031 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3834 schedule(Scheduler::Cancel,anEvent); 4032 schedule(Scheduler::Cancel,anEvent);
3835 checkExternalId( anEvent); 4033 checkExternalId( anEvent);
3836 mCalendar->deleteEvent(anEvent); 4034 mCalendar->deleteEvent(anEvent);
3837 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4035 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3838 } 4036 }
3839 } // if-else 4037 } // if-else
3840 emit updateSearchDialog(); 4038 emit updateSearchDialog();
3841} 4039}
3842 4040
3843bool CalendarView::deleteEvent(const QString &uid) 4041bool CalendarView::deleteEvent(const QString &uid)
3844{ 4042{
3845 Event *ev = mCalendar->event(uid); 4043 Event *ev = mCalendar->event(uid);
3846 if (ev) { 4044 if (ev) {
3847 deleteEvent(ev); 4045 deleteEvent(ev);
3848 return true; 4046 return true;
3849 } else { 4047 } else {
3850 return false; 4048 return false;
3851 } 4049 }
3852} 4050}
3853 4051
3854/*****************************************************************************/ 4052/*****************************************************************************/
3855 4053
3856void CalendarView::action_mail() 4054void CalendarView::action_mail()
3857{ 4055{
3858#ifndef KORG_NOMAIL 4056#ifndef KORG_NOMAIL
3859 KOMailClient mailClient; 4057 KOMailClient mailClient;
3860 4058
3861 Incidence *incidence = currentSelection(); 4059 Incidence *incidence = currentSelection();
3862 4060
3863 if (!incidence) { 4061 if (!incidence) {
3864 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4062 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3865 return; 4063 return;
3866 } 4064 }
3867 if(incidence->attendeeCount() == 0 ) { 4065 if(incidence->attendeeCount() == 0 ) {
3868 KMessageBox::sorry(this, 4066 KMessageBox::sorry(this,
3869 i18n("Can't generate mail:\nNo attendees defined.\n")); 4067 i18n("Can't generate mail:\nNo attendees defined.\n"));
3870 return; 4068 return;
3871 } 4069 }
3872 4070
3873 CalendarLocal cal_tmp; 4071 CalendarLocal cal_tmp;
3874 Event *event = 0; 4072 Event *event = 0;
3875 Event *ev = 0; 4073 Event *ev = 0;
3876 if ( incidence && incidence->typeID() == eventID ) { 4074 if ( incidence && incidence->typeID() == eventID ) {
3877 event = static_cast<Event *>(incidence); 4075 event = static_cast<Event *>(incidence);
3878 ev = new Event(*event); 4076 ev = new Event(*event);
3879 cal_tmp.addEvent(ev); 4077 cal_tmp.addEvent(ev);
3880 } 4078 }
3881 ICalFormat mForm(); 4079 ICalFormat mForm();
3882 QString attachment = mForm.toString( &cal_tmp ); 4080 QString attachment = mForm.toString( &cal_tmp );
3883 if (ev) delete(ev); 4081 if (ev) delete(ev);
3884 4082
3885 mailClient.mailAttendees(currentSelection(), attachment); 4083 mailClient.mailAttendees(currentSelection(), attachment);
3886 4084
3887#endif 4085#endif
3888 4086
3889#if 0 4087#if 0
3890 Event *anEvent = 0; 4088 Event *anEvent = 0;
3891 if (mViewManager->currentView()->isEventView()) { 4089 if (mViewManager->currentView()->isEventView()) {
3892 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4090 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
3893 } 4091 }
3894 4092
3895 if (!anEvent) { 4093 if (!anEvent) {
3896 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4094 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3897 return; 4095 return;
3898 } 4096 }
3899 if(anEvent->attendeeCount() == 0 ) { 4097 if(anEvent->attendeeCount() == 0 ) {
3900 KMessageBox::sorry(this, 4098 KMessageBox::sorry(this,
3901 i18n("Can't generate mail:\nNo attendees defined.\n")); 4099 i18n("Can't generate mail:\nNo attendees defined.\n"));
3902 return; 4100 return;
3903 } 4101 }
3904 4102
3905 mailobject.emailEvent(anEvent); 4103 mailobject.emailEvent(anEvent);
3906#endif 4104#endif
3907} 4105}
3908 4106
3909 4107
3910void CalendarView::schedule_publish(Incidence *incidence) 4108void CalendarView::schedule_publish(Incidence *incidence)
3911{ 4109{
3912 Event *event = 0; 4110 Event *event = 0;
3913 Todo *todo = 0; 4111 Todo *todo = 0;
3914 4112
3915 if (incidence == 0) { 4113 if (incidence == 0) {
3916 incidence = mViewManager->currentView()->selectedIncidences().first(); 4114 incidence = mViewManager->currentView()->selectedIncidences().first();
3917 if (incidence == 0) { 4115 if (incidence == 0) {
3918 incidence = mTodoList->selectedIncidences().first(); 4116 incidence = mTodoList->selectedIncidences().first();
3919 } 4117 }
3920 } 4118 }
3921 if ( incidence && incidence->typeID() == eventID ) { 4119 if ( incidence && incidence->typeID() == eventID ) {
3922 event = static_cast<Event *>(incidence); 4120 event = static_cast<Event *>(incidence);
3923 } else { 4121 } else {
3924 if ( incidence && incidence->typeID() == todoID ) { 4122 if ( incidence && incidence->typeID() == todoID ) {
3925 todo = static_cast<Todo *>(incidence); 4123 todo = static_cast<Todo *>(incidence);
3926 } 4124 }
3927 } 4125 }
3928 4126
3929 if (!event && !todo) { 4127 if (!event && !todo) {
3930 KMessageBox::sorry(this,i18n("No event selected.")); 4128 KMessageBox::sorry(this,i18n("No event selected."));
3931 return; 4129 return;
3932 } 4130 }
3933 4131
3934 PublishDialog *publishdlg = new PublishDialog(); 4132 PublishDialog *publishdlg = new PublishDialog();
3935 if (incidence->attendeeCount()>0) { 4133 if (incidence->attendeeCount()>0) {
3936 QPtrList<Attendee> attendees = incidence->attendees(); 4134 QPtrList<Attendee> attendees = incidence->attendees();
3937 attendees.first(); 4135 attendees.first();
3938 while ( attendees.current()!=0 ) { 4136 while ( attendees.current()!=0 ) {
3939 publishdlg->addAttendee(attendees.current()); 4137 publishdlg->addAttendee(attendees.current());
3940 attendees.next(); 4138 attendees.next();
3941 } 4139 }
3942 } 4140 }
3943 bool send = true; 4141 bool send = true;
3944 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 4142 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
3945 if ( publishdlg->exec() != QDialog::Accepted ) 4143 if ( publishdlg->exec() != QDialog::Accepted )
3946 send = false; 4144 send = false;
3947 } 4145 }
3948 if ( send ) { 4146 if ( send ) {
3949 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4147 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3950 if ( event ) { 4148 if ( event ) {
3951 Event *ev = new Event(*event); 4149 Event *ev = new Event(*event);
3952 ev->registerObserver(0); 4150 ev->registerObserver(0);
3953 ev->clearAttendees(); 4151 ev->clearAttendees();
3954 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4152 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3955 delete(ev); 4153 delete(ev);
3956 } 4154 }
3957 } else { 4155 } else {
3958 if ( todo ) { 4156 if ( todo ) {
3959 Todo *ev = new Todo(*todo); 4157 Todo *ev = new Todo(*todo);
3960 ev->registerObserver(0); 4158 ev->registerObserver(0);
3961 ev->clearAttendees(); 4159 ev->clearAttendees();
3962 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4160 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3963 delete(ev); 4161 delete(ev);
3964 } 4162 }
3965 } 4163 }
3966 } 4164 }
3967 } 4165 }
3968 delete publishdlg; 4166 delete publishdlg;
3969} 4167}
3970 4168
3971void CalendarView::schedule_request(Incidence *incidence) 4169void CalendarView::schedule_request(Incidence *incidence)
3972{ 4170{
3973 schedule(Scheduler::Request,incidence); 4171 schedule(Scheduler::Request,incidence);
3974} 4172}
3975 4173
3976void CalendarView::schedule_refresh(Incidence *incidence) 4174void CalendarView::schedule_refresh(Incidence *incidence)
3977{ 4175{
3978 schedule(Scheduler::Refresh,incidence); 4176 schedule(Scheduler::Refresh,incidence);
3979} 4177}
3980 4178
3981void CalendarView::schedule_cancel(Incidence *incidence) 4179void CalendarView::schedule_cancel(Incidence *incidence)
3982{ 4180{
3983 schedule(Scheduler::Cancel,incidence); 4181 schedule(Scheduler::Cancel,incidence);
3984} 4182}
3985 4183
3986void CalendarView::schedule_add(Incidence *incidence) 4184void CalendarView::schedule_add(Incidence *incidence)
3987{ 4185{
3988 schedule(Scheduler::Add,incidence); 4186 schedule(Scheduler::Add,incidence);
3989} 4187}
3990 4188
3991void CalendarView::schedule_reply(Incidence *incidence) 4189void CalendarView::schedule_reply(Incidence *incidence)
3992{ 4190{
3993 schedule(Scheduler::Reply,incidence); 4191 schedule(Scheduler::Reply,incidence);
3994} 4192}
3995 4193
3996void CalendarView::schedule_counter(Incidence *incidence) 4194void CalendarView::schedule_counter(Incidence *incidence)
3997{ 4195{
3998 schedule(Scheduler::Counter,incidence); 4196 schedule(Scheduler::Counter,incidence);
3999} 4197}
4000 4198
4001void CalendarView::schedule_declinecounter(Incidence *incidence) 4199void CalendarView::schedule_declinecounter(Incidence *incidence)
4002{ 4200{
4003 schedule(Scheduler::Declinecounter,incidence); 4201 schedule(Scheduler::Declinecounter,incidence);
4004} 4202}
4005 4203
4006void CalendarView::schedule_publish_freebusy(int daysToPublish) 4204void CalendarView::schedule_publish_freebusy(int daysToPublish)
4007{ 4205{
4008 QDateTime start = QDateTime::currentDateTime(); 4206 QDateTime start = QDateTime::currentDateTime();
4009 QDateTime end = start.addDays(daysToPublish); 4207 QDateTime end = start.addDays(daysToPublish);
4010 4208
4011 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 4209 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
4012 freebusy->setOrganizer(KOPrefs::instance()->email()); 4210 freebusy->setOrganizer(KOPrefs::instance()->email());
4013 4211
4014 4212
4015 PublishDialog *publishdlg = new PublishDialog(); 4213 PublishDialog *publishdlg = new PublishDialog();
4016 if ( publishdlg->exec() == QDialog::Accepted ) { 4214 if ( publishdlg->exec() == QDialog::Accepted ) {
4017 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4215 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4018 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 4216 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
4019 delete(freebusy); 4217 delete(freebusy);
4020 } 4218 }
4021 } 4219 }
4022 delete publishdlg; 4220 delete publishdlg;
4023} 4221}
4024 4222
4025void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 4223void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
4026{ 4224{
4027 Event *event = 0; 4225 Event *event = 0;
4028 Todo *todo = 0; 4226 Todo *todo = 0;
4029 4227
4030 if (incidence == 0) { 4228 if (incidence == 0) {
4031 incidence = mViewManager->currentView()->selectedIncidences().first(); 4229 incidence = mViewManager->currentView()->selectedIncidences().first();
4032 if (incidence == 0) { 4230 if (incidence == 0) {
4033 incidence = mTodoList->selectedIncidences().first(); 4231 incidence = mTodoList->selectedIncidences().first();
4034 } 4232 }
4035 } 4233 }
4036 if ( incidence && incidence->typeID() == eventID ) { 4234 if ( incidence && incidence->typeID() == eventID ) {
4037 event = static_cast<Event *>(incidence); 4235 event = static_cast<Event *>(incidence);
4038 } 4236 }
4039 if ( incidence && incidence->typeID() == todoID ) { 4237 if ( incidence && incidence->typeID() == todoID ) {
4040 todo = static_cast<Todo *>(incidence); 4238 todo = static_cast<Todo *>(incidence);
4041 } 4239 }
4042 4240
4043 if (!event && !todo) { 4241 if (!event && !todo) {
4044 KMessageBox::sorry(this,i18n("No event selected.")); 4242 KMessageBox::sorry(this,i18n("No event selected."));
4045 return; 4243 return;
4046 } 4244 }
4047 4245
4048 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 4246 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
4049 KMessageBox::sorry(this,i18n("The event has no attendees.")); 4247 KMessageBox::sorry(this,i18n("The event has no attendees."));
4050 return; 4248 return;
4051 } 4249 }
4052 4250
4053 Event *ev = 0; 4251 Event *ev = 0;
4054 if (event) ev = new Event(*event); 4252 if (event) ev = new Event(*event);
4055 Todo *to = 0; 4253 Todo *to = 0;
4056 if (todo) to = new Todo(*todo); 4254 if (todo) to = new Todo(*todo);
4057 4255
4058 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 4256 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
4059 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 4257 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
4060 if (!me) { 4258 if (!me) {
4061 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4259 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4062 return; 4260 return;
4063 } 4261 }
4064 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4262 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4065 StatusDialog *statdlg = new StatusDialog(this); 4263 StatusDialog *statdlg = new StatusDialog(this);
4066 if (!statdlg->exec()==QDialog::Accepted) return; 4264 if (!statdlg->exec()==QDialog::Accepted) return;
4067 me->setStatus( statdlg->status() ); 4265 me->setStatus( statdlg->status() );
4068 delete(statdlg); 4266 delete(statdlg);
4069 } 4267 }
4070 Attendee *menew = new Attendee(*me); 4268 Attendee *menew = new Attendee(*me);
4071 if (ev) { 4269 if (ev) {
4072 ev->clearAttendees(); 4270 ev->clearAttendees();
4073 ev->addAttendee(menew,false); 4271 ev->addAttendee(menew,false);
4074 } else { 4272 } else {
4075 if (to) { 4273 if (to) {
4076 todo->clearAttendees(); 4274 todo->clearAttendees();
4077 todo->addAttendee(menew,false); 4275 todo->addAttendee(menew,false);
4078 } 4276 }
4079 } 4277 }
4080 } 4278 }
4081 4279
4082 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4280 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4083 if (ev) { 4281 if (ev) {
4084 if ( !dlg->addMessage(ev,method) ) delete(ev); 4282 if ( !dlg->addMessage(ev,method) ) delete(ev);
4085 } else { 4283 } else {
4086 if (to) { 4284 if (to) {
4087 if ( !dlg->addMessage(to,method) ) delete(to); 4285 if ( !dlg->addMessage(to,method) ) delete(to);
4088 } 4286 }
4089 } 4287 }
4090} 4288}
4091 4289
4092void CalendarView::openAddressbook() 4290void CalendarView::openAddressbook()
4093{ 4291{
4094 KRun::runCommand("kaddressbook"); 4292 KRun::runCommand("kaddressbook");
4095} 4293}
4096 4294
4097void CalendarView::setModified(bool modified) 4295void CalendarView::setModified(bool modified)
4098{ 4296{
4099 //qDebug("CalendarView::setModified %d ", modified); 4297 //qDebug("CalendarView::setModified %d ", modified);
4100 if ( modified ) 4298 if ( modified )
4101 emit signalmodified(); 4299 emit signalmodified();
4102 mModified = modified; 4300 mModified = modified;
4103 if ( mModified ) 4301 if ( mModified )
4104 emit modifiedChanged(mModified); 4302 emit modifiedChanged(mModified);
4105 4303
4106} 4304}
4107 4305
4108bool CalendarView::isReadOnly() 4306bool CalendarView::isReadOnly()
4109{ 4307{
4110 return mReadOnly; 4308 return mReadOnly;
4111} 4309}
4112 4310
4113void CalendarView::setReadOnly(bool readOnly) 4311void CalendarView::setReadOnly(bool readOnly)
4114{ 4312{
4115 if (mReadOnly != readOnly) { 4313 if (mReadOnly != readOnly) {
4116 mReadOnly = readOnly; 4314 mReadOnly = readOnly;
4117 emit readOnlyChanged(mReadOnly); 4315 emit readOnlyChanged(mReadOnly);
4118 } 4316 }
4119} 4317}
4120 4318
4121bool CalendarView::isModified() 4319bool CalendarView::isModified()
4122{ 4320{
4123 return mModified; 4321 return mModified;
4124} 4322}
4125void CalendarView::slotprintSelInc() 4323void CalendarView::slotprintSelInc()
4126{ 4324{
4127 if ( currentSelection() == 0 ) { 4325 if ( currentSelection() == 0 ) {
4128 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4326 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4129 return; 4327 return;
4130 } 4328 }
4131 showIncidence(); 4329 showIncidence();
4132 getEventViewerDialog()->print(); 4330 getEventViewerDialog()->print();
4133 4331
4134} 4332}
4135void CalendarView::printSetup() 4333void CalendarView::printSetup()
4136{ 4334{
4137#ifndef KORG_NOPRINTER 4335#ifndef KORG_NOPRINTER
4138 createPrinter(); 4336 createPrinter();
4139 4337
4140 mCalPrinter->setupPrinter(); 4338 mCalPrinter->setupPrinter();
4141#endif 4339#endif
4142} 4340}
4143 4341
4144void CalendarView::print() 4342void CalendarView::print()
4145{ 4343{
4146#ifndef KORG_NOPRINTER 4344#ifndef KORG_NOPRINTER
4147 createPrinter(); 4345 createPrinter();
4148 4346
4149 DateList tmpDateList = mNavigator->selectedDates(); 4347 DateList tmpDateList = mNavigator->selectedDates();
4150 mCalPrinter->print(CalPrinter::Month, 4348 mCalPrinter->print(CalPrinter::Month,
4151 tmpDateList.first(), tmpDateList.last()); 4349 tmpDateList.first(), tmpDateList.last());
4152#endif 4350#endif
4153} 4351}
4154 4352
4155void CalendarView::printPreview() 4353void CalendarView::printPreview()
4156{ 4354{
4157#ifndef KORG_NOPRINTER 4355#ifndef KORG_NOPRINTER
4158 kdDebug() << "CalendarView::printPreview()" << endl; 4356 kdDebug() << "CalendarView::printPreview()" << endl;
4159 4357
4160 createPrinter(); 4358 createPrinter();
4161 4359
4162 DateList tmpDateList = mNavigator->selectedDates(); 4360 DateList tmpDateList = mNavigator->selectedDates();
4163 4361
4164 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4362 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4165 tmpDateList.last()); 4363 tmpDateList.last());
4166#endif 4364#endif
4167} 4365}
4168 4366
4169void CalendarView::exportICalendar() 4367void CalendarView::exportICalendar()
4170{ 4368{
4171 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 4369 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
4172 4370
4173 // Force correct extension 4371 // Force correct extension
4174 if (filename.right(4) != ".ics") filename += ".ics"; 4372 if (filename.right(4) != ".ics") filename += ".ics";
4175 4373
4176 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4374 FileStorage storage( mCalendar, filename, new ICalFormat() );
4177 storage.save(); 4375 storage.save();
4178} 4376}
4179 4377
4180bool CalendarView::exportVCalendar( QString filename ) 4378bool CalendarView::exportVCalendar( QString filename )
4181{ 4379{
4182 if (mCalendar->journals().count() > 0) { 4380 if (mCalendar->journals().count() > 0) {
4183 int result = KMessageBox::warningContinueCancel(this, 4381 int result = KMessageBox::warningContinueCancel(this,
4184 i18n("The journal entries can not be\nexported to a vCalendar file."), 4382 i18n("The journal entries can not be\nexported to a vCalendar file."),
4185 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4383 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4186 true); 4384 true);
4187 if (result != KMessageBox::Continue) return false; 4385 if (result != KMessageBox::Continue) return false;
4188 } 4386 }
4189 4387
4190 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4388 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4191 4389
4192 // Force correct extension 4390 // Force correct extension
4193 if (filename.right(4) != ".vcs") filename += ".vcs"; 4391 if (filename.right(4) != ".vcs") filename += ".vcs";
4194 4392
4195 FileStorage storage( mCalendar, filename, new VCalFormat ); 4393 FileStorage storage( mCalendar, filename, new VCalFormat );
4196 return storage.save(); 4394 return storage.save();
4197 4395
4198} 4396}
4199 4397
4200void CalendarView::eventUpdated(Incidence *) 4398void CalendarView::eventUpdated(Incidence *)
4201{ 4399{
4202 setModified(); 4400 setModified();
4203 // Don't call updateView here. The code, which has caused the update of the 4401 // Don't call updateView here. The code, which has caused the update of the
4204 // event is responsible for updating the view. 4402 // event is responsible for updating the view.
4205 // updateView(); 4403 // updateView();
4206} 4404}
4207 4405
4208void CalendarView::adaptNavigationUnits() 4406void CalendarView::adaptNavigationUnits()
4209{ 4407{
4210 if (mViewManager->currentView()->isEventView()) { 4408 if (mViewManager->currentView()->isEventView()) {
4211 int days = mViewManager->currentView()->currentDateCount(); 4409 int days = mViewManager->currentView()->currentDateCount();
4212 if (days == 1) { 4410 if (days == 1) {
4213 emit changeNavStringPrev(i18n("&Previous Day")); 4411 emit changeNavStringPrev(i18n("&Previous Day"));
4214 emit changeNavStringNext(i18n("&Next Day")); 4412 emit changeNavStringNext(i18n("&Next Day"));
4215 } else { 4413 } else {
4216 emit changeNavStringPrev(i18n("&Previous Week")); 4414 emit changeNavStringPrev(i18n("&Previous Week"));
4217 emit changeNavStringNext(i18n("&Next Week")); 4415 emit changeNavStringNext(i18n("&Next Week"));
4218 } 4416 }
4219 } 4417 }
4220} 4418}
4221 4419
4222void CalendarView::processMainViewSelection( Incidence *incidence ) 4420void CalendarView::processMainViewSelection( Incidence *incidence )
4223{ 4421{
4224 if ( incidence ) mTodoList->clearSelection(); 4422 if ( incidence ) mTodoList->clearSelection();
4225 processIncidenceSelection( incidence ); 4423 processIncidenceSelection( incidence );
4226} 4424}
4227 4425
4228void CalendarView::processTodoListSelection( Incidence *incidence ) 4426void CalendarView::processTodoListSelection( Incidence *incidence )
4229{ 4427{
4230 if ( incidence && mViewManager->currentView() ) { 4428 if ( incidence && mViewManager->currentView() ) {
4231 mViewManager->currentView()->clearSelection(); 4429 mViewManager->currentView()->clearSelection();
4232 } 4430 }
4233 processIncidenceSelection( incidence ); 4431 processIncidenceSelection( incidence );
4234} 4432}
4235 4433
4236void CalendarView::processIncidenceSelection( Incidence *incidence ) 4434void CalendarView::processIncidenceSelection( Incidence *incidence )
4237{ 4435{
4238 emit incidenceSelected( incidence ); 4436 emit incidenceSelected( incidence );
4239 if ( incidence == mSelectedIncidence ) return; 4437 if ( incidence == mSelectedIncidence ) return;
4240 mSelectedIncidence = incidence; 4438 mSelectedIncidence = incidence;
4241 4439
4242 if ( incidence && incidence->typeID() == eventID ) { 4440 if ( incidence && incidence->typeID() == eventID ) {
4243 Event *event = static_cast<Event *>( incidence ); 4441 Event *event = static_cast<Event *>( incidence );
4244 if ( event->organizer() == KOPrefs::instance()->email() ) { 4442 if ( event->organizer() == KOPrefs::instance()->email() ) {
4245 emit organizerEventsSelected( true ); 4443 emit organizerEventsSelected( true );
4246 } else { 4444 } else {
4247 emit organizerEventsSelected(false); 4445 emit organizerEventsSelected(false);
4248 } 4446 }
4249 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4447 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4250 KOPrefs::instance()->email() ) ) { 4448 KOPrefs::instance()->email() ) ) {
4251 emit groupEventsSelected( true ); 4449 emit groupEventsSelected( true );
4252 } else { 4450 } else {
4253 emit groupEventsSelected(false); 4451 emit groupEventsSelected(false);
4254 } 4452 }
4255 return; 4453 return;
4256 } else { 4454 } else {
4257 if ( incidence && incidence->typeID() == todoID ) { 4455 if ( incidence && incidence->typeID() == todoID ) {
4258 emit todoSelected( true ); 4456 emit todoSelected( true );
4259 Todo *event = static_cast<Todo *>( incidence ); 4457 Todo *event = static_cast<Todo *>( incidence );
4260 if ( event->organizer() == KOPrefs::instance()->email() ) { 4458 if ( event->organizer() == KOPrefs::instance()->email() ) {
4261 emit organizerEventsSelected( true ); 4459 emit organizerEventsSelected( true );
4262 } else { 4460 } else {
4263 emit organizerEventsSelected(false); 4461 emit organizerEventsSelected(false);
4264 } 4462 }
4265 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4463 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4266 KOPrefs::instance()->email() ) ) { 4464 KOPrefs::instance()->email() ) ) {
4267 emit groupEventsSelected( true ); 4465 emit groupEventsSelected( true );
4268 } else { 4466 } else {
4269 emit groupEventsSelected(false); 4467 emit groupEventsSelected(false);
4270 } 4468 }
4271 return; 4469 return;
4272 } else { 4470 } else {
4273 emit todoSelected( false ); 4471 emit todoSelected( false );
4274 emit organizerEventsSelected(false); 4472 emit organizerEventsSelected(false);
4275 emit groupEventsSelected(false); 4473 emit groupEventsSelected(false);
4276 } 4474 }
4277 return; 4475 return;
4278 } 4476 }
4279 4477
4280 /* if ( incidence && incidence->typeID() == todoID ) { 4478 /* if ( incidence && incidence->typeID() == todoID ) {
4281 emit todoSelected( true ); 4479 emit todoSelected( true );
4282 } else { 4480 } else {
4283 emit todoSelected( false ); 4481 emit todoSelected( false );
4284 }*/ 4482 }*/
4285} 4483}
4286 4484
4287 4485
4288void CalendarView::checkClipboard() 4486void CalendarView::checkClipboard()
4289{ 4487{
4290#ifndef KORG_NODND 4488#ifndef KORG_NODND
4291 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4489 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4292 emit pasteEnabled(true); 4490 emit pasteEnabled(true);
4293 } else { 4491 } else {
4294 emit pasteEnabled(false); 4492 emit pasteEnabled(false);
4295 } 4493 }
4296#endif 4494#endif
4297} 4495}
4298 4496
4299void CalendarView::showDates(const DateList &selectedDates) 4497void CalendarView::showDates(const DateList &selectedDates)
4300{ 4498{
4301 // kdDebug() << "CalendarView::selectDates()" << endl; 4499 // kdDebug() << "CalendarView::selectDates()" << endl;
4302 4500
4303 4501
4304 if ( !mBlockShowDates ) { 4502 if ( !mBlockShowDates ) {
4305 if ( mViewManager->currentView() ) { 4503 if ( mViewManager->currentView() ) {
4306 updateView( selectedDates.first(), selectedDates.last() ); 4504 updateView( selectedDates.first(), selectedDates.last() );
4307 } else { 4505 } else {
4308 mViewManager->showAgendaView(); 4506 mViewManager->showAgendaView();
4309 } 4507 }
4310 } 4508 }
4311 4509
4312 QDate date = selectedDates.first(); 4510 QDate date = selectedDates.first();
4313 if ( ! date.isValid() ) { 4511 if ( ! date.isValid() ) {
4314 topLevelWidget()->setCaption(""); 4512 topLevelWidget()->setCaption("");
4315 return; 4513 return;
4316 } 4514 }
4317 4515
4318 QString selDates; 4516 QString selDates;
4319 selDates = KGlobal::locale()->formatDate( date, true); 4517 selDates = KGlobal::locale()->formatDate( date, true);
4320 if (selectedDates.first() < selectedDates.last() ) 4518 if (selectedDates.first() < selectedDates.last() )
4321 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4519 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4322 else { 4520 else {
4323 QString addString; 4521 QString addString;
4324 if ( date == QDateTime::currentDateTime().date() ) 4522 if ( date == QDateTime::currentDateTime().date() )
4325 addString = i18n("Today"); 4523 addString = i18n("Today");
4326 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4524 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4327 addString = i18n("Tomorrow"); 4525 addString = i18n("Tomorrow");
4328 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4526 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4329 addString = i18n("Yesterday"); 4527 addString = i18n("Yesterday");
4330 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4528 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4331 addString = i18n("Day before yesterday"); 4529 addString = i18n("Day before yesterday");
4332 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4530 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4333 addString = i18n("Day after tomorrow"); 4531 addString = i18n("Day after tomorrow");
4334 if ( !addString.isEmpty() ) { 4532 if ( !addString.isEmpty() ) {
4335 topLevelWidget()->setCaption( addString+", " + selDates ); 4533 topLevelWidget()->setCaption( addString+", " + selDates );
4336 return; 4534 return;
4337 } 4535 }
4338 } 4536 }
4339 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4537 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4340 4538
4341} 4539}
4342 4540
4343QPtrList<CalFilter> CalendarView::filters() 4541QPtrList<CalFilter> CalendarView::filters()
4344{ 4542{
4345 return mFilters; 4543 return mFilters;
4346 4544
4347} 4545}
4348void CalendarView::editFilters() 4546void CalendarView::editFilters()
4349{ 4547{
4350 // kdDebug() << "CalendarView::editFilters()" << endl; 4548 // kdDebug() << "CalendarView::editFilters()" << endl;
4351 4549
4352 CalFilter *filter = mFilters.first(); 4550 CalFilter *filter = mFilters.first();
4353 while(filter) { 4551 while(filter) {
4354 filter = mFilters.next(); 4552 filter = mFilters.next();
4355 } 4553 }
4356 4554
4357 mDialogManager->showFilterEditDialog(&mFilters); 4555 mDialogManager->showFilterEditDialog(&mFilters);
4358 updateFilter(); 4556 updateFilter();
4359} 4557}
4360void CalendarView::toggleFilter() 4558void CalendarView::toggleFilter()
4361{ 4559{
4362 if ( mLeftFrame->isHidden() ) { 4560 if ( mLeftFrame->isHidden() ) {
4363 toggleExpand(); 4561 toggleExpand();
4364 showFilter( true ); 4562 showFilter( true );
4365 } else 4563 } else
4366 showFilter(! mCalEditView->isVisible()); 4564 showFilter(! mCalEditView->isVisible());
4367} 4565}
4368 4566
4369KOFilterView *CalendarView::filterView() 4567KOFilterView *CalendarView::filterView()
4370{ 4568{
4371 return mFilterView; 4569 return mFilterView;
4372} 4570}
4373void CalendarView::selectFilter( int fil ) 4571void CalendarView::selectFilter( int fil )
4374{ 4572{
4375 mFilterView->setSelectedFilter( fil ); 4573 mFilterView->setSelectedFilter( fil );
4376 updateUnmanagedViews(); 4574 updateUnmanagedViews();
4377} 4575}
4378void CalendarView::showFilter(bool visible) 4576void CalendarView::showFilter(bool visible)
4379{ 4577{
4380#if 1 4578#if 1
4381 if (visible) { 4579 if (visible) {
4382 mCalEditView->readConfig(); 4580 mCalEditView->readConfig();
4383 mCalEditView->show(); 4581 mCalEditView->show();
4384 QValueList<int> sizes; 4582 QValueList<int> sizes;
4385 sizes = mLeftFrame->sizes(); 4583 sizes = mLeftFrame->sizes();
4386 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4584 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4387 sizes.clear(); 4585 sizes.clear();
4388 sizes << 100; 4586 sizes << 100;
4389 sizes << 0; 4587 sizes << 0;
4390 sizes << 0; 4588 sizes << 0;
4391 sizes << 100; 4589 sizes << 100;
4392 mLeftFrame->setSizes(sizes); 4590 mLeftFrame->setSizes(sizes);
4393 } 4591 }
4394#if 0 4592#if 0
4395 sizes = mLeftFrame->sizes(); 4593 sizes = mLeftFrame->sizes();
4396 int ccc = 0; 4594 int ccc = 0;
4397 while ( ccc < sizes.count()) { 4595 while ( ccc < sizes.count()) {
4398 qDebug("size %d %d ", ccc, sizes[ccc]); 4596 qDebug("size %d %d ", ccc, sizes[ccc]);
4399 ++ccc; 4597 ++ccc;
4400 } 4598 }
4401#endif 4599#endif
4402 4600
4403 } 4601 }
4404 else { 4602 else {
4405 mCalEditView->hide(); 4603 mCalEditView->hide();
4406 } 4604 }
4407#else 4605#else
4408 if (visible) mFilterView->show(); 4606 if (visible) mFilterView->show();
4409 else mFilterView->hide(); 4607 else mFilterView->hide();
4410#endif 4608#endif
4411} 4609}
4412void CalendarView::toggleFilerEnabled( ) 4610void CalendarView::toggleFilerEnabled( )
4413{ 4611{
4414 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4612 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4415 if ( !mFilterView->filtersEnabled() ) 4613 if ( !mFilterView->filtersEnabled() )
4416 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4614 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4417 updateUnmanagedViews(); 4615 updateUnmanagedViews();
4418 4616
4419} 4617}
4420void CalendarView::updateFilter() 4618void CalendarView::updateFilter()
4421{ 4619{
4422 CalFilter *filter = mFilterView->selectedFilter(); 4620 CalFilter *filter = mFilterView->selectedFilter();
4423 if (filter) { 4621 if (filter) {
4424 QString mess; 4622 QString mess;
4425 if (mFilterView->filtersEnabled()) { 4623 if (mFilterView->filtersEnabled()) {
4426 mess = i18n("Filter selected: ")+filter->name(); 4624 mess = i18n("Filter selected: ")+filter->name();
4427 filter->setEnabled(true); 4625 filter->setEnabled(true);
4428 } 4626 }
4429 else filter->setEnabled(false); 4627 else filter->setEnabled(false);
4430 mCalendar->setFilter(filter); 4628 mCalendar->setFilter(filter);
4431 updateView(); 4629 updateView();
4432 if ( !mess.isEmpty() ) 4630 if ( !mess.isEmpty() )
4433 topLevelWidget()->setCaption( mess ); 4631 topLevelWidget()->setCaption( mess );
4434 4632
4435 } 4633 }
4436 emit filtersUpdated(); 4634 emit filtersUpdated();
4437} 4635}
4438 4636
4439void CalendarView::filterEdited() 4637void CalendarView::filterEdited()
4440{ 4638{
4441 mFilterView->updateFilters(); 4639 mFilterView->updateFilters();
4442 updateFilter(); 4640 updateFilter();
4443 writeSettings(); 4641 writeSettings();
4444} 4642}
4445 4643
4446 4644
4447void CalendarView::takeOverEvent() 4645void CalendarView::takeOverEvent()
4448{ 4646{
4449 Incidence *incidence = currentSelection(); 4647 Incidence *incidence = currentSelection();
4450 4648
4451 if (!incidence) return; 4649 if (!incidence) return;
4452 4650
4453 incidence->setOrganizer(KOPrefs::instance()->email()); 4651 incidence->setOrganizer(KOPrefs::instance()->email());
4454 incidence->recreate(); 4652 incidence->recreate();
4455 incidence->setReadOnly(false); 4653 incidence->setReadOnly(false);
4456 4654
4457 updateView(); 4655 updateView();
4458} 4656}
4459 4657
4460void CalendarView::takeOverCalendar() 4658void CalendarView::takeOverCalendar()
4461{ 4659{
4462 // TODO: Create Calendar::allIncidences() function and use it here 4660 // TODO: Create Calendar::allIncidences() function and use it here
4463 4661
4464 clearAllViews(); 4662 clearAllViews();
4465 QPtrList<Event> events = mCalendar->events(); 4663 QPtrList<Event> events = mCalendar->events();
4466 for(uint i=0; i<events.count(); ++i) { 4664 for(uint i=0; i<events.count(); ++i) {
4467 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4665 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4468 events.at(i)->recreate(); 4666 events.at(i)->recreate();
4469 events.at(i)->setReadOnly(false); 4667 events.at(i)->setReadOnly(false);
4470 } 4668 }
4471 4669
4472 QPtrList<Todo> todos = mCalendar->todos(); 4670 QPtrList<Todo> todos = mCalendar->todos();
4473 for(uint i=0; i<todos.count(); ++i) { 4671 for(uint i=0; i<todos.count(); ++i) {
4474 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4672 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4475 todos.at(i)->recreate(); 4673 todos.at(i)->recreate();
4476 todos.at(i)->setReadOnly(false); 4674 todos.at(i)->setReadOnly(false);
4477 } 4675 }
4478 4676
4479 QPtrList<Journal> journals = mCalendar->journals(); 4677 QPtrList<Journal> journals = mCalendar->journals();
4480 for(uint i=0; i<journals.count(); ++i) { 4678 for(uint i=0; i<journals.count(); ++i) {
4481 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4679 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4482 journals.at(i)->recreate(); 4680 journals.at(i)->recreate();
4483 journals.at(i)->setReadOnly(false); 4681 journals.at(i)->setReadOnly(false);
4484 } 4682 }
4485 4683
4486 updateView(); 4684 updateView();
4487} 4685}
4488 4686
4489void CalendarView::showIntro() 4687void CalendarView::showIntro()
4490{ 4688{
4491 kdDebug() << "To be implemented." << endl; 4689 kdDebug() << "To be implemented." << endl;
4492} 4690}
4493 4691
4494QWidgetStack *CalendarView::viewStack() 4692QWidgetStack *CalendarView::viewStack()
4495{ 4693{
4496 return mRightFrame; 4694 return mRightFrame;
4497} 4695}
4498 4696
4499QWidget *CalendarView::leftFrame() 4697QWidget *CalendarView::leftFrame()
4500{ 4698{
4501 return ( QWidget *)mLeftFrame; 4699 return ( QWidget *)mLeftFrame;
4502} 4700}
4503 4701
4504DateNavigator *CalendarView::dateNavigator() 4702DateNavigator *CalendarView::dateNavigator()
4505{ 4703{
4506 return mNavigator; 4704 return mNavigator;
4507} 4705}
4508 4706
4509KDateNavigator* CalendarView::dateNavigatorWidget() 4707KDateNavigator* CalendarView::dateNavigatorWidget()
4510{ 4708{
4511 return mDateNavigator->navigatorView(); 4709 return mDateNavigator->navigatorView();
4512} 4710}
4513void CalendarView::toggleDateNavigatorWidget() 4711void CalendarView::toggleDateNavigatorWidget()
4514{ 4712{
4515 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4713 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4516 4714
4517 if (!KOPrefs::instance()->mShowDateNavigator ) 4715 if (!KOPrefs::instance()->mShowDateNavigator )
4518 mDateNavigator->hide(); 4716 mDateNavigator->hide();
4519 else 4717 else
4520 mDateNavigator->show(); 4718 mDateNavigator->show();
4521} 4719}
4522void CalendarView::addView(KOrg::BaseView *view) 4720void CalendarView::addView(KOrg::BaseView *view)
4523{ 4721{
4524 mViewManager->addView(view); 4722 mViewManager->addView(view);
4525} 4723}
4526 4724
4527void CalendarView::showView(KOrg::BaseView *view) 4725void CalendarView::showView(KOrg::BaseView *view)
4528{ 4726{
4529 mViewManager->showView(view, mLeftFrame->isVisible()); 4727 mViewManager->showView(view, mLeftFrame->isVisible());
4530} 4728}
4531 4729
4532Incidence *CalendarView::currentSelection() 4730Incidence *CalendarView::currentSelection()
4533{ 4731{
4534 return mViewManager->currentSelection(); 4732 return mViewManager->currentSelection();
4535} 4733}
4536void CalendarView::toggleAllDaySize() 4734void CalendarView::toggleAllDaySize()
4537{ 4735{
4538 /* 4736 /*
4539 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4737 if ( KOPrefs::instance()->mAllDaySize > 47 )
4540 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4738 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4541 else 4739 else
4542 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4740 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4543 */ 4741 */
4544 viewManager()->agendaView()->toggleAllDay(); 4742 viewManager()->agendaView()->toggleAllDay();
4545} 4743}
4546void CalendarView::toggleExpand() 4744void CalendarView::toggleExpand()
4547{ 4745{
4548 // if ( mLeftFrame->isHidden() ) { 4746 // if ( mLeftFrame->isHidden() ) {
4549 // mLeftFrame->show(); 4747 // mLeftFrame->show();
4550 // emit calendarViewExpanded( false ); 4748 // emit calendarViewExpanded( false );
4551 // } else { 4749 // } else {
4552 // mLeftFrame->hide(); 4750 // mLeftFrame->hide();
4553 // emit calendarViewExpanded( true ); 4751 // emit calendarViewExpanded( true );
4554 // } 4752 // }
4555 //qDebug(" CalendarView::toggleExpand()"); 4753 //qDebug(" CalendarView::toggleExpand()");
4556 globalFlagBlockAgenda = 1; 4754 globalFlagBlockAgenda = 1;
4557 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4755 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4558 globalFlagBlockAgenda = 5; 4756 globalFlagBlockAgenda = 5;
4559 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4757 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4560 //mViewManager->showView( 0, true ); 4758 //mViewManager->showView( 0, true );
4561} 4759}
4562 4760
4563void CalendarView::calendarModified( bool modified, Calendar * ) 4761void CalendarView::calendarModified( bool modified, Calendar * )
4564{ 4762{
4565 setModified( modified ); 4763 setModified( modified );
4566} 4764}
4567 4765
4568Todo *CalendarView::selectedTodo() 4766Todo *CalendarView::selectedTodo()
4569{ 4767{
4570 Incidence *incidence = currentSelection(); 4768 Incidence *incidence = currentSelection();
4571 if ( incidence && incidence->typeID() == todoID ) { 4769 if ( incidence && incidence->typeID() == todoID ) {
4572 return static_cast<Todo *>( incidence ); 4770 return static_cast<Todo *>( incidence );
4573 } 4771 }
4574 4772
4575 incidence = mTodoList->selectedIncidences().first(); 4773 incidence = mTodoList->selectedIncidences().first();
4576 if ( incidence && incidence->typeID() == todoID ) { 4774 if ( incidence && incidence->typeID() == todoID ) {
4577 return static_cast<Todo *>( incidence ); 4775 return static_cast<Todo *>( incidence );
4578 } 4776 }
4579 4777
4580 return 0; 4778 return 0;
4581} 4779}
4582 4780
4583void CalendarView::showIncidence() 4781void CalendarView::showIncidence()
4584{ 4782{
4585 mViewerCallerIsSearchDialog = false; 4783 mViewerCallerIsSearchDialog = false;
4586 Incidence *incidence = currentSelection(); 4784 Incidence *incidence = currentSelection();
4587 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4785 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4588 if ( incidence ) { 4786 if ( incidence ) {
4589 ShowIncidenceVisitor v; 4787 ShowIncidenceVisitor v;
4590 v.act( incidence, this ); 4788 v.act( incidence, this );
4591 } 4789 }
4592} 4790}
4593void CalendarView::editIncidenceDescription() 4791void CalendarView::editIncidenceDescription()
4594{ 4792{
4595 mFlagEditDescription = true; 4793 mFlagEditDescription = true;
4596 editIncidence(); 4794 editIncidence();
4597 mFlagEditDescription = false; 4795 mFlagEditDescription = false;
4598} 4796}
4599void CalendarView::editIncidence() 4797void CalendarView::editIncidence()
4600{ 4798{
4601 // qDebug("editIncidence() "); 4799 // qDebug("editIncidence() ");
4602 Incidence *incidence = currentSelection(); 4800 Incidence *incidence = currentSelection();
4603 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4801 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4604 if ( incidence ) { 4802 if ( incidence ) {
4605 EditIncidenceVisitor v; 4803 EditIncidenceVisitor v;
4606 v.act( incidence, this ); 4804 v.act( incidence, this );
4607 } 4805 }
4608} 4806}
4609 4807
4610void CalendarView::deleteIncidence() 4808void CalendarView::deleteIncidence()
4611{ 4809{
4612 Incidence *incidence = currentSelection(); 4810 Incidence *incidence = currentSelection();
4613 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4811 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4614 if ( incidence ) { 4812 if ( incidence ) {
4615 deleteIncidence(incidence); 4813 deleteIncidence(incidence);
4616 } 4814 }
4617} 4815}
4618void CalendarView::showIncidence(QString uid) 4816void CalendarView::showIncidence(QString uid)
4619{ 4817{
4620 Incidence *inc = mCalendar->incidence( uid ); 4818 Incidence *inc = mCalendar->incidence( uid );
4621 if ( inc ) 4819 if ( inc )
4622 showIncidence( inc ); 4820 showIncidence( inc );
4623} 4821}
4624void CalendarView::showIncidence(Incidence *incidence) 4822void CalendarView::showIncidence(Incidence *incidence)
4625{ 4823{
4626 mViewerCallerIsSearchDialog = false; 4824 mViewerCallerIsSearchDialog = false;
4627 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4825 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4628 if ( sender() && mDialogManager->getSearchDialog() ) { 4826 if ( sender() && mDialogManager->getSearchDialog() ) {
4629 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4827 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4630 mViewerCallerIsSearchDialog = true; 4828 mViewerCallerIsSearchDialog = true;
4631 } 4829 }
4632 } 4830 }
4633 if ( incidence ) { 4831 if ( incidence ) {
4634 ShowIncidenceVisitor v; 4832 ShowIncidenceVisitor v;
4635 v.act( incidence, this ); 4833 v.act( incidence, this );
4636 } 4834 }
4637} 4835}
4638 4836
4639void CalendarView::editIncidence(Incidence *incidence) 4837void CalendarView::editIncidence(Incidence *incidence)
4640{ 4838{
4641 if ( incidence ) { 4839 if ( incidence ) {
4642 4840
4643 EditIncidenceVisitor v; 4841 EditIncidenceVisitor v;
4644 v.act( incidence, this ); 4842 v.act( incidence, this );
4645 4843
4646 } 4844 }
4647} 4845}
4648 4846
4649void CalendarView::deleteIncidence(Incidence *incidence) 4847void CalendarView::deleteIncidence(Incidence *incidence)
4650{ 4848{
4651 //qDebug(" CalendarView::deleteIncidence "); 4849 //qDebug(" CalendarView::deleteIncidence ");
4652 if ( incidence == 0 ) { 4850 if ( incidence == 0 ) {
4653 updateView(); 4851 updateView();
4654 emit updateSearchDialog(); 4852 emit updateSearchDialog();
4655 return; 4853 return;
4656 } 4854 }
4657 if ( incidence ) { 4855 if ( incidence ) {
4658 DeleteIncidenceVisitor v; 4856 DeleteIncidenceVisitor v;
4659 v.act( incidence, this ); 4857 v.act( incidence, this );
4660 } 4858 }
4661} 4859}
4662 4860
4663 4861
4664void CalendarView::lookForOutgoingMessages() 4862void CalendarView::lookForOutgoingMessages()
4665{ 4863{
4666 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 4864 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4667 ogd->loadMessages(); 4865 ogd->loadMessages();
4668} 4866}
4669 4867
4670void CalendarView::lookForIncomingMessages() 4868void CalendarView::lookForIncomingMessages()
4671{ 4869{
4672 IncomingDialog *icd = mDialogManager->incomingDialog(); 4870 IncomingDialog *icd = mDialogManager->incomingDialog();
4673 icd->retrieve(); 4871 icd->retrieve();
4674} 4872}
4675 4873
4676bool CalendarView::removeCompletedSubTodos( Todo* t ) 4874bool CalendarView::removeCompletedSubTodos( Todo* t )
4677{ 4875{
4678 bool deleteTodo = true; 4876 bool deleteTodo = true;
4679 QPtrList<Incidence> subTodos; 4877 QPtrList<Incidence> subTodos;
4680 Incidence *aTodo; 4878 Incidence *aTodo;
4681 subTodos = t->relations(); 4879 subTodos = t->relations();
4682 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 4880 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4683 if (! removeCompletedSubTodos( (Todo*) aTodo )) 4881 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4684 deleteTodo = false; 4882 deleteTodo = false;
4685 } 4883 }
4686 if ( deleteTodo ) { 4884 if ( deleteTodo ) {
4687 if ( t->isCompleted() && !t->doesRecur()) { 4885 if ( t->isCompleted() && !t->doesRecur()) {
4688 checkExternalId( t ); 4886 checkExternalId( t );
4689 mCalendar->deleteTodo( t ); 4887 mCalendar->deleteTodo( t );
4690 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 4888 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4691 } 4889 }
4692 else 4890 else
4693 deleteTodo = false; 4891 deleteTodo = false;
4694 } 4892 }
4695 return deleteTodo; 4893 return deleteTodo;
4696 4894
4697} 4895}
4698void CalendarView::purgeCompleted() 4896void CalendarView::purgeCompleted()
4699{ 4897{
4700 int result = KMessageBox::warningContinueCancel(this, 4898 int result = KMessageBox::warningContinueCancel(this,
4701 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 4899 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
4702 4900
4703 if (result == KMessageBox::Continue) { 4901 if (result == KMessageBox::Continue) {
4704 4902
4705 QPtrList<Todo> todoCal; 4903 QPtrList<Todo> todoCal;
4706 QPtrList<Todo> rootTodos; 4904 QPtrList<Todo> rootTodos;
4707 //QPtrList<Incidence> rel; 4905 //QPtrList<Incidence> rel;
4708 Todo *aTodo; 4906 Todo *aTodo;
4709 todoCal = calendar()->todos(); 4907 todoCal = calendar()->todos();
4710 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 4908 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
4711 if ( !aTodo->relatedTo() ) 4909 if ( !aTodo->relatedTo() )
4712 rootTodos.append( aTodo ); 4910 rootTodos.append( aTodo );
4713 } 4911 }
4714 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 4912 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
4715 removeCompletedSubTodos( aTodo ); 4913 removeCompletedSubTodos( aTodo );
4716 } 4914 }
4717 4915
4718 updateView(); 4916 updateView();
4719 } 4917 }
4720} 4918}
4721 4919
4722void CalendarView::slotCalendarChanged() 4920void CalendarView::slotCalendarChanged()
4723{ 4921{
4724 ; 4922 ;
4725} 4923}
4726 4924
4727void CalendarView::keyPressEvent ( QKeyEvent *e) 4925void CalendarView::keyPressEvent ( QKeyEvent *e)
4728{ 4926{
4729 //qDebug("CalendarView::keyPressEvent "); 4927 //qDebug("CalendarView::keyPressEvent ");
4730 e->ignore(); 4928 e->ignore();
4731} 4929}
4732 4930
4733 4931
4734bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 4932bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
4735{ 4933{
4736 4934
4737 if ( manager != mSyncManager) 4935 if ( manager != mSyncManager)
4738 qDebug("KO: Internal error-1. SyncManager mismatch "); 4936 qDebug("KO: Internal error-1. SyncManager mismatch ");
4739 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 4937 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
4740 qDebug("KO: SyncKDE request detected!"); 4938 qDebug("KO: SyncKDE request detected!");
4741 } 4939 }
4742 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 4940 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
4743 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 4941 mCurrentSyncName = mSyncManager->getCurrentSyncName();
4744 return syncCalendar( filename, mode ); 4942 return syncCalendar( filename, mode );
4745} 4943}
4746bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 4944bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
4747{ 4945{
4748 //mSyncManager = manager; 4946 //mSyncManager = manager;
4749 if ( manager != mSyncManager) 4947 if ( manager != mSyncManager)
4750 qDebug("KO: Internal error-2. SyncManager mismatch "); 4948 qDebug("KO: Internal error-2. SyncManager mismatch ");
4751 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 4949 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
4752 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 4950 mCurrentSyncName = mSyncManager->getCurrentSyncName();
4753 if ( resource == "sharp" ) 4951 if ( resource == "sharp" )
4754 syncExternal( 0 ); 4952 syncExternal( 0 );
4755 if ( resource == "phone" ) 4953 if ( resource == "phone" )
4756 syncExternal( 1 ); 4954 syncExternal( 1 );
4757 // pending setmodified 4955 // pending setmodified
4758 return true; 4956 return true;
4759} 4957}
4760void CalendarView::setSyncManager(KSyncManager* manager) 4958void CalendarView::setSyncManager(KSyncManager* manager)
4761{ 4959{
4762 mSyncManager = manager; 4960 mSyncManager = manager;
4763} 4961}
4764 4962
4765void CalendarView::removeSyncInfo( QString syncProfile) 4963void CalendarView::removeSyncInfo( QString syncProfile)
4766{ 4964{
4767 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 4965 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
4768 mCalendar->removeSyncInfo( syncProfile ); 4966 mCalendar->removeSyncInfo( syncProfile );
4769 4967
4770} 4968}
4771 4969
4772void CalendarView::undo_delete() 4970void CalendarView::undo_delete()
4773{ 4971{
4774 //qDebug("undo_delete() "); 4972 //qDebug("undo_delete() ");
4775 Incidence* undo = mCalendar->undoIncidence(); 4973 Incidence* undo = mCalendar->undoIncidence();
4776 if ( !undo ) { 4974 if ( !undo ) {
4777 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 4975 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
4778 i18n("KO/Pi")); 4976 i18n("KO/Pi"));
4779 return; 4977 return;
4780 } 4978 }
4781 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 4979 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
4782 i18n("\nAre you sure you want\nto restore this?"), 4980 i18n("\nAre you sure you want\nto restore this?"),
4783 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 4981 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
4784 mCalendar->undoDeleteIncidence(); 4982 mCalendar->undoDeleteIncidence();
4785 updateView(); 4983 updateView();
4786 } 4984 }
4787} 4985}
4788 4986
4789void CalendarView::slotViewerClosed() 4987void CalendarView::slotViewerClosed()
4790{ 4988{
4791 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 4989 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
4792} 4990}
4793 4991
4794void CalendarView::resetFocus() 4992void CalendarView::resetFocus()
4795{ 4993{
4796 if ( mViewerCallerIsSearchDialog ) { 4994 if ( mViewerCallerIsSearchDialog ) {
4797 if ( mDialogManager->getSearchDialog()->isVisible() ){ 4995 if ( mDialogManager->getSearchDialog()->isVisible() ){
4798 mDialogManager->getSearchDialog()->raise(); 4996 mDialogManager->getSearchDialog()->raise();
4799 mDialogManager->getSearchDialog()->setActiveWindow(); 4997 mDialogManager->getSearchDialog()->setActiveWindow();
4800 mDialogManager->getSearchDialog()->listview()->resetFocus(); 4998 mDialogManager->getSearchDialog()->listview()->resetFocus();
4801 } else 4999 } else
4802 mViewerCallerIsSearchDialog = false; 5000 mViewerCallerIsSearchDialog = false;
4803 } 5001 }
4804 if ( !mViewerCallerIsSearchDialog ) { 5002 if ( !mViewerCallerIsSearchDialog ) {
4805 //mViewManager->currentView()->setFocus(); 5003 //mViewManager->currentView()->setFocus();
4806 //qDebug("sssssssssssssssset focus "); 5004 //qDebug("sssssssssssssssset focus ");
4807 topLevelWidget()->raise(); 5005 topLevelWidget()->raise();
4808 setActiveWindow(); 5006 setActiveWindow();
4809 //setFocus(); 5007 //setFocus();
4810 } 5008 }
4811 mViewerCallerIsSearchDialog = false; 5009 mViewerCallerIsSearchDialog = false;
4812} 5010}
4813 5011
4814void CalendarView::showNextAlarms() 5012void CalendarView::showNextAlarms()
4815{ 5013{
4816 QString message; 5014 QString message;
4817 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5015 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
4818 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5016 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
4819 QString sum = mCalendar->nextSummary(); 5017 QString sum = mCalendar->nextSummary();
4820 QDateTime nextA = mNextAlarmDateTime; 5018 QDateTime nextA = mNextAlarmDateTime;
4821 QDateTime cur = QDateTime::currentDateTime(); 5019 QDateTime cur = QDateTime::currentDateTime();
4822 int secs = cur.secsTo( nextA ); 5020 int secs = cur.secsTo( nextA );
4823 int min = secs /60; 5021 int min = secs /60;
4824 int hours = min /60; 5022 int hours = min /60;
4825 min = min % 60; 5023 min = min % 60;
4826 int days = hours /24; 5024 int days = hours /24;
4827 hours = hours % 24; 5025 hours = hours % 24;
4828 5026
4829 //message = i18n("The next alarm is in:\n"); 5027 //message = i18n("The next alarm is in:\n");
4830 if ( days > 1 ) 5028 if ( days > 1 )
4831 message += i18n("%1 days\n").arg( days ); 5029 message += i18n("%1 days\n").arg( days );
4832 else if ( days == 1 ) 5030 else if ( days == 1 )
4833 message += i18n("1 day\n"); 5031 message += i18n("1 day\n");
4834 if ( hours > 1 ) 5032 if ( hours > 1 )
4835 message += i18n("%1 hours\n").arg( hours ); 5033 message += i18n("%1 hours\n").arg( hours );
4836 else if ( hours == 1 ) 5034 else if ( hours == 1 )
4837 message += i18n("1 hour\n"); 5035 message += i18n("1 hour\n");
4838 if ( min > 1 ) 5036 if ( min > 1 )
4839 message += i18n("%1 minutes\n").arg( min ); 5037 message += i18n("%1 minutes\n").arg( min );
4840 else if ( min == 1 ) 5038 else if ( min == 1 )
4841 message += i18n("1 minute\n"); 5039 message += i18n("1 minute\n");
4842 if ( message.isEmpty() ) 5040 if ( message.isEmpty() )
4843 message = i18n("The next alarm is in\nless than one minute!"); 5041 message = i18n("The next alarm is in\nless than one minute!");
4844 else 5042 else
4845 message = i18n("The next alarm is in:\n") + message; 5043 message = i18n("The next alarm is in:\n") + message;
4846 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5044 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
4847 } else { 5045 } else {
4848 message = i18n("There is no next alarm."); 5046 message = i18n("There is no next alarm.");
4849 5047
4850 } 5048 }
4851#ifdef DESKTOP_VERSION 5049#ifdef DESKTOP_VERSION
4852 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5050 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
4853 message += i18n("\nThe internal alarm notification is disabled!\n"); 5051 message += i18n("\nThe internal alarm notification is disabled!\n");
4854 message += i18n("Enable it in the settings menu, TAB alarm."); 5052 message += i18n("Enable it in the settings menu, TAB alarm.");
4855 } 5053 }
4856 5054
4857#endif 5055#endif
4858 KMessageBox::information( this, message); 5056 KMessageBox::information( this, message);
4859} 5057}
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