summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-11-26 12:38:58 (UTC)
committer zautrix <zautrix>2005-11-26 12:38:58 (UTC)
commit854d4a0c686962cd73ac7418b5fbf4b2d73adab7 (patch) (unidiff)
tree864a872db7d3787bac151da8257ae132b04ec5e3
parent85bd9f05564e566b296c949ce6e214ebdbf573ac (diff)
downloadkdepimpi-854d4a0c686962cd73ac7418b5fbf4b2d73adab7.zip
kdepimpi-854d4a0c686962cd73ac7418b5fbf4b2d73adab7.tar.gz
kdepimpi-854d4a0c686962cd73ac7418b5fbf4b2d73adab7.tar.bz2
sync
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp29
-rw-r--r--libkcal/dndfactory_dummy.h5
-rw-r--r--libkdepim/categoryeditdialog.h4
-rw-r--r--libkdepim/categoryselectdialog.cpp1
-rw-r--r--libkdepim/ksyncmanager.cpp9
-rw-r--r--libkdepim/ksyncmanager.h2
6 files changed, 32 insertions, 18 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 9571f16..8d024c1 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,5247 +1,5258 @@
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) savecale1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mMultiResourceSync = false; 369 mMultiResourceSync = false;
370 flag_blockConflict = false; 370 flag_blockConflict = false;
371 flag_blockScrollBar = false; 371 flag_blockScrollBar = false;
372 flag_checkFileFirsttime = true; 372 flag_checkFileFirsttime = true;
373 flag_clearallviewsEventDisplay = false; 373 flag_clearallviewsEventDisplay = false;
374 flag_clearallviewsupdateView = false; 374 flag_clearallviewsupdateView = false;
375 mNextAlarmDateTime = QDateTime::currentDateTime(); 375 mNextAlarmDateTime = QDateTime::currentDateTime();
376 setFocusPolicy (NoFocus ); 376 setFocusPolicy (NoFocus );
377 mViewerCallerIsSearchDialog = false; 377 mViewerCallerIsSearchDialog = false;
378 mBlockShowDates = false; 378 mBlockShowDates = false;
379 mConflictingEvent = 0; 379 mConflictingEvent = 0;
380 mDatePickerMode = 0; 380 mDatePickerMode = 0;
381 mCurrentSyncDevice = ""; 381 mCurrentSyncDevice = "";
382 mViewManager = new KOViewManager( this ); 382 mViewManager = new KOViewManager( this );
383 mDialogManager = new KODialogManager( this ); 383 mDialogManager = new KODialogManager( this );
384 mEventViewerDialog = 0; 384 mEventViewerDialog = 0;
385 mModified = false; 385 mModified = false;
386 mReadOnly = false; 386 mReadOnly = false;
387 mSelectedIncidence = 0; 387 mSelectedIncidence = 0;
388 mCalPrinter = 0; 388 mCalPrinter = 0;
389 mFilters.setAutoDelete(true); 389 mFilters.setAutoDelete(true);
390 390
391 mCalendar->registerObserver( this ); 391 mCalendar->registerObserver( this );
392 // TODO: Make sure that view is updated, when calendar is changed. 392 // TODO: Make sure that view is updated, when calendar is changed.
393 393
394 mStorage = new FileStorage( mCalendar ); 394 mStorage = new FileStorage( mCalendar );
395 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 395 mNavigator = new DateNavigator( this, "datevav", mViewManager );
396 396
397 QBoxLayout *topLayout = (QBoxLayout*)layout(); 397 QBoxLayout *topLayout = (QBoxLayout*)layout();
398#ifndef KORG_NOSPLITTER 398#ifndef KORG_NOSPLITTER
399 // create the main layout frames. 399 // create the main layout frames.
400 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 400 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
401 topLayout->addWidget(mPanner); 401 topLayout->addWidget(mPanner);
402 402
403 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 403 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
404 "CalendarView::LeftFrame"); 404 "CalendarView::LeftFrame");
405 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 405 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
406 406
407 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 407 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
408 "CalendarView::DateNavigator" ); 408 "CalendarView::DateNavigator" );
409 409
410 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 410 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
411 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 411 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
412 mTodoList->setNavigator( mNavigator ); 412 mTodoList->setNavigator( mNavigator );
413 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 413 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
414 414
415#ifdef KORG_NORESOURCEVIEW 415#ifdef KORG_NORESOURCEVIEW
416 mResourceView = 0; 416 mResourceView = 0;
417#else 417#else
418 if ( mResourceManager ) { 418 if ( mResourceManager ) {
419 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 419 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
420 mResourceView->updateView(); 420 mResourceView->updateView();
421 connect( mResourceView, SIGNAL( resourcesChanged() ), 421 connect( mResourceView, SIGNAL( resourcesChanged() ),
422 SLOT( updateView() ) ); 422 SLOT( updateView() ) );
423 } else { 423 } else {
424 mResourceView = 0; 424 mResourceView = 0;
425 } 425 }
426#endif 426#endif
427 QWidget *rightBox = new QWidget( mPanner ); 427 QWidget *rightBox = new QWidget( mPanner );
428 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 428 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
429 429
430 mRightFrame = new QWidgetStack( rightBox ); 430 mRightFrame = new QWidgetStack( rightBox );
431 rightLayout->addWidget( mRightFrame, 1 ); 431 rightLayout->addWidget( mRightFrame, 1 );
432 432
433 mLeftFrame = mLeftSplitter; 433 mLeftFrame = mLeftSplitter;
434#else 434#else
435 //QWidget *mainBox = new QWidget( this ); 435 //QWidget *mainBox = new QWidget( this );
436 //QWidget *leftFrame = new QWidget( mainBox ); 436 //QWidget *leftFrame = new QWidget( mainBox );
437 //QBoxLayout * mainBoxLayout; 437 //QBoxLayout * mainBoxLayout;
438 if ( KOPrefs::instance()->mVerticalScreen ) { 438 if ( KOPrefs::instance()->mVerticalScreen ) {
439 //mainBoxLayout = new QVBoxLayout(mainBox); 439 //mainBoxLayout = new QVBoxLayout(mainBox);
440 //leftFrameLayout = new QHBoxLayout(leftFrame ); 440 //leftFrameLayout = new QHBoxLayout(leftFrame );
441 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 441 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
442 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 442 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
443 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 443 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
444 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 444 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
445 } else { 445 } else {
446 //mainBoxLayout = new QHBoxLayout(mainBox); 446 //mainBoxLayout = new QHBoxLayout(mainBox);
447 //leftFrameLayout = new QVBoxLayout(leftFrame ); 447 //leftFrameLayout = new QVBoxLayout(leftFrame );
448 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 448 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
449 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 449 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
450 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 450 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
451 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 451 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
452 } 452 }
453 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 453 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
454 //QBoxLayout * leftFrameLayout; 454 //QBoxLayout * leftFrameLayout;
455 topLayout->addWidget( mMainFrame ); 455 topLayout->addWidget( mMainFrame );
456#ifdef DESKTOP_VERSION 456#ifdef DESKTOP_VERSION
457 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 457 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
458 topLayout->addWidget( mDateScrollBar ); 458 topLayout->addWidget( mDateScrollBar );
459 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 459 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
460 if ( QApplication::desktop()->width() < 800 ) 460 if ( QApplication::desktop()->width() < 800 )
461 mDateScrollBar->hide(); 461 mDateScrollBar->hide();
462#endif 462#endif
463 //mainBoxLayout->addWidget (mLeftFrame); 463 //mainBoxLayout->addWidget (mLeftFrame);
464 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 464 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
465 "CalendarView::DateNavigator" ); 465 "CalendarView::DateNavigator" );
466#if 0 466#if 0
467 // FIXME 467 // FIXME
468 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 468 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
469 "CalendarView::DateNavigator", QDate::currentDate()); 469 "CalendarView::DateNavigator", QDate::currentDate());
470#endif 470#endif
471 // mDateNavigator->blockSignals( true ); 471 // mDateNavigator->blockSignals( true );
472 //leftFrameLayout->addWidget( mDateNavigator ); 472 //leftFrameLayout->addWidget( mDateNavigator );
473 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 473 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
474 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 474 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
475 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 475 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
476 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 476 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
477 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 477 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
478 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 478 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
479 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 479 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
480 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 480 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
481 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 481 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
482 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 482 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
483 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 483 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
484 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 484 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
485 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 485 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
486 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) ); 486 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) );
487 487
488 488
489 mTodoList->setNavigator( mNavigator ); 489 mTodoList->setNavigator( mNavigator );
490#if 0 490#if 0
491 if ( QApplication::desktop()->width() < 480 ) { 491 if ( QApplication::desktop()->width() < 480 ) {
492 leftFrameLayout->addWidget(mFilterView); 492 leftFrameLayout->addWidget(mFilterView);
493 leftFrameLayout->addWidget(mTodoList, 2 ); 493 leftFrameLayout->addWidget(mTodoList, 2 );
494 494
495 } else { 495 } else {
496 leftFrameLayout->addWidget(mTodoList,2 ); 496 leftFrameLayout->addWidget(mTodoList,2 );
497 leftFrameLayout->addWidget(mFilterView ); 497 leftFrameLayout->addWidget(mFilterView );
498 } 498 }
499#endif 499#endif
500 mFilterView->hide(); 500 mFilterView->hide();
501 mCalEditView->hide(); 501 mCalEditView->hide();
502 QWidget *rightBox = new QWidget( mMainFrame ); 502 QWidget *rightBox = new QWidget( mMainFrame );
503 //mainBoxLayout->addWidget ( rightBox, 10 ); 503 //mainBoxLayout->addWidget ( rightBox, 10 );
504 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 504 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
505 mRightFrame = new QWidgetStack( rightBox ); 505 mRightFrame = new QWidgetStack( rightBox );
506 rightLayout->addWidget( mRightFrame, 10 ); 506 rightLayout->addWidget( mRightFrame, 10 );
507 507
508 //mLeftFrame = (QWidget *)leftFrame; 508 //mLeftFrame = (QWidget *)leftFrame;
509 if ( KOPrefs::instance()->mVerticalScreen ) { 509 if ( KOPrefs::instance()->mVerticalScreen ) {
510 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 510 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
511 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 511 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
512 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 512 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
513 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 513 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
514 } else { 514 } else {
515 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 515 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
516 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 516 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
517 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 517 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
518 } 518 }
519 if ( !KOPrefs::instance()->mShowDateNavigator) 519 if ( !KOPrefs::instance()->mShowDateNavigator)
520 mDateNavigator->hide(); 520 mDateNavigator->hide();
521 //qDebug("Calendarview Size %d %d ", width(), height()); 521 //qDebug("Calendarview Size %d %d ", width(), height());
522#endif 522#endif
523 523
524 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 524 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
525 SLOT( showDates( const KCal::DateList & ) ) ); 525 SLOT( showDates( const KCal::DateList & ) ) );
526 526
527 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 527 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
528 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 528 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
529 529
530 530
531 531
532 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 532 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
533 mViewManager, SLOT( showMonth( const QDate & ) ) ); 533 mViewManager, SLOT( showMonth( const QDate & ) ) );
534 534
535 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 535 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
536 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 536 mNavigator, SLOT( selectWeek( const QDate & ) ) );
537 537
538 connect( mDateNavigator, SIGNAL( goPrevYear() ), 538 connect( mDateNavigator, SIGNAL( goPrevYear() ),
539 mNavigator, SLOT( selectPreviousYear() ) ); 539 mNavigator, SLOT( selectPreviousYear() ) );
540 connect( mDateNavigator, SIGNAL( goNextYear() ), 540 connect( mDateNavigator, SIGNAL( goNextYear() ),
541 mNavigator, SLOT( selectNextYear() ) ); 541 mNavigator, SLOT( selectNextYear() ) );
542 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 542 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
543 mNavigator, SLOT( selectPreviousMonth() ) ); 543 mNavigator, SLOT( selectPreviousMonth() ) );
544 connect( mDateNavigator, SIGNAL( goNextMonth() ), 544 connect( mDateNavigator, SIGNAL( goNextMonth() ),
545 mNavigator, SLOT( selectNextMonth() ) ); 545 mNavigator, SLOT( selectNextMonth() ) );
546 546
547 connect( mDateNavigator, SIGNAL( goPrevious() ), 547 connect( mDateNavigator, SIGNAL( goPrevious() ),
548 mNavigator, SLOT( selectPrevious() ) ); 548 mNavigator, SLOT( selectPrevious() ) );
549 connect( mDateNavigator, SIGNAL( goNext() ), 549 connect( mDateNavigator, SIGNAL( goNext() ),
550 mNavigator, SLOT( selectNext() ) ); 550 mNavigator, SLOT( selectNext() ) );
551 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 551 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
552 mNavigator, SLOT( slotMonthSelect( int ) ) ); 552 mNavigator, SLOT( slotMonthSelect( int ) ) );
553 553
554 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 554 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
555 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 555 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
556#if 0 556#if 0
557 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 557 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
558 SLOT( incidenceAdded( Incidence *) ) ); 558 SLOT( incidenceAdded( Incidence *) ) );
559#endif 559#endif
560 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 560 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
561 561
562 connect( this, SIGNAL( configChanged() ), 562 connect( this, SIGNAL( configChanged() ),
563 mDateNavigator, SLOT( updateConfig() ) ); 563 mDateNavigator, SLOT( updateConfig() ) );
564 564
565 connect( mTodoList, SIGNAL( newTodoSignal() ), 565 connect( mTodoList, SIGNAL( newTodoSignal() ),
566 SLOT( newTodo() ) ); 566 SLOT( newTodo() ) );
567 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 567 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
568 SLOT( newSubTodo( Todo * ) ) ); 568 SLOT( newSubTodo( Todo * ) ) );
569 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 569 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
570 SLOT( editTodo( Todo * ) ) ); 570 SLOT( editTodo( Todo * ) ) );
571 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 571 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
572 SLOT( showTodo( Todo *) ) ); 572 SLOT( showTodo( Todo *) ) );
573 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 573 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
574 SLOT( deleteTodo( Todo *) ) ); 574 SLOT( deleteTodo( Todo *) ) );
575 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 575 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
576 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 576 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
577 SLOT( purgeCompleted() ) ); 577 SLOT( purgeCompleted() ) );
578 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 578 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
579 SIGNAL( todoModified( Todo *, int ) ) ); 579 SIGNAL( todoModified( Todo *, int ) ) );
580 580
581 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 581 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
582 this, SLOT ( cloneIncidence( Incidence * ) ) ); 582 this, SLOT ( cloneIncidence( Incidence * ) ) );
583 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 583 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
584 this, SLOT (cancelIncidence( Incidence * ) ) ); 584 this, SLOT (cancelIncidence( Incidence * ) ) );
585 585
586 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 586 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
587 this, SLOT ( moveIncidence( Incidence * ) ) ); 587 this, SLOT ( moveIncidence( Incidence * ) ) );
588 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 588 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
589 this, SLOT ( beamIncidence( Incidence * ) ) ); 589 this, SLOT ( beamIncidence( Incidence * ) ) );
590 590
591 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 591 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
592 this, SLOT ( todo_unsub( Todo * ) ) ); 592 this, SLOT ( todo_unsub( Todo * ) ) );
593 593
594 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 594 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
595 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 595 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
596 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 596 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
597 SLOT( updateTodo( Todo *, int ) ) ); 597 SLOT( updateTodo( Todo *, int ) ) );
598 connect( this, SIGNAL( todoModified( Todo *, int )), this, 598 connect( this, SIGNAL( todoModified( Todo *, int )), this,
599 SLOT( changeTodoDisplay( Todo *, int ) ) ); 599 SLOT( changeTodoDisplay( Todo *, int ) ) );
600 600
601 601
602 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 602 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
603 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 603 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
604 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 604 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
605 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 605 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
606 606
607 607
608 608
609 609
610 610
611 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 611 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
612 SLOT(checkClipboard())); 612 SLOT(checkClipboard()));
613 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 613 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
614 SLOT( processTodoListSelection( Incidence * ) ) ); 614 SLOT( processTodoListSelection( Incidence * ) ) );
615 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 615 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
616 616
617 // kdDebug() << "CalendarView::CalendarView() done" << endl; 617 // kdDebug() << "CalendarView::CalendarView() done" << endl;
618 618
619 mDateFrame = new QVBox(0,0,WType_Popup); 619 mDateFrame = new QVBox(0,0,WType_Popup);
620 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 620 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
621 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 621 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
622 mDateFrame->setLineWidth(3); 622 mDateFrame->setLineWidth(3);
623 mDateFrame->hide(); 623 mDateFrame->hide();
624 mDateFrame->setCaption( i18n( "Pick a date to display")); 624 mDateFrame->setCaption( i18n( "Pick a date to display"));
625 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 625 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
626 626
627 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 627 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
628 628
629 mEventEditor = mDialogManager->getEventEditor(); 629 mEventEditor = mDialogManager->getEventEditor();
630 mTodoEditor = mDialogManager->getTodoEditor(); 630 mTodoEditor = mDialogManager->getTodoEditor();
631 631
632 mFlagEditDescription = false; 632 mFlagEditDescription = false;
633 633
634 mSuspendTimer = new QTimer( this ); 634 mSuspendTimer = new QTimer( this );
635 mAlarmTimer = new QTimer( this ); 635 mAlarmTimer = new QTimer( this );
636 mRecheckAlarmTimer = new QTimer( this ); 636 mRecheckAlarmTimer = new QTimer( this );
637 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 637 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
638 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 638 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
639 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 639 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
640 mAlarmDialog = new AlarmDialog( this ); 640 mAlarmDialog = new AlarmDialog( this );
641 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 641 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
642 mAlarmDialog->setServerNotification( false ); 642 mAlarmDialog->setServerNotification( false );
643 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 643 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
644 644
645 645
646#ifndef DESKTOP_VERSION 646#ifndef DESKTOP_VERSION
647//US listen for arriving address resultsets 647//US listen for arriving address resultsets
648 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 648 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
649 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 649 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
650#endif 650#endif
651 mDateNavigator->setCalendar( mCalendar ); 651 mDateNavigator->setCalendar( mCalendar );
652} 652}
653 653
654 654
655CalendarView::~CalendarView() 655CalendarView::~CalendarView()
656{ 656{
657 // kdDebug() << "~CalendarView()" << endl; 657 // kdDebug() << "~CalendarView()" << endl;
658 //qDebug("CalendarView::~CalendarView() "); 658 //qDebug("CalendarView::~CalendarView() ");
659 delete mDialogManager; 659 delete mDialogManager;
660 delete mViewManager; 660 delete mViewManager;
661 delete mStorage; 661 delete mStorage;
662 delete mDateFrame ; 662 delete mDateFrame ;
663 delete mEventViewerDialog; 663 delete mEventViewerDialog;
664 //kdDebug() << "~CalendarView() done" << endl; 664 //kdDebug() << "~CalendarView() done" << endl;
665} 665}
666 666
667 667
668void CalendarView::nextConflict( bool all, bool allday ) 668void CalendarView::nextConflict( bool all, bool allday )
669{ 669{
670 if ( flag_blockConflict ) return; 670 if ( flag_blockConflict ) return;
671 flag_blockConflict = true; 671 flag_blockConflict = true;
672 QPtrList<Event> testlist = mCalendar->events(); 672 QPtrList<Event> testlist = mCalendar->events();
673 Event * test = testlist.first(); 673 Event * test = testlist.first();
674 while ( test ) { 674 while ( test ) {
675 test->setTagged( false ); 675 test->setTagged( false );
676 test = testlist.next(); 676 test = testlist.next();
677 } 677 }
678 QTime st ( 0,0,0); 678 QTime st ( 0,0,0);
679 if ( mViewManager->currentView() == mViewManager->agendaView() ) 679 if ( mViewManager->currentView() == mViewManager->agendaView() )
680 st = mViewManager->agendaView()->agenda()->getEndTime(); 680 st = mViewManager->agendaView()->agenda()->getEndTime();
681 //qDebug("time %s ", st.toString().latin1()); 681 //qDebug("time %s ", st.toString().latin1());
682 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 682 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
683 QDateTime conflict; 683 QDateTime conflict;
684 QDateTime retVal; 684 QDateTime retVal;
685 bool found = false; 685 bool found = false;
686 Event * cE = 0; 686 Event * cE = 0;
687 Event * cE2 = 0; 687 Event * cE2 = 0;
688 QPtrList<Event> testlist2 = testlist; 688 QPtrList<Event> testlist2 = testlist;
689 test = testlist.first(); 689 test = testlist.first();
690 bool skip = false; 690 bool skip = false;
691 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 691 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
692 //QTime tm; 692 //QTime tm;
693 //tm.start(); 693 //tm.start();
694 while ( test ) { 694 while ( test ) {
695 qApp->processEvents(); 695 qApp->processEvents();
696 skip = false; 696 skip = false;
697 if ( !all ) skip = ( allday != test->doesFloat() ); 697 if ( !all ) skip = ( allday != test->doesFloat() );
698 if ( !skip ) { 698 if ( !skip ) {
699 if ( found ) 699 if ( found )
700 skip = !test->matchTime( &startDT, &conflict ); 700 skip = !test->matchTime( &startDT, &conflict );
701 else 701 else
702 skip = !test->matchTime( &startDT, 0 ); 702 skip = !test->matchTime( &startDT, 0 );
703 } 703 }
704 if ( !skip ) { 704 if ( !skip ) {
705 Event * test2 = testlist2.first(); 705 Event * test2 = testlist2.first();
706 while ( test2 ) { 706 while ( test2 ) {
707 skip = test2->isTagged(); 707 skip = test2->isTagged();
708 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 708 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
709 if ( !skip ) { 709 if ( !skip ) {
710 if ( found ) 710 if ( found )
711 skip = !test2->matchTime( &startDT, &conflict ); 711 skip = !test2->matchTime( &startDT, &conflict );
712 else 712 else
713 skip = !test2->matchTime( &startDT, 0 ); 713 skip = !test2->matchTime( &startDT, 0 );
714 } 714 }
715 if ( !skip ) { 715 if ( !skip ) {
716 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 716 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
717 //qDebug("overlap "); 717 //qDebug("overlap ");
718 if ( ! found ) { 718 if ( ! found ) {
719 if ( retVal >= startDT ) { 719 if ( retVal >= startDT ) {
720 conflict = retVal; 720 conflict = retVal;
721 cE = test; 721 cE = test;
722 cE2 = test2; 722 cE2 = test2;
723 found = true; 723 found = true;
724 } 724 }
725 } else { 725 } else {
726 if ( retVal >= startDT && retVal < conflict ) { 726 if ( retVal >= startDT && retVal < conflict ) {
727 conflict = retVal; 727 conflict = retVal;
728 cE = test; 728 cE = test;
729 cE2 = test2; 729 cE2 = test2;
730 } 730 }
731 } 731 }
732 } 732 }
733 } 733 }
734 test2 = testlist2.next(); 734 test2 = testlist2.next();
735 } 735 }
736 } 736 }
737 test->setTagged( true ); 737 test->setTagged( true );
738 test = testlist.next(); 738 test = testlist.next();
739 } 739 }
740 //qDebug("Search time : %d", tm.elapsed()); 740 //qDebug("Search time : %d", tm.elapsed());
741 if ( found ) { 741 if ( found ) {
742 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 742 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
743 mViewManager->showDayView(); 743 mViewManager->showDayView();
744 mNavigator->slotDaySelect( conflict.date() ); 744 mNavigator->slotDaySelect( conflict.date() );
745 int hour = conflict.time().hour(); 745 int hour = conflict.time().hour();
746 mViewManager->agendaView()->setStartHour( hour ); 746 mViewManager->agendaView()->setStartHour( hour );
747 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 747 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
748 flag_blockConflict = false; 748 flag_blockConflict = false;
749 return; 749 return;
750 } 750 }
751 751
752 topLevelWidget()->setCaption( i18n("No conflict found") ); 752 topLevelWidget()->setCaption( i18n("No conflict found") );
753 //qDebug("No conflict found "); 753 //qDebug("No conflict found ");
754 flag_blockConflict = false; 754 flag_blockConflict = false;
755 return; 755 return;
756} 756}
757 757
758void CalendarView::conflictAll() 758void CalendarView::conflictAll()
759{ 759{
760 nextConflict ( true, true ); 760 nextConflict ( true, true );
761} 761}
762void CalendarView::conflictAllday() 762void CalendarView::conflictAllday()
763{ 763{
764 nextConflict ( false, true ); 764 nextConflict ( false, true );
765} 765}
766void CalendarView::conflictNotAll() 766void CalendarView::conflictNotAll()
767{ 767{
768 nextConflict ( false, false ); 768 nextConflict ( false, false );
769} 769}
770 770
771void CalendarView::setCalReadOnly( int id, bool readO ) 771void CalendarView::setCalReadOnly( int id, bool readO )
772{ 772{
773 if ( readO ) { 773 if ( readO ) {
774 emit save(); 774 emit save();
775 } 775 }
776 mCalendar->setReadOnly( id, readO ); 776 mCalendar->setReadOnly( id, readO );
777} 777}
778void CalendarView::setScrollBarStep(int val ) 778void CalendarView::setScrollBarStep(int val )
779{ 779{
780#ifdef DESKTOP_VERSION 780#ifdef DESKTOP_VERSION
781 mDateScrollBar->setLineStep ( val ); 781 mDateScrollBar->setLineStep ( val );
782#else
783 Q_UNUSED( val );
782#endif 784#endif
783} 785}
784void CalendarView::scrollBarValue(int val ) 786void CalendarView::scrollBarValue(int val )
785{ 787{
786#ifdef DESKTOP_VERSION 788#ifdef DESKTOP_VERSION
787 if ( QApplication::desktop()->width() < 800 ) return; 789 if ( QApplication::desktop()->width() < 800 ) return;
788 if ( flag_blockScrollBar ) return; 790 if ( flag_blockScrollBar ) return;
789 flag_blockScrollBar = true; 791 flag_blockScrollBar = true;
790 int count = mNavigator->selectedDates().count(); 792 int count = mNavigator->selectedDates().count();
791 int day = mNavigator->selectedDates().first().dayOfYear(); 793 int day = mNavigator->selectedDates().first().dayOfYear();
792 int stepdays = val; 794 int stepdays = val;
793 if ( mDateScrollBar->lineStep () <= count ) { 795 if ( mDateScrollBar->lineStep () <= count ) {
794 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 796 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
795 //qDebug("VAL %d ",val ); 797 //qDebug("VAL %d ",val );
796 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 798 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
797 stepdays = day+stepdays; 799 stepdays = day+stepdays;
798 if ( stepdays < 0 ) stepdays = 0; 800 if ( stepdays < 0 ) stepdays = 0;
799 } 801 }
800 if ( stepdays == day ) { 802 if ( stepdays == day ) {
801 flag_blockScrollBar = false; 803 flag_blockScrollBar = false;
802 return; 804 return;
803 } 805 }
804 int year = mNavigator->selectedDates().first().year(); 806 int year = mNavigator->selectedDates().first().year();
805 QDate d ( year,1,1 ); 807 QDate d ( year,1,1 );
806 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 808 mNavigator->selectDates( d.addDays( stepdays-1) , count );
807 flag_blockScrollBar = false; 809 flag_blockScrollBar = false;
810#else
811 Q_UNUSED( val );
808#endif 812#endif
809 813
810} 814}
811void CalendarView::updateView(const QDate &start, const QDate &end) 815void CalendarView::updateView(const QDate &start, const QDate &end)
812{ 816{
813#ifdef DESKTOP_VERSION 817#ifdef DESKTOP_VERSION
814 if ( ! mDateScrollBar->draggingSlider () ) { 818 if ( ! mDateScrollBar->draggingSlider () ) {
815 int dof = start.dayOfYear(); 819 int dof = start.dayOfYear();
816 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 820 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
817 if ( dof != mDateScrollBar->value() ) { 821 if ( dof != mDateScrollBar->value() ) {
818 mDateScrollBar->blockSignals( true ); 822 mDateScrollBar->blockSignals( true );
819 mDateScrollBar->setValue( start.dayOfYear()); 823 mDateScrollBar->setValue( start.dayOfYear());
820 mDateScrollBar->blockSignals( false ); 824 mDateScrollBar->blockSignals( false );
821 } 825 }
822 } 826 }
823#endif 827#endif
824 mTodoList->updateView(); 828 mTodoList->updateView();
825 mViewManager->updateView(start, end); 829 mViewManager->updateView(start, end);
826 //mDateNavigator->updateView(); 830 //mDateNavigator->updateView();
827} 831}
828 832
829 833
830 834
831void CalendarView::checkFiles() 835void CalendarView::checkFiles()
832{ 836{
833 QString message; 837 QString message;
834 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 838 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
835 KopiCalendarFile * cal = calendars.first(); 839 KopiCalendarFile * cal = calendars.first();
836 while ( cal ) { 840 while ( cal ) {
837 if ( cal->mErrorOnLoad ) { 841 if ( cal->mErrorOnLoad ) {
838 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 842 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
839 } 843 }
840 cal = calendars.next(); 844 cal = calendars.next();
841 } 845 }
842 if ( !message.isEmpty() ) { 846 if ( !message.isEmpty() ) {
843 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 847 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
844 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed")); 848 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
845 } 849 }
846 if ( flag_checkFileFirsttime ) { 850 if ( flag_checkFileFirsttime ) {
847 flag_checkFileFirsttime = false; 851 flag_checkFileFirsttime = false;
848 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 852 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
849 } 853 }
850} 854}
851void CalendarView::checkAlarms() 855void CalendarView::checkAlarms()
852{ 856{
853 KConfig *config = KOGlobals::config(); 857 KConfig *config = KOGlobals::config();
854 config->setGroup( "AppRun" ); 858 config->setGroup( "AppRun" );
855 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 859 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
856 int daysto = dt.daysTo( QDate::currentDate() ); 860 int daysto = dt.daysTo( QDate::currentDate() );
857 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 861 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
858 dt = dt.addDays( days ); 862 dt = dt.addDays( days );
859 int secto = dt.secsTo( QDateTime::currentDateTime() ); 863 int secto = dt.secsTo( QDateTime::currentDateTime() );
860 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 864 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
861 //qDebug("KO: Reading program stop %d ", secs); 865 //qDebug("KO: Reading program stop %d ", secs);
862 //secs -= ( 3600 * 24*3 ); // debug only 866 //secs -= ( 3600 * 24*3 ); // debug only
863 QDateTime latest = dt.addSecs ( secs ); 867 QDateTime latest = dt.addSecs ( secs );
864 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 868 qDebug("KO: Last termination on %s ", latest.toString().latin1());
865 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 869 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
866 QPtrList<Incidence> el = mCalendar->rawIncidences(); 870 QPtrList<Incidence> el = mCalendar->rawIncidences();
867 QPtrList<Incidence> al; 871 QPtrList<Incidence> al;
868 Incidence* inL = el.first(); 872 Incidence* inL = el.first();
869 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 873 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
870 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 874 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
871 while ( inL ) { 875 while ( inL ) {
872 bool ok = false; 876 bool ok = false;
873 int offset = 0; 877 int offset = 0;
874 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 878 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
875 if ( ok ) { 879 if ( ok ) {
876 //qDebug("OK %s",next.toString().latin1()); 880 //qDebug("OK %s",next.toString().latin1());
877 if ( next < cur ) { 881 if ( next < cur ) {
878 al.append( inL ); 882 al.append( inL );
879 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 883 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
880 } 884 }
881 } 885 }
882 inL = el.next(); 886 inL = el.next();
883 } 887 }
884 if ( al.count() ) { 888 if ( al.count() ) {
885 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 889 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
886 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 890 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
887 QVBoxLayout* lay = new QVBoxLayout( dia ); 891 QVBoxLayout* lay = new QVBoxLayout( dia );
888 lay->setSpacing( 0 ); 892 lay->setSpacing( 0 );
889 lay->setMargin( 0 ); 893 lay->setMargin( 0 );
890 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 894 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
891 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 895 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
892 lay->addWidget( matb ); 896 lay->addWidget( matb );
893 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 897 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
894 int wid = 210; 898 int wid = 210;
895 int x = QApplication::desktop()->width() - wid - 7; 899 int x = QApplication::desktop()->width() - wid - 7;
896 int y = QApplication::desktop()->height() - wid - 70; 900 int y = QApplication::desktop()->height() - wid - 70;
897 dia->setGeometry ( x,y,wid,wid); 901 dia->setGeometry ( x,y,wid,wid);
898 } else { 902 } else {
899 int si = 220; 903 int si = 220;
900 if ( QApplication::desktop()->width() > 470 ) 904 if ( QApplication::desktop()->width() > 470 )
901 si = 400; 905 si = 400;
902 dia->resize(si,si/2); 906 dia->resize(si,si/2);
903 } 907 }
904 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 908 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
905 dia->show(); 909 dia->show();
906 910
907 } 911 }
908#if 0 912#if 0
909 // for creating timetracker test data 913 // for creating timetracker test data
910 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 914 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
911 Todo * nt; 915 Todo * nt;
912 mCalendar->close(); 916 mCalendar->close();
913 { 917 {
914 Todo * root1 = new Todo; 918 Todo * root1 = new Todo;
915 mCalendar->addTodo( root1 ); 919 mCalendar->addTodo( root1 );
916 root1->setSummary( "Project1"); 920 root1->setSummary( "Project1");
917 root1->setPriority( 1 ); 921 root1->setPriority( 1 );
918 root1->setCategories( QString( "Cat_Pro1") ); 922 root1->setCategories( QString( "Cat_Pro1") );
919 root1->setDescription( "This is a test description of a root Project" ); 923 root1->setDescription( "This is a test description of a root Project" );
920 root1->setPercentComplete( 20 ); 924 root1->setPercentComplete( 20 );
921 updateView(); 925 updateView();
922 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 926 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
923 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 927 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
924 928
925 nt = new Todo; 929 nt = new Todo;
926 mCalendar->addTodo( nt ); 930 mCalendar->addTodo( nt );
927 nt->setSummary( "Planning Project1"); 931 nt->setSummary( "Planning Project1");
928 nt->setPriority( 1 ); 932 nt->setPriority( 1 );
929 nt->setDescription( "This is a test description of Planning Project1" ); 933 nt->setDescription( "This is a test description of Planning Project1" );
930 nt->setPercentComplete( 20 ); 934 nt->setPercentComplete( 20 );
931 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 935 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
932 936
933 937
934 Todo * sub1 = nt; 938 Todo * sub1 = nt;
935 sub1->setRelatedTo( root1 ); 939 sub1->setRelatedTo( root1 );
936 940
937 nt = new Todo; 941 nt = new Todo;
938 mCalendar->addTodo( nt ); 942 mCalendar->addTodo( nt );
939 nt->setSummary( "Planning Project1: Lutz"); 943 nt->setSummary( "Planning Project1: Lutz");
940 nt->setPriority( 1 ); 944 nt->setPriority( 1 );
941 nt->setDescription( "This todo counts the actual work of a person on a project" ); 945 nt->setDescription( "This todo counts the actual work of a person on a project" );
942 nt->setPercentComplete( 20 ); 946 nt->setPercentComplete( 20 );
943 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 947 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
944 Todo * workLutz11 = nt; 948 Todo * workLutz11 = nt;
945 workLutz11->setRelatedTo( sub1 ); 949 workLutz11->setRelatedTo( sub1 );
946 950
947 nt = new Todo; 951 nt = new Todo;
948 mCalendar->addTodo( nt ); 952 mCalendar->addTodo( nt );
949 nt->setSummary( "Planning Project1: Norbert"); 953 nt->setSummary( "Planning Project1: Norbert");
950 nt->setPriority( 1 ); 954 nt->setPriority( 1 );
951 nt->setDescription( "This todo counts the actual work of a person on a project" ); 955 nt->setDescription( "This todo counts the actual work of a person on a project" );
952 nt->setPercentComplete( 20 ); 956 nt->setPercentComplete( 20 );
953 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 957 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
954 Todo * workNorbert11 = nt; 958 Todo * workNorbert11 = nt;
955 workNorbert11->setRelatedTo( sub1 ); 959 workNorbert11->setRelatedTo( sub1 );
956 960
957 nt = new Todo; 961 nt = new Todo;
958 mCalendar->addTodo( nt ); 962 mCalendar->addTodo( nt );
959 nt->setSummary( "Work on 1"); 963 nt->setSummary( "Work on 1");
960 nt->setPriority( 1 ); 964 nt->setPriority( 1 );
961 nt->setDescription( "This is a test description of Work Project_1" ); 965 nt->setDescription( "This is a test description of Work Project_1" );
962 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") ); 966 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
963 nt->setPercentComplete( 20 ); 967 nt->setPercentComplete( 20 );
964 968
965 Todo * sub2 = nt; 969 Todo * sub2 = nt;
966 sub2->setRelatedTo( root1 ); 970 sub2->setRelatedTo( root1 );
967 971
968 972
969 nt = new Todo; 973 nt = new Todo;
970 mCalendar->addTodo( nt ); 974 mCalendar->addTodo( nt );
971 nt->setSummary( "Work on 1: Lutz"); 975 nt->setSummary( "Work on 1: Lutz");
972 nt->setPriority( 1 ); 976 nt->setPriority( 1 );
973 nt->setDescription( "This todo counts the actual work of a person on a project" ); 977 nt->setDescription( "This todo counts the actual work of a person on a project" );
974 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") ); 978 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
975 nt->setPercentComplete( 20 ); 979 nt->setPercentComplete( 20 );
976 Todo * workLutz12 = nt; 980 Todo * workLutz12 = nt;
977 workLutz12->setRelatedTo( sub2 ); 981 workLutz12->setRelatedTo( sub2 );
978 982
979 nt = new Todo; 983 nt = new Todo;
980 mCalendar->addTodo( nt ); 984 mCalendar->addTodo( nt );
981 nt->setSummary( "Work on 1: Norbert"); 985 nt->setSummary( "Work on 1: Norbert");
982 nt->setPriority( 1 ); 986 nt->setPriority( 1 );
983 nt->setDescription( "This todo counts the actual work of a person on a project" ); 987 nt->setDescription( "This todo counts the actual work of a person on a project" );
984 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") ); 988 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
985 nt->setPercentComplete( 20 ); 989 nt->setPercentComplete( 20 );
986 Todo * workNorbert12 = nt; 990 Todo * workNorbert12 = nt;
987 workNorbert12->setRelatedTo( sub2 ); 991 workNorbert12->setRelatedTo( sub2 );
988 992
989 int secLenRunning = 7200; 993 int secLenRunning = 7200;
990 int secLenPausing = 3600 * 3; 994 int secLenPausing = 3600 * 3;
991 int dayInterval = 1; 995 int dayInterval = 1;
992 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 996 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
993 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 997 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
994 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 998 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
995 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 999 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
996 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 1000 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
997 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 1001 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
998 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 1002 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
999 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 1003 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
1000 1004
1001 } 1005 }
1002 1006
1003 { 1007 {
1004 Todo * root1 = new Todo; 1008 Todo * root1 = new Todo;
1005 mCalendar->addTodo( root1 ); 1009 mCalendar->addTodo( root1 );
1006 root1->setSummary( "Project2"); 1010 root1->setSummary( "Project2");
1007 root1->setPriority( 1 ); 1011 root1->setPriority( 1 );
1008 root1->setDescription( "This is a test description of a root Project 2" ); 1012 root1->setDescription( "This is a test description of a root Project 2" );
1009 root1->setPercentComplete( 20 ); 1013 root1->setPercentComplete( 20 );
1010 root1->setCategories( QString( "Cat_Pro2") ); 1014 root1->setCategories( QString( "Cat_Pro2") );
1011 updateView(); 1015 updateView();
1012 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1016 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1013 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 1017 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1014 int secLenRunning = 7200; 1018 int secLenRunning = 7200;
1015 int secLenPausing = 3600 * 3; 1019 int secLenPausing = 3600 * 3;
1016 int dayInterval = 1; 1020 int dayInterval = 1;
1017 1021
1018 nt = new Todo; 1022 nt = new Todo;
1019 mCalendar->addTodo( nt ); 1023 mCalendar->addTodo( nt );
1020 nt->setSummary( "Planning Project2"); 1024 nt->setSummary( "Planning Project2");
1021 nt->setPriority( 1 ); 1025 nt->setPriority( 1 );
1022 nt->setDescription( "This is a test description of Planning_Project_2" ); 1026 nt->setDescription( "This is a test description of Planning_Project_2" );
1023 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") ); 1027 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1024 nt->setPercentComplete( 20 ); 1028 nt->setPercentComplete( 20 );
1025 1029
1026 1030
1027 Todo * sub1 = nt; 1031 Todo * sub1 = nt;
1028 sub1->setRelatedTo( root1 ); 1032 sub1->setRelatedTo( root1 );
1029 1033
1030 nt = new Todo; 1034 nt = new Todo;
1031 mCalendar->addTodo( nt ); 1035 mCalendar->addTodo( nt );
1032 nt->setSummary( "Planning Project2: Lutz"); 1036 nt->setSummary( "Planning Project2: Lutz");
1033 nt->setPriority( 1 ); 1037 nt->setPriority( 1 );
1034 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1038 nt->setDescription( "This todo counts the actual work of a person on a project" );
1035 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") ); 1039 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1036 nt->setPercentComplete( 20 ); 1040 nt->setPercentComplete( 20 );
1037 Todo * workLutz11 = nt; 1041 Todo * workLutz11 = nt;
1038 workLutz11->setRelatedTo( sub1 ); 1042 workLutz11->setRelatedTo( sub1 );
1039 1043
1040 nt = new Todo; 1044 nt = new Todo;
1041 mCalendar->addTodo( nt ); 1045 mCalendar->addTodo( nt );
1042 nt->setSummary( "Planning Project2: Norbert"); 1046 nt->setSummary( "Planning Project2: Norbert");
1043 nt->setPriority( 1 ); 1047 nt->setPriority( 1 );
1044 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1048 nt->setDescription( "This todo counts the actual work of a person on a project" );
1045 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") ); 1049 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1046 nt->setPercentComplete( 20 ); 1050 nt->setPercentComplete( 20 );
1047 Todo * workNorbert11 = nt; 1051 Todo * workNorbert11 = nt;
1048 workNorbert11->setRelatedTo( sub1 ); 1052 workNorbert11->setRelatedTo( sub1 );
1049 1053
1050 nt = new Todo; 1054 nt = new Todo;
1051 mCalendar->addTodo( nt ); 1055 mCalendar->addTodo( nt );
1052 nt->setSummary( "Work on 2"); 1056 nt->setSummary( "Work on 2");
1053 nt->setPriority( 1 ); 1057 nt->setPriority( 1 );
1054 nt->setDescription( "This is a test description of Work Project_2" ); 1058 nt->setDescription( "This is a test description of Work Project_2" );
1055 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") ); 1059 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1056 nt->setPercentComplete( 20 ); 1060 nt->setPercentComplete( 20 );
1057 1061
1058 Todo * sub2 = nt; 1062 Todo * sub2 = nt;
1059 sub2->setRelatedTo( root1 ); 1063 sub2->setRelatedTo( root1 );
1060 1064
1061 1065
1062 nt = new Todo; 1066 nt = new Todo;
1063 mCalendar->addTodo( nt ); 1067 mCalendar->addTodo( nt );
1064 nt->setSummary( "Work on 2: Lutz"); 1068 nt->setSummary( "Work on 2: Lutz");
1065 nt->setPriority( 1 ); 1069 nt->setPriority( 1 );
1066 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1070 nt->setDescription( "This todo counts the actual work of a person on a project" );
1067 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") ); 1071 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1068 nt->setPercentComplete( 20 ); 1072 nt->setPercentComplete( 20 );
1069 Todo * workLutz12 = nt; 1073 Todo * workLutz12 = nt;
1070 workLutz12->setRelatedTo( sub2 ); 1074 workLutz12->setRelatedTo( sub2 );
1071 1075
1072 nt = new Todo; 1076 nt = new Todo;
1073 mCalendar->addTodo( nt ); 1077 mCalendar->addTodo( nt );
1074 nt->setSummary( "Work on 2: Norbert"); 1078 nt->setSummary( "Work on 2: Norbert");
1075 nt->setPriority( 1 ); 1079 nt->setPriority( 1 );
1076 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1080 nt->setDescription( "This todo counts the actual work of a person on a project" );
1077 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") ); 1081 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1078 nt->setPercentComplete( 20 ); 1082 nt->setPercentComplete( 20 );
1079 Todo * workNorbert12 = nt; 1083 Todo * workNorbert12 = nt;
1080 workNorbert12->setRelatedTo( sub2 ); 1084 workNorbert12->setRelatedTo( sub2 );
1081 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1085 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1082 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1086 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1083 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1087 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1084 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1088 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1085 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1089 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1086 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1090 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1087 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1091 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1088 } 1092 }
1089 updateView(); 1093 updateView();
1090#endif 1094#endif
1091 1095
1092} 1096}
1093void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1097void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1094{ 1098{
1095 static int ccc = 0; 1099 static int ccc = 0;
1096 ++ccc; 1100 ++ccc;
1097 QDateTime t_start = start; 1101 QDateTime t_start = start;
1098 runT->setPriority( 5 ); 1102 runT->setPriority( 5 );
1099 runT->setPercentComplete( 0 ); 1103 runT->setPercentComplete( 0 );
1100 int count = 0; 1104 int count = 0;
1101 int prio = 5; 1105 int prio = 5;
1102 int complete = 0; 1106 int complete = 0;
1103 while ( t_start < end ) { 1107 while ( t_start < end ) {
1104 ++count; 1108 ++count;
1105 if ( count > ccc ) { 1109 if ( count > ccc ) {
1106 count = 0; 1110 count = 0;
1107 --prio; 1111 --prio;
1108 if ( prio == 0 ) prio = 5; 1112 if ( prio == 0 ) prio = 5;
1109 complete += 20; 1113 complete += 20;
1110 if ( complete > 100 ) complete = 0; 1114 if ( complete > 100 ) complete = 0;
1111 runT->setPriority( prio ); 1115 runT->setPriority( prio );
1112 runT->setPercentComplete( complete ); 1116 runT->setPercentComplete( complete );
1113 } 1117 }
1114 runT->setRunning( true ); 1118 runT->setRunning( true );
1115 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1119 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1116 if ( dayInterval ) 1120 if ( dayInterval )
1117 t_start = t_start.addDays( dayInterval ); 1121 t_start = t_start.addDays( dayInterval );
1118 else { 1122 else {
1119 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1123 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1120 } 1124 }
1121 } 1125 }
1122} 1126}
1123 1127
1124void CalendarView::showDay( QDate d ) 1128void CalendarView::showDay( QDate d )
1125{ 1129{
1126 dateNavigator()->blockSignals( true ); 1130 dateNavigator()->blockSignals( true );
1127 dateNavigator()->selectDate( d ); 1131 dateNavigator()->selectDate( d );
1128 dateNavigator()->blockSignals( false ); 1132 dateNavigator()->blockSignals( false );
1129 mViewManager->showDayView(); 1133 mViewManager->showDayView();
1130 //dateNavigator()->selectDate( d ); 1134 //dateNavigator()->selectDate( d );
1131} 1135}
1132void CalendarView::timerAlarm() 1136void CalendarView::timerAlarm()
1133{ 1137{
1134 //qDebug("CalendarView::timerAlarm() "); 1138 //qDebug("CalendarView::timerAlarm() ");
1135 computeAlarm(mAlarmNotification ); 1139 computeAlarm(mAlarmNotification );
1136} 1140}
1137 1141
1138void CalendarView::suspendAlarm() 1142void CalendarView::suspendAlarm()
1139{ 1143{
1140 //qDebug(" CalendarView::suspendAlarm() "); 1144 //qDebug(" CalendarView::suspendAlarm() ");
1141 computeAlarm(mSuspendAlarmNotification ); 1145 computeAlarm(mSuspendAlarmNotification );
1142 1146
1143} 1147}
1144 1148
1145void CalendarView::startAlarm( QString mess , QString filename) 1149void CalendarView::startAlarm( QString mess , QString filename)
1146{ 1150{
1147 1151
1148 topLevelWidget()->showNormal(); 1152 topLevelWidget()->showNormal();
1149 topLevelWidget()->setActiveWindow(); 1153 topLevelWidget()->setActiveWindow();
1150 topLevelWidget()->raise(); 1154 topLevelWidget()->raise();
1151 1155
1152 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1156 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1153 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1157 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1154 1158
1155} 1159}
1156 1160
1157void CalendarView::checkNextTimerAlarm() 1161void CalendarView::checkNextTimerAlarm()
1158{ 1162{
1159 mCalendar->checkAlarmForIncidence( 0, true ); 1163 mCalendar->checkAlarmForIncidence( 0, true );
1160} 1164}
1161 1165
1162void CalendarView::computeAlarm( QString msg ) 1166void CalendarView::computeAlarm( QString msg )
1163{ 1167{
1164 1168
1165 QString mess = msg; 1169 QString mess = msg;
1166 QString mAlarmMessage = mess.mid( 9 ); 1170 QString mAlarmMessage = mess.mid( 9 );
1167 QString filename = MainWindow::resourcePath(); 1171 QString filename = MainWindow::resourcePath();
1168 filename += "koalarm.wav"; 1172 filename += "koalarm.wav";
1169 QString tempfilename; 1173 QString tempfilename;
1170 if ( mess.left( 13 ) == "suspend_alarm") { 1174 if ( mess.left( 13 ) == "suspend_alarm") {
1171 bool error = false; 1175 bool error = false;
1172 int len = mess.mid( 13 ).find("+++"); 1176 int len = mess.mid( 13 ).find("+++");
1173 if ( len < 2 ) 1177 if ( len < 2 )
1174 error = true; 1178 error = true;
1175 else { 1179 else {
1176 tempfilename = mess.mid( 13, len ); 1180 tempfilename = mess.mid( 13, len );
1177 if ( !QFile::exists( tempfilename ) ) 1181 if ( !QFile::exists( tempfilename ) )
1178 error = true; 1182 error = true;
1179 } 1183 }
1180 if ( ! error ) { 1184 if ( ! error ) {
1181 filename = tempfilename; 1185 filename = tempfilename;
1182 } 1186 }
1183 mAlarmMessage = mess.mid( 13+len+3 ); 1187 mAlarmMessage = mess.mid( 13+len+3 );
1184 //qDebug("suspend file %s ",tempfilename.latin1() ); 1188 //qDebug("suspend file %s ",tempfilename.latin1() );
1185 startAlarm( mAlarmMessage, filename); 1189 startAlarm( mAlarmMessage, filename);
1186 return; 1190 return;
1187 } 1191 }
1188 if ( mess.left( 11 ) == "timer_alarm") { 1192 if ( mess.left( 11 ) == "timer_alarm") {
1189 //mTimerTime = 0; 1193 //mTimerTime = 0;
1190 startAlarm( mess.mid( 11 ), filename ); 1194 startAlarm( mess.mid( 11 ), filename );
1191 return; 1195 return;
1192 } 1196 }
1193 if ( mess.left( 10 ) == "proc_alarm") { 1197 if ( mess.left( 10 ) == "proc_alarm") {
1194 bool error = false; 1198 bool error = false;
1195 int len = mess.mid( 10 ).find("+++"); 1199 int len = mess.mid( 10 ).find("+++");
1196 if ( len < 2 ) 1200 if ( len < 2 )
1197 error = true; 1201 error = true;
1198 else { 1202 else {
1199 tempfilename = mess.mid( 10, len ); 1203 tempfilename = mess.mid( 10, len );
1200 if ( !QFile::exists( tempfilename ) ) 1204 if ( !QFile::exists( tempfilename ) )
1201 error = true; 1205 error = true;
1202 } 1206 }
1203 if ( error ) { 1207 if ( error ) {
1204 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1208 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1205 mAlarmMessage += mess.mid( 10+len+3+9 ); 1209 mAlarmMessage += mess.mid( 10+len+3+9 );
1206 } else { 1210 } else {
1207 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1211 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1208 //qDebug("-----system command %s ",tempfilename.latin1() ); 1212 //qDebug("-----system command %s ",tempfilename.latin1() );
1209#ifndef _WIN32_ 1213#ifndef _WIN32_
1210 if ( vfork () == 0 ) { 1214 if ( vfork () == 0 ) {
1211 execl ( tempfilename.latin1(), 0 ); 1215 execl ( tempfilename.latin1(), 0 );
1212 return; 1216 return;
1213 } 1217 }
1214#else 1218#else
1215 QProcess* p = new QProcess(); 1219 QProcess* p = new QProcess();
1216 p->addArgument( tempfilename.latin1() ); 1220 p->addArgument( tempfilename.latin1() );
1217 p->start(); 1221 p->start();
1218 return; 1222 return;
1219#endif 1223#endif
1220 1224
1221 return; 1225 return;
1222 } 1226 }
1223 1227
1224 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1228 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1225 } 1229 }
1226 if ( mess.left( 11 ) == "audio_alarm") { 1230 if ( mess.left( 11 ) == "audio_alarm") {
1227 bool error = false; 1231 bool error = false;
1228 int len = mess.mid( 11 ).find("+++"); 1232 int len = mess.mid( 11 ).find("+++");
1229 if ( len < 2 ) 1233 if ( len < 2 )
1230 error = true; 1234 error = true;
1231 else { 1235 else {
1232 tempfilename = mess.mid( 11, len ); 1236 tempfilename = mess.mid( 11, len );
1233 if ( !QFile::exists( tempfilename ) ) 1237 if ( !QFile::exists( tempfilename ) )
1234 error = true; 1238 error = true;
1235 } 1239 }
1236 if ( ! error ) { 1240 if ( ! error ) {
1237 filename = tempfilename; 1241 filename = tempfilename;
1238 } 1242 }
1239 mAlarmMessage = mess.mid( 11+len+3+9 ); 1243 mAlarmMessage = mess.mid( 11+len+3+9 );
1240 //qDebug("audio file command %s ",tempfilename.latin1() ); 1244 //qDebug("audio file command %s ",tempfilename.latin1() );
1241 } 1245 }
1242 if ( mess.left( 9 ) == "cal_alarm") { 1246 if ( mess.left( 9 ) == "cal_alarm") {
1243 mAlarmMessage = mess.mid( 9 ) ; 1247 mAlarmMessage = mess.mid( 9 ) ;
1244 } 1248 }
1245 1249
1246 startAlarm( mAlarmMessage, filename ); 1250 startAlarm( mAlarmMessage, filename );
1247 1251
1248 1252
1249} 1253}
1250 1254
1251void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1255void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1252{ 1256{
1253 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1257 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1254 1258
1255 mSuspendAlarmNotification = noti; 1259 mSuspendAlarmNotification = noti;
1256 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1260 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1257 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1261 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1258 mSuspendTimer->start( ms , true ); 1262 mSuspendTimer->start( ms , true );
1259#ifdef DESKTOP_VERSION 1263#ifdef DESKTOP_VERSION
1260 if ( QApplication::desktop()->width() < 1024 ) { 1264 if ( QApplication::desktop()->width() < 1024 ) {
1261 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1265 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1262 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() ); 1266 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() );
1263 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm"; 1267 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm";
1264 QFile file( fn ); 1268 QFile file( fn );
1265 if (!file.open( IO_WriteOnly ) ) { 1269 if (!file.open( IO_WriteOnly ) ) {
1266 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1270 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1267 } else { 1271 } else {
1268 QTextStream ts( &file ); 1272 QTextStream ts( &file );
1269 ts << mess; 1273 ts << mess;
1270 file.close(); 1274 file.close();
1271 } 1275 }
1272 } 1276 }
1273#endif 1277#endif
1274 1278
1275} 1279}
1276 1280
1277void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1281void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1278{ 1282{
1279 mNextAlarmDateTime = qdt; 1283 mNextAlarmDateTime = qdt;
1280 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1284 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1281 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1285 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1282#ifndef DESKTOP_VERSION 1286#ifndef DESKTOP_VERSION
1283 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1287 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1284#endif 1288#endif
1285 return; 1289 return;
1286 } 1290 }
1287#ifdef DESKTOP_VERSION 1291#ifdef DESKTOP_VERSION
1288 if ( QApplication::desktop()->width() < 1024 ) { 1292 if ( QApplication::desktop()->width() < 1024 ) {
1289 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1293 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1290 //qDebug("nextalarm = \n%s ",mess.latin1() ); 1294 //qDebug("nextalarm = \n%s ",mess.latin1() );
1291 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm"; 1295 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm";
1292 QFile file( fn ); 1296 QFile file( fn );
1293 if (!file.open( IO_WriteOnly ) ) { 1297 if (!file.open( IO_WriteOnly ) ) {
1294 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1298 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1295 } else { 1299 } else {
1296 QTextStream ts( &file ); 1300 QTextStream ts( &file );
1297 ts << mess; 1301 ts << mess;
1298 file.close(); 1302 file.close();
1299 } 1303 }
1300 } 1304 }
1301#endif 1305#endif
1302 int maxSec; 1306 int maxSec;
1303 //maxSec = 5; //testing only 1307 //maxSec = 5; //testing only
1304 maxSec = 86400+3600; // one day+1hour 1308 maxSec = 86400+3600; // one day+1hour
1305 mAlarmNotification = noti; 1309 mAlarmNotification = noti;
1306 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1310 int sec = QDateTime::currentDateTime().secsTo( qdt );
1307 if ( sec > maxSec ) { 1311 if ( sec > maxSec ) {
1308 mRecheckAlarmTimer->start( maxSec * 1000 ); 1312 mRecheckAlarmTimer->start( maxSec * 1000 );
1309 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1313 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1310 return; 1314 return;
1311 } else { 1315 } else {
1312 mRecheckAlarmTimer->stop(); 1316 mRecheckAlarmTimer->stop();
1313 } 1317 }
1314 //qDebug("Alarm timer started with secs: %d ", sec); 1318 //qDebug("Alarm timer started with secs: %d ", sec);
1315 mAlarmTimer->start( sec * 1000 , true ); 1319 mAlarmTimer->start( sec * 1000 , true );
1316 1320
1317} 1321}
1318// called by mRecheckAlarmTimer to get next alarm 1322// called by mRecheckAlarmTimer to get next alarm
1319// we need this, because a QTimer has only a max range of 25 days 1323// we need this, because a QTimer has only a max range of 25 days
1320void CalendarView::recheckTimerAlarm() 1324void CalendarView::recheckTimerAlarm()
1321{ 1325{
1322 mAlarmTimer->stop(); 1326 mAlarmTimer->stop();
1323 mRecheckAlarmTimer->stop(); 1327 mRecheckAlarmTimer->stop();
1324 mCalendar->checkAlarmForIncidence( 0, true ); 1328 mCalendar->checkAlarmForIncidence( 0, true );
1325} 1329}
1326#ifndef DESKTOP_VERSION 1330#ifndef DESKTOP_VERSION
1327void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1331void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1328#else 1332#else
1329void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1333void CalendarView::removeAlarm(const QDateTime &, const QString & )
1330#endif 1334#endif
1331{ 1335{
1332 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1336 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1333 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1337 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1334#ifndef DESKTOP_VERSION 1338#ifndef DESKTOP_VERSION
1335 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1339 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1336#endif 1340#endif
1337 return; 1341 return;
1338 } 1342 }
1339 mAlarmTimer->stop(); 1343 mAlarmTimer->stop();
1340} 1344}
1341void CalendarView::selectWeekNum ( int num ) 1345void CalendarView::selectWeekNum ( int num )
1342{ 1346{
1343 dateNavigator()->blockSignals( true ); 1347 dateNavigator()->blockSignals( true );
1344 dateNavigator()->selectWeek( num ); 1348 dateNavigator()->selectWeek( num );
1345 dateNavigator()->blockSignals( false ); 1349 dateNavigator()->blockSignals( false );
1346 mViewManager->showWeekView(); 1350 mViewManager->showWeekView();
1347} 1351}
1348KOViewManager *CalendarView::viewManager() 1352KOViewManager *CalendarView::viewManager()
1349{ 1353{
1350 return mViewManager; 1354 return mViewManager;
1351} 1355}
1352 1356
1353KODialogManager *CalendarView::dialogManager() 1357KODialogManager *CalendarView::dialogManager()
1354{ 1358{
1355 return mDialogManager; 1359 return mDialogManager;
1356} 1360}
1357 1361
1358QDate CalendarView::startDate() 1362QDate CalendarView::startDate()
1359{ 1363{
1360 DateList dates = mNavigator->selectedDates(); 1364 DateList dates = mNavigator->selectedDates();
1361 1365
1362 return dates.first(); 1366 return dates.first();
1363} 1367}
1364 1368
1365QDate CalendarView::endDate() 1369QDate CalendarView::endDate()
1366{ 1370{
1367 DateList dates = mNavigator->selectedDates(); 1371 DateList dates = mNavigator->selectedDates();
1368 1372
1369 return dates.last(); 1373 return dates.last();
1370} 1374}
1371 1375
1372 1376
1373void CalendarView::createPrinter() 1377void CalendarView::createPrinter()
1374{ 1378{
1375#ifndef KORG_NOPRINTER 1379#ifndef KORG_NOPRINTER
1376 if (!mCalPrinter) { 1380 if (!mCalPrinter) {
1377 mCalPrinter = new CalPrinter(this, mCalendar); 1381 mCalPrinter = new CalPrinter(this, mCalendar);
1378 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1382 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1379 } 1383 }
1380#endif 1384#endif
1381} 1385}
1382 1386
1383 1387
1384//KOPrefs::instance()->mWriteBackFile 1388//KOPrefs::instance()->mWriteBackFile
1385//KOPrefs::instance()->mWriteBackExistingOnly 1389//KOPrefs::instance()->mWriteBackExistingOnly
1386 1390
1387// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1391// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1388// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1392// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1389// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1393// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1390// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1394// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1391// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1395// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1392// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1396// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1393 1397
1394int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1398int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1395{ 1399{
1396 1400
1397 // 0 equal 1401 // 0 equal
1398 // 1 take local 1402 // 1 take local
1399 // 2 take remote 1403 // 2 take remote
1400 // 3 cancel 1404 // 3 cancel
1401 QDateTime lastSync = mLastCalendarSync; 1405 QDateTime lastSync = mLastCalendarSync;
1402 QDateTime localMod = local->lastModified(); 1406 QDateTime localMod = local->lastModified();
1403 QDateTime remoteMod = remote->lastModified(); 1407 QDateTime remoteMod = remote->lastModified();
1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1408 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1405 bool remCh, locCh; 1409 bool remCh, locCh;
1406 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1410 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1407 //if ( remCh ) 1411 //if ( remCh )
1408 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1412 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1409 locCh = ( localMod > mLastCalendarSync ); 1413 locCh = ( localMod > mLastCalendarSync );
1410 if ( !remCh && ! locCh ) { 1414 if ( !remCh && ! locCh ) {
1411 //qDebug("both not changed "); 1415 //qDebug("both not changed ");
1412 lastSync = localMod.addDays(1); 1416 lastSync = localMod.addDays(1);
1413 if ( mode <= SYNC_PREF_ASK ) 1417 if ( mode <= SYNC_PREF_ASK )
1414 return 0; 1418 return 0;
1415 } else { 1419 } else {
1416 if ( locCh ) { 1420 if ( locCh ) {
1417 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1421 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1418 lastSync = localMod.addDays( -1 ); 1422 lastSync = localMod.addDays( -1 );
1419 if ( !remCh ) 1423 if ( !remCh )
1420 remoteMod = ( lastSync.addDays( -1 ) ); 1424 remoteMod = ( lastSync.addDays( -1 ) );
1421 } else { 1425 } else {
1422 //qDebug(" not loc changed "); 1426 //qDebug(" not loc changed ");
1423 lastSync = localMod.addDays( 1 ); 1427 lastSync = localMod.addDays( 1 );
1424 if ( remCh ) 1428 if ( remCh )
1425 remoteMod =( lastSync.addDays( 1 ) ); 1429 remoteMod =( lastSync.addDays( 1 ) );
1426 1430
1427 } 1431 }
1428 } 1432 }
1429 full = true; 1433 full = true;
1430 if ( mode < SYNC_PREF_ASK ) 1434 if ( mode < SYNC_PREF_ASK )
1431 mode = SYNC_PREF_ASK; 1435 mode = SYNC_PREF_ASK;
1432 } else { 1436 } else {
1433 if ( localMod == remoteMod ) 1437 if ( localMod == remoteMod )
1434 // if ( local->revision() == remote->revision() ) 1438 // if ( local->revision() == remote->revision() )
1435 return 0; 1439 return 0;
1436 1440
1437 } 1441 }
1438 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1442 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1439 1443
1440 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1444 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1441 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1445 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1442 //full = true; //debug only 1446 //full = true; //debug only
1443 if ( full ) { 1447 if ( full ) {
1444 bool equ = false; 1448 bool equ = false;
1445 if ( local->typeID() == eventID ) { 1449 if ( local->typeID() == eventID ) {
1446 equ = (*((Event*) local) == *((Event*) remote)); 1450 equ = (*((Event*) local) == *((Event*) remote));
1447 } 1451 }
1448 else if ( local->typeID() == todoID ) 1452 else if ( local->typeID() == todoID )
1449 equ = (*((Todo*) local) == (*(Todo*) remote)); 1453 equ = (*((Todo*) local) == (*(Todo*) remote));
1450 else if ( local->typeID() == journalID ) 1454 else if ( local->typeID() == journalID )
1451 equ = (*((Journal*) local) == *((Journal*) remote)); 1455 equ = (*((Journal*) local) == *((Journal*) remote));
1452 if ( equ ) { 1456 if ( equ ) {
1453 //qDebug("equal "); 1457 //qDebug("equal ");
1454 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1458 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1455 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1459 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1456 } 1460 }
1457 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1461 if ( mode < SYNC_PREF_FORCE_LOCAL )
1458 return 0; 1462 return 0;
1459 1463
1460 }//else //debug only 1464 }//else //debug only
1461 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1465 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1462 } 1466 }
1463 int result; 1467 int result;
1464 bool localIsNew; 1468 bool localIsNew;
1465 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1469 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1466 1470
1467 1471
1468 // ************************************************ 1472 // ************************************************
1469 // ************************************************ 1473 // ************************************************
1470 // ************************************************ 1474 // ************************************************
1471 // We may have that lastSync > remoteMod AND lastSync > localMod 1475 // We may have that lastSync > remoteMod AND lastSync > localMod
1472 // BUT remoteMod != localMod 1476 // BUT remoteMod != localMod
1473 1477
1474 1478
1475 if ( full && mode < SYNC_PREF_NEWEST ) 1479 if ( full && mode < SYNC_PREF_NEWEST )
1476 mode = SYNC_PREF_ASK; 1480 mode = SYNC_PREF_ASK;
1477 1481
1478 switch( mode ) { 1482 switch( mode ) {
1479 case SYNC_PREF_LOCAL: 1483 case SYNC_PREF_LOCAL:
1480 if ( lastSync > remoteMod ) 1484 if ( lastSync > remoteMod )
1481 return 1; 1485 return 1;
1482 if ( lastSync > localMod ) 1486 if ( lastSync > localMod )
1483 return 2; 1487 return 2;
1484 return 1; 1488 return 1;
1485 break; 1489 break;
1486 case SYNC_PREF_REMOTE: 1490 case SYNC_PREF_REMOTE:
1487 if ( lastSync > localMod ) 1491 if ( lastSync > localMod )
1488 return 2; 1492 return 2;
1489 if ( lastSync > remoteMod ) 1493 if ( lastSync > remoteMod )
1490 return 1; 1494 return 1;
1491 return 2; 1495 return 2;
1492 break; 1496 break;
1493 case SYNC_PREF_NEWEST: 1497 case SYNC_PREF_NEWEST:
1494 if ( localMod >= remoteMod ) 1498 if ( localMod >= remoteMod )
1495 return 1; 1499 return 1;
1496 else 1500 else
1497 return 2; 1501 return 2;
1498 break; 1502 break;
1499 case SYNC_PREF_ASK: 1503 case SYNC_PREF_ASK:
1500 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1504 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1501 if ( lastSync > remoteMod && lastSync > localMod) 1505 if ( lastSync > remoteMod && lastSync > localMod)
1502 return 0; 1506 return 0;
1503 if ( lastSync > remoteMod ) 1507 if ( lastSync > remoteMod )
1504 return 1; 1508 return 1;
1505 if ( lastSync > localMod ) 1509 if ( lastSync > localMod )
1506 return 2; 1510 return 2;
1507 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1511 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1508 localIsNew = localMod >= remoteMod; 1512 localIsNew = localMod >= remoteMod;
1509 if ( localIsNew ) 1513 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 1 ); 1514 getEventViewerDialog()->setColorMode( 1 );
1511 else 1515 else
1512 getEventViewerDialog()->setColorMode( 2 ); 1516 getEventViewerDialog()->setColorMode( 2 );
1513 getEventViewerDialog()->setIncidence(local); 1517 getEventViewerDialog()->setIncidence(local);
1514 if ( localIsNew ) 1518 if ( localIsNew )
1515 getEventViewerDialog()->setColorMode( 2 ); 1519 getEventViewerDialog()->setColorMode( 2 );
1516 else 1520 else
1517 getEventViewerDialog()->setColorMode( 1 ); 1521 getEventViewerDialog()->setColorMode( 1 );
1518 getEventViewerDialog()->addIncidence(remote); 1522 getEventViewerDialog()->addIncidence(remote);
1519 getEventViewerDialog()->setColorMode( 0 ); 1523 getEventViewerDialog()->setColorMode( 0 );
1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1524 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1525 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1522 getEventViewerDialog()->showMe(); 1526 getEventViewerDialog()->showMe();
1523 result = getEventViewerDialog()->executeS( localIsNew ); 1527 result = getEventViewerDialog()->executeS( localIsNew );
1524 return result; 1528 return result;
1525 1529
1526 break; 1530 break;
1527 case SYNC_PREF_FORCE_LOCAL: 1531 case SYNC_PREF_FORCE_LOCAL:
1528 return 1; 1532 return 1;
1529 break; 1533 break;
1530 case SYNC_PREF_FORCE_REMOTE: 1534 case SYNC_PREF_FORCE_REMOTE:
1531 return 2; 1535 return 2;
1532 break; 1536 break;
1533 1537
1534 default: 1538 default:
1535 // SYNC_PREF_TAKE_BOTH not implemented 1539 // SYNC_PREF_TAKE_BOTH not implemented
1536 break; 1540 break;
1537 } 1541 }
1538 return 0; 1542 return 0;
1539} 1543}
1540Event* CalendarView::getLastSyncEvent() 1544Event* CalendarView::getLastSyncEvent()
1541{ 1545{
1542 Event* lse; 1546 Event* lse;
1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1547 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1544 mCalendar->setSyncEventsEnabled(); 1548 mCalendar->setSyncEventsEnabled();
1545 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1549 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1546 if (!lse) { 1550 if (!lse) {
1547 qDebug("KO: New last Syncevent created for local: %s",mCurrentSyncDevice.latin1() ); 1551 qDebug("KO: New last Syncevent created for local: %s",mCurrentSyncDevice.latin1() );
1548 lse = new Event(); 1552 lse = new Event();
1549 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1553 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1550 QString sum = ""; 1554 QString sum = "";
1551 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1555 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1552 sum = "E: "; 1556 sum = "E: ";
1553 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1557 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1554 lse->setDtStart( mLastCalendarSync ); 1558 lse->setDtStart( mLastCalendarSync );
1555 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1559 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1556 lse->setCategories( i18n("SyncEvent") ); 1560 lse->setCategories( i18n("SyncEvent") );
1557 lse->setReadOnly( true ); 1561 lse->setReadOnly( true );
1558 lse->setCalID( 1 ); 1562 lse->setCalID( 1 );
1559 mCalendar->addEvent( lse ); 1563 mCalendar->addEvent( lse );
1560 } else 1564 } else
1561 qDebug("KO: Last Syncevent on local found"); 1565 qDebug("KO: Last Syncevent on local found");
1562 1566
1563 return lse; 1567 return lse;
1564 1568
1565} 1569}
1566 1570
1567// we check, if the to delete event has a id for a profile 1571// we check, if the to delete event has a id for a profile
1568// if yes, we set this id in the profile to delete 1572// if yes, we set this id in the profile to delete
1569void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1573void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1570{ 1574{
1571 if ( lastSync.count() == 0 ) { 1575 if ( lastSync.count() == 0 ) {
1572 //qDebug(" lastSync.count() == 0"); 1576 //qDebug(" lastSync.count() == 0");
1573 return; 1577 return;
1574 } 1578 }
1575 if ( toDelete->typeID() == journalID ) 1579 if ( toDelete->typeID() == journalID )
1576 return; 1580 return;
1577 1581
1578 Event* eve = lastSync.first(); 1582 Event* eve = lastSync.first();
1579 1583
1580 while ( eve ) { 1584 while ( eve ) {
1581 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1585 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1582 if ( !id.isEmpty() ) { 1586 if ( !id.isEmpty() ) {
1583 QString des = eve->description(); 1587 QString des = eve->description();
1584 QString pref = "e"; 1588 QString pref = "e";
1585 if ( toDelete->typeID() == todoID ) 1589 if ( toDelete->typeID() == todoID )
1586 pref = "t"; 1590 pref = "t";
1587 des += pref+ id + ","; 1591 des += pref+ id + ",";
1588 eve->setReadOnly( false ); 1592 eve->setReadOnly( false );
1589 eve->setDescription( des ); 1593 eve->setDescription( des );
1590 //qDebug("setdes %s ", des.latin1()); 1594 //qDebug("setdes %s ", des.latin1());
1591 eve->setReadOnly( true ); 1595 eve->setReadOnly( true );
1592 } 1596 }
1593 eve = lastSync.next(); 1597 eve = lastSync.next();
1594 } 1598 }
1595 1599
1596} 1600}
1597void CalendarView::checkExternalId( Incidence * inc ) 1601void CalendarView::checkExternalId( Incidence * inc )
1598{ 1602{
1599 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1603 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1600 checkExternSyncEvent( lastSync, inc ); 1604 checkExternSyncEvent( lastSync, inc );
1601 1605
1602} 1606}
1603bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1607bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1604{ 1608{
1609
1605 bool syncOK = true; 1610 bool syncOK = true;
1606 int addedEvent = 0; 1611 int addedEvent = 0;
1607 int addedEventR = 0; 1612 int addedEventR = 0;
1608 int deletedEventR = 0; 1613 int deletedEventR = 0;
1609 int deletedEventL = 0; 1614 int deletedEventL = 0;
1610 int changedLocal = 0; 1615 int changedLocal = 0;
1611 int changedRemote = 0; 1616 int changedRemote = 0;
1612 int filteredIN = 0; 1617 int filteredIN = 0;
1613 int filteredOUT = 0; 1618 int filteredOUT = 0;
1614 //QPtrList<Event> el = local->rawEvents(); 1619 //QPtrList<Event> el = local->rawEvents();
1615 Event* eventR; 1620 Event* eventR;
1616 QString uid; 1621 QString uid;
1617 int take; 1622 int take;
1618 Event* eventRSync; 1623 Event* eventRSync;
1619 Event* eventLSync; 1624 Event* eventLSync;
1620 clearAllViews(); 1625 clearAllViews();
1621 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1626 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1622 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1627 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1623 bool fullDateRange = false; 1628 bool fullDateRange = false;
1624 local->resetTempSyncStat(); 1629 local->resetTempSyncStat();
1625 mLastCalendarSync = QDateTime::currentDateTime(); 1630 mLastCalendarSync = QDateTime::currentDateTime();
1626 if ( mSyncManager->syncWithDesktop() ) { 1631 if ( mSyncManager->syncWithDesktop() ) {
1627 remote->resetPilotStat(1); 1632 remote->resetPilotStat(1);
1628 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1633 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1629 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1634 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1630 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1635 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1631 } else { 1636 } else {
1632 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1637 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1633 } 1638 }
1634 } 1639 }
1635 QDateTime modifiedCalendar = mLastCalendarSync; 1640 QDateTime modifiedCalendar = mLastCalendarSync;
1636 eventLSync = getLastSyncEvent(); 1641 eventLSync = getLastSyncEvent();
1637 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1642 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1638 if ( eventR ) { 1643 if ( eventR ) {
1639 qDebug("KO: Last-syncEvent on remote found "); 1644 qDebug("KO: Last-syncEvent on remote found ");
1640 eventRSync = (Event*) eventR->clone(); 1645 eventRSync = (Event*) eventR->clone();
1641 remote->deleteEvent(eventR ); 1646 remote->deleteEvent(eventR );
1642 1647
1643 } else { 1648 } else {
1644 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1649 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1645 eventRSync = (Event*)eventLSync->clone(); 1650 eventRSync = (Event*)eventLSync->clone();
1646 } else { 1651 } else {
1647 fullDateRange = true; 1652 fullDateRange = true;
1648 eventRSync = new Event(); 1653 eventRSync = new Event();
1649 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1654 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1650 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1655 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1651 eventRSync->setDtStart( mLastCalendarSync ); 1656 eventRSync->setDtStart( mLastCalendarSync );
1652 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1657 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1653 eventRSync->setCategories( i18n("SyncEvent") ); 1658 eventRSync->setCategories( i18n("SyncEvent") );
1654 } 1659 }
1655 } 1660 }
1656 if ( eventLSync->dtStart() == mLastCalendarSync ) 1661 if ( eventLSync->dtStart() == mLastCalendarSync )
1657 fullDateRange = true; 1662 fullDateRange = true;
1658 1663
1659 if ( ! fullDateRange ) { 1664 if ( ! fullDateRange ) {
1660 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1665 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1661 1666
1662 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1667 qDebug("KO: Sync: Set fulldate to true! Local: %s --- Remote: %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1663 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1668 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1664 fullDateRange = true; 1669 fullDateRange = true;
1665 } 1670 }
1666 } 1671 }
1667 if ( mSyncManager->syncWithDesktop() ) { 1672 if ( mSyncManager->syncWithDesktop() ) {
1668 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1673 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1669 } 1674 }
1670 if ( fullDateRange ) 1675 if ( fullDateRange )
1671 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1676 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1672 else 1677 else
1673 mLastCalendarSync = eventLSync->dtStart(); 1678 mLastCalendarSync = eventLSync->dtStart();
1674 // for resyncing if own file has changed 1679 // for resyncing if own file has changed
1675 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1680 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1676 mLastCalendarSync = loadedFileVersion; 1681 mLastCalendarSync = loadedFileVersion;
1677 //qDebug("setting mLastCalendarSync "); 1682 //qDebug("setting mLastCalendarSync ");
1678 } 1683 }
1679 //qDebug("*************************** "); 1684 //qDebug("*************************** ");
1680 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1685 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1681 QPtrList<Incidence> er = remote->rawIncidences(); 1686 QPtrList<Incidence> er = remote->rawIncidences();
1682 Incidence* inR = er.first(); 1687 Incidence* inR = er.first();
1683 Incidence* inL; 1688 Incidence* inL;
1684 QProgressBar bar( er.count(),0 ); 1689 QProgressBar bar( er.count(),0 );
1685 bar.setCaption (i18n("Syncing - close to abort!") ); 1690 bar.setCaption (i18n("Syncing - close to abort!") );
1686 1691
1687 // ************** setting up filter ************* 1692 // ************** setting up filter *************
1688 CalFilter *filterIN = 0; 1693 CalFilter *filterIN = 0;
1689 CalFilter *filterOUT = 0; 1694 CalFilter *filterOUT = 0;
1690 CalFilter *filter = mFilters.first(); 1695 CalFilter *filter = mFilters.first();
1691 while(filter) { 1696 while(filter) {
1692 if ( filter->name() == mSyncManager->mFilterInCal ) 1697 if ( filter->name() == mSyncManager->mFilterInCal )
1693 filterIN = filter; 1698 filterIN = filter;
1694 if ( filter->name() == mSyncManager->mFilterOutCal ) 1699 if ( filter->name() == mSyncManager->mFilterOutCal )
1695 filterOUT = filter; 1700 filterOUT = filter;
1696 filter = mFilters.next(); 1701 filter = mFilters.next();
1697 } 1702 }
1698 int w = 300; 1703 int w = 300;
1699 if ( QApplication::desktop()->width() < 320 ) 1704 if ( QApplication::desktop()->width() < 320 )
1700 w = 220; 1705 w = 220;
1701 int h = bar.sizeHint().height() ; 1706 int h = bar.sizeHint().height() ;
1702 int dw = QApplication::desktop()->width(); 1707 int dw = QApplication::desktop()->width();
1703 int dh = QApplication::desktop()->height(); 1708 int dh = QApplication::desktop()->height();
1704 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1709 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1705 bar.show(); 1710 bar.show();
1706 int modulo = (er.count()/10)+1; 1711 int modulo = (er.count()/10)+1;
1707 int incCounter = 0; 1712 int incCounter = 0;
1708 while ( inR ) { 1713 while ( inR ) {
1709 if ( ! bar.isVisible() ) 1714 if ( ! bar.isVisible() )
1710 return false; 1715 return false;
1711 if ( incCounter % modulo == 0 ) 1716 if ( incCounter % modulo == 0 )
1712 bar.setProgress( incCounter ); 1717 bar.setProgress( incCounter );
1713 ++incCounter; 1718 ++incCounter;
1714 uid = inR->uid(); 1719 uid = inR->uid();
1715 bool skipIncidence = false; 1720 bool skipIncidence = false;
1716 if ( uid.left(15) == QString("last-syncEvent-") ) 1721 if ( uid.left(15) == QString("last-syncEvent-") )
1717 skipIncidence = true; 1722 skipIncidence = true;
1718 QString idS; 1723 QString idS;
1719 qApp->processEvents(); 1724 qApp->processEvents();
1720 if ( !skipIncidence ) { 1725 if ( !skipIncidence ) {
1721 inL = local->incidenceForUid( uid , false , true ); 1726 inL = local->incidenceForUid( uid , false , true );
1722 if ( inL ) { // maybe conflict - same uid in both calendars 1727 if ( inL ) { // maybe conflict - same uid in both calendars
1723 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1728 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1724 //qDebug("take %d %s ", take, inL->summary().latin1()); 1729 //qDebug("take %d %s ", take, inL->summary().latin1());
1725 if ( take == 3 ) 1730 if ( take == 3 )
1726 return false; 1731 return false;
1727 if ( take == 1 ) {// take local ********************** 1732 if ( take == 1 ) {// take local **********************
1728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1733 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1729 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1734 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1730 else 1735 else
1731 idS = inR->IDStr(); 1736 idS = inR->IDStr();
1732 int calID = inR->calID(); 1737 int calID = inR->calID();
1733 remote->deleteIncidence( inR ); 1738 remote->deleteIncidence( inR );
1734 inR = inL->clone(); 1739 inR = inL->clone();
1735 inR->setCalID( calID ); 1740 inR->setCalID_block( calID );
1736 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1741 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1737 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1742 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1738 inR->setIDStr( idS ); 1743 inR->setIDStr( idS );
1739 remote->addIncidence( inR ); 1744 remote->addIncidence( inR );
1740 if ( mSyncManager->syncWithDesktop() ) 1745 if ( mSyncManager->syncWithDesktop() )
1741 inR->setPilotId( 2 ); 1746 inR->setPilotId( 2 );
1742 ++changedRemote; 1747 ++changedRemote;
1743 } else {// take remote ********************** 1748 } else {// take remote **********************
1744 if ( !inL->isReadOnly() ) { 1749 if ( !inL->isReadOnly() ) {
1745 idS = inL->IDStr(); 1750 idS = inL->IDStr();
1746 int pid = inL->pilotId(); 1751 int pid = inL->pilotId();
1747 int calID = inL->calID(); 1752 int calID = inL->calID();
1748 local->deleteIncidence( inL ); 1753 local->deleteIncidence( inL );
1749 inL = inR->clone(); 1754 inL = inR->clone();
1750 inL->setCalID( calID ); 1755 inL->setCalID_block( calID );
1751 if ( mSyncManager->syncWithDesktop() ) 1756 if ( mSyncManager->syncWithDesktop() )
1752 inL->setPilotId( pid ); 1757 inL->setPilotId( pid );
1753 inL->setIDStr( idS ); 1758 inL->setIDStr( idS );
1754 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1759 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1755 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1760 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1756 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1761 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1757 } 1762 }
1758 local->addIncidence( inL ); 1763 local->addIncidence( inL );
1759 ++changedLocal; 1764 ++changedLocal;
1760 } 1765 }
1761 } 1766 }
1762 } 1767 }
1763 } else { // no conflict ********** add or delete remote 1768 } else { // no conflict ********** add or delete remote
1764 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1769 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1765 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1766 QString des = eventLSync->description(); 1771 QString des = eventLSync->description();
1767 QString pref = "e"; 1772 QString pref = "e";
1768 if ( inR->typeID() == todoID ) 1773 if ( inR->typeID() == todoID )
1769 pref = "t"; 1774 pref = "t";
1770 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1775 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1771 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1776 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1772 //remote->deleteIncidence( inR ); 1777 //remote->deleteIncidence( inR );
1773 ++deletedEventR; 1778 ++deletedEventR;
1774 } else { 1779 } else {
1775 inR->setLastModified( modifiedCalendar ); 1780 inR->setLastModified( modifiedCalendar );
1776 inL = inR->clone(); 1781 inL = inR->clone();
1777 inL->setIDStr( ":" ); 1782 inL->setIDStr( ":" );
1778 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1783 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1779 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1784 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1780 1785
1781 inL->setCalID( 0 );// add to default cal 1786 inL->setCalID_block( 0 );// add to default cal
1782 local->addIncidence( inL ); 1787 local->addIncidence( inL );
1783 ++addedEvent; 1788 ++addedEvent;
1784 1789
1785 } 1790 }
1786 } else { 1791 } else {
1787 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1792 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1788 inR->setLastModified( modifiedCalendar ); 1793 inR->setLastModified( modifiedCalendar );
1789 inL = inR->clone(); 1794 inL = inR->clone();
1790 inL->setIDStr( ":" ); 1795 inL->setIDStr( ":" );
1791 inL->setCalID( 0 );// add to default cal 1796 inL->setCalID_block( 0 );// add to default cal
1792 local->addIncidence( inL ); 1797 local->addIncidence( inL );
1793 ++addedEvent; 1798 ++addedEvent;
1794 1799
1795 } else { 1800 } else {
1796 checkExternSyncEvent(eventRSyncSharp, inR); 1801 checkExternSyncEvent(eventRSyncSharp, inR);
1797 remote->deleteIncidence( inR ); 1802 remote->deleteIncidence( inR );
1798 ++deletedEventR; 1803 ++deletedEventR;
1799 } 1804 }
1800 } 1805 }
1801 } else { 1806 } else {
1802 ++filteredIN; 1807 ++filteredIN;
1803 } 1808 }
1804 } 1809 }
1805 } 1810 }
1806 inR = er.next(); 1811 inR = er.next();
1807 } 1812 }
1808 QPtrList<Incidence> el = local->rawIncidences(); 1813 QPtrList<Incidence> el = local->rawIncidences();
1809 inL = el.first(); 1814 inL = el.first();
1810 modulo = (el.count()/10)+1; 1815 modulo = (el.count()/10)+1;
1811 bar.setCaption (i18n("Add / remove events") ); 1816 bar.setCaption (i18n("Add / remove events") );
1812 bar.setTotalSteps ( el.count() ) ; 1817 bar.setTotalSteps ( el.count() ) ;
1813 bar.show(); 1818 bar.show();
1814 incCounter = 0; 1819 incCounter = 0;
1815 1820
1816 while ( inL ) { 1821 while ( inL ) {
1817 1822
1818 qApp->processEvents(); 1823 qApp->processEvents();
1819 if ( ! bar.isVisible() ) 1824 if ( ! bar.isVisible() )
1820 return false; 1825 return false;
1821 if ( incCounter % modulo == 0 ) 1826 if ( incCounter % modulo == 0 )
1822 bar.setProgress( incCounter ); 1827 bar.setProgress( incCounter );
1823 ++incCounter; 1828 ++incCounter;
1824 uid = inL->uid(); 1829 uid = inL->uid();
1825 bool skipIncidence = false; 1830 bool skipIncidence = false;
1826 if ( uid.left(15) == QString("last-syncEvent-") ) 1831 if ( uid.left(15) == QString("last-syncEvent-") )
1827 skipIncidence = true; 1832 skipIncidence = true;
1828 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1833 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1829 skipIncidence = true; 1834 skipIncidence = true;
1830 if ( !skipIncidence ) { 1835 if ( !skipIncidence ) {
1831 inR = remote->incidenceForUid( uid , true, true ); 1836 inR = remote->incidenceForUid( uid , true, true );
1832 if ( ! inR ) { 1837 if ( ! inR ) {
1833 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1838 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1834 // no conflict ********** add or delete local 1839 // no conflict ********** add or delete local
1835 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1840 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1836 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1841 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1837 checkExternSyncEvent(eventLSyncSharp, inL); 1842 checkExternSyncEvent(eventLSyncSharp, inL);
1838 local->deleteIncidence( inL ); 1843 local->deleteIncidence( inL );
1839 ++deletedEventL; 1844 ++deletedEventL;
1840 } else { 1845 } else {
1841 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1846 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1842 inL->removeID(mCurrentSyncDevice ); 1847 inL->removeID(mCurrentSyncDevice );
1843 ++addedEventR; 1848 ++addedEventR;
1844 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1849 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1845 inL->setLastModified( modifiedCalendar ); 1850 inL->setLastModified( modifiedCalendar );
1846 inR = inL->clone(); 1851 inR = inL->clone();
1847 inR->setIDStr( ":" ); 1852 inR->setIDStr( ":" );
1848 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1853 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1849 inR->setCalID( 0 );// add to default cal 1854 inR->setCalID_block( 0 );// add to default cal
1850 remote->addIncidence( inR ); 1855 remote->addIncidence( inR );
1851 } 1856 }
1852 } 1857 }
1853 } else { 1858 } else {
1854 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1859 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1855 checkExternSyncEvent(eventLSyncSharp, inL); 1860 checkExternSyncEvent(eventLSyncSharp, inL);
1856 local->deleteIncidence( inL ); 1861 local->deleteIncidence( inL );
1857 ++deletedEventL; 1862 ++deletedEventL;
1858 } else { 1863 } else {
1859 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1864 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1860 ++addedEventR; 1865 ++addedEventR;
1861 inL->setLastModified( modifiedCalendar ); 1866 inL->setLastModified( modifiedCalendar );
1862 inR = inL->clone(); 1867 inR = inL->clone();
1863 inR->setIDStr( ":" ); 1868 inR->setIDStr( ":" );
1864 inR->setCalID( 0 );// add to default cal 1869 inR->setCalID_block( 0 );// add to default cal
1865 remote->addIncidence( inR ); 1870 remote->addIncidence( inR );
1866 } 1871 }
1867 } 1872 }
1868 } 1873 }
1869 } else { 1874 } else {
1870 ++filteredOUT; 1875 ++filteredOUT;
1871 } 1876 }
1872 } 1877 }
1873 } 1878 }
1874 inL = el.next(); 1879 inL = el.next();
1875 } 1880 }
1876 int delFut = 0; 1881 int delFut = 0;
1877 int remRem = 0; 1882 int remRem = 0;
1878 if ( mSyncManager->mWriteBackInFuture ) { 1883 if ( mSyncManager->mWriteBackInFuture ) {
1879 er = remote->rawIncidences(); 1884 er = remote->rawIncidences();
1880 remRem = er.count(); 1885 remRem = er.count();
1881 inR = er.first(); 1886 inR = er.first();
1882 QDateTime dt; 1887 QDateTime dt;
1883 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1888 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1884 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1889 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1885 while ( inR ) { 1890 while ( inR ) {
1886 if ( inR->typeID() == todoID ) { 1891 if ( inR->typeID() == todoID ) {
1887 Todo * t = (Todo*)inR; 1892 Todo * t = (Todo*)inR;
1888 if ( t->hasDueDate() ) 1893 if ( t->hasDueDate() )
1889 dt = t->dtDue(); 1894 dt = t->dtDue();
1890 else 1895 else
1891 dt = cur.addSecs( 62 ); 1896 dt = cur.addSecs( 62 );
1892 } 1897 }
1893 else if (inR->typeID() == eventID ) { 1898 else if (inR->typeID() == eventID ) {
1894 bool ok; 1899 bool ok;
1895 dt = inR->getNextOccurence( cur, &ok ); 1900 dt = inR->getNextOccurence( cur, &ok );
1896 if ( !ok ) 1901 if ( !ok )
1897 dt = cur.addSecs( -62 ); 1902 dt = cur.addSecs( -62 );
1898 } 1903 }
1899 else 1904 else
1900 dt = inR->dtStart(); 1905 dt = inR->dtStart();
1901 if ( dt < cur || dt > end ) { 1906 if ( dt < cur || dt > end ) {
1902 remote->deleteIncidence( inR ); 1907 remote->deleteIncidence( inR );
1903 ++delFut; 1908 ++delFut;
1904 } 1909 }
1905 inR = er.next(); 1910 inR = er.next();
1906 } 1911 }
1907 } 1912 }
1908 bar.hide(); 1913 bar.hide();
1909 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1914 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1910 if ( mMultiResourceSync ) { 1915 if ( mMultiResourceSync ) {
1911 remote->removeSyncInfo( "" ); //all 1916 remote->removeSyncInfo( "" ); //all
1912 qDebug("KO: Remoing all sync info on remote "); 1917 qDebug("KO: Remoing all sync info on remote ");
1913 } else { 1918 } else {
1914 eventLSync->setReadOnly( false ); 1919 eventLSync->setReadOnly( false );
1915 eventLSync->setDtStart( mLastCalendarSync ); 1920 eventLSync->setDtStart( mLastCalendarSync );
1916 eventRSync->setDtStart( mLastCalendarSync ); 1921 eventRSync->setDtStart( mLastCalendarSync );
1917 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1922 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1918 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1923 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1919 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1924 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1920 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1925 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1921 eventLSync->setReadOnly( true ); 1926 eventLSync->setReadOnly( true );
1922 } 1927 }
1923 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1928 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1924 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal... 1929 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal...
1925 remote->addEvent( eventRSync ); 1930 remote->addEvent( eventRSync );
1926 else 1931 else
1927 delete eventRSync; 1932 delete eventRSync;
1928 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1933 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1929 QString mes; 1934 QString mes;
1930 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1935 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1931 QString delmess; 1936 QString delmess;
1932 if ( delFut ) { 1937 if ( delFut ) {
1933 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1938 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1934 mes += delmess; 1939 mes += delmess;
1935 } 1940 }
1936 mes = i18n("Local calendar changed!\n") +mes; 1941 mes = i18n("Local calendar changed!\n") +mes;
1937 mCalendar->checkAlarmForIncidence( 0, true ); 1942 mCalendar->checkAlarmForIncidence( 0, true );
1938 qDebug( mes ); 1943 qDebug( mes );
1939 if ( mSyncManager->mShowSyncSummary ) { 1944 if ( mSyncManager->mShowSyncSummary ) {
1940 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1945 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1941 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1946 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1942 qDebug("KO: WB cancelled "); 1947 qDebug("KO: WB cancelled ");
1943 mSyncManager->mWriteBackFile = false; 1948 mSyncManager->mWriteBackFile = false;
1944 return syncOK; 1949 return syncOK;
1945 } 1950 }
1946 } 1951 }
1947 return syncOK; 1952 return syncOK;
1948} 1953}
1949 1954
1950void CalendarView::setSyncDevice( QString s ) 1955void CalendarView::setSyncDevice( QString s )
1951{ 1956{
1952 mCurrentSyncDevice= s; 1957 mCurrentSyncDevice= s;
1953} 1958}
1954void CalendarView::setSyncName( QString s ) 1959void CalendarView::setSyncName( QString s )
1955{ 1960{
1956 mCurrentSyncName= s; 1961 mCurrentSyncName= s;
1957} 1962}
1958bool CalendarView::syncCalendar(QString filename, int mode) 1963bool CalendarView::syncCalendar(QString filename, int mode)
1959{ 1964{
1960 //qDebug("syncCalendar %s ", filename.latin1()); 1965 //qDebug("syncCalendar %s ", filename.latin1());
1961 mGlobalSyncMode = SYNC_MODE_NORMAL; 1966 mGlobalSyncMode = SYNC_MODE_NORMAL;
1962 CalendarLocal* calendar = new CalendarLocal(); 1967 CalendarLocal* calendar = new CalendarLocal();
1963 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1968 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1964 FileStorage* storage = new FileStorage( calendar ); 1969 FileStorage* storage = new FileStorage( calendar );
1965 bool syncOK = false; 1970 bool syncOK = false;
1966 storage->setFileName( filename ); 1971 storage->setFileName( filename );
1967 // qDebug("loading ... "); 1972 // qDebug("loading ... ");
1968 if ( storage->load() ) { 1973 if ( storage->load() ) {
1969 getEventViewerDialog()->setSyncMode( true ); 1974 getEventViewerDialog()->setSyncMode( true );
1970 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1975 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1971 getEventViewerDialog()->setSyncMode( false ); 1976 getEventViewerDialog()->setSyncMode( false );
1972 if ( syncOK ) { 1977 if ( syncOK ) {
1973 if ( mSyncManager->mWriteBackFile ) 1978 if ( mSyncManager->mWriteBackFile )
1974 { 1979 {
1975 storage->setSaveFormat( new ICalFormat() ); 1980 storage->setSaveFormat( new ICalFormat() );
1976 storage->save(); 1981 storage->save();
1977 } 1982 }
1978 } 1983 }
1979 setModified( true ); 1984 setModified( true );
1980 } 1985 }
1981 delete storage; 1986 delete storage;
1982 delete calendar; 1987 delete calendar;
1983 if ( syncOK ) 1988 if ( syncOK )
1984 updateView(); 1989 updateView();
1985 return syncOK; 1990 return syncOK;
1986} 1991}
1987 1992
1988void CalendarView::syncExternal( int mode ) 1993void CalendarView::syncExternal( int mode )
1989{ 1994{
1990 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1995 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1991 qApp->processEvents(); 1996 qApp->processEvents();
1992 CalendarLocal* calendar = new CalendarLocal(); 1997 CalendarLocal* calendar = new CalendarLocal();
1993 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1998 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1994 bool syncOK = false; 1999 bool syncOK = false;
1995 bool loadSuccess = false; 2000 bool loadSuccess = false;
1996 PhoneFormat* phoneFormat = 0; 2001 PhoneFormat* phoneFormat = 0;
1997 emit tempDisableBR(true); 2002 emit tempDisableBR(true);
1998#ifndef DESKTOP_VERSION 2003#ifndef DESKTOP_VERSION
1999 SharpFormat* sharpFormat = 0; 2004 SharpFormat* sharpFormat = 0;
2000 if ( mode == 0 ) { // sharp 2005 if ( mode == 0 ) { // sharp
2001 sharpFormat = new SharpFormat () ; 2006 sharpFormat = new SharpFormat () ;
2002 loadSuccess = sharpFormat->load( calendar, mCalendar ); 2007 loadSuccess = sharpFormat->load( calendar, mCalendar );
2003 2008
2004 } else 2009 } else
2005#endif 2010#endif
2006 if ( mode == 1 ) { // phone 2011 if ( mode == 1 ) { // phone
2007 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 2012 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
2008 mSyncManager->mPhoneDevice, 2013 mSyncManager->mPhoneDevice,
2009 mSyncManager->mPhoneConnection, 2014 mSyncManager->mPhoneConnection,
2010 mSyncManager->mPhoneModel); 2015 mSyncManager->mPhoneModel);
2011 loadSuccess = phoneFormat->load( calendar,mCalendar); 2016 loadSuccess = phoneFormat->load( calendar,mCalendar);
2012 2017
2013 } else { 2018 } else {
2014 emit tempDisableBR(false); 2019 emit tempDisableBR(false);
2015 return; 2020 return;
2016 } 2021 }
2017 if ( loadSuccess ) { 2022 if ( loadSuccess ) {
2018 getEventViewerDialog()->setSyncMode( true ); 2023 getEventViewerDialog()->setSyncMode( true );
2019 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2024 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2020 getEventViewerDialog()->setSyncMode( false ); 2025 getEventViewerDialog()->setSyncMode( false );
2021 qApp->processEvents(); 2026 qApp->processEvents();
2022 if ( syncOK ) { 2027 if ( syncOK ) {
2023 if ( mSyncManager->mWriteBackFile ) 2028 if ( mSyncManager->mWriteBackFile )
2024 { 2029 {
2025 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2030 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2026 Incidence* inc = iL.first(); 2031 Incidence* inc = iL.first();
2027 if ( phoneFormat ) { 2032 if ( phoneFormat ) {
2028 while ( inc ) { 2033 while ( inc ) {
2029 inc->removeID(mCurrentSyncDevice); 2034 inc->removeID(mCurrentSyncDevice);
2030 inc = iL.next(); 2035 inc = iL.next();
2031 } 2036 }
2032 } 2037 }
2033#ifndef DESKTOP_VERSION 2038#ifndef DESKTOP_VERSION
2034 if ( sharpFormat ) 2039 if ( sharpFormat )
2035 sharpFormat->save(calendar); 2040 sharpFormat->save(calendar);
2036#endif 2041#endif
2037 if ( phoneFormat ) 2042 if ( phoneFormat )
2038 phoneFormat->save(calendar); 2043 phoneFormat->save(calendar);
2039 iL = calendar->rawIncidences(); 2044 iL = calendar->rawIncidences();
2040 inc = iL.first(); 2045 inc = iL.first();
2041 Incidence* loc; 2046 Incidence* loc;
2042 while ( inc ) { 2047 while ( inc ) {
2043 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2048 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2044 loc = mCalendar->incidence(inc->uid() ); 2049 loc = mCalendar->incidence(inc->uid() );
2045 if ( loc ) { 2050 if ( loc ) {
2046 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2051 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2047 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2052 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2048 } 2053 }
2049 } 2054 }
2050 inc = iL.next(); 2055 inc = iL.next();
2051 } 2056 }
2052 Incidence* lse = getLastSyncEvent(); 2057 Incidence* lse = getLastSyncEvent();
2053 if ( lse ) { 2058 if ( lse ) {
2054 lse->setReadOnly( false ); 2059 lse->setReadOnly( false );
2055 lse->setDescription( "" ); 2060 lse->setDescription( "" );
2056 lse->setReadOnly( true ); 2061 lse->setReadOnly( true );
2057 } 2062 }
2058 } 2063 }
2059 } else { 2064 } else {
2060 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2065 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2061 } 2066 }
2062 setModified( true ); 2067 setModified( true );
2063 } else { 2068 } else {
2064 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2069 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2065 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2070 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2066 question, i18n("Ok")) ; 2071 question, i18n("Ok")) ;
2067 2072
2068 } 2073 }
2069 delete calendar; 2074 delete calendar;
2070 updateView(); 2075 updateView();
2071 emit tempDisableBR(false); 2076 emit tempDisableBR(false);
2072 return ;//syncOK; 2077 return ;//syncOK;
2073 2078
2074} 2079}
2075 2080
2076bool CalendarView::importBday() 2081bool CalendarView::importBday()
2077{ 2082{
2078#ifndef KORG_NOKABC 2083#ifndef KORG_NOKABC
2079 2084
2080#ifdef DESKTOP_VERSION 2085#ifdef DESKTOP_VERSION
2081 int curCal = mCalendar->defaultCalendar(); 2086 int curCal = mCalendar->defaultCalendar();
2082 int bd = mCalEditView->getBirtdayID(); 2087 int bd = mCalEditView->getBirtdayID();
2083 if ( bd == 0 ) 2088 if ( bd == 0 )
2084 return false; 2089 return false;
2085 mCalendar->setDefaultCalendar( bd ); 2090 mCalendar->setDefaultCalendar( bd );
2086 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2091 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2087 KABC::AddressBook::Iterator it; 2092 KABC::AddressBook::Iterator it;
2088 int count = 0; 2093 int count = 0;
2089 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2094 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2090 ++count; 2095 ++count;
2091 } 2096 }
2092 QProgressBar bar(count,0 ); 2097 QProgressBar bar(count,0 );
2093 int w = 300; 2098 int w = 300;
2094 if ( QApplication::desktop()->width() < 320 ) 2099 if ( QApplication::desktop()->width() < 320 )
2095 w = 220; 2100 w = 220;
2096 int h = bar.sizeHint().height() ; 2101 int h = bar.sizeHint().height() ;
2097 int dw = QApplication::desktop()->width(); 2102 int dw = QApplication::desktop()->width();
2098 int dh = QApplication::desktop()->height(); 2103 int dh = QApplication::desktop()->height();
2099 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2104 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2100 bar.show(); 2105 bar.show();
2101 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2106 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2102 qApp->processEvents(); 2107 qApp->processEvents();
2103 count = 0; 2108 count = 0;
2104 int addCount = 0; 2109 int addCount = 0;
2105 KCal::Attendee* a = 0; 2110 KCal::Attendee* a = 0;
2106 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2111 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2107 if ( ! bar.isVisible() ) 2112 if ( ! bar.isVisible() )
2108 return false; 2113 return false;
2109 bar.setProgress( count++ ); 2114 bar.setProgress( count++ );
2110 qApp->processEvents(); 2115 qApp->processEvents();
2111 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2116 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2112 if ( (*it).birthday().date().isValid() ){ 2117 if ( (*it).birthday().date().isValid() ){
2113 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2118 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2114 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2119 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2115 ++addCount; 2120 ++addCount;
2116 } 2121 }
2117 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2122 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2118 if ( anni.isValid() ){ 2123 if ( anni.isValid() ){
2119 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2124 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2120 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2125 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2121 ++addCount; 2126 ++addCount;
2122 } 2127 }
2123 } 2128 }
2124 mCalendar->setDefaultCalendar( curCal ); 2129 mCalendar->setDefaultCalendar( curCal );
2125 updateView(); 2130 updateView();
2126 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2131 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2127#else //DESKTOP_VERSION 2132#else //DESKTOP_VERSION
2128 2133
2129 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2134 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2130 // the result should now arrive through method insertBirthdays 2135 // the result should now arrive through method insertBirthdays
2131 2136
2132#endif //DESKTOP_VERSION 2137#endif //DESKTOP_VERSION
2133 2138
2134#endif //KORG_NOKABC 2139#endif //KORG_NOKABC
2135 2140
2136 2141
2137 return true; 2142 return true;
2138} 2143}
2139 2144
2140// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2145// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2141void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2146void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2142 const QStringList& anniversaryList, const QStringList& realNameList, 2147 const QStringList& anniversaryList, const QStringList& realNameList,
2143 const QStringList& emailList, const QStringList& assembledNameList, 2148 const QStringList& emailList, const QStringList& assembledNameList,
2144 const QStringList& uidList) 2149 const QStringList& uidList)
2145{ 2150{
2146 2151
2147 //qDebug("KO::CalendarView::insertBirthdays"); 2152 //qDebug("KO::CalendarView::insertBirthdays");
2148 if (uid == this->name()) 2153 if (uid == this->name())
2149 { 2154 {
2150 int curCal = mCalendar->defaultCalendar(); 2155 int curCal = mCalendar->defaultCalendar();
2151 int bd = mCalEditView->getBirtdayID(); 2156 int bd = mCalEditView->getBirtdayID();
2152 if ( bd == 0 ) 2157 if ( bd == 0 )
2153 return; 2158 return;
2154 mCalendar->setDefaultCalendar( bd ); 2159 mCalendar->setDefaultCalendar( bd );
2155 2160
2156 2161
2157 int count = birthdayList.count(); 2162 int count = birthdayList.count();
2158 int addCount = 0; 2163 int addCount = 0;
2159 KCal::Attendee* a = 0; 2164 KCal::Attendee* a = 0;
2160 2165
2161 //qDebug("CalView 1 %i", count); 2166 //qDebug("CalView 1 %i", count);
2162 2167
2163 QProgressBar bar(count,0 ); 2168 QProgressBar bar(count,0 );
2164 int w = 300; 2169 int w = 300;
2165 if ( QApplication::desktop()->width() < 320 ) 2170 if ( QApplication::desktop()->width() < 320 )
2166 w = 220; 2171 w = 220;
2167 int h = bar.sizeHint().height() ; 2172 int h = bar.sizeHint().height() ;
2168 int dw = QApplication::desktop()->width(); 2173 int dw = QApplication::desktop()->width();
2169 int dh = QApplication::desktop()->height(); 2174 int dh = QApplication::desktop()->height();
2170 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2175 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2171 bar.show(); 2176 bar.show();
2172 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2177 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2173 qApp->processEvents(); 2178 qApp->processEvents();
2174 2179
2175 QDate birthday; 2180 QDate birthday;
2176 QDate anniversary; 2181 QDate anniversary;
2177 QString realName; 2182 QString realName;
2178 QString email; 2183 QString email;
2179 QString assembledName; 2184 QString assembledName;
2180 QString uid; 2185 QString uid;
2181 bool ok = true; 2186 bool ok = true;
2182 for ( int i = 0; i < count; i++) 2187 for ( int i = 0; i < count; i++)
2183 { 2188 {
2184 if ( ! bar.isVisible() ) 2189 if ( ! bar.isVisible() )
2185 return; 2190 return;
2186 bar.setProgress( i ); 2191 bar.setProgress( i );
2187 qApp->processEvents(); 2192 qApp->processEvents();
2188 2193
2189 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2194 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2190 if (!ok) { 2195 if (!ok) {
2191 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2196 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2192 } 2197 }
2193 2198
2194 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2199 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2195 if (!ok) { 2200 if (!ok) {
2196 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2201 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2197 } 2202 }
2198 realName = realNameList[i]; 2203 realName = realNameList[i];
2199 email = emailList[i]; 2204 email = emailList[i];
2200 assembledName = assembledNameList[i]; 2205 assembledName = assembledNameList[i];
2201 uid = uidList[i]; 2206 uid = uidList[i];
2202 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 2207 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
2203 2208
2204 if ( birthday.isValid() ){ 2209 if ( birthday.isValid() ){
2205 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2210 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2206 KCal::Attendee::ReqParticipant,uid) ; 2211 KCal::Attendee::ReqParticipant,uid) ;
2207 if ( addAnniversary( birthday, assembledName, a, true ) ) 2212 if ( addAnniversary( birthday, assembledName, a, true ) )
2208 ++addCount; 2213 ++addCount;
2209 } 2214 }
2210 2215
2211 if ( anniversary.isValid() ){ 2216 if ( anniversary.isValid() ){
2212 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2217 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2213 KCal::Attendee::ReqParticipant,uid) ; 2218 KCal::Attendee::ReqParticipant,uid) ;
2214 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2219 if ( addAnniversary( anniversary, assembledName, a, false ) )
2215 ++addCount; 2220 ++addCount;
2216 } 2221 }
2217 } 2222 }
2218 2223
2219 mCalendar->setDefaultCalendar( curCal ); 2224 mCalendar->setDefaultCalendar( curCal );
2220 updateView(); 2225 updateView();
2221 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2226 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2222 2227
2223 } 2228 }
2224 2229
2225} 2230}
2226 2231
2227 2232
2228 2233
2229bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2234bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2230{ 2235{
2231 //qDebug("addAnni "); 2236 //qDebug("addAnni ");
2232 Event * ev = new Event(); 2237 Event * ev = new Event();
2233 ev->setOrganizer(KOPrefs::instance()->email()); 2238 ev->setOrganizer(KOPrefs::instance()->email());
2234 if ( a ) { 2239 if ( a ) {
2235 ev->addAttendee( a ); 2240 ev->addAttendee( a );
2236 } 2241 }
2237 QString kind; 2242 QString kind;
2238 if ( birthday ) { 2243 if ( birthday ) {
2239 kind = i18n( "Birthday" ); 2244 kind = i18n( "Birthday" );
2240 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2245 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2241 } 2246 }
2242 else { 2247 else {
2243 kind = i18n( "Anniversary" ); 2248 kind = i18n( "Anniversary" );
2244 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2249 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2245 } 2250 }
2246 ev->setCategories( kind ); 2251 ev->setCategories( kind );
2247 ev->setDtStart( QDateTime(date) ); 2252 ev->setDtStart( QDateTime(date) );
2248 ev->setDtEnd( QDateTime(date) ); 2253 ev->setDtEnd( QDateTime(date) );
2249 ev->setFloats( true ); 2254 ev->setFloats( true );
2250 Recurrence * rec = ev->recurrence(); 2255 Recurrence * rec = ev->recurrence();
2251 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2256 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2252 rec->addYearlyNum( date.month() ); 2257 rec->addYearlyNum( date.month() );
2253 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2258 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2254 delete ev; 2259 delete ev;
2255 return false; 2260 return false;
2256 } 2261 }
2257 return true; 2262 return true;
2258 2263
2259} 2264}
2260bool CalendarView::importQtopia( const QString &categories, 2265bool CalendarView::importQtopia( const QString &categories,
2261 const QString &datebook, 2266 const QString &datebook,
2262 const QString &todolist ) 2267 const QString &todolist )
2263{ 2268{
2264 2269
2265 QtopiaFormat qtopiaFormat; 2270 QtopiaFormat qtopiaFormat;
2266 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2267 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2272 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2268 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2273 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2269 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2274 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2270 2275
2271 updateView(); 2276 updateView();
2272 return true; 2277 return true;
2273 2278
2274#if 0 2279#if 0
2275 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2280 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2276 mCurrentSyncDevice = "qtopia-XML"; 2281 mCurrentSyncDevice = "qtopia-XML";
2277 if ( mSyncManager->mAskForPreferences ) 2282 if ( mSyncManager->mAskForPreferences )
2278 edit_sync_options(); 2283 edit_sync_options();
2279 qApp->processEvents(); 2284 qApp->processEvents();
2280 CalendarLocal* calendar = new CalendarLocal(); 2285 CalendarLocal* calendar = new CalendarLocal();
2281 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2286 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2282 bool syncOK = false; 2287 bool syncOK = false;
2283 QtopiaFormat qtopiaFormat; 2288 QtopiaFormat qtopiaFormat;
2284 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2289 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2285 bool loadOk = true; 2290 bool loadOk = true;
2286 if ( !categories.isEmpty() ) 2291 if ( !categories.isEmpty() )
2287 loadOk = qtopiaFormat.load( calendar, categories ); 2292 loadOk = qtopiaFormat.load( calendar, categories );
2288 if ( loadOk && !datebook.isEmpty() ) 2293 if ( loadOk && !datebook.isEmpty() )
2289 loadOk = qtopiaFormat.load( calendar, datebook ); 2294 loadOk = qtopiaFormat.load( calendar, datebook );
2290 if ( loadOk && !todolist.isEmpty() ) 2295 if ( loadOk && !todolist.isEmpty() )
2291 loadOk = qtopiaFormat.load( calendar, todolist ); 2296 loadOk = qtopiaFormat.load( calendar, todolist );
2292 2297
2293 if ( loadOk ) { 2298 if ( loadOk ) {
2294 getEventViewerDialog()->setSyncMode( true ); 2299 getEventViewerDialog()->setSyncMode( true );
2295 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2300 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2296 getEventViewerDialog()->setSyncMode( false ); 2301 getEventViewerDialog()->setSyncMode( false );
2297 qApp->processEvents(); 2302 qApp->processEvents();
2298 if ( syncOK ) { 2303 if ( syncOK ) {
2299 if ( mSyncManager->mWriteBackFile ) 2304 if ( mSyncManager->mWriteBackFile )
2300 { 2305 {
2301 // write back XML file 2306 // write back XML file
2302 2307
2303 } 2308 }
2304 setModified( true ); 2309 setModified( true );
2305 } 2310 }
2306 } else { 2311 } else {
2307 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2312 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2308 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2313 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2309 question, i18n("Ok")) ; 2314 question, i18n("Ok")) ;
2310 } 2315 }
2311 delete calendar; 2316 delete calendar;
2312 updateView(); 2317 updateView();
2313 return syncOK; 2318 return syncOK;
2314 2319
2315 2320
2316#endif 2321#endif
2317 2322
2318} 2323}
2319 2324
2320void CalendarView::setSyncEventsReadOnly() 2325void CalendarView::setSyncEventsReadOnly()
2321{ 2326{
2322 mCalendar->setSyncEventsReadOnly(); 2327 mCalendar->setSyncEventsReadOnly();
2323} 2328}
2324 2329
2325bool CalendarView::loadCalendars() 2330bool CalendarView::loadCalendars()
2326{ 2331{
2327 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2332 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2328 KopiCalendarFile * cal = calendars.first(); 2333 KopiCalendarFile * cal = calendars.first();
2329 mCalendar->setDefaultCalendar( 1 ); 2334 mCalendar->setDefaultCalendar( 1 );
2330 openCalendar( MainWindow::defaultFileName(), false ); 2335 openCalendar( MainWindow::defaultFileName(), false );
2331 cal = calendars.next(); 2336 cal = calendars.next();
2332 while ( cal ) { 2337 while ( cal ) {
2333 addCalendar( cal ); 2338 addCalendar( cal );
2334 cal = calendars.next(); 2339 cal = calendars.next();
2335 } 2340 }
2336 restoreCalendarSettings(); 2341 restoreCalendarSettings();
2337 return true; 2342 return true;
2338} 2343}
2339bool CalendarView::restoreCalendarSettings() 2344bool CalendarView::restoreCalendarSettings()
2340{ 2345{
2341 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2346 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2342 KopiCalendarFile * cal = calendars.first(); 2347 KopiCalendarFile * cal = calendars.first();
2343 while ( cal ) { 2348 while ( cal ) {
2344 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2349 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2345 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2350 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2346 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2351 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2347 if ( cal->isStandard ) 2352 if ( cal->isStandard )
2348 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2353 mCalendar->setDefaultCalendar( cal->mCalNumber );
2349 cal = calendars.next(); 2354 cal = calendars.next();
2350 } 2355 }
2351 setSyncEventsReadOnly(); 2356 setSyncEventsReadOnly();
2352 mCalendar->reInitAlarmSettings(); 2357 mCalendar->reInitAlarmSettings();
2353 updateUnmanagedViews(); 2358 updateUnmanagedViews();
2354 updateView(); 2359 updateView();
2355 return true; 2360 return true;
2356} 2361}
2357void CalendarView::addCalendarId( int id ) 2362void CalendarView::addCalendarId( int id )
2358{ 2363{
2359 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2364 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2360 if ( cal ) 2365 if ( cal )
2361 addCalendar( cal ); 2366 addCalendar( cal );
2362} 2367}
2363bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2368bool CalendarView::addCalendar( KopiCalendarFile * cal )
2364{ 2369{
2365 cal->mErrorOnLoad = false; 2370 cal->mErrorOnLoad = false;
2366 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2371 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2367 cal->mLoadDt = QDateTime::currentDateTime(); 2372 cal->mLoadDt = QDateTime::currentDateTime();
2368 return true; 2373 return true;
2369 } 2374 }
2370 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2375 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2371 cal->mErrorOnLoad = true; 2376 cal->mErrorOnLoad = true;
2372 return false; 2377 return false;
2373} 2378}
2374bool CalendarView::openCalendar(QString filename, bool merge) 2379bool CalendarView::openCalendar(QString filename, bool merge)
2375{ 2380{
2376 2381
2377 if (filename.isEmpty()) { 2382 if (filename.isEmpty()) {
2378 return false; 2383 return false;
2379 } 2384 }
2380 2385
2381 if (!QFile::exists(filename)) { 2386 if (!QFile::exists(filename)) {
2382 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2387 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2383 return false; 2388 return false;
2384 } 2389 }
2385 2390
2386 globalFlagBlockAgenda = 1; 2391 globalFlagBlockAgenda = 1;
2387 clearAllViews(); 2392 clearAllViews();
2388 if (!merge) { 2393 if (!merge) {
2389 mViewManager->setDocumentId( filename ); 2394 mViewManager->setDocumentId( filename );
2390 mCalendar->close(); 2395 mCalendar->close();
2391 } 2396 }
2392 mStorage->setFileName( filename ); 2397 mStorage->setFileName( filename );
2393 2398
2394 if ( mStorage->load() ) { 2399 if ( mStorage->load() ) {
2395 if ( merge ) ;//setModified( true ); 2400 if ( merge ) ;//setModified( true );
2396 else { 2401 else {
2397 //setModified( true ); 2402 //setModified( true );
2398 mViewManager->setDocumentId( filename ); 2403 mViewManager->setDocumentId( filename );
2399 mDialogManager->setDocumentId( filename ); 2404 mDialogManager->setDocumentId( filename );
2400 mTodoList->setDocumentId( filename ); 2405 mTodoList->setDocumentId( filename );
2401 } 2406 }
2402 globalFlagBlockAgenda = 2; 2407 globalFlagBlockAgenda = 2;
2403 // if ( getLastSyncEvent() ) 2408 // if ( getLastSyncEvent() )
2404 // getLastSyncEvent()->setReadOnly( true ); 2409 // getLastSyncEvent()->setReadOnly( true );
2405 mCalendar->reInitAlarmSettings(); 2410 mCalendar->reInitAlarmSettings();
2406 setSyncEventsReadOnly(); 2411 setSyncEventsReadOnly();
2407 //updateUnmanagedViews(); 2412 //updateUnmanagedViews();
2408 //updateView(); 2413 //updateView();
2409 if ( filename != MainWindow::defaultFileName() ) { 2414 if ( filename != MainWindow::defaultFileName() ) {
2410 saveCalendar( MainWindow::defaultFileName() ); 2415 saveCalendar( MainWindow::defaultFileName() );
2411 } else { 2416 } else {
2412 QFileInfo finf ( MainWindow::defaultFileName()); 2417 QFileInfo finf ( MainWindow::defaultFileName());
2413 if ( finf.exists() ) { 2418 if ( finf.exists() ) {
2414 setLoadedFileVersion( finf.lastModified () ); 2419 setLoadedFileVersion( finf.lastModified () );
2415 } 2420 }
2416 } 2421 }
2417 return true; 2422 return true;
2418 } else { 2423 } else {
2419 // while failing to load, the calendar object could 2424 // while failing to load, the calendar object could
2420 // have become partially populated. Clear it out. 2425 // have become partially populated. Clear it out.
2421 if ( !merge ) { 2426 if ( !merge ) {
2422 mCalendar->close(); 2427 mCalendar->close();
2423 mViewManager->setDocumentId( filename ); 2428 mViewManager->setDocumentId( filename );
2424 mDialogManager->setDocumentId( filename ); 2429 mDialogManager->setDocumentId( filename );
2425 mTodoList->setDocumentId( filename ); 2430 mTodoList->setDocumentId( filename );
2426 } 2431 }
2427 2432
2428 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2433 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2429 2434
2430 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2435 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2431 globalFlagBlockAgenda = 2; 2436 globalFlagBlockAgenda = 2;
2432 mCalendar->reInitAlarmSettings(); 2437 mCalendar->reInitAlarmSettings();
2433 setSyncEventsReadOnly(); 2438 setSyncEventsReadOnly();
2434 updateUnmanagedViews(); 2439 updateUnmanagedViews();
2435 updateView(); 2440 updateView();
2436 } 2441 }
2437 return false; 2442 return false;
2438} 2443}
2439void CalendarView::mergeFile( QString fn ) 2444void CalendarView::mergeFile( QString fn )
2440{ 2445{
2441 clearAllViews(); 2446 clearAllViews();
2442 mCalendar->mergeCalendarFile( fn ); 2447 mCalendar->mergeCalendarFile( fn );
2443 mCalendar->reInitAlarmSettings(); 2448 mCalendar->reInitAlarmSettings();
2444 setSyncEventsReadOnly(); 2449 setSyncEventsReadOnly();
2445 updateUnmanagedViews(); 2450 updateUnmanagedViews();
2446 updateView(); 2451 updateView();
2447} 2452}
2448void CalendarView::mergeFileResource( QString fn ,QString resource ) 2453void CalendarView::mergeFileResource( QString fn ,QString resource )
2449{ 2454{
2450 2455
2451 if ( resource == "ALL" ) { 2456 if ( resource == "ALL" ) {
2457 mCalendar->setAllCalendarEnabled( true );
2452 mergeFile( fn ); 2458 mergeFile( fn );
2459 restoreCalendarSettings();
2453 return; 2460 return;
2454 } 2461 }
2455 2462
2456 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2463 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2457 if ( !exclusiveResource ) { 2464 if ( !exclusiveResource ) {
2458 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() ); 2465 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() );
2459 return; 2466 return;
2460 } 2467 }
2461 clearAllViews(); 2468 clearAllViews();
2462 mCalendar->setCalendarRemove( exclusiveResource ); 2469 mCalendar->setCalendarRemove( exclusiveResource );
2463 int def = mCalendar->defaultCalendar(); 2470 int def = mCalendar->defaultCalendar();
2464 mCalendar->setDefaultCalendar(exclusiveResource); 2471 mCalendar->setDefaultCalendar(exclusiveResource);
2465 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) { 2472 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) {
2466 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() ); 2473 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() );
2467 } 2474 }
2468 mCalendar->setDefaultCalendar( def ); 2475 mCalendar->setDefaultCalendar( def );
2469 mCalendar->reInitAlarmSettings(); 2476 mCalendar->reInitAlarmSettings();
2470 setSyncEventsReadOnly(); 2477 setSyncEventsReadOnly();
2471 updateUnmanagedViews(); 2478 updateUnmanagedViews();
2472 updateView(); 2479 updateView();
2473} 2480}
2474void CalendarView::showOpenError() 2481void CalendarView::showOpenError()
2475{ 2482{
2476 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2483 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2477} 2484}
2478void CalendarView::setLoadedFileVersion(QDateTime dt) 2485void CalendarView::setLoadedFileVersion(QDateTime dt)
2479{ 2486{
2480 loadedFileVersion = dt; 2487 loadedFileVersion = dt;
2481} 2488}
2482bool CalendarView::checkFileChanged(QString fn) 2489bool CalendarView::checkFileChanged(QString fn)
2483{ 2490{
2484 QFileInfo finf ( fn ); 2491 QFileInfo finf ( fn );
2485 if ( !finf.exists() ) 2492 if ( !finf.exists() )
2486 return true; 2493 return true;
2487 QDateTime dt = finf.lastModified (); 2494 QDateTime dt = finf.lastModified ();
2488 if ( dt <= loadedFileVersion ) 2495 if ( dt <= loadedFileVersion )
2489 return false; 2496 return false;
2490 return true; 2497 return true;
2491 2498
2492} 2499}
2493void CalendarView::watchSavedFile() 2500void CalendarView::watchSavedFile()
2494{ 2501{
2495 QFileInfo finf ( MainWindow::defaultFileName()); 2502 QFileInfo finf ( MainWindow::defaultFileName());
2496 if ( !finf.exists() ) 2503 if ( !finf.exists() )
2497 return; 2504 return;
2498 QDateTime dt = finf.lastModified (); 2505 QDateTime dt = finf.lastModified ();
2499 if ( dt < loadedFileVersion ) { 2506 if ( dt < loadedFileVersion ) {
2500 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2507 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2501 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2508 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2502 return; 2509 return;
2503 } 2510 }
2504 loadedFileVersion = dt; 2511 loadedFileVersion = dt;
2505} 2512}
2506bool CalendarView::checkAllFileVersions() 2513bool CalendarView::checkAllFileVersions()
2507{ 2514{
2508 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2515 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2509 KopiCalendarFile * cal = calendars.first(); 2516 KopiCalendarFile * cal = calendars.first();
2510 mCalendar->setDefaultCalendar( 1 ); 2517 mCalendar->setDefaultCalendar( 1 );
2511 mCalendar->setDefaultCalendarEnabledOnly(); 2518 mCalendar->setDefaultCalendarEnabledOnly();
2512 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2519 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2513 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2520 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2514 restoreCalendarSettings(); 2521 restoreCalendarSettings();
2515 return false; 2522 return false;
2516 } 2523 }
2517 } 2524 }
2518 cal = calendars.next(); 2525 cal = calendars.next();
2519 QDateTime storeTemp = loadedFileVersion; 2526 QDateTime storeTemp = loadedFileVersion;
2520 while ( cal ) { 2527 while ( cal ) {
2521 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2528 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2522 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2529 mCalendar->setDefaultCalendar( cal->mCalNumber );
2523 mCalendar->setDefaultCalendarEnabledOnly(); 2530 mCalendar->setDefaultCalendarEnabledOnly();
2524 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2531 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2525 if ( !checkFileVersion(cal->mFileName )) { 2532 if ( !checkFileVersion(cal->mFileName )) {
2526 loadedFileVersion = storeTemp; 2533 loadedFileVersion = storeTemp;
2527 restoreCalendarSettings(); 2534 restoreCalendarSettings();
2528 return false; 2535 return false;
2529 } 2536 }
2530 } 2537 }
2531 cal = calendars.next(); 2538 cal = calendars.next();
2532 } 2539 }
2533 loadedFileVersion = storeTemp; 2540 loadedFileVersion = storeTemp;
2534 return true; 2541 return true;
2535} 2542}
2536bool CalendarView::checkFileVersion(QString fn) 2543bool CalendarView::checkFileVersion(QString fn)
2537{ 2544{
2538 QFileInfo finf ( fn ); 2545 QFileInfo finf ( fn );
2539 if ( !finf.exists() ) 2546 if ( !finf.exists() )
2540 return true; 2547 return true;
2541 QDateTime dt = finf.lastModified (); 2548 QDateTime dt = finf.lastModified ();
2542 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2549 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2543 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2550 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2544 if ( dt <= loadedFileVersion ) 2551 if ( dt <= loadedFileVersion )
2545 return true; 2552 return true;
2546 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2553 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2547 i18n("KO/Pi Warning"),i18n("Overwrite"), 2554 i18n("KO/Pi Warning"),i18n("Overwrite"),
2548 i18n("Sync+save")); 2555 i18n("Sync+save"));
2549 2556
2550 if ( km == KMessageBox::Cancel ) 2557 if ( km == KMessageBox::Cancel )
2551 return false; 2558 return false;
2552 if ( km == KMessageBox::Yes ) 2559 if ( km == KMessageBox::Yes )
2553 return true; 2560 return true;
2554 2561
2555 setSyncDevice("deleteaftersync" ); 2562 setSyncDevice("deleteaftersync" );
2556 mSyncManager->mAskForPreferences = true; 2563 mSyncManager->mAskForPreferences = true;
2557 mSyncManager->mSyncAlgoPrefs = 3; 2564 mSyncManager->mSyncAlgoPrefs = 3;
2558 mSyncManager->mWriteBackFile = false; 2565 mSyncManager->mWriteBackFile = false;
2559 mSyncManager->mWriteBackExistingOnly = false; 2566 mSyncManager->mWriteBackExistingOnly = false;
2560 mSyncManager->mShowSyncSummary = false; 2567 mSyncManager->mShowSyncSummary = false;
2561 mMultiResourceSync = false; 2568 mMultiResourceSync = false;
2562 syncCalendar( fn, 3 ); 2569 syncCalendar( fn, 3 );
2563 Event * e = getLastSyncEvent(); 2570 Event * e = getLastSyncEvent();
2564 if ( e ) 2571 if ( e )
2565 mCalendar->deleteEvent( e ); 2572 mCalendar->deleteEvent( e );
2566 return true; 2573 return true;
2567} 2574}
2568bool CalendarView::saveCalendars() 2575bool CalendarView::saveCalendars()
2569{ 2576{
2570 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2577 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2571 KopiCalendarFile * cal = calendars.first(); 2578 KopiCalendarFile * cal = calendars.first();
2572 mCalendar->setDefaultCalendar( 1 ); 2579 mCalendar->setDefaultCalendar( 1 );
2573 mCalendar->setDefaultCalendarEnabledOnly(); 2580 mCalendar->setDefaultCalendarEnabledOnly();
2574 QString saveError; 2581 QString saveError;
2575 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2582 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2576 saveError = cal->mName +"\n"; 2583 saveError = cal->mName +"\n";
2577 cal = calendars.next(); 2584 cal = calendars.next();
2578 while ( cal ) { 2585 while ( cal ) {
2579 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2586 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2580 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2587 mCalendar->setDefaultCalendar( cal->mCalNumber );
2581 mCalendar->setDefaultCalendarEnabledOnly(); 2588 mCalendar->setDefaultCalendarEnabledOnly();
2582 if ( saveCalendar( cal->mFileName ) ) 2589 if ( saveCalendar( cal->mFileName ) )
2583 cal->mLoadDt = QDateTime::currentDateTime(); 2590 cal->mLoadDt = QDateTime::currentDateTime();
2584 else 2591 else
2585 saveError += cal->mName + "\n"; 2592 saveError += cal->mName + "\n";
2586 } 2593 }
2587 cal = calendars.next(); 2594 cal = calendars.next();
2588 } 2595 }
2589 restoreCalendarSettings(); 2596 restoreCalendarSettings();
2590 //saveError = "test error"; 2597 //saveError = "test error";
2591 if ( !saveError.isEmpty() ) { 2598 if ( !saveError.isEmpty() ) {
2592 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2599 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2593 KMessageBox::error(this, saveError, i18n("Error saving data")); 2600 KMessageBox::error(this, saveError, i18n("Error saving data"));
2594 return false; 2601 return false;
2595 } 2602 }
2596 return true; 2603 return true;
2597} 2604}
2598bool CalendarView::saveCalendarResource(QString filename, QString resource) 2605bool CalendarView::saveCalendarResource(QString filename, QString resource)
2599{ 2606{
2600 if ( resource == "ALL" ) 2607 if ( resource == "ALL" ) {
2601 return saveCalendar( filename ); 2608 mCalendar->setAllCalendarEnabled( true );
2609 bool retval = saveCalendar( filename );
2610 restoreCalendarSettings();
2611 return retval;
2612 }
2602 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 2613 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2603 if ( !exclusiveResource ) { 2614 if ( !exclusiveResource ) {
2604 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() ); 2615 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() );
2605 return false; 2616 return false;
2606 } 2617 }
2607 mCalendar->setDefaultCalendar( exclusiveResource ); 2618 mCalendar->setDefaultCalendar( exclusiveResource );
2608 mCalendar->setDefaultCalendarEnabledOnly(); 2619 mCalendar->setDefaultCalendarEnabledOnly();
2609 mCalendar->setSyncEventsEnabled(); 2620 mCalendar->setSyncEventsEnabled();
2610 bool res = saveCalendar( filename ); 2621 bool res = saveCalendar( filename );
2611 restoreCalendarSettings(); 2622 restoreCalendarSettings();
2612 return res; 2623 return res;
2613 2624
2614} 2625}
2615bool CalendarView::saveCalendar( QString filename ) 2626bool CalendarView::saveCalendar( QString filename )
2616{ 2627{
2617 2628
2618 // Store back all unsaved data into calendar object 2629 // Store back all unsaved data into calendar object
2619 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2630 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2620 if ( mViewManager->currentView() ) 2631 if ( mViewManager->currentView() )
2621 mViewManager->currentView()->flushView(); 2632 mViewManager->currentView()->flushView();
2622 2633
2623 2634
2624 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2635 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2625 mStorage->setSaveFormat( new ICalFormat() ); 2636 mStorage->setSaveFormat( new ICalFormat() );
2626 mStorage->setFileName( filename ); 2637 mStorage->setFileName( filename );
2627 bool success; 2638 bool success;
2628 success = mStorage->save(); 2639 success = mStorage->save();
2629 if ( !success ) { 2640 if ( !success ) {
2630 return false; 2641 return false;
2631 } 2642 }
2632 if ( filename == MainWindow::defaultFileName() ) { 2643 if ( filename == MainWindow::defaultFileName() ) {
2633 setLoadedFileVersion( lfv ); 2644 setLoadedFileVersion( lfv );
2634 watchSavedFile(); 2645 watchSavedFile();
2635 } 2646 }
2636 return true; 2647 return true;
2637} 2648}
2638 2649
2639void CalendarView::closeCalendar() 2650void CalendarView::closeCalendar()
2640{ 2651{
2641 2652
2642 // child windows no longer valid 2653 // child windows no longer valid
2643 clearAllViews(); 2654 clearAllViews();
2644 emit closingDown(); 2655 emit closingDown();
2645 2656
2646 mCalendar->close(); 2657 mCalendar->close();
2647 setModified(false); 2658 setModified(false);
2648 updateView(); 2659 updateView();
2649} 2660}
2650 2661
2651void CalendarView::archiveCalendar() 2662void CalendarView::archiveCalendar()
2652{ 2663{
2653 mDialogManager->showArchiveDialog(); 2664 mDialogManager->showArchiveDialog();
2654} 2665}
2655 2666
2656 2667
2657void CalendarView::readSettings() 2668void CalendarView::readSettings()
2658{ 2669{
2659 2670
2660 2671
2661 // mViewManager->showAgendaView(); 2672 // mViewManager->showAgendaView();
2662 QString str; 2673 QString str;
2663 //qDebug("CalendarView::readSettings() "); 2674 //qDebug("CalendarView::readSettings() ");
2664 // read settings from the KConfig, supplying reasonable 2675 // read settings from the KConfig, supplying reasonable
2665 // defaults where none are to be found 2676 // defaults where none are to be found
2666 KConfig *config = KOGlobals::config(); 2677 KConfig *config = KOGlobals::config();
2667#ifndef KORG_NOSPLITTER 2678#ifndef KORG_NOSPLITTER
2668 config->setGroup("KOrganizer Geometry"); 2679 config->setGroup("KOrganizer Geometry");
2669 2680
2670 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2681 QValueList<int> sizes = config->readIntListEntry("Separator1");
2671 if (sizes.count() != 2) { 2682 if (sizes.count() != 2) {
2672 sizes << mDateNavigator->minimumSizeHint().width(); 2683 sizes << mDateNavigator->minimumSizeHint().width();
2673 sizes << 300; 2684 sizes << 300;
2674 } 2685 }
2675 mPanner->setSizes(sizes); 2686 mPanner->setSizes(sizes);
2676 2687
2677 sizes = config->readIntListEntry("Separator2"); 2688 sizes = config->readIntListEntry("Separator2");
2678 if ( ( mResourceView && sizes.count() == 4 ) || 2689 if ( ( mResourceView && sizes.count() == 4 ) ||
2679 ( !mResourceView && sizes.count() == 3 ) ) { 2690 ( !mResourceView && sizes.count() == 3 ) ) {
2680 mLeftSplitter->setSizes(sizes); 2691 mLeftSplitter->setSizes(sizes);
2681 } 2692 }
2682#endif 2693#endif
2683 globalFlagBlockAgenda = 1; 2694 globalFlagBlockAgenda = 1;
2684 mViewManager->showAgendaView(); 2695 mViewManager->showAgendaView();
2685 //mViewManager->readSettings( config ); 2696 //mViewManager->readSettings( config );
2686 mTodoList->restoreLayout(config,QString("Todo Layout")); 2697 mTodoList->restoreLayout(config,QString("Todo Layout"));
2687 readFilterSettings(config); 2698 readFilterSettings(config);
2688 2699
2689#ifdef DESKTOP_VERSION 2700#ifdef DESKTOP_VERSION
2690 config->setGroup("WidgetLayout"); 2701 config->setGroup("WidgetLayout");
2691 QStringList list; 2702 QStringList list;
2692 list = config->readListEntry("MainLayout"); 2703 list = config->readListEntry("MainLayout");
2693 int x,y,w,h; 2704 int x,y,w,h;
2694 if ( ! list.isEmpty() ) { 2705 if ( ! list.isEmpty() ) {
2695 x = list[0].toInt(); 2706 x = list[0].toInt();
2696 y = list[1].toInt(); 2707 y = list[1].toInt();
2697 w = list[2].toInt(); 2708 w = list[2].toInt();
2698 h = list[3].toInt(); 2709 h = list[3].toInt();
2699 KApplication::testCoords( &x,&y,&w,&h ); 2710 KApplication::testCoords( &x,&y,&w,&h );
2700 topLevelWidget()->setGeometry(x,y,w,h); 2711 topLevelWidget()->setGeometry(x,y,w,h);
2701 2712
2702 } else { 2713 } else {
2703 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2714 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2704 } 2715 }
2705 list = config->readListEntry("EditEventLayout"); 2716 list = config->readListEntry("EditEventLayout");
2706 if ( ! list.isEmpty() ) { 2717 if ( ! list.isEmpty() ) {
2707 x = list[0].toInt(); 2718 x = list[0].toInt();
2708 y = list[1].toInt(); 2719 y = list[1].toInt();
2709 w = list[2].toInt(); 2720 w = list[2].toInt();
2710 h = list[3].toInt(); 2721 h = list[3].toInt();
2711 KApplication::testCoords( &x,&y,&w,&h ); 2722 KApplication::testCoords( &x,&y,&w,&h );
2712 mEventEditor->setGeometry(x,y,w,h); 2723 mEventEditor->setGeometry(x,y,w,h);
2713 2724
2714 } 2725 }
2715 list = config->readListEntry("EditTodoLayout"); 2726 list = config->readListEntry("EditTodoLayout");
2716 if ( ! list.isEmpty() ) { 2727 if ( ! list.isEmpty() ) {
2717 x = list[0].toInt(); 2728 x = list[0].toInt();
2718 y = list[1].toInt(); 2729 y = list[1].toInt();
2719 w = list[2].toInt(); 2730 w = list[2].toInt();
2720 h = list[3].toInt(); 2731 h = list[3].toInt();
2721 KApplication::testCoords( &x,&y,&w,&h ); 2732 KApplication::testCoords( &x,&y,&w,&h );
2722 mTodoEditor->setGeometry(x,y,w,h); 2733 mTodoEditor->setGeometry(x,y,w,h);
2723 2734
2724 } 2735 }
2725 list = config->readListEntry("ViewerLayout"); 2736 list = config->readListEntry("ViewerLayout");
2726 if ( ! list.isEmpty() ) { 2737 if ( ! list.isEmpty() ) {
2727 x = list[0].toInt(); 2738 x = list[0].toInt();
2728 y = list[1].toInt(); 2739 y = list[1].toInt();
2729 w = list[2].toInt(); 2740 w = list[2].toInt();
2730 h = list[3].toInt(); 2741 h = list[3].toInt();
2731 KApplication::testCoords( &x,&y,&w,&h ); 2742 KApplication::testCoords( &x,&y,&w,&h );
2732 getEventViewerDialog()->setGeometry(x,y,w,h); 2743 getEventViewerDialog()->setGeometry(x,y,w,h);
2733 } 2744 }
2734#endif 2745#endif
2735 config->setGroup( "Views" ); 2746 config->setGroup( "Views" );
2736 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2747 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2737 2748
2738 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2749 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2739 2750
2740 int resetval = 0; 2751 int resetval = 0;
2741 int maxVal = 0; 2752 int maxVal = 0;
2742 if (sizes.count() != 3) { 2753 if (sizes.count() != 3) {
2743 if ( KOPrefs::instance()->mVerticalScreen ) { 2754 if ( KOPrefs::instance()->mVerticalScreen ) {
2744 resetval = mDateNavigator->sizeHint().width()+2; 2755 resetval = mDateNavigator->sizeHint().width()+2;
2745 } else { 2756 } else {
2746 resetval = mDateNavigator->sizeHint().height()+2; 2757 resetval = mDateNavigator->sizeHint().height()+2;
2747 } 2758 }
2748 } 2759 }
2749 if ( resetval ) { 2760 if ( resetval ) {
2750 sizes.clear(); 2761 sizes.clear();
2751 if ( KOPrefs::instance()->mVerticalScreen ) { 2762 if ( KOPrefs::instance()->mVerticalScreen ) {
2752 maxVal = QApplication::desktop()->width() -10; 2763 maxVal = QApplication::desktop()->width() -10;
2753 } else { 2764 } else {
2754 maxVal = QApplication::desktop()->height()-10; 2765 maxVal = QApplication::desktop()->height()-10;
2755 } 2766 }
2756 sizes << resetval; 2767 sizes << resetval;
2757 if ( maxVal < resetval + resetval) 2768 if ( maxVal < resetval + resetval)
2758 resetval = maxVal - resetval; 2769 resetval = maxVal - resetval;
2759 sizes << resetval; 2770 sizes << resetval;
2760 sizes << 100; 2771 sizes << 100;
2761 } 2772 }
2762 mLeftFrame->setSizes(sizes); 2773 mLeftFrame->setSizes(sizes);
2763 sizes = config->readIntListEntry("Main Splitter Frame"); 2774 sizes = config->readIntListEntry("Main Splitter Frame");
2764 resetval = 0; 2775 resetval = 0;
2765 maxVal = 0; 2776 maxVal = 0;
2766 if (sizes.count() != 2) { 2777 if (sizes.count() != 2) {
2767 if ( !KOPrefs::instance()->mVerticalScreen ) { 2778 if ( !KOPrefs::instance()->mVerticalScreen ) {
2768 resetval = mDateNavigator->sizeHint().width()+2; 2779 resetval = mDateNavigator->sizeHint().width()+2;
2769 } else { 2780 } else {
2770 resetval = mDateNavigator->sizeHint().height()+2; 2781 resetval = mDateNavigator->sizeHint().height()+2;
2771 } 2782 }
2772 } 2783 }
2773 if ( resetval ) { 2784 if ( resetval ) {
2774 sizes.clear(); 2785 sizes.clear();
2775 if ( !KOPrefs::instance()->mVerticalScreen ) { 2786 if ( !KOPrefs::instance()->mVerticalScreen ) {
2776 maxVal = QApplication::desktop()->width() -10; 2787 maxVal = QApplication::desktop()->width() -10;
2777 } else { 2788 } else {
2778 maxVal = QApplication::desktop()->height()-10; 2789 maxVal = QApplication::desktop()->height()-10;
2779 } 2790 }
2780 sizes << resetval; 2791 sizes << resetval;
2781 if ( maxVal < resetval + resetval) 2792 if ( maxVal < resetval + resetval)
2782 resetval = maxVal - resetval; 2793 resetval = maxVal - resetval;
2783 sizes << resetval; 2794 sizes << resetval;
2784 } 2795 }
2785 mMainFrame->setSizes(sizes); 2796 mMainFrame->setSizes(sizes);
2786 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2797 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2787 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2798 else if ( dateCount == 7 ) mNavigator->selectWeek();
2788 else mNavigator->selectDates( dateCount ); 2799 else mNavigator->selectDates( dateCount );
2789 // mViewManager->readSettings( config ); 2800 // mViewManager->readSettings( config );
2790 updateConfig(); 2801 updateConfig();
2791 globalFlagBlockAgenda = 2; 2802 globalFlagBlockAgenda = 2;
2792 mViewManager->readSettings( config ); 2803 mViewManager->readSettings( config );
2793 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2804 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2794} 2805}
2795 2806
2796void CalendarView::checkSuspendAlarm() 2807void CalendarView::checkSuspendAlarm()
2797{ 2808{
2798 if ( mSuspendTimer->isActive() ) { 2809 if ( mSuspendTimer->isActive() ) {
2799 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2810 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2800 } 2811 }
2801} 2812}
2802void CalendarView::writeSettings() 2813void CalendarView::writeSettings()
2803{ 2814{
2804 // kdDebug() << "CalendarView::writeSettings" << endl; 2815 // kdDebug() << "CalendarView::writeSettings" << endl;
2805 2816
2806 KConfig *config = KOGlobals::config(); 2817 KConfig *config = KOGlobals::config();
2807 2818
2808 mViewManager->writeSettings( config ); 2819 mViewManager->writeSettings( config );
2809 mTodoList->saveLayout(config,QString("Todo Layout")); 2820 mTodoList->saveLayout(config,QString("Todo Layout"));
2810 mDialogManager->writeSettings( config ); 2821 mDialogManager->writeSettings( config );
2811 //KOPrefs::instance()->usrWriteConfig(); 2822 //KOPrefs::instance()->usrWriteConfig();
2812 KOPrefs::instance()->writeConfig(); 2823 KOPrefs::instance()->writeConfig();
2813 2824
2814 writeFilterSettings(config); 2825 writeFilterSettings(config);
2815 config->setGroup( "AppRun" ); 2826 config->setGroup( "AppRun" );
2816 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2827 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2817 int days = dt.daysTo( QDate::currentDate() ); 2828 int days = dt.daysTo( QDate::currentDate() );
2818 dt = dt.addDays( days ); 2829 dt = dt.addDays( days );
2819 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2830 int secs = dt.secsTo( QDateTime::currentDateTime() );
2820 config->writeEntry( "LatestProgramStopDays", days ); 2831 config->writeEntry( "LatestProgramStopDays", days );
2821 config->writeEntry( "LatestProgramStopSecs", secs ); 2832 config->writeEntry( "LatestProgramStopSecs", secs );
2822 //qDebug("KO: Writing stop time: %d ", secs); 2833 //qDebug("KO: Writing stop time: %d ", secs);
2823 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2834 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2824 //QDateTime latest = dt.addSecs ( secs ); 2835 //QDateTime latest = dt.addSecs ( secs );
2825 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2836 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2826 config->setGroup( "Views" ); 2837 config->setGroup( "Views" );
2827 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2838 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2828 2839
2829#if 0 2840#if 0
2830 qDebug("********************* "); 2841 qDebug("********************* ");
2831 qDebug("Testcode secsto "); 2842 qDebug("Testcode secsto ");
2832 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2843 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2833 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2844 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2834 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2845 int secsto = dt_nodaylight.secsTo( dt_daylight );
2835 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2846 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2836 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2847 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2837 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2848 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2838 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2849 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2839 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2850 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2840 qDebug("********************* testcode end"); 2851 qDebug("********************* testcode end");
2841 2852
2842#endif 2853#endif
2843 2854
2844 QValueList<int> listINT = mLeftFrame->sizes(); 2855 QValueList<int> listINT = mLeftFrame->sizes();
2845 config->writeEntry("Left Splitter Frame",listINT); 2856 config->writeEntry("Left Splitter Frame",listINT);
2846 QValueList<int> listINT2 = mMainFrame->sizes(); 2857 QValueList<int> listINT2 = mMainFrame->sizes();
2847 config->writeEntry("Main Splitter Frame",listINT2); 2858 config->writeEntry("Main Splitter Frame",listINT2);
2848#ifdef DESKTOP_VERSION 2859#ifdef DESKTOP_VERSION
2849 config->setGroup("WidgetLayout"); 2860 config->setGroup("WidgetLayout");
2850 QStringList list ;//= config->readListEntry("MainLayout"); 2861 QStringList list ;//= config->readListEntry("MainLayout");
2851 int x,y,w,h; 2862 int x,y,w,h;
2852 QWidget* wid; 2863 QWidget* wid;
2853 wid = topLevelWidget(); 2864 wid = topLevelWidget();
2854 x = wid->geometry().x(); 2865 x = wid->geometry().x();
2855 y = wid->geometry().y(); 2866 y = wid->geometry().y();
2856 w = wid->width(); 2867 w = wid->width();
2857 h = wid->height(); 2868 h = wid->height();
2858 list.clear(); 2869 list.clear();
2859 list << QString::number( x ); 2870 list << QString::number( x );
2860 list << QString::number( y ); 2871 list << QString::number( y );
2861 list << QString::number( w ); 2872 list << QString::number( w );
2862 list << QString::number( h ); 2873 list << QString::number( h );
2863 config->writeEntry("MainLayout",list ); 2874 config->writeEntry("MainLayout",list );
2864 2875
2865 wid = mEventEditor; 2876 wid = mEventEditor;
2866 x = wid->geometry().x(); 2877 x = wid->geometry().x();
2867 y = wid->geometry().y(); 2878 y = wid->geometry().y();
2868 w = wid->width(); 2879 w = wid->width();
2869 h = wid->height(); 2880 h = wid->height();
2870 list.clear(); 2881 list.clear();
2871 list << QString::number( x ); 2882 list << QString::number( x );
2872 list << QString::number( y ); 2883 list << QString::number( y );
2873 list << QString::number( w ); 2884 list << QString::number( w );
2874 list << QString::number( h ); 2885 list << QString::number( h );
2875 config->writeEntry("EditEventLayout",list ); 2886 config->writeEntry("EditEventLayout",list );
2876 2887
2877 wid = mTodoEditor; 2888 wid = mTodoEditor;
2878 x = wid->geometry().x(); 2889 x = wid->geometry().x();
2879 y = wid->geometry().y(); 2890 y = wid->geometry().y();
2880 w = wid->width(); 2891 w = wid->width();
2881 h = wid->height(); 2892 h = wid->height();
2882 list.clear(); 2893 list.clear();
2883 list << QString::number( x ); 2894 list << QString::number( x );
2884 list << QString::number( y ); 2895 list << QString::number( y );
2885 list << QString::number( w ); 2896 list << QString::number( w );
2886 list << QString::number( h ); 2897 list << QString::number( h );
2887 config->writeEntry("EditTodoLayout",list ); 2898 config->writeEntry("EditTodoLayout",list );
2888 wid = getEventViewerDialog(); 2899 wid = getEventViewerDialog();
2889 x = wid->geometry().x(); 2900 x = wid->geometry().x();
2890 y = wid->geometry().y(); 2901 y = wid->geometry().y();
2891 w = wid->width(); 2902 w = wid->width();
2892 h = wid->height(); 2903 h = wid->height();
2893 list.clear(); 2904 list.clear();
2894 list << QString::number( x ); 2905 list << QString::number( x );
2895 list << QString::number( y ); 2906 list << QString::number( y );
2896 list << QString::number( w ); 2907 list << QString::number( w );
2897 list << QString::number( h ); 2908 list << QString::number( h );
2898 config->writeEntry("ViewerLayout",list ); 2909 config->writeEntry("ViewerLayout",list );
2899 wid = mDialogManager->getSearchDialog(); 2910 wid = mDialogManager->getSearchDialog();
2900 if ( wid ) { 2911 if ( wid ) {
2901 x = wid->geometry().x(); 2912 x = wid->geometry().x();
2902 y = wid->geometry().y(); 2913 y = wid->geometry().y();
2903 w = wid->width(); 2914 w = wid->width();
2904 h = wid->height(); 2915 h = wid->height();
2905 list.clear(); 2916 list.clear();
2906 list << QString::number( x ); 2917 list << QString::number( x );
2907 list << QString::number( y ); 2918 list << QString::number( y );
2908 list << QString::number( w ); 2919 list << QString::number( w );
2909 list << QString::number( h ); 2920 list << QString::number( h );
2910 config->writeEntry("SearchLayout",list ); 2921 config->writeEntry("SearchLayout",list );
2911 } 2922 }
2912#endif 2923#endif
2913 2924
2914 2925
2915 config->sync(); 2926 config->sync();
2916} 2927}
2917 2928
2918void CalendarView::readFilterSettings(KConfig *config) 2929void CalendarView::readFilterSettings(KConfig *config)
2919{ 2930{
2920 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2931 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2921 2932
2922 mFilters.clear(); 2933 mFilters.clear();
2923 2934
2924 config->setGroup("General"); 2935 config->setGroup("General");
2925 QStringList filterList = config->readListEntry("CalendarFilters"); 2936 QStringList filterList = config->readListEntry("CalendarFilters");
2926 2937
2927 QStringList::ConstIterator it = filterList.begin(); 2938 QStringList::ConstIterator it = filterList.begin();
2928 QStringList::ConstIterator end = filterList.end(); 2939 QStringList::ConstIterator end = filterList.end();
2929 while(it != end) { 2940 while(it != end) {
2930 // kdDebug() << " filter: " << (*it) << endl; 2941 // kdDebug() << " filter: " << (*it) << endl;
2931 2942
2932 CalFilter *filter; 2943 CalFilter *filter;
2933 filter = new CalFilter(*it); 2944 filter = new CalFilter(*it);
2934 config->setGroup("Filter_" + (*it).utf8()); 2945 config->setGroup("Filter_" + (*it).utf8());
2935 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2946 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2936 filter->setCriteria(config->readNumEntry("Criteria",0)); 2947 filter->setCriteria(config->readNumEntry("Criteria",0));
2937 filter->setCategoryList(config->readListEntry("CategoryList")); 2948 filter->setCategoryList(config->readListEntry("CategoryList"));
2938 mFilters.append(filter); 2949 mFilters.append(filter);
2939 2950
2940 ++it; 2951 ++it;
2941 } 2952 }
2942 2953
2943 if (mFilters.count() == 0) { 2954 if (mFilters.count() == 0) {
2944 CalFilter *filter = new CalFilter(i18n("Default")); 2955 CalFilter *filter = new CalFilter(i18n("Default"));
2945 mFilters.append(filter); 2956 mFilters.append(filter);
2946 } 2957 }
2947 mFilterView->updateFilters(); 2958 mFilterView->updateFilters();
2948 config->setGroup("FilterView"); 2959 config->setGroup("FilterView");
2949 2960
2950 mFilterView->blockSignals(true); 2961 mFilterView->blockSignals(true);
2951 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2962 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2952 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2963 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2953 mFilterView->blockSignals(false); 2964 mFilterView->blockSignals(false);
2954 // We do it manually to avoid it being done twice by the above calls 2965 // We do it manually to avoid it being done twice by the above calls
2955 updateFilter(); 2966 updateFilter();
2956} 2967}
2957 2968
2958void CalendarView::writeFilterSettings(KConfig *config) 2969void CalendarView::writeFilterSettings(KConfig *config)
2959{ 2970{
2960 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2971 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2961 2972
2962 QStringList filterList; 2973 QStringList filterList;
2963 2974
2964 CalFilter *filter = mFilters.first(); 2975 CalFilter *filter = mFilters.first();
2965 while(filter) { 2976 while(filter) {
2966 // kdDebug() << " fn: " << filter->name() << endl; 2977 // kdDebug() << " fn: " << filter->name() << endl;
2967 filterList << filter->name(); 2978 filterList << filter->name();
2968 config->setGroup("Filter_" + filter->name().utf8()); 2979 config->setGroup("Filter_" + filter->name().utf8());
2969 config->writeEntry("Criteria",filter->criteria()); 2980 config->writeEntry("Criteria",filter->criteria());
2970 config->writeEntry("CategoryList",filter->categoryList()); 2981 config->writeEntry("CategoryList",filter->categoryList());
2971 filter = mFilters.next(); 2982 filter = mFilters.next();
2972 } 2983 }
2973 config->setGroup("General"); 2984 config->setGroup("General");
2974 config->writeEntry("CalendarFilters",filterList); 2985 config->writeEntry("CalendarFilters",filterList);
2975 2986
2976 config->setGroup("FilterView"); 2987 config->setGroup("FilterView");
2977 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2988 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2978 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2989 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2979} 2990}
2980 2991
2981 2992
2982void CalendarView::goToday() 2993void CalendarView::goToday()
2983{ 2994{
2984 if ( mViewManager->currentView()->isMonthView() ) 2995 if ( mViewManager->currentView()->isMonthView() )
2985 mNavigator->selectTodayMonth(); 2996 mNavigator->selectTodayMonth();
2986 else 2997 else
2987 mNavigator->selectToday(); 2998 mNavigator->selectToday();
2988} 2999}
2989 3000
2990void CalendarView::goNext() 3001void CalendarView::goNext()
2991{ 3002{
2992 mNavigator->selectNext(); 3003 mNavigator->selectNext();
2993} 3004}
2994 3005
2995void CalendarView::goPrevious() 3006void CalendarView::goPrevious()
2996{ 3007{
2997 mNavigator->selectPrevious(); 3008 mNavigator->selectPrevious();
2998} 3009}
2999void CalendarView::goNextMonth() 3010void CalendarView::goNextMonth()
3000{ 3011{
3001 mNavigator->selectNextMonth(); 3012 mNavigator->selectNextMonth();
3002} 3013}
3003 3014
3004void CalendarView::goPreviousMonth() 3015void CalendarView::goPreviousMonth()
3005{ 3016{
3006 mNavigator->selectPreviousMonth(); 3017 mNavigator->selectPreviousMonth();
3007} 3018}
3008 3019
3009void CalendarView::updateConfig() 3020void CalendarView::updateConfig()
3010{ 3021{
3011 if ( KOPrefs::instance()->mUseAppColors ) 3022 if ( KOPrefs::instance()->mUseAppColors )
3012 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 3023 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
3013 emit configChanged(); 3024 emit configChanged();
3014 mTodoList->updateConfig(); 3025 mTodoList->updateConfig();
3015 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 3026 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
3016 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3027 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3017 // To make the "fill window" configurations work 3028 // To make the "fill window" configurations work
3018 //mViewManager->raiseCurrentView(); 3029 //mViewManager->raiseCurrentView();
3019} 3030}
3020 3031
3021 3032
3022void CalendarView::eventChanged(Event *event) 3033void CalendarView::eventChanged(Event *event)
3023{ 3034{
3024 changeEventDisplay(event,KOGlobals::EVENTEDITED); 3035 changeEventDisplay(event,KOGlobals::EVENTEDITED);
3025 //updateUnmanagedViews(); 3036 //updateUnmanagedViews();
3026} 3037}
3027 3038
3028void CalendarView::eventAdded(Event *event) 3039void CalendarView::eventAdded(Event *event)
3029{ 3040{
3030 changeEventDisplay(event,KOGlobals::EVENTADDED); 3041 changeEventDisplay(event,KOGlobals::EVENTADDED);
3031} 3042}
3032 3043
3033void CalendarView::eventToBeDeleted(Event *) 3044void CalendarView::eventToBeDeleted(Event *)
3034{ 3045{
3035 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 3046 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
3036} 3047}
3037 3048
3038void CalendarView::eventDeleted() 3049void CalendarView::eventDeleted()
3039{ 3050{
3040 changeEventDisplay(0,KOGlobals::EVENTDELETED); 3051 changeEventDisplay(0,KOGlobals::EVENTDELETED);
3041} 3052}
3042void CalendarView::changeTodoDisplay(Todo *which, int action) 3053void CalendarView::changeTodoDisplay(Todo *which, int action)
3043{ 3054{
3044 changeIncidenceDisplay((Incidence *)which, action); 3055 changeIncidenceDisplay((Incidence *)which, action);
3045 mDateNavigator->updateView(); //LR 3056 mDateNavigator->updateView(); //LR
3046 //mDialogManager->updateSearchDialog(); 3057 //mDialogManager->updateSearchDialog();
3047 3058
3048 if (which) { 3059 if (which) {
3049 mViewManager->updateWNview(); 3060 mViewManager->updateWNview();
3050 //mTodoList->updateView(); 3061 //mTodoList->updateView();
3051 } 3062 }
3052 3063
3053} 3064}
3054 3065
3055void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 3066void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
3056{ 3067{
3057 updateUnmanagedViews(); 3068 updateUnmanagedViews();
3058 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 3069 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
3059 if ( action == KOGlobals::EVENTDELETED ) { //delete 3070 if ( action == KOGlobals::EVENTDELETED ) { //delete
3060 mCalendar->checkAlarmForIncidence( 0, true ); 3071 mCalendar->checkAlarmForIncidence( 0, true );
3061 if ( mEventViewerDialog ) 3072 if ( mEventViewerDialog )
3062 mEventViewerDialog->hide(); 3073 mEventViewerDialog->hide();
3063 } 3074 }
3064 else 3075 else
3065 mCalendar->checkAlarmForIncidence( which , false ); 3076 mCalendar->checkAlarmForIncidence( which , false );
3066} 3077}
3067 3078
3068// most of the changeEventDisplays() right now just call the view's 3079// most of the changeEventDisplays() right now just call the view's
3069// total update mode, but they SHOULD be recoded to be more refresh-efficient. 3080// total update mode, but they SHOULD be recoded to be more refresh-efficient.
3070void CalendarView::changeEventDisplay(Event *which, int action) 3081void CalendarView::changeEventDisplay(Event *which, int action)
3071{ 3082{
3072 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 3083 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
3073 changeIncidenceDisplay((Incidence *)which, action); 3084 changeIncidenceDisplay((Incidence *)which, action);
3074 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3085 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3075 if ( flag_clearallviewsEventDisplay ) { 3086 if ( flag_clearallviewsEventDisplay ) {
3076 clearAllViews(); 3087 clearAllViews();
3077 flag_clearallviewsEventDisplay = false; 3088 flag_clearallviewsEventDisplay = false;
3078 } 3089 }
3079 return; 3090 return;
3080 } 3091 }
3081 flag_clearallviewsEventDisplay = true; 3092 flag_clearallviewsEventDisplay = true;
3082 mDateNavigator->updateView(); 3093 mDateNavigator->updateView();
3083 //mDialogManager->updateSearchDialog(); 3094 //mDialogManager->updateSearchDialog();
3084 if (which) { 3095 if (which) {
3085 // If there is an event view visible update the display 3096 // If there is an event view visible update the display
3086 mViewManager->currentView()->changeEventDisplay(which,action); 3097 mViewManager->currentView()->changeEventDisplay(which,action);
3087 // TODO: check, if update needed 3098 // TODO: check, if update needed
3088 // if (which->getTodoStatus()) { 3099 // if (which->getTodoStatus()) {
3089 mTodoList->updateView(); 3100 mTodoList->updateView();
3090 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) { 3101 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) {
3091 mConflictingEvent = which ; 3102 mConflictingEvent = which ;
3092 int time = 1000; 3103 int time = 1000;
3093#ifdef DESKTOP_VERSION 3104#ifdef DESKTOP_VERSION
3094 time = 500; 3105 time = 500;
3095#endif 3106#endif
3096 bool checkC = false; 3107 bool checkC = false;
3097 if ( mConflictingEvent->doesFloat() ) { 3108 if ( mConflictingEvent->doesFloat() ) {
3098 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay 3109 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay
3099 || KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3110 || KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3100 } else { 3111 } else {
3101 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay 3112 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay
3102 || KOPrefs::instance()->mCheckConflictsNonADNonAD; 3113 || KOPrefs::instance()->mCheckConflictsNonADNonAD;
3103 } 3114 }
3104 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent ) 3115 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent )
3105 checkC = false; 3116 checkC = false;
3106 if ( checkC ) 3117 if ( checkC )
3107 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3118 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
3108 } 3119 }
3109 // } 3120 // }
3110 } else { 3121 } else {
3111 mViewManager->currentView()->updateView(); 3122 mViewManager->currentView()->updateView();
3112 } 3123 }
3113} 3124}
3114void CalendarView::checkConflictForEvent() 3125void CalendarView::checkConflictForEvent()
3115{ 3126{
3116 3127
3117 if (!KOPrefs::instance()->mConfirm) 3128 if (!KOPrefs::instance()->mConfirm)
3118 return; 3129 return;
3119 if ( ! mConflictingEvent ) return; 3130 if ( ! mConflictingEvent ) return;
3120 Event * conflictingEvent = mConflictingEvent; 3131 Event * conflictingEvent = mConflictingEvent;
3121 mConflictingEvent = 0; 3132 mConflictingEvent = 0;
3122 QDateTime current = QDateTime::currentDateTime(); 3133 QDateTime current = QDateTime::currentDateTime();
3123 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3134 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3124 return; 3135 return;
3125 } 3136 }
3126 CalFilter *filterIN = 0; 3137 CalFilter *filterIN = 0;
3127 CalFilter *filterALL = 0; 3138 CalFilter *filterALL = 0;
3128 CalFilter *filter = mFilters.first(); 3139 CalFilter *filter = mFilters.first();
3129 while(filter) { 3140 while(filter) {
3130 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem) 3141 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem)
3131 filterIN = filter; 3142 filterIN = filter;
3132 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem ) 3143 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem )
3133 filterALL = filter; 3144 filterALL = filter;
3134 filter = mFilters.next(); 3145 filter = mFilters.next();
3135 } 3146 }
3136 if ( filterIN ) { 3147 if ( filterIN ) {
3137 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) { 3148 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) {
3138 return; 3149 return;
3139 } 3150 }
3140 } 3151 }
3141 QPtrList<Event> testlist = mCalendar->events(); 3152 QPtrList<Event> testlist = mCalendar->events();
3142 Event * test = testlist.first(); 3153 Event * test = testlist.first();
3143 QDateTime conflict; 3154 QDateTime conflict;
3144 QDateTime retVal; 3155 QDateTime retVal;
3145 bool found = false; 3156 bool found = false;
3146 Event * cE = 0; 3157 Event * cE = 0;
3147 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay; 3158 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay;
3148 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3159 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3149 if ( !conflictingEvent->doesFloat() ) { 3160 if ( !conflictingEvent->doesFloat() ) {
3150 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay; 3161 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay;
3151 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD; 3162 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD;
3152 } 3163 }
3153 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3164 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3154 while ( test ) { 3165 while ( test ) {
3155 qApp->processEvents(); 3166 qApp->processEvents();
3156 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad ); 3167 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad );
3157 3168
3158 if ( !skip ) { 3169 if ( !skip ) {
3159 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent ) 3170 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent )
3160 skip = true; 3171 skip = true;
3161 } 3172 }
3162 if ( !skip ) { 3173 if ( !skip ) {
3163 if ( filterALL ) { 3174 if ( filterALL ) {
3164 if ( !filterALL->filterCalendarItem( test ) ) { 3175 if ( !filterALL->filterCalendarItem( test ) ) {
3165 skip = true; 3176 skip = true;
3166 } 3177 }
3167 } 3178 }
3168 if ( !skip ) { 3179 if ( !skip ) {
3169 if ( found ) 3180 if ( found )
3170 skip = !test->matchTime( &current, &conflict ); 3181 skip = !test->matchTime( &current, &conflict );
3171 else 3182 else
3172 skip = !test->matchTime( &current, 0 ); 3183 skip = !test->matchTime( &current, 0 );
3173 if ( !skip ) { 3184 if ( !skip ) {
3174 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3185 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3175 if ( ! found ) { 3186 if ( ! found ) {
3176 conflict = retVal; 3187 conflict = retVal;
3177 cE = test; 3188 cE = test;
3178 } else { 3189 } else {
3179 if ( retVal < conflict ) { 3190 if ( retVal < conflict ) {
3180 conflict = retVal; 3191 conflict = retVal;
3181 cE = test; 3192 cE = test;
3182 } 3193 }
3183 } 3194 }
3184 found = true; 3195 found = true;
3185 } 3196 }
3186 } 3197 }
3187 } 3198 }
3188 } 3199 }
3189 test = testlist.next(); 3200 test = testlist.next();
3190 } 3201 }
3191 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3202 topLevelWidget()->setCaption( i18n("KO/Pi") );
3192 if ( found ) { 3203 if ( found ) {
3193 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 3204 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
3194 qApp->processEvents(); 3205 qApp->processEvents();
3195 int km = KMessageBox::warningContinueCancel(this,mess, 3206 int km = KMessageBox::warningContinueCancel(this,mess,
3196 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!")); 3207 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!"));
3197 if ( km != KMessageBox::Continue ) { 3208 if ( km != KMessageBox::Continue ) {
3198 return; 3209 return;
3199 } 3210 }
3200 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3211 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3201 mViewManager->showDayView(); 3212 mViewManager->showDayView();
3202 mNavigator->slotDaySelect( conflict.date() ); 3213 mNavigator->slotDaySelect( conflict.date() );
3203 int hour = conflict.time().hour(); 3214 int hour = conflict.time().hour();
3204 mViewManager->agendaView()->setStartHour( hour ); 3215 mViewManager->agendaView()->setStartHour( hour );
3205 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3216 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3206 } else 3217 } else
3207 topLevelWidget()->setCaption( i18n("No conflict found") ); 3218 topLevelWidget()->setCaption( i18n("No conflict found") );
3208 return; 3219 return;
3209 3220
3210} 3221}
3211 3222
3212void CalendarView::updateTodoViews() 3223void CalendarView::updateTodoViews()
3213{ 3224{
3214 mTodoList->updateView(); 3225 mTodoList->updateView();
3215 mViewManager->currentView()->updateView(); 3226 mViewManager->currentView()->updateView();
3216 3227
3217} 3228}
3218 3229
3219 3230
3220 3231
3221void CalendarView::clearAllViews() 3232void CalendarView::clearAllViews()
3222{ 3233{
3223 mTodoList->clearList(); 3234 mTodoList->clearList();
3224 mViewManager->clearAllViews(); 3235 mViewManager->clearAllViews();
3225 SearchDialog * sd = mDialogManager->getSearchDialog(); 3236 SearchDialog * sd = mDialogManager->getSearchDialog();
3226 if ( sd ) { 3237 if ( sd ) {
3227 KOListView* kol = sd->listview(); 3238 KOListView* kol = sd->listview();
3228 if ( kol ) 3239 if ( kol )
3229 kol->clearList(); 3240 kol->clearList();
3230 } 3241 }
3231} 3242}
3232void CalendarView::updateView() 3243void CalendarView::updateView()
3233{ 3244{
3234 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3245 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3235 if ( flag_clearallviewsupdateView ) { 3246 if ( flag_clearallviewsupdateView ) {
3236 clearAllViews(); 3247 clearAllViews();
3237 flag_clearallviewsupdateView = false; 3248 flag_clearallviewsupdateView = false;
3238 } 3249 }
3239 return; 3250 return;
3240 } 3251 }
3241 flag_clearallviewsupdateView = true; 3252 flag_clearallviewsupdateView = true;
3242 DateList tmpList = mNavigator->selectedDates(); 3253 DateList tmpList = mNavigator->selectedDates();
3243 3254
3244 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3255 if ( KOPrefs::instance()->mHideNonStartedTodos )
3245 mTodoList->updateView(); 3256 mTodoList->updateView();
3246 // We assume that the navigator only selects consecutive days. 3257 // We assume that the navigator only selects consecutive days.
3247 updateView( tmpList.first(), tmpList.last() ); 3258 updateView( tmpList.first(), tmpList.last() );
3248} 3259}
3249 3260
3250void CalendarView::updateUnmanagedViews() 3261void CalendarView::updateUnmanagedViews()
3251{ 3262{
3252 mDateNavigator->updateDayMatrix(); 3263 mDateNavigator->updateDayMatrix();
3253} 3264}
3254 3265
3255int CalendarView::msgItemDelete(const QString name) 3266int CalendarView::msgItemDelete(const QString name)
3256{ 3267{
3257 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3268 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3258 i18n("This item will be\npermanently deleted."), 3269 i18n("This item will be\npermanently deleted."),
3259 i18n("KO/Pi Confirmation"),i18n("Delete")); 3270 i18n("KO/Pi Confirmation"),i18n("Delete"));
3260} 3271}
3261 3272
3262 3273
3263void CalendarView::edit_cut() 3274void CalendarView::edit_cut()
3264{ 3275{
3265 Event *anEvent=0; 3276 Event *anEvent=0;
3266 3277
3267 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3278 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3268 3279
3269 if (mViewManager->currentView()->isEventView()) { 3280 if (mViewManager->currentView()->isEventView()) {
3270 if ( incidence && incidence->typeID() == eventID ) { 3281 if ( incidence && incidence->typeID() == eventID ) {
3271 anEvent = static_cast<Event *>(incidence); 3282 anEvent = static_cast<Event *>(incidence);
3272 } 3283 }
3273 } 3284 }
3274 3285
3275 if (!anEvent) { 3286 if (!anEvent) {
3276 KNotifyClient::beep(); 3287 KNotifyClient::beep();
3277 return; 3288 return;
3278 } 3289 }
3279 DndFactory factory( mCalendar ); 3290 DndFactory factory( mCalendar );
3280 factory.cutIncidence(anEvent); 3291 factory.cutIncidence(anEvent);
3281 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3292 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3282} 3293}
3283 3294
3284void CalendarView::edit_copy() 3295void CalendarView::edit_copy()
3285{ 3296{
3286 Event *anEvent=0; 3297 Event *anEvent=0;
3287 3298
3288 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3299 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3289 3300
3290 if (mViewManager->currentView()->isEventView()) { 3301 if (mViewManager->currentView()->isEventView()) {
3291 if ( incidence && incidence->typeID() == eventID ) { 3302 if ( incidence && incidence->typeID() == eventID ) {
3292 anEvent = static_cast<Event *>(incidence); 3303 anEvent = static_cast<Event *>(incidence);
3293 } 3304 }
3294 } 3305 }
3295 3306
3296 if (!anEvent) { 3307 if (!anEvent) {
3297 KNotifyClient::beep(); 3308 KNotifyClient::beep();
3298 return; 3309 return;
3299 } 3310 }
3300 DndFactory factory( mCalendar ); 3311 DndFactory factory( mCalendar );
3301 factory.copyIncidence(anEvent); 3312 factory.copyIncidence(anEvent);
3302} 3313}
3303 3314
3304void CalendarView::edit_paste() 3315void CalendarView::edit_paste()
3305{ 3316{
3306 QDate date = mNavigator->selectedDates().first(); 3317 QDate date = mNavigator->selectedDates().first();
3307 3318
3308 DndFactory factory( mCalendar ); 3319 DndFactory factory( mCalendar );
3309 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3320 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3310 3321
3311 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3322 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3312} 3323}
3313void CalendarView::edit_global_options() 3324void CalendarView::edit_global_options()
3314{ 3325{
3315 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3326 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3316 emit save(); 3327 emit save();
3317 emit saveStopTimer(); 3328 emit saveStopTimer();
3318 mDialogManager->showGlobalOptionsDialog(); 3329 mDialogManager->showGlobalOptionsDialog();
3319 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3330 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3320 emit saveStopTimer(); 3331 emit saveStopTimer();
3321 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 3332 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
3322 i18n("Timezone settings"),i18n("Reload"))) { 3333 i18n("Timezone settings"),i18n("Reload"))) {
3323 qDebug("KO: TZ reload cancelled "); 3334 qDebug("KO: TZ reload cancelled ");
3324 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3335 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3325 return; 3336 return;
3326 } 3337 }
3327 qDebug("KO: Timezone change "); 3338 qDebug("KO: Timezone change ");
3328 loadCalendars(); 3339 loadCalendars();
3329 setModified(true); 3340 setModified(true);
3330 } 3341 }
3331 else 3342 else
3332 qDebug("KO: No tz change "); 3343 qDebug("KO: No tz change ");
3333} 3344}
3334void CalendarView::edit_options() 3345void CalendarView::edit_options()
3335{ 3346{
3336 mDialogManager->showOptionsDialog(); 3347 mDialogManager->showOptionsDialog();
3337} 3348}
3338 3349
3339 3350
3340void CalendarView::slotSelectPickerDate( QDate d) 3351void CalendarView::slotSelectPickerDate( QDate d)
3341{ 3352{
3342 mDateFrame->hide(); 3353 mDateFrame->hide();
3343 if ( mDatePickerMode == 1 ) { 3354 if ( mDatePickerMode == 1 ) {
3344 mNavigator->slotDaySelect( d ); 3355 mNavigator->slotDaySelect( d );
3345 } else if ( mDatePickerMode == 2 ) { 3356 } else if ( mDatePickerMode == 2 ) {
3346 if ( mMoveIncidence->typeID() == todoID ) { 3357 if ( mMoveIncidence->typeID() == todoID ) {
3347 Todo * to = (Todo *) mMoveIncidence; 3358 Todo * to = (Todo *) mMoveIncidence;
3348 QTime tim; 3359 QTime tim;
3349 int len = 0; 3360 int len = 0;
3350 if ( to->hasStartDate() && to->hasDueDate() ) 3361 if ( to->hasStartDate() && to->hasDueDate() )
3351 len = to->dtStart().secsTo( to->dtDue()); 3362 len = to->dtStart().secsTo( to->dtDue());
3352 if ( to->hasDueDate() ) 3363 if ( to->hasDueDate() )
3353 tim = to->dtDue().time(); 3364 tim = to->dtDue().time();
3354 else { 3365 else {
3355 tim = QTime ( 0,0,0 ); 3366 tim = QTime ( 0,0,0 );
3356 to->setFloats( true ); 3367 to->setFloats( true );
3357 to->setHasDueDate( true ); 3368 to->setHasDueDate( true );
3358 } 3369 }
3359 QDateTime dt ( d,tim ); 3370 QDateTime dt ( d,tim );
3360 to->setDtDue( dt ); 3371 to->setDtDue( dt );
3361 3372
3362 if ( to->hasStartDate() ) { 3373 if ( to->hasStartDate() ) {
3363 if ( len>0 ) 3374 if ( len>0 )
3364 to->setDtStart(to->dtDue().addSecs( -len )); 3375 to->setDtStart(to->dtDue().addSecs( -len ));
3365 else 3376 else
3366 if (to->dtStart() > to->dtDue() ) 3377 if (to->dtStart() > to->dtDue() )
3367 to->setDtStart(to->dtDue().addDays( -3 )); 3378 to->setDtStart(to->dtDue().addDays( -3 ));
3368 } 3379 }
3369 3380
3370 todoChanged( to ); 3381 todoChanged( to );
3371 } else if ( mMoveIncidence->typeID() == eventID ) { 3382 } else if ( mMoveIncidence->typeID() == eventID ) {
3372 if ( mMoveIncidence->doesRecur() ) { 3383 if ( mMoveIncidence->doesRecur() ) {
3373#if 0 3384#if 0
3374 // PENDING implement this 3385 // PENDING implement this
3375 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3386 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3376 mCalendar()->addIncidence( newInc ); 3387 mCalendar()->addIncidence( newInc );
3377 if ( mMoveIncidence->typeID() == todoID ) 3388 if ( mMoveIncidence->typeID() == todoID )
3378 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3389 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3379 else 3390 else
3380 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3391 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3381 mMoveIncidence = newInc; 3392 mMoveIncidence = newInc;
3382 3393
3383#endif 3394#endif
3384 } 3395 }
3385 QTime tim = mMoveIncidence->dtStart().time(); 3396 QTime tim = mMoveIncidence->dtStart().time();
3386 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3397 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3387 QDateTime dt ( d,tim ); 3398 QDateTime dt ( d,tim );
3388 mMoveIncidence->setDtStart( dt ); 3399 mMoveIncidence->setDtStart( dt );
3389 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3400 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3390 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3401 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3391 } else if ( mMoveIncidence->typeID() == journalID ) { 3402 } else if ( mMoveIncidence->typeID() == journalID ) {
3392 QTime tim = mMoveIncidence->dtStart().time(); 3403 QTime tim = mMoveIncidence->dtStart().time();
3393 QDateTime dt ( d,tim ); 3404 QDateTime dt ( d,tim );
3394 mMoveIncidence->setDtStart( dt ); 3405 mMoveIncidence->setDtStart( dt );
3395 updateView(); 3406 updateView();
3396 } 3407 }
3397 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3408 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3398 } 3409 }
3399} 3410}
3400 3411
3401void CalendarView::removeCategories() 3412void CalendarView::removeCategories()
3402{ 3413{
3403 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3414 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3404 QStringList catList = KOPrefs::instance()->mCustomCategories; 3415 QStringList catList = KOPrefs::instance()->mCustomCategories;
3405 QStringList catIncList; 3416 QStringList catIncList;
3406 QStringList newCatList; 3417 QStringList newCatList;
3407 Incidence* inc = incList.first(); 3418 Incidence* inc = incList.first();
3408 uint i; 3419 uint i;
3409 while ( inc ) { 3420 while ( inc ) {
3410 newCatList.clear(); 3421 newCatList.clear();
3411 catIncList = inc->categories() ; 3422 catIncList = inc->categories() ;
3412 for( i = 0; i< catIncList.count(); ++i ) { 3423 for( i = 0; i< catIncList.count(); ++i ) {
3413 if ( catList.contains (catIncList[i])) 3424 if ( catList.contains (catIncList[i]))
3414 newCatList.append( catIncList[i] ); 3425 newCatList.append( catIncList[i] );
3415 } 3426 }
3416 newCatList.sort(); 3427 newCatList.sort();
3417 inc->setCategories( newCatList.join(",") ); 3428 inc->setCategories( newCatList.join(",") );
3418 inc = incList.next(); 3429 inc = incList.next();
3419 } 3430 }
3420} 3431}
3421 3432
3422int CalendarView::addCategories() 3433int CalendarView::addCategories()
3423{ 3434{
3424 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3435 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3425 QStringList catList = KOPrefs::instance()->mCustomCategories; 3436 QStringList catList = KOPrefs::instance()->mCustomCategories;
3426 QStringList catIncList; 3437 QStringList catIncList;
3427 Incidence* inc = incList.first(); 3438 Incidence* inc = incList.first();
3428 uint i; 3439 uint i;
3429 int count = 0; 3440 int count = 0;
3430 while ( inc ) { 3441 while ( inc ) {
3431 catIncList = inc->categories() ; 3442 catIncList = inc->categories() ;
3432 for( i = 0; i< catIncList.count(); ++i ) { 3443 for( i = 0; i< catIncList.count(); ++i ) {
3433 if ( !catList.contains (catIncList[i])) { 3444 if ( !catList.contains (catIncList[i])) {
3434 catList.append( catIncList[i] ); 3445 catList.append( catIncList[i] );
3435 //qDebug("add cat %s ", catIncList[i].latin1()); 3446 //qDebug("add cat %s ", catIncList[i].latin1());
3436 ++count; 3447 ++count;
3437 } 3448 }
3438 } 3449 }
3439 inc = incList.next(); 3450 inc = incList.next();
3440 } 3451 }
3441 catList.sort(); 3452 catList.sort();
3442 KOPrefs::instance()->mCustomCategories = catList; 3453 KOPrefs::instance()->mCustomCategories = catList;
3443 return count; 3454 return count;
3444} 3455}
3445 3456
3446void CalendarView::editCategories() 3457void CalendarView::editCategories()
3447{ 3458{
3448 qDebug("CalendarView::editCategories() "); 3459 qDebug("CalendarView::editCategories() ");
3449 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3460 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3450 ced.exec(); 3461 ced.exec();
3451} 3462}
3452void CalendarView::manageCategories() 3463void CalendarView::manageCategories()
3453{ 3464{
3454 KOCatPrefs* cp = new KOCatPrefs(); 3465 KOCatPrefs* cp = new KOCatPrefs();
3455 cp->show(); 3466 cp->show();
3456 int w =cp->sizeHint().width() ; 3467 int w =cp->sizeHint().width() ;
3457 int h = cp->sizeHint().height() ; 3468 int h = cp->sizeHint().height() ;
3458 int dw = QApplication::desktop()->width(); 3469 int dw = QApplication::desktop()->width();
3459 int dh = QApplication::desktop()->height(); 3470 int dh = QApplication::desktop()->height();
3460 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3471 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3461 if ( !cp->exec() ) { 3472 if ( !cp->exec() ) {
3462 delete cp; 3473 delete cp;
3463 return; 3474 return;
3464 } 3475 }
3465 int count = 0; 3476 int count = 0;
3466 if ( cp->addCat() ) { 3477 if ( cp->addCat() ) {
3467 count = addCategories(); 3478 count = addCategories();
3468 if ( count ) { 3479 if ( count ) {
3469 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3480 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3470 writeSettings(); 3481 writeSettings();
3471 } else 3482 } else
3472 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3483 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3473 } else { 3484 } else {
3474 removeCategories(); 3485 removeCategories();
3475 updateView(); 3486 updateView();
3476 } 3487 }
3477 delete cp; 3488 delete cp;
3478} 3489}
3479 3490
3480void CalendarView::beamIncidence(Incidence * Inc) 3491void CalendarView::beamIncidence(Incidence * Inc)
3481{ 3492{
3482 QPtrList<Incidence> delSel ; 3493 QPtrList<Incidence> delSel ;
3483 delSel.append(Inc); 3494 delSel.append(Inc);
3484 beamIncidenceList( delSel ); 3495 beamIncidenceList( delSel );
3485} 3496}
3486void CalendarView::beamCalendar() 3497void CalendarView::beamCalendar()
3487{ 3498{
3488 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3499 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3489 //qDebug("beamCalendar() "); 3500 //qDebug("beamCalendar() ");
3490 beamIncidenceList( delSel ); 3501 beamIncidenceList( delSel );
3491} 3502}
3492void CalendarView::beamFilteredCalendar() 3503void CalendarView::beamFilteredCalendar()
3493{ 3504{
3494 QPtrList<Incidence> delSel = mCalendar->incidences(); 3505 QPtrList<Incidence> delSel = mCalendar->incidences();
3495 //qDebug("beamFilteredCalendar() "); 3506 //qDebug("beamFilteredCalendar() ");
3496 beamIncidenceList( delSel ); 3507 beamIncidenceList( delSel );
3497} 3508}
3498void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3509void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3499{ 3510{
3500 3511
3501 KOBeamPrefs beamDialog; 3512 KOBeamPrefs beamDialog;
3502 if ( beamDialog.exec () == QDialog::Rejected ) 3513 if ( beamDialog.exec () == QDialog::Rejected )
3503 return; 3514 return;
3504#ifdef DESKTOP_VERSION 3515#ifdef DESKTOP_VERSION
3505 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3516 QString fn = locateLocal( "tmp", "kopibeamfile" );
3506#else 3517#else
3507 QString fn = "/tmp/kopibeamfile"; 3518 QString fn = "/tmp/kopibeamfile";
3508#endif 3519#endif
3509 QString mes; 3520 QString mes;
3510 bool createbup = true; 3521 bool createbup = true;
3511 if ( createbup ) { 3522 if ( createbup ) {
3512 QString description = "\n"; 3523 QString description = "\n";
3513 CalendarLocal* cal = new CalendarLocal(); 3524 CalendarLocal* cal = new CalendarLocal();
3514 if ( beamDialog.beamLocal() ) 3525 if ( beamDialog.beamLocal() )
3515 cal->setLocalTime(); 3526 cal->setLocalTime();
3516 else 3527 else
3517 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3528 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3518 Incidence *incidence = delSel.first(); 3529 Incidence *incidence = delSel.first();
3519 bool addText = false; 3530 bool addText = false;
3520 if ( delSel.count() < 10 ) 3531 if ( delSel.count() < 10 )
3521 addText = true; 3532 addText = true;
3522 else { 3533 else {
3523 description.sprintf(i18n(" %d items?"),delSel.count() ); 3534 description.sprintf(i18n(" %d items?"),delSel.count() );
3524 } 3535 }
3525 while ( incidence ) { 3536 while ( incidence ) {
3526 Incidence *in = incidence->clone(); 3537 Incidence *in = incidence->clone();
3527 if ( ! in->summary().isEmpty() ) { 3538 if ( ! in->summary().isEmpty() ) {
3528 in->setDescription(""); 3539 in->setDescription("");
3529 } else { 3540 } else {
3530 in->setSummary( in->description().left(20)); 3541 in->setSummary( in->description().left(20));
3531 in->setDescription(""); 3542 in->setDescription("");
3532 } 3543 }
3533 if ( addText ) 3544 if ( addText )
3534 description += in->summary() + "\n"; 3545 description += in->summary() + "\n";
3535 cal->addIncidence( in ); 3546 cal->addIncidence( in );
3536 incidence = delSel.next(); 3547 incidence = delSel.next();
3537 } 3548 }
3538 if ( beamDialog.beamVcal() ) { 3549 if ( beamDialog.beamVcal() ) {
3539 fn += ".vcs"; 3550 fn += ".vcs";
3540 FileStorage storage( cal, fn, new VCalFormat ); 3551 FileStorage storage( cal, fn, new VCalFormat );
3541 storage.save(); 3552 storage.save();
3542 } else { 3553 } else {
3543 fn += ".ics"; 3554 fn += ".ics";
3544 FileStorage storage( cal, fn, new ICalFormat( ) ); 3555 FileStorage storage( cal, fn, new ICalFormat( ) );
3545 storage.save(); 3556 storage.save();
3546 } 3557 }
3547 delete cal; 3558 delete cal;
3548 mes = i18n("KO/Pi: Ready for beaming"); 3559 mes = i18n("KO/Pi: Ready for beaming");
3549 topLevelWidget()->setCaption(mes); 3560 topLevelWidget()->setCaption(mes);
3550 KApplication::convert2latin1( fn ); 3561 KApplication::convert2latin1( fn );
3551#ifndef DESKTOP_VERSION 3562#ifndef DESKTOP_VERSION
3552 Ir *ir = new Ir( this ); 3563 Ir *ir = new Ir( this );
3553 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3564 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3554 ir->send( fn, description, "text/x-vCalendar" ); 3565 ir->send( fn, description, "text/x-vCalendar" );
3555#endif 3566#endif
3556 } 3567 }
3557} 3568}
3558 3569
3559#ifndef DESKTOP_VERSION 3570#ifndef DESKTOP_VERSION
3560void CalendarView::beamDone( Ir *ir ) 3571void CalendarView::beamDone( Ir *ir )
3561{ 3572{
3562 delete ir; 3573 delete ir;
3563 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3574 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3564 topLevelWidget()->raise(); 3575 topLevelWidget()->raise();
3565} 3576}
3566#else 3577#else
3567void CalendarView::beamDone( Ir *){;} 3578void CalendarView::beamDone( Ir *){;}
3568#endif 3579#endif
3569void CalendarView::moveIncidence(Incidence * inc ) 3580void CalendarView::moveIncidence(Incidence * inc )
3570{ 3581{
3571 if ( !inc ) return; 3582 if ( !inc ) return;
3572 showDatePickerPopup(); 3583 showDatePickerPopup();
3573 mDatePickerMode = 2; 3584 mDatePickerMode = 2;
3574 mMoveIncidence = inc ; 3585 mMoveIncidence = inc ;
3575 QDate da; 3586 QDate da;
3576 if ( mMoveIncidence->typeID() == todoID ) { 3587 if ( mMoveIncidence->typeID() == todoID ) {
3577 Todo * to = (Todo *) mMoveIncidence; 3588 Todo * to = (Todo *) mMoveIncidence;
3578 if ( to->hasDueDate() ) 3589 if ( to->hasDueDate() )
3579 da = to->dtDue().date(); 3590 da = to->dtDue().date();
3580 else 3591 else
3581 da = QDate::currentDate(); 3592 da = QDate::currentDate();
3582 } else { 3593 } else {
3583 da = mMoveIncidence->dtStart().date(); 3594 da = mMoveIncidence->dtStart().date();
3584 } 3595 }
3585 //PENDING set date for recurring incidence to date of recurrence 3596 //PENDING set date for recurring incidence to date of recurrence
3586 //mMoveIncidenceOldDate; 3597 //mMoveIncidenceOldDate;
3587 mDatePicker->setDate( da ); 3598 mDatePicker->setDate( da );
3588} 3599}
3589void CalendarView::showDatePickerPopup() 3600void CalendarView::showDatePickerPopup()
3590{ 3601{
3591 if ( mDateFrame->isVisible() ) 3602 if ( mDateFrame->isVisible() )
3592 mDateFrame->hide(); 3603 mDateFrame->hide();
3593 else { 3604 else {
3594 int offX = 0, offY = 0; 3605 int offX = 0, offY = 0;
3595#ifdef DESKTOP_VERSION 3606#ifdef DESKTOP_VERSION
3596 int w =mDatePicker->sizeHint().width() ; 3607 int w =mDatePicker->sizeHint().width() ;
3597 int h = mDatePicker->sizeHint().height() ; 3608 int h = mDatePicker->sizeHint().height() ;
3598 int dw = topLevelWidget()->width(); 3609 int dw = topLevelWidget()->width();
3599 int dh = topLevelWidget()->height(); 3610 int dh = topLevelWidget()->height();
3600 offX = topLevelWidget()->x(); 3611 offX = topLevelWidget()->x();
3601 offY = topLevelWidget()->y(); 3612 offY = topLevelWidget()->y();
3602#else 3613#else
3603 int w =mDatePicker->sizeHint().width() ; 3614 int w =mDatePicker->sizeHint().width() ;
3604 int h = mDatePicker->sizeHint().height() ; 3615 int h = mDatePicker->sizeHint().height() ;
3605 int dw = QApplication::desktop()->width(); 3616 int dw = QApplication::desktop()->width();
3606 int dh = QApplication::desktop()->height(); 3617 int dh = QApplication::desktop()->height();
3607#endif 3618#endif
3608 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3619 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3609 mDateFrame->show(); 3620 mDateFrame->show();
3610 } 3621 }
3611} 3622}
3612void CalendarView::showDatePicker( ) 3623void CalendarView::showDatePicker( )
3613{ 3624{
3614 showDatePickerPopup(); 3625 showDatePickerPopup();
3615 mDatePickerMode = 1; 3626 mDatePickerMode = 1;
3616 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3627 mDatePicker->setDate( mNavigator->selectedDates().first() );
3617} 3628}
3618 3629
3619void CalendarView::showEventEditor() 3630void CalendarView::showEventEditor()
3620{ 3631{
3621#ifdef DESKTOP_VERSION 3632#ifdef DESKTOP_VERSION
3622 int x,y,w,h; 3633 int x,y,w,h;
3623 x = mEventEditor->geometry().x(); 3634 x = mEventEditor->geometry().x();
3624 y = mEventEditor->geometry().y(); 3635 y = mEventEditor->geometry().y();
3625 w = mEventEditor->width(); 3636 w = mEventEditor->width();
3626 h = mEventEditor->height(); 3637 h = mEventEditor->height();
3627 mEventEditor->show(); 3638 mEventEditor->show();
3628 mEventEditor->setGeometry(x,y,w,h); 3639 mEventEditor->setGeometry(x,y,w,h);
3629#else 3640#else
3630 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3641 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3631 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3642 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3632 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3643 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3633 qApp->processEvents(); 3644 qApp->processEvents();
3634 delete mEventEditor; 3645 delete mEventEditor;
3635 mEventEditor = mDialogManager->getEventEditor(); 3646 mEventEditor = mDialogManager->getEventEditor();
3636 topLevelWidget()->setCaption( i18n("") ); 3647 topLevelWidget()->setCaption( i18n("") );
3637 } 3648 }
3638 mEventEditor->showMaximized(); 3649 mEventEditor->showMaximized();
3639#endif 3650#endif
3640} 3651}
3641void CalendarView::showTodoEditor() 3652void CalendarView::showTodoEditor()
3642{ 3653{
3643#ifdef DESKTOP_VERSION 3654#ifdef DESKTOP_VERSION
3644 int x,y,w,h; 3655 int x,y,w,h;
3645 x = mTodoEditor->geometry().x(); 3656 x = mTodoEditor->geometry().x();
3646 y = mTodoEditor->geometry().y(); 3657 y = mTodoEditor->geometry().y();
3647 w = mTodoEditor->width(); 3658 w = mTodoEditor->width();
3648 h = mTodoEditor->height(); 3659 h = mTodoEditor->height();
3649 mTodoEditor->show(); 3660 mTodoEditor->show();
3650 mTodoEditor->setGeometry(x,y,w,h); 3661 mTodoEditor->setGeometry(x,y,w,h);
3651#else 3662#else
3652 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3663 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3653 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3664 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3654 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3665 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3655 qApp->processEvents(); 3666 qApp->processEvents();
3656 delete mTodoEditor; 3667 delete mTodoEditor;
3657 mTodoEditor = mDialogManager->getTodoEditor(); 3668 mTodoEditor = mDialogManager->getTodoEditor();
3658 topLevelWidget()->setCaption( i18n("") ); 3669 topLevelWidget()->setCaption( i18n("") );
3659 } 3670 }
3660 mTodoEditor->showMaximized(); 3671 mTodoEditor->showMaximized();
3661#endif 3672#endif
3662} 3673}
3663 3674
3664void CalendarView::cloneIncidence() 3675void CalendarView::cloneIncidence()
3665{ 3676{
3666 Incidence *incidence = currentSelection(); 3677 Incidence *incidence = currentSelection();
3667 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3678 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3668 if ( incidence ) { 3679 if ( incidence ) {
3669 cloneIncidence(incidence); 3680 cloneIncidence(incidence);
3670 } 3681 }
3671} 3682}
3672void CalendarView::moveIncidence() 3683void CalendarView::moveIncidence()
3673{ 3684{
3674 Incidence *incidence = currentSelection(); 3685 Incidence *incidence = currentSelection();
3675 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3686 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3676 if ( incidence ) { 3687 if ( incidence ) {
3677 moveIncidence(incidence); 3688 moveIncidence(incidence);
3678 } 3689 }
3679} 3690}
3680void CalendarView::beamIncidence() 3691void CalendarView::beamIncidence()
3681{ 3692{
3682 Incidence *incidence = currentSelection(); 3693 Incidence *incidence = currentSelection();
3683 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3694 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3684 if ( incidence ) { 3695 if ( incidence ) {
3685 beamIncidence(incidence); 3696 beamIncidence(incidence);
3686 } 3697 }
3687} 3698}
3688void CalendarView::toggleCancelIncidence() 3699void CalendarView::toggleCancelIncidence()
3689{ 3700{
3690 Incidence *incidence = currentSelection(); 3701 Incidence *incidence = currentSelection();
3691 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3702 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3692 if ( incidence ) { 3703 if ( incidence ) {
3693 cancelIncidence(incidence); 3704 cancelIncidence(incidence);
3694 } 3705 }
3695} 3706}
3696 3707
3697 3708
3698void CalendarView::cancelIncidence(Incidence * inc ) 3709void CalendarView::cancelIncidence(Incidence * inc )
3699{ 3710{
3700 inc->setCancelled( ! inc->cancelled() ); 3711 inc->setCancelled( ! inc->cancelled() );
3701 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3712 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3702 updateView(); 3713 updateView();
3703} 3714}
3704void CalendarView::cloneIncidence(Incidence * orgInc ) 3715void CalendarView::cloneIncidence(Incidence * orgInc )
3705{ 3716{
3706 Incidence * newInc = orgInc->clone(); 3717 Incidence * newInc = orgInc->clone();
3707 newInc->recreate(); 3718 newInc->recreate();
3708 3719
3709 if ( newInc->typeID() == todoID ) { 3720 if ( newInc->typeID() == todoID ) {
3710 Todo* t = (Todo*) newInc; 3721 Todo* t = (Todo*) newInc;
3711 bool cloneSub = false; 3722 bool cloneSub = false;
3712 if ( orgInc->relations().count() ) { 3723 if ( orgInc->relations().count() ) {
3713 int result = KMessageBox::warningYesNoCancel(this, 3724 int result = KMessageBox::warningYesNoCancel(this,
3714 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), 3725 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ),
3715 i18n("Todo has subtodos"), 3726 i18n("Todo has subtodos"),
3716 i18n("Yes"), 3727 i18n("Yes"),
3717 i18n("No")); 3728 i18n("No"));
3718 3729
3719 if ( result == KMessageBox::Cancel ) { 3730 if ( result == KMessageBox::Cancel ) {
3720 delete t; 3731 delete t;
3721 return; 3732 return;
3722 } 3733 }
3723 if (result == KMessageBox::Yes) cloneSub = true; 3734 if (result == KMessageBox::Yes) cloneSub = true;
3724 } 3735 }
3725 showTodoEditor(); 3736 showTodoEditor();
3726 mTodoEditor->editTodo( t ); 3737 mTodoEditor->editTodo( t );
3727 if ( mTodoEditor->exec() ) { 3738 if ( mTodoEditor->exec() ) {
3728 if ( cloneSub ) { 3739 if ( cloneSub ) {
3729 orgInc->cloneRelations( t ); 3740 orgInc->cloneRelations( t );
3730 mCalendar->addIncidenceBranch( t ); 3741 mCalendar->addIncidenceBranch( t );
3731 updateView(); 3742 updateView();
3732 3743
3733 } else { 3744 } else {
3734 mCalendar->addTodo( t ); 3745 mCalendar->addTodo( t );
3735 updateView(); 3746 updateView();
3736 } 3747 }
3737 } else { 3748 } else {
3738 delete t; 3749 delete t;
3739 } 3750 }
3740 } 3751 }
3741 else if ( newInc->typeID() == eventID ) { 3752 else if ( newInc->typeID() == eventID ) {
3742 Event* e = (Event*) newInc; 3753 Event* e = (Event*) newInc;
3743 showEventEditor(); 3754 showEventEditor();
3744 mEventEditor->editEvent( e ); 3755 mEventEditor->editEvent( e );
3745 if ( mEventEditor->exec() ) { 3756 if ( mEventEditor->exec() ) {
3746 mCalendar->addEvent( e ); 3757 mCalendar->addEvent( e );
3747 updateView(); 3758 updateView();
3748 } else { 3759 } else {
3749 delete e; 3760 delete e;
3750 } 3761 }
3751 } else if ( newInc->typeID() == journalID ) { 3762 } else if ( newInc->typeID() == journalID ) {
3752 mCalendar->addJournal( (Journal*) newInc ); 3763 mCalendar->addJournal( (Journal*) newInc );
3753 editJournal( (Journal*) newInc ); 3764 editJournal( (Journal*) newInc );
3754 } 3765 }
3755 setActiveWindow(); 3766 setActiveWindow();
3756} 3767}
3757 3768
3758void CalendarView::newEvent() 3769void CalendarView::newEvent()
3759{ 3770{
3760 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3771 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3761 KOAgendaView *aView = mViewManager->agendaView(); 3772 KOAgendaView *aView = mViewManager->agendaView();
3762 if (aView) { 3773 if (aView) {
3763 if (aView->selectionStart().isValid()) { 3774 if (aView->selectionStart().isValid()) {
3764 if (aView->selectedIsAllDay()) { 3775 if (aView->selectedIsAllDay()) {
3765 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3776 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3766 } else { 3777 } else {
3767 newEvent(aView->selectionStart(),aView->selectionEnd()); 3778 newEvent(aView->selectionStart(),aView->selectionEnd());
3768 } 3779 }
3769 return; 3780 return;
3770 } 3781 }
3771 } 3782 }
3772 3783
3773 QDate date = mNavigator->selectedDates().first(); 3784 QDate date = mNavigator->selectedDates().first();
3774#if 0 3785#if 0
3775 QDateTime current = QDateTime::currentDateTime(); 3786 QDateTime current = QDateTime::currentDateTime();
3776 if ( date <= current.date() ) { 3787 if ( date <= current.date() ) {
3777 int hour = current.time().hour() +1; 3788 int hour = current.time().hour() +1;
3778 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3789 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3779 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3790 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3780 } else 3791 } else
3781#endif 3792#endif
3782 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3793 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3783 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3794 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3784 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3795 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3785} 3796}
3786 3797
3787void CalendarView::newEvent(QDateTime fh) 3798void CalendarView::newEvent(QDateTime fh)
3788{ 3799{
3789 newEvent(fh, 3800 newEvent(fh,
3790 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3801 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3791} 3802}
3792 3803
3793void CalendarView::newEvent(QDate dt) 3804void CalendarView::newEvent(QDate dt)
3794{ 3805{
3795 newEvent(QDateTime(dt, QTime(0,0,0)), 3806 newEvent(QDateTime(dt, QTime(0,0,0)),
3796 QDateTime(dt, QTime(0,0,0)), true); 3807 QDateTime(dt, QTime(0,0,0)), true);
3797} 3808}
3798void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3809void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3799{ 3810{
3800 newEvent(fromHint, toHint, false); 3811 newEvent(fromHint, toHint, false);
3801} 3812}
3802void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3813void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3803{ 3814{
3804 3815
3805 showEventEditor(); 3816 showEventEditor();
3806 mEventEditor->newEvent(fromHint,toHint,allDay); 3817 mEventEditor->newEvent(fromHint,toHint,allDay);
3807 if ( mFilterView->filtersEnabled() ) { 3818 if ( mFilterView->filtersEnabled() ) {
3808 CalFilter *filter = mFilterView->selectedFilter(); 3819 CalFilter *filter = mFilterView->selectedFilter();
3809 if (filter && filter->showCategories()) { 3820 if (filter && filter->showCategories()) {
3810 mEventEditor->setCategories(filter->categoryList().join(",") ); 3821 mEventEditor->setCategories(filter->categoryList().join(",") );
3811 } 3822 }
3812 if ( filter ) 3823 if ( filter )
3813 mEventEditor->setSecrecy( filter->getSecrecy() ); 3824 mEventEditor->setSecrecy( filter->getSecrecy() );
3814 } 3825 }
3815 mEventEditor->exec(); 3826 mEventEditor->exec();
3816 setActiveWindow(); 3827 setActiveWindow();
3817} 3828}
3818void CalendarView::todoAdded(Todo * t) 3829void CalendarView::todoAdded(Todo * t)
3819{ 3830{
3820 3831
3821 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3832 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3822 updateTodoViews(); 3833 updateTodoViews();
3823} 3834}
3824void CalendarView::todoChanged(Todo * t) 3835void CalendarView::todoChanged(Todo * t)
3825{ 3836{
3826 emit todoModified( t, 4 ); 3837 emit todoModified( t, 4 );
3827 // updateTodoViews(); 3838 // updateTodoViews();
3828} 3839}
3829void CalendarView::todoToBeDeleted(Todo *) 3840void CalendarView::todoToBeDeleted(Todo *)
3830{ 3841{
3831 //qDebug("todoToBeDeleted(Todo *) "); 3842 //qDebug("todoToBeDeleted(Todo *) ");
3832 updateTodoViews(); 3843 updateTodoViews();
3833} 3844}
3834void CalendarView::todoDeleted() 3845void CalendarView::todoDeleted()
3835{ 3846{
3836 //qDebug(" todoDeleted()"); 3847 //qDebug(" todoDeleted()");
3837 updateTodoViews(); 3848 updateTodoViews();
3838} 3849}
3839 3850
3840 3851
3841void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3852void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3842{ 3853{
3843 showTodoEditor(); 3854 showTodoEditor();
3844 mTodoEditor->newTodo(dt,0,allday); 3855 mTodoEditor->newTodo(dt,0,allday);
3845 if ( mFilterView->filtersEnabled() ) { 3856 if ( mFilterView->filtersEnabled() ) {
3846 CalFilter *filter = mFilterView->selectedFilter(); 3857 CalFilter *filter = mFilterView->selectedFilter();
3847 if (filter && filter->showCategories()) { 3858 if (filter && filter->showCategories()) {
3848 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3859 mTodoEditor->setCategories(filter->categoryList().join(",") );
3849 } 3860 }
3850 if ( filter ) 3861 if ( filter )
3851 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3862 mTodoEditor->setSecrecy( filter->getSecrecy() );
3852 } 3863 }
3853 mTodoEditor->exec(); 3864 mTodoEditor->exec();
3854 setActiveWindow(); 3865 setActiveWindow();
3855} 3866}
3856 3867
3857void CalendarView::newTodo() 3868void CalendarView::newTodo()
3858{ 3869{
3859 newTodoDateTime( QDateTime(),true ); 3870 newTodoDateTime( QDateTime(),true );
3860} 3871}
3861 3872
3862void CalendarView::newSubTodo() 3873void CalendarView::newSubTodo()
3863{ 3874{
3864 Todo *todo = selectedTodo(); 3875 Todo *todo = selectedTodo();
3865 if ( todo ) newSubTodo( todo ); 3876 if ( todo ) newSubTodo( todo );
3866} 3877}
3867 3878
3868void CalendarView::newSubTodo(Todo *parentEvent) 3879void CalendarView::newSubTodo(Todo *parentEvent)
3869{ 3880{
3870 3881
3871 showTodoEditor(); 3882 showTodoEditor();
3872 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3883 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3873 mTodoEditor->exec(); 3884 mTodoEditor->exec();
3874 setActiveWindow(); 3885 setActiveWindow();
3875} 3886}
3876 3887
3877void CalendarView::newFloatingEvent() 3888void CalendarView::newFloatingEvent()
3878{ 3889{
3879 DateList tmpList = mNavigator->selectedDates(); 3890 DateList tmpList = mNavigator->selectedDates();
3880 QDate date = tmpList.first(); 3891 QDate date = tmpList.first();
3881 3892
3882 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3893 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3883 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3894 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3884} 3895}
3885 3896
3886 3897
3887void CalendarView::editEvent( Event *event ) 3898void CalendarView::editEvent( Event *event )
3888{ 3899{
3889 3900
3890 if ( !event ) return; 3901 if ( !event ) return;
3891 if ( event->isReadOnly() ) { 3902 if ( event->isReadOnly() ) {
3892 showEvent( event ); 3903 showEvent( event );
3893 return; 3904 return;
3894 } 3905 }
3895 showEventEditor(); 3906 showEventEditor();
3896 mEventEditor->editEvent( event , mFlagEditDescription); 3907 mEventEditor->editEvent( event , mFlagEditDescription);
3897 mEventEditor->exec(); 3908 mEventEditor->exec();
3898 setActiveWindow(); 3909 setActiveWindow();
3899 3910
3900} 3911}
3901void CalendarView::editJournal( Journal *jour ) 3912void CalendarView::editJournal( Journal *jour )
3902{ 3913{
3903 if ( !jour ) return; 3914 if ( !jour ) return;
3904 mDialogManager->hideSearchDialog(); 3915 mDialogManager->hideSearchDialog();
3905 mViewManager->showJournalView(); 3916 mViewManager->showJournalView();
3906 mNavigator->slotDaySelect( jour->dtStart().date() ); 3917 mNavigator->slotDaySelect( jour->dtStart().date() );
3907} 3918}
3908void CalendarView::editTodo( Todo *todo ) 3919void CalendarView::editTodo( Todo *todo )
3909{ 3920{
3910 if ( !todo ) return; 3921 if ( !todo ) return;
3911 3922
3912 if ( todo->isReadOnly() ) { 3923 if ( todo->isReadOnly() ) {
3913 showTodo( todo ); 3924 showTodo( todo );
3914 return; 3925 return;
3915 } 3926 }
3916 showTodoEditor(); 3927 showTodoEditor();
3917 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3928 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3918 mTodoEditor->exec(); 3929 mTodoEditor->exec();
3919 setActiveWindow(); 3930 setActiveWindow();
3920 3931
3921} 3932}
3922 3933
3923KOEventViewerDialog* CalendarView::getEventViewerDialog() 3934KOEventViewerDialog* CalendarView::getEventViewerDialog()
3924{ 3935{
3925 if ( !mEventViewerDialog ) { 3936 if ( !mEventViewerDialog ) {
3926 mEventViewerDialog = new KOEventViewerDialog(0); 3937 mEventViewerDialog = new KOEventViewerDialog(0);
3927 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3938 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3928 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3939 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3929 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3940 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3930 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3941 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3931 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3942 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3932 viewManager(), SLOT( showAgendaView( bool ) ) ); 3943 viewManager(), SLOT( showAgendaView( bool ) ) );
3933 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3944 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3934 this, SLOT( slotViewerClosed() ) ); 3945 this, SLOT( slotViewerClosed() ) );
3935 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3946 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3936 this, SLOT( todoChanged(Todo *) ) ); 3947 this, SLOT( todoChanged(Todo *) ) );
3937 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3948 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3938 mEventViewerDialog->resize( 640, 480 ); 3949 mEventViewerDialog->resize( 640, 480 );
3939 3950
3940 } 3951 }
3941 return mEventViewerDialog; 3952 return mEventViewerDialog;
3942} 3953}
3943void CalendarView::showEvent(Event *event) 3954void CalendarView::showEvent(Event *event)
3944{ 3955{
3945 getEventViewerDialog()->setEvent(event); 3956 getEventViewerDialog()->setEvent(event);
3946 getEventViewerDialog()->showMe(); 3957 getEventViewerDialog()->showMe();
3947} 3958}
3948 3959
3949void CalendarView::showTodo(Todo *event) 3960void CalendarView::showTodo(Todo *event)
3950{ 3961{
3951 getEventViewerDialog()->setTodo(event); 3962 getEventViewerDialog()->setTodo(event);
3952 getEventViewerDialog()->showMe(); 3963 getEventViewerDialog()->showMe();
3953} 3964}
3954void CalendarView::showJournal( Journal *jour ) 3965void CalendarView::showJournal( Journal *jour )
3955{ 3966{
3956 getEventViewerDialog()->setJournal(jour); 3967 getEventViewerDialog()->setJournal(jour);
3957 getEventViewerDialog()->showMe(); 3968 getEventViewerDialog()->showMe();
3958 3969
3959} 3970}
3960// void CalendarView::todoModified (Todo *event, int changed) 3971// void CalendarView::todoModified (Todo *event, int changed)
3961// { 3972// {
3962// // if (mDialogList.find (event) != mDialogList.end ()) { 3973// // if (mDialogList.find (event) != mDialogList.end ()) {
3963// // kdDebug() << "Todo modified and open" << endl; 3974// // kdDebug() << "Todo modified and open" << endl;
3964// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3975// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3965// // temp->modified (changed); 3976// // temp->modified (changed);
3966 3977
3967// // } 3978// // }
3968 3979
3969// mViewManager->updateView(); 3980// mViewManager->updateView();
3970// } 3981// }
3971 3982
3972void CalendarView::appointment_show() 3983void CalendarView::appointment_show()
3973{ 3984{
3974 Event *anEvent = 0; 3985 Event *anEvent = 0;
3975 3986
3976 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3987 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3977 3988
3978 if (mViewManager->currentView()->isEventView()) { 3989 if (mViewManager->currentView()->isEventView()) {
3979 if ( incidence && incidence->typeID() == eventID ) { 3990 if ( incidence && incidence->typeID() == eventID ) {
3980 anEvent = static_cast<Event *>(incidence); 3991 anEvent = static_cast<Event *>(incidence);
3981 } 3992 }
3982 } 3993 }
3983 3994
3984 if (!anEvent) { 3995 if (!anEvent) {
3985 KNotifyClient::beep(); 3996 KNotifyClient::beep();
3986 return; 3997 return;
3987 } 3998 }
3988 3999
3989 showEvent(anEvent); 4000 showEvent(anEvent);
3990} 4001}
3991 4002
3992void CalendarView::appointment_edit() 4003void CalendarView::appointment_edit()
3993{ 4004{
3994 Event *anEvent = 0; 4005 Event *anEvent = 0;
3995 4006
3996 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 4007 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3997 4008
3998 if (mViewManager->currentView()->isEventView()) { 4009 if (mViewManager->currentView()->isEventView()) {
3999 if ( incidence && incidence->typeID() == eventID ) { 4010 if ( incidence && incidence->typeID() == eventID ) {
4000 anEvent = static_cast<Event *>(incidence); 4011 anEvent = static_cast<Event *>(incidence);
4001 } 4012 }
4002 } 4013 }
4003 4014
4004 if (!anEvent) { 4015 if (!anEvent) {
4005 KNotifyClient::beep(); 4016 KNotifyClient::beep();
4006 return; 4017 return;
4007 } 4018 }
4008 4019
4009 editEvent(anEvent); 4020 editEvent(anEvent);
4010} 4021}
4011 4022
4012void CalendarView::appointment_delete() 4023void CalendarView::appointment_delete()
4013{ 4024{
4014 Event *anEvent = 0; 4025 Event *anEvent = 0;
4015 4026
4016 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 4027 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
4017 4028
4018 if (mViewManager->currentView()->isEventView()) { 4029 if (mViewManager->currentView()->isEventView()) {
4019 if ( incidence && incidence->typeID() == eventID ) { 4030 if ( incidence && incidence->typeID() == eventID ) {
4020 anEvent = static_cast<Event *>(incidence); 4031 anEvent = static_cast<Event *>(incidence);
4021 } 4032 }
4022 } 4033 }
4023 4034
4024 if (!anEvent) { 4035 if (!anEvent) {
4025 KNotifyClient::beep(); 4036 KNotifyClient::beep();
4026 return; 4037 return;
4027 } 4038 }
4028 4039
4029 deleteEvent(anEvent); 4040 deleteEvent(anEvent);
4030} 4041}
4031 4042
4032void CalendarView::todo_resub( Todo * parent, Todo * sub ) 4043void CalendarView::todo_resub( Todo * parent, Todo * sub )
4033{ 4044{
4034 if (!sub) return; 4045 if (!sub) return;
4035 if ( sub->relatedTo() == parent ) 4046 if ( sub->relatedTo() == parent )
4036 return; 4047 return;
4037 sub->setRelatedTo(parent); 4048 sub->setRelatedTo(parent);
4038 sub->updated(); 4049 sub->updated();
4039 setModified(true); 4050 setModified(true);
4040 updateView(); 4051 updateView();
4041} 4052}
4042void CalendarView::todo_unsub(Todo *anTodo ) 4053void CalendarView::todo_unsub(Todo *anTodo )
4043{ 4054{
4044 todo_resub( 0, anTodo ); 4055 todo_resub( 0, anTodo );
4045} 4056}
4046 4057
4047void CalendarView::deleteTodo(Todo *todo) 4058void CalendarView::deleteTodo(Todo *todo)
4048{ 4059{
4049 if (!todo) { 4060 if (!todo) {
4050 KNotifyClient::beep(); 4061 KNotifyClient::beep();
4051 return; 4062 return;
4052 } 4063 }
4053 if (KOPrefs::instance()->mConfirm) { 4064 if (KOPrefs::instance()->mConfirm) {
4054 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 4065 QString text = KGlobal::formatMessage ( todo->summary(),0 );
4055 if (!todo->relations().isEmpty()) { 4066 if (!todo->relations().isEmpty()) {
4056 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 4067 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
4057 4068
4058 } 4069 }
4059 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 4070 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
4060 case KMessageBox::Continue: // OK 4071 case KMessageBox::Continue: // OK
4061 bool deleteT = false; 4072 bool deleteT = false;
4062 if (!todo->relations().isEmpty()) { 4073 if (!todo->relations().isEmpty()) {
4063 deleteT = removeCompletedSubTodos( todo ); 4074 deleteT = removeCompletedSubTodos( todo );
4064 } 4075 }
4065 // deleteT == true: todo already deleted in removeCompletedSubTodos 4076 // deleteT == true: todo already deleted in removeCompletedSubTodos
4066 if ( !deleteT ) { 4077 if ( !deleteT ) {
4067 checkExternalId( todo ); 4078 checkExternalId( todo );
4068 calendar()->deleteTodo(todo); 4079 calendar()->deleteTodo(todo);
4069 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4080 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4070 } 4081 }
4071 updateView(); 4082 updateView();
4072 break; 4083 break;
4073 } // switch 4084 } // switch
4074 } else { 4085 } else {
4075 checkExternalId( todo ); 4086 checkExternalId( todo );
4076 mCalendar->deleteTodo(todo); 4087 mCalendar->deleteTodo(todo);
4077 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4088 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4078 updateView(); 4089 updateView();
4079 } 4090 }
4080 4091
4081 emit updateSearchDialog(); 4092 emit updateSearchDialog();
4082} 4093}
4083void CalendarView::deleteJournal(Journal *jour) 4094void CalendarView::deleteJournal(Journal *jour)
4084{ 4095{
4085 if (!jour) { 4096 if (!jour) {
4086 KNotifyClient::beep(); 4097 KNotifyClient::beep();
4087 return; 4098 return;
4088 } 4099 }
4089 if (KOPrefs::instance()->mConfirm) { 4100 if (KOPrefs::instance()->mConfirm) {
4090 4101
4091 QString des; 4102 QString des;
4092 if ( !jour->summary().isEmpty() ) { 4103 if ( !jour->summary().isEmpty() ) {
4093 des = jour->summary(); 4104 des = jour->summary();
4094 } else { 4105 } else {
4095 des = jour->description().left(30); 4106 des = jour->description().left(30);
4096 des = des.simplifyWhiteSpace (); 4107 des = des.simplifyWhiteSpace ();
4097 des.replace (QRegExp ("\\n"),"" ); 4108 des.replace (QRegExp ("\\n"),"" );
4098 des.replace (QRegExp ("\\r"),"" ); 4109 des.replace (QRegExp ("\\r"),"" );
4099 } 4110 }
4100 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 4111 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
4101 case KMessageBox::Continue: // OK 4112 case KMessageBox::Continue: // OK
4102 calendar()->deleteJournal(jour); 4113 calendar()->deleteJournal(jour);
4103 updateView(); 4114 updateView();
4104 break; 4115 break;
4105 } // switch 4116 } // switch
4106 } else { 4117 } else {
4107 calendar()->deleteJournal(jour);; 4118 calendar()->deleteJournal(jour);;
4108 updateView(); 4119 updateView();
4109 } 4120 }
4110 emit updateSearchDialog(); 4121 emit updateSearchDialog();
4111} 4122}
4112 4123
4113void CalendarView::deleteEvent(Event *anEvent) 4124void CalendarView::deleteEvent(Event *anEvent)
4114{ 4125{
4115 if (!anEvent) { 4126 if (!anEvent) {
4116 KNotifyClient::beep(); 4127 KNotifyClient::beep();
4117 return; 4128 return;
4118 } 4129 }
4119 4130
4120 if (anEvent->doesRecur()) { 4131 if (anEvent->doesRecur()) {
4121 QDate itemDate = mViewManager->currentSelectionDate(); 4132 QDate itemDate = mViewManager->currentSelectionDate();
4122 int km; 4133 int km;
4123 if (!itemDate.isValid()) { 4134 if (!itemDate.isValid()) {
4124 //kdDebug() << "Date Not Valid" << endl; 4135 //kdDebug() << "Date Not Valid" << endl;
4125 if (KOPrefs::instance()->mConfirm) { 4136 if (KOPrefs::instance()->mConfirm) {
4126 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4137 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4127 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 4138 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
4128 i18n("KO/Pi Confirmation"),i18n("Delete All")); 4139 i18n("KO/Pi Confirmation"),i18n("Delete All"));
4129 if ( km == KMessageBox::Continue ) 4140 if ( km == KMessageBox::Continue )
4130 km = KMessageBox::No; // No = all below 4141 km = KMessageBox::No; // No = all below
4131 } else 4142 } else
4132 km = KMessageBox::No; 4143 km = KMessageBox::No;
4133 } else { 4144 } else {
4134 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4145 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4135 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 4146 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
4136 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 4147 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
4137 i18n("KO/Pi Confirmation"),i18n("Current"), 4148 i18n("KO/Pi Confirmation"),i18n("Current"),
4138 i18n("All")); 4149 i18n("All"));
4139 } 4150 }
4140 switch(km) { 4151 switch(km) {
4141 4152
4142 case KMessageBox::No: // Continue // all 4153 case KMessageBox::No: // Continue // all
4143 //qDebug("KMessageBox::No "); 4154 //qDebug("KMessageBox::No ");
4144 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4155 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4145 schedule(Scheduler::Cancel,anEvent); 4156 schedule(Scheduler::Cancel,anEvent);
4146 4157
4147 checkExternalId( anEvent); 4158 checkExternalId( anEvent);
4148 mCalendar->deleteEvent(anEvent); 4159 mCalendar->deleteEvent(anEvent);
4149 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4160 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
4150 break; 4161 break;
4151 4162
4152 // Disabled because it does not work 4163 // Disabled because it does not work
4153 //#if 0 4164 //#if 0
4154 case KMessageBox::Yes: // just this one 4165 case KMessageBox::Yes: // just this one
4155 //QDate qd = mNavigator->selectedDates().first(); 4166 //QDate qd = mNavigator->selectedDates().first();
4156 //if (!qd.isValid()) { 4167 //if (!qd.isValid()) {
4157 // kdDebug() << "no date selected, or invalid date" << endl; 4168 // kdDebug() << "no date selected, or invalid date" << endl;
4158 // KNotifyClient::beep(); 4169 // KNotifyClient::beep();
4159 // return; 4170 // return;
4160 //} 4171 //}
4161 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4172 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4162 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4173 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4163 anEvent->addExDate(itemDate); 4174 anEvent->addExDate(itemDate);
4164 int duration = anEvent->recurrence()->duration(); 4175 int duration = anEvent->recurrence()->duration();
4165 if ( duration > 0 ) { 4176 if ( duration > 0 ) {
4166 anEvent->recurrence()->setDuration( duration - 1 ); 4177 anEvent->recurrence()->setDuration( duration - 1 );
4167 } 4178 }
4168 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4179 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4169 } 4180 }
4170 break; 4181 break;
4171 //#endif 4182 //#endif
4172 } // switch 4183 } // switch
4173 } else { 4184 } else {
4174 if (KOPrefs::instance()->mConfirm) { 4185 if (KOPrefs::instance()->mConfirm) {
4175 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4186 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4176 i18n("\nAre you sure you want\nto delete this event?"), 4187 i18n("\nAre you sure you want\nto delete this event?"),
4177 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4188 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4178 case KMessageBox::Continue: // OK 4189 case KMessageBox::Continue: // OK
4179 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4190 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4180 schedule(Scheduler::Cancel,anEvent); 4191 schedule(Scheduler::Cancel,anEvent);
4181 checkExternalId( anEvent); 4192 checkExternalId( anEvent);
4182 mCalendar->deleteEvent(anEvent); 4193 mCalendar->deleteEvent(anEvent);
4183 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4194 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4184 break; 4195 break;
4185 } // switch 4196 } // switch
4186 } else { 4197 } else {
4187 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4198 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4188 schedule(Scheduler::Cancel,anEvent); 4199 schedule(Scheduler::Cancel,anEvent);
4189 checkExternalId( anEvent); 4200 checkExternalId( anEvent);
4190 mCalendar->deleteEvent(anEvent); 4201 mCalendar->deleteEvent(anEvent);
4191 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4202 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4192 } 4203 }
4193 } // if-else 4204 } // if-else
4194 emit updateSearchDialog(); 4205 emit updateSearchDialog();
4195} 4206}
4196 4207
4197bool CalendarView::deleteEvent(const QString &uid) 4208bool CalendarView::deleteEvent(const QString &uid)
4198{ 4209{
4199 Event *ev = mCalendar->event(uid); 4210 Event *ev = mCalendar->event(uid);
4200 if (ev) { 4211 if (ev) {
4201 deleteEvent(ev); 4212 deleteEvent(ev);
4202 return true; 4213 return true;
4203 } else { 4214 } else {
4204 return false; 4215 return false;
4205 } 4216 }
4206} 4217}
4207 4218
4208/*****************************************************************************/ 4219/*****************************************************************************/
4209 4220
4210void CalendarView::action_mail() 4221void CalendarView::action_mail()
4211{ 4222{
4212#ifndef KORG_NOMAIL 4223#ifndef KORG_NOMAIL
4213 KOMailClient mailClient; 4224 KOMailClient mailClient;
4214 4225
4215 Incidence *incidence = currentSelection(); 4226 Incidence *incidence = currentSelection();
4216 4227
4217 if (!incidence) { 4228 if (!incidence) {
4218 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4229 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4219 return; 4230 return;
4220 } 4231 }
4221 if(incidence->attendeeCount() == 0 ) { 4232 if(incidence->attendeeCount() == 0 ) {
4222 KMessageBox::sorry(this, 4233 KMessageBox::sorry(this,
4223 i18n("Can't generate mail:\nNo attendees defined.\n")); 4234 i18n("Can't generate mail:\nNo attendees defined.\n"));
4224 return; 4235 return;
4225 } 4236 }
4226 4237
4227 CalendarLocal cal_tmp; 4238 CalendarLocal cal_tmp;
4228 Event *event = 0; 4239 Event *event = 0;
4229 Event *ev = 0; 4240 Event *ev = 0;
4230 if ( incidence && incidence->typeID() == eventID ) { 4241 if ( incidence && incidence->typeID() == eventID ) {
4231 event = static_cast<Event *>(incidence); 4242 event = static_cast<Event *>(incidence);
4232 ev = new Event(*event); 4243 ev = new Event(*event);
4233 cal_tmp.addEvent(ev); 4244 cal_tmp.addEvent(ev);
4234 } 4245 }
4235 ICalFormat mForm(); 4246 ICalFormat mForm();
4236 QString attachment = mForm.toString( &cal_tmp ); 4247 QString attachment = mForm.toString( &cal_tmp );
4237 if (ev) delete(ev); 4248 if (ev) delete(ev);
4238 4249
4239 mailClient.mailAttendees(currentSelection(), attachment); 4250 mailClient.mailAttendees(currentSelection(), attachment);
4240 4251
4241#endif 4252#endif
4242 4253
4243#if 0 4254#if 0
4244 Event *anEvent = 0; 4255 Event *anEvent = 0;
4245 if (mViewManager->currentView()->isEventView()) { 4256 if (mViewManager->currentView()->isEventView()) {
4246 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4257 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
4247 } 4258 }
4248 4259
4249 if (!anEvent) { 4260 if (!anEvent) {
4250 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4261 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4251 return; 4262 return;
4252 } 4263 }
4253 if(anEvent->attendeeCount() == 0 ) { 4264 if(anEvent->attendeeCount() == 0 ) {
4254 KMessageBox::sorry(this, 4265 KMessageBox::sorry(this,
4255 i18n("Can't generate mail:\nNo attendees defined.\n")); 4266 i18n("Can't generate mail:\nNo attendees defined.\n"));
4256 return; 4267 return;
4257 } 4268 }
4258 4269
4259 mailobject.emailEvent(anEvent); 4270 mailobject.emailEvent(anEvent);
4260#endif 4271#endif
4261} 4272}
4262 4273
4263 4274
4264void CalendarView::schedule_publish(Incidence *incidence) 4275void CalendarView::schedule_publish(Incidence *incidence)
4265{ 4276{
4266 Event *event = 0; 4277 Event *event = 0;
4267 Todo *todo = 0; 4278 Todo *todo = 0;
4268 4279
4269 if (incidence == 0) { 4280 if (incidence == 0) {
4270 incidence = mViewManager->currentView()->selectedIncidences().first(); 4281 incidence = mViewManager->currentView()->selectedIncidences().first();
4271 if (incidence == 0) { 4282 if (incidence == 0) {
4272 incidence = mTodoList->selectedIncidences().first(); 4283 incidence = mTodoList->selectedIncidences().first();
4273 } 4284 }
4274 } 4285 }
4275 if ( incidence && incidence->typeID() == eventID ) { 4286 if ( incidence && incidence->typeID() == eventID ) {
4276 event = static_cast<Event *>(incidence); 4287 event = static_cast<Event *>(incidence);
4277 } else { 4288 } else {
4278 if ( incidence && incidence->typeID() == todoID ) { 4289 if ( incidence && incidence->typeID() == todoID ) {
4279 todo = static_cast<Todo *>(incidence); 4290 todo = static_cast<Todo *>(incidence);
4280 } 4291 }
4281 } 4292 }
4282 4293
4283 if (!event && !todo) { 4294 if (!event && !todo) {
4284 KMessageBox::sorry(this,i18n("No event selected.")); 4295 KMessageBox::sorry(this,i18n("No event selected."));
4285 return; 4296 return;
4286 } 4297 }
4287 4298
4288 PublishDialog *publishdlg = new PublishDialog(); 4299 PublishDialog *publishdlg = new PublishDialog();
4289 if (incidence->attendeeCount()>0) { 4300 if (incidence->attendeeCount()>0) {
4290 QPtrList<Attendee> attendees = incidence->attendees(); 4301 QPtrList<Attendee> attendees = incidence->attendees();
4291 attendees.first(); 4302 attendees.first();
4292 while ( attendees.current()!=0 ) { 4303 while ( attendees.current()!=0 ) {
4293 publishdlg->addAttendee(attendees.current()); 4304 publishdlg->addAttendee(attendees.current());
4294 attendees.next(); 4305 attendees.next();
4295 } 4306 }
4296 } 4307 }
4297 bool send = true; 4308 bool send = true;
4298 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 4309 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
4299 if ( publishdlg->exec() != QDialog::Accepted ) 4310 if ( publishdlg->exec() != QDialog::Accepted )
4300 send = false; 4311 send = false;
4301 } 4312 }
4302 if ( send ) { 4313 if ( send ) {
4303 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4314 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4304 if ( event ) { 4315 if ( event ) {
4305 Event *ev = new Event(*event); 4316 Event *ev = new Event(*event);
4306 ev->registerObserver(0); 4317 ev->registerObserver(0);
4307 ev->clearAttendees(); 4318 ev->clearAttendees();
4308 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4319 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4309 delete(ev); 4320 delete(ev);
4310 } 4321 }
4311 } else { 4322 } else {
4312 if ( todo ) { 4323 if ( todo ) {
4313 Todo *ev = new Todo(*todo); 4324 Todo *ev = new Todo(*todo);
4314 ev->registerObserver(0); 4325 ev->registerObserver(0);
4315 ev->clearAttendees(); 4326 ev->clearAttendees();
4316 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4327 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4317 delete(ev); 4328 delete(ev);
4318 } 4329 }
4319 } 4330 }
4320 } 4331 }
4321 } 4332 }
4322 delete publishdlg; 4333 delete publishdlg;
4323} 4334}
4324 4335
4325void CalendarView::schedule_request(Incidence *incidence) 4336void CalendarView::schedule_request(Incidence *incidence)
4326{ 4337{
4327 schedule(Scheduler::Request,incidence); 4338 schedule(Scheduler::Request,incidence);
4328} 4339}
4329 4340
4330void CalendarView::schedule_refresh(Incidence *incidence) 4341void CalendarView::schedule_refresh(Incidence *incidence)
4331{ 4342{
4332 schedule(Scheduler::Refresh,incidence); 4343 schedule(Scheduler::Refresh,incidence);
4333} 4344}
4334 4345
4335void CalendarView::schedule_cancel(Incidence *incidence) 4346void CalendarView::schedule_cancel(Incidence *incidence)
4336{ 4347{
4337 schedule(Scheduler::Cancel,incidence); 4348 schedule(Scheduler::Cancel,incidence);
4338} 4349}
4339 4350
4340void CalendarView::schedule_add(Incidence *incidence) 4351void CalendarView::schedule_add(Incidence *incidence)
4341{ 4352{
4342 schedule(Scheduler::Add,incidence); 4353 schedule(Scheduler::Add,incidence);
4343} 4354}
4344 4355
4345void CalendarView::schedule_reply(Incidence *incidence) 4356void CalendarView::schedule_reply(Incidence *incidence)
4346{ 4357{
4347 schedule(Scheduler::Reply,incidence); 4358 schedule(Scheduler::Reply,incidence);
4348} 4359}
4349 4360
4350void CalendarView::schedule_counter(Incidence *incidence) 4361void CalendarView::schedule_counter(Incidence *incidence)
4351{ 4362{
4352 schedule(Scheduler::Counter,incidence); 4363 schedule(Scheduler::Counter,incidence);
4353} 4364}
4354 4365
4355void CalendarView::schedule_declinecounter(Incidence *incidence) 4366void CalendarView::schedule_declinecounter(Incidence *incidence)
4356{ 4367{
4357 schedule(Scheduler::Declinecounter,incidence); 4368 schedule(Scheduler::Declinecounter,incidence);
4358} 4369}
4359 4370
4360void CalendarView::schedule_publish_freebusy(int daysToPublish) 4371void CalendarView::schedule_publish_freebusy(int daysToPublish)
4361{ 4372{
4362 QDateTime start = QDateTime::currentDateTime(); 4373 QDateTime start = QDateTime::currentDateTime();
4363 QDateTime end = start.addDays(daysToPublish); 4374 QDateTime end = start.addDays(daysToPublish);
4364 4375
4365 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 4376 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
4366 freebusy->setOrganizer(KOPrefs::instance()->email()); 4377 freebusy->setOrganizer(KOPrefs::instance()->email());
4367 4378
4368 4379
4369 PublishDialog *publishdlg = new PublishDialog(); 4380 PublishDialog *publishdlg = new PublishDialog();
4370 if ( publishdlg->exec() == QDialog::Accepted ) { 4381 if ( publishdlg->exec() == QDialog::Accepted ) {
4371 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4382 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4372 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 4383 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
4373 delete(freebusy); 4384 delete(freebusy);
4374 } 4385 }
4375 } 4386 }
4376 delete publishdlg; 4387 delete publishdlg;
4377} 4388}
4378 4389
4379void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 4390void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
4380{ 4391{
4381 Event *event = 0; 4392 Event *event = 0;
4382 Todo *todo = 0; 4393 Todo *todo = 0;
4383 4394
4384 if (incidence == 0) { 4395 if (incidence == 0) {
4385 incidence = mViewManager->currentView()->selectedIncidences().first(); 4396 incidence = mViewManager->currentView()->selectedIncidences().first();
4386 if (incidence == 0) { 4397 if (incidence == 0) {
4387 incidence = mTodoList->selectedIncidences().first(); 4398 incidence = mTodoList->selectedIncidences().first();
4388 } 4399 }
4389 } 4400 }
4390 if ( incidence && incidence->typeID() == eventID ) { 4401 if ( incidence && incidence->typeID() == eventID ) {
4391 event = static_cast<Event *>(incidence); 4402 event = static_cast<Event *>(incidence);
4392 } 4403 }
4393 if ( incidence && incidence->typeID() == todoID ) { 4404 if ( incidence && incidence->typeID() == todoID ) {
4394 todo = static_cast<Todo *>(incidence); 4405 todo = static_cast<Todo *>(incidence);
4395 } 4406 }
4396 4407
4397 if (!event && !todo) { 4408 if (!event && !todo) {
4398 KMessageBox::sorry(this,i18n("No event selected.")); 4409 KMessageBox::sorry(this,i18n("No event selected."));
4399 return; 4410 return;
4400 } 4411 }
4401 4412
4402 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 4413 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
4403 KMessageBox::sorry(this,i18n("The event has no attendees.")); 4414 KMessageBox::sorry(this,i18n("The event has no attendees."));
4404 return; 4415 return;
4405 } 4416 }
4406 4417
4407 Event *ev = 0; 4418 Event *ev = 0;
4408 if (event) ev = new Event(*event); 4419 if (event) ev = new Event(*event);
4409 Todo *to = 0; 4420 Todo *to = 0;
4410 if (todo) to = new Todo(*todo); 4421 if (todo) to = new Todo(*todo);
4411 4422
4412 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 4423 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
4413 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 4424 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
4414 if (!me) { 4425 if (!me) {
4415 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4426 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4416 return; 4427 return;
4417 } 4428 }
4418 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4429 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4419 StatusDialog *statdlg = new StatusDialog(this); 4430 StatusDialog *statdlg = new StatusDialog(this);
4420 if (!statdlg->exec()==QDialog::Accepted) return; 4431 if (!statdlg->exec()==QDialog::Accepted) return;
4421 me->setStatus( statdlg->status() ); 4432 me->setStatus( statdlg->status() );
4422 delete(statdlg); 4433 delete(statdlg);
4423 } 4434 }
4424 Attendee *menew = new Attendee(*me); 4435 Attendee *menew = new Attendee(*me);
4425 if (ev) { 4436 if (ev) {
4426 ev->clearAttendees(); 4437 ev->clearAttendees();
4427 ev->addAttendee(menew,false); 4438 ev->addAttendee(menew,false);
4428 } else { 4439 } else {
4429 if (to) { 4440 if (to) {
4430 todo->clearAttendees(); 4441 todo->clearAttendees();
4431 todo->addAttendee(menew,false); 4442 todo->addAttendee(menew,false);
4432 } 4443 }
4433 } 4444 }
4434 } 4445 }
4435 4446
4436 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4447 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4437 if (ev) { 4448 if (ev) {
4438 if ( !dlg->addMessage(ev,method) ) delete(ev); 4449 if ( !dlg->addMessage(ev,method) ) delete(ev);
4439 } else { 4450 } else {
4440 if (to) { 4451 if (to) {
4441 if ( !dlg->addMessage(to,method) ) delete(to); 4452 if ( !dlg->addMessage(to,method) ) delete(to);
4442 } 4453 }
4443 } 4454 }
4444} 4455}
4445 4456
4446void CalendarView::openAddressbook() 4457void CalendarView::openAddressbook()
4447{ 4458{
4448 KRun::runCommand("kaddressbook"); 4459 KRun::runCommand("kaddressbook");
4449} 4460}
4450 4461
4451void CalendarView::setModified(bool modified) 4462void CalendarView::setModified(bool modified)
4452{ 4463{
4453 //qDebug("CalendarView::setModified %d ", modified); 4464 //qDebug("CalendarView::setModified %d ", modified);
4454 if ( modified ) 4465 if ( modified )
4455 emit signalmodified(); 4466 emit signalmodified();
4456 mModified = modified; 4467 mModified = modified;
4457 if ( mModified ) 4468 if ( mModified )
4458 emit modifiedChanged(mModified); 4469 emit modifiedChanged(mModified);
4459 4470
4460} 4471}
4461 4472
4462bool CalendarView::isReadOnly() 4473bool CalendarView::isReadOnly()
4463{ 4474{
4464 return mReadOnly; 4475 return mReadOnly;
4465} 4476}
4466 4477
4467void CalendarView::setReadOnly(bool readOnly) 4478void CalendarView::setReadOnly(bool readOnly)
4468{ 4479{
4469 if (mReadOnly != readOnly) { 4480 if (mReadOnly != readOnly) {
4470 mReadOnly = readOnly; 4481 mReadOnly = readOnly;
4471 emit readOnlyChanged(mReadOnly); 4482 emit readOnlyChanged(mReadOnly);
4472 } 4483 }
4473} 4484}
4474 4485
4475bool CalendarView::isModified() 4486bool CalendarView::isModified()
4476{ 4487{
4477 return mModified; 4488 return mModified;
4478} 4489}
4479void CalendarView::slotprintSelInc() 4490void CalendarView::slotprintSelInc()
4480{ 4491{
4481 if ( currentSelection() == 0 ) { 4492 if ( currentSelection() == 0 ) {
4482 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4493 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4483 return; 4494 return;
4484 } 4495 }
4485 showIncidence(); 4496 showIncidence();
4486 getEventViewerDialog()->print(); 4497 getEventViewerDialog()->print();
4487 4498
4488} 4499}
4489void CalendarView::printSetup() 4500void CalendarView::printSetup()
4490{ 4501{
4491#ifndef KORG_NOPRINTER 4502#ifndef KORG_NOPRINTER
4492 createPrinter(); 4503 createPrinter();
4493 4504
4494 mCalPrinter->setupPrinter(); 4505 mCalPrinter->setupPrinter();
4495#endif 4506#endif
4496} 4507}
4497 4508
4498void CalendarView::print() 4509void CalendarView::print()
4499{ 4510{
4500#ifndef KORG_NOPRINTER 4511#ifndef KORG_NOPRINTER
4501 createPrinter(); 4512 createPrinter();
4502 4513
4503 DateList tmpDateList = mNavigator->selectedDates(); 4514 DateList tmpDateList = mNavigator->selectedDates();
4504 mCalPrinter->print(CalPrinter::Month, 4515 mCalPrinter->print(CalPrinter::Month,
4505 tmpDateList.first(), tmpDateList.last()); 4516 tmpDateList.first(), tmpDateList.last());
4506#endif 4517#endif
4507} 4518}
4508 4519
4509void CalendarView::printPreview() 4520void CalendarView::printPreview()
4510{ 4521{
4511#ifndef KORG_NOPRINTER 4522#ifndef KORG_NOPRINTER
4512 kdDebug() << "CalendarView::printPreview()" << endl; 4523 kdDebug() << "CalendarView::printPreview()" << endl;
4513 4524
4514 createPrinter(); 4525 createPrinter();
4515 4526
4516 DateList tmpDateList = mNavigator->selectedDates(); 4527 DateList tmpDateList = mNavigator->selectedDates();
4517 4528
4518 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4529 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4519 tmpDateList.last()); 4530 tmpDateList.last());
4520#endif 4531#endif
4521} 4532}
4522bool CalendarView::exportICalendar( QString filename ) 4533bool CalendarView::exportICalendar( QString filename )
4523{ 4534{
4524 // Force correct extension 4535 // Force correct extension
4525 if (filename.right(4) != ".ics") filename += ".ics"; 4536 if (filename.right(4) != ".ics") filename += ".ics";
4526 4537
4527 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4538 FileStorage storage( mCalendar, filename, new ICalFormat() );
4528 return storage.save(); 4539 return storage.save();
4529} 4540}
4530 4541
4531bool CalendarView::exportICalendar() 4542bool CalendarView::exportICalendar()
4532{ 4543{
4533 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) ); 4544 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) );
4534} 4545}
4535 4546
4536bool CalendarView::exportVCalendar( QString filename ) 4547bool CalendarView::exportVCalendar( QString filename )
4537{ 4548{
4538 if (mCalendar->journals().count() > 0) { 4549 if (mCalendar->journals().count() > 0) {
4539 int result = KMessageBox::warningContinueCancel(this, 4550 int result = KMessageBox::warningContinueCancel(this,
4540 i18n("The journal entries can not be\nexported to a vCalendar file."), 4551 i18n("The journal entries can not be\nexported to a vCalendar file."),
4541 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4552 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4542 true); 4553 true);
4543 if (result != KMessageBox::Continue) return false; 4554 if (result != KMessageBox::Continue) return false;
4544 } 4555 }
4545 4556
4546 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4557 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4547 4558
4548 // Force correct extension 4559 // Force correct extension
4549 if (filename.right(4) != ".vcs") filename += ".vcs"; 4560 if (filename.right(4) != ".vcs") filename += ".vcs";
4550 4561
4551 FileStorage storage( mCalendar, filename, new VCalFormat ); 4562 FileStorage storage( mCalendar, filename, new VCalFormat );
4552 return storage.save(); 4563 return storage.save();
4553 4564
4554} 4565}
4555 4566
4556void CalendarView::eventUpdated(Incidence *) 4567void CalendarView::eventUpdated(Incidence *)
4557{ 4568{
4558 setModified(); 4569 setModified();
4559 // Don't call updateView here. The code, which has caused the update of the 4570 // Don't call updateView here. The code, which has caused the update of the
4560 // event is responsible for updating the view. 4571 // event is responsible for updating the view.
4561 // updateView(); 4572 // updateView();
4562} 4573}
4563 4574
4564void CalendarView::adaptNavigationUnits() 4575void CalendarView::adaptNavigationUnits()
4565{ 4576{
4566 if (mViewManager->currentView()->isEventView()) { 4577 if (mViewManager->currentView()->isEventView()) {
4567 int days = mViewManager->currentView()->currentDateCount(); 4578 int days = mViewManager->currentView()->currentDateCount();
4568 if (days == 1) { 4579 if (days == 1) {
4569 emit changeNavStringPrev(i18n("&Previous Day")); 4580 emit changeNavStringPrev(i18n("&Previous Day"));
4570 emit changeNavStringNext(i18n("&Next Day")); 4581 emit changeNavStringNext(i18n("&Next Day"));
4571 } else { 4582 } else {
4572 emit changeNavStringPrev(i18n("&Previous Week")); 4583 emit changeNavStringPrev(i18n("&Previous Week"));
4573 emit changeNavStringNext(i18n("&Next Week")); 4584 emit changeNavStringNext(i18n("&Next Week"));
4574 } 4585 }
4575 } 4586 }
4576} 4587}
4577 4588
4578void CalendarView::processMainViewSelection( Incidence *incidence ) 4589void CalendarView::processMainViewSelection( Incidence *incidence )
4579{ 4590{
4580 if ( incidence ) mTodoList->clearSelection(); 4591 if ( incidence ) mTodoList->clearSelection();
4581 processIncidenceSelection( incidence ); 4592 processIncidenceSelection( incidence );
4582} 4593}
4583 4594
4584void CalendarView::processTodoListSelection( Incidence *incidence ) 4595void CalendarView::processTodoListSelection( Incidence *incidence )
4585{ 4596{
4586 if ( incidence && mViewManager->currentView() ) { 4597 if ( incidence && mViewManager->currentView() ) {
4587 mViewManager->currentView()->clearSelection(); 4598 mViewManager->currentView()->clearSelection();
4588 } 4599 }
4589 processIncidenceSelection( incidence ); 4600 processIncidenceSelection( incidence );
4590} 4601}
4591 4602
4592void CalendarView::processIncidenceSelection( Incidence *incidence ) 4603void CalendarView::processIncidenceSelection( Incidence *incidence )
4593{ 4604{
4594 emit incidenceSelected( incidence ); 4605 emit incidenceSelected( incidence );
4595 if ( incidence == mSelectedIncidence ) return; 4606 if ( incidence == mSelectedIncidence ) return;
4596 mSelectedIncidence = incidence; 4607 mSelectedIncidence = incidence;
4597 4608
4598 if ( incidence && incidence->typeID() == eventID ) { 4609 if ( incidence && incidence->typeID() == eventID ) {
4599 Event *event = static_cast<Event *>( incidence ); 4610 Event *event = static_cast<Event *>( incidence );
4600 if ( event->organizer() == KOPrefs::instance()->email() ) { 4611 if ( event->organizer() == KOPrefs::instance()->email() ) {
4601 emit organizerEventsSelected( true ); 4612 emit organizerEventsSelected( true );
4602 } else { 4613 } else {
4603 emit organizerEventsSelected(false); 4614 emit organizerEventsSelected(false);
4604 } 4615 }
4605 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4616 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4606 KOPrefs::instance()->email() ) ) { 4617 KOPrefs::instance()->email() ) ) {
4607 emit groupEventsSelected( true ); 4618 emit groupEventsSelected( true );
4608 } else { 4619 } else {
4609 emit groupEventsSelected(false); 4620 emit groupEventsSelected(false);
4610 } 4621 }
4611 return; 4622 return;
4612 } else { 4623 } else {
4613 if ( incidence && incidence->typeID() == todoID ) { 4624 if ( incidence && incidence->typeID() == todoID ) {
4614 emit todoSelected( true ); 4625 emit todoSelected( true );
4615 Todo *event = static_cast<Todo *>( incidence ); 4626 Todo *event = static_cast<Todo *>( incidence );
4616 if ( event->organizer() == KOPrefs::instance()->email() ) { 4627 if ( event->organizer() == KOPrefs::instance()->email() ) {
4617 emit organizerEventsSelected( true ); 4628 emit organizerEventsSelected( true );
4618 } else { 4629 } else {
4619 emit organizerEventsSelected(false); 4630 emit organizerEventsSelected(false);
4620 } 4631 }
4621 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4632 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4622 KOPrefs::instance()->email() ) ) { 4633 KOPrefs::instance()->email() ) ) {
4623 emit groupEventsSelected( true ); 4634 emit groupEventsSelected( true );
4624 } else { 4635 } else {
4625 emit groupEventsSelected(false); 4636 emit groupEventsSelected(false);
4626 } 4637 }
4627 return; 4638 return;
4628 } else { 4639 } else {
4629 emit todoSelected( false ); 4640 emit todoSelected( false );
4630 emit organizerEventsSelected(false); 4641 emit organizerEventsSelected(false);
4631 emit groupEventsSelected(false); 4642 emit groupEventsSelected(false);
4632 } 4643 }
4633 return; 4644 return;
4634 } 4645 }
4635 4646
4636 /* if ( incidence && incidence->typeID() == todoID ) { 4647 /* if ( incidence && incidence->typeID() == todoID ) {
4637 emit todoSelected( true ); 4648 emit todoSelected( true );
4638 } else { 4649 } else {
4639 emit todoSelected( false ); 4650 emit todoSelected( false );
4640 }*/ 4651 }*/
4641} 4652}
4642 4653
4643 4654
4644void CalendarView::checkClipboard() 4655void CalendarView::checkClipboard()
4645{ 4656{
4646#ifndef KORG_NODND 4657#ifndef KORG_NODND
4647 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4658 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4648 emit pasteEnabled(true); 4659 emit pasteEnabled(true);
4649 } else { 4660 } else {
4650 emit pasteEnabled(false); 4661 emit pasteEnabled(false);
4651 } 4662 }
4652#endif 4663#endif
4653} 4664}
4654 4665
4655void CalendarView::showDates(const DateList &selectedDates) 4666void CalendarView::showDates(const DateList &selectedDates)
4656{ 4667{
4657 // kdDebug() << "CalendarView::selectDates()" << endl; 4668 // kdDebug() << "CalendarView::selectDates()" << endl;
4658 4669
4659 4670
4660 if ( !mBlockShowDates ) { 4671 if ( !mBlockShowDates ) {
4661 if ( mViewManager->currentView() ) { 4672 if ( mViewManager->currentView() ) {
4662 updateView( selectedDates.first(), selectedDates.last() ); 4673 updateView( selectedDates.first(), selectedDates.last() );
4663 } else { 4674 } else {
4664 mViewManager->showAgendaView(); 4675 mViewManager->showAgendaView();
4665 } 4676 }
4666 } 4677 }
4667 4678
4668 QDate date = selectedDates.first(); 4679 QDate date = selectedDates.first();
4669 if ( ! date.isValid() ) { 4680 if ( ! date.isValid() ) {
4670 topLevelWidget()->setCaption(""); 4681 topLevelWidget()->setCaption("");
4671 return; 4682 return;
4672 } 4683 }
4673 4684
4674 QString selDates; 4685 QString selDates;
4675 selDates = KGlobal::locale()->formatDate( date, true); 4686 selDates = KGlobal::locale()->formatDate( date, true);
4676 if (selectedDates.first() < selectedDates.last() ) 4687 if (selectedDates.first() < selectedDates.last() )
4677 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4688 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4678 else { 4689 else {
4679 QString addString; 4690 QString addString;
4680 if ( date == QDateTime::currentDateTime().date() ) 4691 if ( date == QDateTime::currentDateTime().date() )
4681 addString = i18n("Today"); 4692 addString = i18n("Today");
4682 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4693 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4683 addString = i18n("Tomorrow"); 4694 addString = i18n("Tomorrow");
4684 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4695 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4685 addString = i18n("Yesterday"); 4696 addString = i18n("Yesterday");
4686 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4697 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4687 addString = i18n("Day before yesterday"); 4698 addString = i18n("Day before yesterday");
4688 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4699 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4689 addString = i18n("Day after tomorrow"); 4700 addString = i18n("Day after tomorrow");
4690 if ( !addString.isEmpty() ) { 4701 if ( !addString.isEmpty() ) {
4691 topLevelWidget()->setCaption( addString+", " + selDates ); 4702 topLevelWidget()->setCaption( addString+", " + selDates );
4692 return; 4703 return;
4693 } 4704 }
4694 } 4705 }
4695 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4706 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4696 4707
4697} 4708}
4698 4709
4699QPtrList<CalFilter> CalendarView::filters() 4710QPtrList<CalFilter> CalendarView::filters()
4700{ 4711{
4701 return mFilters; 4712 return mFilters;
4702 4713
4703} 4714}
4704void CalendarView::editFilters() 4715void CalendarView::editFilters()
4705{ 4716{
4706 // kdDebug() << "CalendarView::editFilters()" << endl; 4717 // kdDebug() << "CalendarView::editFilters()" << endl;
4707 4718
4708 CalFilter *filter = mFilters.first(); 4719 CalFilter *filter = mFilters.first();
4709 while(filter) { 4720 while(filter) {
4710 filter = mFilters.next(); 4721 filter = mFilters.next();
4711 } 4722 }
4712 4723
4713 mDialogManager->showFilterEditDialog(&mFilters); 4724 mDialogManager->showFilterEditDialog(&mFilters);
4714 updateFilter(); 4725 updateFilter();
4715} 4726}
4716void CalendarView::toggleFilter() 4727void CalendarView::toggleFilter()
4717{ 4728{
4718 if ( mLeftFrame->isHidden() ) { 4729 if ( mLeftFrame->isHidden() ) {
4719 toggleExpand(); 4730 toggleExpand();
4720 showFilter( true ); 4731 showFilter( true );
4721 } else 4732 } else
4722 showFilter(! mCalEditView->isVisible()); 4733 showFilter(! mCalEditView->isVisible());
4723} 4734}
4724 4735
4725KOFilterView *CalendarView::filterView() 4736KOFilterView *CalendarView::filterView()
4726{ 4737{
4727 return mFilterView; 4738 return mFilterView;
4728} 4739}
4729void CalendarView::selectFilter( int fil ) 4740void CalendarView::selectFilter( int fil )
4730{ 4741{
4731 mFilterView->setSelectedFilter( fil ); 4742 mFilterView->setSelectedFilter( fil );
4732 updateUnmanagedViews(); 4743 updateUnmanagedViews();
4733} 4744}
4734void CalendarView::showFilter(bool visible) 4745void CalendarView::showFilter(bool visible)
4735{ 4746{
4736#if 1 4747#if 1
4737 if (visible) { 4748 if (visible) {
4738 mCalEditView->readConfig(); 4749 mCalEditView->readConfig();
4739 mCalEditView->show(); 4750 mCalEditView->show();
4740 QValueList<int> sizes; 4751 QValueList<int> sizes;
4741 sizes = mLeftFrame->sizes(); 4752 sizes = mLeftFrame->sizes();
4742 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4753 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4743 sizes.clear(); 4754 sizes.clear();
4744 sizes << 100; 4755 sizes << 100;
4745 sizes << 0; 4756 sizes << 0;
4746 sizes << 0; 4757 sizes << 0;
4747 sizes << 100; 4758 sizes << 100;
4748 mLeftFrame->setSizes(sizes); 4759 mLeftFrame->setSizes(sizes);
4749 } 4760 }
4750#if 0 4761#if 0
4751 sizes = mLeftFrame->sizes(); 4762 sizes = mLeftFrame->sizes();
4752 int ccc = 0; 4763 int ccc = 0;
4753 while ( ccc < sizes.count()) { 4764 while ( ccc < sizes.count()) {
4754 qDebug("size %d %d ", ccc, sizes[ccc]); 4765 qDebug("size %d %d ", ccc, sizes[ccc]);
4755 ++ccc; 4766 ++ccc;
4756 } 4767 }
4757#endif 4768#endif
4758 4769
4759 } 4770 }
4760 else { 4771 else {
4761 mCalEditView->hide(); 4772 mCalEditView->hide();
4762 } 4773 }
4763#else 4774#else
4764 if (visible) mFilterView->show(); 4775 if (visible) mFilterView->show();
4765 else mFilterView->hide(); 4776 else mFilterView->hide();
4766#endif 4777#endif
4767} 4778}
4768void CalendarView::toggleFilerEnabled( ) 4779void CalendarView::toggleFilerEnabled( )
4769{ 4780{
4770 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4781 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4771 if ( !mFilterView->filtersEnabled() ) 4782 if ( !mFilterView->filtersEnabled() )
4772 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4783 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4773 updateUnmanagedViews(); 4784 updateUnmanagedViews();
4774 4785
4775} 4786}
4776void CalendarView::updateFilter() 4787void CalendarView::updateFilter()
4777{ 4788{
4778 CalFilter *filter = mFilterView->selectedFilter(); 4789 CalFilter *filter = mFilterView->selectedFilter();
4779 if (filter) { 4790 if (filter) {
4780 QString mess; 4791 QString mess;
4781 if (mFilterView->filtersEnabled()) { 4792 if (mFilterView->filtersEnabled()) {
4782 mess = i18n("Filter selected: ")+filter->name(); 4793 mess = i18n("Filter selected: ")+filter->name();
4783 filter->setEnabled(true); 4794 filter->setEnabled(true);
4784 } 4795 }
4785 else filter->setEnabled(false); 4796 else filter->setEnabled(false);
4786 mCalendar->setFilter(filter); 4797 mCalendar->setFilter(filter);
4787 updateView(); 4798 updateView();
4788 if ( !mess.isEmpty() ) 4799 if ( !mess.isEmpty() )
4789 topLevelWidget()->setCaption( mess ); 4800 topLevelWidget()->setCaption( mess );
4790 4801
4791 } 4802 }
4792 emit filtersUpdated(); 4803 emit filtersUpdated();
4793} 4804}
4794 4805
4795void CalendarView::filterEdited() 4806void CalendarView::filterEdited()
4796{ 4807{
4797 mFilterView->updateFilters(); 4808 mFilterView->updateFilters();
4798 updateFilter(); 4809 updateFilter();
4799 writeSettings(); 4810 writeSettings();
4800} 4811}
4801 4812
4802 4813
4803void CalendarView::takeOverEvent() 4814void CalendarView::takeOverEvent()
4804{ 4815{
4805 Incidence *incidence = currentSelection(); 4816 Incidence *incidence = currentSelection();
4806 4817
4807 if (!incidence) return; 4818 if (!incidence) return;
4808 4819
4809 incidence->setOrganizer(KOPrefs::instance()->email()); 4820 incidence->setOrganizer(KOPrefs::instance()->email());
4810 incidence->recreate(); 4821 incidence->recreate();
4811 incidence->setReadOnly(false); 4822 incidence->setReadOnly(false);
4812 4823
4813 updateView(); 4824 updateView();
4814} 4825}
4815 4826
4816void CalendarView::takeOverCalendar() 4827void CalendarView::takeOverCalendar()
4817{ 4828{
4818 // TODO: Create Calendar::allIncidences() function and use it here 4829 // TODO: Create Calendar::allIncidences() function and use it here
4819 4830
4820 clearAllViews(); 4831 clearAllViews();
4821 QPtrList<Event> events = mCalendar->events(); 4832 QPtrList<Event> events = mCalendar->events();
4822 for(uint i=0; i<events.count(); ++i) { 4833 for(uint i=0; i<events.count(); ++i) {
4823 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4834 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4824 events.at(i)->recreate(); 4835 events.at(i)->recreate();
4825 events.at(i)->setReadOnly(false); 4836 events.at(i)->setReadOnly(false);
4826 } 4837 }
4827 4838
4828 QPtrList<Todo> todos = mCalendar->todos(); 4839 QPtrList<Todo> todos = mCalendar->todos();
4829 for(uint i=0; i<todos.count(); ++i) { 4840 for(uint i=0; i<todos.count(); ++i) {
4830 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4841 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4831 todos.at(i)->recreate(); 4842 todos.at(i)->recreate();
4832 todos.at(i)->setReadOnly(false); 4843 todos.at(i)->setReadOnly(false);
4833 } 4844 }
4834 4845
4835 QPtrList<Journal> journals = mCalendar->journals(); 4846 QPtrList<Journal> journals = mCalendar->journals();
4836 for(uint i=0; i<journals.count(); ++i) { 4847 for(uint i=0; i<journals.count(); ++i) {
4837 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4848 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4838 journals.at(i)->recreate(); 4849 journals.at(i)->recreate();
4839 journals.at(i)->setReadOnly(false); 4850 journals.at(i)->setReadOnly(false);
4840 } 4851 }
4841 4852
4842 updateView(); 4853 updateView();
4843} 4854}
4844 4855
4845void CalendarView::showIntro() 4856void CalendarView::showIntro()
4846{ 4857{
4847 kdDebug() << "To be implemented." << endl; 4858 kdDebug() << "To be implemented." << endl;
4848} 4859}
4849 4860
4850QWidgetStack *CalendarView::viewStack() 4861QWidgetStack *CalendarView::viewStack()
4851{ 4862{
4852 return mRightFrame; 4863 return mRightFrame;
4853} 4864}
4854 4865
4855QWidget *CalendarView::leftFrame() 4866QWidget *CalendarView::leftFrame()
4856{ 4867{
4857 return ( QWidget *)mLeftFrame; 4868 return ( QWidget *)mLeftFrame;
4858} 4869}
4859 4870
4860DateNavigator *CalendarView::dateNavigator() 4871DateNavigator *CalendarView::dateNavigator()
4861{ 4872{
4862 return mNavigator; 4873 return mNavigator;
4863} 4874}
4864 4875
4865KDateNavigator* CalendarView::dateNavigatorWidget() 4876KDateNavigator* CalendarView::dateNavigatorWidget()
4866{ 4877{
4867 return mDateNavigator->navigatorView(); 4878 return mDateNavigator->navigatorView();
4868} 4879}
4869void CalendarView::toggleDateNavigatorWidget() 4880void CalendarView::toggleDateNavigatorWidget()
4870{ 4881{
4871 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4882 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4872 4883
4873 if (!KOPrefs::instance()->mShowDateNavigator ) 4884 if (!KOPrefs::instance()->mShowDateNavigator )
4874 mDateNavigator->hide(); 4885 mDateNavigator->hide();
4875 else 4886 else
4876 mDateNavigator->show(); 4887 mDateNavigator->show();
4877} 4888}
4878void CalendarView::addView(KOrg::BaseView *view) 4889void CalendarView::addView(KOrg::BaseView *view)
4879{ 4890{
4880 mViewManager->addView(view); 4891 mViewManager->addView(view);
4881} 4892}
4882 4893
4883void CalendarView::showView(KOrg::BaseView *view) 4894void CalendarView::showView(KOrg::BaseView *view)
4884{ 4895{
4885 mViewManager->showView(view, mLeftFrame->isVisible()); 4896 mViewManager->showView(view, mLeftFrame->isVisible());
4886} 4897}
4887 4898
4888Incidence *CalendarView::currentSelection() 4899Incidence *CalendarView::currentSelection()
4889{ 4900{
4890 return mViewManager->currentSelection(); 4901 return mViewManager->currentSelection();
4891} 4902}
4892void CalendarView::toggleAllDaySize() 4903void CalendarView::toggleAllDaySize()
4893{ 4904{
4894 /* 4905 /*
4895 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4906 if ( KOPrefs::instance()->mAllDaySize > 47 )
4896 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4907 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4897 else 4908 else
4898 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4909 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4899 */ 4910 */
4900 viewManager()->agendaView()->toggleAllDay(); 4911 viewManager()->agendaView()->toggleAllDay();
4901} 4912}
4902void CalendarView::toggleExpand() 4913void CalendarView::toggleExpand()
4903{ 4914{
4904 // if ( mLeftFrame->isHidden() ) { 4915 // if ( mLeftFrame->isHidden() ) {
4905 // mLeftFrame->show(); 4916 // mLeftFrame->show();
4906 // emit calendarViewExpanded( false ); 4917 // emit calendarViewExpanded( false );
4907 // } else { 4918 // } else {
4908 // mLeftFrame->hide(); 4919 // mLeftFrame->hide();
4909 // emit calendarViewExpanded( true ); 4920 // emit calendarViewExpanded( true );
4910 // } 4921 // }
4911 //qDebug(" CalendarView::toggleExpand()"); 4922 //qDebug(" CalendarView::toggleExpand()");
4912 globalFlagBlockAgenda = 1; 4923 globalFlagBlockAgenda = 1;
4913 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4924 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4914 globalFlagBlockAgenda = 5; 4925 globalFlagBlockAgenda = 5;
4915 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4926 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4916 //mViewManager->showView( 0, true ); 4927 //mViewManager->showView( 0, true );
4917} 4928}
4918 4929
4919void CalendarView::calendarModified( bool modified, Calendar * ) 4930void CalendarView::calendarModified( bool modified, Calendar * )
4920{ 4931{
4921 setModified( modified ); 4932 setModified( modified );
4922} 4933}
4923 4934
4924Todo *CalendarView::selectedTodo() 4935Todo *CalendarView::selectedTodo()
4925{ 4936{
4926 Incidence *incidence = currentSelection(); 4937 Incidence *incidence = currentSelection();
4927 if ( incidence && incidence->typeID() == todoID ) { 4938 if ( incidence && incidence->typeID() == todoID ) {
4928 return static_cast<Todo *>( incidence ); 4939 return static_cast<Todo *>( incidence );
4929 } 4940 }
4930 4941
4931 incidence = mTodoList->selectedIncidences().first(); 4942 incidence = mTodoList->selectedIncidences().first();
4932 if ( incidence && incidence->typeID() == todoID ) { 4943 if ( incidence && incidence->typeID() == todoID ) {
4933 return static_cast<Todo *>( incidence ); 4944 return static_cast<Todo *>( incidence );
4934 } 4945 }
4935 4946
4936 return 0; 4947 return 0;
4937} 4948}
4938 4949
4939void CalendarView::showIncidence() 4950void CalendarView::showIncidence()
4940{ 4951{
4941 mViewerCallerIsSearchDialog = false; 4952 mViewerCallerIsSearchDialog = false;
4942 Incidence *incidence = currentSelection(); 4953 Incidence *incidence = currentSelection();
4943 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4954 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4944 if ( incidence ) { 4955 if ( incidence ) {
4945 ShowIncidenceVisitor v; 4956 ShowIncidenceVisitor v;
4946 v.act( incidence, this ); 4957 v.act( incidence, this );
4947 } 4958 }
4948} 4959}
4949void CalendarView::editIncidenceDescription() 4960void CalendarView::editIncidenceDescription()
4950{ 4961{
4951 mFlagEditDescription = true; 4962 mFlagEditDescription = true;
4952 editIncidence(); 4963 editIncidence();
4953 mFlagEditDescription = false; 4964 mFlagEditDescription = false;
4954} 4965}
4955void CalendarView::editIncidence() 4966void CalendarView::editIncidence()
4956{ 4967{
4957 // qDebug("editIncidence() "); 4968 // qDebug("editIncidence() ");
4958 Incidence *incidence = currentSelection(); 4969 Incidence *incidence = currentSelection();
4959 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4970 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4960 if ( incidence ) { 4971 if ( incidence ) {
4961 EditIncidenceVisitor v; 4972 EditIncidenceVisitor v;
4962 v.act( incidence, this ); 4973 v.act( incidence, this );
4963 } 4974 }
4964} 4975}
4965 4976
4966void CalendarView::deleteIncidence() 4977void CalendarView::deleteIncidence()
4967{ 4978{
4968 Incidence *incidence = currentSelection(); 4979 Incidence *incidence = currentSelection();
4969 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4980 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4970 if ( incidence ) { 4981 if ( incidence ) {
4971 deleteIncidence(incidence); 4982 deleteIncidence(incidence);
4972 } 4983 }
4973} 4984}
4974void CalendarView::showIncidence(QString uid) 4985void CalendarView::showIncidence(QString uid)
4975{ 4986{
4976 Incidence *inc = mCalendar->incidence( uid ); 4987 Incidence *inc = mCalendar->incidence( uid );
4977 if ( inc ) 4988 if ( inc )
4978 showIncidence( inc ); 4989 showIncidence( inc );
4979} 4990}
4980void CalendarView::showIncidence(Incidence *incidence) 4991void CalendarView::showIncidence(Incidence *incidence)
4981{ 4992{
4982 mViewerCallerIsSearchDialog = false; 4993 mViewerCallerIsSearchDialog = false;
4983 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4994 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4984 if ( sender() && mDialogManager->getSearchDialog() ) { 4995 if ( sender() && mDialogManager->getSearchDialog() ) {
4985 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4996 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4986 mViewerCallerIsSearchDialog = true; 4997 mViewerCallerIsSearchDialog = true;
4987 } 4998 }
4988 } 4999 }
4989 if ( incidence ) { 5000 if ( incidence ) {
4990 ShowIncidenceVisitor v; 5001 ShowIncidenceVisitor v;
4991 v.act( incidence, this ); 5002 v.act( incidence, this );
4992 } 5003 }
4993} 5004}
4994 5005
4995void CalendarView::editIncidence(Incidence *incidence) 5006void CalendarView::editIncidence(Incidence *incidence)
4996{ 5007{
4997 if ( incidence ) { 5008 if ( incidence ) {
4998 5009
4999 EditIncidenceVisitor v; 5010 EditIncidenceVisitor v;
5000 v.act( incidence, this ); 5011 v.act( incidence, this );
5001 5012
5002 } 5013 }
5003} 5014}
5004 5015
5005void CalendarView::deleteIncidence(Incidence *incidence) 5016void CalendarView::deleteIncidence(Incidence *incidence)
5006{ 5017{
5007 //qDebug(" CalendarView::deleteIncidence "); 5018 //qDebug(" CalendarView::deleteIncidence ");
5008 if ( incidence == 0 ) { 5019 if ( incidence == 0 ) {
5009 updateView(); 5020 updateView();
5010 emit updateSearchDialog(); 5021 emit updateSearchDialog();
5011 return; 5022 return;
5012 } 5023 }
5013 if ( incidence ) { 5024 if ( incidence ) {
5014 DeleteIncidenceVisitor v; 5025 DeleteIncidenceVisitor v;
5015 v.act( incidence, this ); 5026 v.act( incidence, this );
5016 } 5027 }
5017} 5028}
5018 5029
5019 5030
5020void CalendarView::lookForOutgoingMessages() 5031void CalendarView::lookForOutgoingMessages()
5021{ 5032{
5022 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 5033 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
5023 ogd->loadMessages(); 5034 ogd->loadMessages();
5024} 5035}
5025 5036
5026void CalendarView::lookForIncomingMessages() 5037void CalendarView::lookForIncomingMessages()
5027{ 5038{
5028 IncomingDialog *icd = mDialogManager->incomingDialog(); 5039 IncomingDialog *icd = mDialogManager->incomingDialog();
5029 icd->retrieve(); 5040 icd->retrieve();
5030} 5041}
5031 5042
5032bool CalendarView::removeCompletedSubTodos( Todo* t ) 5043bool CalendarView::removeCompletedSubTodos( Todo* t )
5033{ 5044{
5034 bool deleteTodo = true; 5045 bool deleteTodo = true;
5035 QPtrList<Incidence> subTodos; 5046 QPtrList<Incidence> subTodos;
5036 Incidence *aTodo; 5047 Incidence *aTodo;
5037 subTodos = t->relations(); 5048 subTodos = t->relations();
5038 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 5049 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
5039 if (! removeCompletedSubTodos( (Todo*) aTodo )) 5050 if (! removeCompletedSubTodos( (Todo*) aTodo ))
5040 deleteTodo = false; 5051 deleteTodo = false;
5041 } 5052 }
5042 if ( deleteTodo ) { 5053 if ( deleteTodo ) {
5043 if ( t->isCompleted() && !t->doesRecur()) { 5054 if ( t->isCompleted() && !t->doesRecur()) {
5044 checkExternalId( t ); 5055 checkExternalId( t );
5045 mCalendar->deleteTodo( t ); 5056 mCalendar->deleteTodo( t );
5046 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 5057 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
5047 } 5058 }
5048 else 5059 else
5049 deleteTodo = false; 5060 deleteTodo = false;
5050 } 5061 }
5051 return deleteTodo; 5062 return deleteTodo;
5052 5063
5053} 5064}
5054void CalendarView::purgeCompleted() 5065void CalendarView::purgeCompleted()
5055{ 5066{
5056 int result = KMessageBox::warningContinueCancel(this, 5067 int result = KMessageBox::warningContinueCancel(this,
5057 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5068 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5058 5069
5059 if (result == KMessageBox::Continue) { 5070 if (result == KMessageBox::Continue) {
5060 5071
5061 QPtrList<Todo> todoCal; 5072 QPtrList<Todo> todoCal;
5062 QPtrList<Todo> rootTodos; 5073 QPtrList<Todo> rootTodos;
5063 //QPtrList<Incidence> rel; 5074 //QPtrList<Incidence> rel;
5064 Todo *aTodo; 5075 Todo *aTodo;
5065 todoCal = calendar()->todos(); 5076 todoCal = calendar()->todos();
5066 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5077 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5067 if ( !aTodo->relatedTo() ) 5078 if ( !aTodo->relatedTo() )
5068 rootTodos.append( aTodo ); 5079 rootTodos.append( aTodo );
5069 } 5080 }
5070 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5081 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5071 removeCompletedSubTodos( aTodo ); 5082 removeCompletedSubTodos( aTodo );
5072 } 5083 }
5073 5084
5074 updateView(); 5085 updateView();
5075 } 5086 }
5076} 5087}
5077 5088
5078void CalendarView::slotCalendarChanged() 5089void CalendarView::slotCalendarChanged()
5079{ 5090{
5080 ; 5091 ;
5081} 5092}
5082 5093
5083void CalendarView::keyPressEvent ( QKeyEvent *e) 5094void CalendarView::keyPressEvent ( QKeyEvent *e)
5084{ 5095{
5085 //qDebug("CalendarView::keyPressEvent "); 5096 //qDebug("CalendarView::keyPressEvent ");
5086 e->ignore(); 5097 e->ignore();
5087} 5098}
5088 5099
5089void CalendarView::multiResourceSyncStart( bool start ) 5100void CalendarView::multiResourceSyncStart( bool start )
5090{ 5101{
5091 mMultiResourceSync = start; 5102 mMultiResourceSync = start;
5092 5103
5093} 5104}
5094bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource) 5105bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource)
5095{ 5106{
5096 5107
5097 if ( manager != mSyncManager) 5108 if ( manager != mSyncManager)
5098 qDebug("KO: Internal error-1. SyncManager mismatch "); 5109 qDebug("KO: Internal error-1. SyncManager mismatch ");
5099 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5110 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5100 qDebug("KO: SyncKDE request detected!"); 5111 qDebug("KO: SyncKDE request detected!");
5101 } 5112 }
5102 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5113 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5103 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5114 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5104 if ( !resource.isEmpty() ) { 5115 if ( !resource.isEmpty() ) {
5105 int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 5116 int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
5106 qDebug( "KO: Sync request for resource: %s", resource.latin1() ); 5117 qDebug( "KO: Sync request for resource: %s", resource.latin1() );
5107 5118
5108 if ( !exclusiveSyncResource ) { 5119 if ( !exclusiveSyncResource ) {
5109 qDebug( "KO: Requested sync resource not found: %s", resource.latin1() ); 5120 qDebug( "KO: Requested sync resource not found: %s", resource.latin1() );
5110 return false; 5121 return false;
5111 } 5122 }
5112 mCalendar->setDefaultCalendar( exclusiveSyncResource ); 5123 mCalendar->setDefaultCalendar( exclusiveSyncResource );
5113 mCalendar->setDefaultCalendarEnabledOnly(); 5124 mCalendar->setDefaultCalendarEnabledOnly();
5114 } 5125 }
5115 bool result = syncCalendar( filename, mode ); 5126 bool result = syncCalendar( filename, mode );
5116 if ( !resource.isEmpty() ) 5127 if ( !resource.isEmpty() )
5117 restoreCalendarSettings(); 5128 restoreCalendarSettings();
5118 return result; 5129 return result;
5119} 5130}
5120bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5131bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5121{ 5132{
5122 //mSyncManager = manager; 5133 //mSyncManager = manager;
5123 if ( manager != mSyncManager) 5134 if ( manager != mSyncManager)
5124 qDebug("KO: Internal error-2. SyncManager mismatch "); 5135 qDebug("KO: Internal error-2. SyncManager mismatch ");
5125 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5136 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5126 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5137 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5127 if ( resource == "sharp" ) 5138 if ( resource == "sharp" )
5128 syncExternal( 0 ); 5139 syncExternal( 0 );
5129 if ( resource == "phone" ) 5140 if ( resource == "phone" )
5130 syncExternal( 1 ); 5141 syncExternal( 1 );
5131 // pending setmodified 5142 // pending setmodified
5132 return true; 5143 return true;
5133} 5144}
5134void CalendarView::setSyncManager(KSyncManager* manager) 5145void CalendarView::setSyncManager(KSyncManager* manager)
5135{ 5146{
5136 mSyncManager = manager; 5147 mSyncManager = manager;
5137} 5148}
5138 5149
5139void CalendarView::removeSyncInfo( QString syncProfile) 5150void CalendarView::removeSyncInfo( QString syncProfile)
5140{ 5151{
5141 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5152 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5142 mCalendar->removeSyncInfo( syncProfile ); 5153 mCalendar->removeSyncInfo( syncProfile );
5143 5154
5144} 5155}
5145 5156
5146void CalendarView::undo_delete() 5157void CalendarView::undo_delete()
5147{ 5158{
5148 //qDebug("undo_delete() "); 5159 //qDebug("undo_delete() ");
5149 Incidence* undo = mCalendar->undoIncidence(); 5160 Incidence* undo = mCalendar->undoIncidence();
5150 if ( !undo ) { 5161 if ( !undo ) {
5151 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5162 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5152 i18n("KO/Pi")); 5163 i18n("KO/Pi"));
5153 return; 5164 return;
5154 } 5165 }
5155 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5166 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5156 i18n("\nAre you sure you want\nto restore this?"), 5167 i18n("\nAre you sure you want\nto restore this?"),
5157 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5168 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5158 mCalendar->undoDeleteIncidence(); 5169 mCalendar->undoDeleteIncidence();
5159 updateView(); 5170 updateView();
5160 } 5171 }
5161} 5172}
5162 5173
5163void CalendarView::slotViewerClosed() 5174void CalendarView::slotViewerClosed()
5164{ 5175{
5165 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5176 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5166} 5177}
5167 5178
5168void CalendarView::resetFocus() 5179void CalendarView::resetFocus()
5169{ 5180{
5170 if ( mViewerCallerIsSearchDialog ) { 5181 if ( mViewerCallerIsSearchDialog ) {
5171 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5182 if ( mDialogManager->getSearchDialog()->isVisible() ){
5172 mDialogManager->getSearchDialog()->raise(); 5183 mDialogManager->getSearchDialog()->raise();
5173 mDialogManager->getSearchDialog()->setActiveWindow(); 5184 mDialogManager->getSearchDialog()->setActiveWindow();
5174 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5185 mDialogManager->getSearchDialog()->listview()->resetFocus();
5175 } else 5186 } else
5176 mViewerCallerIsSearchDialog = false; 5187 mViewerCallerIsSearchDialog = false;
5177 } 5188 }
5178 if ( !mViewerCallerIsSearchDialog ) { 5189 if ( !mViewerCallerIsSearchDialog ) {
5179 //mViewManager->currentView()->setFocus(); 5190 //mViewManager->currentView()->setFocus();
5180 //qDebug("sssssssssssssssset focus "); 5191 //qDebug("sssssssssssssssset focus ");
5181 topLevelWidget()->raise(); 5192 topLevelWidget()->raise();
5182 setActiveWindow(); 5193 setActiveWindow();
5183 //setFocus(); 5194 //setFocus();
5184 } 5195 }
5185 mViewerCallerIsSearchDialog = false; 5196 mViewerCallerIsSearchDialog = false;
5186} 5197}
5187 5198
5188void CalendarView::showNextAlarms() 5199void CalendarView::showNextAlarms()
5189{ 5200{
5190 QString message; 5201 QString message;
5191 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5202 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
5192 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5203 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
5193 QString sum = mCalendar->nextSummary(); 5204 QString sum = mCalendar->nextSummary();
5194 QDateTime nextA = mNextAlarmDateTime; 5205 QDateTime nextA = mNextAlarmDateTime;
5195 QDateTime cur = QDateTime::currentDateTime(); 5206 QDateTime cur = QDateTime::currentDateTime();
5196 int secs = cur.secsTo( nextA ); 5207 int secs = cur.secsTo( nextA );
5197 int min = secs /60; 5208 int min = secs /60;
5198 int hours = min /60; 5209 int hours = min /60;
5199 min = min % 60; 5210 min = min % 60;
5200 int days = hours /24; 5211 int days = hours /24;
5201 hours = hours % 24; 5212 hours = hours % 24;
5202 5213
5203 //message = i18n("The next alarm is in:\n"); 5214 //message = i18n("The next alarm is in:\n");
5204 if ( days > 1 ) 5215 if ( days > 1 )
5205 message += i18n("%1 days\n").arg( days ); 5216 message += i18n("%1 days\n").arg( days );
5206 else if ( days == 1 ) 5217 else if ( days == 1 )
5207 message += i18n("1 day\n"); 5218 message += i18n("1 day\n");
5208 if ( hours > 1 ) 5219 if ( hours > 1 )
5209 message += i18n("%1 hours\n").arg( hours ); 5220 message += i18n("%1 hours\n").arg( hours );
5210 else if ( hours == 1 ) 5221 else if ( hours == 1 )
5211 message += i18n("1 hour\n"); 5222 message += i18n("1 hour\n");
5212 if ( min > 1 ) 5223 if ( min > 1 )
5213 message += i18n("%1 minutes\n").arg( min ); 5224 message += i18n("%1 minutes\n").arg( min );
5214 else if ( min == 1 ) 5225 else if ( min == 1 )
5215 message += i18n("1 minute\n"); 5226 message += i18n("1 minute\n");
5216 if ( message.isEmpty() ) 5227 if ( message.isEmpty() )
5217 message = i18n("The next alarm is in\nless than one minute!"); 5228 message = i18n("The next alarm is in\nless than one minute!");
5218 else 5229 else
5219 message = i18n("The next alarm is in:\n") + message; 5230 message = i18n("The next alarm is in:\n") + message;
5220 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5231 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
5221 } else { 5232 } else {
5222 message = i18n("There is no next alarm."); 5233 message = i18n("There is no next alarm.");
5223 5234
5224 } 5235 }
5225#ifdef DESKTOP_VERSION 5236#ifdef DESKTOP_VERSION
5226 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5237 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
5227 message += i18n("\nThe internal alarm notification is disabled!\n"); 5238 message += i18n("\nThe internal alarm notification is disabled!\n");
5228 message += i18n("Enable it in the settings menu, TAB alarm."); 5239 message += i18n("Enable it in the settings menu, TAB alarm.");
5229 } 5240 }
5230 5241
5231#endif 5242#endif
5232 KMessageBox::information( this, message); 5243 KMessageBox::information( this, message);
5233} 5244}
5234 5245
5235void CalendarView::displayCalendarInfo( int id ) 5246void CalendarView::displayCalendarInfo( int id )
5236{ 5247{
5237 int e, t,j; 5248 int e, t,j;
5238 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id ); 5249 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
5239 QString name = kkf->mName; 5250 QString name = kkf->mName;
5240 mCalendar->getIncidenceCount( id, e, t, j ); 5251 mCalendar->getIncidenceCount( id, e, t, j );
5241 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 ); 5252 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
5242 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file); 5253 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file);
5243 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j ); 5254 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j );
5244 KMessageBox::information( this, mess ); 5255 KMessageBox::information( this, mess );
5245 5256
5246 5257
5247} 5258}
diff --git a/libkcal/dndfactory_dummy.h b/libkcal/dndfactory_dummy.h
index 6b73f34..44cc114 100644
--- a/libkcal/dndfactory_dummy.h
+++ b/libkcal/dndfactory_dummy.h
@@ -1,62 +1,65 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22// $Id$ 22// $Id$
23 23
24#ifndef KCAL_DNDFACTORY_H 24#ifndef KCAL_DNDFACTORY_H
25#define KCAL_DNDFACTORY_H 25#define KCAL_DNDFACTORY_H
26 26
27#include "vcalformat.h" 27#include "vcalformat.h"
28 28
29class QDropEvent; 29class QDropEvent;
30 30
31namespace KCal { 31namespace KCal {
32 32
33/** 33/**
34 This class implements functions to create Drag and Drop objects used for 34 This class implements functions to create Drag and Drop objects used for
35 Drag-and-Drop and Copy-and-Paste. 35 Drag-and-Drop and Copy-and-Paste.
36 36
37 @short vCalendar Drag-and-Drop object factory. 37 @short vCalendar Drag-and-Drop object factory.
38*/ 38*/
39class DndFactory { 39class DndFactory {
40 public: 40 public:
41 DndFactory( Calendar * ) {} 41 DndFactory( Calendar * ) {}
42 42
43 /** create an object to be used with the Xdnd Drag And Drop protocol. */ 43 /** create an object to be used with the Xdnd Drag And Drop protocol. */
44 ICalDrag *createDrag(Event *, QWidget *) { return 0; } 44 ICalDrag *createDrag(Event *, QWidget *) { return 0; }
45 /** create an object to be used with the Xdnd Drag And Drop protocol. */ 45 /** create an object to be used with the Xdnd Drag And Drop protocol. */
46 ICalDrag *createDragTodo(Todo *, QWidget *) { return 0; } 46 ICalDrag *createDragTodo(Todo *, QWidget *) { return 0; }
47 /** Create Todo object from drop event */ 47 /** Create Todo object from drop event */
48 Todo *createDropTodo(QDropEvent *) { return 0; } 48 Todo *createDropTodo(QDropEvent *) { return 0; }
49 /** Create Event object from drop event */ 49 /** Create Event object from drop event */
50 Event *createDrop(QDropEvent *) { return 0; } 50 Event *createDrop(QDropEvent *) { return 0; }
51 51
52 /** cut event to clipboard */ 52 /** cut event to clipboard */
53 void cutEvent(Event *) {} 53 void cutEvent(Event *) {}
54 /** cut, copy, and paste operations follow. */ 54 /** cut, copy, and paste operations follow. */
55 bool copyEvent(Event *) { return false; } 55 bool copyEvent(Event *) { return false; }
56 /** pastes the event and returns a pointer to the new event pasted. */ 56 /** pastes the event and returns a pointer to the new event pasted. */
57 Event *pasteEvent(const QDate &, const QTime *newTime = 0) { return 0; } 57 Event *pasteEvent(const QDate &, const QTime *newTime = 0) {
58 Q_UNUSED( newTime );
59 return 0;
60 }
58}; 61};
59 62
60} 63}
61 64
62#endif 65#endif
diff --git a/libkdepim/categoryeditdialog.h b/libkdepim/categoryeditdialog.h
index 3e8ab45..9bb3201 100644
--- a/libkdepim/categoryeditdialog.h
+++ b/libkdepim/categoryeditdialog.h
@@ -1,86 +1,86 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 Copyright (c) 2000, 2001, 2002 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000, 2001, 2002 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KPIM_CATEGORYEDITDIALOG_H 23#ifndef KPIM_CATEGORYEDITDIALOG_H
24#define KPIM_CATEGORYEDITDIALOG_H 24#define KPIM_CATEGORYEDITDIALOG_H
25 25
26#include <categoryeditdialog_base.h> 26#include <categoryeditdialog_base.h>
27#include <qlistview.h> 27#include <qlistview.h>
28 28
29class KPimPrefs; 29class KPimPrefs;
30 30
31namespace KPIM { 31namespace KPIM {
32 32
33 class CategorySelectItem :public QObject, public QCheckListItem 33 class CategorySelectItem :public QObject, public QCheckListItem
34{ 34{
35 35
36 Q_OBJECT 36 Q_OBJECT
37 public: 37 public:
38 38
39 CategorySelectItem(QListView * parent, const QString & text, Type tt) : 39 CategorySelectItem(QListView * parent, const QString & text, Type tt) : QObject( parent ),
40 QCheckListItem (parent, text, tt ) , QObject( parent ) 40 QCheckListItem (parent, text, tt )
41 {;} 41 {;}
42 42
43 signals: 43 signals:
44 void stateChanged( QListViewItem*); 44 void stateChanged( QListViewItem*);
45 45
46 protected: 46 protected:
47 47
48 virtual void stateChange(bool b) 48 virtual void stateChange(bool b)
49 { 49 {
50 QCheckListItem::stateChange(b); 50 QCheckListItem::stateChange(b);
51 emit stateChanged( this ); 51 emit stateChanged( this );
52 } 52 }
53}; 53};
54 54
55 55
56class CategoryEditDialog : public CategoryEditDialog_base 56class CategoryEditDialog : public CategoryEditDialog_base
57{ 57{
58 Q_OBJECT 58 Q_OBJECT
59 public: 59 public:
60 CategoryEditDialog( KPimPrefs *prefs, QWidget* parent = 0, 60 CategoryEditDialog( KPimPrefs *prefs, QWidget* parent = 0,
61 const char* name = 0, 61 const char* name = 0,
62 bool modal = FALSE, WFlags fl = 0 ); 62 bool modal = FALSE, WFlags fl = 0 );
63 ~CategoryEditDialog(); 63 ~CategoryEditDialog();
64 64
65 public slots: 65 public slots:
66 void add(); 66 void add();
67 void remove(); 67 void remove();
68 void modify(); 68 void modify();
69 void accept(); 69 void accept();
70 70
71 void slotOk(); 71 void slotOk();
72 void slotApply(); 72 void slotApply();
73 73
74 signals: 74 signals:
75 void categoryConfigChanged(); 75 void categoryConfigChanged();
76 76
77 private slots: 77 private slots:
78 void editItem(QListViewItem *item); 78 void editItem(QListViewItem *item);
79 void slotTextChanged(const QString &text); 79 void slotTextChanged(const QString &text);
80 80
81 KPimPrefs *mPrefs; 81 KPimPrefs *mPrefs;
82}; 82};
83 83
84} 84}
85 85
86#endif 86#endif
diff --git a/libkdepim/categoryselectdialog.cpp b/libkdepim/categoryselectdialog.cpp
index a4e0024..2a9b43e 100644
--- a/libkdepim/categoryselectdialog.cpp
+++ b/libkdepim/categoryselectdialog.cpp
@@ -1,245 +1,246 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 Copyright (c) 2000, 2001, 2002 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000, 2001, 2002 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlistview.h> 24#include <qlistview.h>
25#include <qpushbutton.h> 25#include <qpushbutton.h>
26#include <qheader.h> 26#include <qheader.h>
27#include <qapp.h> 27#include <qapp.h>
28#include <qmessagebox.h> 28#include <qmessagebox.h>
29#include <kmessagebox.h> 29#include <kmessagebox.h>
30 30
31 31
32#include "categoryeditdialog.h" 32#include "categoryeditdialog.h"
33#include "categoryselectdialog.h" 33#include "categoryselectdialog.h"
34 34
35#include "kpimprefs.h" 35#include "kpimprefs.h"
36 36
37using namespace KPIM; 37using namespace KPIM;
38 38
39CategorySelectDialog::CategorySelectDialog( KPimPrefs *prefs, QWidget* parent, 39CategorySelectDialog::CategorySelectDialog( KPimPrefs *prefs, QWidget* parent,
40 const char* name, 40 const char* name,
41 bool modal, WFlags fl ) 41 bool modal, WFlags fl )
42 : CategorySelectDialog_base( parent, name, true, fl ), 42 : CategorySelectDialog_base( parent, name, true, fl ),
43 mPrefs( prefs ) 43 mPrefs( prefs )
44{ 44{
45 Q_UNUSED( modal );
45 mColorItem = 0; 46 mColorItem = 0;
46 mColorEnabled = false; 47 mColorEnabled = false;
47 mCategories->header()->hide(); 48 mCategories->header()->hide();
48 49
49 setCategories(); 50 setCategories();
50 51
51 connect(mButtonEdit,SIGNAL(clicked()),this, SLOT(editCategoriesDialog())); 52 connect(mButtonEdit,SIGNAL(clicked()),this, SLOT(editCategoriesDialog()));
52 if ( QApplication::desktop()->width() > 460 ) 53 if ( QApplication::desktop()->width() > 460 )
53 resize( 300, 360 ); 54 resize( 300, 360 );
54 else 55 else
55 showMaximized(); 56 showMaximized();
56 connect( mSetColorCat, SIGNAL( clicked() ), this, SLOT( setColorCat() ) ); 57 connect( mSetColorCat, SIGNAL( clicked() ), this, SLOT( setColorCat() ) );
57 // connect( mCategories, SIGNAL( clicked(QListViewItem *) ), this, SLOT( clicked(QListViewItem *) ) ); 58 // connect( mCategories, SIGNAL( clicked(QListViewItem *) ), this, SLOT( clicked(QListViewItem *) ) );
58#ifndef DESKTOP_VERSION 59#ifndef DESKTOP_VERSION
59 mButtonOk->hide(); 60 mButtonOk->hide();
60 mButtonCancel->hide(); 61 mButtonCancel->hide();
61#endif 62#endif
62} 63}
63void CategorySelectDialog::editCategoriesDialog() 64void CategorySelectDialog::editCategoriesDialog()
64{ 65{
65 KPIM::CategoryEditDialog* ced = new KPIM::CategoryEditDialog(mPrefs,this ); 66 KPIM::CategoryEditDialog* ced = new KPIM::CategoryEditDialog(mPrefs,this );
66 67
67 ced->exec(); 68 ced->exec();
68 delete ced; 69 delete ced;
69 slotApply(); 70 slotApply();
70 QStringList temp = mCategoryList; 71 QStringList temp = mCategoryList;
71 setCategories(); 72 setCategories();
72 setSelected( temp ); 73 setSelected( temp );
73} 74}
74void CategorySelectDialog::setCategories() 75void CategorySelectDialog::setCategories()
75{ 76{
76 mColorItem = 0; 77 mColorItem = 0;
77 mCategories->clear(); 78 mCategories->clear();
78 mCategoryList.clear(); 79 mCategoryList.clear();
79 80
80 QStringList::Iterator it; 81 QStringList::Iterator it;
81 for (it = mPrefs->mCustomCategories.begin(); 82 for (it = mPrefs->mCustomCategories.begin();
82 it != mPrefs->mCustomCategories.end(); ++it ) { 83 it != mPrefs->mCustomCategories.end(); ++it ) {
83 CategorySelectItem * item = new CategorySelectItem(mCategories,*it,QCheckListItem::CheckBox); 84 CategorySelectItem * item = new CategorySelectItem(mCategories,*it,QCheckListItem::CheckBox);
84 QObject::connect( item, SIGNAL( stateChanged(QListViewItem *) ), this, SLOT( clicked(QListViewItem *) ) ); 85 QObject::connect( item, SIGNAL( stateChanged(QListViewItem *) ), this, SLOT( clicked(QListViewItem *) ) );
85 86
86 } 87 }
87} 88}
88 89
89CategorySelectDialog::~CategorySelectDialog() 90CategorySelectDialog::~CategorySelectDialog()
90{ 91{
91} 92}
92 93
93void CategorySelectDialog::setSelected(const QStringList &selList) 94void CategorySelectDialog::setSelected(const QStringList &selList)
94{ 95{
95 clear(); 96 clear();
96 97
97 QStringList::ConstIterator it; 98 QStringList::ConstIterator it;
98 QStringList notFound; 99 QStringList notFound;
99 bool found = false; 100 bool found = false;
100 for (it=selList.begin();it!=selList.end();++it) { 101 for (it=selList.begin();it!=selList.end();++it) {
101 //qDebug(" CategorySelectDialog::setSelected("); 102 //qDebug(" CategorySelectDialog::setSelected(");
102 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild(); 103 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild();
103 while (item) { 104 while (item) {
104 if (item->text() == *it) { 105 if (item->text() == *it) {
105 item->setOn(true); 106 item->setOn(true);
106 if ( ! found ) 107 if ( ! found )
107 setColorItem( item ); 108 setColorItem( item );
108 found = true; 109 found = true;
109 break; 110 break;
110 } 111 }
111 item = (QCheckListItem *)item->nextSibling(); 112 item = (QCheckListItem *)item->nextSibling();
112 } 113 }
113// if ( ! found ) { 114// if ( ! found ) {
114 115
115//emit updateCategoriesGlobal(); 116//emit updateCategoriesGlobal();
116// QMessageBox::information( this, "KO/E: Information!", 117// QMessageBox::information( this, "KO/E: Information!",
117// "Categories found, which were not\n" 118// "Categories found, which were not\n"
118// "in list of categories!\n" 119// "in list of categories!\n"
119// "message", 120// "message",
120// "OK", "", 0, 121// "OK", "", 0,
121// 0, 1 ); 122// 0, 1 );
122// setSelected(selList); 123// setSelected(selList);
123// return; 124// return;
124// } 125// }
125 } 126 }
126} 127}
127 128
128QStringList CategorySelectDialog::selectedCategories() const 129QStringList CategorySelectDialog::selectedCategories() const
129{ 130{
130 return mCategoryList; 131 return mCategoryList;
131} 132}
132void CategorySelectDialog::setColorEnabled() 133void CategorySelectDialog::setColorEnabled()
133{ 134{
134 mColorEnabled = true; 135 mColorEnabled = true;
135 mSetColorCat->show(); 136 mSetColorCat->show();
136} 137}
137void CategorySelectDialog::setColorCat() 138void CategorySelectDialog::setColorCat()
138{ 139{
139 QCheckListItem * newColorItem = (QCheckListItem * )mCategories->currentItem (); 140 QCheckListItem * newColorItem = (QCheckListItem * )mCategories->currentItem ();
140 if ( !newColorItem ) { 141 if ( !newColorItem ) {
141 KMessageBox::error(this,i18n("There is no current item.")); 142 KMessageBox::error(this,i18n("There is no current item."));
142 return; 143 return;
143 } 144 }
144 if ( !newColorItem->isOn() ) 145 if ( !newColorItem->isOn() )
145 newColorItem->setOn( true ); 146 newColorItem->setOn( true );
146 setColorItem( newColorItem ); 147 setColorItem( newColorItem );
147 148
148} 149}
149void CategorySelectDialog::clicked ( QListViewItem * it ) 150void CategorySelectDialog::clicked ( QListViewItem * it )
150{ 151{
151 if ( ! it ) 152 if ( ! it )
152 return; 153 return;
153 QCheckListItem *i = (QCheckListItem *) it; 154 QCheckListItem *i = (QCheckListItem *) it;
154 if ( !i->isOn() && i==mColorItem) { 155 if ( !i->isOn() && i==mColorItem) {
155 setColorItem( 0); 156 setColorItem( 0);
156 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild(); 157 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild();
157 while (item) { 158 while (item) {
158 if (item->isOn()) { 159 if (item->isOn()) {
159 setColorItem( item ); 160 setColorItem( item );
160 break; 161 break;
161 } 162 }
162 item = (QCheckListItem *)item->nextSibling(); 163 item = (QCheckListItem *)item->nextSibling();
163 } 164 }
164 } else if ( i->isOn() && !mColorItem) { 165 } else if ( i->isOn() && !mColorItem) {
165 setColorItem( i); 166 setColorItem( i);
166 } 167 }
167} 168}
168void CategorySelectDialog::setColorItem( QCheckListItem * newColorItem ) 169void CategorySelectDialog::setColorItem( QCheckListItem * newColorItem )
169{ 170{
170 if ( !mColorEnabled ) 171 if ( !mColorEnabled )
171 return; 172 return;
172 if ( mColorItem == newColorItem) 173 if ( mColorItem == newColorItem)
173 return; 174 return;
174 if ( mColorItem ) { 175 if ( mColorItem ) {
175 mColorItem->setPixmap ( 0, QPixmap() ); 176 mColorItem->setPixmap ( 0, QPixmap() );
176 mColorItem = 0; 177 mColorItem = 0;
177 } 178 }
178 if ( newColorItem ) { 179 if ( newColorItem ) {
179 QPixmap pix (newColorItem->height()/2, newColorItem->height()/2 ); 180 QPixmap pix (newColorItem->height()/2, newColorItem->height()/2 );
180 pix.fill(Qt::red ); 181 pix.fill(Qt::red );
181 newColorItem->setPixmap ( 0, pix ); 182 newColorItem->setPixmap ( 0, pix );
182 mColorItem = newColorItem; 183 mColorItem = newColorItem;
183 } 184 }
184} 185}
185void CategorySelectDialog::slotApply() 186void CategorySelectDialog::slotApply()
186{ 187{
187 QStringList categories; 188 QStringList categories;
188 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild(); 189 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild();
189 QString colcat; 190 QString colcat;
190 while (item) { 191 while (item) {
191 if (item->isOn()) { 192 if (item->isOn()) {
192 if ( item == mColorItem) 193 if ( item == mColorItem)
193 colcat = item->text(); 194 colcat = item->text();
194 else 195 else
195 categories.append(item->text()); 196 categories.append(item->text());
196 } 197 }
197 item = (QCheckListItem *)item->nextSibling(); 198 item = (QCheckListItem *)item->nextSibling();
198 } 199 }
199 categories.sort(); 200 categories.sort();
200 if ( ! colcat.isEmpty() ) 201 if ( ! colcat.isEmpty() )
201 categories.prepend( colcat ); 202 categories.prepend( colcat );
202 // QString categoriesStr = categories.join(","); 203 // QString categoriesStr = categories.join(",");
203 204
204 mCategoryList = categories; 205 mCategoryList = categories;
205 206
206} 207}
207void CategorySelectDialog::accept() 208void CategorySelectDialog::accept()
208{ 209{
209 slotOk(); 210 slotOk();
210} 211}
211 212
212void CategorySelectDialog::slotOk() 213void CategorySelectDialog::slotOk()
213{ 214{
214 slotApply(); 215 slotApply();
215 emit categoriesSelected(mCategoryList); 216 emit categoriesSelected(mCategoryList);
216 emit categoriesSelected(mCategoryList.join(",")); 217 emit categoriesSelected(mCategoryList.join(","));
217 QDialog::accept(); 218 QDialog::accept();
218} 219}
219 220
220void CategorySelectDialog::clear() 221void CategorySelectDialog::clear()
221{ 222{
222 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild(); 223 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild();
223 while (item) { 224 while (item) {
224 item->setOn(false); 225 item->setOn(false);
225 item = (QCheckListItem *)item->nextSibling(); 226 item = (QCheckListItem *)item->nextSibling();
226 } 227 }
227} 228}
228 229
229void CategorySelectDialog::updateCategoryConfig() 230void CategorySelectDialog::updateCategoryConfig()
230{ 231{
231 QStringList selected; 232 QStringList selected;
232 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild(); 233 QCheckListItem *item = (QCheckListItem *)mCategories->firstChild();
233 while (item) { 234 while (item) {
234 if (item->isOn()) { 235 if (item->isOn()) {
235 selected.append(item->text()); 236 selected.append(item->text());
236 } 237 }
237 item = (QCheckListItem *)item->nextSibling(); 238 item = (QCheckListItem *)item->nextSibling();
238 } 239 }
239 240
240 setCategories(); 241 setCategories();
241 242
242 setSelected(selected); 243 setSelected(selected);
243} 244}
244 245
245//#include "categoryselectdialog.moc" 246//#include "categoryselectdialog.moc"
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index 0109c02..28c48fe 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -1,1812 +1,1811 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21// $Id$ 21// $Id$
22 22
23#include "ksyncmanager.h" 23#include "ksyncmanager.h"
24 24
25#include <stdlib.h> 25#include <stdlib.h>
26 26
27#ifndef _WIN32_ 27#ifndef _WIN32_
28#include <unistd.h> 28#include <unistd.h>
29#endif 29#endif
30 30
31 31
32#include "ksyncprofile.h" 32#include "ksyncprofile.h"
33#include "ksyncprefsdialog.h" 33#include "ksyncprefsdialog.h"
34#include "kpimprefs.h" 34#include "kpimprefs.h"
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36 36
37#include <qdir.h> 37#include <qdir.h>
38#include <qprogressbar.h> 38#include <qprogressbar.h>
39#include <qpopupmenu.h> 39#include <qpopupmenu.h>
40#include <qpushbutton.h> 40#include <qpushbutton.h>
41#include <qradiobutton.h> 41#include <qradiobutton.h>
42#include <qbuttongroup.h> 42#include <qbuttongroup.h>
43#include <qtimer.h> 43#include <qtimer.h>
44#include <qmessagebox.h> 44#include <qmessagebox.h>
45#include <qapplication.h> 45#include <qapplication.h>
46#include <qlineedit.h> 46#include <qlineedit.h>
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qlabel.h> 50#include <qlabel.h>
51#include <qcheckbox.h> 51#include <qcheckbox.h>
52#include <qapplication.h> 52#include <qapplication.h>
53 53
54#include <klocale.h> 54#include <klocale.h>
55#include <kglobal.h> 55#include <kglobal.h>
56#include <kconfig.h> 56#include <kconfig.h>
57#include <kfiledialog.h> 57#include <kfiledialog.h>
58 58
59QDateTime KSyncManager::mRequestedSyncEvent; 59QDateTime KSyncManager::mRequestedSyncEvent;
60 60
61 61
62KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu) 62KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
63 : QObject(), mPrefs(prefs ), mParent(parent),mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu) 63 : QObject(), mPrefs(prefs ), mParent(parent),mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu)
64{ 64{
65 mServerSocket = 0; 65 mServerSocket = 0;
66 bar = new QProgressBar ( 1, 0 ); 66 bar = new QProgressBar ( 1, 0 );
67 bar->setCaption (""); 67 bar->setCaption ("");
68 mWriteBackInPast = 2; 68 mWriteBackInPast = 2;
69 69
70 70
71} 71}
72 72
73KSyncManager::~KSyncManager() 73KSyncManager::~KSyncManager()
74{ 74{
75 delete bar; 75 delete bar;
76} 76}
77 77
78void KSyncManager::setDefaultFileName( QString s) 78void KSyncManager::setDefaultFileName( QString s)
79{ 79{
80 mDefFileName = s ; 80 mDefFileName = s ;
81 if ( mPrefs->mPassiveSyncAutoStart ) 81 if ( mPrefs->mPassiveSyncAutoStart )
82 enableQuick( false ); 82 enableQuick( false );
83} 83}
84 84
85void KSyncManager::fillSyncMenu() 85void KSyncManager::fillSyncMenu()
86{ 86{
87 if ( mSyncMenu->count() ) 87 if ( mSyncMenu->count() )
88 mSyncMenu->clear(); 88 mSyncMenu->clear();
89 89
90 mSyncMenu->insertItem( i18n("Configure..."), 0 ); 90 mSyncMenu->insertItem( i18n("Configure..."), 0 );
91 mSyncMenu->insertSeparator(); 91 mSyncMenu->insertSeparator();
92 QPopupMenu *clearMenu = new QPopupMenu ( mSyncMenu ); 92 QPopupMenu *clearMenu = new QPopupMenu ( mSyncMenu );
93 mSyncMenu->insertItem( i18n("Remove sync info"),clearMenu, 5000 ); 93 mSyncMenu->insertItem( i18n("Remove sync info"),clearMenu, 5000 );
94 clearMenu->insertItem( i18n("For all profiles"), 1 ); 94 clearMenu->insertItem( i18n("For all profiles"), 1 );
95 clearMenu->insertSeparator(); 95 clearMenu->insertSeparator();
96 connect ( clearMenu, SIGNAL( activated ( int ) ), this, SLOT (slotClearMenu( int ) ) ); 96 connect ( clearMenu, SIGNAL( activated ( int ) ), this, SLOT (slotClearMenu( int ) ) );
97 mSyncMenu->insertSeparator(); 97 mSyncMenu->insertSeparator();
98 if ( mServerSocket == 0 ) { 98 if ( mServerSocket == 0 ) {
99 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 ); 99 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 );
100 } else { 100 } else {
101 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 ); 101 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 );
102 } 102 }
103 mSyncMenu->insertSeparator(); 103 mSyncMenu->insertSeparator();
104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 ); 104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
105 mSyncMenu->insertSeparator(); 105 mSyncMenu->insertSeparator();
106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
107 config.setGroup("General"); 107 config.setGroup("General");
108 QStringList prof = config.readListEntry("SyncProfileNames"); 108 QStringList prof = config.readListEntry("SyncProfileNames");
109 mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 109 mLocalMachineName = config.readEntry("LocalMachineName","undefined");
110 if ( prof.count() < 2 ) { 110 if ( prof.count() < 2 ) {
111 prof.clear(); 111 prof.clear();
112 QString externalName; 112 QString externalName;
113#ifdef DESKTOP_VERSION 113#ifdef DESKTOP_VERSION
114#ifdef _WIN32_ 114#ifdef _WIN32_
115 externalName = "OutLook(not_implemented)"; 115 externalName = "OutLook(not_implemented)";
116#else 116#else
117 externalName = "KDE_Desktop"; 117 externalName = "KDE_Desktop";
118#endif 118#endif
119#else 119#else
120 externalName = "Sharp_DTM"; 120 externalName = "Sharp_DTM";
121#endif 121#endif
122 prof << externalName; 122 prof << externalName;
123 prof << i18n("Local_file"); 123 prof << i18n("Local_file");
124 prof << i18n("Last_file"); 124 prof << i18n("Last_file");
125 KSyncProfile* temp = new KSyncProfile (); 125 KSyncProfile* temp = new KSyncProfile ();
126 temp->setName( prof[0] ); 126 temp->setName( prof[0] );
127 temp->writeConfig(&config); 127 temp->writeConfig(&config);
128 temp->setName( prof[1] ); 128 temp->setName( prof[1] );
129 temp->writeConfig(&config); 129 temp->writeConfig(&config);
130 temp->setName( prof[2] ); 130 temp->setName( prof[2] );
131 temp->writeConfig(&config); 131 temp->writeConfig(&config);
132 config.setGroup("General"); 132 config.setGroup("General");
133 config.writeEntry("SyncProfileNames",prof); 133 config.writeEntry("SyncProfileNames",prof);
134 config.writeEntry("ExternSyncProfiles",externalName); 134 config.writeEntry("ExternSyncProfiles",externalName);
135 config.sync(); 135 config.sync();
136 delete temp; 136 delete temp;
137 } 137 }
138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
139 mSyncProfileNames = prof; 139 mSyncProfileNames = prof;
140 unsigned int i; 140 unsigned int i;
141 for ( i = 0; i < prof.count(); ++i ) { 141 for ( i = 0; i < prof.count(); ++i ) {
142 QString insertText = prof[i]; 142 QString insertText = prof[i];
143 if ( i == 0 ) { 143 if ( i == 0 ) {
144#ifdef DESKTOP_VERSION 144#ifdef DESKTOP_VERSION
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 insertText = "OutLook(not_implemented)"; 146 insertText = "OutLook(not_implemented)";
147#else 147#else
148 insertText = "KDE_Desktop"; 148 insertText = "KDE_Desktop";
149#endif 149#endif
150#else 150#else
151 insertText = "Sharp_DTM"; 151 insertText = "Sharp_DTM";
152#endif 152#endif
153 } 153 }
154 mSyncMenu->insertItem( insertText, 1000+i ); 154 mSyncMenu->insertItem( insertText, 1000+i );
155 clearMenu->insertItem( insertText, 1000+i ); 155 clearMenu->insertItem( insertText, 1000+i );
156 if ( i == 2 ) 156 if ( i == 2 )
157 mSyncMenu->insertSeparator(); 157 mSyncMenu->insertSeparator();
158 } 158 }
159 QDir app_dir; 159 QDir app_dir;
160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available 160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
161 if ( mTargetApp == PWMPI) { 161 if ( mTargetApp == PWMPI) {
162 mSyncMenu->removeItem( 1000 ); 162 mSyncMenu->removeItem( 1000 );
163 clearMenu->removeItem( 1000 ); 163 clearMenu->removeItem( 1000 );
164 } 164 }
165#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
167 mSyncMenu->removeItem( 1000 ); 167 mSyncMenu->removeItem( 1000 );
168 clearMenu->removeItem( 1000 ); 168 clearMenu->removeItem( 1000 );
169 } 169 }
170#endif 170#endif
171 mSyncMenu->removeItem( 1002 ); 171 mSyncMenu->removeItem( 1002 );
172 clearMenu->removeItem( 1002 ); 172 clearMenu->removeItem( 1002 );
173} 173}
174void KSyncManager::slotClearMenu( int action ) 174void KSyncManager::slotClearMenu( int action )
175{ 175{
176 QString syncDevice; 176 QString syncDevice;
177 if ( action > 999 ) { 177 if ( action > 999 ) {
178 syncDevice = mSyncProfileNames[action - 1000] ; 178 syncDevice = mSyncProfileNames[action - 1000] ;
179 } 179 }
180 180
181 181
182 182
183 int result = 0; 183 int result = 0;
184 QString sd; 184 QString sd;
185 if ( syncDevice.isEmpty() ) 185 if ( syncDevice.isEmpty() )
186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?"); 186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?");
187 else 187 else
188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice ); 188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice );
189 189
190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0, 190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0,
191 0, 1 ); 191 0, 1 );
192 if ( result ) 192 if ( result )
193 return; 193 return;
194 mImplementation->removeSyncInfo( syncDevice ); 194 mImplementation->removeSyncInfo( syncDevice );
195} 195}
196void KSyncManager::slotSyncMenu( int action ) 196void KSyncManager::slotSyncMenu( int action )
197{ 197{
198 qDebug("KSM::syncaction %d ", action); 198 qDebug("KSM::syncaction %d ", action);
199 mCurrentResourceLocal = ""; 199 mCurrentResourceLocal = "";
200 emit multiResourceSyncStart( false ); 200 emit multiResourceSyncStart( false );
201 if ( action == 5000 ) 201 if ( action == 5000 )
202 return; 202 return;
203 mSyncWithDesktop = false; 203 mSyncWithDesktop = false;
204 if ( action == 0 ) { 204 if ( action == 0 ) {
205 205
206 // seems to be a Qt2 event handling bug 206 // seems to be a Qt2 event handling bug
207 // syncmenu.clear causes a segfault at first time 207 // syncmenu.clear causes a segfault at first time
208 // when we call it after the main event loop, it is ok 208 // when we call it after the main event loop, it is ok
209 // same behaviour when calling OM/Pi via QCOP for the first time 209 // same behaviour when calling OM/Pi via QCOP for the first time
210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
211 //confSync(); 211 //confSync();
212 212
213 return; 213 return;
214 } 214 }
215 if ( action == 1 ) { 215 if ( action == 1 ) {
216 multiSync( true ); 216 multiSync( true );
217 return; 217 return;
218 } 218 }
219 if ( action == 2 ) { 219 if ( action == 2 ) {
220 enableQuick(); 220 enableQuick();
221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
222 return; 222 return;
223 } 223 }
224 if ( action == 3 ) { 224 if ( action == 3 ) {
225 delete mServerSocket; 225 delete mServerSocket;
226 mServerSocket = 0; 226 mServerSocket = 0;
227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
228 return; 228 return;
229 } 229 }
230 230
231 if (blockSave()) 231 if (blockSave())
232 return; 232 return;
233 233
234 setBlockSave(true); 234 setBlockSave(true);
235 bool silent = false; 235 bool silent = false;
236 if ( action == 999 ) { 236 if ( action == 999 ) {
237 //special mode for silent syncing 237 //special mode for silent syncing
238 action = 1000; 238 action = 1000;
239 silent = true; 239 silent = true;
240 } 240 }
241 241
242 mCurrentSyncProfile = action - 1000 ; 242 mCurrentSyncProfile = action - 1000 ;
243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ; 243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ;
244 mCurrentSyncName = mLocalMachineName ; 244 mCurrentSyncName = mLocalMachineName ;
245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
246 KSyncProfile* temp = new KSyncProfile (); 246 KSyncProfile* temp = new KSyncProfile ();
247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]); 247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]);
248 temp->readConfig(&config); 248 temp->readConfig(&config);
249 if (silent) { 249 if (silent) {
250 mAskForPreferences = false; 250 mAskForPreferences = false;
251 mShowSyncSummary = false; 251 mShowSyncSummary = false;
252 mWriteBackFile = true; 252 mWriteBackFile = true;
253 mSyncAlgoPrefs = 2;// take newest 253 mSyncAlgoPrefs = 2;// take newest
254 } 254 }
255 else { 255 else {
256 mAskForPreferences = temp->getAskForPreferences(); 256 mAskForPreferences = temp->getAskForPreferences();
257 mShowSyncSummary = temp->getShowSummaryAfterSync(); 257 mShowSyncSummary = temp->getShowSummaryAfterSync();
258 mWriteBackFile = temp->getWriteBackFile(); 258 mWriteBackFile = temp->getWriteBackFile();
259 mSyncAlgoPrefs = temp->getSyncPrefs(); 259 mSyncAlgoPrefs = temp->getSyncPrefs();
260 } 260 }
261 mWriteBackExistingOnly = temp->getWriteBackExisting(); 261 mWriteBackExistingOnly = temp->getWriteBackExisting();
262 mIsKapiFile = temp->getIsKapiFile(); 262 mIsKapiFile = temp->getIsKapiFile();
263 mWriteBackInFuture = 0; 263 mWriteBackInFuture = 0;
264 if ( temp->getWriteBackFuture() ) { 264 if ( temp->getWriteBackFuture() ) {
265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
266 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 266 mWriteBackInPast = temp->getWriteBackPastWeeks( );
267 } 267 }
268 mFilterInCal = temp->getFilterInCal(); 268 mFilterInCal = temp->getFilterInCal();
269 mFilterOutCal = temp->getFilterOutCal(); 269 mFilterOutCal = temp->getFilterOutCal();
270 mFilterInAB = temp->getFilterInAB(); 270 mFilterInAB = temp->getFilterInAB();
271 mFilterOutAB = temp->getFilterOutAB(); 271 mFilterOutAB = temp->getFilterOutAB();
272 272
273 if ( action == 1000 ) { 273 if ( action == 1000 ) {
274 mIsKapiFile = false; 274 mIsKapiFile = false;
275#ifdef DESKTOP_VERSION 275#ifdef DESKTOP_VERSION
276 syncKDE(); 276 syncKDE();
277#else 277#else
278 syncSharp(); 278 syncSharp();
279#endif 279#endif
280 280
281 } else if ( action == 1001 ) { 281 } else if ( action == 1001 ) {
282 syncLocalFile(); 282 syncLocalFile();
283 283
284 } else if ( action == 1002 ) { 284 } else if ( action == 1002 ) {
285 mWriteBackFile = false; 285 mWriteBackFile = false;
286 mAskForPreferences = false; 286 mAskForPreferences = false;
287 mShowSyncSummary = false; 287 mShowSyncSummary = false;
288 mSyncAlgoPrefs = 3; 288 mSyncAlgoPrefs = 3;
289 quickSyncLocalFile(); 289 quickSyncLocalFile();
290 290
291 } else if ( action >= 1003 ) { 291 } else if ( action >= 1003 ) {
292 if ( temp->getIsLocalFileSync() ) { 292 if ( temp->getIsLocalFileSync() ) {
293 switch(mTargetApp) 293 switch(mTargetApp)
294 { 294 {
295 case (KAPI): 295 case (KAPI):
296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
297 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 297 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
298 break; 298 break;
299 case (KOPI): 299 case (KOPI):
300 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 300 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
301 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 301 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
302 break; 302 break;
303 case (PWMPI): 303 case (PWMPI):
304 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 304 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
305 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 305 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
306 break; 306 break;
307 default: 307 default:
308 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 308 qDebug("KSM::slotSyncMenu: invalid apptype selected");
309 break; 309 break;
310 310
311 } 311 }
312 } else { 312 } else {
313 if ( temp->getIsPhoneSync() ) { 313 if ( temp->getIsPhoneSync() ) {
314 mPhoneDevice = temp->getPhoneDevice( ) ; 314 mPhoneDevice = temp->getPhoneDevice( ) ;
315 mPhoneConnection = temp->getPhoneConnection( ); 315 mPhoneConnection = temp->getPhoneConnection( );
316 mPhoneModel = temp->getPhoneModel( ); 316 mPhoneModel = temp->getPhoneModel( );
317 syncPhone(); 317 syncPhone();
318 } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) { 318 } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) {
319 mSpecificResources.clear(); 319 mSpecificResources.clear();
320 if ( mTargetApp == KAPI ) { 320 if ( mTargetApp == KAPI ) {
321 mPassWordPiSync = temp->getRemotePwAB(); 321 mPassWordPiSync = temp->getRemotePwAB();
322 mActiveSyncPort = temp->getRemotePortAB(); 322 mActiveSyncPort = temp->getRemotePortAB();
323 mActiveSyncIP = temp->getRemoteIPAB(); 323 mActiveSyncIP = temp->getRemoteIPAB();
324 } else if ( mTargetApp == KOPI ) { 324 } else if ( mTargetApp == KOPI ) {
325 if ( temp->getIsPiSyncSpec() ) 325 if ( temp->getIsPiSyncSpec() )
326 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true ); 326 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true );
327 mPassWordPiSync = temp->getRemotePw(); 327 mPassWordPiSync = temp->getRemotePw();
328 mActiveSyncPort = temp->getRemotePort(); 328 mActiveSyncPort = temp->getRemotePort();
329 mActiveSyncIP = temp->getRemoteIP(); 329 mActiveSyncIP = temp->getRemoteIP();
330 } else { 330 } else {
331 mPassWordPiSync = temp->getRemotePwPWM(); 331 mPassWordPiSync = temp->getRemotePwPWM();
332 mActiveSyncPort = temp->getRemotePortPWM(); 332 mActiveSyncPort = temp->getRemotePortPWM();
333 mActiveSyncIP = temp->getRemoteIPPWM(); 333 mActiveSyncIP = temp->getRemoteIPPWM();
334 } 334 }
335 syncPi(); 335 syncPi();
336 while ( !mPisyncFinished ) { 336 while ( !mPisyncFinished ) {
337 //qDebug("waiting "); 337 //qDebug("waiting ");
338 qApp->processEvents(); 338 qApp->processEvents();
339 } 339 }
340 } else 340 } else
341 syncRemote( temp ); 341 syncRemote( temp );
342 342
343 } 343 }
344 } 344 }
345 delete temp; 345 delete temp;
346 setBlockSave(false); 346 setBlockSave(false);
347} 347}
348 348
349void KSyncManager::enableQuick( bool ask ) 349void KSyncManager::enableQuick( bool ask )
350{ 350{
351 bool autoStart; 351 bool autoStart;
352 bool changed = false; 352 bool changed = false;
353 if ( ask ) { 353 if ( ask ) {
354 QDialog dia ( 0, "input-dialog", true ); 354 QDialog dia ( 0, "input-dialog", true );
355 QLineEdit lab ( &dia ); 355 QLineEdit lab ( &dia );
356 QVBoxLayout lay( &dia ); 356 QVBoxLayout lay( &dia );
357 lab.setText( mPrefs->mPassiveSyncPort ); 357 lab.setText( mPrefs->mPassiveSyncPort );
358 lay.setMargin(7); 358 lay.setMargin(7);
359 lay.setSpacing(7); 359 lay.setSpacing(7);
360 int po = 9197+mTargetApp; 360 int po = 9197+mTargetApp;
361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia ); 361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia );
362 lay.addWidget( &label); 362 lay.addWidget( &label);
363 lay.addWidget( &lab); 363 lay.addWidget( &lab);
364 364
365 QLineEdit lepw ( &dia ); 365 QLineEdit lepw ( &dia );
366 lepw.setText( mPrefs->mPassiveSyncPw ); 366 lepw.setText( mPrefs->mPassiveSyncPw );
367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); 367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
368 lay.addWidget( &label2); 368 lay.addWidget( &label2);
369 lay.addWidget( &lepw); 369 lay.addWidget( &lepw);
370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia ); 370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia );
371 lay.addWidget( &autostart); 371 lay.addWidget( &autostart);
372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart ); 372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart );
373#ifdef DESKTOP_VERSION 373#ifdef DESKTOP_VERSION
374#ifdef _WIN32_ 374#ifdef _WIN32_
375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia ); 375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia );
376 syncdesktop.hide();// not implemented! 376 syncdesktop.hide();// not implemented!
377#else 377#else
378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia ); 378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia );
379#endif 379#endif
380 lay.addWidget( &syncdesktop); 380 lay.addWidget( &syncdesktop);
381#else 381#else
382 mPrefs->mPassiveSyncWithDesktop = false; 382 mPrefs->mPassiveSyncWithDesktop = false;
383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia ); 383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia );
384 syncdesktop.hide(); 384 syncdesktop.hide();
385#endif 385#endif
386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop ); 386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop );
387 387
388 QPushButton pb ( "OK", &dia); 388 QPushButton pb ( "OK", &dia);
389 lay.addWidget( &pb ); 389 lay.addWidget( &pb );
390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
391 dia.resize( 230,120 ); 391 dia.resize( 230,120 );
392 dia.setCaption( i18n("Enter port for Pi-Sync") ); 392 dia.setCaption( i18n("Enter port for Pi-Sync") );
393 dia.show(); 393 dia.show();
394#ifndef DESKTOP_VERSION 394#ifndef DESKTOP_VERSION
395 int dw = QApplication::desktop()->width(); 395 int dw = QApplication::desktop()->width();
396 int dh = QApplication::desktop()->height(); 396 int dh = QApplication::desktop()->height();
397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 ); 397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 );
398#endif 398#endif
399 if ( ! dia.exec() ) 399 if ( ! dia.exec() )
400 return; 400 return;
401 dia.hide(); 401 dia.hide();
402 qApp->processEvents(); 402 qApp->processEvents();
403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) { 403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) {
404 changed = true; 404 changed = true;
405 mPrefs->mPassiveSyncPw = lepw.text(); 405 mPrefs->mPassiveSyncPw = lepw.text();
406 } 406 }
407 if ( mPrefs->mPassiveSyncPort != lab.text() ) { 407 if ( mPrefs->mPassiveSyncPort != lab.text() ) {
408 mPrefs->mPassiveSyncPort = lab.text(); 408 mPrefs->mPassiveSyncPort = lab.text();
409 changed = true; 409 changed = true;
410 } 410 }
411 autoStart = autostart.isChecked(); 411 autoStart = autostart.isChecked();
412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) { 412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) {
413 changed = true; 413 changed = true;
414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked(); 414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked();
415 } 415 }
416 } 416 }
417 else 417 else
418 autoStart = mPrefs->mPassiveSyncAutoStart; 418 autoStart = mPrefs->mPassiveSyncAutoStart;
419 if ( autoStart != mPrefs->mPassiveSyncAutoStart ) 419 if ( autoStart != mPrefs->mPassiveSyncAutoStart )
420 changed = true; 420 changed = true;
421 bool ok; 421 bool ok;
422 mPrefs->mPassiveSyncAutoStart = false; 422 mPrefs->mPassiveSyncAutoStart = false;
423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok); 423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok);
424 qDebug("%d ", port_t); 424 qDebug("%d ", port_t);
425 if ( ! ok || port_t > 65535 ) { 425 if ( ! ok || port_t > 65535 ) {
426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error")); 426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error"));
427 return; 427 return;
428 } 428 }
429 Q_UINT16 port = port_t; 429 Q_UINT16 port = port_t;
430 //qDebug("port %d ", port); 430 //qDebug("port %d ", port);
431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 ); 431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
432 mServerSocket->setFileName( defaultFileName() );//bbb 432 mServerSocket->setFileName( defaultFileName() );//bbb
433 if ( !mServerSocket->ok() ) { 433 if ( !mServerSocket->ok() ) {
434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) ); 434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) );
435 delete mServerSocket; 435 delete mServerSocket;
436 mServerSocket = 0; 436 mServerSocket = 0;
437 return; 437 return;
438 } 438 }
439 mPrefs->mPassiveSyncAutoStart = autoStart; 439 mPrefs->mPassiveSyncAutoStart = autoStart;
440 if ( changed ) { 440 if ( changed ) {
441 mPrefs->writeConfig(); 441 mPrefs->writeConfig();
442 } 442 }
443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) ); 443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) ); 444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) ); 445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) );
446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) ); 446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) );
447} 447}
448void KSyncManager::displayErrorPort() 448void KSyncManager::displayErrorPort()
449{ 449{
450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error")); 450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error"));
451} 451}
452void KSyncManager::syncLocalFile() 452void KSyncManager::syncLocalFile()
453{ 453{
454 454
455 QString fn =mPrefs->mLastSyncedLocalFile; 455 QString fn =mPrefs->mLastSyncedLocalFile;
456 QString ext; 456 QString ext;
457 457
458 switch(mTargetApp) 458 switch(mTargetApp)
459 { 459 {
460 case (KAPI): 460 case (KAPI):
461 ext = "(*.vcf)"; 461 ext = "(*.vcf)";
462 break; 462 break;
463 case (KOPI): 463 case (KOPI):
464 ext = "(*.ics/*.vcs)"; 464 ext = "(*.ics/*.vcs)";
465 break; 465 break;
466 case (PWMPI): 466 case (PWMPI):
467 ext = "(*.pwm)"; 467 ext = "(*.pwm)";
468 break; 468 break;
469 default: 469 default:
470 qDebug("KSM::syncLocalFile: invalid apptype selected"); 470 qDebug("KSM::syncLocalFile: invalid apptype selected");
471 break; 471 break;
472 472
473 } 473 }
474 474
475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent ); 475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
476 if ( fn == "" ) 476 if ( fn == "" )
477 return; 477 return;
478 if ( syncWithFile( fn, false ) ) { 478 if ( syncWithFile( fn, false ) ) {
479 qDebug("KSM::syncLocalFile() successful "); 479 qDebug("KSM::syncLocalFile() successful ");
480 } 480 }
481 481
482} 482}
483 483
484bool KSyncManager::syncWithFile( QString fn , bool quick ) 484bool KSyncManager::syncWithFile( QString fn , bool quick )
485{ 485{
486 bool ret = false; 486 bool ret = false;
487 QFileInfo info; 487 QFileInfo info;
488 info.setFile( fn ); 488 info.setFile( fn );
489 QString mess; 489 QString mess;
490 if ( !info. exists() ) { 490 if ( !info. exists() ) {
491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
492 QMessageBox::warning( mParent, i18n("Warning!"), 492 QMessageBox::warning( mParent, i18n("Warning!"),
493 mess ); 493 mess );
494 return ret; 494 return ret;
495 } 495 }
496 int result = 0; 496 int result = 0;
497 if ( !quick ) { 497 if ( !quick ) {
498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
499 result = QMessageBox::warning( mParent, i18n("Warning!"), 499 result = QMessageBox::warning( mParent, i18n("Warning!"),
500 mess, 500 mess,
501 i18n("Sync"), i18n("Cancel"), 0, 501 i18n("Sync"), i18n("Cancel"), 0,
502 0, 1 ); 502 0, 1 );
503 if ( result ) 503 if ( result )
504 return false; 504 return false;
505 } 505 }
506 if ( mAskForPreferences ) 506 if ( mAskForPreferences )
507 if ( !edit_sync_options()) { 507 if ( !edit_sync_options()) {
508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
509 return false; 509 return false;
510 } 510 }
511 if ( result == 0 ) { 511 if ( result == 0 ) {
512 //qDebug("Now sycing ... "); 512 //qDebug("Now sycing ... ");
513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) ) 513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) )
514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); 514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") );
515 else 515 else
516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
517 if ( ! quick ) 517 if ( ! quick )
518 mPrefs->mLastSyncedLocalFile = fn; 518 mPrefs->mLastSyncedLocalFile = fn;
519 } 519 }
520 return ret; 520 return ret;
521} 521}
522 522
523void KSyncManager::quickSyncLocalFile() 523void KSyncManager::quickSyncLocalFile()
524{ 524{
525 525
526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) { 526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) {
527 qDebug("KSM::quick syncLocalFile() successful "); 527 qDebug("KSM::quick syncLocalFile() successful ");
528 528
529 } 529 }
530} 530}
531 531
532void KSyncManager::multiSync( bool askforPrefs ) 532void KSyncManager::multiSync( bool askforPrefs )
533{ 533{
534 if (blockSave()) 534 if (blockSave())
535 return; 535 return;
536 setBlockSave(true); 536 setBlockSave(true);
537 mCurrentResourceLocal = ""; 537 mCurrentResourceLocal = "";
538 if ( askforPrefs ) { 538 if ( askforPrefs ) {
539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), 540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"),
541 question, 541 question,
542 i18n("Yes"), i18n("No"), 542 i18n("Yes"), i18n("No"),
543 0, 0 ) != 0 ) { 543 0, 0 ) != 0 ) {
544 setBlockSave(false); 544 setBlockSave(false);
545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!")); 545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!"));
546 return; 546 return;
547 } 547 }
548 } 548 }
549 mCurrentSyncDevice = i18n("Multiple profiles") ; 549 mCurrentSyncDevice = i18n("Multiple profiles") ;
550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs; 550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
551 if ( askforPrefs ) { 551 if ( askforPrefs ) {
552 if ( !edit_sync_options()) { 552 if ( !edit_sync_options()) {
553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") ); 553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") );
554 return; 554 return;
555 } 555 }
556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs; 556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs;
557 } 557 }
558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") ); 558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") );
559 qApp->processEvents(); 559 qApp->processEvents();
560 int num = ringSync() ; 560 int num = ringSync() ;
561 if ( num > 1 ) 561 if ( num > 1 )
562 ringSync(); 562 ringSync();
563 setBlockSave(false); 563 setBlockSave(false);
564 if ( num ) 564 if ( num )
565 emit save(); 565 emit save();
566 if ( num ) 566 if ( num )
567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) ); 567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) );
568 else 568 else
569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
570 return; 570 return;
571} 571}
572 572
573int KSyncManager::ringSync() 573int KSyncManager::ringSync()
574{ 574{
575 emit multiResourceSyncStart( false ); 575 emit multiResourceSyncStart( false );
576 int syncedProfiles = 0; 576 int syncedProfiles = 0;
577 unsigned int i; 577 unsigned int i;
578 QTime timer; 578 QTime timer;
579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
580 QStringList syncProfileNames = mSyncProfileNames; 580 QStringList syncProfileNames = mSyncProfileNames;
581 KSyncProfile* temp = new KSyncProfile (); 581 KSyncProfile* temp = new KSyncProfile ();
582 mAskForPreferences = false; 582 mAskForPreferences = false;
583 mCurrentResourceLocal = ""; 583 mCurrentResourceLocal = "";
584 for ( i = 0; i < syncProfileNames.count(); ++i ) { 584 for ( i = 0; i < syncProfileNames.count(); ++i ) {
585 mCurrentSyncProfile = i; 585 mCurrentSyncProfile = i;
586 temp->setName(syncProfileNames[mCurrentSyncProfile]); 586 temp->setName(syncProfileNames[mCurrentSyncProfile]);
587 temp->readConfig(&config); 587 temp->readConfig(&config);
588 588
589 bool includeInRingSync = false; 589 bool includeInRingSync = false;
590 switch(mTargetApp) 590 switch(mTargetApp)
591 { 591 {
592 case (KAPI): 592 case (KAPI):
593 includeInRingSync = temp->getIncludeInRingSyncAB(); 593 includeInRingSync = temp->getIncludeInRingSyncAB();
594 break; 594 break;
595 case (KOPI): 595 case (KOPI):
596 includeInRingSync = temp->getIncludeInRingSync(); 596 includeInRingSync = temp->getIncludeInRingSync();
597 break; 597 break;
598 case (PWMPI): 598 case (PWMPI):
599 includeInRingSync = temp->getIncludeInRingSyncPWM(); 599 includeInRingSync = temp->getIncludeInRingSyncPWM();
600 break; 600 break;
601 default: 601 default:
602 qDebug("KSM::ringSync: invalid apptype selected"); 602 qDebug("KSM::ringSync: invalid apptype selected");
603 break; 603 break;
604 604
605 } 605 }
606 606
607 607
608 if ( includeInRingSync && ( i < 1 || i > 2 )) { 608 if ( includeInRingSync && ( i < 1 || i > 2 )) {
609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
610 ++syncedProfiles; 610 ++syncedProfiles;
611 mSyncWithDesktop = false; 611 mSyncWithDesktop = false;
612 // mAskForPreferences = temp->getAskForPreferences(); 612 // mAskForPreferences = temp->getAskForPreferences();
613 mWriteBackFile = temp->getWriteBackFile(); 613 mWriteBackFile = temp->getWriteBackFile();
614 mWriteBackExistingOnly = temp->getWriteBackExisting(); 614 mWriteBackExistingOnly = temp->getWriteBackExisting();
615 mIsKapiFile = temp->getIsKapiFile(); 615 mIsKapiFile = temp->getIsKapiFile();
616 mWriteBackInFuture = 0; 616 mWriteBackInFuture = 0;
617 if ( temp->getWriteBackFuture() ) { 617 if ( temp->getWriteBackFuture() ) {
618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
619 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 619 mWriteBackInPast = temp->getWriteBackPastWeeks( );
620 } 620 }
621 mFilterInCal = temp->getFilterInCal(); 621 mFilterInCal = temp->getFilterInCal();
622 mFilterOutCal = temp->getFilterOutCal(); 622 mFilterOutCal = temp->getFilterOutCal();
623 mFilterInAB = temp->getFilterInAB(); 623 mFilterInAB = temp->getFilterInAB();
624 mFilterOutAB = temp->getFilterOutAB(); 624 mFilterOutAB = temp->getFilterOutAB();
625 mShowSyncSummary = false; 625 mShowSyncSummary = false;
626 mCurrentSyncDevice = syncProfileNames[i] ; 626 mCurrentSyncDevice = syncProfileNames[i] ;
627 mCurrentSyncName = mLocalMachineName; 627 mCurrentSyncName = mLocalMachineName;
628 if ( i == 0 ) { 628 if ( i == 0 ) {
629 mIsKapiFile = false; 629 mIsKapiFile = false;
630#ifdef DESKTOP_VERSION 630#ifdef DESKTOP_VERSION
631 syncKDE(); 631 syncKDE();
632#else 632#else
633 syncSharp(); 633 syncSharp();
634#endif 634#endif
635 } else { 635 } else {
636 if ( temp->getIsLocalFileSync() ) { 636 if ( temp->getIsLocalFileSync() ) {
637 switch(mTargetApp) 637 switch(mTargetApp)
638 { 638 {
639 case (KAPI): 639 case (KAPI):
640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
642 break; 642 break;
643 case (KOPI): 643 case (KOPI):
644 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 644 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
646 break; 646 break;
647 case (PWMPI): 647 case (PWMPI):
648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
650 break; 650 break;
651 default: 651 default:
652 qDebug("KSM: invalid apptype selected"); 652 qDebug("KSM: invalid apptype selected");
653 break; 653 break;
654 } 654 }
655 } else { 655 } else {
656 if ( temp->getIsPhoneSync() ) { 656 if ( temp->getIsPhoneSync() ) {
657 mPhoneDevice = temp->getPhoneDevice( ) ; 657 mPhoneDevice = temp->getPhoneDevice( ) ;
658 mPhoneConnection = temp->getPhoneConnection( ); 658 mPhoneConnection = temp->getPhoneConnection( );
659 mPhoneModel = temp->getPhoneModel( ); 659 mPhoneModel = temp->getPhoneModel( );
660 syncPhone(); 660 syncPhone();
661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) { 661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) {
662 mSpecificResources.clear(); 662 mSpecificResources.clear();
663 if ( mTargetApp == KAPI ) { 663 if ( mTargetApp == KAPI ) {
664 mPassWordPiSync = temp->getRemotePwAB(); 664 mPassWordPiSync = temp->getRemotePwAB();
665 mActiveSyncPort = temp->getRemotePortAB(); 665 mActiveSyncPort = temp->getRemotePortAB();
666 mActiveSyncIP = temp->getRemoteIPAB(); 666 mActiveSyncIP = temp->getRemoteIPAB();
667 } else if ( mTargetApp == KOPI ) { 667 } else if ( mTargetApp == KOPI ) {
668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true ); 668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true );
669 mPassWordPiSync = temp->getRemotePw(); 669 mPassWordPiSync = temp->getRemotePw();
670 mActiveSyncPort = temp->getRemotePort(); 670 mActiveSyncPort = temp->getRemotePort();
671 mActiveSyncIP = temp->getRemoteIP(); 671 mActiveSyncIP = temp->getRemoteIP();
672 } else { 672 } else {
673 mPassWordPiSync = temp->getRemotePwPWM(); 673 mPassWordPiSync = temp->getRemotePwPWM();
674 mActiveSyncPort = temp->getRemotePortPWM(); 674 mActiveSyncPort = temp->getRemotePortPWM();
675 mActiveSyncIP = temp->getRemoteIPPWM(); 675 mActiveSyncIP = temp->getRemoteIPPWM();
676 } 676 }
677 syncPi(); 677 syncPi();
678 while ( !mPisyncFinished ) { 678 while ( !mPisyncFinished ) {
679 //qDebug("waiting "); 679 //qDebug("waiting ");
680 qApp->processEvents(); 680 qApp->processEvents();
681 } 681 }
682 timer.start(); 682 timer.start();
683 while ( timer.elapsed () < 2000 ) { 683 while ( timer.elapsed () < 2000 ) {
684 qApp->processEvents(); 684 qApp->processEvents();
685 } 685 }
686 } else 686 } else
687 syncRemote( temp, false ); 687 syncRemote( temp, false );
688 688
689 } 689 }
690 } 690 }
691 timer.start(); 691 timer.start();
692 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") ); 692 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") );
693 while ( timer.elapsed () < 2000 ) { 693 while ( timer.elapsed () < 2000 ) {
694 qApp->processEvents(); 694 qApp->processEvents();
695#ifndef _WIN32_ 695#ifndef _WIN32_
696 sleep (1); 696 sleep (1);
697#endif 697#endif
698 } 698 }
699 699
700 } 700 }
701 701
702 } 702 }
703 delete temp; 703 delete temp;
704 return syncedProfiles; 704 return syncedProfiles;
705} 705}
706 706
707void KSyncManager::syncRemote( KSyncProfile* prof, bool ask) 707void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
708{ 708{
709 QString question; 709 QString question;
710 if ( ask ) { 710 if ( ask ) {
711 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 711 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
712 if ( QMessageBox::information( mParent, i18n("Sync"), 712 if ( QMessageBox::information( mParent, i18n("Sync"),
713 question, 713 question,
714 i18n("Yes"), i18n("No"), 714 i18n("Yes"), i18n("No"),
715 0, 0 ) != 0 ) 715 0, 0 ) != 0 )
716 return; 716 return;
717 } 717 }
718 718
719 QString preCommand; 719 QString preCommand;
720 QString localTempFile; 720 QString localTempFile;
721 QString postCommand; 721 QString postCommand;
722 722
723 switch(mTargetApp) 723 switch(mTargetApp)
724 { 724 {
725 case (KAPI): 725 case (KAPI):
726 preCommand = prof->getPreSyncCommandAB(); 726 preCommand = prof->getPreSyncCommandAB();
727 postCommand = prof->getPostSyncCommandAB(); 727 postCommand = prof->getPostSyncCommandAB();
728 localTempFile = prof->getLocalTempFileAB(); 728 localTempFile = prof->getLocalTempFileAB();
729 break; 729 break;
730 case (KOPI): 730 case (KOPI):
731 preCommand = prof->getPreSyncCommand(); 731 preCommand = prof->getPreSyncCommand();
732 postCommand = prof->getPostSyncCommand(); 732 postCommand = prof->getPostSyncCommand();
733 localTempFile = prof->getLocalTempFile(); 733 localTempFile = prof->getLocalTempFile();
734 break; 734 break;
735 case (PWMPI): 735 case (PWMPI):
736 preCommand = prof->getPreSyncCommandPWM(); 736 preCommand = prof->getPreSyncCommandPWM();
737 postCommand = prof->getPostSyncCommandPWM(); 737 postCommand = prof->getPostSyncCommandPWM();
738 localTempFile = prof->getLocalTempFilePWM(); 738 localTempFile = prof->getLocalTempFilePWM();
739 break; 739 break;
740 default: 740 default:
741 qDebug("KSM::syncRemote: invalid apptype selected"); 741 qDebug("KSM::syncRemote: invalid apptype selected");
742 break; 742 break;
743 } 743 }
744 744
745 745
746 int fi; 746 int fi;
747 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 747 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
748 QString pwd = getPassword(); 748 QString pwd = getPassword();
749 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 749 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
750 750
751 } 751 }
752 int maxlen = 30; 752 int maxlen = 30;
753 if ( QApplication::desktop()->width() > 320 ) 753 if ( QApplication::desktop()->width() > 320 )
754 maxlen += 25; 754 maxlen += 25;
755 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) ); 755 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) );
756 int fileSize = 0;
757 int result = system ( preCommand ); 756 int result = system ( preCommand );
758 // 0 : okay 757 // 0 : okay
759 // 256: no such file or dir 758 // 256: no such file or dir
760 // 759 //
761 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result ); 760 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result );
762 if ( result != 0 ) { 761 if ( result != 0 ) {
763 unsigned int len = maxlen; 762 unsigned int len = maxlen;
764 while ( len < preCommand.length() ) { 763 while ( len < preCommand.length() ) {
765 preCommand.insert( len , "\n" ); 764 preCommand.insert( len , "\n" );
766 len += maxlen +2; 765 len += maxlen +2;
767 } 766 }
768 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ; 767 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ;
769 QMessageBox::information( mParent, i18n("Sync - ERROR"), 768 QMessageBox::information( mParent, i18n("Sync - ERROR"),
770 question, 769 question,
771 i18n("Okay!")) ; 770 i18n("Okay!")) ;
772 mParent->topLevelWidget()->setCaption ("KDE-Pim"); 771 mParent->topLevelWidget()->setCaption ("KDE-Pim");
773 return; 772 return;
774 } 773 }
775 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) ); 774 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) );
776 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 775 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
777 776
778 if ( syncWithFile( localTempFile, true ) ) { 777 if ( syncWithFile( localTempFile, true ) ) {
779 778
780 if ( mWriteBackFile ) { 779 if ( mWriteBackFile ) {
781 int fi; 780 int fi;
782 if ( (fi = postCommand.find("$PWD$")) > 0 ) { 781 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
783 QString pwd = getPassword(); 782 QString pwd = getPassword();
784 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 ); 783 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
785 784
786 } 785 }
787 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) ); 786 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) );
788 result = system ( postCommand ); 787 result = system ( postCommand );
789 qDebug("KSM::Sync:Writing back file result: %d ", result); 788 qDebug("KSM::Sync:Writing back file result: %d ", result);
790 if ( result != 0 ) { 789 if ( result != 0 ) {
791 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 790 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
792 return; 791 return;
793 } else { 792 } else {
794 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 793 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) );
795 } 794 }
796 } 795 }
797 } 796 }
798 return; 797 return;
799} 798}
800bool KSyncManager::edit_pisync_options() 799bool KSyncManager::edit_pisync_options()
801{ 800{
802 QDialog dia( mParent, "dia", true ); 801 QDialog dia( mParent, "dia", true );
803 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice ); 802 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice );
804 QVBoxLayout lay ( &dia ); 803 QVBoxLayout lay ( &dia );
805 lay.setSpacing( 5 ); 804 lay.setSpacing( 5 );
806 lay.setMargin( 3 ); 805 lay.setMargin( 3 );
807 QLabel lab1 ( i18n("Password for remote access:"), &dia); 806 QLabel lab1 ( i18n("Password for remote access:"), &dia);
808 lay.addWidget( &lab1 ); 807 lay.addWidget( &lab1 );
809 QLineEdit le1 (&dia ); 808 QLineEdit le1 (&dia );
810 lay.addWidget( &le1 ); 809 lay.addWidget( &le1 );
811 QLabel lab2 ( i18n("Remote IP address:"), &dia); 810 QLabel lab2 ( i18n("Remote IP address:"), &dia);
812 lay.addWidget( &lab2 ); 811 lay.addWidget( &lab2 );
813 QLineEdit le2 (&dia ); 812 QLineEdit le2 (&dia );
814 lay.addWidget( &le2 ); 813 lay.addWidget( &le2 );
815 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia); 814 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia);
816 lay.addWidget( &lab3 ); 815 lay.addWidget( &lab3 );
817 QLineEdit le3 (&dia ); 816 QLineEdit le3 (&dia );
818 lay.addWidget( &le3 ); 817 lay.addWidget( &le3 );
819 QPushButton pb ( "OK", &dia); 818 QPushButton pb ( "OK", &dia);
820 lay.addWidget( &pb ); 819 lay.addWidget( &pb );
821 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 820 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
822 le1.setText( mPassWordPiSync ); 821 le1.setText( mPassWordPiSync );
823 le2.setText( mActiveSyncIP ); 822 le2.setText( mActiveSyncIP );
824 le3.setText( mActiveSyncPort ); 823 le3.setText( mActiveSyncPort );
825 if ( dia.exec() ) { 824 if ( dia.exec() ) {
826 mPassWordPiSync = le1.text(); 825 mPassWordPiSync = le1.text();
827 mActiveSyncPort = le3.text(); 826 mActiveSyncPort = le3.text();
828 mActiveSyncIP = le2.text(); 827 mActiveSyncIP = le2.text();
829 return true; 828 return true;
830 } 829 }
831 return false; 830 return false;
832} 831}
833bool KSyncManager::edit_sync_options() 832bool KSyncManager::edit_sync_options()
834{ 833{
835 834
836 QDialog dia( mParent, "dia", true ); 835 QDialog dia( mParent, "dia", true );
837 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 836 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
838 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 837 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
839 QVBoxLayout lay ( &dia ); 838 QVBoxLayout lay ( &dia );
840 lay.setSpacing( 2 ); 839 lay.setSpacing( 2 );
841 lay.setMargin( 3 ); 840 lay.setMargin( 3 );
842 lay.addWidget(&gr); 841 lay.addWidget(&gr);
843 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 842 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
844 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 843 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
845 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 844 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
846 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 845 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
847 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 846 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
848 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 847 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
849 //QRadioButton both( i18n("Take both on conflict"), &gr ); 848 //QRadioButton both( i18n("Take both on conflict"), &gr );
850 QPushButton pb ( "OK", &dia); 849 QPushButton pb ( "OK", &dia);
851 lay.addWidget( &pb ); 850 lay.addWidget( &pb );
852 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 851 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
853 switch ( mSyncAlgoPrefs ) { 852 switch ( mSyncAlgoPrefs ) {
854 case 0: 853 case 0:
855 loc.setChecked( true); 854 loc.setChecked( true);
856 break; 855 break;
857 case 1: 856 case 1:
858 rem.setChecked( true ); 857 rem.setChecked( true );
859 break; 858 break;
860 case 2: 859 case 2:
861 newest.setChecked( true); 860 newest.setChecked( true);
862 break; 861 break;
863 case 3: 862 case 3:
864 ask.setChecked( true); 863 ask.setChecked( true);
865 break; 864 break;
866 case 4: 865 case 4:
867 f_loc.setChecked( true); 866 f_loc.setChecked( true);
868 break; 867 break;
869 case 5: 868 case 5:
870 f_rem.setChecked( true); 869 f_rem.setChecked( true);
871 break; 870 break;
872 case 6: 871 case 6:
873 // both.setChecked( true); 872 // both.setChecked( true);
874 break; 873 break;
875 default: 874 default:
876 break; 875 break;
877 } 876 }
878 if ( dia.exec() ) { 877 if ( dia.exec() ) {
879 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 878 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
880 return true; 879 return true;
881 } 880 }
882 return false; 881 return false;
883} 882}
884 883
885QString KSyncManager::getPassword( ) 884QString KSyncManager::getPassword( )
886{ 885{
887 QString retfile = ""; 886 QString retfile = "";
888 QDialog dia ( mParent, "input-dialog", true ); 887 QDialog dia ( mParent, "input-dialog", true );
889 QLineEdit lab ( &dia ); 888 QLineEdit lab ( &dia );
890 lab.setEchoMode( QLineEdit::Password ); 889 lab.setEchoMode( QLineEdit::Password );
891 QVBoxLayout lay( &dia ); 890 QVBoxLayout lay( &dia );
892 lay.setMargin(7); 891 lay.setMargin(7);
893 lay.setSpacing(7); 892 lay.setSpacing(7);
894 lay.addWidget( &lab); 893 lay.addWidget( &lab);
895 dia.setFixedSize( 230,50 ); 894 dia.setFixedSize( 230,50 );
896 dia.setCaption( i18n("Enter password") ); 895 dia.setCaption( i18n("Enter password") );
897 QPushButton pb ( "OK", &dia); 896 QPushButton pb ( "OK", &dia);
898 lay.addWidget( &pb ); 897 lay.addWidget( &pb );
899 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 898 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
900 dia.show(); 899 dia.show();
901 int res = dia.exec(); 900 int res = dia.exec();
902 if ( res ) 901 if ( res )
903 retfile = lab.text(); 902 retfile = lab.text();
904 dia.hide(); 903 dia.hide();
905 qApp->processEvents(); 904 qApp->processEvents();
906 return retfile; 905 return retfile;
907 906
908} 907}
909 908
910 909
911void KSyncManager::confSync() 910void KSyncManager::confSync()
912{ 911{
913 static KSyncPrefsDialog* sp = 0; 912 static KSyncPrefsDialog* sp = 0;
914 if ( ! sp ) { 913 if ( ! sp ) {
915 sp = new KSyncPrefsDialog( mParent, "syncprefs", true ); 914 sp = new KSyncPrefsDialog( mParent, "syncprefs", true );
916 } 915 }
917 sp->usrReadConfig(); 916 sp->usrReadConfig();
918#ifndef DESKTOP_VERSION 917#ifndef DESKTOP_VERSION
919 sp->showMaximized(); 918 sp->showMaximized();
920#else 919#else
921 sp->show(); 920 sp->show();
922#endif 921#endif
923 sp->exec(); 922 sp->exec();
924 QStringList oldSyncProfileNames = mSyncProfileNames; 923 QStringList oldSyncProfileNames = mSyncProfileNames;
925 mSyncProfileNames = sp->getSyncProfileNames(); 924 mSyncProfileNames = sp->getSyncProfileNames();
926 mLocalMachineName = sp->getLocalMachineName (); 925 mLocalMachineName = sp->getLocalMachineName ();
927 int ii; 926 uint ii;
928 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) { 927 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) {
929 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) ) 928 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) )
930 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] ); 929 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] );
931 } 930 }
932 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 931 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
933} 932}
934void KSyncManager::syncKDE() 933void KSyncManager::syncKDE()
935{ 934{
936 mSyncWithDesktop = true; 935 mSyncWithDesktop = true;
937 emit save(); 936 emit save();
938 switch(mTargetApp) 937 switch(mTargetApp)
939 { 938 {
940 case (KAPI): 939 case (KAPI):
941 { 940 {
942#ifdef DESKTOP_VERSION 941#ifdef DESKTOP_VERSION
943 QString command = "kdeabdump33"; 942 QString command = "kdeabdump33";
944 QString commandfile = "kdeabdump33"; 943 QString commandfile = "kdeabdump33";
945 QString commandpath = qApp->applicationDirPath () + "/"; 944 QString commandpath = qApp->applicationDirPath () + "/";
946#else 945#else
947 QString command = "kdeabdump33"; 946 QString command = "kdeabdump33";
948 QString commandfile = "kdeabdump33"; 947 QString commandfile = "kdeabdump33";
949 QString commandpath = QDir::homeDirPath ()+"/"; 948 QString commandpath = QDir::homeDirPath ()+"/";
950#endif 949#endif
951 if ( ! QFile::exists ( commandpath+commandfile ) ) 950 if ( ! QFile::exists ( commandpath+commandfile ) )
952 command = commandfile; 951 command = commandfile;
953 else 952 else
954 command = commandpath+commandfile; 953 command = commandpath+commandfile;
955 954
956 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf"; 955 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf";
957 int result = system ( command.latin1()); 956 int result = system ( command.latin1());
958 qDebug("AB dump 33 command call result: %d ", result); 957 qDebug("AB dump 33 command call result: %d ", result);
959 if ( result != 0 ) { 958 if ( result != 0 ) {
960 qDebug("Calling AB dump version 33 failed. Trying 34... "); 959 qDebug("Calling AB dump version 33 failed. Trying 34... ");
961 commandfile = "kdeabdump34"; 960 commandfile = "kdeabdump34";
962 if ( ! QFile::exists ( commandpath+commandfile ) ) 961 if ( ! QFile::exists ( commandpath+commandfile ) )
963 command = commandfile; 962 command = commandfile;
964 else 963 else
965 command = commandpath+commandfile; 964 command = commandpath+commandfile;
966 result = system ( command.latin1()); 965 result = system ( command.latin1());
967 qDebug("AB dump 34 command call result: %d ", result); 966 qDebug("AB dump 34 command call result: %d ", result);
968 if ( result != 0 ) { 967 if ( result != 0 ) {
969 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 968 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
970 return; 969 return;
971 } 970 }
972 } 971 }
973 if ( syncWithFile( fileName,true ) ) { 972 if ( syncWithFile( fileName,true ) ) {
974 if ( mWriteBackFile ) { 973 if ( mWriteBackFile ) {
975 command += " --read"; 974 command += " --read";
976 system ( command.latin1()); 975 system ( command.latin1());
977 } 976 }
978 } 977 }
979 978
980 } 979 }
981 break; 980 break;
982 case (KOPI): 981 case (KOPI):
983 { 982 {
984#ifdef DESKTOP_VERSION 983#ifdef DESKTOP_VERSION
985 QString command = "kdecaldump33"; 984 QString command = "kdecaldump33";
986 QString commandfile = "kdecaldump33"; 985 QString commandfile = "kdecaldump33";
987 QString commandpath = qApp->applicationDirPath () + "/"; 986 QString commandpath = qApp->applicationDirPath () + "/";
988#else 987#else
989 QString command = "kdecaldump33"; 988 QString command = "kdecaldump33";
990 QString commandfile = "kdecaldump33"; 989 QString commandfile = "kdecaldump33";
991 QString commandpath = QDir::homeDirPath ()+"/"; 990 QString commandpath = QDir::homeDirPath ()+"/";
992#endif 991#endif
993 if ( ! QFile::exists ( commandpath+commandfile ) ) 992 if ( ! QFile::exists ( commandpath+commandfile ) )
994 command = commandfile; 993 command = commandfile;
995 else 994 else
996 command = commandpath+commandfile; 995 command = commandpath+commandfile;
997 996
998 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics"; 997 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics";
999 int result = system ( command.latin1()); 998 int result = system ( command.latin1());
1000 qDebug("Cal dump 33 command call result result: %d ", result); 999 qDebug("Cal dump 33 command call result result: %d ", result);
1001 if ( result != 0 ) { 1000 if ( result != 0 ) {
1002 qDebug("Calling CAL dump version 33 failed. Trying 34... "); 1001 qDebug("Calling CAL dump version 33 failed. Trying 34... ");
1003 commandfile = "kdecaldump34"; 1002 commandfile = "kdecaldump34";
1004 if ( ! QFile::exists ( commandpath+commandfile ) ) 1003 if ( ! QFile::exists ( commandpath+commandfile ) )
1005 command = commandfile; 1004 command = commandfile;
1006 else 1005 else
1007 command = commandpath+commandfile; 1006 command = commandpath+commandfile;
1008 result = system ( command.latin1()); 1007 result = system ( command.latin1());
1009 qDebug("Cal dump 34 command call result result: %d ", result); 1008 qDebug("Cal dump 34 command call result result: %d ", result);
1010 if ( result != 0 ) { 1009 if ( result != 0 ) {
1011 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 1010 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
1012 return; 1011 return;
1013 } 1012 }
1014 } 1013 }
1015 if ( syncWithFile( fileName,true ) ) { 1014 if ( syncWithFile( fileName,true ) ) {
1016 if ( mWriteBackFile ) { 1015 if ( mWriteBackFile ) {
1017 command += " --read"; 1016 command += " --read";
1018 system ( command.latin1()); 1017 system ( command.latin1());
1019 } 1018 }
1020 } 1019 }
1021 1020
1022 } 1021 }
1023 break; 1022 break;
1024 case (PWMPI): 1023 case (PWMPI):
1025 1024
1026 break; 1025 break;
1027 default: 1026 default:
1028 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 1027 qDebug("KSM::slotSyncMenu: invalid apptype selected");
1029 break; 1028 break;
1030 1029
1031 } 1030 }
1032} 1031}
1033 1032
1034void KSyncManager::syncSharp() 1033void KSyncManager::syncSharp()
1035{ 1034{
1036 1035
1037 if ( ! syncExternalApplication("sharp") ) 1036 if ( ! syncExternalApplication("sharp") )
1038 qDebug("KSM::ERROR sync sharp "); 1037 qDebug("KSM::ERROR sync sharp ");
1039} 1038}
1040 1039
1041bool KSyncManager::syncExternalApplication(QString resource) 1040bool KSyncManager::syncExternalApplication(QString resource)
1042{ 1041{
1043 1042
1044 emit save(); 1043 emit save();
1045 1044
1046 if ( mAskForPreferences ) 1045 if ( mAskForPreferences )
1047 if ( !edit_sync_options()) { 1046 if ( !edit_sync_options()) {
1048 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1047 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1049 return false; 1048 return false;
1050 } 1049 }
1051 1050
1052 qDebug("KSM::Sync extern %s", resource.latin1()); 1051 qDebug("KSM::Sync extern %s", resource.latin1());
1053 1052
1054 bool syncOK = mImplementation->syncExternal(this, resource); 1053 bool syncOK = mImplementation->syncExternal(this, resource);
1055 1054
1056 return syncOK; 1055 return syncOK;
1057 1056
1058} 1057}
1059 1058
1060void KSyncManager::syncPhone() 1059void KSyncManager::syncPhone()
1061{ 1060{
1062 1061
1063 syncExternalApplication("phone"); 1062 syncExternalApplication("phone");
1064 1063
1065} 1064}
1066 1065
1067void KSyncManager::showProgressBar(int percentage, QString caption, int total) 1066void KSyncManager::showProgressBar(int percentage, QString caption, int total)
1068{ 1067{
1069 if (!bar->isVisible()) 1068 if (!bar->isVisible())
1070 { 1069 {
1071 int w = 300; 1070 int w = 300;
1072 if ( QApplication::desktop()->width() < 320 ) 1071 if ( QApplication::desktop()->width() < 320 )
1073 w = 220; 1072 w = 220;
1074 int h = bar->sizeHint().height() ; 1073 int h = bar->sizeHint().height() ;
1075 int dw = QApplication::desktop()->width(); 1074 int dw = QApplication::desktop()->width();
1076 int dh = QApplication::desktop()->height(); 1075 int dh = QApplication::desktop()->height();
1077 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1076 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1078 bar->setCaption (caption); 1077 bar->setCaption (caption);
1079 bar->setTotalSteps ( total ) ; 1078 bar->setTotalSteps ( total ) ;
1080 bar->show(); 1079 bar->show();
1081 } 1080 }
1082 bar->raise(); 1081 bar->raise();
1083 bar->setProgress( percentage ); 1082 bar->setProgress( percentage );
1084 qApp->processEvents(); 1083 qApp->processEvents();
1085} 1084}
1086 1085
1087void KSyncManager::hideProgressBar() 1086void KSyncManager::hideProgressBar()
1088{ 1087{
1089 bar->hide(); 1088 bar->hide();
1090 qApp->processEvents(); 1089 qApp->processEvents();
1091} 1090}
1092 1091
1093bool KSyncManager::isProgressBarCanceled() 1092bool KSyncManager::isProgressBarCanceled()
1094{ 1093{
1095 return !bar->isVisible(); 1094 return !bar->isVisible();
1096} 1095}
1097 1096
1098QString KSyncManager::syncFileName() 1097QString KSyncManager::syncFileName()
1099{ 1098{
1100 1099
1101 QString fn = "tempfile"; 1100 QString fn = "tempfile";
1102 switch(mTargetApp) 1101 switch(mTargetApp)
1103 { 1102 {
1104 case (KAPI): 1103 case (KAPI):
1105 fn = "tempsyncab.vcf"; 1104 fn = "tempsyncab.vcf";
1106 break; 1105 break;
1107 case (KOPI): 1106 case (KOPI):
1108 fn = "tempsynccal.ics"; 1107 fn = "tempsynccal.ics";
1109 break; 1108 break;
1110 case (PWMPI): 1109 case (PWMPI):
1111 fn = "tempsyncpw.pwm"; 1110 fn = "tempsyncpw.pwm";
1112 break; 1111 break;
1113 default: 1112 default:
1114 break; 1113 break;
1115 } 1114 }
1116#ifdef DESKTOP_VERSION 1115#ifdef DESKTOP_VERSION
1117 return locateLocal( "tmp", fn ); 1116 return locateLocal( "tmp", fn );
1118#else 1117#else
1119 return (QString( "/tmp/" )+ fn ); 1118 return (QString( "/tmp/" )+ fn );
1120#endif 1119#endif
1121} 1120}
1122 1121
1123void KSyncManager::syncPi() 1122void KSyncManager::syncPi()
1124{ 1123{
1125 mIsKapiFile = true; 1124 mIsKapiFile = true;
1126 mPisyncFinished = false; 1125 mPisyncFinished = false;
1127 qApp->processEvents(); 1126 qApp->processEvents();
1128 if ( mAskForPreferences ) 1127 if ( mAskForPreferences )
1129 if ( !edit_pisync_options()) { 1128 if ( !edit_pisync_options()) {
1130 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1129 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1131 mPisyncFinished = true; 1130 mPisyncFinished = true;
1132 return; 1131 return;
1133 } 1132 }
1134 bool ok; 1133 bool ok;
1135 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 1134 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
1136 if ( ! ok ) { 1135 if ( ! ok ) {
1137 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 1136 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
1138 mPisyncFinished = true; 1137 mPisyncFinished = true;
1139 return; 1138 return;
1140 } 1139 }
1141 mCurrentResourceLocal = ""; 1140 mCurrentResourceLocal = "";
1142 mCurrentResourceRemote = ""; 1141 mCurrentResourceRemote = "";
1143 if ( mSpecificResources.count() ) { 1142 if ( mSpecificResources.count() ) {
1144 int lastSyncRes = mSpecificResources.count()/2; 1143 uint lastSyncRes = mSpecificResources.count()/2;
1145 int ccc = mSpecificResources.count()-1; 1144 int ccc = mSpecificResources.count()-1;
1146 while ( lastSyncRes > 0 && ccc > 0 && mSpecificResources[ ccc ].isEmpty() ) { 1145 while ( lastSyncRes > 0 && ccc > 0 && mSpecificResources[ ccc ].isEmpty() ) {
1147 --ccc; 1146 --ccc;
1148 --lastSyncRes; 1147 --lastSyncRes;
1149 //qDebug ( "KSM: sync pi %d",ccc ); 1148 //qDebug ( "KSM: sync pi %d",ccc );
1150 } 1149 }
1151 int startLocal = 0; 1150 uint startLocal = 0;
1152 int startRemote = mSpecificResources.count()/2; 1151 uint startRemote = mSpecificResources.count()/2;
1153 emit multiResourceSyncStart( true ); 1152 emit multiResourceSyncStart( true );
1154 while ( startLocal < mSpecificResources.count()/2 ) { 1153 while ( startLocal < mSpecificResources.count()/2 ) {
1155 if ( startLocal+1 >= lastSyncRes ) 1154 if ( startLocal+1 >= lastSyncRes )
1156 emit multiResourceSyncStart( false ); 1155 emit multiResourceSyncStart( false );
1157 mPisyncFinished = false; 1156 mPisyncFinished = false;
1158 mCurrentResourceLocal = mSpecificResources[ startLocal ]; 1157 mCurrentResourceLocal = mSpecificResources[ startLocal ];
1159 mCurrentResourceRemote = mSpecificResources[ startRemote ]; 1158 mCurrentResourceRemote = mSpecificResources[ startRemote ];
1160 //qDebug ( "KSM: AAASyncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() ); 1159 //qDebug ( "KSM: AAASyncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() );
1161 if ( !mCurrentResourceRemote.isEmpty() ) { 1160 if ( !mCurrentResourceRemote.isEmpty() ) {
1162 qDebug ( "KSM: Syncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() ); 1161 qDebug ( "KSM: Syncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() );
1163 1162
1164 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1163 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1165 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1164 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1166 commandSocket->readFile( syncFileName() ); 1165 commandSocket->readFile( syncFileName() );
1167 mParent->topLevelWidget()->setCaption( i18n("Syncing %1 <-> %2").arg( mCurrentResourceLocal ).arg( mCurrentResourceRemote ) ); 1166 mParent->topLevelWidget()->setCaption( i18n("Syncing %1 <-> %2").arg( mCurrentResourceLocal ).arg( mCurrentResourceRemote ) );
1168 while ( !mPisyncFinished ) { 1167 while ( !mPisyncFinished ) {
1169 //qDebug("waiting "); 1168 //qDebug("waiting ");
1170 qApp->processEvents(); 1169 qApp->processEvents();
1171 } 1170 }
1172 if ( startLocal+1 < mSpecificResources.count()/2 ) { 1171 if ( startLocal+1 < mSpecificResources.count()/2 ) {
1173 mParent->topLevelWidget()->setCaption( i18n("Waiting 2 secs before syncing next resource...") ); 1172 mParent->topLevelWidget()->setCaption( i18n("Waiting 2 secs before syncing next resource...") );
1174 QTime timer; 1173 QTime timer;
1175 timer.start(); 1174 timer.start();
1176 while ( timer.elapsed () < 2000 ) { 1175 while ( timer.elapsed () < 2000 ) {
1177 qApp->processEvents(); 1176 qApp->processEvents();
1178 } 1177 }
1179 } 1178 }
1180 } 1179 }
1181 ++startRemote; 1180 ++startRemote;
1182 ++startLocal; 1181 ++startLocal;
1183 mAskForPreferences = false; 1182 mAskForPreferences = false;
1184 } 1183 }
1185 mPisyncFinished = true; 1184 mPisyncFinished = true;
1186 } else { 1185 } else {
1187 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1186 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1188 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1187 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1189 commandSocket->readFile( syncFileName() ); 1188 commandSocket->readFile( syncFileName() );
1190 } 1189 }
1191} 1190}
1192 1191
1193void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1192void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1194{ 1193{
1195 //enum { success, errorW, errorR, quiet }; 1194 //enum { success, errorW, errorR, quiet };
1196 1195
1197 1196
1198 1197
1199 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1198 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1200 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1199 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1201 if ( state == KCommandSocket::errorPW ) 1200 if ( state == KCommandSocket::errorPW )
1202 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1201 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1203 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1202 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1204 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1203 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1205 else if ( state == KCommandSocket::errorCA ) 1204 else if ( state == KCommandSocket::errorCA )
1206 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1205 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1207 else if ( state == KCommandSocket::errorFI ) 1206 else if ( state == KCommandSocket::errorFI )
1208 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1207 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1209 else if ( state == KCommandSocket::errorED ) 1208 else if ( state == KCommandSocket::errorED )
1210 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1209 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1211 else if ( state == KCommandSocket::errorUN ) 1210 else if ( state == KCommandSocket::errorUN )
1212 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1211 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1213 delete s; 1212 delete s;
1214 if ( state == KCommandSocket::errorR ) { 1213 if ( state == KCommandSocket::errorR ) {
1215 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1214 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1216 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1215 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1217 commandSocket->sendStop(); 1216 commandSocket->sendStop();
1218 } 1217 }
1219 mPisyncFinished = true; 1218 mPisyncFinished = true;
1220 return; 1219 return;
1221 1220
1222 } else if ( state == KCommandSocket::errorW ) { 1221 } else if ( state == KCommandSocket::errorW ) {
1223 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1222 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1224 mPisyncFinished = true; 1223 mPisyncFinished = true;
1225 1224
1226 } else if ( state == KCommandSocket::successR ) { 1225 } else if ( state == KCommandSocket::successR ) {
1227 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1226 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1228 1227
1229 } else if ( state == KCommandSocket::successW ) { 1228 } else if ( state == KCommandSocket::successW ) {
1230 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1229 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1231 mPisyncFinished = true; 1230 mPisyncFinished = true;
1232 } else if ( state == KCommandSocket::quiet ){ 1231 } else if ( state == KCommandSocket::quiet ){
1233 qDebug("KSS: quiet "); 1232 qDebug("KSS: quiet ");
1234 mPisyncFinished = true; 1233 mPisyncFinished = true;
1235 } else { 1234 } else {
1236 qDebug("KSS: Error: unknown state: %d ", state); 1235 qDebug("KSS: Error: unknown state: %d ", state);
1237 mPisyncFinished = true; 1236 mPisyncFinished = true;
1238 } 1237 }
1239 1238
1240 delete s; 1239 delete s;
1241} 1240}
1242 1241
1243void KSyncManager::readFileFromSocket() 1242void KSyncManager::readFileFromSocket()
1244{ 1243{
1245 QString fileName = syncFileName(); 1244 QString fileName = syncFileName();
1246 bool syncOK = true; 1245 bool syncOK = true;
1247 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1246 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1248 if ( ! syncWithFile( fileName , true ) ) { 1247 if ( ! syncWithFile( fileName , true ) ) {
1249 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1248 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1250 syncOK = false; 1249 syncOK = false;
1251 } 1250 }
1252 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1251 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1253 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1252 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1254 if ( mWriteBackFile && syncOK ) { 1253 if ( mWriteBackFile && syncOK ) {
1255 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") ); 1254 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1256 commandSocket->writeFile( fileName ); 1255 commandSocket->writeFile( fileName );
1257 } 1256 }
1258 else { 1257 else {
1259 commandSocket->sendStop(); 1258 commandSocket->sendStop();
1260 if ( syncOK ) 1259 if ( syncOK )
1261 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1260 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1262 mPisyncFinished = true; 1261 mPisyncFinished = true;
1263 } 1262 }
1264} 1263}
1265 1264
1266KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1265KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1267{ 1266{
1268 mPendingConnect = 0; 1267 mPendingConnect = 0;
1269 mPassWord = pw; 1268 mPassWord = pw;
1270 mSocket = 0; 1269 mSocket = 0;
1271 mSyncActionDialog = 0; 1270 mSyncActionDialog = 0;
1272 blockRC = false; 1271 blockRC = false;
1273 mErrorMessage = 0; 1272 mErrorMessage = 0;
1274} 1273}
1275void KServerSocket::waitForSocketFinish() 1274void KServerSocket::waitForSocketFinish()
1276{ 1275{
1277 if ( mSocket ) { 1276 if ( mSocket ) {
1278 //qDebug("KSS:: waiting for finish operation"); 1277 //qDebug("KSS:: waiting for finish operation");
1279 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish())); 1278 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish()));
1280 return; 1279 return;
1281 } 1280 }
1282 mSocket = new QSocket( this ); 1281 mSocket = new QSocket( this );
1283 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1282 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1284 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1283 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1285 mSocket->setSocket( mPendingConnect ); 1284 mSocket->setSocket( mPendingConnect );
1286 mPendingConnect = 0; 1285 mPendingConnect = 0;
1287} 1286}
1288void KServerSocket::newConnection ( int socket ) 1287void KServerSocket::newConnection ( int socket )
1289{ 1288{
1290 // qDebug("KServerSocket:New connection %d ", socket); 1289 // qDebug("KServerSocket:New connection %d ", socket);
1291 if ( mPendingConnect ) { 1290 if ( mPendingConnect ) {
1292 qDebug("KSS::Error : new Connection"); 1291 qDebug("KSS::Error : new Connection");
1293 return; 1292 return;
1294 } 1293 }
1295 if ( mSocket ) { 1294 if ( mSocket ) {
1296 mPendingConnect = socket; 1295 mPendingConnect = socket;
1297 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish())); 1296 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish()));
1298 return; 1297 return;
1299 qDebug("KSS::newConnection Socket deleted! "); 1298 qDebug("KSS::newConnection Socket deleted! ");
1300 delete mSocket; 1299 delete mSocket;
1301 mSocket = 0; 1300 mSocket = 0;
1302 } 1301 }
1303 mPendingConnect = 0; 1302 mPendingConnect = 0;
1304 mSocket = new QSocket( this ); 1303 mSocket = new QSocket( this );
1305 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1304 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1306 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1305 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1307 mSocket->setSocket( socket ); 1306 mSocket->setSocket( socket );
1308} 1307}
1309 1308
1310void KServerSocket::discardClient() 1309void KServerSocket::discardClient()
1311{ 1310{
1312 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1311 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1313} 1312}
1314void KServerSocket::deleteSocket() 1313void KServerSocket::deleteSocket()
1315{ 1314{
1316 qDebug("KSS::deleteSocket"); 1315 qDebug("KSS::deleteSocket");
1317 if ( mSocket ) { 1316 if ( mSocket ) {
1318 delete mSocket; 1317 delete mSocket;
1319 mSocket = 0; 1318 mSocket = 0;
1320 } 1319 }
1321 if ( mErrorMessage ) 1320 if ( mErrorMessage )
1322 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1321 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1323} 1322}
1324void KServerSocket::readClient() 1323void KServerSocket::readClient()
1325{ 1324{
1326 if ( blockRC ) 1325 if ( blockRC )
1327 return; 1326 return;
1328 if ( mSocket == 0 ) { 1327 if ( mSocket == 0 ) {
1329 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1328 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1330 return; 1329 return;
1331 } 1330 }
1332 if ( mErrorMessage ) { 1331 if ( mErrorMessage ) {
1333 mErrorMessage = 999; 1332 mErrorMessage = 999;
1334 error_connect("ERROR_ED\r\n\r\n"); 1333 error_connect("ERROR_ED\r\n\r\n");
1335 return; 1334 return;
1336 } 1335 }
1337 mResource = ""; 1336 mResource = "";
1338 mErrorMessage = 0; 1337 mErrorMessage = 0;
1339 //qDebug("KServerSocket::readClient()"); 1338 //qDebug("KServerSocket::readClient()");
1340 if ( mSocket->canReadLine() ) { 1339 if ( mSocket->canReadLine() ) {
1341 QString line = mSocket->readLine(); 1340 QString line = mSocket->readLine();
1342 //qDebug("KServerSocket readline: %s ", line.latin1()); 1341 //qDebug("KServerSocket readline: %s ", line.latin1());
1343 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1342 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1344 if ( tokens[0] == "GET" ) { 1343 if ( tokens[0] == "GET" ) {
1345 if ( tokens[1] == mPassWord ) { 1344 if ( tokens[1] == mPassWord ) {
1346 //emit sendFile( mSocket ); 1345 //emit sendFile( mSocket );
1347 bool ok = false; 1346 bool ok = false;
1348 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1347 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1349 if ( ok ) { 1348 if ( ok ) {
1350 KSyncManager::mRequestedSyncEvent = dt; 1349 KSyncManager::mRequestedSyncEvent = dt;
1351 } 1350 }
1352 else 1351 else
1353 KSyncManager::mRequestedSyncEvent = QDateTime(); 1352 KSyncManager::mRequestedSyncEvent = QDateTime();
1354 mResource =tokens[3]; 1353 mResource =tokens[3];
1355 send_file(); 1354 send_file();
1356 } 1355 }
1357 else { 1356 else {
1358 mErrorMessage = 1; 1357 mErrorMessage = 1;
1359 error_connect("ERROR_PW\r\n\r\n"); 1358 error_connect("ERROR_PW\r\n\r\n");
1360 } 1359 }
1361 } 1360 }
1362 if ( tokens[0] == "PUT" ) { 1361 if ( tokens[0] == "PUT" ) {
1363 if ( tokens[1] == mPassWord ) { 1362 if ( tokens[1] == mPassWord ) {
1364 //emit getFile( mSocket ); 1363 //emit getFile( mSocket );
1365 blockRC = true; 1364 blockRC = true;
1366 mResource =tokens[2]; 1365 mResource =tokens[2];
1367 get_file(); 1366 get_file();
1368 } 1367 }
1369 else { 1368 else {
1370 mErrorMessage = 2; 1369 mErrorMessage = 2;
1371 error_connect("ERROR_PW\r\n\r\n"); 1370 error_connect("ERROR_PW\r\n\r\n");
1372 end_connect(); 1371 end_connect();
1373 } 1372 }
1374 } 1373 }
1375 if ( tokens[0] == "STOP" ) { 1374 if ( tokens[0] == "STOP" ) {
1376 //emit endConnect(); 1375 //emit endConnect();
1377 end_connect(); 1376 end_connect();
1378 } 1377 }
1379 } 1378 }
1380} 1379}
1381void KServerSocket::displayErrorMessage() 1380void KServerSocket::displayErrorMessage()
1382{ 1381{
1383 if ( mErrorMessage == 1 ) { 1382 if ( mErrorMessage == 1 ) {
1384 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error")); 1383 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1385 mErrorMessage = 0; 1384 mErrorMessage = 0;
1386 } 1385 }
1387 else if ( mErrorMessage == 2 ) { 1386 else if ( mErrorMessage == 2 ) {
1388 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error")); 1387 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1389 mErrorMessage = 0; 1388 mErrorMessage = 0;
1390 } 1389 }
1391} 1390}
1392void KServerSocket::error_connect( QString errmess ) 1391void KServerSocket::error_connect( QString errmess )
1393{ 1392{
1394 QTextStream os( mSocket ); 1393 QTextStream os( mSocket );
1395 os.setEncoding( QTextStream::Latin1 ); 1394 os.setEncoding( QTextStream::Latin1 );
1396 os << errmess ; 1395 os << errmess ;
1397 mSocket->close(); 1396 mSocket->close();
1398 if ( mSocket->state() == QSocket::Idle ) { 1397 if ( mSocket->state() == QSocket::Idle ) {
1399 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1398 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1400 } 1399 }
1401} 1400}
1402void KServerSocket::end_connect() 1401void KServerSocket::end_connect()
1403{ 1402{
1404 delete mSyncActionDialog; 1403 delete mSyncActionDialog;
1405 mSyncActionDialog = 0; 1404 mSyncActionDialog = 0;
1406} 1405}
1407void KServerSocket::send_file() 1406void KServerSocket::send_file()
1408{ 1407{
1409 //qDebug("MainWindow::sendFile(QSocket* s) "); 1408 //qDebug("MainWindow::sendFile(QSocket* s) ");
1410 if ( mSyncActionDialog ) 1409 if ( mSyncActionDialog )
1411 delete mSyncActionDialog; 1410 delete mSyncActionDialog;
1412 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1411 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1413 mSyncActionDialog->setCaption(i18n("Received sync request")); 1412 mSyncActionDialog->setCaption(i18n("Received sync request"));
1414 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1413 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1415 label->setAlignment ( Qt::AlignHCenter ); 1414 label->setAlignment ( Qt::AlignHCenter );
1416 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1415 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1417 lay->addWidget( label); 1416 lay->addWidget( label);
1418 lay->setMargin(7); 1417 lay->setMargin(7);
1419 lay->setSpacing(7); 1418 lay->setSpacing(7);
1420 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1419 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1421 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1420 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1422 //secs = 333; 1421 //secs = 333;
1423 if ( secs < 0 ) 1422 if ( secs < 0 )
1424 secs = secs * (-1); 1423 secs = secs * (-1);
1425 if ( secs > 30 ) 1424 if ( secs > 30 )
1426 //if ( true ) 1425 //if ( true )
1427 { 1426 {
1428 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1427 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1429 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1428 QLabel* label = new QLabel( warning, mSyncActionDialog );
1430 label->setAlignment ( Qt::AlignHCenter ); 1429 label->setAlignment ( Qt::AlignHCenter );
1431 lay->addWidget( label); 1430 lay->addWidget( label);
1432 if ( secs > 180 ) 1431 if ( secs > 180 )
1433 { 1432 {
1434 if ( secs > 300 ) { 1433 if ( secs > 300 ) {
1435 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) { 1434 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) {
1436 qDebug("KSS::Sync cancelled ,cs"); 1435 qDebug("KSS::Sync cancelled ,cs");
1437 mErrorMessage = 0; 1436 mErrorMessage = 0;
1438 end_connect(); 1437 end_connect();
1439 error_connect("ERROR_CA\r\n\r\n"); 1438 error_connect("ERROR_CA\r\n\r\n");
1440 return ; 1439 return ;
1441 } 1440 }
1442 } 1441 }
1443 QFont f = label->font(); 1442 QFont f = label->font();
1444 f.setPointSize ( f.pointSize() *2 ); 1443 f.setPointSize ( f.pointSize() *2 );
1445 f. setBold (true ); 1444 f. setBold (true );
1446 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1445 QLabel* label = new QLabel( warning, mSyncActionDialog );
1447 label->setFont( f ); 1446 label->setFont( f );
1448 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1447 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1449 label->setText( warning ); 1448 label->setText( warning );
1450 label->setAlignment ( Qt::AlignHCenter ); 1449 label->setAlignment ( Qt::AlignHCenter );
1451 lay->addWidget( label); 1450 lay->addWidget( label);
1452 mSyncActionDialog->setFixedSize( 230, 300); 1451 mSyncActionDialog->setFixedSize( 230, 300);
1453 } else { 1452 } else {
1454 mSyncActionDialog->setFixedSize( 230, 200); 1453 mSyncActionDialog->setFixedSize( 230, 200);
1455 } 1454 }
1456 } else { 1455 } else {
1457 mSyncActionDialog->setFixedSize( 230, 120); 1456 mSyncActionDialog->setFixedSize( 230, 120);
1458 } 1457 }
1459 } else 1458 } else
1460 mSyncActionDialog->setFixedSize( 230, 120); 1459 mSyncActionDialog->setFixedSize( 230, 120);
1461 mSyncActionDialog->show(); 1460 mSyncActionDialog->show();
1462 mSyncActionDialog->raise(); 1461 mSyncActionDialog->raise();
1463 emit request_file(mResource); 1462 emit request_file(mResource);
1464 emit request_file(); 1463 emit request_file();
1465 qApp->processEvents(); 1464 qApp->processEvents();
1466 QString fileName = mFileName; 1465 QString fileName = mFileName;
1467 QFile file( fileName ); 1466 QFile file( fileName );
1468 if (!file.open( IO_ReadOnly ) ) { 1467 if (!file.open( IO_ReadOnly ) ) {
1469 mErrorMessage = 0; 1468 mErrorMessage = 0;
1470 end_connect(); 1469 end_connect();
1471 error_connect("ERROR_FI\r\n\r\n"); 1470 error_connect("ERROR_FI\r\n\r\n");
1472 return ; 1471 return ;
1473 } 1472 }
1474 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1473 mSyncActionDialog->setCaption( i18n("Sending file...") );
1475 QTextStream ts( &file ); 1474 QTextStream ts( &file );
1476 ts.setEncoding( QTextStream::Latin1 ); 1475 ts.setEncoding( QTextStream::Latin1 );
1477 1476
1478 QTextStream os( mSocket ); 1477 QTextStream os( mSocket );
1479 os.setEncoding( QTextStream::Latin1 ); 1478 os.setEncoding( QTextStream::Latin1 );
1480 while ( ! ts.atEnd() ) { 1479 while ( ! ts.atEnd() ) {
1481 os << ts.readLine() << "\r\n"; 1480 os << ts.readLine() << "\r\n";
1482 } 1481 }
1483 os << "\r\n"; 1482 os << "\r\n";
1484 //os << ts.read(); 1483 //os << ts.read();
1485 file.close(); 1484 file.close();
1486 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1485 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1487 mSocket->close(); 1486 mSocket->close();
1488 if ( mSocket->state() == QSocket::Idle ) 1487 if ( mSocket->state() == QSocket::Idle )
1489 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1488 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1490} 1489}
1491void KServerSocket::get_file() 1490void KServerSocket::get_file()
1492{ 1491{
1493 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1492 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1494 1493
1495 piTime.start(); 1494 piTime.start();
1496 piFileString = ""; 1495 piFileString = "";
1497 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1496 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1498} 1497}
1499 1498
1500 1499
1501void KServerSocket::readBackFileFromSocket() 1500void KServerSocket::readBackFileFromSocket()
1502{ 1501{
1503 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1502 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1504 while ( mSocket->canReadLine () ) { 1503 while ( mSocket->canReadLine () ) {
1505 piTime.restart(); 1504 piTime.restart();
1506 QString line = mSocket->readLine (); 1505 QString line = mSocket->readLine ();
1507 piFileString += line; 1506 piFileString += line;
1508 //qDebug("readline: %s ", line.latin1()); 1507 //qDebug("readline: %s ", line.latin1());
1509 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1508 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1510 1509
1511 } 1510 }
1512 if ( piTime.elapsed () < 3000 ) { 1511 if ( piTime.elapsed () < 3000 ) {
1513 // wait for more 1512 // wait for more
1514 //qDebug("waitformore "); 1513 //qDebug("waitformore ");
1515 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1514 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1516 return; 1515 return;
1517 } 1516 }
1518 QString fileName = mFileName; 1517 QString fileName = mFileName;
1519 QFile file ( fileName ); 1518 QFile file ( fileName );
1520 if (!file.open( IO_WriteOnly ) ) { 1519 if (!file.open( IO_WriteOnly ) ) {
1521 delete mSyncActionDialog; 1520 delete mSyncActionDialog;
1522 mSyncActionDialog = 0; 1521 mSyncActionDialog = 0;
1523 qDebug("KSS:Error open read back file "); 1522 qDebug("KSS:Error open read back file ");
1524 piFileString = ""; 1523 piFileString = "";
1525 emit file_received( false, mResource); 1524 emit file_received( false, mResource);
1526 emit file_received( false); 1525 emit file_received( false);
1527 blockRC = false; 1526 blockRC = false;
1528 return ; 1527 return ;
1529 1528
1530 } 1529 }
1531 1530
1532 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1531 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1533 QTextStream ts ( &file ); 1532 QTextStream ts ( &file );
1534 ts.setEncoding( QTextStream::Latin1 ); 1533 ts.setEncoding( QTextStream::Latin1 );
1535 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1534 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1536 ts << piFileString; 1535 ts << piFileString;
1537 mSocket->close(); 1536 mSocket->close();
1538 if ( mSocket->state() == QSocket::Idle ) 1537 if ( mSocket->state() == QSocket::Idle )
1539 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1538 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1540 file.close(); 1539 file.close();
1541 piFileString = ""; 1540 piFileString = "";
1542 emit file_received( true, mResource ); 1541 emit file_received( true, mResource );
1543 emit file_received( true); 1542 emit file_received( true);
1544 delete mSyncActionDialog; 1543 delete mSyncActionDialog;
1545 mSyncActionDialog = 0; 1544 mSyncActionDialog = 0;
1546 blockRC = false; 1545 blockRC = false;
1547 1546
1548} 1547}
1549 1548
1550KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1549KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1551{ 1550{
1552 mRemoteResource = remres; 1551 mRemoteResource = remres;
1553 if ( mRemoteResource.isEmpty() ) 1552 if ( mRemoteResource.isEmpty() )
1554 mRemoteResource = "ALL"; 1553 mRemoteResource = "ALL";
1555 else 1554 else
1556 mRemoteResource.replace (QRegExp (" "),"_" ); 1555 mRemoteResource.replace (QRegExp (" "),"_" );
1557 mPassWord = password; 1556 mPassWord = password;
1558 mSocket = 0; 1557 mSocket = 0;
1559 mFirst = false; 1558 mFirst = false;
1560 mFirstLine = true; 1559 mFirstLine = true;
1561 mPort = port; 1560 mPort = port;
1562 mHost = host; 1561 mHost = host;
1563 tlw = cap; 1562 tlw = cap;
1564 mRetVal = quiet; 1563 mRetVal = quiet;
1565 mTimerSocket = new QTimer ( this ); 1564 mTimerSocket = new QTimer ( this );
1566 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) ); 1565 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1567 mConnectProgress.setCaption( i18n("Pi-Sync") ); 1566 mConnectProgress.setCaption( i18n("Pi-Sync") );
1568 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) ); 1567 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1569 mConnectCount = -1; 1568 mConnectCount = -1;
1570} 1569}
1571void KCommandSocket::sendFileRequest() 1570void KCommandSocket::sendFileRequest()
1572{ 1571{
1573 if ( tlw ) 1572 if ( tlw )
1574 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1573 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1575 mConnectProgress.hide(); 1574 mConnectProgress.hide();
1576 mConnectCount = 300;mConnectMax = 300; 1575 mConnectCount = 300;mConnectMax = 300;
1577 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") ); 1576 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1578 mConnectProgress.setLabelText( i18n("Waiting for remote file...") ); 1577 mConnectProgress.setLabelText( i18n("Waiting for remote file...") );
1579 mTimerSocket->start( 100, true ); 1578 mTimerSocket->start( 100, true );
1580 QTextStream os( mSocket ); 1579 QTextStream os( mSocket );
1581 os.setEncoding( QTextStream::Latin1 ); 1580 os.setEncoding( QTextStream::Latin1 );
1582 1581
1583 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1582 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1584 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n"; 1583 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n";
1585} 1584}
1586 1585
1587void KCommandSocket::readFile( QString fn ) 1586void KCommandSocket::readFile( QString fn )
1588{ 1587{
1589 if ( !mSocket ) { 1588 if ( !mSocket ) {
1590 mSocket = new QSocket( this ); 1589 mSocket = new QSocket( this );
1591 //qDebug("KCS: read file - new socket"); 1590 //qDebug("KCS: read file - new socket");
1592 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1591 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1593 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1592 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1594 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1593 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1595 } 1594 }
1596 mFileString = ""; 1595 mFileString = "";
1597 mFileName = fn; 1596 mFileName = fn;
1598 mFirst = true; 1597 mFirst = true;
1599 if ( tlw ) 1598 if ( tlw )
1600 tlw->setCaption( i18n("Trying to connect to remote...") ); 1599 tlw->setCaption( i18n("Trying to connect to remote...") );
1601 mConnectCount = 30;mConnectMax = 30; 1600 mConnectCount = 30;mConnectMax = 30;
1602 mTimerSocket->start( 1000, true ); 1601 mTimerSocket->start( 1000, true );
1603 mSocket->connectToHost( mHost, mPort ); 1602 mSocket->connectToHost( mHost, mPort );
1604 qDebug("KCS: Waiting for connection"); 1603 qDebug("KCS: Waiting for connection");
1605} 1604}
1606void KCommandSocket::updateConnectDialog() 1605void KCommandSocket::updateConnectDialog()
1607{ 1606{
1608 1607
1609 if ( mConnectCount == mConnectMax ) { 1608 if ( mConnectCount == mConnectMax ) {
1610 //qDebug("MAXX %d", mConnectMax); 1609 //qDebug("MAXX %d", mConnectMax);
1611 mConnectProgress.setTotalSteps ( 30 ); 1610 mConnectProgress.setTotalSteps ( 30 );
1612 mConnectProgress.show(); 1611 mConnectProgress.show();
1613 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") ); 1612 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1614 } 1613 }
1615 //qDebug("updateConnectDialog() %d", mConnectCount); 1614 //qDebug("updateConnectDialog() %d", mConnectCount);
1616 mConnectProgress.raise(); 1615 mConnectProgress.raise();
1617 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 ); 1616 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1618 --mConnectCount; 1617 --mConnectCount;
1619 if ( mConnectCount > 0 ) 1618 if ( mConnectCount > 0 )
1620 mTimerSocket->start( 1000, true ); 1619 mTimerSocket->start( 1000, true );
1621 else 1620 else
1622 deleteSocket(); 1621 deleteSocket();
1623 1622
1624} 1623}
1625void KCommandSocket::writeFile( QString fileName ) 1624void KCommandSocket::writeFile( QString fileName )
1626{ 1625{
1627 if ( !mSocket ) { 1626 if ( !mSocket ) {
1628 mSocket = new QSocket( this ); 1627 mSocket = new QSocket( this );
1629 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1628 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1630 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1629 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1631 } 1630 }
1632 mFileName = fileName ; 1631 mFileName = fileName ;
1633 mConnectCount = 30;mConnectMax = 30; 1632 mConnectCount = 30;mConnectMax = 30;
1634 mTimerSocket->start( 1000, true ); 1633 mTimerSocket->start( 1000, true );
1635 mSocket->connectToHost( mHost, mPort ); 1634 mSocket->connectToHost( mHost, mPort );
1636} 1635}
1637void KCommandSocket::writeFileToSocket() 1636void KCommandSocket::writeFileToSocket()
1638{ 1637{
1639 mTimerSocket->stop(); 1638 mTimerSocket->stop();
1640 QFile file2( mFileName ); 1639 QFile file2( mFileName );
1641 if (!file2.open( IO_ReadOnly ) ) { 1640 if (!file2.open( IO_ReadOnly ) ) {
1642 mConnectProgress.hide(); 1641 mConnectProgress.hide();
1643 mConnectCount = -1; 1642 mConnectCount = -1;
1644 mRetVal= errorW; 1643 mRetVal= errorW;
1645 mSocket->close(); 1644 mSocket->close();
1646 if ( mSocket->state() == QSocket::Idle ) 1645 if ( mSocket->state() == QSocket::Idle )
1647 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1646 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1648 return ; 1647 return ;
1649 } 1648 }
1650 mConnectProgress.setTotalSteps ( file2.size() ); 1649 mConnectProgress.setTotalSteps ( file2.size() );
1651 mConnectProgress.show(); 1650 mConnectProgress.show();
1652 int count = 0; 1651 int count = 0;
1653 mConnectProgress.setLabelText( i18n("Sending back synced file...") ); 1652 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1654 mConnectProgress.setProgress( count ); 1653 mConnectProgress.setProgress( count );
1655 mConnectProgress.blockSignals( true ); 1654 mConnectProgress.blockSignals( true );
1656 QTextStream ts2( &file2 ); 1655 QTextStream ts2( &file2 );
1657 ts2.setEncoding( QTextStream::Latin1 ); 1656 ts2.setEncoding( QTextStream::Latin1 );
1658 QTextStream os2( mSocket ); 1657 QTextStream os2( mSocket );
1659 os2.setEncoding( QTextStream::Latin1 ); 1658 os2.setEncoding( QTextStream::Latin1 );
1660 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";; 1659 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";;
1661 int byteCount = 0; 1660 int byteCount = 0;
1662 int byteMax = file2.size()/53; 1661 int byteMax = file2.size()/53;
1663 while ( ! ts2.atEnd() ) { 1662 while ( ! ts2.atEnd() ) {
1664 qApp->processEvents(); 1663 qApp->processEvents();
1665 if ( byteCount > byteMax ) { 1664 if ( byteCount > byteMax ) {
1666 byteCount = 0; 1665 byteCount = 0;
1667 mConnectProgress.setProgress( count ); 1666 mConnectProgress.setProgress( count );
1668 } 1667 }
1669 QString temp = ts2.readLine(); 1668 QString temp = ts2.readLine();
1670 count += temp.length(); 1669 count += temp.length();
1671 byteCount += temp.length(); 1670 byteCount += temp.length();
1672 os2 << temp << "\r\n"; 1671 os2 << temp << "\r\n";
1673 } 1672 }
1674 file2.close(); 1673 file2.close();
1675 mConnectProgress.hide(); 1674 mConnectProgress.hide();
1676 mConnectCount = -1; 1675 mConnectCount = -1;
1677 os2 << "\r\n"; 1676 os2 << "\r\n";
1678 mRetVal= successW; 1677 mRetVal= successW;
1679 mSocket->close(); 1678 mSocket->close();
1680 if ( mSocket->state() == QSocket::Idle ) 1679 if ( mSocket->state() == QSocket::Idle )
1681 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1680 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1682 mConnectProgress.blockSignals( false ); 1681 mConnectProgress.blockSignals( false );
1683} 1682}
1684void KCommandSocket::sendStop() 1683void KCommandSocket::sendStop()
1685{ 1684{
1686 if ( !mSocket ) { 1685 if ( !mSocket ) {
1687 mSocket = new QSocket( this ); 1686 mSocket = new QSocket( this );
1688 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1687 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1689 } 1688 }
1690 mSocket->connectToHost( mHost, mPort ); 1689 mSocket->connectToHost( mHost, mPort );
1691 QTextStream os2( mSocket ); 1690 QTextStream os2( mSocket );
1692 os2.setEncoding( QTextStream::Latin1 ); 1691 os2.setEncoding( QTextStream::Latin1 );
1693 os2 << "STOP\r\n\r\n"; 1692 os2 << "STOP\r\n\r\n";
1694 mSocket->close(); 1693 mSocket->close();
1695 if ( mSocket->state() == QSocket::Idle ) 1694 if ( mSocket->state() == QSocket::Idle )
1696 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1695 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1697} 1696}
1698 1697
1699void KCommandSocket::startReadFileFromSocket() 1698void KCommandSocket::startReadFileFromSocket()
1700{ 1699{
1701 if ( ! mFirst ) 1700 if ( ! mFirst )
1702 return; 1701 return;
1703 mConnectProgress.setLabelText( i18n("Receiving file from remote...") ); 1702 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1704 mFirst = false; 1703 mFirst = false;
1705 mFileString = ""; 1704 mFileString = "";
1706 mTime.start(); 1705 mTime.start();
1707 mFirstLine = true; 1706 mFirstLine = true;
1708 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1707 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1709 1708
1710} 1709}
1711void KCommandSocket::readFileFromSocket() 1710void KCommandSocket::readFileFromSocket()
1712{ 1711{
1713 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1712 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1714 while ( mSocket->canReadLine () ) { 1713 while ( mSocket->canReadLine () ) {
1715 mTime.restart(); 1714 mTime.restart();
1716 QString line = mSocket->readLine (); 1715 QString line = mSocket->readLine ();
1717 if ( mFirstLine ) { 1716 if ( mFirstLine ) {
1718 mFirstLine = false; 1717 mFirstLine = false;
1719 if ( line.left( 6 ) == "ERROR_" ) { 1718 if ( line.left( 6 ) == "ERROR_" ) {
1720 mTimerSocket->stop(); 1719 mTimerSocket->stop();
1721 mConnectCount = -1; 1720 mConnectCount = -1;
1722 if ( line.left( 8 ) == "ERROR_PW" ) { 1721 if ( line.left( 8 ) == "ERROR_PW" ) {
1723 mRetVal = errorPW; 1722 mRetVal = errorPW;
1724 deleteSocket(); 1723 deleteSocket();
1725 return ; 1724 return ;
1726 } 1725 }
1727 if ( line.left( 8 ) == "ERROR_CA" ) { 1726 if ( line.left( 8 ) == "ERROR_CA" ) {
1728 mRetVal = errorCA; 1727 mRetVal = errorCA;
1729 deleteSocket(); 1728 deleteSocket();
1730 return ; 1729 return ;
1731 } 1730 }
1732 if ( line.left( 8 ) == "ERROR_FI" ) { 1731 if ( line.left( 8 ) == "ERROR_FI" ) {
1733 mRetVal = errorFI; 1732 mRetVal = errorFI;
1734 deleteSocket(); 1733 deleteSocket();
1735 return ; 1734 return ;
1736 } 1735 }
1737 if ( line.left( 8 ) == "ERROR_ED" ) { 1736 if ( line.left( 8 ) == "ERROR_ED" ) {
1738 mRetVal = errorED; 1737 mRetVal = errorED;
1739 deleteSocket(); 1738 deleteSocket();
1740 return ; 1739 return ;
1741 } 1740 }
1742 mRetVal = errorUN; 1741 mRetVal = errorUN;
1743 deleteSocket(); 1742 deleteSocket();
1744 return ; 1743 return ;
1745 } 1744 }
1746 } 1745 }
1747 mFileString += line; 1746 mFileString += line;
1748 //qDebug("readline: %s ", line.latin1()); 1747 //qDebug("readline: %s ", line.latin1());
1749 } 1748 }
1750 if ( mTime.elapsed () < 3000 ) { 1749 if ( mTime.elapsed () < 3000 ) {
1751 // wait for more 1750 // wait for more
1752 //qDebug("waitformore "); 1751 //qDebug("waitformore ");
1753 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1752 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1754 return; 1753 return;
1755 } 1754 }
1756 mTimerSocket->stop(); 1755 mTimerSocket->stop();
1757 mConnectCount = -1; 1756 mConnectCount = -1;
1758 mConnectProgress.hide(); 1757 mConnectProgress.hide();
1759 QString fileName = mFileName; 1758 QString fileName = mFileName;
1760 QFile file ( fileName ); 1759 QFile file ( fileName );
1761 if (!file.open( IO_WriteOnly ) ) { 1760 if (!file.open( IO_WriteOnly ) ) {
1762 mFileString = ""; 1761 mFileString = "";
1763 mRetVal = errorR; 1762 mRetVal = errorR;
1764 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() ); 1763 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() );
1765 deleteSocket(); 1764 deleteSocket();
1766 return ; 1765 return ;
1767 1766
1768 } 1767 }
1769 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1768 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1770 QTextStream ts ( &file ); 1769 QTextStream ts ( &file );
1771 ts.setEncoding( QTextStream::Latin1 ); 1770 ts.setEncoding( QTextStream::Latin1 );
1772 ts << mFileString; 1771 ts << mFileString;
1773 file.close(); 1772 file.close();
1774 mFileString = ""; 1773 mFileString = "";
1775 mRetVal = successR; 1774 mRetVal = successR;
1776 mSocket->close(); 1775 mSocket->close();
1777 // if state is not idle, deleteSocket(); is called via 1776 // if state is not idle, deleteSocket(); is called via
1778 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1777 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1779 if ( mSocket->state() == QSocket::Idle ) 1778 if ( mSocket->state() == QSocket::Idle )
1780 deleteSocket(); 1779 deleteSocket();
1781} 1780}
1782 1781
1783void KCommandSocket::deleteSocket() 1782void KCommandSocket::deleteSocket()
1784{ 1783{
1785 //qDebug("KCommandSocket::deleteSocket() "); 1784 //qDebug("KCommandSocket::deleteSocket() ");
1786 mConnectProgress.hide(); 1785 mConnectProgress.hide();
1787 1786
1788 if ( mConnectCount >= 0 ) { 1787 if ( mConnectCount >= 0 ) {
1789 mTimerSocket->stop(); 1788 mTimerSocket->stop();
1790 mRetVal = errorTO; 1789 mRetVal = errorTO;
1791 qDebug("KCS::Connection to remote host timed out"); 1790 qDebug("KCS::Connection to remote host timed out");
1792 if ( mSocket ) { 1791 if ( mSocket ) {
1793 mSocket->close(); 1792 mSocket->close();
1794 //if ( mSocket->state() == QSocket::Idle ) 1793 //if ( mSocket->state() == QSocket::Idle )
1795 // deleteSocket(); 1794 // deleteSocket();
1796 delete mSocket; 1795 delete mSocket;
1797 mSocket = 0; 1796 mSocket = 0;
1798 } 1797 }
1799 if ( mConnectCount == 0 ) 1798 if ( mConnectCount == 0 )
1800 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?")); 1799 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?"));
1801 else if ( tlw ) 1800 else if ( tlw )
1802 tlw->setCaption( i18n("Connection to remote host cancelled!") ); 1801 tlw->setCaption( i18n("Connection to remote host cancelled!") );
1803 emit commandFinished( this, mRetVal ); 1802 emit commandFinished( this, mRetVal );
1804 return; 1803 return;
1805 } 1804 }
1806 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1805 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1807 if ( mSocket) 1806 if ( mSocket)
1808 delete mSocket; 1807 delete mSocket;
1809 mSocket = 0; 1808 mSocket = 0;
1810 //qDebug("commandFinished "); 1809 //qDebug("commandFinished ");
1811 emit commandFinished( this, mRetVal ); 1810 emit commandFinished( this, mRetVal );
1812} 1811}
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 604adb8..04cdade 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -1,249 +1,249 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19 19
20 $Id$ 20 $Id$
21*/ 21*/
22#ifndef _KSYNCMANAGER_H 22#ifndef _KSYNCMANAGER_H
23#define _KSYNCMANAGER_H 23#define _KSYNCMANAGER_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qsocket.h> 27#include <qsocket.h>
28#include <qdatetime.h> 28#include <qdatetime.h>
29#include <qserversocket.h> 29#include <qserversocket.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qprogressdialog.h> 32#include <qprogressdialog.h>
33#include <kdialog.h> 33#include <kdialog.h>
34 34
35class QPopupMenu; 35class QPopupMenu;
36class KSyncProfile; 36class KSyncProfile;
37class KPimPrefs; 37class KPimPrefs;
38class QWidget; 38class QWidget;
39class KSyncManager; 39class KSyncManager;
40class KSyncInterface; 40class KSyncInterface;
41class QProgressBar; 41class QProgressBar;
42 42
43 43
44class KServerSocket : public QServerSocket 44class KServerSocket : public QServerSocket
45{ 45{
46 Q_OBJECT 46 Q_OBJECT
47 47
48 public: 48 public:
49 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); 49 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 );
50 50
51 void newConnection ( int socket ) ; 51 void newConnection ( int socket ) ;
52 void setFileName( QString fn ) {mFileName = fn;}; 52 void setFileName( QString fn ) {mFileName = fn;};
53 signals: 53 signals:
54 void file_received( bool ); 54 void file_received( bool );
55 void request_file(); 55 void request_file();
56 void file_received( bool, const QString &); 56 void file_received( bool, const QString &);
57 void request_file(const QString &); 57 void request_file(const QString &);
58 void saveFile(); 58 void saveFile();
59 void endConnect(); 59 void endConnect();
60 private slots: 60 private slots:
61 void waitForSocketFinish(); 61 void waitForSocketFinish();
62 void discardClient(); 62 void discardClient();
63 void deleteSocket(); 63 void deleteSocket();
64 void readClient(); 64 void readClient();
65 void displayErrorMessage(); 65 void displayErrorMessage();
66 void readBackFileFromSocket(); 66 void readBackFileFromSocket();
67 private : 67 private :
68 int mPendingConnect; 68 int mPendingConnect;
69 QString mResource; 69 QString mResource;
70 int mErrorMessage; 70 int mErrorMessage;
71 bool blockRC; 71 bool blockRC;
72 void send_file(); 72 void send_file();
73 void get_file(); 73 void get_file();
74 void end_connect(); 74 void end_connect();
75 void error_connect( QString ); 75 void error_connect( QString );
76 QDialog* mSyncActionDialog; 76 QDialog* mSyncActionDialog;
77 QSocket* mSocket; 77 QSocket* mSocket;
78 QString mPassWord; 78 QString mPassWord;
79 QString mFileName; 79 QString mFileName;
80 QTime piTime; 80 QTime piTime;
81 QString piFileString; 81 QString piFileString;
82}; 82};
83 83
84class KCommandSocket : public QObject 84class KCommandSocket : public QObject
85{ 85{
86 Q_OBJECT 86 Q_OBJECT
87 public: 87 public:
88 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet }; 88 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet };
89 KCommandSocket (QString remoteResource, QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 ); 89 KCommandSocket (QString remoteResource, QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 );
90 void readFile( QString ); 90 void readFile( QString );
91 void writeFile( QString ); 91 void writeFile( QString );
92 void sendStop(); 92 void sendStop();
93 93
94 private slots : 94 private slots :
95 void sendFileRequest(); 95 void sendFileRequest();
96 void updateConnectDialog(); 96 void updateConnectDialog();
97 97
98 signals: 98 signals:
99 void commandFinished( KCommandSocket*, int ); 99 void commandFinished( KCommandSocket*, int );
100 private slots: 100 private slots:
101 void startReadFileFromSocket(); 101 void startReadFileFromSocket();
102 void readFileFromSocket(); 102 void readFileFromSocket();
103 void deleteSocket(); 103 void deleteSocket();
104 void writeFileToSocket(); 104 void writeFileToSocket();
105 private : 105 private :
106 QString mRemoteResource; 106 QString mRemoteResource;
107 int mConnectCount; 107 int mConnectCount;
108 int mConnectMax; 108 int mConnectMax;
109 KProgressDialog mConnectProgress; 109 KProgressDialog mConnectProgress;
110 QWidget* tlw; 110 QWidget* tlw;
111 QSocket* mSocket; 111 QSocket* mSocket;
112 QString mPassWord; 112 QString mPassWord;
113 Q_UINT16 mPort; 113 Q_UINT16 mPort;
114 QString mHost; 114 QString mHost;
115 QString mFileName; 115 QString mFileName;
116 QTimer* mTimerSocket; 116 QTimer* mTimerSocket;
117 int mRetVal; 117 int mRetVal;
118 QTime mTime; 118 QTime mTime;
119 QString mFileString; 119 QString mFileString;
120 bool mFirst; 120 bool mFirst;
121 bool mFirstLine; 121 bool mFirstLine;
122}; 122};
123 123
124 124
125class KSyncManager : public QObject 125class KSyncManager : public QObject
126{ 126{
127 Q_OBJECT 127 Q_OBJECT
128 128
129 public: 129 public:
130 enum TargetApp { 130 enum TargetApp {
131 KOPI = 0, 131 KOPI = 0,
132 KAPI = 1, 132 KAPI = 1,
133 PWMPI = 2 }; 133 PWMPI = 2 };
134 134
135 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu); 135 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
136 ~KSyncManager() ; 136 ~KSyncManager() ;
137 137
138 void multiSync( bool askforPrefs ); 138 void multiSync( bool askforPrefs );
139 bool blockSave() { return mBlockSaveFlag; } 139 bool blockSave() { return mBlockSaveFlag; }
140 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 140 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
141 void setDefaultFileName( QString s) ; 141 void setDefaultFileName( QString s) ;
142 QString defaultFileName() { return mDefFileName ;} 142 QString defaultFileName() { return mDefFileName ;}
143 QString syncFileName(); 143 QString syncFileName();
144 void enableQuick( bool ask = true); 144 void enableQuick( bool ask = true);
145 145
146 bool syncWithDesktop () { return mSyncWithDesktop;} 146 bool syncWithDesktop () { return mSyncWithDesktop;}
147 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 147 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
148 QString getCurrentSyncName() { return mCurrentSyncName; } 148 QString getCurrentSyncName() { return mCurrentSyncName; }
149 149
150 void showProgressBar(int percentage, QString caption = QString::null, int total=100); 150 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
151 void hideProgressBar(); 151 void hideProgressBar();
152 bool isProgressBarCanceled(); 152 bool isProgressBarCanceled();
153 153
154 // sync stuff 154 // sync stuff
155 QString mLocalMachineName; 155 QString mLocalMachineName;
156 QStringList mExternSyncProfiles; 156 QStringList mExternSyncProfiles;
157 QStringList mSyncProfileNames; 157 QStringList mSyncProfileNames;
158 bool mAskForPreferences; 158 bool mAskForPreferences;
159 bool mShowSyncSummary; 159 bool mShowSyncSummary;
160 bool mIsKapiFile; 160 bool mIsKapiFile;
161 bool mWriteBackExistingOnly; 161 bool mWriteBackExistingOnly;
162 int mSyncAlgoPrefs; 162 int mSyncAlgoPrefs;
163 bool mWriteBackFile; 163 bool mWriteBackFile;
164 int mWriteBackInFuture; 164 int mWriteBackInFuture;
165 int mWriteBackInPast; 165 int mWriteBackInPast;
166 QString mPhoneDevice; 166 QString mPhoneDevice;
167 QString mPhoneConnection; 167 QString mPhoneConnection;
168 QString mPhoneModel; 168 QString mPhoneModel;
169 QString mPassWordPiSync; 169 QString mPassWordPiSync;
170 QString mActiveSyncPort; 170 QString mActiveSyncPort;
171 QString mActiveSyncIP ; 171 QString mActiveSyncIP ;
172 QString mFilterInCal; 172 QString mFilterInCal;
173 QString mFilterOutCal; 173 QString mFilterOutCal;
174 QString mFilterInAB; 174 QString mFilterInAB;
175 QString mFilterOutAB; 175 QString mFilterOutAB;
176 static QDateTime mRequestedSyncEvent; 176 static QDateTime mRequestedSyncEvent;
177 177
178 signals: 178 signals:
179 void save(); 179 void save();
180 void request_file(); 180 void request_file();
181 void getFile( bool ); 181 void getFile( bool );
182 void getFile( bool, const QString &); 182 void getFile( bool, const QString &);
183 void request_file(const QString &); 183 void request_file(const QString &);
184 void multiResourceSyncStart( bool ); 184 void multiResourceSyncStart( bool );
185 185
186 public slots: 186 public slots:
187 void slotSyncMenu( int ); 187 void slotSyncMenu( int );
188 void slotClearMenu( int action ); 188 void slotClearMenu( int action );
189 void deleteCommandSocket(KCommandSocket*s, int state); 189 void deleteCommandSocket(KCommandSocket*s, int state);
190 void readFileFromSocket(); 190 void readFileFromSocket();
191 void fillSyncMenu(); 191 void fillSyncMenu();
192 192
193 private: 193 private:
194 void syncPi(); 194 void syncPi();
195 KServerSocket * mServerSocket; 195 KServerSocket * mServerSocket;
196 KPimPrefs* mPrefs; 196 KPimPrefs* mPrefs;
197 QString mDefFileName; 197 QString mDefFileName;
198 QString mCurrentSyncDevice; 198 QString mCurrentSyncDevice;
199 QString mCurrentSyncName; 199 QString mCurrentSyncName;
200 void quickSyncLocalFile(); 200 void quickSyncLocalFile();
201 bool syncWithFile( QString fn , bool quick ); 201 bool syncWithFile( QString fn , bool quick );
202 void syncLocalFile(); 202 void syncLocalFile();
203 void syncPhone(); 203 void syncPhone();
204 void syncSharp(); 204 void syncSharp();
205 void syncKDE(); 205 void syncKDE();
206 bool syncExternalApplication(QString); 206 bool syncExternalApplication(QString);
207 int mCurrentSyncProfile ; 207 int mCurrentSyncProfile ;
208 void syncRemote( KSyncProfile* prof, bool ask = true); 208 void syncRemote( KSyncProfile* prof, bool ask = true);
209 bool edit_sync_options(); 209 bool edit_sync_options();
210 bool edit_pisync_options(); 210 bool edit_pisync_options();
211 int ringSync(); 211 int ringSync();
212 QString getPassword( ); 212 QString getPassword( );
213 bool mPisyncFinished; 213 bool mPisyncFinished;
214 QStringList mSpecificResources; 214 QStringList mSpecificResources;
215 QString mCurrentResourceLocal; 215 QString mCurrentResourceLocal;
216 QString mCurrentResourceRemote; 216 QString mCurrentResourceRemote;
217 bool mBlockSaveFlag; 217 bool mBlockSaveFlag;
218 QWidget* mParent; 218 QWidget* mParent;
219 KSyncInterface* mImplementation; 219 KSyncInterface* mImplementation;
220 TargetApp mTargetApp; 220 TargetApp mTargetApp;
221 QPopupMenu* mSyncMenu; 221 QPopupMenu* mSyncMenu;
222 QProgressBar* bar; 222 QProgressBar* bar;
223 bool mSyncWithDesktop; 223 bool mSyncWithDesktop;
224 224
225private slots: 225private slots:
226 void displayErrorPort(); 226 void displayErrorPort();
227 void confSync(); 227 void confSync();
228 228
229 229
230}; 230};
231 231
232 232
233class KSyncInterface 233class KSyncInterface
234{ 234{
235 public : 235 public :
236 virtual void removeSyncInfo( QString syncProfile) = 0; 236 virtual void removeSyncInfo( QString syncProfile) = 0;
237 virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource) = 0; 237 virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource) = 0;
238 virtual bool syncExternal(KSyncManager* manager, QString resource) 238 virtual bool syncExternal(KSyncManager* /*manager*/, QString /*resource*/)
239 { 239 {
240 // empty implementation, because some syncable applications do not 240 // empty implementation, because some syncable applications do not
241 // have an external(sharpdtm) syncmode, like pwmanager. 241 // have an external(sharpdtm) syncmode, like pwmanager.
242 return false; 242 return false;
243 } 243 }
244 244
245 245
246}; 246};
247 247
248 248
249#endif 249#endif