summaryrefslogtreecommitdiffabout
path: root/korganizer
authorzautrix <zautrix>2005-10-22 16:49:42 (UTC)
committer zautrix <zautrix>2005-10-22 16:49:42 (UTC)
commit3ec18dd19fdf4eb7e763b8022f90de83249facfd (patch) (unidiff)
treeabc6c8568c33b70afd8abc46ae9495e5d862cba1 /korganizer
parentc643664ae97e757afda1012dc998b49e6cc2d575 (diff)
downloadkdepimpi-3ec18dd19fdf4eb7e763b8022f90de83249facfd.zip
kdepimpi-3ec18dd19fdf4eb7e763b8022f90de83249facfd.tar.gz
kdepimpi-3ec18dd19fdf4eb7e763b8022f90de83249facfd.tar.bz2
fixxx
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp16
-rw-r--r--korganizer/calendarview.h1
-rw-r--r--korganizer/kofilterview.cpp6
-rw-r--r--korganizer/kofilterview.h1
4 files changed, 22 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index e31a6e1..28b17a5 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,5160 +1,5176 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy (NoFocus ); 370 setFocusPolicy (NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 mConflictingEvent = 0; 373 mConflictingEvent = 0;
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) );
480 481
482
481 mTodoList->setNavigator( mNavigator ); 483 mTodoList->setNavigator( mNavigator );
482#if 0 484#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 485 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 486 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 487 leftFrameLayout->addWidget(mTodoList, 2 );
486 488
487 } else { 489 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 490 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 491 leftFrameLayout->addWidget(mFilterView );
490 } 492 }
491#endif 493#endif
492 mFilterView->hide(); 494 mFilterView->hide();
493 mCalEditView->hide(); 495 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 496 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 497 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 498 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 499 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 500 rightLayout->addWidget( mRightFrame, 10 );
499 501
500 //mLeftFrame = (QWidget *)leftFrame; 502 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 503 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 505 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 506 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 507 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 508 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 510 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 511 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 512 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 513 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 514 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 515 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 516#endif
515 517
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 518 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 519 SLOT( showDates( const KCal::DateList & ) ) );
518 520
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 521 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 522 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 523
522 524
523 525
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 526 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 527 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 528
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 529 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 530 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 531
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 532 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 533 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 534 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 535 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 536 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 537 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 538 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 539 mNavigator, SLOT( selectNextMonth() ) );
538 540
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 541 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 542 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 543 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 544 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 545 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 546 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 547
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 548 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 549 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 550#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 551 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 552 SLOT( incidenceAdded( Incidence *) ) );
551#endif 553#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 554 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 555
554 connect( this, SIGNAL( configChanged() ), 556 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 557 mDateNavigator, SLOT( updateConfig() ) );
556 558
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 559 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 560 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 561 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 562 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 564 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 565 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 566 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 567 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 568 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 569 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 570 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 571 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 572 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 573 SIGNAL( todoModified( Todo *, int ) ) );
572 574
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 576 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 577 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 578 this, SLOT (cancelIncidence( Incidence * ) ) );
577 579
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 581 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 582 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 583 this, SLOT ( beamIncidence( Incidence * ) ) );
582 584
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 585 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 586 this, SLOT ( todo_unsub( Todo * ) ) );
585 587
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 588 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 589 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 590 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 591 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 592 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 593 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 594
593 595
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 596 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 597 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 598 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 599 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 600
599 601
600 602
601 603
602 604
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 605 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 606 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 607 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 608 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 609 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 610
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 611 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 612
611 mDateFrame = new QVBox(0,0,WType_Popup); 613 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 614 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 615 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 616 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 617 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 618 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 619 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 620
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 621 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 622
621 mEventEditor = mDialogManager->getEventEditor(); 623 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 624 mTodoEditor = mDialogManager->getTodoEditor();
623 625
624 mFlagEditDescription = false; 626 mFlagEditDescription = false;
625 627
626 mSuspendTimer = new QTimer( this ); 628 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 629 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 630 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 631 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 632 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 633 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 634 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 635 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 636 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 637 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 638
637 639
638#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 641//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 642 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 643 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 644#endif
643 mDateNavigator->setCalendar( mCalendar ); 645 mDateNavigator->setCalendar( mCalendar );
644} 646}
645 647
646 648
647CalendarView::~CalendarView() 649CalendarView::~CalendarView()
648{ 650{
649 // kdDebug() << "~CalendarView()" << endl; 651 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 652 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 653 delete mDialogManager;
652 delete mViewManager; 654 delete mViewManager;
653 delete mStorage; 655 delete mStorage;
654 delete mDateFrame ; 656 delete mDateFrame ;
655 delete mEventViewerDialog; 657 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 658 //kdDebug() << "~CalendarView() done" << endl;
657} 659}
658 660
659 661
660void CalendarView::nextConflict( bool all, bool allday ) 662void CalendarView::nextConflict( bool all, bool allday )
661{ 663{
662 static bool block = false; 664 static bool block = false;
663 if ( block ) return; 665 if ( block ) return;
664 block = true; 666 block = true;
665 QPtrList<Event> testlist = mCalendar->events(); 667 QPtrList<Event> testlist = mCalendar->events();
666 Event * test = testlist.first(); 668 Event * test = testlist.first();
667 while ( test ) { 669 while ( test ) {
668 test->setTagged( false ); 670 test->setTagged( false );
669 test = testlist.next(); 671 test = testlist.next();
670 } 672 }
671 QTime st ( 0,0,0); 673 QTime st ( 0,0,0);
672 if ( mViewManager->currentView() == mViewManager->agendaView() ) 674 if ( mViewManager->currentView() == mViewManager->agendaView() )
673 st = mViewManager->agendaView()->agenda()->getEndTime(); 675 st = mViewManager->agendaView()->agenda()->getEndTime();
674 //qDebug("time %s ", st.toString().latin1()); 676 //qDebug("time %s ", st.toString().latin1());
675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 677 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
676 QDateTime conflict; 678 QDateTime conflict;
677 QDateTime retVal; 679 QDateTime retVal;
678 bool found = false; 680 bool found = false;
679 Event * cE = 0; 681 Event * cE = 0;
680 Event * cE2 = 0; 682 Event * cE2 = 0;
681 QPtrList<Event> testlist2 = testlist; 683 QPtrList<Event> testlist2 = testlist;
682 test = testlist.first(); 684 test = testlist.first();
683 bool skip = false; 685 bool skip = false;
684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 686 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm; 687 //QTime tm;
686 //tm.start(); 688 //tm.start();
687 while ( test ) { 689 while ( test ) {
688 qApp->processEvents(); 690 qApp->processEvents();
689 skip = false; 691 skip = false;
690 if ( !all ) skip = ( allday != test->doesFloat() ); 692 if ( !all ) skip = ( allday != test->doesFloat() );
691 if ( !skip ) { 693 if ( !skip ) {
692 if ( found ) 694 if ( found )
693 skip = !test->matchTime( &startDT, &conflict ); 695 skip = !test->matchTime( &startDT, &conflict );
694 else 696 else
695 skip = !test->matchTime( &startDT, 0 ); 697 skip = !test->matchTime( &startDT, 0 );
696 } 698 }
697 if ( !skip ) { 699 if ( !skip ) {
698 Event * test2 = testlist2.first(); 700 Event * test2 = testlist2.first();
699 while ( test2 ) { 701 while ( test2 ) {
700 skip = test2->isTagged(); 702 skip = test2->isTagged();
701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 703 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) { 704 if ( !skip ) {
703 if ( found ) 705 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict ); 706 skip = !test2->matchTime( &startDT, &conflict );
705 else 707 else
706 skip = !test2->matchTime( &startDT, 0 ); 708 skip = !test2->matchTime( &startDT, 0 );
707 } 709 }
708 if ( !skip ) { 710 if ( !skip ) {
709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 711 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
710 //qDebug("overlap "); 712 //qDebug("overlap ");
711 if ( ! found ) { 713 if ( ! found ) {
712 if ( retVal >= startDT ) { 714 if ( retVal >= startDT ) {
713 conflict = retVal; 715 conflict = retVal;
714 cE = test; 716 cE = test;
715 cE2 = test2; 717 cE2 = test2;
716 found = true; 718 found = true;
717 } 719 }
718 } else { 720 } else {
719 if ( retVal >= startDT && retVal < conflict ) { 721 if ( retVal >= startDT && retVal < conflict ) {
720 conflict = retVal; 722 conflict = retVal;
721 cE = test; 723 cE = test;
722 cE2 = test2; 724 cE2 = test2;
723 } 725 }
724 } 726 }
725 } 727 }
726 } 728 }
727 test2 = testlist2.next(); 729 test2 = testlist2.next();
728 } 730 }
729 } 731 }
730 test->setTagged( true ); 732 test->setTagged( true );
731 test = testlist.next(); 733 test = testlist.next();
732 } 734 }
733 //qDebug("Search time : %d", tm.elapsed()); 735 //qDebug("Search time : %d", tm.elapsed());
734 if ( found ) { 736 if ( found ) {
735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 737 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
736 mViewManager->showDayView(); 738 mViewManager->showDayView();
737 mNavigator->slotDaySelect( conflict.date() ); 739 mNavigator->slotDaySelect( conflict.date() );
738 int hour = conflict.time().hour(); 740 int hour = conflict.time().hour();
739 mViewManager->agendaView()->setStartHour( hour ); 741 mViewManager->agendaView()->setStartHour( hour );
740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 742 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
741 block = false; 743 block = false;
742 return; 744 return;
743 } 745 }
744 746
745 topLevelWidget()->setCaption( i18n("No conflict found") ); 747 topLevelWidget()->setCaption( i18n("No conflict found") );
746 //qDebug("No conflict found "); 748 //qDebug("No conflict found ");
747 block = false; 749 block = false;
748 return; 750 return;
749} 751}
750 752
751void CalendarView::conflictAll() 753void CalendarView::conflictAll()
752{ 754{
753 nextConflict ( true, true ); 755 nextConflict ( true, true );
754} 756}
755void CalendarView::conflictAllday() 757void CalendarView::conflictAllday()
756{ 758{
757 nextConflict ( false, true ); 759 nextConflict ( false, true );
758} 760}
759void CalendarView::conflictNotAll() 761void CalendarView::conflictNotAll()
760{ 762{
761 nextConflict ( false, false ); 763 nextConflict ( false, false );
762} 764}
763 765
764void CalendarView::setCalReadOnly( int id, bool readO ) 766void CalendarView::setCalReadOnly( int id, bool readO )
765{ 767{
766 if ( readO ) { 768 if ( readO ) {
767 emit save(); 769 emit save();
768 } 770 }
769 mCalendar->setReadOnly( id, readO ); 771 mCalendar->setReadOnly( id, readO );
770} 772}
771void CalendarView::setScrollBarStep(int val ) 773void CalendarView::setScrollBarStep(int val )
772{ 774{
773#ifdef DESKTOP_VERSION 775#ifdef DESKTOP_VERSION
774 mDateScrollBar->setLineStep ( val ); 776 mDateScrollBar->setLineStep ( val );
775#endif 777#endif
776} 778}
777void CalendarView::scrollBarValue(int val ) 779void CalendarView::scrollBarValue(int val )
778{ 780{
779#ifdef DESKTOP_VERSION 781#ifdef DESKTOP_VERSION
780 if ( QApplication::desktop()->width() < 800 ) return; 782 if ( QApplication::desktop()->width() < 800 ) return;
781 static bool block = false; 783 static bool block = false;
782 if ( block ) return; 784 if ( block ) return;
783 block = true; 785 block = true;
784 int count = mNavigator->selectedDates().count(); 786 int count = mNavigator->selectedDates().count();
785 int day = mNavigator->selectedDates().first().dayOfYear(); 787 int day = mNavigator->selectedDates().first().dayOfYear();
786 int stepdays = val; 788 int stepdays = val;
787 if ( mDateScrollBar->lineStep () <= count ) { 789 if ( mDateScrollBar->lineStep () <= count ) {
788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
789 //qDebug("VAL %d ",val ); 791 //qDebug("VAL %d ",val );
790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 792 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
791 stepdays = day+stepdays; 793 stepdays = day+stepdays;
792 if ( stepdays < 0 ) stepdays = 0; 794 if ( stepdays < 0 ) stepdays = 0;
793 } 795 }
794 if ( stepdays == day ) { 796 if ( stepdays == day ) {
795 block = false; 797 block = false;
796 return; 798 return;
797 } 799 }
798 int year = mNavigator->selectedDates().first().year(); 800 int year = mNavigator->selectedDates().first().year();
799 QDate d ( year,1,1 ); 801 QDate d ( year,1,1 );
800 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 802 mNavigator->selectDates( d.addDays( stepdays-1) , count );
801 block = false; 803 block = false;
802#endif 804#endif
803 805
804} 806}
805void CalendarView::updateView(const QDate &start, const QDate &end) 807void CalendarView::updateView(const QDate &start, const QDate &end)
806{ 808{
807#ifdef DESKTOP_VERSION 809#ifdef DESKTOP_VERSION
808 if ( ! mDateScrollBar->draggingSlider () ) { 810 if ( ! mDateScrollBar->draggingSlider () ) {
809 int dof = start.dayOfYear(); 811 int dof = start.dayOfYear();
810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 812 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
811 if ( dof != mDateScrollBar->value() ) { 813 if ( dof != mDateScrollBar->value() ) {
812 mDateScrollBar->blockSignals( true ); 814 mDateScrollBar->blockSignals( true );
813 mDateScrollBar->setValue( start.dayOfYear()); 815 mDateScrollBar->setValue( start.dayOfYear());
814 mDateScrollBar->blockSignals( false ); 816 mDateScrollBar->blockSignals( false );
815 } 817 }
816 } 818 }
817#endif 819#endif
818 mTodoList->updateView(); 820 mTodoList->updateView();
819 mViewManager->updateView(start, end); 821 mViewManager->updateView(start, end);
820 //mDateNavigator->updateView(); 822 //mDateNavigator->updateView();
821} 823}
822 824
823 825
824 826
825void CalendarView::checkFiles() 827void CalendarView::checkFiles()
826{ 828{
827 QString message; 829 QString message;
828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 830 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
829 KopiCalendarFile * cal = calendars.first(); 831 KopiCalendarFile * cal = calendars.first();
830 while ( cal ) { 832 while ( cal ) {
831 if ( cal->mErrorOnLoad ) { 833 if ( cal->mErrorOnLoad ) {
832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 834 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
833 } 835 }
834 cal = calendars.next(); 836 cal = calendars.next();
835 } 837 }
836 if ( !message.isEmpty() ) { 838 if ( !message.isEmpty() ) {
837 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 839 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
838 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed")); 840 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
839 } 841 }
840 static bool firstTime = true; 842 static bool firstTime = true;
841 if ( firstTime ) { 843 if ( firstTime ) {
842 firstTime = false; 844 firstTime = false;
843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 845 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
844 } 846 }
845} 847}
846void CalendarView::checkAlarms() 848void CalendarView::checkAlarms()
847{ 849{
848 KConfig *config = KOGlobals::config(); 850 KConfig *config = KOGlobals::config();
849 config->setGroup( "AppRun" ); 851 config->setGroup( "AppRun" );
850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 852 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
851 int daysto = dt.daysTo( QDate::currentDate() ); 853 int daysto = dt.daysTo( QDate::currentDate() );
852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 854 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
853 dt = dt.addDays( days ); 855 dt = dt.addDays( days );
854 int secto = dt.secsTo( QDateTime::currentDateTime() ); 856 int secto = dt.secsTo( QDateTime::currentDateTime() );
855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 857 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
856 //qDebug("KO: Reading program stop %d ", secs); 858 //qDebug("KO: Reading program stop %d ", secs);
857 //secs -= ( 3600 * 24*3 ); // debug only 859 //secs -= ( 3600 * 24*3 ); // debug only
858 QDateTime latest = dt.addSecs ( secs ); 860 QDateTime latest = dt.addSecs ( secs );
859 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 861 qDebug("KO: Last termination on %s ", latest.toString().latin1());
860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 862 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
861 QPtrList<Incidence> el = mCalendar->rawIncidences(); 863 QPtrList<Incidence> el = mCalendar->rawIncidences();
862 QPtrList<Incidence> al; 864 QPtrList<Incidence> al;
863 Incidence* inL = el.first(); 865 Incidence* inL = el.first();
864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 866 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 867 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
866 while ( inL ) { 868 while ( inL ) {
867 bool ok = false; 869 bool ok = false;
868 int offset = 0; 870 int offset = 0;
869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 871 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
870 if ( ok ) { 872 if ( ok ) {
871 //qDebug("OK %s",next.toString().latin1()); 873 //qDebug("OK %s",next.toString().latin1());
872 if ( next < cur ) { 874 if ( next < cur ) {
873 al.append( inL ); 875 al.append( inL );
874 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 876 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
875 } 877 }
876 } 878 }
877 inL = el.next(); 879 inL = el.next();
878 } 880 }
879 if ( al.count() ) { 881 if ( al.count() ) {
880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 882 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
881 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 883 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
882 QVBoxLayout* lay = new QVBoxLayout( dia ); 884 QVBoxLayout* lay = new QVBoxLayout( dia );
883 lay->setSpacing( 0 ); 885 lay->setSpacing( 0 );
884 lay->setMargin( 0 ); 886 lay->setMargin( 0 );
885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 887 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 888 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
887 lay->addWidget( matb ); 889 lay->addWidget( matb );
888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 890 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
889 int wid = 210; 891 int wid = 210;
890 int x = QApplication::desktop()->width() - wid - 7; 892 int x = QApplication::desktop()->width() - wid - 7;
891 int y = QApplication::desktop()->height() - wid - 70; 893 int y = QApplication::desktop()->height() - wid - 70;
892 dia->setGeometry ( x,y,wid,wid); 894 dia->setGeometry ( x,y,wid,wid);
893 } else { 895 } else {
894 int si = 220; 896 int si = 220;
895 if ( QApplication::desktop()->width() > 470 ) 897 if ( QApplication::desktop()->width() > 470 )
896 si = 400; 898 si = 400;
897 dia->resize(si,si/2); 899 dia->resize(si,si/2);
898 } 900 }
899 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 901 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
900 dia->show(); 902 dia->show();
901 903
902 } 904 }
903#if 0 905#if 0
904 // for creating timetracker test data 906 // for creating timetracker test data
905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 907 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
906 Todo * nt; 908 Todo * nt;
907 mCalendar->close(); 909 mCalendar->close();
908 { 910 {
909 Todo * root1 = new Todo; 911 Todo * root1 = new Todo;
910 mCalendar->addTodo( root1 ); 912 mCalendar->addTodo( root1 );
911 root1->setSummary( "Project1"); 913 root1->setSummary( "Project1");
912 root1->setPriority( 1 ); 914 root1->setPriority( 1 );
913 root1->setCategories( QString( "Cat_Pro1") ); 915 root1->setCategories( QString( "Cat_Pro1") );
914 root1->setDescription( "This is a test description of a root Project" ); 916 root1->setDescription( "This is a test description of a root Project" );
915 root1->setPercentComplete( 20 ); 917 root1->setPercentComplete( 20 );
916 updateView(); 918 updateView();
917 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 919 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
918 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 920 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
919 921
920 nt = new Todo; 922 nt = new Todo;
921 mCalendar->addTodo( nt ); 923 mCalendar->addTodo( nt );
922 nt->setSummary( "Planning Project1"); 924 nt->setSummary( "Planning Project1");
923 nt->setPriority( 1 ); 925 nt->setPriority( 1 );
924 nt->setDescription( "This is a test description of Planning Project1" ); 926 nt->setDescription( "This is a test description of Planning Project1" );
925 nt->setPercentComplete( 20 ); 927 nt->setPercentComplete( 20 );
926 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 928 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
927 929
928 930
929 Todo * sub1 = nt; 931 Todo * sub1 = nt;
930 sub1->setRelatedTo( root1 ); 932 sub1->setRelatedTo( root1 );
931 933
932 nt = new Todo; 934 nt = new Todo;
933 mCalendar->addTodo( nt ); 935 mCalendar->addTodo( nt );
934 nt->setSummary( "Planning Project1: Lutz"); 936 nt->setSummary( "Planning Project1: Lutz");
935 nt->setPriority( 1 ); 937 nt->setPriority( 1 );
936 nt->setDescription( "This todo counts the actual work of a person on a project" ); 938 nt->setDescription( "This todo counts the actual work of a person on a project" );
937 nt->setPercentComplete( 20 ); 939 nt->setPercentComplete( 20 );
938 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 940 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
939 Todo * workLutz11 = nt; 941 Todo * workLutz11 = nt;
940 workLutz11->setRelatedTo( sub1 ); 942 workLutz11->setRelatedTo( sub1 );
941 943
942 nt = new Todo; 944 nt = new Todo;
943 mCalendar->addTodo( nt ); 945 mCalendar->addTodo( nt );
944 nt->setSummary( "Planning Project1: Norbert"); 946 nt->setSummary( "Planning Project1: Norbert");
945 nt->setPriority( 1 ); 947 nt->setPriority( 1 );
946 nt->setDescription( "This todo counts the actual work of a person on a project" ); 948 nt->setDescription( "This todo counts the actual work of a person on a project" );
947 nt->setPercentComplete( 20 ); 949 nt->setPercentComplete( 20 );
948 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 950 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
949 Todo * workNorbert11 = nt; 951 Todo * workNorbert11 = nt;
950 workNorbert11->setRelatedTo( sub1 ); 952 workNorbert11->setRelatedTo( sub1 );
951 953
952 nt = new Todo; 954 nt = new Todo;
953 mCalendar->addTodo( nt ); 955 mCalendar->addTodo( nt );
954 nt->setSummary( "Work on 1"); 956 nt->setSummary( "Work on 1");
955 nt->setPriority( 1 ); 957 nt->setPriority( 1 );
956 nt->setDescription( "This is a test description of Work Project_1" ); 958 nt->setDescription( "This is a test description of Work Project_1" );
957 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") ); 959 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
958 nt->setPercentComplete( 20 ); 960 nt->setPercentComplete( 20 );
959 961
960 Todo * sub2 = nt; 962 Todo * sub2 = nt;
961 sub2->setRelatedTo( root1 ); 963 sub2->setRelatedTo( root1 );
962 964
963 965
964 nt = new Todo; 966 nt = new Todo;
965 mCalendar->addTodo( nt ); 967 mCalendar->addTodo( nt );
966 nt->setSummary( "Work on 1: Lutz"); 968 nt->setSummary( "Work on 1: Lutz");
967 nt->setPriority( 1 ); 969 nt->setPriority( 1 );
968 nt->setDescription( "This todo counts the actual work of a person on a project" ); 970 nt->setDescription( "This todo counts the actual work of a person on a project" );
969 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") ); 971 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
970 nt->setPercentComplete( 20 ); 972 nt->setPercentComplete( 20 );
971 Todo * workLutz12 = nt; 973 Todo * workLutz12 = nt;
972 workLutz12->setRelatedTo( sub2 ); 974 workLutz12->setRelatedTo( sub2 );
973 975
974 nt = new Todo; 976 nt = new Todo;
975 mCalendar->addTodo( nt ); 977 mCalendar->addTodo( nt );
976 nt->setSummary( "Work on 1: Norbert"); 978 nt->setSummary( "Work on 1: Norbert");
977 nt->setPriority( 1 ); 979 nt->setPriority( 1 );
978 nt->setDescription( "This todo counts the actual work of a person on a project" ); 980 nt->setDescription( "This todo counts the actual work of a person on a project" );
979 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") ); 981 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
980 nt->setPercentComplete( 20 ); 982 nt->setPercentComplete( 20 );
981 Todo * workNorbert12 = nt; 983 Todo * workNorbert12 = nt;
982 workNorbert12->setRelatedTo( sub2 ); 984 workNorbert12->setRelatedTo( sub2 );
983 985
984 int secLenRunning = 7200; 986 int secLenRunning = 7200;
985 int secLenPausing = 3600 * 3; 987 int secLenPausing = 3600 * 3;
986 int dayInterval = 1; 988 int dayInterval = 1;
987 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 989 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
988 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 990 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
989 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 991 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
990 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 992 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
991 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 993 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
992 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 994 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
993 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 995 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
994 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 996 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
995 997
996 } 998 }
997 999
998 { 1000 {
999 Todo * root1 = new Todo; 1001 Todo * root1 = new Todo;
1000 mCalendar->addTodo( root1 ); 1002 mCalendar->addTodo( root1 );
1001 root1->setSummary( "Project2"); 1003 root1->setSummary( "Project2");
1002 root1->setPriority( 1 ); 1004 root1->setPriority( 1 );
1003 root1->setDescription( "This is a test description of a root Project 2" ); 1005 root1->setDescription( "This is a test description of a root Project 2" );
1004 root1->setPercentComplete( 20 ); 1006 root1->setPercentComplete( 20 );
1005 root1->setCategories( QString( "Cat_Pro2") ); 1007 root1->setCategories( QString( "Cat_Pro2") );
1006 updateView(); 1008 updateView();
1007 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1009 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1008 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 1010 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1009 int secLenRunning = 7200; 1011 int secLenRunning = 7200;
1010 int secLenPausing = 3600 * 3; 1012 int secLenPausing = 3600 * 3;
1011 int dayInterval = 1; 1013 int dayInterval = 1;
1012 1014
1013 nt = new Todo; 1015 nt = new Todo;
1014 mCalendar->addTodo( nt ); 1016 mCalendar->addTodo( nt );
1015 nt->setSummary( "Planning Project2"); 1017 nt->setSummary( "Planning Project2");
1016 nt->setPriority( 1 ); 1018 nt->setPriority( 1 );
1017 nt->setDescription( "This is a test description of Planning_Project_2" ); 1019 nt->setDescription( "This is a test description of Planning_Project_2" );
1018 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") ); 1020 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1019 nt->setPercentComplete( 20 ); 1021 nt->setPercentComplete( 20 );
1020 1022
1021 1023
1022 Todo * sub1 = nt; 1024 Todo * sub1 = nt;
1023 sub1->setRelatedTo( root1 ); 1025 sub1->setRelatedTo( root1 );
1024 1026
1025 nt = new Todo; 1027 nt = new Todo;
1026 mCalendar->addTodo( nt ); 1028 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning Project2: Lutz"); 1029 nt->setSummary( "Planning Project2: Lutz");
1028 nt->setPriority( 1 ); 1030 nt->setPriority( 1 );
1029 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1031 nt->setDescription( "This todo counts the actual work of a person on a project" );
1030 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") ); 1032 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1031 nt->setPercentComplete( 20 ); 1033 nt->setPercentComplete( 20 );
1032 Todo * workLutz11 = nt; 1034 Todo * workLutz11 = nt;
1033 workLutz11->setRelatedTo( sub1 ); 1035 workLutz11->setRelatedTo( sub1 );
1034 1036
1035 nt = new Todo; 1037 nt = new Todo;
1036 mCalendar->addTodo( nt ); 1038 mCalendar->addTodo( nt );
1037 nt->setSummary( "Planning Project2: Norbert"); 1039 nt->setSummary( "Planning Project2: Norbert");
1038 nt->setPriority( 1 ); 1040 nt->setPriority( 1 );
1039 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1041 nt->setDescription( "This todo counts the actual work of a person on a project" );
1040 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") ); 1042 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1041 nt->setPercentComplete( 20 ); 1043 nt->setPercentComplete( 20 );
1042 Todo * workNorbert11 = nt; 1044 Todo * workNorbert11 = nt;
1043 workNorbert11->setRelatedTo( sub1 ); 1045 workNorbert11->setRelatedTo( sub1 );
1044 1046
1045 nt = new Todo; 1047 nt = new Todo;
1046 mCalendar->addTodo( nt ); 1048 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2"); 1049 nt->setSummary( "Work on 2");
1048 nt->setPriority( 1 ); 1050 nt->setPriority( 1 );
1049 nt->setDescription( "This is a test description of Work Project_2" ); 1051 nt->setDescription( "This is a test description of Work Project_2" );
1050 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") ); 1052 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1051 nt->setPercentComplete( 20 ); 1053 nt->setPercentComplete( 20 );
1052 1054
1053 Todo * sub2 = nt; 1055 Todo * sub2 = nt;
1054 sub2->setRelatedTo( root1 ); 1056 sub2->setRelatedTo( root1 );
1055 1057
1056 1058
1057 nt = new Todo; 1059 nt = new Todo;
1058 mCalendar->addTodo( nt ); 1060 mCalendar->addTodo( nt );
1059 nt->setSummary( "Work on 2: Lutz"); 1061 nt->setSummary( "Work on 2: Lutz");
1060 nt->setPriority( 1 ); 1062 nt->setPriority( 1 );
1061 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1063 nt->setDescription( "This todo counts the actual work of a person on a project" );
1062 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") ); 1064 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1063 nt->setPercentComplete( 20 ); 1065 nt->setPercentComplete( 20 );
1064 Todo * workLutz12 = nt; 1066 Todo * workLutz12 = nt;
1065 workLutz12->setRelatedTo( sub2 ); 1067 workLutz12->setRelatedTo( sub2 );
1066 1068
1067 nt = new Todo; 1069 nt = new Todo;
1068 mCalendar->addTodo( nt ); 1070 mCalendar->addTodo( nt );
1069 nt->setSummary( "Work on 2: Norbert"); 1071 nt->setSummary( "Work on 2: Norbert");
1070 nt->setPriority( 1 ); 1072 nt->setPriority( 1 );
1071 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1073 nt->setDescription( "This todo counts the actual work of a person on a project" );
1072 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") ); 1074 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1073 nt->setPercentComplete( 20 ); 1075 nt->setPercentComplete( 20 );
1074 Todo * workNorbert12 = nt; 1076 Todo * workNorbert12 = nt;
1075 workNorbert12->setRelatedTo( sub2 ); 1077 workNorbert12->setRelatedTo( sub2 );
1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1078 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1077 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1079 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1080 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1081 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1080 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1082 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1083 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1084 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1083 } 1085 }
1084 updateView(); 1086 updateView();
1085#endif 1087#endif
1086 1088
1087} 1089}
1088void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1090void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1089{ 1091{
1090 static int ccc = 0; 1092 static int ccc = 0;
1091 ++ccc; 1093 ++ccc;
1092 QDateTime t_start = start; 1094 QDateTime t_start = start;
1093 runT->setPriority( 5 ); 1095 runT->setPriority( 5 );
1094 runT->setPercentComplete( 0 ); 1096 runT->setPercentComplete( 0 );
1095 int count = 0; 1097 int count = 0;
1096 int prio = 5; 1098 int prio = 5;
1097 int complete = 0; 1099 int complete = 0;
1098 while ( t_start < end ) { 1100 while ( t_start < end ) {
1099 ++count; 1101 ++count;
1100 if ( count > ccc ) { 1102 if ( count > ccc ) {
1101 count = 0; 1103 count = 0;
1102 --prio; 1104 --prio;
1103 if ( prio == 0 ) prio = 5; 1105 if ( prio == 0 ) prio = 5;
1104 complete += 20; 1106 complete += 20;
1105 if ( complete > 100 ) complete = 0; 1107 if ( complete > 100 ) complete = 0;
1106 runT->setPriority( prio ); 1108 runT->setPriority( prio );
1107 runT->setPercentComplete( complete ); 1109 runT->setPercentComplete( complete );
1108 } 1110 }
1109 runT->setRunning( true ); 1111 runT->setRunning( true );
1110 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1112 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1111 if ( dayInterval ) 1113 if ( dayInterval )
1112 t_start = t_start.addDays( dayInterval ); 1114 t_start = t_start.addDays( dayInterval );
1113 else { 1115 else {
1114 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1116 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1115 } 1117 }
1116 } 1118 }
1117} 1119}
1118 1120
1119void CalendarView::showDay( QDate d ) 1121void CalendarView::showDay( QDate d )
1120{ 1122{
1121 dateNavigator()->blockSignals( true ); 1123 dateNavigator()->blockSignals( true );
1122 dateNavigator()->selectDate( d ); 1124 dateNavigator()->selectDate( d );
1123 dateNavigator()->blockSignals( false ); 1125 dateNavigator()->blockSignals( false );
1124 mViewManager->showDayView(); 1126 mViewManager->showDayView();
1125 //dateNavigator()->selectDate( d ); 1127 //dateNavigator()->selectDate( d );
1126} 1128}
1127void CalendarView::timerAlarm() 1129void CalendarView::timerAlarm()
1128{ 1130{
1129 //qDebug("CalendarView::timerAlarm() "); 1131 //qDebug("CalendarView::timerAlarm() ");
1130 computeAlarm(mAlarmNotification ); 1132 computeAlarm(mAlarmNotification );
1131} 1133}
1132 1134
1133void CalendarView::suspendAlarm() 1135void CalendarView::suspendAlarm()
1134{ 1136{
1135 //qDebug(" CalendarView::suspendAlarm() "); 1137 //qDebug(" CalendarView::suspendAlarm() ");
1136 computeAlarm(mSuspendAlarmNotification ); 1138 computeAlarm(mSuspendAlarmNotification );
1137 1139
1138} 1140}
1139 1141
1140void CalendarView::startAlarm( QString mess , QString filename) 1142void CalendarView::startAlarm( QString mess , QString filename)
1141{ 1143{
1142 1144
1143 topLevelWidget()->showNormal(); 1145 topLevelWidget()->showNormal();
1144 topLevelWidget()->setActiveWindow(); 1146 topLevelWidget()->setActiveWindow();
1145 topLevelWidget()->raise(); 1147 topLevelWidget()->raise();
1146 1148
1147 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1149 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1150 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1149 1151
1150} 1152}
1151 1153
1152void CalendarView::checkNextTimerAlarm() 1154void CalendarView::checkNextTimerAlarm()
1153{ 1155{
1154 mCalendar->checkAlarmForIncidence( 0, true ); 1156 mCalendar->checkAlarmForIncidence( 0, true );
1155} 1157}
1156 1158
1157void CalendarView::computeAlarm( QString msg ) 1159void CalendarView::computeAlarm( QString msg )
1158{ 1160{
1159 1161
1160 QString mess = msg; 1162 QString mess = msg;
1161 QString mAlarmMessage = mess.mid( 9 ); 1163 QString mAlarmMessage = mess.mid( 9 );
1162 QString filename = MainWindow::resourcePath(); 1164 QString filename = MainWindow::resourcePath();
1163 filename += "koalarm.wav"; 1165 filename += "koalarm.wav";
1164 QString tempfilename; 1166 QString tempfilename;
1165 if ( mess.left( 13 ) == "suspend_alarm") { 1167 if ( mess.left( 13 ) == "suspend_alarm") {
1166 bool error = false; 1168 bool error = false;
1167 int len = mess.mid( 13 ).find("+++"); 1169 int len = mess.mid( 13 ).find("+++");
1168 if ( len < 2 ) 1170 if ( len < 2 )
1169 error = true; 1171 error = true;
1170 else { 1172 else {
1171 tempfilename = mess.mid( 13, len ); 1173 tempfilename = mess.mid( 13, len );
1172 if ( !QFile::exists( tempfilename ) ) 1174 if ( !QFile::exists( tempfilename ) )
1173 error = true; 1175 error = true;
1174 } 1176 }
1175 if ( ! error ) { 1177 if ( ! error ) {
1176 filename = tempfilename; 1178 filename = tempfilename;
1177 } 1179 }
1178 mAlarmMessage = mess.mid( 13+len+3 ); 1180 mAlarmMessage = mess.mid( 13+len+3 );
1179 //qDebug("suspend file %s ",tempfilename.latin1() ); 1181 //qDebug("suspend file %s ",tempfilename.latin1() );
1180 startAlarm( mAlarmMessage, filename); 1182 startAlarm( mAlarmMessage, filename);
1181 return; 1183 return;
1182 } 1184 }
1183 if ( mess.left( 11 ) == "timer_alarm") { 1185 if ( mess.left( 11 ) == "timer_alarm") {
1184 //mTimerTime = 0; 1186 //mTimerTime = 0;
1185 startAlarm( mess.mid( 11 ), filename ); 1187 startAlarm( mess.mid( 11 ), filename );
1186 return; 1188 return;
1187 } 1189 }
1188 if ( mess.left( 10 ) == "proc_alarm") { 1190 if ( mess.left( 10 ) == "proc_alarm") {
1189 bool error = false; 1191 bool error = false;
1190 int len = mess.mid( 10 ).find("+++"); 1192 int len = mess.mid( 10 ).find("+++");
1191 if ( len < 2 ) 1193 if ( len < 2 )
1192 error = true; 1194 error = true;
1193 else { 1195 else {
1194 tempfilename = mess.mid( 10, len ); 1196 tempfilename = mess.mid( 10, len );
1195 if ( !QFile::exists( tempfilename ) ) 1197 if ( !QFile::exists( tempfilename ) )
1196 error = true; 1198 error = true;
1197 } 1199 }
1198 if ( error ) { 1200 if ( error ) {
1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1201 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1200 mAlarmMessage += mess.mid( 10+len+3+9 ); 1202 mAlarmMessage += mess.mid( 10+len+3+9 );
1201 } else { 1203 } else {
1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1204 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1203 //qDebug("-----system command %s ",tempfilename.latin1() ); 1205 //qDebug("-----system command %s ",tempfilename.latin1() );
1204#ifndef _WIN32_ 1206#ifndef _WIN32_
1205 if ( vfork () == 0 ) { 1207 if ( vfork () == 0 ) {
1206 execl ( tempfilename.latin1(), 0 ); 1208 execl ( tempfilename.latin1(), 0 );
1207 return; 1209 return;
1208 } 1210 }
1209#else 1211#else
1210 QProcess* p = new QProcess(); 1212 QProcess* p = new QProcess();
1211 p->addArgument( tempfilename.latin1() ); 1213 p->addArgument( tempfilename.latin1() );
1212 p->start(); 1214 p->start();
1213 return; 1215 return;
1214#endif 1216#endif
1215 1217
1216 return; 1218 return;
1217 } 1219 }
1218 1220
1219 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1221 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1220 } 1222 }
1221 if ( mess.left( 11 ) == "audio_alarm") { 1223 if ( mess.left( 11 ) == "audio_alarm") {
1222 bool error = false; 1224 bool error = false;
1223 int len = mess.mid( 11 ).find("+++"); 1225 int len = mess.mid( 11 ).find("+++");
1224 if ( len < 2 ) 1226 if ( len < 2 )
1225 error = true; 1227 error = true;
1226 else { 1228 else {
1227 tempfilename = mess.mid( 11, len ); 1229 tempfilename = mess.mid( 11, len );
1228 if ( !QFile::exists( tempfilename ) ) 1230 if ( !QFile::exists( tempfilename ) )
1229 error = true; 1231 error = true;
1230 } 1232 }
1231 if ( ! error ) { 1233 if ( ! error ) {
1232 filename = tempfilename; 1234 filename = tempfilename;
1233 } 1235 }
1234 mAlarmMessage = mess.mid( 11+len+3+9 ); 1236 mAlarmMessage = mess.mid( 11+len+3+9 );
1235 //qDebug("audio file command %s ",tempfilename.latin1() ); 1237 //qDebug("audio file command %s ",tempfilename.latin1() );
1236 } 1238 }
1237 if ( mess.left( 9 ) == "cal_alarm") { 1239 if ( mess.left( 9 ) == "cal_alarm") {
1238 mAlarmMessage = mess.mid( 9 ) ; 1240 mAlarmMessage = mess.mid( 9 ) ;
1239 } 1241 }
1240 1242
1241 startAlarm( mAlarmMessage, filename ); 1243 startAlarm( mAlarmMessage, filename );
1242 1244
1243 1245
1244} 1246}
1245 1247
1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1248void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1247{ 1249{
1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1250 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1249 1251
1250 mSuspendAlarmNotification = noti; 1252 mSuspendAlarmNotification = noti;
1251 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1253 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1252 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1254 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1253 mSuspendTimer->start( ms , true ); 1255 mSuspendTimer->start( ms , true );
1254#ifdef DESKTOP_VERSION 1256#ifdef DESKTOP_VERSION
1255 if ( QApplication::desktop()->width() < 1024 ) { 1257 if ( QApplication::desktop()->width() < 1024 ) {
1256 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1258 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1257 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() ); 1259 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() );
1258 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm"; 1260 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm";
1259 QFile file( fn ); 1261 QFile file( fn );
1260 if (!file.open( IO_WriteOnly ) ) { 1262 if (!file.open( IO_WriteOnly ) ) {
1261 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1263 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1262 } else { 1264 } else {
1263 QTextStream ts( &file ); 1265 QTextStream ts( &file );
1264 ts << mess; 1266 ts << mess;
1265 file.close(); 1267 file.close();
1266 } 1268 }
1267 } 1269 }
1268#endif 1270#endif
1269 1271
1270} 1272}
1271 1273
1272void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1274void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1273{ 1275{
1274 mNextAlarmDateTime = qdt; 1276 mNextAlarmDateTime = qdt;
1275 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1277 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1276 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1278 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1277#ifndef DESKTOP_VERSION 1279#ifndef DESKTOP_VERSION
1278 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1280 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1279#endif 1281#endif
1280 return; 1282 return;
1281 } 1283 }
1282#ifdef DESKTOP_VERSION 1284#ifdef DESKTOP_VERSION
1283 if ( QApplication::desktop()->width() < 1024 ) { 1285 if ( QApplication::desktop()->width() < 1024 ) {
1284 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1286 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1285 //qDebug("nextalarm = \n%s ",mess.latin1() ); 1287 //qDebug("nextalarm = \n%s ",mess.latin1() );
1286 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm"; 1288 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm";
1287 QFile file( fn ); 1289 QFile file( fn );
1288 if (!file.open( IO_WriteOnly ) ) { 1290 if (!file.open( IO_WriteOnly ) ) {
1289 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1291 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1290 } else { 1292 } else {
1291 QTextStream ts( &file ); 1293 QTextStream ts( &file );
1292 ts << mess; 1294 ts << mess;
1293 file.close(); 1295 file.close();
1294 } 1296 }
1295 } 1297 }
1296#endif 1298#endif
1297 int maxSec; 1299 int maxSec;
1298 //maxSec = 5; //testing only 1300 //maxSec = 5; //testing only
1299 maxSec = 86400+3600; // one day+1hour 1301 maxSec = 86400+3600; // one day+1hour
1300 mAlarmNotification = noti; 1302 mAlarmNotification = noti;
1301 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1303 int sec = QDateTime::currentDateTime().secsTo( qdt );
1302 if ( sec > maxSec ) { 1304 if ( sec > maxSec ) {
1303 mRecheckAlarmTimer->start( maxSec * 1000 ); 1305 mRecheckAlarmTimer->start( maxSec * 1000 );
1304 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1306 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1305 return; 1307 return;
1306 } else { 1308 } else {
1307 mRecheckAlarmTimer->stop(); 1309 mRecheckAlarmTimer->stop();
1308 } 1310 }
1309 //qDebug("Alarm timer started with secs: %d ", sec); 1311 //qDebug("Alarm timer started with secs: %d ", sec);
1310 mAlarmTimer->start( sec * 1000 , true ); 1312 mAlarmTimer->start( sec * 1000 , true );
1311 1313
1312} 1314}
1313// called by mRecheckAlarmTimer to get next alarm 1315// called by mRecheckAlarmTimer to get next alarm
1314// we need this, because a QTimer has only a max range of 25 days 1316// we need this, because a QTimer has only a max range of 25 days
1315void CalendarView::recheckTimerAlarm() 1317void CalendarView::recheckTimerAlarm()
1316{ 1318{
1317 mAlarmTimer->stop(); 1319 mAlarmTimer->stop();
1318 mRecheckAlarmTimer->stop(); 1320 mRecheckAlarmTimer->stop();
1319 mCalendar->checkAlarmForIncidence( 0, true ); 1321 mCalendar->checkAlarmForIncidence( 0, true );
1320} 1322}
1321#ifndef DESKTOP_VERSION 1323#ifndef DESKTOP_VERSION
1322void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1324void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1323#else 1325#else
1324void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1326void CalendarView::removeAlarm(const QDateTime &, const QString & )
1325#endif 1327#endif
1326{ 1328{
1327 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1329 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1328 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1330 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1329#ifndef DESKTOP_VERSION 1331#ifndef DESKTOP_VERSION
1330 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1332 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1331#endif 1333#endif
1332 return; 1334 return;
1333 } 1335 }
1334 mAlarmTimer->stop(); 1336 mAlarmTimer->stop();
1335} 1337}
1336void CalendarView::selectWeekNum ( int num ) 1338void CalendarView::selectWeekNum ( int num )
1337{ 1339{
1338 dateNavigator()->blockSignals( true ); 1340 dateNavigator()->blockSignals( true );
1339 dateNavigator()->selectWeek( num ); 1341 dateNavigator()->selectWeek( num );
1340 dateNavigator()->blockSignals( false ); 1342 dateNavigator()->blockSignals( false );
1341 mViewManager->showWeekView(); 1343 mViewManager->showWeekView();
1342} 1344}
1343KOViewManager *CalendarView::viewManager() 1345KOViewManager *CalendarView::viewManager()
1344{ 1346{
1345 return mViewManager; 1347 return mViewManager;
1346} 1348}
1347 1349
1348KODialogManager *CalendarView::dialogManager() 1350KODialogManager *CalendarView::dialogManager()
1349{ 1351{
1350 return mDialogManager; 1352 return mDialogManager;
1351} 1353}
1352 1354
1353QDate CalendarView::startDate() 1355QDate CalendarView::startDate()
1354{ 1356{
1355 DateList dates = mNavigator->selectedDates(); 1357 DateList dates = mNavigator->selectedDates();
1356 1358
1357 return dates.first(); 1359 return dates.first();
1358} 1360}
1359 1361
1360QDate CalendarView::endDate() 1362QDate CalendarView::endDate()
1361{ 1363{
1362 DateList dates = mNavigator->selectedDates(); 1364 DateList dates = mNavigator->selectedDates();
1363 1365
1364 return dates.last(); 1366 return dates.last();
1365} 1367}
1366 1368
1367 1369
1368void CalendarView::createPrinter() 1370void CalendarView::createPrinter()
1369{ 1371{
1370#ifndef KORG_NOPRINTER 1372#ifndef KORG_NOPRINTER
1371 if (!mCalPrinter) { 1373 if (!mCalPrinter) {
1372 mCalPrinter = new CalPrinter(this, mCalendar); 1374 mCalPrinter = new CalPrinter(this, mCalendar);
1373 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1375 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1374 } 1376 }
1375#endif 1377#endif
1376} 1378}
1377 1379
1378 1380
1379//KOPrefs::instance()->mWriteBackFile 1381//KOPrefs::instance()->mWriteBackFile
1380//KOPrefs::instance()->mWriteBackExistingOnly 1382//KOPrefs::instance()->mWriteBackExistingOnly
1381 1383
1382// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1384// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1383// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1385// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1384// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1386// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1385// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1387// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1386// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1388// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1387// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1389// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1388 1390
1389int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1391int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1390{ 1392{
1391 1393
1392 // 0 equal 1394 // 0 equal
1393 // 1 take local 1395 // 1 take local
1394 // 2 take remote 1396 // 2 take remote
1395 // 3 cancel 1397 // 3 cancel
1396 QDateTime lastSync = mLastCalendarSync; 1398 QDateTime lastSync = mLastCalendarSync;
1397 QDateTime localMod = local->lastModified(); 1399 QDateTime localMod = local->lastModified();
1398 QDateTime remoteMod = remote->lastModified(); 1400 QDateTime remoteMod = remote->lastModified();
1399 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1401 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1400 bool remCh, locCh; 1402 bool remCh, locCh;
1401 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1403 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1402 //if ( remCh ) 1404 //if ( remCh )
1403 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1405 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1404 locCh = ( localMod > mLastCalendarSync ); 1406 locCh = ( localMod > mLastCalendarSync );
1405 if ( !remCh && ! locCh ) { 1407 if ( !remCh && ! locCh ) {
1406 //qDebug("both not changed "); 1408 //qDebug("both not changed ");
1407 lastSync = localMod.addDays(1); 1409 lastSync = localMod.addDays(1);
1408 if ( mode <= SYNC_PREF_ASK ) 1410 if ( mode <= SYNC_PREF_ASK )
1409 return 0; 1411 return 0;
1410 } else { 1412 } else {
1411 if ( locCh ) { 1413 if ( locCh ) {
1412 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1414 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1413 lastSync = localMod.addDays( -1 ); 1415 lastSync = localMod.addDays( -1 );
1414 if ( !remCh ) 1416 if ( !remCh )
1415 remoteMod = ( lastSync.addDays( -1 ) ); 1417 remoteMod = ( lastSync.addDays( -1 ) );
1416 } else { 1418 } else {
1417 //qDebug(" not loc changed "); 1419 //qDebug(" not loc changed ");
1418 lastSync = localMod.addDays( 1 ); 1420 lastSync = localMod.addDays( 1 );
1419 if ( remCh ) 1421 if ( remCh )
1420 remoteMod =( lastSync.addDays( 1 ) ); 1422 remoteMod =( lastSync.addDays( 1 ) );
1421 1423
1422 } 1424 }
1423 } 1425 }
1424 full = true; 1426 full = true;
1425 if ( mode < SYNC_PREF_ASK ) 1427 if ( mode < SYNC_PREF_ASK )
1426 mode = SYNC_PREF_ASK; 1428 mode = SYNC_PREF_ASK;
1427 } else { 1429 } else {
1428 if ( localMod == remoteMod ) 1430 if ( localMod == remoteMod )
1429 // if ( local->revision() == remote->revision() ) 1431 // if ( local->revision() == remote->revision() )
1430 return 0; 1432 return 0;
1431 1433
1432 } 1434 }
1433 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1435 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1434 1436
1435 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1437 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1436 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1438 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1437 //full = true; //debug only 1439 //full = true; //debug only
1438 if ( full ) { 1440 if ( full ) {
1439 bool equ = false; 1441 bool equ = false;
1440 if ( local->typeID() == eventID ) { 1442 if ( local->typeID() == eventID ) {
1441 equ = (*((Event*) local) == *((Event*) remote)); 1443 equ = (*((Event*) local) == *((Event*) remote));
1442 } 1444 }
1443 else if ( local->typeID() == todoID ) 1445 else if ( local->typeID() == todoID )
1444 equ = (*((Todo*) local) == (*(Todo*) remote)); 1446 equ = (*((Todo*) local) == (*(Todo*) remote));
1445 else if ( local->typeID() == journalID ) 1447 else if ( local->typeID() == journalID )
1446 equ = (*((Journal*) local) == *((Journal*) remote)); 1448 equ = (*((Journal*) local) == *((Journal*) remote));
1447 if ( equ ) { 1449 if ( equ ) {
1448 //qDebug("equal "); 1450 //qDebug("equal ");
1449 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1451 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1450 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1452 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1451 } 1453 }
1452 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1454 if ( mode < SYNC_PREF_FORCE_LOCAL )
1453 return 0; 1455 return 0;
1454 1456
1455 }//else //debug only 1457 }//else //debug only
1456 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1458 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1457 } 1459 }
1458 int result; 1460 int result;
1459 bool localIsNew; 1461 bool localIsNew;
1460 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1462 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1461 1463
1462 1464
1463 // ************************************************ 1465 // ************************************************
1464 // ************************************************ 1466 // ************************************************
1465 // ************************************************ 1467 // ************************************************
1466 // We may have that lastSync > remoteMod AND lastSync > localMod 1468 // We may have that lastSync > remoteMod AND lastSync > localMod
1467 // BUT remoteMod != localMod 1469 // BUT remoteMod != localMod
1468 1470
1469 1471
1470 if ( full && mode < SYNC_PREF_NEWEST ) 1472 if ( full && mode < SYNC_PREF_NEWEST )
1471 mode = SYNC_PREF_ASK; 1473 mode = SYNC_PREF_ASK;
1472 1474
1473 switch( mode ) { 1475 switch( mode ) {
1474 case SYNC_PREF_LOCAL: 1476 case SYNC_PREF_LOCAL:
1475 if ( lastSync > remoteMod ) 1477 if ( lastSync > remoteMod )
1476 return 1; 1478 return 1;
1477 if ( lastSync > localMod ) 1479 if ( lastSync > localMod )
1478 return 2; 1480 return 2;
1479 return 1; 1481 return 1;
1480 break; 1482 break;
1481 case SYNC_PREF_REMOTE: 1483 case SYNC_PREF_REMOTE:
1482 if ( lastSync > localMod ) 1484 if ( lastSync > localMod )
1483 return 2; 1485 return 2;
1484 if ( lastSync > remoteMod ) 1486 if ( lastSync > remoteMod )
1485 return 1; 1487 return 1;
1486 return 2; 1488 return 2;
1487 break; 1489 break;
1488 case SYNC_PREF_NEWEST: 1490 case SYNC_PREF_NEWEST:
1489 if ( localMod >= remoteMod ) 1491 if ( localMod >= remoteMod )
1490 return 1; 1492 return 1;
1491 else 1493 else
1492 return 2; 1494 return 2;
1493 break; 1495 break;
1494 case SYNC_PREF_ASK: 1496 case SYNC_PREF_ASK:
1495 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1497 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1496 if ( lastSync > remoteMod && lastSync > localMod) 1498 if ( lastSync > remoteMod && lastSync > localMod)
1497 return 0; 1499 return 0;
1498 if ( lastSync > remoteMod ) 1500 if ( lastSync > remoteMod )
1499 return 1; 1501 return 1;
1500 if ( lastSync > localMod ) 1502 if ( lastSync > localMod )
1501 return 2; 1503 return 2;
1502 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() );
1503 localIsNew = localMod >= remoteMod; 1505 localIsNew = localMod >= remoteMod;
1504 if ( localIsNew ) 1506 if ( localIsNew )
1505 getEventViewerDialog()->setColorMode( 1 ); 1507 getEventViewerDialog()->setColorMode( 1 );
1506 else 1508 else
1507 getEventViewerDialog()->setColorMode( 2 ); 1509 getEventViewerDialog()->setColorMode( 2 );
1508 getEventViewerDialog()->setIncidence(local); 1510 getEventViewerDialog()->setIncidence(local);
1509 if ( localIsNew ) 1511 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 2 ); 1512 getEventViewerDialog()->setColorMode( 2 );
1511 else 1513 else
1512 getEventViewerDialog()->setColorMode( 1 ); 1514 getEventViewerDialog()->setColorMode( 1 );
1513 getEventViewerDialog()->addIncidence(remote); 1515 getEventViewerDialog()->addIncidence(remote);
1514 getEventViewerDialog()->setColorMode( 0 ); 1516 getEventViewerDialog()->setColorMode( 0 );
1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1517 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1518 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1517 getEventViewerDialog()->showMe(); 1519 getEventViewerDialog()->showMe();
1518 result = getEventViewerDialog()->executeS( localIsNew ); 1520 result = getEventViewerDialog()->executeS( localIsNew );
1519 return result; 1521 return result;
1520 1522
1521 break; 1523 break;
1522 case SYNC_PREF_FORCE_LOCAL: 1524 case SYNC_PREF_FORCE_LOCAL:
1523 return 1; 1525 return 1;
1524 break; 1526 break;
1525 case SYNC_PREF_FORCE_REMOTE: 1527 case SYNC_PREF_FORCE_REMOTE:
1526 return 2; 1528 return 2;
1527 break; 1529 break;
1528 1530
1529 default: 1531 default:
1530 // SYNC_PREF_TAKE_BOTH not implemented 1532 // SYNC_PREF_TAKE_BOTH not implemented
1531 break; 1533 break;
1532 } 1534 }
1533 return 0; 1535 return 0;
1534} 1536}
1535Event* CalendarView::getLastSyncEvent() 1537Event* CalendarView::getLastSyncEvent()
1536{ 1538{
1537 Event* lse; 1539 Event* lse;
1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1540 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1541 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1540 if (!lse) { 1542 if (!lse) {
1541 lse = new Event(); 1543 lse = new Event();
1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1544 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1543 QString sum = ""; 1545 QString sum = "";
1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1546 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1545 sum = "E: "; 1547 sum = "E: ";
1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1548 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1547 lse->setDtStart( mLastCalendarSync ); 1549 lse->setDtStart( mLastCalendarSync );
1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1550 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1549 lse->setCategories( i18n("SyncEvent") ); 1551 lse->setCategories( i18n("SyncEvent") );
1550 lse->setReadOnly( true ); 1552 lse->setReadOnly( true );
1551 mCalendar->addEvent( lse ); 1553 mCalendar->addEvent( lse );
1552 } 1554 }
1553 1555
1554 return lse; 1556 return lse;
1555 1557
1556} 1558}
1557 1559
1558// we check, if the to delete event has a id for a profile 1560// we check, if the to delete event has a id for a profile
1559// if yes, we set this id in the profile to delete 1561// if yes, we set this id in the profile to delete
1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1562void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1561{ 1563{
1562 if ( lastSync.count() == 0 ) { 1564 if ( lastSync.count() == 0 ) {
1563 //qDebug(" lastSync.count() == 0"); 1565 //qDebug(" lastSync.count() == 0");
1564 return; 1566 return;
1565 } 1567 }
1566 if ( toDelete->typeID() == journalID ) 1568 if ( toDelete->typeID() == journalID )
1567 return; 1569 return;
1568 1570
1569 Event* eve = lastSync.first(); 1571 Event* eve = lastSync.first();
1570 1572
1571 while ( eve ) { 1573 while ( eve ) {
1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1574 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1573 if ( !id.isEmpty() ) { 1575 if ( !id.isEmpty() ) {
1574 QString des = eve->description(); 1576 QString des = eve->description();
1575 QString pref = "e"; 1577 QString pref = "e";
1576 if ( toDelete->typeID() == todoID ) 1578 if ( toDelete->typeID() == todoID )
1577 pref = "t"; 1579 pref = "t";
1578 des += pref+ id + ","; 1580 des += pref+ id + ",";
1579 eve->setReadOnly( false ); 1581 eve->setReadOnly( false );
1580 eve->setDescription( des ); 1582 eve->setDescription( des );
1581 //qDebug("setdes %s ", des.latin1()); 1583 //qDebug("setdes %s ", des.latin1());
1582 eve->setReadOnly( true ); 1584 eve->setReadOnly( true );
1583 } 1585 }
1584 eve = lastSync.next(); 1586 eve = lastSync.next();
1585 } 1587 }
1586 1588
1587} 1589}
1588void CalendarView::checkExternalId( Incidence * inc ) 1590void CalendarView::checkExternalId( Incidence * inc )
1589{ 1591{
1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1592 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1591 checkExternSyncEvent( lastSync, inc ); 1593 checkExternSyncEvent( lastSync, inc );
1592 1594
1593} 1595}
1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1596bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1595{ 1597{
1596 bool syncOK = true; 1598 bool syncOK = true;
1597 int addedEvent = 0; 1599 int addedEvent = 0;
1598 int addedEventR = 0; 1600 int addedEventR = 0;
1599 int deletedEventR = 0; 1601 int deletedEventR = 0;
1600 int deletedEventL = 0; 1602 int deletedEventL = 0;
1601 int changedLocal = 0; 1603 int changedLocal = 0;
1602 int changedRemote = 0; 1604 int changedRemote = 0;
1603 int filteredIN = 0; 1605 int filteredIN = 0;
1604 int filteredOUT = 0; 1606 int filteredOUT = 0;
1605 //QPtrList<Event> el = local->rawEvents(); 1607 //QPtrList<Event> el = local->rawEvents();
1606 Event* eventR; 1608 Event* eventR;
1607 QString uid; 1609 QString uid;
1608 int take; 1610 int take;
1609 Event* eventRSync; 1611 Event* eventRSync;
1610 Event* eventLSync; 1612 Event* eventLSync;
1611 clearAllViews(); 1613 clearAllViews();
1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1614 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1615 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1614 bool fullDateRange = false; 1616 bool fullDateRange = false;
1615 local->resetTempSyncStat(); 1617 local->resetTempSyncStat();
1616 mLastCalendarSync = QDateTime::currentDateTime(); 1618 mLastCalendarSync = QDateTime::currentDateTime();
1617 if ( mSyncManager->syncWithDesktop() ) { 1619 if ( mSyncManager->syncWithDesktop() ) {
1618 remote->resetPilotStat(1); 1620 remote->resetPilotStat(1);
1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1621 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1622 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1623 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1622 } else { 1624 } else {
1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1625 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1624 } 1626 }
1625 } 1627 }
1626 QDateTime modifiedCalendar = mLastCalendarSync; 1628 QDateTime modifiedCalendar = mLastCalendarSync;
1627 eventLSync = getLastSyncEvent(); 1629 eventLSync = getLastSyncEvent();
1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1630 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1629 if ( eventR ) { 1631 if ( eventR ) {
1630 qDebug("last-syncEvent on remote found "); 1632 qDebug("last-syncEvent on remote found ");
1631 eventRSync = (Event*) eventR->clone(); 1633 eventRSync = (Event*) eventR->clone();
1632 remote->deleteEvent(eventR ); 1634 remote->deleteEvent(eventR );
1633 1635
1634 } else { 1636 } else {
1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1637 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1636 eventRSync = (Event*)eventLSync->clone(); 1638 eventRSync = (Event*)eventLSync->clone();
1637 } else { 1639 } else {
1638 fullDateRange = true; 1640 fullDateRange = true;
1639 eventRSync = new Event(); 1641 eventRSync = new Event();
1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1642 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1643 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1642 eventRSync->setDtStart( mLastCalendarSync ); 1644 eventRSync->setDtStart( mLastCalendarSync );
1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1645 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1644 eventRSync->setCategories( i18n("SyncEvent") ); 1646 eventRSync->setCategories( i18n("SyncEvent") );
1645 } 1647 }
1646 } 1648 }
1647 if ( eventLSync->dtStart() == mLastCalendarSync ) 1649 if ( eventLSync->dtStart() == mLastCalendarSync )
1648 fullDateRange = true; 1650 fullDateRange = true;
1649 1651
1650 if ( ! fullDateRange ) { 1652 if ( ! fullDateRange ) {
1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1653 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1652 1654
1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1655 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1656 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1655 fullDateRange = true; 1657 fullDateRange = true;
1656 } 1658 }
1657 } 1659 }
1658 if ( mSyncManager->syncWithDesktop() ) { 1660 if ( mSyncManager->syncWithDesktop() ) {
1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1661 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1660 } 1662 }
1661 if ( fullDateRange ) 1663 if ( fullDateRange )
1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1664 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1663 else 1665 else
1664 mLastCalendarSync = eventLSync->dtStart(); 1666 mLastCalendarSync = eventLSync->dtStart();
1665 // for resyncing if own file has changed 1667 // for resyncing if own file has changed
1666 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1668 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1667 mLastCalendarSync = loadedFileVersion; 1669 mLastCalendarSync = loadedFileVersion;
1668 //qDebug("setting mLastCalendarSync "); 1670 //qDebug("setting mLastCalendarSync ");
1669 } 1671 }
1670 //qDebug("*************************** "); 1672 //qDebug("*************************** ");
1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1673 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1672 QPtrList<Incidence> er = remote->rawIncidences(); 1674 QPtrList<Incidence> er = remote->rawIncidences();
1673 Incidence* inR = er.first(); 1675 Incidence* inR = er.first();
1674 Incidence* inL; 1676 Incidence* inL;
1675 QProgressBar bar( er.count(),0 ); 1677 QProgressBar bar( er.count(),0 );
1676 bar.setCaption (i18n("Syncing - close to abort!") ); 1678 bar.setCaption (i18n("Syncing - close to abort!") );
1677 1679
1678 // ************** setting up filter ************* 1680 // ************** setting up filter *************
1679 CalFilter *filterIN = 0; 1681 CalFilter *filterIN = 0;
1680 CalFilter *filterOUT = 0; 1682 CalFilter *filterOUT = 0;
1681 CalFilter *filter = mFilters.first(); 1683 CalFilter *filter = mFilters.first();
1682 while(filter) { 1684 while(filter) {
1683 if ( filter->name() == mSyncManager->mFilterInCal ) 1685 if ( filter->name() == mSyncManager->mFilterInCal )
1684 filterIN = filter; 1686 filterIN = filter;
1685 if ( filter->name() == mSyncManager->mFilterOutCal ) 1687 if ( filter->name() == mSyncManager->mFilterOutCal )
1686 filterOUT = filter; 1688 filterOUT = filter;
1687 filter = mFilters.next(); 1689 filter = mFilters.next();
1688 } 1690 }
1689 int w = 300; 1691 int w = 300;
1690 if ( QApplication::desktop()->width() < 320 ) 1692 if ( QApplication::desktop()->width() < 320 )
1691 w = 220; 1693 w = 220;
1692 int h = bar.sizeHint().height() ; 1694 int h = bar.sizeHint().height() ;
1693 int dw = QApplication::desktop()->width(); 1695 int dw = QApplication::desktop()->width();
1694 int dh = QApplication::desktop()->height(); 1696 int dh = QApplication::desktop()->height();
1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1697 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1696 bar.show(); 1698 bar.show();
1697 int modulo = (er.count()/10)+1; 1699 int modulo = (er.count()/10)+1;
1698 int incCounter = 0; 1700 int incCounter = 0;
1699 while ( inR ) { 1701 while ( inR ) {
1700 if ( ! bar.isVisible() ) 1702 if ( ! bar.isVisible() )
1701 return false; 1703 return false;
1702 if ( incCounter % modulo == 0 ) 1704 if ( incCounter % modulo == 0 )
1703 bar.setProgress( incCounter ); 1705 bar.setProgress( incCounter );
1704 ++incCounter; 1706 ++incCounter;
1705 uid = inR->uid(); 1707 uid = inR->uid();
1706 bool skipIncidence = false; 1708 bool skipIncidence = false;
1707 if ( uid.left(15) == QString("last-syncEvent-") ) 1709 if ( uid.left(15) == QString("last-syncEvent-") )
1708 skipIncidence = true; 1710 skipIncidence = true;
1709 QString idS; 1711 QString idS;
1710 qApp->processEvents(); 1712 qApp->processEvents();
1711 if ( !skipIncidence ) { 1713 if ( !skipIncidence ) {
1712 inL = local->incidenceForUid( uid , false ); 1714 inL = local->incidenceForUid( uid , false );
1713 if ( inL ) { // maybe conflict - same uid in both calendars 1715 if ( inL ) { // maybe conflict - same uid in both calendars
1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1716 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1715 //qDebug("take %d %s ", take, inL->summary().latin1()); 1717 //qDebug("take %d %s ", take, inL->summary().latin1());
1716 if ( take == 3 ) 1718 if ( take == 3 )
1717 return false; 1719 return false;
1718 if ( take == 1 ) {// take local ********************** 1720 if ( take == 1 ) {// take local **********************
1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1721 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1722 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1721 else 1723 else
1722 idS = inR->IDStr(); 1724 idS = inR->IDStr();
1723 int calID = inR->calID(); 1725 int calID = inR->calID();
1724 remote->deleteIncidence( inR ); 1726 remote->deleteIncidence( inR );
1725 inR = inL->clone(); 1727 inR = inL->clone();
1726 inR->setCalID( calID ); 1728 inR->setCalID( calID );
1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1729 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1730 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1729 inR->setIDStr( idS ); 1731 inR->setIDStr( idS );
1730 remote->addIncidence( inR ); 1732 remote->addIncidence( inR );
1731 if ( mSyncManager->syncWithDesktop() ) 1733 if ( mSyncManager->syncWithDesktop() )
1732 inR->setPilotId( 2 ); 1734 inR->setPilotId( 2 );
1733 ++changedRemote; 1735 ++changedRemote;
1734 } else {// take remote ********************** 1736 } else {// take remote **********************
1735 if ( !inL->isReadOnly() ) { 1737 if ( !inL->isReadOnly() ) {
1736 idS = inL->IDStr(); 1738 idS = inL->IDStr();
1737 int pid = inL->pilotId(); 1739 int pid = inL->pilotId();
1738 int calID = inL->calID(); 1740 int calID = inL->calID();
1739 local->deleteIncidence( inL ); 1741 local->deleteIncidence( inL );
1740 inL = inR->clone(); 1742 inL = inR->clone();
1741 inL->setCalID( calID ); 1743 inL->setCalID( calID );
1742 if ( mSyncManager->syncWithDesktop() ) 1744 if ( mSyncManager->syncWithDesktop() )
1743 inL->setPilotId( pid ); 1745 inL->setPilotId( pid );
1744 inL->setIDStr( idS ); 1746 inL->setIDStr( idS );
1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1747 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1748 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1749 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1748 } 1750 }
1749 local->addIncidence( inL ); 1751 local->addIncidence( inL );
1750 ++changedLocal; 1752 ++changedLocal;
1751 } 1753 }
1752 } 1754 }
1753 } 1755 }
1754 } else { // no conflict ********** add or delete remote 1756 } else { // no conflict ********** add or delete remote
1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1757 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1758 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1757 QString des = eventLSync->description(); 1759 QString des = eventLSync->description();
1758 QString pref = "e"; 1760 QString pref = "e";
1759 if ( inR->typeID() == todoID ) 1761 if ( inR->typeID() == todoID )
1760 pref = "t"; 1762 pref = "t";
1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1763 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1764 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1763 //remote->deleteIncidence( inR ); 1765 //remote->deleteIncidence( inR );
1764 ++deletedEventR; 1766 ++deletedEventR;
1765 } else { 1767 } else {
1766 inR->setLastModified( modifiedCalendar ); 1768 inR->setLastModified( modifiedCalendar );
1767 inL = inR->clone(); 1769 inL = inR->clone();
1768 inL->setIDStr( ":" ); 1770 inL->setIDStr( ":" );
1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1771 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1772 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1771 1773
1772 inL->setCalID( 0 );// add to default cal 1774 inL->setCalID( 0 );// add to default cal
1773 local->addIncidence( inL ); 1775 local->addIncidence( inL );
1774 ++addedEvent; 1776 ++addedEvent;
1775 1777
1776 } 1778 }
1777 } else { 1779 } else {
1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1780 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1779 inR->setLastModified( modifiedCalendar ); 1781 inR->setLastModified( modifiedCalendar );
1780 inL = inR->clone(); 1782 inL = inR->clone();
1781 inL->setIDStr( ":" ); 1783 inL->setIDStr( ":" );
1782 inL->setCalID( 0 );// add to default cal 1784 inL->setCalID( 0 );// add to default cal
1783 local->addIncidence( inL ); 1785 local->addIncidence( inL );
1784 ++addedEvent; 1786 ++addedEvent;
1785 1787
1786 } else { 1788 } else {
1787 checkExternSyncEvent(eventRSyncSharp, inR); 1789 checkExternSyncEvent(eventRSyncSharp, inR);
1788 remote->deleteIncidence( inR ); 1790 remote->deleteIncidence( inR );
1789 ++deletedEventR; 1791 ++deletedEventR;
1790 } 1792 }
1791 } 1793 }
1792 } else { 1794 } else {
1793 ++filteredIN; 1795 ++filteredIN;
1794 } 1796 }
1795 } 1797 }
1796 } 1798 }
1797 inR = er.next(); 1799 inR = er.next();
1798 } 1800 }
1799 QPtrList<Incidence> el = local->rawIncidences(); 1801 QPtrList<Incidence> el = local->rawIncidences();
1800 inL = el.first(); 1802 inL = el.first();
1801 modulo = (el.count()/10)+1; 1803 modulo = (el.count()/10)+1;
1802 bar.setCaption (i18n("Add / remove events") ); 1804 bar.setCaption (i18n("Add / remove events") );
1803 bar.setTotalSteps ( el.count() ) ; 1805 bar.setTotalSteps ( el.count() ) ;
1804 bar.show(); 1806 bar.show();
1805 incCounter = 0; 1807 incCounter = 0;
1806 1808
1807 while ( inL ) { 1809 while ( inL ) {
1808 1810
1809 qApp->processEvents(); 1811 qApp->processEvents();
1810 if ( ! bar.isVisible() ) 1812 if ( ! bar.isVisible() )
1811 return false; 1813 return false;
1812 if ( incCounter % modulo == 0 ) 1814 if ( incCounter % modulo == 0 )
1813 bar.setProgress( incCounter ); 1815 bar.setProgress( incCounter );
1814 ++incCounter; 1816 ++incCounter;
1815 uid = inL->uid(); 1817 uid = inL->uid();
1816 bool skipIncidence = false; 1818 bool skipIncidence = false;
1817 if ( uid.left(15) == QString("last-syncEvent-") ) 1819 if ( uid.left(15) == QString("last-syncEvent-") )
1818 skipIncidence = true; 1820 skipIncidence = true;
1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1821 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1820 skipIncidence = true; 1822 skipIncidence = true;
1821 if ( !skipIncidence ) { 1823 if ( !skipIncidence ) {
1822 inR = remote->incidenceForUid( uid , true ); 1824 inR = remote->incidenceForUid( uid , true );
1823 if ( ! inR ) { 1825 if ( ! inR ) {
1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1826 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1825 // no conflict ********** add or delete local 1827 // no conflict ********** add or delete local
1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1828 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1829 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1828 checkExternSyncEvent(eventLSyncSharp, inL); 1830 checkExternSyncEvent(eventLSyncSharp, inL);
1829 local->deleteIncidence( inL ); 1831 local->deleteIncidence( inL );
1830 ++deletedEventL; 1832 ++deletedEventL;
1831 } else { 1833 } else {
1832 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1834 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1833 inL->removeID(mCurrentSyncDevice ); 1835 inL->removeID(mCurrentSyncDevice );
1834 ++addedEventR; 1836 ++addedEventR;
1835 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1837 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1836 inL->setLastModified( modifiedCalendar ); 1838 inL->setLastModified( modifiedCalendar );
1837 inR = inL->clone(); 1839 inR = inL->clone();
1838 inR->setIDStr( ":" ); 1840 inR->setIDStr( ":" );
1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1841 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1840 inR->setCalID( 0 );// add to default cal 1842 inR->setCalID( 0 );// add to default cal
1841 remote->addIncidence( inR ); 1843 remote->addIncidence( inR );
1842 } 1844 }
1843 } 1845 }
1844 } else { 1846 } else {
1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1847 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1846 checkExternSyncEvent(eventLSyncSharp, inL); 1848 checkExternSyncEvent(eventLSyncSharp, inL);
1847 local->deleteIncidence( inL ); 1849 local->deleteIncidence( inL );
1848 ++deletedEventL; 1850 ++deletedEventL;
1849 } else { 1851 } else {
1850 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1852 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1851 ++addedEventR; 1853 ++addedEventR;
1852 inL->setLastModified( modifiedCalendar ); 1854 inL->setLastModified( modifiedCalendar );
1853 inR = inL->clone(); 1855 inR = inL->clone();
1854 inR->setIDStr( ":" ); 1856 inR->setIDStr( ":" );
1855 inR->setCalID( 0 );// add to default cal 1857 inR->setCalID( 0 );// add to default cal
1856 remote->addIncidence( inR ); 1858 remote->addIncidence( inR );
1857 } 1859 }
1858 } 1860 }
1859 } 1861 }
1860 } else { 1862 } else {
1861 ++filteredOUT; 1863 ++filteredOUT;
1862 } 1864 }
1863 } 1865 }
1864 } 1866 }
1865 inL = el.next(); 1867 inL = el.next();
1866 } 1868 }
1867 int delFut = 0; 1869 int delFut = 0;
1868 int remRem = 0; 1870 int remRem = 0;
1869 if ( mSyncManager->mWriteBackInFuture ) { 1871 if ( mSyncManager->mWriteBackInFuture ) {
1870 er = remote->rawIncidences(); 1872 er = remote->rawIncidences();
1871 remRem = er.count(); 1873 remRem = er.count();
1872 inR = er.first(); 1874 inR = er.first();
1873 QDateTime dt; 1875 QDateTime dt;
1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1876 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1877 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1876 while ( inR ) { 1878 while ( inR ) {
1877 if ( inR->typeID() == todoID ) { 1879 if ( inR->typeID() == todoID ) {
1878 Todo * t = (Todo*)inR; 1880 Todo * t = (Todo*)inR;
1879 if ( t->hasDueDate() ) 1881 if ( t->hasDueDate() )
1880 dt = t->dtDue(); 1882 dt = t->dtDue();
1881 else 1883 else
1882 dt = cur.addSecs( 62 ); 1884 dt = cur.addSecs( 62 );
1883 } 1885 }
1884 else if (inR->typeID() == eventID ) { 1886 else if (inR->typeID() == eventID ) {
1885 bool ok; 1887 bool ok;
1886 dt = inR->getNextOccurence( cur, &ok ); 1888 dt = inR->getNextOccurence( cur, &ok );
1887 if ( !ok ) 1889 if ( !ok )
1888 dt = cur.addSecs( -62 ); 1890 dt = cur.addSecs( -62 );
1889 } 1891 }
1890 else 1892 else
1891 dt = inR->dtStart(); 1893 dt = inR->dtStart();
1892 if ( dt < cur || dt > end ) { 1894 if ( dt < cur || dt > end ) {
1893 remote->deleteIncidence( inR ); 1895 remote->deleteIncidence( inR );
1894 ++delFut; 1896 ++delFut;
1895 } 1897 }
1896 inR = er.next(); 1898 inR = er.next();
1897 } 1899 }
1898 } 1900 }
1899 bar.hide(); 1901 bar.hide();
1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1902 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1901 eventLSync->setReadOnly( false ); 1903 eventLSync->setReadOnly( false );
1902 eventLSync->setDtStart( mLastCalendarSync ); 1904 eventLSync->setDtStart( mLastCalendarSync );
1903 eventRSync->setDtStart( mLastCalendarSync ); 1905 eventRSync->setDtStart( mLastCalendarSync );
1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1906 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1907 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1908 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1909 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1908 eventLSync->setReadOnly( true ); 1910 eventLSync->setReadOnly( true );
1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1911 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1912 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1911 remote->addEvent( eventRSync ); 1913 remote->addEvent( eventRSync );
1912 else 1914 else
1913 delete eventRSync; 1915 delete eventRSync;
1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1916 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1915 QString mes; 1917 QString mes;
1916 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1918 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1917 QString delmess; 1919 QString delmess;
1918 if ( delFut ) { 1920 if ( delFut ) {
1919 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1921 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1920 mes += delmess; 1922 mes += delmess;
1921 } 1923 }
1922 mes = i18n("Local calendar changed!\n") +mes; 1924 mes = i18n("Local calendar changed!\n") +mes;
1923 mCalendar->checkAlarmForIncidence( 0, true ); 1925 mCalendar->checkAlarmForIncidence( 0, true );
1924 qDebug( mes ); 1926 qDebug( mes );
1925 if ( mSyncManager->mShowSyncSummary ) { 1927 if ( mSyncManager->mShowSyncSummary ) {
1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1928 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1929 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1928 qDebug("KO: WB cancelled "); 1930 qDebug("KO: WB cancelled ");
1929 mSyncManager->mWriteBackFile = false; 1931 mSyncManager->mWriteBackFile = false;
1930 return syncOK; 1932 return syncOK;
1931 } 1933 }
1932 } 1934 }
1933 return syncOK; 1935 return syncOK;
1934} 1936}
1935 1937
1936void CalendarView::setSyncDevice( QString s ) 1938void CalendarView::setSyncDevice( QString s )
1937{ 1939{
1938 mCurrentSyncDevice= s; 1940 mCurrentSyncDevice= s;
1939} 1941}
1940void CalendarView::setSyncName( QString s ) 1942void CalendarView::setSyncName( QString s )
1941{ 1943{
1942 mCurrentSyncName= s; 1944 mCurrentSyncName= s;
1943} 1945}
1944bool CalendarView::syncCalendar(QString filename, int mode) 1946bool CalendarView::syncCalendar(QString filename, int mode)
1945{ 1947{
1946 //qDebug("syncCalendar %s ", filename.latin1()); 1948 //qDebug("syncCalendar %s ", filename.latin1());
1947 mGlobalSyncMode = SYNC_MODE_NORMAL; 1949 mGlobalSyncMode = SYNC_MODE_NORMAL;
1948 CalendarLocal* calendar = new CalendarLocal(); 1950 CalendarLocal* calendar = new CalendarLocal();
1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1951 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1950 FileStorage* storage = new FileStorage( calendar ); 1952 FileStorage* storage = new FileStorage( calendar );
1951 bool syncOK = false; 1953 bool syncOK = false;
1952 storage->setFileName( filename ); 1954 storage->setFileName( filename );
1953 // qDebug("loading ... "); 1955 // qDebug("loading ... ");
1954 if ( storage->load() ) { 1956 if ( storage->load() ) {
1955 getEventViewerDialog()->setSyncMode( true ); 1957 getEventViewerDialog()->setSyncMode( true );
1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1958 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1957 getEventViewerDialog()->setSyncMode( false ); 1959 getEventViewerDialog()->setSyncMode( false );
1958 if ( syncOK ) { 1960 if ( syncOK ) {
1959 if ( mSyncManager->mWriteBackFile ) 1961 if ( mSyncManager->mWriteBackFile )
1960 { 1962 {
1961 storage->setSaveFormat( new ICalFormat() ); 1963 storage->setSaveFormat( new ICalFormat() );
1962 storage->save(); 1964 storage->save();
1963 } 1965 }
1964 } 1966 }
1965 setModified( true ); 1967 setModified( true );
1966 } 1968 }
1967 delete storage; 1969 delete storage;
1968 delete calendar; 1970 delete calendar;
1969 if ( syncOK ) 1971 if ( syncOK )
1970 updateView(); 1972 updateView();
1971 return syncOK; 1973 return syncOK;
1972} 1974}
1973 1975
1974void CalendarView::syncExternal( int mode ) 1976void CalendarView::syncExternal( int mode )
1975{ 1977{
1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1978 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1977 1979
1978 qApp->processEvents(); 1980 qApp->processEvents();
1979 CalendarLocal* calendar = new CalendarLocal(); 1981 CalendarLocal* calendar = new CalendarLocal();
1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1982 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1981 bool syncOK = false; 1983 bool syncOK = false;
1982 bool loadSuccess = false; 1984 bool loadSuccess = false;
1983 PhoneFormat* phoneFormat = 0; 1985 PhoneFormat* phoneFormat = 0;
1984 emit tempDisableBR(true); 1986 emit tempDisableBR(true);
1985#ifndef DESKTOP_VERSION 1987#ifndef DESKTOP_VERSION
1986 SharpFormat* sharpFormat = 0; 1988 SharpFormat* sharpFormat = 0;
1987 if ( mode == 0 ) { // sharp 1989 if ( mode == 0 ) { // sharp
1988 sharpFormat = new SharpFormat () ; 1990 sharpFormat = new SharpFormat () ;
1989 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1991 loadSuccess = sharpFormat->load( calendar, mCalendar );
1990 1992
1991 } else 1993 } else
1992#endif 1994#endif
1993 if ( mode == 1 ) { // phone 1995 if ( mode == 1 ) { // phone
1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1996 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1995 mSyncManager->mPhoneDevice, 1997 mSyncManager->mPhoneDevice,
1996 mSyncManager->mPhoneConnection, 1998 mSyncManager->mPhoneConnection,
1997 mSyncManager->mPhoneModel); 1999 mSyncManager->mPhoneModel);
1998 loadSuccess = phoneFormat->load( calendar,mCalendar); 2000 loadSuccess = phoneFormat->load( calendar,mCalendar);
1999 2001
2000 } else { 2002 } else {
2001 emit tempDisableBR(false); 2003 emit tempDisableBR(false);
2002 return; 2004 return;
2003 } 2005 }
2004 if ( loadSuccess ) { 2006 if ( loadSuccess ) {
2005 getEventViewerDialog()->setSyncMode( true ); 2007 getEventViewerDialog()->setSyncMode( true );
2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2008 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2007 getEventViewerDialog()->setSyncMode( false ); 2009 getEventViewerDialog()->setSyncMode( false );
2008 qApp->processEvents(); 2010 qApp->processEvents();
2009 if ( syncOK ) { 2011 if ( syncOK ) {
2010 if ( mSyncManager->mWriteBackFile ) 2012 if ( mSyncManager->mWriteBackFile )
2011 { 2013 {
2012 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2014 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2013 Incidence* inc = iL.first(); 2015 Incidence* inc = iL.first();
2014 if ( phoneFormat ) { 2016 if ( phoneFormat ) {
2015 while ( inc ) { 2017 while ( inc ) {
2016 inc->removeID(mCurrentSyncDevice); 2018 inc->removeID(mCurrentSyncDevice);
2017 inc = iL.next(); 2019 inc = iL.next();
2018 } 2020 }
2019 } 2021 }
2020#ifndef DESKTOP_VERSION 2022#ifndef DESKTOP_VERSION
2021 if ( sharpFormat ) 2023 if ( sharpFormat )
2022 sharpFormat->save(calendar); 2024 sharpFormat->save(calendar);
2023#endif 2025#endif
2024 if ( phoneFormat ) 2026 if ( phoneFormat )
2025 phoneFormat->save(calendar); 2027 phoneFormat->save(calendar);
2026 iL = calendar->rawIncidences(); 2028 iL = calendar->rawIncidences();
2027 inc = iL.first(); 2029 inc = iL.first();
2028 Incidence* loc; 2030 Incidence* loc;
2029 while ( inc ) { 2031 while ( inc ) {
2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2032 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2031 loc = mCalendar->incidence(inc->uid() ); 2033 loc = mCalendar->incidence(inc->uid() );
2032 if ( loc ) { 2034 if ( loc ) {
2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2035 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2036 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2035 } 2037 }
2036 } 2038 }
2037 inc = iL.next(); 2039 inc = iL.next();
2038 } 2040 }
2039 Incidence* lse = getLastSyncEvent(); 2041 Incidence* lse = getLastSyncEvent();
2040 if ( lse ) { 2042 if ( lse ) {
2041 lse->setReadOnly( false ); 2043 lse->setReadOnly( false );
2042 lse->setDescription( "" ); 2044 lse->setDescription( "" );
2043 lse->setReadOnly( true ); 2045 lse->setReadOnly( true );
2044 } 2046 }
2045 } 2047 }
2046 } else { 2048 } else {
2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2049 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2048 } 2050 }
2049 setModified( true ); 2051 setModified( true );
2050 } else { 2052 } else {
2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2053 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2054 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2053 question, i18n("Ok")) ; 2055 question, i18n("Ok")) ;
2054 2056
2055 } 2057 }
2056 delete calendar; 2058 delete calendar;
2057 updateView(); 2059 updateView();
2058 emit tempDisableBR(false); 2060 emit tempDisableBR(false);
2059 return ;//syncOK; 2061 return ;//syncOK;
2060 2062
2061} 2063}
2062 2064
2063bool CalendarView::importBday() 2065bool CalendarView::importBday()
2064{ 2066{
2065#ifndef KORG_NOKABC 2067#ifndef KORG_NOKABC
2066 2068
2067#ifdef DESKTOP_VERSION 2069#ifdef DESKTOP_VERSION
2068 int curCal = mCalendar->defaultCalendar(); 2070 int curCal = mCalendar->defaultCalendar();
2069 int bd = mCalEditView->getBirtdayID(); 2071 int bd = mCalEditView->getBirtdayID();
2070 if ( bd == 0 ) 2072 if ( bd == 0 )
2071 return false; 2073 return false;
2072 mCalendar->setDefaultCalendar( bd ); 2074 mCalendar->setDefaultCalendar( bd );
2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2075 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2074 KABC::AddressBook::Iterator it; 2076 KABC::AddressBook::Iterator it;
2075 int count = 0; 2077 int count = 0;
2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2078 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2077 ++count; 2079 ++count;
2078 } 2080 }
2079 QProgressBar bar(count,0 ); 2081 QProgressBar bar(count,0 );
2080 int w = 300; 2082 int w = 300;
2081 if ( QApplication::desktop()->width() < 320 ) 2083 if ( QApplication::desktop()->width() < 320 )
2082 w = 220; 2084 w = 220;
2083 int h = bar.sizeHint().height() ; 2085 int h = bar.sizeHint().height() ;
2084 int dw = QApplication::desktop()->width(); 2086 int dw = QApplication::desktop()->width();
2085 int dh = QApplication::desktop()->height(); 2087 int dh = QApplication::desktop()->height();
2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2088 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2087 bar.show(); 2089 bar.show();
2088 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2090 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2089 qApp->processEvents(); 2091 qApp->processEvents();
2090 count = 0; 2092 count = 0;
2091 int addCount = 0; 2093 int addCount = 0;
2092 KCal::Attendee* a = 0; 2094 KCal::Attendee* a = 0;
2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2095 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2094 if ( ! bar.isVisible() ) 2096 if ( ! bar.isVisible() )
2095 return false; 2097 return false;
2096 bar.setProgress( count++ ); 2098 bar.setProgress( count++ );
2097 qApp->processEvents(); 2099 qApp->processEvents();
2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2100 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2099 if ( (*it).birthday().date().isValid() ){ 2101 if ( (*it).birthday().date().isValid() ){
2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2102 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2103 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2102 ++addCount; 2104 ++addCount;
2103 } 2105 }
2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2106 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2105 if ( anni.isValid() ){ 2107 if ( anni.isValid() ){
2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2108 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2109 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2108 ++addCount; 2110 ++addCount;
2109 } 2111 }
2110 } 2112 }
2111 mCalendar->setDefaultCalendar( curCal ); 2113 mCalendar->setDefaultCalendar( curCal );
2112 updateView(); 2114 updateView();
2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2115 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2114#else //DESKTOP_VERSION 2116#else //DESKTOP_VERSION
2115 2117
2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2118 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2117 // the result should now arrive through method insertBirthdays 2119 // the result should now arrive through method insertBirthdays
2118 2120
2119#endif //DESKTOP_VERSION 2121#endif //DESKTOP_VERSION
2120 2122
2121#endif //KORG_NOKABC 2123#endif //KORG_NOKABC
2122 2124
2123 2125
2124 return true; 2126 return true;
2125} 2127}
2126 2128
2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2129// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2130void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2129 const QStringList& anniversaryList, const QStringList& realNameList, 2131 const QStringList& anniversaryList, const QStringList& realNameList,
2130 const QStringList& emailList, const QStringList& assembledNameList, 2132 const QStringList& emailList, const QStringList& assembledNameList,
2131 const QStringList& uidList) 2133 const QStringList& uidList)
2132{ 2134{
2133 2135
2134 //qDebug("KO::CalendarView::insertBirthdays"); 2136 //qDebug("KO::CalendarView::insertBirthdays");
2135 if (uid == this->name()) 2137 if (uid == this->name())
2136 { 2138 {
2137 int curCal = mCalendar->defaultCalendar(); 2139 int curCal = mCalendar->defaultCalendar();
2138 int bd = mCalEditView->getBirtdayID(); 2140 int bd = mCalEditView->getBirtdayID();
2139 if ( bd == 0 ) 2141 if ( bd == 0 )
2140 return; 2142 return;
2141 mCalendar->setDefaultCalendar( bd ); 2143 mCalendar->setDefaultCalendar( bd );
2142 2144
2143 2145
2144 int count = birthdayList.count(); 2146 int count = birthdayList.count();
2145 int addCount = 0; 2147 int addCount = 0;
2146 KCal::Attendee* a = 0; 2148 KCal::Attendee* a = 0;
2147 2149
2148 //qDebug("CalView 1 %i", count); 2150 //qDebug("CalView 1 %i", count);
2149 2151
2150 QProgressBar bar(count,0 ); 2152 QProgressBar bar(count,0 );
2151 int w = 300; 2153 int w = 300;
2152 if ( QApplication::desktop()->width() < 320 ) 2154 if ( QApplication::desktop()->width() < 320 )
2153 w = 220; 2155 w = 220;
2154 int h = bar.sizeHint().height() ; 2156 int h = bar.sizeHint().height() ;
2155 int dw = QApplication::desktop()->width(); 2157 int dw = QApplication::desktop()->width();
2156 int dh = QApplication::desktop()->height(); 2158 int dh = QApplication::desktop()->height();
2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2159 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2158 bar.show(); 2160 bar.show();
2159 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2161 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2160 qApp->processEvents(); 2162 qApp->processEvents();
2161 2163
2162 QDate birthday; 2164 QDate birthday;
2163 QDate anniversary; 2165 QDate anniversary;
2164 QString realName; 2166 QString realName;
2165 QString email; 2167 QString email;
2166 QString assembledName; 2168 QString assembledName;
2167 QString uid; 2169 QString uid;
2168 bool ok = true; 2170 bool ok = true;
2169 for ( int i = 0; i < count; i++) 2171 for ( int i = 0; i < count; i++)
2170 { 2172 {
2171 if ( ! bar.isVisible() ) 2173 if ( ! bar.isVisible() )
2172 return; 2174 return;
2173 bar.setProgress( i ); 2175 bar.setProgress( i );
2174 qApp->processEvents(); 2176 qApp->processEvents();
2175 2177
2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2178 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2177 if (!ok) { 2179 if (!ok) {
2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2180 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2179 } 2181 }
2180 2182
2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2183 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2182 if (!ok) { 2184 if (!ok) {
2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2185 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2184 } 2186 }
2185 realName = realNameList[i]; 2187 realName = realNameList[i];
2186 email = emailList[i]; 2188 email = emailList[i];
2187 assembledName = assembledNameList[i]; 2189 assembledName = assembledNameList[i];
2188 uid = uidList[i]; 2190 uid = uidList[i];
2189 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 2191 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
2190 2192
2191 if ( birthday.isValid() ){ 2193 if ( birthday.isValid() ){
2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2194 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2193 KCal::Attendee::ReqParticipant,uid) ; 2195 KCal::Attendee::ReqParticipant,uid) ;
2194 if ( addAnniversary( birthday, assembledName, a, true ) ) 2196 if ( addAnniversary( birthday, assembledName, a, true ) )
2195 ++addCount; 2197 ++addCount;
2196 } 2198 }
2197 2199
2198 if ( anniversary.isValid() ){ 2200 if ( anniversary.isValid() ){
2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2201 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2200 KCal::Attendee::ReqParticipant,uid) ; 2202 KCal::Attendee::ReqParticipant,uid) ;
2201 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2203 if ( addAnniversary( anniversary, assembledName, a, false ) )
2202 ++addCount; 2204 ++addCount;
2203 } 2205 }
2204 } 2206 }
2205 2207
2206 mCalendar->setDefaultCalendar( curCal ); 2208 mCalendar->setDefaultCalendar( curCal );
2207 updateView(); 2209 updateView();
2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2210 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2209 2211
2210 } 2212 }
2211 2213
2212} 2214}
2213 2215
2214 2216
2215 2217
2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2218bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2217{ 2219{
2218 //qDebug("addAnni "); 2220 //qDebug("addAnni ");
2219 Event * ev = new Event(); 2221 Event * ev = new Event();
2220 ev->setOrganizer(KOPrefs::instance()->email()); 2222 ev->setOrganizer(KOPrefs::instance()->email());
2221 if ( a ) { 2223 if ( a ) {
2222 ev->addAttendee( a ); 2224 ev->addAttendee( a );
2223 } 2225 }
2224 QString kind; 2226 QString kind;
2225 if ( birthday ) { 2227 if ( birthday ) {
2226 kind = i18n( "Birthday" ); 2228 kind = i18n( "Birthday" );
2227 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2229 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2228 } 2230 }
2229 else { 2231 else {
2230 kind = i18n( "Anniversary" ); 2232 kind = i18n( "Anniversary" );
2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2233 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2232 } 2234 }
2233 ev->setCategories( kind ); 2235 ev->setCategories( kind );
2234 ev->setDtStart( QDateTime(date) ); 2236 ev->setDtStart( QDateTime(date) );
2235 ev->setDtEnd( QDateTime(date) ); 2237 ev->setDtEnd( QDateTime(date) );
2236 ev->setFloats( true ); 2238 ev->setFloats( true );
2237 Recurrence * rec = ev->recurrence(); 2239 Recurrence * rec = ev->recurrence();
2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2240 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2239 rec->addYearlyNum( date.month() ); 2241 rec->addYearlyNum( date.month() );
2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2242 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2241 delete ev; 2243 delete ev;
2242 return false; 2244 return false;
2243 } 2245 }
2244 return true; 2246 return true;
2245 2247
2246} 2248}
2247bool CalendarView::importQtopia( const QString &categories, 2249bool CalendarView::importQtopia( const QString &categories,
2248 const QString &datebook, 2250 const QString &datebook,
2249 const QString &todolist ) 2251 const QString &todolist )
2250{ 2252{
2251 2253
2252 QtopiaFormat qtopiaFormat; 2254 QtopiaFormat qtopiaFormat;
2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2255 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2256 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2257 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2258 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2257 2259
2258 updateView(); 2260 updateView();
2259 return true; 2261 return true;
2260 2262
2261#if 0 2263#if 0
2262 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2264 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2263 mCurrentSyncDevice = "qtopia-XML"; 2265 mCurrentSyncDevice = "qtopia-XML";
2264 if ( mSyncManager->mAskForPreferences ) 2266 if ( mSyncManager->mAskForPreferences )
2265 edit_sync_options(); 2267 edit_sync_options();
2266 qApp->processEvents(); 2268 qApp->processEvents();
2267 CalendarLocal* calendar = new CalendarLocal(); 2269 CalendarLocal* calendar = new CalendarLocal();
2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2270 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2269 bool syncOK = false; 2271 bool syncOK = false;
2270 QtopiaFormat qtopiaFormat; 2272 QtopiaFormat qtopiaFormat;
2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2273 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2272 bool loadOk = true; 2274 bool loadOk = true;
2273 if ( !categories.isEmpty() ) 2275 if ( !categories.isEmpty() )
2274 loadOk = qtopiaFormat.load( calendar, categories ); 2276 loadOk = qtopiaFormat.load( calendar, categories );
2275 if ( loadOk && !datebook.isEmpty() ) 2277 if ( loadOk && !datebook.isEmpty() )
2276 loadOk = qtopiaFormat.load( calendar, datebook ); 2278 loadOk = qtopiaFormat.load( calendar, datebook );
2277 if ( loadOk && !todolist.isEmpty() ) 2279 if ( loadOk && !todolist.isEmpty() )
2278 loadOk = qtopiaFormat.load( calendar, todolist ); 2280 loadOk = qtopiaFormat.load( calendar, todolist );
2279 2281
2280 if ( loadOk ) { 2282 if ( loadOk ) {
2281 getEventViewerDialog()->setSyncMode( true ); 2283 getEventViewerDialog()->setSyncMode( true );
2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2284 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2283 getEventViewerDialog()->setSyncMode( false ); 2285 getEventViewerDialog()->setSyncMode( false );
2284 qApp->processEvents(); 2286 qApp->processEvents();
2285 if ( syncOK ) { 2287 if ( syncOK ) {
2286 if ( mSyncManager->mWriteBackFile ) 2288 if ( mSyncManager->mWriteBackFile )
2287 { 2289 {
2288 // write back XML file 2290 // write back XML file
2289 2291
2290 } 2292 }
2291 setModified( true ); 2293 setModified( true );
2292 } 2294 }
2293 } else { 2295 } else {
2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2296 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2297 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2296 question, i18n("Ok")) ; 2298 question, i18n("Ok")) ;
2297 } 2299 }
2298 delete calendar; 2300 delete calendar;
2299 updateView(); 2301 updateView();
2300 return syncOK; 2302 return syncOK;
2301 2303
2302 2304
2303#endif 2305#endif
2304 2306
2305} 2307}
2306 2308
2307void CalendarView::setSyncEventsReadOnly() 2309void CalendarView::setSyncEventsReadOnly()
2308{ 2310{
2309 mCalendar->setSyncEventsReadOnly(); 2311 mCalendar->setSyncEventsReadOnly();
2310} 2312}
2311 2313
2312bool CalendarView::loadCalendars() 2314bool CalendarView::loadCalendars()
2313{ 2315{
2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2316 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2315 KopiCalendarFile * cal = calendars.first(); 2317 KopiCalendarFile * cal = calendars.first();
2316 mCalendar->setDefaultCalendar( 1 ); 2318 mCalendar->setDefaultCalendar( 1 );
2317 openCalendar( MainWindow::defaultFileName(), false ); 2319 openCalendar( MainWindow::defaultFileName(), false );
2318 cal = calendars.next(); 2320 cal = calendars.next();
2319 while ( cal ) { 2321 while ( cal ) {
2320 addCalendar( cal ); 2322 addCalendar( cal );
2321 cal = calendars.next(); 2323 cal = calendars.next();
2322 } 2324 }
2323 restoreCalendarSettings(); 2325 restoreCalendarSettings();
2324 return true; 2326 return true;
2325} 2327}
2326bool CalendarView::restoreCalendarSettings() 2328bool CalendarView::restoreCalendarSettings()
2327{ 2329{
2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2330 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2329 KopiCalendarFile * cal = calendars.first(); 2331 KopiCalendarFile * cal = calendars.first();
2330 while ( cal ) { 2332 while ( cal ) {
2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2333 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2334 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2335 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2334 if ( cal->isStandard ) 2336 if ( cal->isStandard )
2335 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2337 mCalendar->setDefaultCalendar( cal->mCalNumber );
2336 cal = calendars.next(); 2338 cal = calendars.next();
2337 } 2339 }
2338 setSyncEventsReadOnly(); 2340 setSyncEventsReadOnly();
2339 mCalendar->reInitAlarmSettings(); 2341 mCalendar->reInitAlarmSettings();
2340 updateUnmanagedViews(); 2342 updateUnmanagedViews();
2341 updateView(); 2343 updateView();
2342 return true; 2344 return true;
2343} 2345}
2344void CalendarView::addCalendarId( int id ) 2346void CalendarView::addCalendarId( int id )
2345{ 2347{
2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2348 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2347 if ( cal ) 2349 if ( cal )
2348 addCalendar( cal ); 2350 addCalendar( cal );
2349} 2351}
2350bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2352bool CalendarView::addCalendar( KopiCalendarFile * cal )
2351{ 2353{
2352 cal->mErrorOnLoad = false; 2354 cal->mErrorOnLoad = false;
2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2355 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2354 cal->mLoadDt = QDateTime::currentDateTime(); 2356 cal->mLoadDt = QDateTime::currentDateTime();
2355 return true; 2357 return true;
2356 } 2358 }
2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2359 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2358 cal->mErrorOnLoad = true; 2360 cal->mErrorOnLoad = true;
2359 return false; 2361 return false;
2360} 2362}
2361bool CalendarView::openCalendar(QString filename, bool merge) 2363bool CalendarView::openCalendar(QString filename, bool merge)
2362{ 2364{
2363 2365
2364 if (filename.isEmpty()) { 2366 if (filename.isEmpty()) {
2365 return false; 2367 return false;
2366 } 2368 }
2367 2369
2368 if (!QFile::exists(filename)) { 2370 if (!QFile::exists(filename)) {
2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2371 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2370 return false; 2372 return false;
2371 } 2373 }
2372 2374
2373 globalFlagBlockAgenda = 1; 2375 globalFlagBlockAgenda = 1;
2374 clearAllViews(); 2376 clearAllViews();
2375 if (!merge) { 2377 if (!merge) {
2376 mViewManager->setDocumentId( filename ); 2378 mViewManager->setDocumentId( filename );
2377 mCalendar->close(); 2379 mCalendar->close();
2378 } 2380 }
2379 mStorage->setFileName( filename ); 2381 mStorage->setFileName( filename );
2380 2382
2381 if ( mStorage->load() ) { 2383 if ( mStorage->load() ) {
2382 if ( merge ) ;//setModified( true ); 2384 if ( merge ) ;//setModified( true );
2383 else { 2385 else {
2384 //setModified( true ); 2386 //setModified( true );
2385 mViewManager->setDocumentId( filename ); 2387 mViewManager->setDocumentId( filename );
2386 mDialogManager->setDocumentId( filename ); 2388 mDialogManager->setDocumentId( filename );
2387 mTodoList->setDocumentId( filename ); 2389 mTodoList->setDocumentId( filename );
2388 } 2390 }
2389 globalFlagBlockAgenda = 2; 2391 globalFlagBlockAgenda = 2;
2390 // if ( getLastSyncEvent() ) 2392 // if ( getLastSyncEvent() )
2391 // getLastSyncEvent()->setReadOnly( true ); 2393 // getLastSyncEvent()->setReadOnly( true );
2392 mCalendar->reInitAlarmSettings(); 2394 mCalendar->reInitAlarmSettings();
2393 setSyncEventsReadOnly(); 2395 setSyncEventsReadOnly();
2394 //updateUnmanagedViews(); 2396 //updateUnmanagedViews();
2395 //updateView(); 2397 //updateView();
2396 if ( filename != MainWindow::defaultFileName() ) { 2398 if ( filename != MainWindow::defaultFileName() ) {
2397 saveCalendar( MainWindow::defaultFileName() ); 2399 saveCalendar( MainWindow::defaultFileName() );
2398 } else { 2400 } else {
2399 QFileInfo finf ( MainWindow::defaultFileName()); 2401 QFileInfo finf ( MainWindow::defaultFileName());
2400 if ( finf.exists() ) { 2402 if ( finf.exists() ) {
2401 setLoadedFileVersion( finf.lastModified () ); 2403 setLoadedFileVersion( finf.lastModified () );
2402 } 2404 }
2403 } 2405 }
2404 return true; 2406 return true;
2405 } else { 2407 } else {
2406 // while failing to load, the calendar object could 2408 // while failing to load, the calendar object could
2407 // have become partially populated. Clear it out. 2409 // have become partially populated. Clear it out.
2408 if ( !merge ) { 2410 if ( !merge ) {
2409 mCalendar->close(); 2411 mCalendar->close();
2410 mViewManager->setDocumentId( filename ); 2412 mViewManager->setDocumentId( filename );
2411 mDialogManager->setDocumentId( filename ); 2413 mDialogManager->setDocumentId( filename );
2412 mTodoList->setDocumentId( filename ); 2414 mTodoList->setDocumentId( filename );
2413 } 2415 }
2414 2416
2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2417 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2416 2418
2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2419 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2418 globalFlagBlockAgenda = 2; 2420 globalFlagBlockAgenda = 2;
2419 mCalendar->reInitAlarmSettings(); 2421 mCalendar->reInitAlarmSettings();
2420 setSyncEventsReadOnly(); 2422 setSyncEventsReadOnly();
2421 updateUnmanagedViews(); 2423 updateUnmanagedViews();
2422 updateView(); 2424 updateView();
2423 } 2425 }
2424 return false; 2426 return false;
2425} 2427}
2426void CalendarView::mergeFile( QString fn ) 2428void CalendarView::mergeFile( QString fn )
2427{ 2429{
2428 clearAllViews(); 2430 clearAllViews();
2429 mCalendar->mergeCalendarFile( fn ); 2431 mCalendar->mergeCalendarFile( fn );
2430 mCalendar->reInitAlarmSettings(); 2432 mCalendar->reInitAlarmSettings();
2431 setSyncEventsReadOnly(); 2433 setSyncEventsReadOnly();
2432 updateUnmanagedViews(); 2434 updateUnmanagedViews();
2433 updateView(); 2435 updateView();
2434} 2436}
2435void CalendarView::showOpenError() 2437void CalendarView::showOpenError()
2436{ 2438{
2437 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2439 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2438} 2440}
2439void CalendarView::setLoadedFileVersion(QDateTime dt) 2441void CalendarView::setLoadedFileVersion(QDateTime dt)
2440{ 2442{
2441 loadedFileVersion = dt; 2443 loadedFileVersion = dt;
2442} 2444}
2443bool CalendarView::checkFileChanged(QString fn) 2445bool CalendarView::checkFileChanged(QString fn)
2444{ 2446{
2445 QFileInfo finf ( fn ); 2447 QFileInfo finf ( fn );
2446 if ( !finf.exists() ) 2448 if ( !finf.exists() )
2447 return true; 2449 return true;
2448 QDateTime dt = finf.lastModified (); 2450 QDateTime dt = finf.lastModified ();
2449 if ( dt <= loadedFileVersion ) 2451 if ( dt <= loadedFileVersion )
2450 return false; 2452 return false;
2451 return true; 2453 return true;
2452 2454
2453} 2455}
2454void CalendarView::watchSavedFile() 2456void CalendarView::watchSavedFile()
2455{ 2457{
2456 QFileInfo finf ( MainWindow::defaultFileName()); 2458 QFileInfo finf ( MainWindow::defaultFileName());
2457 if ( !finf.exists() ) 2459 if ( !finf.exists() )
2458 return; 2460 return;
2459 QDateTime dt = finf.lastModified (); 2461 QDateTime dt = finf.lastModified ();
2460 if ( dt < loadedFileVersion ) { 2462 if ( dt < loadedFileVersion ) {
2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2463 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2464 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2463 return; 2465 return;
2464 } 2466 }
2465 loadedFileVersion = dt; 2467 loadedFileVersion = dt;
2466} 2468}
2467bool CalendarView::checkAllFileVersions() 2469bool CalendarView::checkAllFileVersions()
2468{ 2470{
2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2471 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2470 KopiCalendarFile * cal = calendars.first(); 2472 KopiCalendarFile * cal = calendars.first();
2471 mCalendar->setDefaultCalendar( 1 ); 2473 mCalendar->setDefaultCalendar( 1 );
2472 mCalendar->setDefaultCalendarEnabledOnly(); 2474 mCalendar->setDefaultCalendarEnabledOnly();
2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2475 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2474 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2476 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2475 restoreCalendarSettings(); 2477 restoreCalendarSettings();
2476 return false; 2478 return false;
2477 } 2479 }
2478 } 2480 }
2479 cal = calendars.next(); 2481 cal = calendars.next();
2480 QDateTime storeTemp = loadedFileVersion; 2482 QDateTime storeTemp = loadedFileVersion;
2481 while ( cal ) { 2483 while ( cal ) {
2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2484 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2483 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2485 mCalendar->setDefaultCalendar( cal->mCalNumber );
2484 mCalendar->setDefaultCalendarEnabledOnly(); 2486 mCalendar->setDefaultCalendarEnabledOnly();
2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2487 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2486 if ( !checkFileVersion(cal->mFileName )) { 2488 if ( !checkFileVersion(cal->mFileName )) {
2487 loadedFileVersion = storeTemp; 2489 loadedFileVersion = storeTemp;
2488 restoreCalendarSettings(); 2490 restoreCalendarSettings();
2489 return false; 2491 return false;
2490 } 2492 }
2491 } 2493 }
2492 cal = calendars.next(); 2494 cal = calendars.next();
2493 } 2495 }
2494 loadedFileVersion = storeTemp; 2496 loadedFileVersion = storeTemp;
2495 return true; 2497 return true;
2496} 2498}
2497bool CalendarView::checkFileVersion(QString fn) 2499bool CalendarView::checkFileVersion(QString fn)
2498{ 2500{
2499 QFileInfo finf ( fn ); 2501 QFileInfo finf ( fn );
2500 if ( !finf.exists() ) 2502 if ( !finf.exists() )
2501 return true; 2503 return true;
2502 QDateTime dt = finf.lastModified (); 2504 QDateTime dt = finf.lastModified ();
2503 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2505 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2504 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2506 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2505 if ( dt <= loadedFileVersion ) 2507 if ( dt <= loadedFileVersion )
2506 return true; 2508 return true;
2507 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2509 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2508 i18n("KO/Pi Warning"),i18n("Overwrite"), 2510 i18n("KO/Pi Warning"),i18n("Overwrite"),
2509 i18n("Sync+save")); 2511 i18n("Sync+save"));
2510 2512
2511 if ( km == KMessageBox::Cancel ) 2513 if ( km == KMessageBox::Cancel )
2512 return false; 2514 return false;
2513 if ( km == KMessageBox::Yes ) 2515 if ( km == KMessageBox::Yes )
2514 return true; 2516 return true;
2515 2517
2516 setSyncDevice("deleteaftersync" ); 2518 setSyncDevice("deleteaftersync" );
2517 mSyncManager->mAskForPreferences = true; 2519 mSyncManager->mAskForPreferences = true;
2518 mSyncManager->mSyncAlgoPrefs = 3; 2520 mSyncManager->mSyncAlgoPrefs = 3;
2519 mSyncManager->mWriteBackFile = false; 2521 mSyncManager->mWriteBackFile = false;
2520 mSyncManager->mWriteBackExistingOnly = false; 2522 mSyncManager->mWriteBackExistingOnly = false;
2521 mSyncManager->mShowSyncSummary = false; 2523 mSyncManager->mShowSyncSummary = false;
2522 syncCalendar( fn, 3 ); 2524 syncCalendar( fn, 3 );
2523 Event * e = getLastSyncEvent(); 2525 Event * e = getLastSyncEvent();
2524 if ( e ) 2526 if ( e )
2525 mCalendar->deleteEvent( e ); 2527 mCalendar->deleteEvent( e );
2526 return true; 2528 return true;
2527} 2529}
2528bool CalendarView::saveCalendars() 2530bool CalendarView::saveCalendars()
2529{ 2531{
2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2532 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2531 KopiCalendarFile * cal = calendars.first(); 2533 KopiCalendarFile * cal = calendars.first();
2532 mCalendar->setDefaultCalendar( 1 ); 2534 mCalendar->setDefaultCalendar( 1 );
2533 mCalendar->setDefaultCalendarEnabledOnly(); 2535 mCalendar->setDefaultCalendarEnabledOnly();
2534 QString saveError; 2536 QString saveError;
2535 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2537 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2536 saveError = cal->mName +"\n"; 2538 saveError = cal->mName +"\n";
2537 cal = calendars.next(); 2539 cal = calendars.next();
2538 while ( cal ) { 2540 while ( cal ) {
2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2541 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2540 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2542 mCalendar->setDefaultCalendar( cal->mCalNumber );
2541 mCalendar->setDefaultCalendarEnabledOnly(); 2543 mCalendar->setDefaultCalendarEnabledOnly();
2542 if ( saveCalendar( cal->mFileName ) ) 2544 if ( saveCalendar( cal->mFileName ) )
2543 cal->mLoadDt = QDateTime::currentDateTime(); 2545 cal->mLoadDt = QDateTime::currentDateTime();
2544 else 2546 else
2545 saveError += cal->mName + "\n"; 2547 saveError += cal->mName + "\n";
2546 } 2548 }
2547 cal = calendars.next(); 2549 cal = calendars.next();
2548 } 2550 }
2549 restoreCalendarSettings(); 2551 restoreCalendarSettings();
2550 //saveError = "test error"; 2552 //saveError = "test error";
2551 if ( !saveError.isEmpty() ) { 2553 if ( !saveError.isEmpty() ) {
2552 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2554 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2553 KMessageBox::error(this, saveError, i18n("Error saving data")); 2555 KMessageBox::error(this, saveError, i18n("Error saving data"));
2554 return false; 2556 return false;
2555 } 2557 }
2556 return true; 2558 return true;
2557} 2559}
2558bool CalendarView::saveCalendar( QString filename ) 2560bool CalendarView::saveCalendar( QString filename )
2559{ 2561{
2560 2562
2561 // Store back all unsaved data into calendar object 2563 // Store back all unsaved data into calendar object
2562 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2564 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2563 if ( mViewManager->currentView() ) 2565 if ( mViewManager->currentView() )
2564 mViewManager->currentView()->flushView(); 2566 mViewManager->currentView()->flushView();
2565 2567
2566 2568
2567 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2569 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2568 mStorage->setSaveFormat( new ICalFormat() ); 2570 mStorage->setSaveFormat( new ICalFormat() );
2569 mStorage->setFileName( filename ); 2571 mStorage->setFileName( filename );
2570 bool success; 2572 bool success;
2571 success = mStorage->save(); 2573 success = mStorage->save();
2572 if ( !success ) { 2574 if ( !success ) {
2573 return false; 2575 return false;
2574 } 2576 }
2575 if ( filename == MainWindow::defaultFileName() ) { 2577 if ( filename == MainWindow::defaultFileName() ) {
2576 setLoadedFileVersion( lfv ); 2578 setLoadedFileVersion( lfv );
2577 watchSavedFile(); 2579 watchSavedFile();
2578 } 2580 }
2579 return true; 2581 return true;
2580} 2582}
2581 2583
2582void CalendarView::closeCalendar() 2584void CalendarView::closeCalendar()
2583{ 2585{
2584 2586
2585 // child windows no longer valid 2587 // child windows no longer valid
2586 clearAllViews(); 2588 clearAllViews();
2587 emit closingDown(); 2589 emit closingDown();
2588 2590
2589 mCalendar->close(); 2591 mCalendar->close();
2590 setModified(false); 2592 setModified(false);
2591 updateView(); 2593 updateView();
2592} 2594}
2593 2595
2594void CalendarView::archiveCalendar() 2596void CalendarView::archiveCalendar()
2595{ 2597{
2596 mDialogManager->showArchiveDialog(); 2598 mDialogManager->showArchiveDialog();
2597} 2599}
2598 2600
2599 2601
2600void CalendarView::readSettings() 2602void CalendarView::readSettings()
2601{ 2603{
2602 2604
2603 2605
2604 // mViewManager->showAgendaView(); 2606 // mViewManager->showAgendaView();
2605 QString str; 2607 QString str;
2606 //qDebug("CalendarView::readSettings() "); 2608 //qDebug("CalendarView::readSettings() ");
2607 // read settings from the KConfig, supplying reasonable 2609 // read settings from the KConfig, supplying reasonable
2608 // defaults where none are to be found 2610 // defaults where none are to be found
2609 KConfig *config = KOGlobals::config(); 2611 KConfig *config = KOGlobals::config();
2610#ifndef KORG_NOSPLITTER 2612#ifndef KORG_NOSPLITTER
2611 config->setGroup("KOrganizer Geometry"); 2613 config->setGroup("KOrganizer Geometry");
2612 2614
2613 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2615 QValueList<int> sizes = config->readIntListEntry("Separator1");
2614 if (sizes.count() != 2) { 2616 if (sizes.count() != 2) {
2615 sizes << mDateNavigator->minimumSizeHint().width(); 2617 sizes << mDateNavigator->minimumSizeHint().width();
2616 sizes << 300; 2618 sizes << 300;
2617 } 2619 }
2618 mPanner->setSizes(sizes); 2620 mPanner->setSizes(sizes);
2619 2621
2620 sizes = config->readIntListEntry("Separator2"); 2622 sizes = config->readIntListEntry("Separator2");
2621 if ( ( mResourceView && sizes.count() == 4 ) || 2623 if ( ( mResourceView && sizes.count() == 4 ) ||
2622 ( !mResourceView && sizes.count() == 3 ) ) { 2624 ( !mResourceView && sizes.count() == 3 ) ) {
2623 mLeftSplitter->setSizes(sizes); 2625 mLeftSplitter->setSizes(sizes);
2624 } 2626 }
2625#endif 2627#endif
2626 globalFlagBlockAgenda = 1; 2628 globalFlagBlockAgenda = 1;
2627 mViewManager->showAgendaView(); 2629 mViewManager->showAgendaView();
2628 //mViewManager->readSettings( config ); 2630 //mViewManager->readSettings( config );
2629 mTodoList->restoreLayout(config,QString("Todo Layout")); 2631 mTodoList->restoreLayout(config,QString("Todo Layout"));
2630 readFilterSettings(config); 2632 readFilterSettings(config);
2631 2633
2632#ifdef DESKTOP_VERSION 2634#ifdef DESKTOP_VERSION
2633 config->setGroup("WidgetLayout"); 2635 config->setGroup("WidgetLayout");
2634 QStringList list; 2636 QStringList list;
2635 list = config->readListEntry("MainLayout"); 2637 list = config->readListEntry("MainLayout");
2636 int x,y,w,h; 2638 int x,y,w,h;
2637 if ( ! list.isEmpty() ) { 2639 if ( ! list.isEmpty() ) {
2638 x = list[0].toInt(); 2640 x = list[0].toInt();
2639 y = list[1].toInt(); 2641 y = list[1].toInt();
2640 w = list[2].toInt(); 2642 w = list[2].toInt();
2641 h = list[3].toInt(); 2643 h = list[3].toInt();
2642 KApplication::testCoords( &x,&y,&w,&h ); 2644 KApplication::testCoords( &x,&y,&w,&h );
2643 topLevelWidget()->setGeometry(x,y,w,h); 2645 topLevelWidget()->setGeometry(x,y,w,h);
2644 2646
2645 } else { 2647 } else {
2646 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2648 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2647 } 2649 }
2648 list = config->readListEntry("EditEventLayout"); 2650 list = config->readListEntry("EditEventLayout");
2649 if ( ! list.isEmpty() ) { 2651 if ( ! list.isEmpty() ) {
2650 x = list[0].toInt(); 2652 x = list[0].toInt();
2651 y = list[1].toInt(); 2653 y = list[1].toInt();
2652 w = list[2].toInt(); 2654 w = list[2].toInt();
2653 h = list[3].toInt(); 2655 h = list[3].toInt();
2654 KApplication::testCoords( &x,&y,&w,&h ); 2656 KApplication::testCoords( &x,&y,&w,&h );
2655 mEventEditor->setGeometry(x,y,w,h); 2657 mEventEditor->setGeometry(x,y,w,h);
2656 2658
2657 } 2659 }
2658 list = config->readListEntry("EditTodoLayout"); 2660 list = config->readListEntry("EditTodoLayout");
2659 if ( ! list.isEmpty() ) { 2661 if ( ! list.isEmpty() ) {
2660 x = list[0].toInt(); 2662 x = list[0].toInt();
2661 y = list[1].toInt(); 2663 y = list[1].toInt();
2662 w = list[2].toInt(); 2664 w = list[2].toInt();
2663 h = list[3].toInt(); 2665 h = list[3].toInt();
2664 KApplication::testCoords( &x,&y,&w,&h ); 2666 KApplication::testCoords( &x,&y,&w,&h );
2665 mTodoEditor->setGeometry(x,y,w,h); 2667 mTodoEditor->setGeometry(x,y,w,h);
2666 2668
2667 } 2669 }
2668 list = config->readListEntry("ViewerLayout"); 2670 list = config->readListEntry("ViewerLayout");
2669 if ( ! list.isEmpty() ) { 2671 if ( ! list.isEmpty() ) {
2670 x = list[0].toInt(); 2672 x = list[0].toInt();
2671 y = list[1].toInt(); 2673 y = list[1].toInt();
2672 w = list[2].toInt(); 2674 w = list[2].toInt();
2673 h = list[3].toInt(); 2675 h = list[3].toInt();
2674 KApplication::testCoords( &x,&y,&w,&h ); 2676 KApplication::testCoords( &x,&y,&w,&h );
2675 getEventViewerDialog()->setGeometry(x,y,w,h); 2677 getEventViewerDialog()->setGeometry(x,y,w,h);
2676 } 2678 }
2677#endif 2679#endif
2678 config->setGroup( "Views" ); 2680 config->setGroup( "Views" );
2679 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2681 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2680 2682
2681 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2683 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2682 2684
2683 int resetval = 0; 2685 int resetval = 0;
2684 int maxVal = 0; 2686 int maxVal = 0;
2685 if (sizes.count() != 3) { 2687 if (sizes.count() != 3) {
2686 if ( KOPrefs::instance()->mVerticalScreen ) { 2688 if ( KOPrefs::instance()->mVerticalScreen ) {
2687 resetval = mDateNavigator->sizeHint().width()+2; 2689 resetval = mDateNavigator->sizeHint().width()+2;
2688 } else { 2690 } else {
2689 resetval = mDateNavigator->sizeHint().height()+2; 2691 resetval = mDateNavigator->sizeHint().height()+2;
2690 } 2692 }
2691 } 2693 }
2692 if ( resetval ) { 2694 if ( resetval ) {
2693 sizes.clear(); 2695 sizes.clear();
2694 if ( KOPrefs::instance()->mVerticalScreen ) { 2696 if ( KOPrefs::instance()->mVerticalScreen ) {
2695 maxVal = QApplication::desktop()->width() -10; 2697 maxVal = QApplication::desktop()->width() -10;
2696 } else { 2698 } else {
2697 maxVal = QApplication::desktop()->height()-10; 2699 maxVal = QApplication::desktop()->height()-10;
2698 } 2700 }
2699 sizes << resetval; 2701 sizes << resetval;
2700 if ( maxVal < resetval + resetval) 2702 if ( maxVal < resetval + resetval)
2701 resetval = maxVal - resetval; 2703 resetval = maxVal - resetval;
2702 sizes << resetval; 2704 sizes << resetval;
2703 sizes << 100; 2705 sizes << 100;
2704 } 2706 }
2705 mLeftFrame->setSizes(sizes); 2707 mLeftFrame->setSizes(sizes);
2706 sizes = config->readIntListEntry("Main Splitter Frame"); 2708 sizes = config->readIntListEntry("Main Splitter Frame");
2707 resetval = 0; 2709 resetval = 0;
2708 maxVal = 0; 2710 maxVal = 0;
2709 if (sizes.count() != 2) { 2711 if (sizes.count() != 2) {
2710 if ( !KOPrefs::instance()->mVerticalScreen ) { 2712 if ( !KOPrefs::instance()->mVerticalScreen ) {
2711 resetval = mDateNavigator->sizeHint().width()+2; 2713 resetval = mDateNavigator->sizeHint().width()+2;
2712 } else { 2714 } else {
2713 resetval = mDateNavigator->sizeHint().height()+2; 2715 resetval = mDateNavigator->sizeHint().height()+2;
2714 } 2716 }
2715 } 2717 }
2716 if ( resetval ) { 2718 if ( resetval ) {
2717 sizes.clear(); 2719 sizes.clear();
2718 if ( !KOPrefs::instance()->mVerticalScreen ) { 2720 if ( !KOPrefs::instance()->mVerticalScreen ) {
2719 maxVal = QApplication::desktop()->width() -10; 2721 maxVal = QApplication::desktop()->width() -10;
2720 } else { 2722 } else {
2721 maxVal = QApplication::desktop()->height()-10; 2723 maxVal = QApplication::desktop()->height()-10;
2722 } 2724 }
2723 sizes << resetval; 2725 sizes << resetval;
2724 if ( maxVal < resetval + resetval) 2726 if ( maxVal < resetval + resetval)
2725 resetval = maxVal - resetval; 2727 resetval = maxVal - resetval;
2726 sizes << resetval; 2728 sizes << resetval;
2727 } 2729 }
2728 mMainFrame->setSizes(sizes); 2730 mMainFrame->setSizes(sizes);
2729 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2731 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2730 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2732 else if ( dateCount == 7 ) mNavigator->selectWeek();
2731 else mNavigator->selectDates( dateCount ); 2733 else mNavigator->selectDates( dateCount );
2732 // mViewManager->readSettings( config ); 2734 // mViewManager->readSettings( config );
2733 updateConfig(); 2735 updateConfig();
2734 globalFlagBlockAgenda = 2; 2736 globalFlagBlockAgenda = 2;
2735 mViewManager->readSettings( config ); 2737 mViewManager->readSettings( config );
2736 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2738 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2737} 2739}
2738 2740
2739void CalendarView::checkSuspendAlarm() 2741void CalendarView::checkSuspendAlarm()
2740{ 2742{
2741 if ( mSuspendTimer->isActive() ) { 2743 if ( mSuspendTimer->isActive() ) {
2742 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2744 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2743 } 2745 }
2744} 2746}
2745void CalendarView::writeSettings() 2747void CalendarView::writeSettings()
2746{ 2748{
2747 // kdDebug() << "CalendarView::writeSettings" << endl; 2749 // kdDebug() << "CalendarView::writeSettings" << endl;
2748 2750
2749 KConfig *config = KOGlobals::config(); 2751 KConfig *config = KOGlobals::config();
2750 2752
2751 mViewManager->writeSettings( config ); 2753 mViewManager->writeSettings( config );
2752 mTodoList->saveLayout(config,QString("Todo Layout")); 2754 mTodoList->saveLayout(config,QString("Todo Layout"));
2753 mDialogManager->writeSettings( config ); 2755 mDialogManager->writeSettings( config );
2754 //KOPrefs::instance()->usrWriteConfig(); 2756 //KOPrefs::instance()->usrWriteConfig();
2755 KOPrefs::instance()->writeConfig(); 2757 KOPrefs::instance()->writeConfig();
2756 2758
2757 writeFilterSettings(config); 2759 writeFilterSettings(config);
2758 config->setGroup( "AppRun" ); 2760 config->setGroup( "AppRun" );
2759 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2761 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2760 int days = dt.daysTo( QDate::currentDate() ); 2762 int days = dt.daysTo( QDate::currentDate() );
2761 dt = dt.addDays( days ); 2763 dt = dt.addDays( days );
2762 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2764 int secs = dt.secsTo( QDateTime::currentDateTime() );
2763 config->writeEntry( "LatestProgramStopDays", days ); 2765 config->writeEntry( "LatestProgramStopDays", days );
2764 config->writeEntry( "LatestProgramStopSecs", secs ); 2766 config->writeEntry( "LatestProgramStopSecs", secs );
2765 //qDebug("KO: Writing stop time: %d ", secs); 2767 //qDebug("KO: Writing stop time: %d ", secs);
2766 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2768 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2767 //QDateTime latest = dt.addSecs ( secs ); 2769 //QDateTime latest = dt.addSecs ( secs );
2768 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2770 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2769 config->setGroup( "Views" ); 2771 config->setGroup( "Views" );
2770 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2772 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2771 2773
2772#if 0 2774#if 0
2773 qDebug("********************* "); 2775 qDebug("********************* ");
2774 qDebug("Testcode secsto "); 2776 qDebug("Testcode secsto ");
2775 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2777 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2776 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2778 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2777 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2779 int secsto = dt_nodaylight.secsTo( dt_daylight );
2778 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2780 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2779 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2781 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2780 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2782 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2781 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2783 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2782 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2784 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2783 qDebug("********************* testcode end"); 2785 qDebug("********************* testcode end");
2784 2786
2785#endif 2787#endif
2786 2788
2787 QValueList<int> listINT = mLeftFrame->sizes(); 2789 QValueList<int> listINT = mLeftFrame->sizes();
2788 config->writeEntry("Left Splitter Frame",listINT); 2790 config->writeEntry("Left Splitter Frame",listINT);
2789 QValueList<int> listINT2 = mMainFrame->sizes(); 2791 QValueList<int> listINT2 = mMainFrame->sizes();
2790 config->writeEntry("Main Splitter Frame",listINT2); 2792 config->writeEntry("Main Splitter Frame",listINT2);
2791#ifdef DESKTOP_VERSION 2793#ifdef DESKTOP_VERSION
2792 config->setGroup("WidgetLayout"); 2794 config->setGroup("WidgetLayout");
2793 QStringList list ;//= config->readListEntry("MainLayout"); 2795 QStringList list ;//= config->readListEntry("MainLayout");
2794 int x,y,w,h; 2796 int x,y,w,h;
2795 QWidget* wid; 2797 QWidget* wid;
2796 wid = topLevelWidget(); 2798 wid = topLevelWidget();
2797 x = wid->geometry().x(); 2799 x = wid->geometry().x();
2798 y = wid->geometry().y(); 2800 y = wid->geometry().y();
2799 w = wid->width(); 2801 w = wid->width();
2800 h = wid->height(); 2802 h = wid->height();
2801 list.clear(); 2803 list.clear();
2802 list << QString::number( x ); 2804 list << QString::number( x );
2803 list << QString::number( y ); 2805 list << QString::number( y );
2804 list << QString::number( w ); 2806 list << QString::number( w );
2805 list << QString::number( h ); 2807 list << QString::number( h );
2806 config->writeEntry("MainLayout",list ); 2808 config->writeEntry("MainLayout",list );
2807 2809
2808 wid = mEventEditor; 2810 wid = mEventEditor;
2809 x = wid->geometry().x(); 2811 x = wid->geometry().x();
2810 y = wid->geometry().y(); 2812 y = wid->geometry().y();
2811 w = wid->width(); 2813 w = wid->width();
2812 h = wid->height(); 2814 h = wid->height();
2813 list.clear(); 2815 list.clear();
2814 list << QString::number( x ); 2816 list << QString::number( x );
2815 list << QString::number( y ); 2817 list << QString::number( y );
2816 list << QString::number( w ); 2818 list << QString::number( w );
2817 list << QString::number( h ); 2819 list << QString::number( h );
2818 config->writeEntry("EditEventLayout",list ); 2820 config->writeEntry("EditEventLayout",list );
2819 2821
2820 wid = mTodoEditor; 2822 wid = mTodoEditor;
2821 x = wid->geometry().x(); 2823 x = wid->geometry().x();
2822 y = wid->geometry().y(); 2824 y = wid->geometry().y();
2823 w = wid->width(); 2825 w = wid->width();
2824 h = wid->height(); 2826 h = wid->height();
2825 list.clear(); 2827 list.clear();
2826 list << QString::number( x ); 2828 list << QString::number( x );
2827 list << QString::number( y ); 2829 list << QString::number( y );
2828 list << QString::number( w ); 2830 list << QString::number( w );
2829 list << QString::number( h ); 2831 list << QString::number( h );
2830 config->writeEntry("EditTodoLayout",list ); 2832 config->writeEntry("EditTodoLayout",list );
2831 wid = getEventViewerDialog(); 2833 wid = getEventViewerDialog();
2832 x = wid->geometry().x(); 2834 x = wid->geometry().x();
2833 y = wid->geometry().y(); 2835 y = wid->geometry().y();
2834 w = wid->width(); 2836 w = wid->width();
2835 h = wid->height(); 2837 h = wid->height();
2836 list.clear(); 2838 list.clear();
2837 list << QString::number( x ); 2839 list << QString::number( x );
2838 list << QString::number( y ); 2840 list << QString::number( y );
2839 list << QString::number( w ); 2841 list << QString::number( w );
2840 list << QString::number( h ); 2842 list << QString::number( h );
2841 config->writeEntry("ViewerLayout",list ); 2843 config->writeEntry("ViewerLayout",list );
2842 wid = mDialogManager->getSearchDialog(); 2844 wid = mDialogManager->getSearchDialog();
2843 if ( wid ) { 2845 if ( wid ) {
2844 x = wid->geometry().x(); 2846 x = wid->geometry().x();
2845 y = wid->geometry().y(); 2847 y = wid->geometry().y();
2846 w = wid->width(); 2848 w = wid->width();
2847 h = wid->height(); 2849 h = wid->height();
2848 list.clear(); 2850 list.clear();
2849 list << QString::number( x ); 2851 list << QString::number( x );
2850 list << QString::number( y ); 2852 list << QString::number( y );
2851 list << QString::number( w ); 2853 list << QString::number( w );
2852 list << QString::number( h ); 2854 list << QString::number( h );
2853 config->writeEntry("SearchLayout",list ); 2855 config->writeEntry("SearchLayout",list );
2854 } 2856 }
2855#endif 2857#endif
2856 2858
2857 2859
2858 config->sync(); 2860 config->sync();
2859} 2861}
2860 2862
2861void CalendarView::readFilterSettings(KConfig *config) 2863void CalendarView::readFilterSettings(KConfig *config)
2862{ 2864{
2863 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2865 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2864 2866
2865 mFilters.clear(); 2867 mFilters.clear();
2866 2868
2867 config->setGroup("General"); 2869 config->setGroup("General");
2868 QStringList filterList = config->readListEntry("CalendarFilters"); 2870 QStringList filterList = config->readListEntry("CalendarFilters");
2869 2871
2870 QStringList::ConstIterator it = filterList.begin(); 2872 QStringList::ConstIterator it = filterList.begin();
2871 QStringList::ConstIterator end = filterList.end(); 2873 QStringList::ConstIterator end = filterList.end();
2872 while(it != end) { 2874 while(it != end) {
2873 // kdDebug() << " filter: " << (*it) << endl; 2875 // kdDebug() << " filter: " << (*it) << endl;
2874 2876
2875 CalFilter *filter; 2877 CalFilter *filter;
2876 filter = new CalFilter(*it); 2878 filter = new CalFilter(*it);
2877 config->setGroup("Filter_" + (*it).utf8()); 2879 config->setGroup("Filter_" + (*it).utf8());
2878 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2880 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2879 filter->setCriteria(config->readNumEntry("Criteria",0)); 2881 filter->setCriteria(config->readNumEntry("Criteria",0));
2880 filter->setCategoryList(config->readListEntry("CategoryList")); 2882 filter->setCategoryList(config->readListEntry("CategoryList"));
2881 mFilters.append(filter); 2883 mFilters.append(filter);
2882 2884
2883 ++it; 2885 ++it;
2884 } 2886 }
2885 2887
2886 if (mFilters.count() == 0) { 2888 if (mFilters.count() == 0) {
2887 CalFilter *filter = new CalFilter(i18n("Default")); 2889 CalFilter *filter = new CalFilter(i18n("Default"));
2888 mFilters.append(filter); 2890 mFilters.append(filter);
2889 } 2891 }
2890 mFilterView->updateFilters(); 2892 mFilterView->updateFilters();
2891 config->setGroup("FilterView"); 2893 config->setGroup("FilterView");
2892 2894
2893 mFilterView->blockSignals(true); 2895 mFilterView->blockSignals(true);
2894 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2896 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2895 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2897 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2896 mFilterView->blockSignals(false); 2898 mFilterView->blockSignals(false);
2897 // We do it manually to avoid it being done twice by the above calls 2899 // We do it manually to avoid it being done twice by the above calls
2898 updateFilter(); 2900 updateFilter();
2899} 2901}
2900 2902
2901void CalendarView::writeFilterSettings(KConfig *config) 2903void CalendarView::writeFilterSettings(KConfig *config)
2902{ 2904{
2903 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2905 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2904 2906
2905 QStringList filterList; 2907 QStringList filterList;
2906 2908
2907 CalFilter *filter = mFilters.first(); 2909 CalFilter *filter = mFilters.first();
2908 while(filter) { 2910 while(filter) {
2909 // kdDebug() << " fn: " << filter->name() << endl; 2911 // kdDebug() << " fn: " << filter->name() << endl;
2910 filterList << filter->name(); 2912 filterList << filter->name();
2911 config->setGroup("Filter_" + filter->name().utf8()); 2913 config->setGroup("Filter_" + filter->name().utf8());
2912 config->writeEntry("Criteria",filter->criteria()); 2914 config->writeEntry("Criteria",filter->criteria());
2913 config->writeEntry("CategoryList",filter->categoryList()); 2915 config->writeEntry("CategoryList",filter->categoryList());
2914 filter = mFilters.next(); 2916 filter = mFilters.next();
2915 } 2917 }
2916 config->setGroup("General"); 2918 config->setGroup("General");
2917 config->writeEntry("CalendarFilters",filterList); 2919 config->writeEntry("CalendarFilters",filterList);
2918 2920
2919 config->setGroup("FilterView"); 2921 config->setGroup("FilterView");
2920 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2922 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2921 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2923 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2922} 2924}
2923 2925
2924 2926
2925void CalendarView::goToday() 2927void CalendarView::goToday()
2926{ 2928{
2927 if ( mViewManager->currentView()->isMonthView() ) 2929 if ( mViewManager->currentView()->isMonthView() )
2928 mNavigator->selectTodayMonth(); 2930 mNavigator->selectTodayMonth();
2929 else 2931 else
2930 mNavigator->selectToday(); 2932 mNavigator->selectToday();
2931} 2933}
2932 2934
2933void CalendarView::goNext() 2935void CalendarView::goNext()
2934{ 2936{
2935 mNavigator->selectNext(); 2937 mNavigator->selectNext();
2936} 2938}
2937 2939
2938void CalendarView::goPrevious() 2940void CalendarView::goPrevious()
2939{ 2941{
2940 mNavigator->selectPrevious(); 2942 mNavigator->selectPrevious();
2941} 2943}
2942void CalendarView::goNextMonth() 2944void CalendarView::goNextMonth()
2943{ 2945{
2944 mNavigator->selectNextMonth(); 2946 mNavigator->selectNextMonth();
2945} 2947}
2946 2948
2947void CalendarView::goPreviousMonth() 2949void CalendarView::goPreviousMonth()
2948{ 2950{
2949 mNavigator->selectPreviousMonth(); 2951 mNavigator->selectPreviousMonth();
2950} 2952}
2951 2953
2952void CalendarView::updateConfig() 2954void CalendarView::updateConfig()
2953{ 2955{
2954 if ( KOPrefs::instance()->mUseAppColors ) 2956 if ( KOPrefs::instance()->mUseAppColors )
2955 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2957 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2956 emit configChanged(); 2958 emit configChanged();
2957 mTodoList->updateConfig(); 2959 mTodoList->updateConfig();
2958 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2960 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2959 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2961 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2960 // To make the "fill window" configurations work 2962 // To make the "fill window" configurations work
2961 //mViewManager->raiseCurrentView(); 2963 //mViewManager->raiseCurrentView();
2962} 2964}
2963 2965
2964 2966
2965void CalendarView::eventChanged(Event *event) 2967void CalendarView::eventChanged(Event *event)
2966{ 2968{
2967 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2969 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2968 //updateUnmanagedViews(); 2970 //updateUnmanagedViews();
2969} 2971}
2970 2972
2971void CalendarView::eventAdded(Event *event) 2973void CalendarView::eventAdded(Event *event)
2972{ 2974{
2973 changeEventDisplay(event,KOGlobals::EVENTADDED); 2975 changeEventDisplay(event,KOGlobals::EVENTADDED);
2974} 2976}
2975 2977
2976void CalendarView::eventToBeDeleted(Event *) 2978void CalendarView::eventToBeDeleted(Event *)
2977{ 2979{
2978 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2980 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2979} 2981}
2980 2982
2981void CalendarView::eventDeleted() 2983void CalendarView::eventDeleted()
2982{ 2984{
2983 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2985 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2984} 2986}
2985void CalendarView::changeTodoDisplay(Todo *which, int action) 2987void CalendarView::changeTodoDisplay(Todo *which, int action)
2986{ 2988{
2987 changeIncidenceDisplay((Incidence *)which, action); 2989 changeIncidenceDisplay((Incidence *)which, action);
2988 mDateNavigator->updateView(); //LR 2990 mDateNavigator->updateView(); //LR
2989 //mDialogManager->updateSearchDialog(); 2991 //mDialogManager->updateSearchDialog();
2990 2992
2991 if (which) { 2993 if (which) {
2992 mViewManager->updateWNview(); 2994 mViewManager->updateWNview();
2993 //mTodoList->updateView(); 2995 //mTodoList->updateView();
2994 } 2996 }
2995 2997
2996} 2998}
2997 2999
2998void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 3000void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2999{ 3001{
3000 updateUnmanagedViews(); 3002 updateUnmanagedViews();
3001 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 3003 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
3002 if ( action == KOGlobals::EVENTDELETED ) { //delete 3004 if ( action == KOGlobals::EVENTDELETED ) { //delete
3003 mCalendar->checkAlarmForIncidence( 0, true ); 3005 mCalendar->checkAlarmForIncidence( 0, true );
3004 if ( mEventViewerDialog ) 3006 if ( mEventViewerDialog )
3005 mEventViewerDialog->hide(); 3007 mEventViewerDialog->hide();
3006 } 3008 }
3007 else 3009 else
3008 mCalendar->checkAlarmForIncidence( which , false ); 3010 mCalendar->checkAlarmForIncidence( which , false );
3009} 3011}
3010 3012
3011// most of the changeEventDisplays() right now just call the view's 3013// most of the changeEventDisplays() right now just call the view's
3012// total update mode, but they SHOULD be recoded to be more refresh-efficient. 3014// total update mode, but they SHOULD be recoded to be more refresh-efficient.
3013void CalendarView::changeEventDisplay(Event *which, int action) 3015void CalendarView::changeEventDisplay(Event *which, int action)
3014{ 3016{
3015 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 3017 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
3016 changeIncidenceDisplay((Incidence *)which, action); 3018 changeIncidenceDisplay((Incidence *)which, action);
3017 static bool clearallviews = false; 3019 static bool clearallviews = false;
3018 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3020 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3019 if ( clearallviews ) { 3021 if ( clearallviews ) {
3020 clearAllViews(); 3022 clearAllViews();
3021 clearallviews = false; 3023 clearallviews = false;
3022 } 3024 }
3023 return; 3025 return;
3024 } 3026 }
3025 clearallviews = true; 3027 clearallviews = true;
3026 mDateNavigator->updateView(); 3028 mDateNavigator->updateView();
3027 //mDialogManager->updateSearchDialog(); 3029 //mDialogManager->updateSearchDialog();
3028 if (which) { 3030 if (which) {
3029 // If there is an event view visible update the display 3031 // If there is an event view visible update the display
3030 mViewManager->currentView()->changeEventDisplay(which,action); 3032 mViewManager->currentView()->changeEventDisplay(which,action);
3031 // TODO: check, if update needed 3033 // TODO: check, if update needed
3032 // if (which->getTodoStatus()) { 3034 // if (which->getTodoStatus()) {
3033 mTodoList->updateView(); 3035 mTodoList->updateView();
3034 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) { 3036 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) {
3035 mConflictingEvent = which ; 3037 mConflictingEvent = which ;
3036 int time = 1000; 3038 int time = 1000;
3037#ifdef DESKTOP_VERSION 3039#ifdef DESKTOP_VERSION
3038 time = 500; 3040 time = 500;
3039#endif 3041#endif
3040 bool checkC = false; 3042 bool checkC = false;
3041 if ( mConflictingEvent->doesFloat() ) { 3043 if ( mConflictingEvent->doesFloat() ) {
3042 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay 3044 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay
3043 || KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3045 || KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3044 } else { 3046 } else {
3045 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay 3047 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay
3046 || KOPrefs::instance()->mCheckConflictsNonADNonAD; 3048 || KOPrefs::instance()->mCheckConflictsNonADNonAD;
3047 } 3049 }
3048 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent ) 3050 if ( !KOPrefs::instance()->mIncludeFree && mConflictingEvent->transparency() == KCal::Event::Transparent )
3049 checkC = false; 3051 checkC = false;
3050 if ( checkC ) 3052 if ( checkC )
3051 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3053 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
3052 } 3054 }
3053 // } 3055 // }
3054 } else { 3056 } else {
3055 mViewManager->currentView()->updateView(); 3057 mViewManager->currentView()->updateView();
3056 } 3058 }
3057} 3059}
3058void CalendarView::checkConflictForEvent() 3060void CalendarView::checkConflictForEvent()
3059{ 3061{
3060 3062
3061 if (!KOPrefs::instance()->mConfirm) 3063 if (!KOPrefs::instance()->mConfirm)
3062 return; 3064 return;
3063 if ( ! mConflictingEvent ) return; 3065 if ( ! mConflictingEvent ) return;
3064 Event * conflictingEvent = mConflictingEvent; 3066 Event * conflictingEvent = mConflictingEvent;
3065 mConflictingEvent = 0; 3067 mConflictingEvent = 0;
3066 QDateTime current = QDateTime::currentDateTime(); 3068 QDateTime current = QDateTime::currentDateTime();
3067 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3069 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3068 return; 3070 return;
3069 } 3071 }
3070 CalFilter *filterIN = 0; 3072 CalFilter *filterIN = 0;
3071 CalFilter *filterALL = 0; 3073 CalFilter *filterALL = 0;
3072 CalFilter *filter = mFilters.first(); 3074 CalFilter *filter = mFilters.first();
3073 while(filter) { 3075 while(filter) {
3074 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem) 3076 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem)
3075 filterIN = filter; 3077 filterIN = filter;
3076 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem ) 3078 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem )
3077 filterALL = filter; 3079 filterALL = filter;
3078 filter = mFilters.next(); 3080 filter = mFilters.next();
3079 } 3081 }
3080 if ( filterIN ) { 3082 if ( filterIN ) {
3081 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) { 3083 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) {
3082 return; 3084 return;
3083 } 3085 }
3084 } 3086 }
3085 QPtrList<Event> testlist = mCalendar->events(); 3087 QPtrList<Event> testlist = mCalendar->events();
3086 Event * test = testlist.first(); 3088 Event * test = testlist.first();
3087 QDateTime conflict; 3089 QDateTime conflict;
3088 QDateTime retVal; 3090 QDateTime retVal;
3089 bool found = false; 3091 bool found = false;
3090 Event * cE = 0; 3092 Event * cE = 0;
3091 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay; 3093 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay;
3092 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3094 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3093 if ( !conflictingEvent->doesFloat() ) { 3095 if ( !conflictingEvent->doesFloat() ) {
3094 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay; 3096 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay;
3095 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD; 3097 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD;
3096 } 3098 }
3097 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3099 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3098 while ( test ) { 3100 while ( test ) {
3099 qApp->processEvents(); 3101 qApp->processEvents();
3100 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad ); 3102 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad );
3101 3103
3102 if ( !skip ) { 3104 if ( !skip ) {
3103 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent ) 3105 if ( !KOPrefs::instance()->mIncludeFree && test->transparency() == KCal::Event::Transparent )
3104 skip = true; 3106 skip = true;
3105 } 3107 }
3106 if ( !skip ) { 3108 if ( !skip ) {
3107 if ( filterALL ) { 3109 if ( filterALL ) {
3108 if ( !filterALL->filterCalendarItem( test ) ) { 3110 if ( !filterALL->filterCalendarItem( test ) ) {
3109 skip = true; 3111 skip = true;
3110 } 3112 }
3111 } 3113 }
3112 if ( !skip ) { 3114 if ( !skip ) {
3113 if ( found ) 3115 if ( found )
3114 skip = !test->matchTime( &current, &conflict ); 3116 skip = !test->matchTime( &current, &conflict );
3115 else 3117 else
3116 skip = !test->matchTime( &current, 0 ); 3118 skip = !test->matchTime( &current, 0 );
3117 if ( !skip ) { 3119 if ( !skip ) {
3118 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3120 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3119 if ( ! found ) { 3121 if ( ! found ) {
3120 conflict = retVal; 3122 conflict = retVal;
3121 cE = test; 3123 cE = test;
3122 } else { 3124 } else {
3123 if ( retVal < conflict ) { 3125 if ( retVal < conflict ) {
3124 conflict = retVal; 3126 conflict = retVal;
3125 cE = test; 3127 cE = test;
3126 } 3128 }
3127 } 3129 }
3128 found = true; 3130 found = true;
3129 } 3131 }
3130 } 3132 }
3131 } 3133 }
3132 } 3134 }
3133 test = testlist.next(); 3135 test = testlist.next();
3134 } 3136 }
3135 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3137 topLevelWidget()->setCaption( i18n("KO/Pi") );
3136 if ( found ) { 3138 if ( found ) {
3137 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 3139 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
3138 qApp->processEvents(); 3140 qApp->processEvents();
3139 int km = KMessageBox::warningContinueCancel(this,mess, 3141 int km = KMessageBox::warningContinueCancel(this,mess,
3140 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!")); 3142 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!"));
3141 if ( km != KMessageBox::Continue ) { 3143 if ( km != KMessageBox::Continue ) {
3142 return; 3144 return;
3143 } 3145 }
3144 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3146 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3145 mViewManager->showDayView(); 3147 mViewManager->showDayView();
3146 mNavigator->slotDaySelect( conflict.date() ); 3148 mNavigator->slotDaySelect( conflict.date() );
3147 int hour = conflict.time().hour(); 3149 int hour = conflict.time().hour();
3148 mViewManager->agendaView()->setStartHour( hour ); 3150 mViewManager->agendaView()->setStartHour( hour );
3149 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3151 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3150 } else 3152 } else
3151 topLevelWidget()->setCaption( i18n("No conflict found") ); 3153 topLevelWidget()->setCaption( i18n("No conflict found") );
3152 return; 3154 return;
3153 3155
3154} 3156}
3155 3157
3156void CalendarView::updateTodoViews() 3158void CalendarView::updateTodoViews()
3157{ 3159{
3158 mTodoList->updateView(); 3160 mTodoList->updateView();
3159 mViewManager->currentView()->updateView(); 3161 mViewManager->currentView()->updateView();
3160 3162
3161} 3163}
3162 3164
3163 3165
3164 3166
3165void CalendarView::clearAllViews() 3167void CalendarView::clearAllViews()
3166{ 3168{
3167 mTodoList->clearList(); 3169 mTodoList->clearList();
3168 mViewManager->clearAllViews(); 3170 mViewManager->clearAllViews();
3169 SearchDialog * sd = mDialogManager->getSearchDialog(); 3171 SearchDialog * sd = mDialogManager->getSearchDialog();
3170 if ( sd ) { 3172 if ( sd ) {
3171 KOListView* kol = sd->listview(); 3173 KOListView* kol = sd->listview();
3172 if ( kol ) 3174 if ( kol )
3173 kol->clearList(); 3175 kol->clearList();
3174 } 3176 }
3175} 3177}
3176void CalendarView::updateView() 3178void CalendarView::updateView()
3177{ 3179{
3178 static bool clearallviews = false; 3180 static bool clearallviews = false;
3179 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3181 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3180 if ( clearallviews ) { 3182 if ( clearallviews ) {
3181 clearAllViews(); 3183 clearAllViews();
3182 clearallviews = false; 3184 clearallviews = false;
3183 } 3185 }
3184 return; 3186 return;
3185 } 3187 }
3186 clearallviews = true; 3188 clearallviews = true;
3187 DateList tmpList = mNavigator->selectedDates(); 3189 DateList tmpList = mNavigator->selectedDates();
3188 3190
3189 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3191 if ( KOPrefs::instance()->mHideNonStartedTodos )
3190 mTodoList->updateView(); 3192 mTodoList->updateView();
3191 // We assume that the navigator only selects consecutive days. 3193 // We assume that the navigator only selects consecutive days.
3192 updateView( tmpList.first(), tmpList.last() ); 3194 updateView( tmpList.first(), tmpList.last() );
3193} 3195}
3194 3196
3195void CalendarView::updateUnmanagedViews() 3197void CalendarView::updateUnmanagedViews()
3196{ 3198{
3197 mDateNavigator->updateDayMatrix(); 3199 mDateNavigator->updateDayMatrix();
3198} 3200}
3199 3201
3200int CalendarView::msgItemDelete(const QString name) 3202int CalendarView::msgItemDelete(const QString name)
3201{ 3203{
3202 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3204 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3203 i18n("This item will be\npermanently deleted."), 3205 i18n("This item will be\npermanently deleted."),
3204 i18n("KO/Pi Confirmation"),i18n("Delete")); 3206 i18n("KO/Pi Confirmation"),i18n("Delete"));
3205} 3207}
3206 3208
3207 3209
3208void CalendarView::edit_cut() 3210void CalendarView::edit_cut()
3209{ 3211{
3210 Event *anEvent=0; 3212 Event *anEvent=0;
3211 3213
3212 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3214 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3213 3215
3214 if (mViewManager->currentView()->isEventView()) { 3216 if (mViewManager->currentView()->isEventView()) {
3215 if ( incidence && incidence->typeID() == eventID ) { 3217 if ( incidence && incidence->typeID() == eventID ) {
3216 anEvent = static_cast<Event *>(incidence); 3218 anEvent = static_cast<Event *>(incidence);
3217 } 3219 }
3218 } 3220 }
3219 3221
3220 if (!anEvent) { 3222 if (!anEvent) {
3221 KNotifyClient::beep(); 3223 KNotifyClient::beep();
3222 return; 3224 return;
3223 } 3225 }
3224 DndFactory factory( mCalendar ); 3226 DndFactory factory( mCalendar );
3225 factory.cutIncidence(anEvent); 3227 factory.cutIncidence(anEvent);
3226 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3228 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3227} 3229}
3228 3230
3229void CalendarView::edit_copy() 3231void CalendarView::edit_copy()
3230{ 3232{
3231 Event *anEvent=0; 3233 Event *anEvent=0;
3232 3234
3233 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3235 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3234 3236
3235 if (mViewManager->currentView()->isEventView()) { 3237 if (mViewManager->currentView()->isEventView()) {
3236 if ( incidence && incidence->typeID() == eventID ) { 3238 if ( incidence && incidence->typeID() == eventID ) {
3237 anEvent = static_cast<Event *>(incidence); 3239 anEvent = static_cast<Event *>(incidence);
3238 } 3240 }
3239 } 3241 }
3240 3242
3241 if (!anEvent) { 3243 if (!anEvent) {
3242 KNotifyClient::beep(); 3244 KNotifyClient::beep();
3243 return; 3245 return;
3244 } 3246 }
3245 DndFactory factory( mCalendar ); 3247 DndFactory factory( mCalendar );
3246 factory.copyIncidence(anEvent); 3248 factory.copyIncidence(anEvent);
3247} 3249}
3248 3250
3249void CalendarView::edit_paste() 3251void CalendarView::edit_paste()
3250{ 3252{
3251 QDate date = mNavigator->selectedDates().first(); 3253 QDate date = mNavigator->selectedDates().first();
3252 3254
3253 DndFactory factory( mCalendar ); 3255 DndFactory factory( mCalendar );
3254 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3256 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3255 3257
3256 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3258 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3257} 3259}
3258void CalendarView::edit_global_options() 3260void CalendarView::edit_global_options()
3259{ 3261{
3260 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3262 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3261 emit save(); 3263 emit save();
3262 emit saveStopTimer(); 3264 emit saveStopTimer();
3263 mDialogManager->showGlobalOptionsDialog(); 3265 mDialogManager->showGlobalOptionsDialog();
3264 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3266 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3265 emit saveStopTimer(); 3267 emit saveStopTimer();
3266 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 3268 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
3267 i18n("Timezone settings"),i18n("Reload"))) { 3269 i18n("Timezone settings"),i18n("Reload"))) {
3268 qDebug("KO: TZ reload cancelled "); 3270 qDebug("KO: TZ reload cancelled ");
3269 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3271 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3270 return; 3272 return;
3271 } 3273 }
3272 qDebug("KO: Timezone change "); 3274 qDebug("KO: Timezone change ");
3273 loadCalendars(); 3275 loadCalendars();
3274 setModified(true); 3276 setModified(true);
3275 } 3277 }
3276 else 3278 else
3277 qDebug("KO: No tz change "); 3279 qDebug("KO: No tz change ");
3278} 3280}
3279void CalendarView::edit_options() 3281void CalendarView::edit_options()
3280{ 3282{
3281 mDialogManager->showOptionsDialog(); 3283 mDialogManager->showOptionsDialog();
3282} 3284}
3283 3285
3284 3286
3285void CalendarView::slotSelectPickerDate( QDate d) 3287void CalendarView::slotSelectPickerDate( QDate d)
3286{ 3288{
3287 mDateFrame->hide(); 3289 mDateFrame->hide();
3288 if ( mDatePickerMode == 1 ) { 3290 if ( mDatePickerMode == 1 ) {
3289 mNavigator->slotDaySelect( d ); 3291 mNavigator->slotDaySelect( d );
3290 } else if ( mDatePickerMode == 2 ) { 3292 } else if ( mDatePickerMode == 2 ) {
3291 if ( mMoveIncidence->typeID() == todoID ) { 3293 if ( mMoveIncidence->typeID() == todoID ) {
3292 Todo * to = (Todo *) mMoveIncidence; 3294 Todo * to = (Todo *) mMoveIncidence;
3293 QTime tim; 3295 QTime tim;
3294 int len = 0; 3296 int len = 0;
3295 if ( to->hasStartDate() && to->hasDueDate() ) 3297 if ( to->hasStartDate() && to->hasDueDate() )
3296 len = to->dtStart().secsTo( to->dtDue()); 3298 len = to->dtStart().secsTo( to->dtDue());
3297 if ( to->hasDueDate() ) 3299 if ( to->hasDueDate() )
3298 tim = to->dtDue().time(); 3300 tim = to->dtDue().time();
3299 else { 3301 else {
3300 tim = QTime ( 0,0,0 ); 3302 tim = QTime ( 0,0,0 );
3301 to->setFloats( true ); 3303 to->setFloats( true );
3302 to->setHasDueDate( true ); 3304 to->setHasDueDate( true );
3303 } 3305 }
3304 QDateTime dt ( d,tim ); 3306 QDateTime dt ( d,tim );
3305 to->setDtDue( dt ); 3307 to->setDtDue( dt );
3306 3308
3307 if ( to->hasStartDate() ) { 3309 if ( to->hasStartDate() ) {
3308 if ( len>0 ) 3310 if ( len>0 )
3309 to->setDtStart(to->dtDue().addSecs( -len )); 3311 to->setDtStart(to->dtDue().addSecs( -len ));
3310 else 3312 else
3311 if (to->dtStart() > to->dtDue() ) 3313 if (to->dtStart() > to->dtDue() )
3312 to->setDtStart(to->dtDue().addDays( -3 )); 3314 to->setDtStart(to->dtDue().addDays( -3 ));
3313 } 3315 }
3314 3316
3315 todoChanged( to ); 3317 todoChanged( to );
3316 } else if ( mMoveIncidence->typeID() == eventID ) { 3318 } else if ( mMoveIncidence->typeID() == eventID ) {
3317 if ( mMoveIncidence->doesRecur() ) { 3319 if ( mMoveIncidence->doesRecur() ) {
3318#if 0 3320#if 0
3319 // PENDING implement this 3321 // PENDING implement this
3320 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3322 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3321 mCalendar()->addIncidence( newInc ); 3323 mCalendar()->addIncidence( newInc );
3322 if ( mMoveIncidence->typeID() == todoID ) 3324 if ( mMoveIncidence->typeID() == todoID )
3323 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3325 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3324 else 3326 else
3325 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3327 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3326 mMoveIncidence = newInc; 3328 mMoveIncidence = newInc;
3327 3329
3328#endif 3330#endif
3329 } 3331 }
3330 QTime tim = mMoveIncidence->dtStart().time(); 3332 QTime tim = mMoveIncidence->dtStart().time();
3331 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3333 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3332 QDateTime dt ( d,tim ); 3334 QDateTime dt ( d,tim );
3333 mMoveIncidence->setDtStart( dt ); 3335 mMoveIncidence->setDtStart( dt );
3334 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3336 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3335 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3337 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3336 } else if ( mMoveIncidence->typeID() == journalID ) { 3338 } else if ( mMoveIncidence->typeID() == journalID ) {
3337 QTime tim = mMoveIncidence->dtStart().time(); 3339 QTime tim = mMoveIncidence->dtStart().time();
3338 QDateTime dt ( d,tim ); 3340 QDateTime dt ( d,tim );
3339 mMoveIncidence->setDtStart( dt ); 3341 mMoveIncidence->setDtStart( dt );
3340 updateView(); 3342 updateView();
3341 } 3343 }
3342 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3344 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3343 } 3345 }
3344} 3346}
3345 3347
3346void CalendarView::removeCategories() 3348void CalendarView::removeCategories()
3347{ 3349{
3348 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3350 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3349 QStringList catList = KOPrefs::instance()->mCustomCategories; 3351 QStringList catList = KOPrefs::instance()->mCustomCategories;
3350 QStringList catIncList; 3352 QStringList catIncList;
3351 QStringList newCatList; 3353 QStringList newCatList;
3352 Incidence* inc = incList.first(); 3354 Incidence* inc = incList.first();
3353 uint i; 3355 uint i;
3354 while ( inc ) { 3356 while ( inc ) {
3355 newCatList.clear(); 3357 newCatList.clear();
3356 catIncList = inc->categories() ; 3358 catIncList = inc->categories() ;
3357 for( i = 0; i< catIncList.count(); ++i ) { 3359 for( i = 0; i< catIncList.count(); ++i ) {
3358 if ( catList.contains (catIncList[i])) 3360 if ( catList.contains (catIncList[i]))
3359 newCatList.append( catIncList[i] ); 3361 newCatList.append( catIncList[i] );
3360 } 3362 }
3361 newCatList.sort(); 3363 newCatList.sort();
3362 inc->setCategories( newCatList.join(",") ); 3364 inc->setCategories( newCatList.join(",") );
3363 inc = incList.next(); 3365 inc = incList.next();
3364 } 3366 }
3365} 3367}
3366 3368
3367int CalendarView::addCategories() 3369int CalendarView::addCategories()
3368{ 3370{
3369 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3371 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3370 QStringList catList = KOPrefs::instance()->mCustomCategories; 3372 QStringList catList = KOPrefs::instance()->mCustomCategories;
3371 QStringList catIncList; 3373 QStringList catIncList;
3372 Incidence* inc = incList.first(); 3374 Incidence* inc = incList.first();
3373 uint i; 3375 uint i;
3374 int count = 0; 3376 int count = 0;
3375 while ( inc ) { 3377 while ( inc ) {
3376 catIncList = inc->categories() ; 3378 catIncList = inc->categories() ;
3377 for( i = 0; i< catIncList.count(); ++i ) { 3379 for( i = 0; i< catIncList.count(); ++i ) {
3378 if ( !catList.contains (catIncList[i])) { 3380 if ( !catList.contains (catIncList[i])) {
3379 catList.append( catIncList[i] ); 3381 catList.append( catIncList[i] );
3380 //qDebug("add cat %s ", catIncList[i].latin1()); 3382 //qDebug("add cat %s ", catIncList[i].latin1());
3381 ++count; 3383 ++count;
3382 } 3384 }
3383 } 3385 }
3384 inc = incList.next(); 3386 inc = incList.next();
3385 } 3387 }
3386 catList.sort(); 3388 catList.sort();
3387 KOPrefs::instance()->mCustomCategories = catList; 3389 KOPrefs::instance()->mCustomCategories = catList;
3388 return count; 3390 return count;
3389} 3391}
3390 3392
3391void CalendarView::editCategories() 3393void CalendarView::editCategories()
3392{ 3394{
3393 qDebug("CalendarView::editCategories() "); 3395 qDebug("CalendarView::editCategories() ");
3394 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3396 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3395 ced.exec(); 3397 ced.exec();
3396} 3398}
3397void CalendarView::manageCategories() 3399void CalendarView::manageCategories()
3398{ 3400{
3399 KOCatPrefs* cp = new KOCatPrefs(); 3401 KOCatPrefs* cp = new KOCatPrefs();
3400 cp->show(); 3402 cp->show();
3401 int w =cp->sizeHint().width() ; 3403 int w =cp->sizeHint().width() ;
3402 int h = cp->sizeHint().height() ; 3404 int h = cp->sizeHint().height() ;
3403 int dw = QApplication::desktop()->width(); 3405 int dw = QApplication::desktop()->width();
3404 int dh = QApplication::desktop()->height(); 3406 int dh = QApplication::desktop()->height();
3405 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3407 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3406 if ( !cp->exec() ) { 3408 if ( !cp->exec() ) {
3407 delete cp; 3409 delete cp;
3408 return; 3410 return;
3409 } 3411 }
3410 int count = 0; 3412 int count = 0;
3411 if ( cp->addCat() ) { 3413 if ( cp->addCat() ) {
3412 count = addCategories(); 3414 count = addCategories();
3413 if ( count ) { 3415 if ( count ) {
3414 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3416 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3415 writeSettings(); 3417 writeSettings();
3416 } else 3418 } else
3417 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3419 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3418 } else { 3420 } else {
3419 removeCategories(); 3421 removeCategories();
3420 updateView(); 3422 updateView();
3421 } 3423 }
3422 delete cp; 3424 delete cp;
3423} 3425}
3424 3426
3425void CalendarView::beamIncidence(Incidence * Inc) 3427void CalendarView::beamIncidence(Incidence * Inc)
3426{ 3428{
3427 QPtrList<Incidence> delSel ; 3429 QPtrList<Incidence> delSel ;
3428 delSel.append(Inc); 3430 delSel.append(Inc);
3429 beamIncidenceList( delSel ); 3431 beamIncidenceList( delSel );
3430} 3432}
3431void CalendarView::beamCalendar() 3433void CalendarView::beamCalendar()
3432{ 3434{
3433 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3435 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3434 //qDebug("beamCalendar() "); 3436 //qDebug("beamCalendar() ");
3435 beamIncidenceList( delSel ); 3437 beamIncidenceList( delSel );
3436} 3438}
3437void CalendarView::beamFilteredCalendar() 3439void CalendarView::beamFilteredCalendar()
3438{ 3440{
3439 QPtrList<Incidence> delSel = mCalendar->incidences(); 3441 QPtrList<Incidence> delSel = mCalendar->incidences();
3440 //qDebug("beamFilteredCalendar() "); 3442 //qDebug("beamFilteredCalendar() ");
3441 beamIncidenceList( delSel ); 3443 beamIncidenceList( delSel );
3442} 3444}
3443void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3445void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3444{ 3446{
3445 3447
3446 KOBeamPrefs beamDialog; 3448 KOBeamPrefs beamDialog;
3447 if ( beamDialog.exec () == QDialog::Rejected ) 3449 if ( beamDialog.exec () == QDialog::Rejected )
3448 return; 3450 return;
3449#ifdef DESKTOP_VERSION 3451#ifdef DESKTOP_VERSION
3450 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3452 QString fn = locateLocal( "tmp", "kopibeamfile" );
3451#else 3453#else
3452 QString fn = "/tmp/kopibeamfile"; 3454 QString fn = "/tmp/kopibeamfile";
3453#endif 3455#endif
3454 QString mes; 3456 QString mes;
3455 bool createbup = true; 3457 bool createbup = true;
3456 if ( createbup ) { 3458 if ( createbup ) {
3457 QString description = "\n"; 3459 QString description = "\n";
3458 CalendarLocal* cal = new CalendarLocal(); 3460 CalendarLocal* cal = new CalendarLocal();
3459 if ( beamDialog.beamLocal() ) 3461 if ( beamDialog.beamLocal() )
3460 cal->setLocalTime(); 3462 cal->setLocalTime();
3461 else 3463 else
3462 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3464 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3463 Incidence *incidence = delSel.first(); 3465 Incidence *incidence = delSel.first();
3464 bool addText = false; 3466 bool addText = false;
3465 if ( delSel.count() < 10 ) 3467 if ( delSel.count() < 10 )
3466 addText = true; 3468 addText = true;
3467 else { 3469 else {
3468 description.sprintf(i18n(" %d items?"),delSel.count() ); 3470 description.sprintf(i18n(" %d items?"),delSel.count() );
3469 } 3471 }
3470 while ( incidence ) { 3472 while ( incidence ) {
3471 Incidence *in = incidence->clone(); 3473 Incidence *in = incidence->clone();
3472 if ( ! in->summary().isEmpty() ) { 3474 if ( ! in->summary().isEmpty() ) {
3473 in->setDescription(""); 3475 in->setDescription("");
3474 } else { 3476 } else {
3475 in->setSummary( in->description().left(20)); 3477 in->setSummary( in->description().left(20));
3476 in->setDescription(""); 3478 in->setDescription("");
3477 } 3479 }
3478 if ( addText ) 3480 if ( addText )
3479 description += in->summary() + "\n"; 3481 description += in->summary() + "\n";
3480 cal->addIncidence( in ); 3482 cal->addIncidence( in );
3481 incidence = delSel.next(); 3483 incidence = delSel.next();
3482 } 3484 }
3483 if ( beamDialog.beamVcal() ) { 3485 if ( beamDialog.beamVcal() ) {
3484 fn += ".vcs"; 3486 fn += ".vcs";
3485 FileStorage storage( cal, fn, new VCalFormat ); 3487 FileStorage storage( cal, fn, new VCalFormat );
3486 storage.save(); 3488 storage.save();
3487 } else { 3489 } else {
3488 fn += ".ics"; 3490 fn += ".ics";
3489 FileStorage storage( cal, fn, new ICalFormat( ) ); 3491 FileStorage storage( cal, fn, new ICalFormat( ) );
3490 storage.save(); 3492 storage.save();
3491 } 3493 }
3492 delete cal; 3494 delete cal;
3493 mes = i18n("KO/Pi: Ready for beaming"); 3495 mes = i18n("KO/Pi: Ready for beaming");
3494 topLevelWidget()->setCaption(mes); 3496 topLevelWidget()->setCaption(mes);
3495 KApplication::convert2latin1( fn ); 3497 KApplication::convert2latin1( fn );
3496#ifndef DESKTOP_VERSION 3498#ifndef DESKTOP_VERSION
3497 Ir *ir = new Ir( this ); 3499 Ir *ir = new Ir( this );
3498 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3500 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3499 ir->send( fn, description, "text/x-vCalendar" ); 3501 ir->send( fn, description, "text/x-vCalendar" );
3500#endif 3502#endif
3501 } 3503 }
3502} 3504}
3503 3505
3504#ifndef DESKTOP_VERSION 3506#ifndef DESKTOP_VERSION
3505void CalendarView::beamDone( Ir *ir ) 3507void CalendarView::beamDone( Ir *ir )
3506{ 3508{
3507 delete ir; 3509 delete ir;
3508 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3510 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3509 topLevelWidget()->raise(); 3511 topLevelWidget()->raise();
3510} 3512}
3511#else 3513#else
3512void CalendarView::beamDone( Ir *){;} 3514void CalendarView::beamDone( Ir *){;}
3513#endif 3515#endif
3514void CalendarView::moveIncidence(Incidence * inc ) 3516void CalendarView::moveIncidence(Incidence * inc )
3515{ 3517{
3516 if ( !inc ) return; 3518 if ( !inc ) return;
3517 showDatePickerPopup(); 3519 showDatePickerPopup();
3518 mDatePickerMode = 2; 3520 mDatePickerMode = 2;
3519 mMoveIncidence = inc ; 3521 mMoveIncidence = inc ;
3520 QDate da; 3522 QDate da;
3521 if ( mMoveIncidence->typeID() == todoID ) { 3523 if ( mMoveIncidence->typeID() == todoID ) {
3522 Todo * to = (Todo *) mMoveIncidence; 3524 Todo * to = (Todo *) mMoveIncidence;
3523 if ( to->hasDueDate() ) 3525 if ( to->hasDueDate() )
3524 da = to->dtDue().date(); 3526 da = to->dtDue().date();
3525 else 3527 else
3526 da = QDate::currentDate(); 3528 da = QDate::currentDate();
3527 } else { 3529 } else {
3528 da = mMoveIncidence->dtStart().date(); 3530 da = mMoveIncidence->dtStart().date();
3529 } 3531 }
3530 //PENDING set date for recurring incidence to date of recurrence 3532 //PENDING set date for recurring incidence to date of recurrence
3531 //mMoveIncidenceOldDate; 3533 //mMoveIncidenceOldDate;
3532 mDatePicker->setDate( da ); 3534 mDatePicker->setDate( da );
3533} 3535}
3534void CalendarView::showDatePickerPopup() 3536void CalendarView::showDatePickerPopup()
3535{ 3537{
3536 if ( mDateFrame->isVisible() ) 3538 if ( mDateFrame->isVisible() )
3537 mDateFrame->hide(); 3539 mDateFrame->hide();
3538 else { 3540 else {
3539 int offX = 0, offY = 0; 3541 int offX = 0, offY = 0;
3540#ifdef DESKTOP_VERSION 3542#ifdef DESKTOP_VERSION
3541 int w =mDatePicker->sizeHint().width() ; 3543 int w =mDatePicker->sizeHint().width() ;
3542 int h = mDatePicker->sizeHint().height() ; 3544 int h = mDatePicker->sizeHint().height() ;
3543 int dw = topLevelWidget()->width(); 3545 int dw = topLevelWidget()->width();
3544 int dh = topLevelWidget()->height(); 3546 int dh = topLevelWidget()->height();
3545 offX = topLevelWidget()->x(); 3547 offX = topLevelWidget()->x();
3546 offY = topLevelWidget()->y(); 3548 offY = topLevelWidget()->y();
3547#else 3549#else
3548 int w =mDatePicker->sizeHint().width() ; 3550 int w =mDatePicker->sizeHint().width() ;
3549 int h = mDatePicker->sizeHint().height() ; 3551 int h = mDatePicker->sizeHint().height() ;
3550 int dw = QApplication::desktop()->width(); 3552 int dw = QApplication::desktop()->width();
3551 int dh = QApplication::desktop()->height(); 3553 int dh = QApplication::desktop()->height();
3552#endif 3554#endif
3553 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3555 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3554 mDateFrame->show(); 3556 mDateFrame->show();
3555 } 3557 }
3556} 3558}
3557void CalendarView::showDatePicker( ) 3559void CalendarView::showDatePicker( )
3558{ 3560{
3559 showDatePickerPopup(); 3561 showDatePickerPopup();
3560 mDatePickerMode = 1; 3562 mDatePickerMode = 1;
3561 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3563 mDatePicker->setDate( mNavigator->selectedDates().first() );
3562} 3564}
3563 3565
3564void CalendarView::showEventEditor() 3566void CalendarView::showEventEditor()
3565{ 3567{
3566#ifdef DESKTOP_VERSION 3568#ifdef DESKTOP_VERSION
3567 int x,y,w,h; 3569 int x,y,w,h;
3568 x = mEventEditor->geometry().x(); 3570 x = mEventEditor->geometry().x();
3569 y = mEventEditor->geometry().y(); 3571 y = mEventEditor->geometry().y();
3570 w = mEventEditor->width(); 3572 w = mEventEditor->width();
3571 h = mEventEditor->height(); 3573 h = mEventEditor->height();
3572 mEventEditor->show(); 3574 mEventEditor->show();
3573 mEventEditor->setGeometry(x,y,w,h); 3575 mEventEditor->setGeometry(x,y,w,h);
3574#else 3576#else
3575 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3577 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3576 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3578 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3577 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3579 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3578 qApp->processEvents(); 3580 qApp->processEvents();
3579 delete mEventEditor; 3581 delete mEventEditor;
3580 mEventEditor = mDialogManager->getEventEditor(); 3582 mEventEditor = mDialogManager->getEventEditor();
3581 topLevelWidget()->setCaption( i18n("") ); 3583 topLevelWidget()->setCaption( i18n("") );
3582 } 3584 }
3583 mEventEditor->showMaximized(); 3585 mEventEditor->showMaximized();
3584#endif 3586#endif
3585} 3587}
3586void CalendarView::showTodoEditor() 3588void CalendarView::showTodoEditor()
3587{ 3589{
3588#ifdef DESKTOP_VERSION 3590#ifdef DESKTOP_VERSION
3589 int x,y,w,h; 3591 int x,y,w,h;
3590 x = mTodoEditor->geometry().x(); 3592 x = mTodoEditor->geometry().x();
3591 y = mTodoEditor->geometry().y(); 3593 y = mTodoEditor->geometry().y();
3592 w = mTodoEditor->width(); 3594 w = mTodoEditor->width();
3593 h = mTodoEditor->height(); 3595 h = mTodoEditor->height();
3594 mTodoEditor->show(); 3596 mTodoEditor->show();
3595 mTodoEditor->setGeometry(x,y,w,h); 3597 mTodoEditor->setGeometry(x,y,w,h);
3596#else 3598#else
3597 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3599 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3598 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3600 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3599 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3601 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3600 qApp->processEvents(); 3602 qApp->processEvents();
3601 delete mTodoEditor; 3603 delete mTodoEditor;
3602 mTodoEditor = mDialogManager->getTodoEditor(); 3604 mTodoEditor = mDialogManager->getTodoEditor();
3603 topLevelWidget()->setCaption( i18n("") ); 3605 topLevelWidget()->setCaption( i18n("") );
3604 } 3606 }
3605 mTodoEditor->showMaximized(); 3607 mTodoEditor->showMaximized();
3606#endif 3608#endif
3607} 3609}
3608 3610
3609void CalendarView::cloneIncidence() 3611void CalendarView::cloneIncidence()
3610{ 3612{
3611 Incidence *incidence = currentSelection(); 3613 Incidence *incidence = currentSelection();
3612 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3614 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3613 if ( incidence ) { 3615 if ( incidence ) {
3614 cloneIncidence(incidence); 3616 cloneIncidence(incidence);
3615 } 3617 }
3616} 3618}
3617void CalendarView::moveIncidence() 3619void CalendarView::moveIncidence()
3618{ 3620{
3619 Incidence *incidence = currentSelection(); 3621 Incidence *incidence = currentSelection();
3620 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3622 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3621 if ( incidence ) { 3623 if ( incidence ) {
3622 moveIncidence(incidence); 3624 moveIncidence(incidence);
3623 } 3625 }
3624} 3626}
3625void CalendarView::beamIncidence() 3627void CalendarView::beamIncidence()
3626{ 3628{
3627 Incidence *incidence = currentSelection(); 3629 Incidence *incidence = currentSelection();
3628 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3630 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3629 if ( incidence ) { 3631 if ( incidence ) {
3630 beamIncidence(incidence); 3632 beamIncidence(incidence);
3631 } 3633 }
3632} 3634}
3633void CalendarView::toggleCancelIncidence() 3635void CalendarView::toggleCancelIncidence()
3634{ 3636{
3635 Incidence *incidence = currentSelection(); 3637 Incidence *incidence = currentSelection();
3636 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3638 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3637 if ( incidence ) { 3639 if ( incidence ) {
3638 cancelIncidence(incidence); 3640 cancelIncidence(incidence);
3639 } 3641 }
3640} 3642}
3641 3643
3642 3644
3643void CalendarView::cancelIncidence(Incidence * inc ) 3645void CalendarView::cancelIncidence(Incidence * inc )
3644{ 3646{
3645 inc->setCancelled( ! inc->cancelled() ); 3647 inc->setCancelled( ! inc->cancelled() );
3646 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3648 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3647 updateView(); 3649 updateView();
3648} 3650}
3649void CalendarView::cloneIncidence(Incidence * orgInc ) 3651void CalendarView::cloneIncidence(Incidence * orgInc )
3650{ 3652{
3651 Incidence * newInc = orgInc->clone(); 3653 Incidence * newInc = orgInc->clone();
3652 newInc->recreate(); 3654 newInc->recreate();
3653 3655
3654 if ( newInc->typeID() == todoID ) { 3656 if ( newInc->typeID() == todoID ) {
3655 Todo* t = (Todo*) newInc; 3657 Todo* t = (Todo*) newInc;
3656 bool cloneSub = false; 3658 bool cloneSub = false;
3657 if ( orgInc->relations().count() ) { 3659 if ( orgInc->relations().count() ) {
3658 int result = KMessageBox::warningYesNoCancel(this, 3660 int result = KMessageBox::warningYesNoCancel(this,
3659 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), 3661 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ),
3660 i18n("Todo has subtodos"), 3662 i18n("Todo has subtodos"),
3661 i18n("Yes"), 3663 i18n("Yes"),
3662 i18n("No")); 3664 i18n("No"));
3663 3665
3664 if ( result == KMessageBox::Cancel ) { 3666 if ( result == KMessageBox::Cancel ) {
3665 delete t; 3667 delete t;
3666 return; 3668 return;
3667 } 3669 }
3668 if (result == KMessageBox::Yes) cloneSub = true; 3670 if (result == KMessageBox::Yes) cloneSub = true;
3669 } 3671 }
3670 showTodoEditor(); 3672 showTodoEditor();
3671 mTodoEditor->editTodo( t ); 3673 mTodoEditor->editTodo( t );
3672 if ( mTodoEditor->exec() ) { 3674 if ( mTodoEditor->exec() ) {
3673 if ( cloneSub ) { 3675 if ( cloneSub ) {
3674 orgInc->cloneRelations( t ); 3676 orgInc->cloneRelations( t );
3675 mCalendar->addIncidenceBranch( t ); 3677 mCalendar->addIncidenceBranch( t );
3676 updateView(); 3678 updateView();
3677 3679
3678 } else { 3680 } else {
3679 mCalendar->addTodo( t ); 3681 mCalendar->addTodo( t );
3680 updateView(); 3682 updateView();
3681 } 3683 }
3682 } else { 3684 } else {
3683 delete t; 3685 delete t;
3684 } 3686 }
3685 } 3687 }
3686 else if ( newInc->typeID() == eventID ) { 3688 else if ( newInc->typeID() == eventID ) {
3687 Event* e = (Event*) newInc; 3689 Event* e = (Event*) newInc;
3688 showEventEditor(); 3690 showEventEditor();
3689 mEventEditor->editEvent( e ); 3691 mEventEditor->editEvent( e );
3690 if ( mEventEditor->exec() ) { 3692 if ( mEventEditor->exec() ) {
3691 mCalendar->addEvent( e ); 3693 mCalendar->addEvent( e );
3692 updateView(); 3694 updateView();
3693 } else { 3695 } else {
3694 delete e; 3696 delete e;
3695 } 3697 }
3696 } else if ( newInc->typeID() == journalID ) { 3698 } else if ( newInc->typeID() == journalID ) {
3697 mCalendar->addJournal( (Journal*) newInc ); 3699 mCalendar->addJournal( (Journal*) newInc );
3698 editJournal( (Journal*) newInc ); 3700 editJournal( (Journal*) newInc );
3699 } 3701 }
3700 setActiveWindow(); 3702 setActiveWindow();
3701} 3703}
3702 3704
3703void CalendarView::newEvent() 3705void CalendarView::newEvent()
3704{ 3706{
3705 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3707 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3706 KOAgendaView *aView = mViewManager->agendaView(); 3708 KOAgendaView *aView = mViewManager->agendaView();
3707 if (aView) { 3709 if (aView) {
3708 if (aView->selectionStart().isValid()) { 3710 if (aView->selectionStart().isValid()) {
3709 if (aView->selectedIsAllDay()) { 3711 if (aView->selectedIsAllDay()) {
3710 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3712 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3711 } else { 3713 } else {
3712 newEvent(aView->selectionStart(),aView->selectionEnd()); 3714 newEvent(aView->selectionStart(),aView->selectionEnd());
3713 } 3715 }
3714 return; 3716 return;
3715 } 3717 }
3716 } 3718 }
3717 3719
3718 QDate date = mNavigator->selectedDates().first(); 3720 QDate date = mNavigator->selectedDates().first();
3719#if 0 3721#if 0
3720 QDateTime current = QDateTime::currentDateTime(); 3722 QDateTime current = QDateTime::currentDateTime();
3721 if ( date <= current.date() ) { 3723 if ( date <= current.date() ) {
3722 int hour = current.time().hour() +1; 3724 int hour = current.time().hour() +1;
3723 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3725 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3724 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3726 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3725 } else 3727 } else
3726#endif 3728#endif
3727 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3729 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3728 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3730 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3729 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3731 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3730} 3732}
3731 3733
3732void CalendarView::newEvent(QDateTime fh) 3734void CalendarView::newEvent(QDateTime fh)
3733{ 3735{
3734 newEvent(fh, 3736 newEvent(fh,
3735 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3737 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3736} 3738}
3737 3739
3738void CalendarView::newEvent(QDate dt) 3740void CalendarView::newEvent(QDate dt)
3739{ 3741{
3740 newEvent(QDateTime(dt, QTime(0,0,0)), 3742 newEvent(QDateTime(dt, QTime(0,0,0)),
3741 QDateTime(dt, QTime(0,0,0)), true); 3743 QDateTime(dt, QTime(0,0,0)), true);
3742} 3744}
3743void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3745void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3744{ 3746{
3745 newEvent(fromHint, toHint, false); 3747 newEvent(fromHint, toHint, false);
3746} 3748}
3747void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3749void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3748{ 3750{
3749 3751
3750 showEventEditor(); 3752 showEventEditor();
3751 mEventEditor->newEvent(fromHint,toHint,allDay); 3753 mEventEditor->newEvent(fromHint,toHint,allDay);
3752 if ( mFilterView->filtersEnabled() ) { 3754 if ( mFilterView->filtersEnabled() ) {
3753 CalFilter *filter = mFilterView->selectedFilter(); 3755 CalFilter *filter = mFilterView->selectedFilter();
3754 if (filter && filter->showCategories()) { 3756 if (filter && filter->showCategories()) {
3755 mEventEditor->setCategories(filter->categoryList().join(",") ); 3757 mEventEditor->setCategories(filter->categoryList().join(",") );
3756 } 3758 }
3757 if ( filter ) 3759 if ( filter )
3758 mEventEditor->setSecrecy( filter->getSecrecy() ); 3760 mEventEditor->setSecrecy( filter->getSecrecy() );
3759 } 3761 }
3760 mEventEditor->exec(); 3762 mEventEditor->exec();
3761 setActiveWindow(); 3763 setActiveWindow();
3762} 3764}
3763void CalendarView::todoAdded(Todo * t) 3765void CalendarView::todoAdded(Todo * t)
3764{ 3766{
3765 3767
3766 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3768 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3767 updateTodoViews(); 3769 updateTodoViews();
3768} 3770}
3769void CalendarView::todoChanged(Todo * t) 3771void CalendarView::todoChanged(Todo * t)
3770{ 3772{
3771 emit todoModified( t, 4 ); 3773 emit todoModified( t, 4 );
3772 // updateTodoViews(); 3774 // updateTodoViews();
3773} 3775}
3774void CalendarView::todoToBeDeleted(Todo *) 3776void CalendarView::todoToBeDeleted(Todo *)
3775{ 3777{
3776 //qDebug("todoToBeDeleted(Todo *) "); 3778 //qDebug("todoToBeDeleted(Todo *) ");
3777 updateTodoViews(); 3779 updateTodoViews();
3778} 3780}
3779void CalendarView::todoDeleted() 3781void CalendarView::todoDeleted()
3780{ 3782{
3781 //qDebug(" todoDeleted()"); 3783 //qDebug(" todoDeleted()");
3782 updateTodoViews(); 3784 updateTodoViews();
3783} 3785}
3784 3786
3785 3787
3786void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3788void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3787{ 3789{
3788 showTodoEditor(); 3790 showTodoEditor();
3789 mTodoEditor->newTodo(dt,0,allday); 3791 mTodoEditor->newTodo(dt,0,allday);
3790 if ( mFilterView->filtersEnabled() ) { 3792 if ( mFilterView->filtersEnabled() ) {
3791 CalFilter *filter = mFilterView->selectedFilter(); 3793 CalFilter *filter = mFilterView->selectedFilter();
3792 if (filter && filter->showCategories()) { 3794 if (filter && filter->showCategories()) {
3793 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3795 mTodoEditor->setCategories(filter->categoryList().join(",") );
3794 } 3796 }
3795 if ( filter ) 3797 if ( filter )
3796 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3798 mTodoEditor->setSecrecy( filter->getSecrecy() );
3797 } 3799 }
3798 mTodoEditor->exec(); 3800 mTodoEditor->exec();
3799 setActiveWindow(); 3801 setActiveWindow();
3800} 3802}
3801 3803
3802void CalendarView::newTodo() 3804void CalendarView::newTodo()
3803{ 3805{
3804 newTodoDateTime( QDateTime(),true ); 3806 newTodoDateTime( QDateTime(),true );
3805} 3807}
3806 3808
3807void CalendarView::newSubTodo() 3809void CalendarView::newSubTodo()
3808{ 3810{
3809 Todo *todo = selectedTodo(); 3811 Todo *todo = selectedTodo();
3810 if ( todo ) newSubTodo( todo ); 3812 if ( todo ) newSubTodo( todo );
3811} 3813}
3812 3814
3813void CalendarView::newSubTodo(Todo *parentEvent) 3815void CalendarView::newSubTodo(Todo *parentEvent)
3814{ 3816{
3815 3817
3816 showTodoEditor(); 3818 showTodoEditor();
3817 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3819 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3818 mTodoEditor->exec(); 3820 mTodoEditor->exec();
3819 setActiveWindow(); 3821 setActiveWindow();
3820} 3822}
3821 3823
3822void CalendarView::newFloatingEvent() 3824void CalendarView::newFloatingEvent()
3823{ 3825{
3824 DateList tmpList = mNavigator->selectedDates(); 3826 DateList tmpList = mNavigator->selectedDates();
3825 QDate date = tmpList.first(); 3827 QDate date = tmpList.first();
3826 3828
3827 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3829 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3828 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3830 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3829} 3831}
3830 3832
3831 3833
3832void CalendarView::editEvent( Event *event ) 3834void CalendarView::editEvent( Event *event )
3833{ 3835{
3834 3836
3835 if ( !event ) return; 3837 if ( !event ) return;
3836 if ( event->isReadOnly() ) { 3838 if ( event->isReadOnly() ) {
3837 showEvent( event ); 3839 showEvent( event );
3838 return; 3840 return;
3839 } 3841 }
3840 showEventEditor(); 3842 showEventEditor();
3841 mEventEditor->editEvent( event , mFlagEditDescription); 3843 mEventEditor->editEvent( event , mFlagEditDescription);
3842 mEventEditor->exec(); 3844 mEventEditor->exec();
3843 setActiveWindow(); 3845 setActiveWindow();
3844 3846
3845} 3847}
3846void CalendarView::editJournal( Journal *jour ) 3848void CalendarView::editJournal( Journal *jour )
3847{ 3849{
3848 if ( !jour ) return; 3850 if ( !jour ) return;
3849 mDialogManager->hideSearchDialog(); 3851 mDialogManager->hideSearchDialog();
3850 mViewManager->showJournalView(); 3852 mViewManager->showJournalView();
3851 mNavigator->slotDaySelect( jour->dtStart().date() ); 3853 mNavigator->slotDaySelect( jour->dtStart().date() );
3852} 3854}
3853void CalendarView::editTodo( Todo *todo ) 3855void CalendarView::editTodo( Todo *todo )
3854{ 3856{
3855 if ( !todo ) return; 3857 if ( !todo ) return;
3856 3858
3857 if ( todo->isReadOnly() ) { 3859 if ( todo->isReadOnly() ) {
3858 showTodo( todo ); 3860 showTodo( todo );
3859 return; 3861 return;
3860 } 3862 }
3861 showTodoEditor(); 3863 showTodoEditor();
3862 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3864 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3863 mTodoEditor->exec(); 3865 mTodoEditor->exec();
3864 setActiveWindow(); 3866 setActiveWindow();
3865 3867
3866} 3868}
3867 3869
3868KOEventViewerDialog* CalendarView::getEventViewerDialog() 3870KOEventViewerDialog* CalendarView::getEventViewerDialog()
3869{ 3871{
3870 if ( !mEventViewerDialog ) { 3872 if ( !mEventViewerDialog ) {
3871 mEventViewerDialog = new KOEventViewerDialog(0); 3873 mEventViewerDialog = new KOEventViewerDialog(0);
3872 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3874 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3873 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3875 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3874 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3876 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3875 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3877 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3876 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3878 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3877 viewManager(), SLOT( showAgendaView( bool ) ) ); 3879 viewManager(), SLOT( showAgendaView( bool ) ) );
3878 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3880 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3879 this, SLOT( slotViewerClosed() ) ); 3881 this, SLOT( slotViewerClosed() ) );
3880 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3882 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3881 this, SLOT( todoChanged(Todo *) ) ); 3883 this, SLOT( todoChanged(Todo *) ) );
3882 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3884 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3883 mEventViewerDialog->resize( 640, 480 ); 3885 mEventViewerDialog->resize( 640, 480 );
3884 3886
3885 } 3887 }
3886 return mEventViewerDialog; 3888 return mEventViewerDialog;
3887} 3889}
3888void CalendarView::showEvent(Event *event) 3890void CalendarView::showEvent(Event *event)
3889{ 3891{
3890 getEventViewerDialog()->setEvent(event); 3892 getEventViewerDialog()->setEvent(event);
3891 getEventViewerDialog()->showMe(); 3893 getEventViewerDialog()->showMe();
3892} 3894}
3893 3895
3894void CalendarView::showTodo(Todo *event) 3896void CalendarView::showTodo(Todo *event)
3895{ 3897{
3896 getEventViewerDialog()->setTodo(event); 3898 getEventViewerDialog()->setTodo(event);
3897 getEventViewerDialog()->showMe(); 3899 getEventViewerDialog()->showMe();
3898} 3900}
3899void CalendarView::showJournal( Journal *jour ) 3901void CalendarView::showJournal( Journal *jour )
3900{ 3902{
3901 getEventViewerDialog()->setJournal(jour); 3903 getEventViewerDialog()->setJournal(jour);
3902 getEventViewerDialog()->showMe(); 3904 getEventViewerDialog()->showMe();
3903 3905
3904} 3906}
3905// void CalendarView::todoModified (Todo *event, int changed) 3907// void CalendarView::todoModified (Todo *event, int changed)
3906// { 3908// {
3907// // if (mDialogList.find (event) != mDialogList.end ()) { 3909// // if (mDialogList.find (event) != mDialogList.end ()) {
3908// // kdDebug() << "Todo modified and open" << endl; 3910// // kdDebug() << "Todo modified and open" << endl;
3909// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3911// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3910// // temp->modified (changed); 3912// // temp->modified (changed);
3911 3913
3912// // } 3914// // }
3913 3915
3914// mViewManager->updateView(); 3916// mViewManager->updateView();
3915// } 3917// }
3916 3918
3917void CalendarView::appointment_show() 3919void CalendarView::appointment_show()
3918{ 3920{
3919 Event *anEvent = 0; 3921 Event *anEvent = 0;
3920 3922
3921 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3923 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3922 3924
3923 if (mViewManager->currentView()->isEventView()) { 3925 if (mViewManager->currentView()->isEventView()) {
3924 if ( incidence && incidence->typeID() == eventID ) { 3926 if ( incidence && incidence->typeID() == eventID ) {
3925 anEvent = static_cast<Event *>(incidence); 3927 anEvent = static_cast<Event *>(incidence);
3926 } 3928 }
3927 } 3929 }
3928 3930
3929 if (!anEvent) { 3931 if (!anEvent) {
3930 KNotifyClient::beep(); 3932 KNotifyClient::beep();
3931 return; 3933 return;
3932 } 3934 }
3933 3935
3934 showEvent(anEvent); 3936 showEvent(anEvent);
3935} 3937}
3936 3938
3937void CalendarView::appointment_edit() 3939void CalendarView::appointment_edit()
3938{ 3940{
3939 Event *anEvent = 0; 3941 Event *anEvent = 0;
3940 3942
3941 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3943 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3942 3944
3943 if (mViewManager->currentView()->isEventView()) { 3945 if (mViewManager->currentView()->isEventView()) {
3944 if ( incidence && incidence->typeID() == eventID ) { 3946 if ( incidence && incidence->typeID() == eventID ) {
3945 anEvent = static_cast<Event *>(incidence); 3947 anEvent = static_cast<Event *>(incidence);
3946 } 3948 }
3947 } 3949 }
3948 3950
3949 if (!anEvent) { 3951 if (!anEvent) {
3950 KNotifyClient::beep(); 3952 KNotifyClient::beep();
3951 return; 3953 return;
3952 } 3954 }
3953 3955
3954 editEvent(anEvent); 3956 editEvent(anEvent);
3955} 3957}
3956 3958
3957void CalendarView::appointment_delete() 3959void CalendarView::appointment_delete()
3958{ 3960{
3959 Event *anEvent = 0; 3961 Event *anEvent = 0;
3960 3962
3961 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3963 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3962 3964
3963 if (mViewManager->currentView()->isEventView()) { 3965 if (mViewManager->currentView()->isEventView()) {
3964 if ( incidence && incidence->typeID() == eventID ) { 3966 if ( incidence && incidence->typeID() == eventID ) {
3965 anEvent = static_cast<Event *>(incidence); 3967 anEvent = static_cast<Event *>(incidence);
3966 } 3968 }
3967 } 3969 }
3968 3970
3969 if (!anEvent) { 3971 if (!anEvent) {
3970 KNotifyClient::beep(); 3972 KNotifyClient::beep();
3971 return; 3973 return;
3972 } 3974 }
3973 3975
3974 deleteEvent(anEvent); 3976 deleteEvent(anEvent);
3975} 3977}
3976 3978
3977void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3979void CalendarView::todo_resub( Todo * parent, Todo * sub )
3978{ 3980{
3979 if (!sub) return; 3981 if (!sub) return;
3980 if ( sub->relatedTo() == parent ) 3982 if ( sub->relatedTo() == parent )
3981 return; 3983 return;
3982 sub->setRelatedTo(parent); 3984 sub->setRelatedTo(parent);
3983 sub->updated(); 3985 sub->updated();
3984 setModified(true); 3986 setModified(true);
3985 updateView(); 3987 updateView();
3986} 3988}
3987void CalendarView::todo_unsub(Todo *anTodo ) 3989void CalendarView::todo_unsub(Todo *anTodo )
3988{ 3990{
3989 todo_resub( 0, anTodo ); 3991 todo_resub( 0, anTodo );
3990} 3992}
3991 3993
3992void CalendarView::deleteTodo(Todo *todo) 3994void CalendarView::deleteTodo(Todo *todo)
3993{ 3995{
3994 if (!todo) { 3996 if (!todo) {
3995 KNotifyClient::beep(); 3997 KNotifyClient::beep();
3996 return; 3998 return;
3997 } 3999 }
3998 if (KOPrefs::instance()->mConfirm) { 4000 if (KOPrefs::instance()->mConfirm) {
3999 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 4001 QString text = KGlobal::formatMessage ( todo->summary(),0 );
4000 if (!todo->relations().isEmpty()) { 4002 if (!todo->relations().isEmpty()) {
4001 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 4003 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
4002 4004
4003 } 4005 }
4004 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 4006 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
4005 case KMessageBox::Continue: // OK 4007 case KMessageBox::Continue: // OK
4006 bool deleteT = false; 4008 bool deleteT = false;
4007 if (!todo->relations().isEmpty()) { 4009 if (!todo->relations().isEmpty()) {
4008 deleteT = removeCompletedSubTodos( todo ); 4010 deleteT = removeCompletedSubTodos( todo );
4009 } 4011 }
4010 // deleteT == true: todo already deleted in removeCompletedSubTodos 4012 // deleteT == true: todo already deleted in removeCompletedSubTodos
4011 if ( !deleteT ) { 4013 if ( !deleteT ) {
4012 checkExternalId( todo ); 4014 checkExternalId( todo );
4013 calendar()->deleteTodo(todo); 4015 calendar()->deleteTodo(todo);
4014 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4016 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4015 } 4017 }
4016 updateView(); 4018 updateView();
4017 break; 4019 break;
4018 } // switch 4020 } // switch
4019 } else { 4021 } else {
4020 checkExternalId( todo ); 4022 checkExternalId( todo );
4021 mCalendar->deleteTodo(todo); 4023 mCalendar->deleteTodo(todo);
4022 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4024 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4023 updateView(); 4025 updateView();
4024 } 4026 }
4025 4027
4026 emit updateSearchDialog(); 4028 emit updateSearchDialog();
4027} 4029}
4028void CalendarView::deleteJournal(Journal *jour) 4030void CalendarView::deleteJournal(Journal *jour)
4029{ 4031{
4030 if (!jour) { 4032 if (!jour) {
4031 KNotifyClient::beep(); 4033 KNotifyClient::beep();
4032 return; 4034 return;
4033 } 4035 }
4034 if (KOPrefs::instance()->mConfirm) { 4036 if (KOPrefs::instance()->mConfirm) {
4035 4037
4036 QString des; 4038 QString des;
4037 if ( !jour->summary().isEmpty() ) { 4039 if ( !jour->summary().isEmpty() ) {
4038 des = jour->summary(); 4040 des = jour->summary();
4039 } else { 4041 } else {
4040 des = jour->description().left(30); 4042 des = jour->description().left(30);
4041 des = des.simplifyWhiteSpace (); 4043 des = des.simplifyWhiteSpace ();
4042 des.replace (QRegExp ("\\n"),"" ); 4044 des.replace (QRegExp ("\\n"),"" );
4043 des.replace (QRegExp ("\\r"),"" ); 4045 des.replace (QRegExp ("\\r"),"" );
4044 } 4046 }
4045 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 4047 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
4046 case KMessageBox::Continue: // OK 4048 case KMessageBox::Continue: // OK
4047 calendar()->deleteJournal(jour); 4049 calendar()->deleteJournal(jour);
4048 updateView(); 4050 updateView();
4049 break; 4051 break;
4050 } // switch 4052 } // switch
4051 } else { 4053 } else {
4052 calendar()->deleteJournal(jour);; 4054 calendar()->deleteJournal(jour);;
4053 updateView(); 4055 updateView();
4054 } 4056 }
4055 emit updateSearchDialog(); 4057 emit updateSearchDialog();
4056} 4058}
4057 4059
4058void CalendarView::deleteEvent(Event *anEvent) 4060void CalendarView::deleteEvent(Event *anEvent)
4059{ 4061{
4060 if (!anEvent) { 4062 if (!anEvent) {
4061 KNotifyClient::beep(); 4063 KNotifyClient::beep();
4062 return; 4064 return;
4063 } 4065 }
4064 4066
4065 if (anEvent->doesRecur()) { 4067 if (anEvent->doesRecur()) {
4066 QDate itemDate = mViewManager->currentSelectionDate(); 4068 QDate itemDate = mViewManager->currentSelectionDate();
4067 int km; 4069 int km;
4068 if (!itemDate.isValid()) { 4070 if (!itemDate.isValid()) {
4069 //kdDebug() << "Date Not Valid" << endl; 4071 //kdDebug() << "Date Not Valid" << endl;
4070 if (KOPrefs::instance()->mConfirm) { 4072 if (KOPrefs::instance()->mConfirm) {
4071 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4073 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4072 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 4074 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
4073 i18n("KO/Pi Confirmation"),i18n("Delete All")); 4075 i18n("KO/Pi Confirmation"),i18n("Delete All"));
4074 if ( km == KMessageBox::Continue ) 4076 if ( km == KMessageBox::Continue )
4075 km = KMessageBox::No; // No = all below 4077 km = KMessageBox::No; // No = all below
4076 } else 4078 } else
4077 km = KMessageBox::No; 4079 km = KMessageBox::No;
4078 } else { 4080 } else {
4079 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4081 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4080 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 4082 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
4081 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 4083 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
4082 i18n("KO/Pi Confirmation"),i18n("Current"), 4084 i18n("KO/Pi Confirmation"),i18n("Current"),
4083 i18n("All")); 4085 i18n("All"));
4084 } 4086 }
4085 switch(km) { 4087 switch(km) {
4086 4088
4087 case KMessageBox::No: // Continue // all 4089 case KMessageBox::No: // Continue // all
4088 //qDebug("KMessageBox::No "); 4090 //qDebug("KMessageBox::No ");
4089 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4091 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4090 schedule(Scheduler::Cancel,anEvent); 4092 schedule(Scheduler::Cancel,anEvent);
4091 4093
4092 checkExternalId( anEvent); 4094 checkExternalId( anEvent);
4093 mCalendar->deleteEvent(anEvent); 4095 mCalendar->deleteEvent(anEvent);
4094 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4096 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
4095 break; 4097 break;
4096 4098
4097 // Disabled because it does not work 4099 // Disabled because it does not work
4098 //#if 0 4100 //#if 0
4099 case KMessageBox::Yes: // just this one 4101 case KMessageBox::Yes: // just this one
4100 //QDate qd = mNavigator->selectedDates().first(); 4102 //QDate qd = mNavigator->selectedDates().first();
4101 //if (!qd.isValid()) { 4103 //if (!qd.isValid()) {
4102 // kdDebug() << "no date selected, or invalid date" << endl; 4104 // kdDebug() << "no date selected, or invalid date" << endl;
4103 // KNotifyClient::beep(); 4105 // KNotifyClient::beep();
4104 // return; 4106 // return;
4105 //} 4107 //}
4106 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4108 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4107 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4109 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4108 anEvent->addExDate(itemDate); 4110 anEvent->addExDate(itemDate);
4109 int duration = anEvent->recurrence()->duration(); 4111 int duration = anEvent->recurrence()->duration();
4110 if ( duration > 0 ) { 4112 if ( duration > 0 ) {
4111 anEvent->recurrence()->setDuration( duration - 1 ); 4113 anEvent->recurrence()->setDuration( duration - 1 );
4112 } 4114 }
4113 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4115 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4114 } 4116 }
4115 break; 4117 break;
4116 //#endif 4118 //#endif
4117 } // switch 4119 } // switch
4118 } else { 4120 } else {
4119 if (KOPrefs::instance()->mConfirm) { 4121 if (KOPrefs::instance()->mConfirm) {
4120 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4122 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4121 i18n("\nAre you sure you want\nto delete this event?"), 4123 i18n("\nAre you sure you want\nto delete this event?"),
4122 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4124 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4123 case KMessageBox::Continue: // OK 4125 case KMessageBox::Continue: // OK
4124 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4126 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4125 schedule(Scheduler::Cancel,anEvent); 4127 schedule(Scheduler::Cancel,anEvent);
4126 checkExternalId( anEvent); 4128 checkExternalId( anEvent);
4127 mCalendar->deleteEvent(anEvent); 4129 mCalendar->deleteEvent(anEvent);
4128 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4130 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4129 break; 4131 break;
4130 } // switch 4132 } // switch
4131 } else { 4133 } else {
4132 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4134 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4133 schedule(Scheduler::Cancel,anEvent); 4135 schedule(Scheduler::Cancel,anEvent);
4134 checkExternalId( anEvent); 4136 checkExternalId( anEvent);
4135 mCalendar->deleteEvent(anEvent); 4137 mCalendar->deleteEvent(anEvent);
4136 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4138 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4137 } 4139 }
4138 } // if-else 4140 } // if-else
4139 emit updateSearchDialog(); 4141 emit updateSearchDialog();
4140} 4142}
4141 4143
4142bool CalendarView::deleteEvent(const QString &uid) 4144bool CalendarView::deleteEvent(const QString &uid)
4143{ 4145{
4144 Event *ev = mCalendar->event(uid); 4146 Event *ev = mCalendar->event(uid);
4145 if (ev) { 4147 if (ev) {
4146 deleteEvent(ev); 4148 deleteEvent(ev);
4147 return true; 4149 return true;
4148 } else { 4150 } else {
4149 return false; 4151 return false;
4150 } 4152 }
4151} 4153}
4152 4154
4153/*****************************************************************************/ 4155/*****************************************************************************/
4154 4156
4155void CalendarView::action_mail() 4157void CalendarView::action_mail()
4156{ 4158{
4157#ifndef KORG_NOMAIL 4159#ifndef KORG_NOMAIL
4158 KOMailClient mailClient; 4160 KOMailClient mailClient;
4159 4161
4160 Incidence *incidence = currentSelection(); 4162 Incidence *incidence = currentSelection();
4161 4163
4162 if (!incidence) { 4164 if (!incidence) {
4163 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4165 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4164 return; 4166 return;
4165 } 4167 }
4166 if(incidence->attendeeCount() == 0 ) { 4168 if(incidence->attendeeCount() == 0 ) {
4167 KMessageBox::sorry(this, 4169 KMessageBox::sorry(this,
4168 i18n("Can't generate mail:\nNo attendees defined.\n")); 4170 i18n("Can't generate mail:\nNo attendees defined.\n"));
4169 return; 4171 return;
4170 } 4172 }
4171 4173
4172 CalendarLocal cal_tmp; 4174 CalendarLocal cal_tmp;
4173 Event *event = 0; 4175 Event *event = 0;
4174 Event *ev = 0; 4176 Event *ev = 0;
4175 if ( incidence && incidence->typeID() == eventID ) { 4177 if ( incidence && incidence->typeID() == eventID ) {
4176 event = static_cast<Event *>(incidence); 4178 event = static_cast<Event *>(incidence);
4177 ev = new Event(*event); 4179 ev = new Event(*event);
4178 cal_tmp.addEvent(ev); 4180 cal_tmp.addEvent(ev);
4179 } 4181 }
4180 ICalFormat mForm(); 4182 ICalFormat mForm();
4181 QString attachment = mForm.toString( &cal_tmp ); 4183 QString attachment = mForm.toString( &cal_tmp );
4182 if (ev) delete(ev); 4184 if (ev) delete(ev);
4183 4185
4184 mailClient.mailAttendees(currentSelection(), attachment); 4186 mailClient.mailAttendees(currentSelection(), attachment);
4185 4187
4186#endif 4188#endif
4187 4189
4188#if 0 4190#if 0
4189 Event *anEvent = 0; 4191 Event *anEvent = 0;
4190 if (mViewManager->currentView()->isEventView()) { 4192 if (mViewManager->currentView()->isEventView()) {
4191 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4193 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
4192 } 4194 }
4193 4195
4194 if (!anEvent) { 4196 if (!anEvent) {
4195 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4197 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4196 return; 4198 return;
4197 } 4199 }
4198 if(anEvent->attendeeCount() == 0 ) { 4200 if(anEvent->attendeeCount() == 0 ) {
4199 KMessageBox::sorry(this, 4201 KMessageBox::sorry(this,
4200 i18n("Can't generate mail:\nNo attendees defined.\n")); 4202 i18n("Can't generate mail:\nNo attendees defined.\n"));
4201 return; 4203 return;
4202 } 4204 }
4203 4205
4204 mailobject.emailEvent(anEvent); 4206 mailobject.emailEvent(anEvent);
4205#endif 4207#endif
4206} 4208}
4207 4209
4208 4210
4209void CalendarView::schedule_publish(Incidence *incidence) 4211void CalendarView::schedule_publish(Incidence *incidence)
4210{ 4212{
4211 Event *event = 0; 4213 Event *event = 0;
4212 Todo *todo = 0; 4214 Todo *todo = 0;
4213 4215
4214 if (incidence == 0) { 4216 if (incidence == 0) {
4215 incidence = mViewManager->currentView()->selectedIncidences().first(); 4217 incidence = mViewManager->currentView()->selectedIncidences().first();
4216 if (incidence == 0) { 4218 if (incidence == 0) {
4217 incidence = mTodoList->selectedIncidences().first(); 4219 incidence = mTodoList->selectedIncidences().first();
4218 } 4220 }
4219 } 4221 }
4220 if ( incidence && incidence->typeID() == eventID ) { 4222 if ( incidence && incidence->typeID() == eventID ) {
4221 event = static_cast<Event *>(incidence); 4223 event = static_cast<Event *>(incidence);
4222 } else { 4224 } else {
4223 if ( incidence && incidence->typeID() == todoID ) { 4225 if ( incidence && incidence->typeID() == todoID ) {
4224 todo = static_cast<Todo *>(incidence); 4226 todo = static_cast<Todo *>(incidence);
4225 } 4227 }
4226 } 4228 }
4227 4229
4228 if (!event && !todo) { 4230 if (!event && !todo) {
4229 KMessageBox::sorry(this,i18n("No event selected.")); 4231 KMessageBox::sorry(this,i18n("No event selected."));
4230 return; 4232 return;
4231 } 4233 }
4232 4234
4233 PublishDialog *publishdlg = new PublishDialog(); 4235 PublishDialog *publishdlg = new PublishDialog();
4234 if (incidence->attendeeCount()>0) { 4236 if (incidence->attendeeCount()>0) {
4235 QPtrList<Attendee> attendees = incidence->attendees(); 4237 QPtrList<Attendee> attendees = incidence->attendees();
4236 attendees.first(); 4238 attendees.first();
4237 while ( attendees.current()!=0 ) { 4239 while ( attendees.current()!=0 ) {
4238 publishdlg->addAttendee(attendees.current()); 4240 publishdlg->addAttendee(attendees.current());
4239 attendees.next(); 4241 attendees.next();
4240 } 4242 }
4241 } 4243 }
4242 bool send = true; 4244 bool send = true;
4243 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 4245 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
4244 if ( publishdlg->exec() != QDialog::Accepted ) 4246 if ( publishdlg->exec() != QDialog::Accepted )
4245 send = false; 4247 send = false;
4246 } 4248 }
4247 if ( send ) { 4249 if ( send ) {
4248 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4250 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4249 if ( event ) { 4251 if ( event ) {
4250 Event *ev = new Event(*event); 4252 Event *ev = new Event(*event);
4251 ev->registerObserver(0); 4253 ev->registerObserver(0);
4252 ev->clearAttendees(); 4254 ev->clearAttendees();
4253 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4255 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4254 delete(ev); 4256 delete(ev);
4255 } 4257 }
4256 } else { 4258 } else {
4257 if ( todo ) { 4259 if ( todo ) {
4258 Todo *ev = new Todo(*todo); 4260 Todo *ev = new Todo(*todo);
4259 ev->registerObserver(0); 4261 ev->registerObserver(0);
4260 ev->clearAttendees(); 4262 ev->clearAttendees();
4261 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4263 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4262 delete(ev); 4264 delete(ev);
4263 } 4265 }
4264 } 4266 }
4265 } 4267 }
4266 } 4268 }
4267 delete publishdlg; 4269 delete publishdlg;
4268} 4270}
4269 4271
4270void CalendarView::schedule_request(Incidence *incidence) 4272void CalendarView::schedule_request(Incidence *incidence)
4271{ 4273{
4272 schedule(Scheduler::Request,incidence); 4274 schedule(Scheduler::Request,incidence);
4273} 4275}
4274 4276
4275void CalendarView::schedule_refresh(Incidence *incidence) 4277void CalendarView::schedule_refresh(Incidence *incidence)
4276{ 4278{
4277 schedule(Scheduler::Refresh,incidence); 4279 schedule(Scheduler::Refresh,incidence);
4278} 4280}
4279 4281
4280void CalendarView::schedule_cancel(Incidence *incidence) 4282void CalendarView::schedule_cancel(Incidence *incidence)
4281{ 4283{
4282 schedule(Scheduler::Cancel,incidence); 4284 schedule(Scheduler::Cancel,incidence);
4283} 4285}
4284 4286
4285void CalendarView::schedule_add(Incidence *incidence) 4287void CalendarView::schedule_add(Incidence *incidence)
4286{ 4288{
4287 schedule(Scheduler::Add,incidence); 4289 schedule(Scheduler::Add,incidence);
4288} 4290}
4289 4291
4290void CalendarView::schedule_reply(Incidence *incidence) 4292void CalendarView::schedule_reply(Incidence *incidence)
4291{ 4293{
4292 schedule(Scheduler::Reply,incidence); 4294 schedule(Scheduler::Reply,incidence);
4293} 4295}
4294 4296
4295void CalendarView::schedule_counter(Incidence *incidence) 4297void CalendarView::schedule_counter(Incidence *incidence)
4296{ 4298{
4297 schedule(Scheduler::Counter,incidence); 4299 schedule(Scheduler::Counter,incidence);
4298} 4300}
4299 4301
4300void CalendarView::schedule_declinecounter(Incidence *incidence) 4302void CalendarView::schedule_declinecounter(Incidence *incidence)
4301{ 4303{
4302 schedule(Scheduler::Declinecounter,incidence); 4304 schedule(Scheduler::Declinecounter,incidence);
4303} 4305}
4304 4306
4305void CalendarView::schedule_publish_freebusy(int daysToPublish) 4307void CalendarView::schedule_publish_freebusy(int daysToPublish)
4306{ 4308{
4307 QDateTime start = QDateTime::currentDateTime(); 4309 QDateTime start = QDateTime::currentDateTime();
4308 QDateTime end = start.addDays(daysToPublish); 4310 QDateTime end = start.addDays(daysToPublish);
4309 4311
4310 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 4312 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
4311 freebusy->setOrganizer(KOPrefs::instance()->email()); 4313 freebusy->setOrganizer(KOPrefs::instance()->email());
4312 4314
4313 4315
4314 PublishDialog *publishdlg = new PublishDialog(); 4316 PublishDialog *publishdlg = new PublishDialog();
4315 if ( publishdlg->exec() == QDialog::Accepted ) { 4317 if ( publishdlg->exec() == QDialog::Accepted ) {
4316 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4318 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4317 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 4319 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
4318 delete(freebusy); 4320 delete(freebusy);
4319 } 4321 }
4320 } 4322 }
4321 delete publishdlg; 4323 delete publishdlg;
4322} 4324}
4323 4325
4324void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 4326void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
4325{ 4327{
4326 Event *event = 0; 4328 Event *event = 0;
4327 Todo *todo = 0; 4329 Todo *todo = 0;
4328 4330
4329 if (incidence == 0) { 4331 if (incidence == 0) {
4330 incidence = mViewManager->currentView()->selectedIncidences().first(); 4332 incidence = mViewManager->currentView()->selectedIncidences().first();
4331 if (incidence == 0) { 4333 if (incidence == 0) {
4332 incidence = mTodoList->selectedIncidences().first(); 4334 incidence = mTodoList->selectedIncidences().first();
4333 } 4335 }
4334 } 4336 }
4335 if ( incidence && incidence->typeID() == eventID ) { 4337 if ( incidence && incidence->typeID() == eventID ) {
4336 event = static_cast<Event *>(incidence); 4338 event = static_cast<Event *>(incidence);
4337 } 4339 }
4338 if ( incidence && incidence->typeID() == todoID ) { 4340 if ( incidence && incidence->typeID() == todoID ) {
4339 todo = static_cast<Todo *>(incidence); 4341 todo = static_cast<Todo *>(incidence);
4340 } 4342 }
4341 4343
4342 if (!event && !todo) { 4344 if (!event && !todo) {
4343 KMessageBox::sorry(this,i18n("No event selected.")); 4345 KMessageBox::sorry(this,i18n("No event selected."));
4344 return; 4346 return;
4345 } 4347 }
4346 4348
4347 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 4349 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
4348 KMessageBox::sorry(this,i18n("The event has no attendees.")); 4350 KMessageBox::sorry(this,i18n("The event has no attendees."));
4349 return; 4351 return;
4350 } 4352 }
4351 4353
4352 Event *ev = 0; 4354 Event *ev = 0;
4353 if (event) ev = new Event(*event); 4355 if (event) ev = new Event(*event);
4354 Todo *to = 0; 4356 Todo *to = 0;
4355 if (todo) to = new Todo(*todo); 4357 if (todo) to = new Todo(*todo);
4356 4358
4357 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 4359 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
4358 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 4360 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
4359 if (!me) { 4361 if (!me) {
4360 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4362 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4361 return; 4363 return;
4362 } 4364 }
4363 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4365 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4364 StatusDialog *statdlg = new StatusDialog(this); 4366 StatusDialog *statdlg = new StatusDialog(this);
4365 if (!statdlg->exec()==QDialog::Accepted) return; 4367 if (!statdlg->exec()==QDialog::Accepted) return;
4366 me->setStatus( statdlg->status() ); 4368 me->setStatus( statdlg->status() );
4367 delete(statdlg); 4369 delete(statdlg);
4368 } 4370 }
4369 Attendee *menew = new Attendee(*me); 4371 Attendee *menew = new Attendee(*me);
4370 if (ev) { 4372 if (ev) {
4371 ev->clearAttendees(); 4373 ev->clearAttendees();
4372 ev->addAttendee(menew,false); 4374 ev->addAttendee(menew,false);
4373 } else { 4375 } else {
4374 if (to) { 4376 if (to) {
4375 todo->clearAttendees(); 4377 todo->clearAttendees();
4376 todo->addAttendee(menew,false); 4378 todo->addAttendee(menew,false);
4377 } 4379 }
4378 } 4380 }
4379 } 4381 }
4380 4382
4381 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4383 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4382 if (ev) { 4384 if (ev) {
4383 if ( !dlg->addMessage(ev,method) ) delete(ev); 4385 if ( !dlg->addMessage(ev,method) ) delete(ev);
4384 } else { 4386 } else {
4385 if (to) { 4387 if (to) {
4386 if ( !dlg->addMessage(to,method) ) delete(to); 4388 if ( !dlg->addMessage(to,method) ) delete(to);
4387 } 4389 }
4388 } 4390 }
4389} 4391}
4390 4392
4391void CalendarView::openAddressbook() 4393void CalendarView::openAddressbook()
4392{ 4394{
4393 KRun::runCommand("kaddressbook"); 4395 KRun::runCommand("kaddressbook");
4394} 4396}
4395 4397
4396void CalendarView::setModified(bool modified) 4398void CalendarView::setModified(bool modified)
4397{ 4399{
4398 //qDebug("CalendarView::setModified %d ", modified); 4400 //qDebug("CalendarView::setModified %d ", modified);
4399 if ( modified ) 4401 if ( modified )
4400 emit signalmodified(); 4402 emit signalmodified();
4401 mModified = modified; 4403 mModified = modified;
4402 if ( mModified ) 4404 if ( mModified )
4403 emit modifiedChanged(mModified); 4405 emit modifiedChanged(mModified);
4404 4406
4405} 4407}
4406 4408
4407bool CalendarView::isReadOnly() 4409bool CalendarView::isReadOnly()
4408{ 4410{
4409 return mReadOnly; 4411 return mReadOnly;
4410} 4412}
4411 4413
4412void CalendarView::setReadOnly(bool readOnly) 4414void CalendarView::setReadOnly(bool readOnly)
4413{ 4415{
4414 if (mReadOnly != readOnly) { 4416 if (mReadOnly != readOnly) {
4415 mReadOnly = readOnly; 4417 mReadOnly = readOnly;
4416 emit readOnlyChanged(mReadOnly); 4418 emit readOnlyChanged(mReadOnly);
4417 } 4419 }
4418} 4420}
4419 4421
4420bool CalendarView::isModified() 4422bool CalendarView::isModified()
4421{ 4423{
4422 return mModified; 4424 return mModified;
4423} 4425}
4424void CalendarView::slotprintSelInc() 4426void CalendarView::slotprintSelInc()
4425{ 4427{
4426 if ( currentSelection() == 0 ) { 4428 if ( currentSelection() == 0 ) {
4427 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4429 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4428 return; 4430 return;
4429 } 4431 }
4430 showIncidence(); 4432 showIncidence();
4431 getEventViewerDialog()->print(); 4433 getEventViewerDialog()->print();
4432 4434
4433} 4435}
4434void CalendarView::printSetup() 4436void CalendarView::printSetup()
4435{ 4437{
4436#ifndef KORG_NOPRINTER 4438#ifndef KORG_NOPRINTER
4437 createPrinter(); 4439 createPrinter();
4438 4440
4439 mCalPrinter->setupPrinter(); 4441 mCalPrinter->setupPrinter();
4440#endif 4442#endif
4441} 4443}
4442 4444
4443void CalendarView::print() 4445void CalendarView::print()
4444{ 4446{
4445#ifndef KORG_NOPRINTER 4447#ifndef KORG_NOPRINTER
4446 createPrinter(); 4448 createPrinter();
4447 4449
4448 DateList tmpDateList = mNavigator->selectedDates(); 4450 DateList tmpDateList = mNavigator->selectedDates();
4449 mCalPrinter->print(CalPrinter::Month, 4451 mCalPrinter->print(CalPrinter::Month,
4450 tmpDateList.first(), tmpDateList.last()); 4452 tmpDateList.first(), tmpDateList.last());
4451#endif 4453#endif
4452} 4454}
4453 4455
4454void CalendarView::printPreview() 4456void CalendarView::printPreview()
4455{ 4457{
4456#ifndef KORG_NOPRINTER 4458#ifndef KORG_NOPRINTER
4457 kdDebug() << "CalendarView::printPreview()" << endl; 4459 kdDebug() << "CalendarView::printPreview()" << endl;
4458 4460
4459 createPrinter(); 4461 createPrinter();
4460 4462
4461 DateList tmpDateList = mNavigator->selectedDates(); 4463 DateList tmpDateList = mNavigator->selectedDates();
4462 4464
4463 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4465 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4464 tmpDateList.last()); 4466 tmpDateList.last());
4465#endif 4467#endif
4466} 4468}
4467bool CalendarView::exportICalendar( QString filename ) 4469bool CalendarView::exportICalendar( QString filename )
4468{ 4470{
4469 // Force correct extension 4471 // Force correct extension
4470 if (filename.right(4) != ".ics") filename += ".ics"; 4472 if (filename.right(4) != ".ics") filename += ".ics";
4471 4473
4472 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4474 FileStorage storage( mCalendar, filename, new ICalFormat() );
4473 return storage.save(); 4475 return storage.save();
4474} 4476}
4475 4477
4476bool CalendarView::exportICalendar() 4478bool CalendarView::exportICalendar()
4477{ 4479{
4478 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) ); 4480 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) );
4479} 4481}
4480 4482
4481bool CalendarView::exportVCalendar( QString filename ) 4483bool CalendarView::exportVCalendar( QString filename )
4482{ 4484{
4483 if (mCalendar->journals().count() > 0) { 4485 if (mCalendar->journals().count() > 0) {
4484 int result = KMessageBox::warningContinueCancel(this, 4486 int result = KMessageBox::warningContinueCancel(this,
4485 i18n("The journal entries can not be\nexported to a vCalendar file."), 4487 i18n("The journal entries can not be\nexported to a vCalendar file."),
4486 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4488 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4487 true); 4489 true);
4488 if (result != KMessageBox::Continue) return false; 4490 if (result != KMessageBox::Continue) return false;
4489 } 4491 }
4490 4492
4491 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4493 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4492 4494
4493 // Force correct extension 4495 // Force correct extension
4494 if (filename.right(4) != ".vcs") filename += ".vcs"; 4496 if (filename.right(4) != ".vcs") filename += ".vcs";
4495 4497
4496 FileStorage storage( mCalendar, filename, new VCalFormat ); 4498 FileStorage storage( mCalendar, filename, new VCalFormat );
4497 return storage.save(); 4499 return storage.save();
4498 4500
4499} 4501}
4500 4502
4501void CalendarView::eventUpdated(Incidence *) 4503void CalendarView::eventUpdated(Incidence *)
4502{ 4504{
4503 setModified(); 4505 setModified();
4504 // Don't call updateView here. The code, which has caused the update of the 4506 // Don't call updateView here. The code, which has caused the update of the
4505 // event is responsible for updating the view. 4507 // event is responsible for updating the view.
4506 // updateView(); 4508 // updateView();
4507} 4509}
4508 4510
4509void CalendarView::adaptNavigationUnits() 4511void CalendarView::adaptNavigationUnits()
4510{ 4512{
4511 if (mViewManager->currentView()->isEventView()) { 4513 if (mViewManager->currentView()->isEventView()) {
4512 int days = mViewManager->currentView()->currentDateCount(); 4514 int days = mViewManager->currentView()->currentDateCount();
4513 if (days == 1) { 4515 if (days == 1) {
4514 emit changeNavStringPrev(i18n("&Previous Day")); 4516 emit changeNavStringPrev(i18n("&Previous Day"));
4515 emit changeNavStringNext(i18n("&Next Day")); 4517 emit changeNavStringNext(i18n("&Next Day"));
4516 } else { 4518 } else {
4517 emit changeNavStringPrev(i18n("&Previous Week")); 4519 emit changeNavStringPrev(i18n("&Previous Week"));
4518 emit changeNavStringNext(i18n("&Next Week")); 4520 emit changeNavStringNext(i18n("&Next Week"));
4519 } 4521 }
4520 } 4522 }
4521} 4523}
4522 4524
4523void CalendarView::processMainViewSelection( Incidence *incidence ) 4525void CalendarView::processMainViewSelection( Incidence *incidence )
4524{ 4526{
4525 if ( incidence ) mTodoList->clearSelection(); 4527 if ( incidence ) mTodoList->clearSelection();
4526 processIncidenceSelection( incidence ); 4528 processIncidenceSelection( incidence );
4527} 4529}
4528 4530
4529void CalendarView::processTodoListSelection( Incidence *incidence ) 4531void CalendarView::processTodoListSelection( Incidence *incidence )
4530{ 4532{
4531 if ( incidence && mViewManager->currentView() ) { 4533 if ( incidence && mViewManager->currentView() ) {
4532 mViewManager->currentView()->clearSelection(); 4534 mViewManager->currentView()->clearSelection();
4533 } 4535 }
4534 processIncidenceSelection( incidence ); 4536 processIncidenceSelection( incidence );
4535} 4537}
4536 4538
4537void CalendarView::processIncidenceSelection( Incidence *incidence ) 4539void CalendarView::processIncidenceSelection( Incidence *incidence )
4538{ 4540{
4539 emit incidenceSelected( incidence ); 4541 emit incidenceSelected( incidence );
4540 if ( incidence == mSelectedIncidence ) return; 4542 if ( incidence == mSelectedIncidence ) return;
4541 mSelectedIncidence = incidence; 4543 mSelectedIncidence = incidence;
4542 4544
4543 if ( incidence && incidence->typeID() == eventID ) { 4545 if ( incidence && incidence->typeID() == eventID ) {
4544 Event *event = static_cast<Event *>( incidence ); 4546 Event *event = static_cast<Event *>( incidence );
4545 if ( event->organizer() == KOPrefs::instance()->email() ) { 4547 if ( event->organizer() == KOPrefs::instance()->email() ) {
4546 emit organizerEventsSelected( true ); 4548 emit organizerEventsSelected( true );
4547 } else { 4549 } else {
4548 emit organizerEventsSelected(false); 4550 emit organizerEventsSelected(false);
4549 } 4551 }
4550 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4552 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4551 KOPrefs::instance()->email() ) ) { 4553 KOPrefs::instance()->email() ) ) {
4552 emit groupEventsSelected( true ); 4554 emit groupEventsSelected( true );
4553 } else { 4555 } else {
4554 emit groupEventsSelected(false); 4556 emit groupEventsSelected(false);
4555 } 4557 }
4556 return; 4558 return;
4557 } else { 4559 } else {
4558 if ( incidence && incidence->typeID() == todoID ) { 4560 if ( incidence && incidence->typeID() == todoID ) {
4559 emit todoSelected( true ); 4561 emit todoSelected( true );
4560 Todo *event = static_cast<Todo *>( incidence ); 4562 Todo *event = static_cast<Todo *>( incidence );
4561 if ( event->organizer() == KOPrefs::instance()->email() ) { 4563 if ( event->organizer() == KOPrefs::instance()->email() ) {
4562 emit organizerEventsSelected( true ); 4564 emit organizerEventsSelected( true );
4563 } else { 4565 } else {
4564 emit organizerEventsSelected(false); 4566 emit organizerEventsSelected(false);
4565 } 4567 }
4566 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4568 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4567 KOPrefs::instance()->email() ) ) { 4569 KOPrefs::instance()->email() ) ) {
4568 emit groupEventsSelected( true ); 4570 emit groupEventsSelected( true );
4569 } else { 4571 } else {
4570 emit groupEventsSelected(false); 4572 emit groupEventsSelected(false);
4571 } 4573 }
4572 return; 4574 return;
4573 } else { 4575 } else {
4574 emit todoSelected( false ); 4576 emit todoSelected( false );
4575 emit organizerEventsSelected(false); 4577 emit organizerEventsSelected(false);
4576 emit groupEventsSelected(false); 4578 emit groupEventsSelected(false);
4577 } 4579 }
4578 return; 4580 return;
4579 } 4581 }
4580 4582
4581 /* if ( incidence && incidence->typeID() == todoID ) { 4583 /* if ( incidence && incidence->typeID() == todoID ) {
4582 emit todoSelected( true ); 4584 emit todoSelected( true );
4583 } else { 4585 } else {
4584 emit todoSelected( false ); 4586 emit todoSelected( false );
4585 }*/ 4587 }*/
4586} 4588}
4587 4589
4588 4590
4589void CalendarView::checkClipboard() 4591void CalendarView::checkClipboard()
4590{ 4592{
4591#ifndef KORG_NODND 4593#ifndef KORG_NODND
4592 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4594 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4593 emit pasteEnabled(true); 4595 emit pasteEnabled(true);
4594 } else { 4596 } else {
4595 emit pasteEnabled(false); 4597 emit pasteEnabled(false);
4596 } 4598 }
4597#endif 4599#endif
4598} 4600}
4599 4601
4600void CalendarView::showDates(const DateList &selectedDates) 4602void CalendarView::showDates(const DateList &selectedDates)
4601{ 4603{
4602 // kdDebug() << "CalendarView::selectDates()" << endl; 4604 // kdDebug() << "CalendarView::selectDates()" << endl;
4603 4605
4604 4606
4605 if ( !mBlockShowDates ) { 4607 if ( !mBlockShowDates ) {
4606 if ( mViewManager->currentView() ) { 4608 if ( mViewManager->currentView() ) {
4607 updateView( selectedDates.first(), selectedDates.last() ); 4609 updateView( selectedDates.first(), selectedDates.last() );
4608 } else { 4610 } else {
4609 mViewManager->showAgendaView(); 4611 mViewManager->showAgendaView();
4610 } 4612 }
4611 } 4613 }
4612 4614
4613 QDate date = selectedDates.first(); 4615 QDate date = selectedDates.first();
4614 if ( ! date.isValid() ) { 4616 if ( ! date.isValid() ) {
4615 topLevelWidget()->setCaption(""); 4617 topLevelWidget()->setCaption("");
4616 return; 4618 return;
4617 } 4619 }
4618 4620
4619 QString selDates; 4621 QString selDates;
4620 selDates = KGlobal::locale()->formatDate( date, true); 4622 selDates = KGlobal::locale()->formatDate( date, true);
4621 if (selectedDates.first() < selectedDates.last() ) 4623 if (selectedDates.first() < selectedDates.last() )
4622 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4624 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4623 else { 4625 else {
4624 QString addString; 4626 QString addString;
4625 if ( date == QDateTime::currentDateTime().date() ) 4627 if ( date == QDateTime::currentDateTime().date() )
4626 addString = i18n("Today"); 4628 addString = i18n("Today");
4627 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4629 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4628 addString = i18n("Tomorrow"); 4630 addString = i18n("Tomorrow");
4629 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4631 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4630 addString = i18n("Yesterday"); 4632 addString = i18n("Yesterday");
4631 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4633 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4632 addString = i18n("Day before yesterday"); 4634 addString = i18n("Day before yesterday");
4633 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4635 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4634 addString = i18n("Day after tomorrow"); 4636 addString = i18n("Day after tomorrow");
4635 if ( !addString.isEmpty() ) { 4637 if ( !addString.isEmpty() ) {
4636 topLevelWidget()->setCaption( addString+", " + selDates ); 4638 topLevelWidget()->setCaption( addString+", " + selDates );
4637 return; 4639 return;
4638 } 4640 }
4639 } 4641 }
4640 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4642 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4641 4643
4642} 4644}
4643 4645
4644QPtrList<CalFilter> CalendarView::filters() 4646QPtrList<CalFilter> CalendarView::filters()
4645{ 4647{
4646 return mFilters; 4648 return mFilters;
4647 4649
4648} 4650}
4649void CalendarView::editFilters() 4651void CalendarView::editFilters()
4650{ 4652{
4651 // kdDebug() << "CalendarView::editFilters()" << endl; 4653 // kdDebug() << "CalendarView::editFilters()" << endl;
4652 4654
4653 CalFilter *filter = mFilters.first(); 4655 CalFilter *filter = mFilters.first();
4654 while(filter) { 4656 while(filter) {
4655 filter = mFilters.next(); 4657 filter = mFilters.next();
4656 } 4658 }
4657 4659
4658 mDialogManager->showFilterEditDialog(&mFilters); 4660 mDialogManager->showFilterEditDialog(&mFilters);
4659 updateFilter(); 4661 updateFilter();
4660} 4662}
4661void CalendarView::toggleFilter() 4663void CalendarView::toggleFilter()
4662{ 4664{
4663 if ( mLeftFrame->isHidden() ) { 4665 if ( mLeftFrame->isHidden() ) {
4664 toggleExpand(); 4666 toggleExpand();
4665 showFilter( true ); 4667 showFilter( true );
4666 } else 4668 } else
4667 showFilter(! mCalEditView->isVisible()); 4669 showFilter(! mCalEditView->isVisible());
4668} 4670}
4669 4671
4670KOFilterView *CalendarView::filterView() 4672KOFilterView *CalendarView::filterView()
4671{ 4673{
4672 return mFilterView; 4674 return mFilterView;
4673} 4675}
4674void CalendarView::selectFilter( int fil ) 4676void CalendarView::selectFilter( int fil )
4675{ 4677{
4676 mFilterView->setSelectedFilter( fil ); 4678 mFilterView->setSelectedFilter( fil );
4677 updateUnmanagedViews(); 4679 updateUnmanagedViews();
4678} 4680}
4679void CalendarView::showFilter(bool visible) 4681void CalendarView::showFilter(bool visible)
4680{ 4682{
4681#if 1 4683#if 1
4682 if (visible) { 4684 if (visible) {
4683 mCalEditView->readConfig(); 4685 mCalEditView->readConfig();
4684 mCalEditView->show(); 4686 mCalEditView->show();
4685 QValueList<int> sizes; 4687 QValueList<int> sizes;
4686 sizes = mLeftFrame->sizes(); 4688 sizes = mLeftFrame->sizes();
4687 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4689 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4688 sizes.clear(); 4690 sizes.clear();
4689 sizes << 100; 4691 sizes << 100;
4690 sizes << 0; 4692 sizes << 0;
4691 sizes << 0; 4693 sizes << 0;
4692 sizes << 100; 4694 sizes << 100;
4693 mLeftFrame->setSizes(sizes); 4695 mLeftFrame->setSizes(sizes);
4694 } 4696 }
4695#if 0 4697#if 0
4696 sizes = mLeftFrame->sizes(); 4698 sizes = mLeftFrame->sizes();
4697 int ccc = 0; 4699 int ccc = 0;
4698 while ( ccc < sizes.count()) { 4700 while ( ccc < sizes.count()) {
4699 qDebug("size %d %d ", ccc, sizes[ccc]); 4701 qDebug("size %d %d ", ccc, sizes[ccc]);
4700 ++ccc; 4702 ++ccc;
4701 } 4703 }
4702#endif 4704#endif
4703 4705
4704 } 4706 }
4705 else { 4707 else {
4706 mCalEditView->hide(); 4708 mCalEditView->hide();
4707 } 4709 }
4708#else 4710#else
4709 if (visible) mFilterView->show(); 4711 if (visible) mFilterView->show();
4710 else mFilterView->hide(); 4712 else mFilterView->hide();
4711#endif 4713#endif
4712} 4714}
4713void CalendarView::toggleFilerEnabled( ) 4715void CalendarView::toggleFilerEnabled( )
4714{ 4716{
4715 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4717 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4716 if ( !mFilterView->filtersEnabled() ) 4718 if ( !mFilterView->filtersEnabled() )
4717 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4719 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4718 updateUnmanagedViews(); 4720 updateUnmanagedViews();
4719 4721
4720} 4722}
4721void CalendarView::updateFilter() 4723void CalendarView::updateFilter()
4722{ 4724{
4723 CalFilter *filter = mFilterView->selectedFilter(); 4725 CalFilter *filter = mFilterView->selectedFilter();
4724 if (filter) { 4726 if (filter) {
4725 QString mess; 4727 QString mess;
4726 if (mFilterView->filtersEnabled()) { 4728 if (mFilterView->filtersEnabled()) {
4727 mess = i18n("Filter selected: ")+filter->name(); 4729 mess = i18n("Filter selected: ")+filter->name();
4728 filter->setEnabled(true); 4730 filter->setEnabled(true);
4729 } 4731 }
4730 else filter->setEnabled(false); 4732 else filter->setEnabled(false);
4731 mCalendar->setFilter(filter); 4733 mCalendar->setFilter(filter);
4732 updateView(); 4734 updateView();
4733 if ( !mess.isEmpty() ) 4735 if ( !mess.isEmpty() )
4734 topLevelWidget()->setCaption( mess ); 4736 topLevelWidget()->setCaption( mess );
4735 4737
4736 } 4738 }
4737 emit filtersUpdated(); 4739 emit filtersUpdated();
4738} 4740}
4739 4741
4740void CalendarView::filterEdited() 4742void CalendarView::filterEdited()
4741{ 4743{
4742 mFilterView->updateFilters(); 4744 mFilterView->updateFilters();
4743 updateFilter(); 4745 updateFilter();
4744 writeSettings(); 4746 writeSettings();
4745} 4747}
4746 4748
4747 4749
4748void CalendarView::takeOverEvent() 4750void CalendarView::takeOverEvent()
4749{ 4751{
4750 Incidence *incidence = currentSelection(); 4752 Incidence *incidence = currentSelection();
4751 4753
4752 if (!incidence) return; 4754 if (!incidence) return;
4753 4755
4754 incidence->setOrganizer(KOPrefs::instance()->email()); 4756 incidence->setOrganizer(KOPrefs::instance()->email());
4755 incidence->recreate(); 4757 incidence->recreate();
4756 incidence->setReadOnly(false); 4758 incidence->setReadOnly(false);
4757 4759
4758 updateView(); 4760 updateView();
4759} 4761}
4760 4762
4761void CalendarView::takeOverCalendar() 4763void CalendarView::takeOverCalendar()
4762{ 4764{
4763 // TODO: Create Calendar::allIncidences() function and use it here 4765 // TODO: Create Calendar::allIncidences() function and use it here
4764 4766
4765 clearAllViews(); 4767 clearAllViews();
4766 QPtrList<Event> events = mCalendar->events(); 4768 QPtrList<Event> events = mCalendar->events();
4767 for(uint i=0; i<events.count(); ++i) { 4769 for(uint i=0; i<events.count(); ++i) {
4768 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4770 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4769 events.at(i)->recreate(); 4771 events.at(i)->recreate();
4770 events.at(i)->setReadOnly(false); 4772 events.at(i)->setReadOnly(false);
4771 } 4773 }
4772 4774
4773 QPtrList<Todo> todos = mCalendar->todos(); 4775 QPtrList<Todo> todos = mCalendar->todos();
4774 for(uint i=0; i<todos.count(); ++i) { 4776 for(uint i=0; i<todos.count(); ++i) {
4775 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4777 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4776 todos.at(i)->recreate(); 4778 todos.at(i)->recreate();
4777 todos.at(i)->setReadOnly(false); 4779 todos.at(i)->setReadOnly(false);
4778 } 4780 }
4779 4781
4780 QPtrList<Journal> journals = mCalendar->journals(); 4782 QPtrList<Journal> journals = mCalendar->journals();
4781 for(uint i=0; i<journals.count(); ++i) { 4783 for(uint i=0; i<journals.count(); ++i) {
4782 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4784 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4783 journals.at(i)->recreate(); 4785 journals.at(i)->recreate();
4784 journals.at(i)->setReadOnly(false); 4786 journals.at(i)->setReadOnly(false);
4785 } 4787 }
4786 4788
4787 updateView(); 4789 updateView();
4788} 4790}
4789 4791
4790void CalendarView::showIntro() 4792void CalendarView::showIntro()
4791{ 4793{
4792 kdDebug() << "To be implemented." << endl; 4794 kdDebug() << "To be implemented." << endl;
4793} 4795}
4794 4796
4795QWidgetStack *CalendarView::viewStack() 4797QWidgetStack *CalendarView::viewStack()
4796{ 4798{
4797 return mRightFrame; 4799 return mRightFrame;
4798} 4800}
4799 4801
4800QWidget *CalendarView::leftFrame() 4802QWidget *CalendarView::leftFrame()
4801{ 4803{
4802 return ( QWidget *)mLeftFrame; 4804 return ( QWidget *)mLeftFrame;
4803} 4805}
4804 4806
4805DateNavigator *CalendarView::dateNavigator() 4807DateNavigator *CalendarView::dateNavigator()
4806{ 4808{
4807 return mNavigator; 4809 return mNavigator;
4808} 4810}
4809 4811
4810KDateNavigator* CalendarView::dateNavigatorWidget() 4812KDateNavigator* CalendarView::dateNavigatorWidget()
4811{ 4813{
4812 return mDateNavigator->navigatorView(); 4814 return mDateNavigator->navigatorView();
4813} 4815}
4814void CalendarView::toggleDateNavigatorWidget() 4816void CalendarView::toggleDateNavigatorWidget()
4815{ 4817{
4816 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4818 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4817 4819
4818 if (!KOPrefs::instance()->mShowDateNavigator ) 4820 if (!KOPrefs::instance()->mShowDateNavigator )
4819 mDateNavigator->hide(); 4821 mDateNavigator->hide();
4820 else 4822 else
4821 mDateNavigator->show(); 4823 mDateNavigator->show();
4822} 4824}
4823void CalendarView::addView(KOrg::BaseView *view) 4825void CalendarView::addView(KOrg::BaseView *view)
4824{ 4826{
4825 mViewManager->addView(view); 4827 mViewManager->addView(view);
4826} 4828}
4827 4829
4828void CalendarView::showView(KOrg::BaseView *view) 4830void CalendarView::showView(KOrg::BaseView *view)
4829{ 4831{
4830 mViewManager->showView(view, mLeftFrame->isVisible()); 4832 mViewManager->showView(view, mLeftFrame->isVisible());
4831} 4833}
4832 4834
4833Incidence *CalendarView::currentSelection() 4835Incidence *CalendarView::currentSelection()
4834{ 4836{
4835 return mViewManager->currentSelection(); 4837 return mViewManager->currentSelection();
4836} 4838}
4837void CalendarView::toggleAllDaySize() 4839void CalendarView::toggleAllDaySize()
4838{ 4840{
4839 /* 4841 /*
4840 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4842 if ( KOPrefs::instance()->mAllDaySize > 47 )
4841 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4842 else 4844 else
4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4845 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4844 */ 4846 */
4845 viewManager()->agendaView()->toggleAllDay(); 4847 viewManager()->agendaView()->toggleAllDay();
4846} 4848}
4847void CalendarView::toggleExpand() 4849void CalendarView::toggleExpand()
4848{ 4850{
4849 // if ( mLeftFrame->isHidden() ) { 4851 // if ( mLeftFrame->isHidden() ) {
4850 // mLeftFrame->show(); 4852 // mLeftFrame->show();
4851 // emit calendarViewExpanded( false ); 4853 // emit calendarViewExpanded( false );
4852 // } else { 4854 // } else {
4853 // mLeftFrame->hide(); 4855 // mLeftFrame->hide();
4854 // emit calendarViewExpanded( true ); 4856 // emit calendarViewExpanded( true );
4855 // } 4857 // }
4856 //qDebug(" CalendarView::toggleExpand()"); 4858 //qDebug(" CalendarView::toggleExpand()");
4857 globalFlagBlockAgenda = 1; 4859 globalFlagBlockAgenda = 1;
4858 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4860 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4859 globalFlagBlockAgenda = 5; 4861 globalFlagBlockAgenda = 5;
4860 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4862 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4861 //mViewManager->showView( 0, true ); 4863 //mViewManager->showView( 0, true );
4862} 4864}
4863 4865
4864void CalendarView::calendarModified( bool modified, Calendar * ) 4866void CalendarView::calendarModified( bool modified, Calendar * )
4865{ 4867{
4866 setModified( modified ); 4868 setModified( modified );
4867} 4869}
4868 4870
4869Todo *CalendarView::selectedTodo() 4871Todo *CalendarView::selectedTodo()
4870{ 4872{
4871 Incidence *incidence = currentSelection(); 4873 Incidence *incidence = currentSelection();
4872 if ( incidence && incidence->typeID() == todoID ) { 4874 if ( incidence && incidence->typeID() == todoID ) {
4873 return static_cast<Todo *>( incidence ); 4875 return static_cast<Todo *>( incidence );
4874 } 4876 }
4875 4877
4876 incidence = mTodoList->selectedIncidences().first(); 4878 incidence = mTodoList->selectedIncidences().first();
4877 if ( incidence && incidence->typeID() == todoID ) { 4879 if ( incidence && incidence->typeID() == todoID ) {
4878 return static_cast<Todo *>( incidence ); 4880 return static_cast<Todo *>( incidence );
4879 } 4881 }
4880 4882
4881 return 0; 4883 return 0;
4882} 4884}
4883 4885
4884void CalendarView::showIncidence() 4886void CalendarView::showIncidence()
4885{ 4887{
4886 mViewerCallerIsSearchDialog = false; 4888 mViewerCallerIsSearchDialog = false;
4887 Incidence *incidence = currentSelection(); 4889 Incidence *incidence = currentSelection();
4888 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4890 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4889 if ( incidence ) { 4891 if ( incidence ) {
4890 ShowIncidenceVisitor v; 4892 ShowIncidenceVisitor v;
4891 v.act( incidence, this ); 4893 v.act( incidence, this );
4892 } 4894 }
4893} 4895}
4894void CalendarView::editIncidenceDescription() 4896void CalendarView::editIncidenceDescription()
4895{ 4897{
4896 mFlagEditDescription = true; 4898 mFlagEditDescription = true;
4897 editIncidence(); 4899 editIncidence();
4898 mFlagEditDescription = false; 4900 mFlagEditDescription = false;
4899} 4901}
4900void CalendarView::editIncidence() 4902void CalendarView::editIncidence()
4901{ 4903{
4902 // qDebug("editIncidence() "); 4904 // qDebug("editIncidence() ");
4903 Incidence *incidence = currentSelection(); 4905 Incidence *incidence = currentSelection();
4904 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4906 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4905 if ( incidence ) { 4907 if ( incidence ) {
4906 EditIncidenceVisitor v; 4908 EditIncidenceVisitor v;
4907 v.act( incidence, this ); 4909 v.act( incidence, this );
4908 } 4910 }
4909} 4911}
4910 4912
4911void CalendarView::deleteIncidence() 4913void CalendarView::deleteIncidence()
4912{ 4914{
4913 Incidence *incidence = currentSelection(); 4915 Incidence *incidence = currentSelection();
4914 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4916 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4915 if ( incidence ) { 4917 if ( incidence ) {
4916 deleteIncidence(incidence); 4918 deleteIncidence(incidence);
4917 } 4919 }
4918} 4920}
4919void CalendarView::showIncidence(QString uid) 4921void CalendarView::showIncidence(QString uid)
4920{ 4922{
4921 Incidence *inc = mCalendar->incidence( uid ); 4923 Incidence *inc = mCalendar->incidence( uid );
4922 if ( inc ) 4924 if ( inc )
4923 showIncidence( inc ); 4925 showIncidence( inc );
4924} 4926}
4925void CalendarView::showIncidence(Incidence *incidence) 4927void CalendarView::showIncidence(Incidence *incidence)
4926{ 4928{
4927 mViewerCallerIsSearchDialog = false; 4929 mViewerCallerIsSearchDialog = false;
4928 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4930 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4929 if ( sender() && mDialogManager->getSearchDialog() ) { 4931 if ( sender() && mDialogManager->getSearchDialog() ) {
4930 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4932 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4931 mViewerCallerIsSearchDialog = true; 4933 mViewerCallerIsSearchDialog = true;
4932 } 4934 }
4933 } 4935 }
4934 if ( incidence ) { 4936 if ( incidence ) {
4935 ShowIncidenceVisitor v; 4937 ShowIncidenceVisitor v;
4936 v.act( incidence, this ); 4938 v.act( incidence, this );
4937 } 4939 }
4938} 4940}
4939 4941
4940void CalendarView::editIncidence(Incidence *incidence) 4942void CalendarView::editIncidence(Incidence *incidence)
4941{ 4943{
4942 if ( incidence ) { 4944 if ( incidence ) {
4943 4945
4944 EditIncidenceVisitor v; 4946 EditIncidenceVisitor v;
4945 v.act( incidence, this ); 4947 v.act( incidence, this );
4946 4948
4947 } 4949 }
4948} 4950}
4949 4951
4950void CalendarView::deleteIncidence(Incidence *incidence) 4952void CalendarView::deleteIncidence(Incidence *incidence)
4951{ 4953{
4952 //qDebug(" CalendarView::deleteIncidence "); 4954 //qDebug(" CalendarView::deleteIncidence ");
4953 if ( incidence == 0 ) { 4955 if ( incidence == 0 ) {
4954 updateView(); 4956 updateView();
4955 emit updateSearchDialog(); 4957 emit updateSearchDialog();
4956 return; 4958 return;
4957 } 4959 }
4958 if ( incidence ) { 4960 if ( incidence ) {
4959 DeleteIncidenceVisitor v; 4961 DeleteIncidenceVisitor v;
4960 v.act( incidence, this ); 4962 v.act( incidence, this );
4961 } 4963 }
4962} 4964}
4963 4965
4964 4966
4965void CalendarView::lookForOutgoingMessages() 4967void CalendarView::lookForOutgoingMessages()
4966{ 4968{
4967 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 4969 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4968 ogd->loadMessages(); 4970 ogd->loadMessages();
4969} 4971}
4970 4972
4971void CalendarView::lookForIncomingMessages() 4973void CalendarView::lookForIncomingMessages()
4972{ 4974{
4973 IncomingDialog *icd = mDialogManager->incomingDialog(); 4975 IncomingDialog *icd = mDialogManager->incomingDialog();
4974 icd->retrieve(); 4976 icd->retrieve();
4975} 4977}
4976 4978
4977bool CalendarView::removeCompletedSubTodos( Todo* t ) 4979bool CalendarView::removeCompletedSubTodos( Todo* t )
4978{ 4980{
4979 bool deleteTodo = true; 4981 bool deleteTodo = true;
4980 QPtrList<Incidence> subTodos; 4982 QPtrList<Incidence> subTodos;
4981 Incidence *aTodo; 4983 Incidence *aTodo;
4982 subTodos = t->relations(); 4984 subTodos = t->relations();
4983 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 4985 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4984 if (! removeCompletedSubTodos( (Todo*) aTodo )) 4986 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4985 deleteTodo = false; 4987 deleteTodo = false;
4986 } 4988 }
4987 if ( deleteTodo ) { 4989 if ( deleteTodo ) {
4988 if ( t->isCompleted() && !t->doesRecur()) { 4990 if ( t->isCompleted() && !t->doesRecur()) {
4989 checkExternalId( t ); 4991 checkExternalId( t );
4990 mCalendar->deleteTodo( t ); 4992 mCalendar->deleteTodo( t );
4991 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 4993 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4992 } 4994 }
4993 else 4995 else
4994 deleteTodo = false; 4996 deleteTodo = false;
4995 } 4997 }
4996 return deleteTodo; 4998 return deleteTodo;
4997 4999
4998} 5000}
4999void CalendarView::purgeCompleted() 5001void CalendarView::purgeCompleted()
5000{ 5002{
5001 int result = KMessageBox::warningContinueCancel(this, 5003 int result = KMessageBox::warningContinueCancel(this,
5002 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5004 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5003 5005
5004 if (result == KMessageBox::Continue) { 5006 if (result == KMessageBox::Continue) {
5005 5007
5006 QPtrList<Todo> todoCal; 5008 QPtrList<Todo> todoCal;
5007 QPtrList<Todo> rootTodos; 5009 QPtrList<Todo> rootTodos;
5008 //QPtrList<Incidence> rel; 5010 //QPtrList<Incidence> rel;
5009 Todo *aTodo; 5011 Todo *aTodo;
5010 todoCal = calendar()->todos(); 5012 todoCal = calendar()->todos();
5011 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5013 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5012 if ( !aTodo->relatedTo() ) 5014 if ( !aTodo->relatedTo() )
5013 rootTodos.append( aTodo ); 5015 rootTodos.append( aTodo );
5014 } 5016 }
5015 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5017 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5016 removeCompletedSubTodos( aTodo ); 5018 removeCompletedSubTodos( aTodo );
5017 } 5019 }
5018 5020
5019 updateView(); 5021 updateView();
5020 } 5022 }
5021} 5023}
5022 5024
5023void CalendarView::slotCalendarChanged() 5025void CalendarView::slotCalendarChanged()
5024{ 5026{
5025 ; 5027 ;
5026} 5028}
5027 5029
5028void CalendarView::keyPressEvent ( QKeyEvent *e) 5030void CalendarView::keyPressEvent ( QKeyEvent *e)
5029{ 5031{
5030 //qDebug("CalendarView::keyPressEvent "); 5032 //qDebug("CalendarView::keyPressEvent ");
5031 e->ignore(); 5033 e->ignore();
5032} 5034}
5033 5035
5034 5036
5035bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 5037bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
5036{ 5038{
5037 5039
5038 if ( manager != mSyncManager) 5040 if ( manager != mSyncManager)
5039 qDebug("KO: Internal error-1. SyncManager mismatch "); 5041 qDebug("KO: Internal error-1. SyncManager mismatch ");
5040 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5042 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5041 qDebug("KO: SyncKDE request detected!"); 5043 qDebug("KO: SyncKDE request detected!");
5042 } 5044 }
5043 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5045 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5044 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5046 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5045 return syncCalendar( filename, mode ); 5047 return syncCalendar( filename, mode );
5046} 5048}
5047bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5049bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5048{ 5050{
5049 //mSyncManager = manager; 5051 //mSyncManager = manager;
5050 if ( manager != mSyncManager) 5052 if ( manager != mSyncManager)
5051 qDebug("KO: Internal error-2. SyncManager mismatch "); 5053 qDebug("KO: Internal error-2. SyncManager mismatch ");
5052 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5054 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5053 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5055 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5054 if ( resource == "sharp" ) 5056 if ( resource == "sharp" )
5055 syncExternal( 0 ); 5057 syncExternal( 0 );
5056 if ( resource == "phone" ) 5058 if ( resource == "phone" )
5057 syncExternal( 1 ); 5059 syncExternal( 1 );
5058 // pending setmodified 5060 // pending setmodified
5059 return true; 5061 return true;
5060} 5062}
5061void CalendarView::setSyncManager(KSyncManager* manager) 5063void CalendarView::setSyncManager(KSyncManager* manager)
5062{ 5064{
5063 mSyncManager = manager; 5065 mSyncManager = manager;
5064} 5066}
5065 5067
5066void CalendarView::removeSyncInfo( QString syncProfile) 5068void CalendarView::removeSyncInfo( QString syncProfile)
5067{ 5069{
5068 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5070 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5069 mCalendar->removeSyncInfo( syncProfile ); 5071 mCalendar->removeSyncInfo( syncProfile );
5070 5072
5071} 5073}
5072 5074
5073void CalendarView::undo_delete() 5075void CalendarView::undo_delete()
5074{ 5076{
5075 //qDebug("undo_delete() "); 5077 //qDebug("undo_delete() ");
5076 Incidence* undo = mCalendar->undoIncidence(); 5078 Incidence* undo = mCalendar->undoIncidence();
5077 if ( !undo ) { 5079 if ( !undo ) {
5078 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5080 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5079 i18n("KO/Pi")); 5081 i18n("KO/Pi"));
5080 return; 5082 return;
5081 } 5083 }
5082 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5084 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5083 i18n("\nAre you sure you want\nto restore this?"), 5085 i18n("\nAre you sure you want\nto restore this?"),
5084 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5086 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5085 mCalendar->undoDeleteIncidence(); 5087 mCalendar->undoDeleteIncidence();
5086 updateView(); 5088 updateView();
5087 } 5089 }
5088} 5090}
5089 5091
5090void CalendarView::slotViewerClosed() 5092void CalendarView::slotViewerClosed()
5091{ 5093{
5092 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5094 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5093} 5095}
5094 5096
5095void CalendarView::resetFocus() 5097void CalendarView::resetFocus()
5096{ 5098{
5097 if ( mViewerCallerIsSearchDialog ) { 5099 if ( mViewerCallerIsSearchDialog ) {
5098 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5100 if ( mDialogManager->getSearchDialog()->isVisible() ){
5099 mDialogManager->getSearchDialog()->raise(); 5101 mDialogManager->getSearchDialog()->raise();
5100 mDialogManager->getSearchDialog()->setActiveWindow(); 5102 mDialogManager->getSearchDialog()->setActiveWindow();
5101 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5103 mDialogManager->getSearchDialog()->listview()->resetFocus();
5102 } else 5104 } else
5103 mViewerCallerIsSearchDialog = false; 5105 mViewerCallerIsSearchDialog = false;
5104 } 5106 }
5105 if ( !mViewerCallerIsSearchDialog ) { 5107 if ( !mViewerCallerIsSearchDialog ) {
5106 //mViewManager->currentView()->setFocus(); 5108 //mViewManager->currentView()->setFocus();
5107 //qDebug("sssssssssssssssset focus "); 5109 //qDebug("sssssssssssssssset focus ");
5108 topLevelWidget()->raise(); 5110 topLevelWidget()->raise();
5109 setActiveWindow(); 5111 setActiveWindow();
5110 //setFocus(); 5112 //setFocus();
5111 } 5113 }
5112 mViewerCallerIsSearchDialog = false; 5114 mViewerCallerIsSearchDialog = false;
5113} 5115}
5114 5116
5115void CalendarView::showNextAlarms() 5117void CalendarView::showNextAlarms()
5116{ 5118{
5117 QString message; 5119 QString message;
5118 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5120 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
5119 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5121 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
5120 QString sum = mCalendar->nextSummary(); 5122 QString sum = mCalendar->nextSummary();
5121 QDateTime nextA = mNextAlarmDateTime; 5123 QDateTime nextA = mNextAlarmDateTime;
5122 QDateTime cur = QDateTime::currentDateTime(); 5124 QDateTime cur = QDateTime::currentDateTime();
5123 int secs = cur.secsTo( nextA ); 5125 int secs = cur.secsTo( nextA );
5124 int min = secs /60; 5126 int min = secs /60;
5125 int hours = min /60; 5127 int hours = min /60;
5126 min = min % 60; 5128 min = min % 60;
5127 int days = hours /24; 5129 int days = hours /24;
5128 hours = hours % 24; 5130 hours = hours % 24;
5129 5131
5130 //message = i18n("The next alarm is in:\n"); 5132 //message = i18n("The next alarm is in:\n");
5131 if ( days > 1 ) 5133 if ( days > 1 )
5132 message += i18n("%1 days\n").arg( days ); 5134 message += i18n("%1 days\n").arg( days );
5133 else if ( days == 1 ) 5135 else if ( days == 1 )
5134 message += i18n("1 day\n"); 5136 message += i18n("1 day\n");
5135 if ( hours > 1 ) 5137 if ( hours > 1 )
5136 message += i18n("%1 hours\n").arg( hours ); 5138 message += i18n("%1 hours\n").arg( hours );
5137 else if ( hours == 1 ) 5139 else if ( hours == 1 )
5138 message += i18n("1 hour\n"); 5140 message += i18n("1 hour\n");
5139 if ( min > 1 ) 5141 if ( min > 1 )
5140 message += i18n("%1 minutes\n").arg( min ); 5142 message += i18n("%1 minutes\n").arg( min );
5141 else if ( min == 1 ) 5143 else if ( min == 1 )
5142 message += i18n("1 minute\n"); 5144 message += i18n("1 minute\n");
5143 if ( message.isEmpty() ) 5145 if ( message.isEmpty() )
5144 message = i18n("The next alarm is in\nless than one minute!"); 5146 message = i18n("The next alarm is in\nless than one minute!");
5145 else 5147 else
5146 message = i18n("The next alarm is in:\n") + message; 5148 message = i18n("The next alarm is in:\n") + message;
5147 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5149 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
5148 } else { 5150 } else {
5149 message = i18n("There is no next alarm."); 5151 message = i18n("There is no next alarm.");
5150 5152
5151 } 5153 }
5152#ifdef DESKTOP_VERSION 5154#ifdef DESKTOP_VERSION
5153 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5155 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
5154 message += i18n("\nThe internal alarm notification is disabled!\n"); 5156 message += i18n("\nThe internal alarm notification is disabled!\n");
5155 message += i18n("Enable it in the settings menu, TAB alarm."); 5157 message += i18n("Enable it in the settings menu, TAB alarm.");
5156 } 5158 }
5157 5159
5158#endif 5160#endif
5159 KMessageBox::information( this, message); 5161 KMessageBox::information( this, message);
5160} 5162}
5163
5164void CalendarView::displayCalendarInfo( int id )
5165{
5166 int e, t,j;
5167 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
5168 QString name = kkf->mName;
5169 mCalendar->getIncidenceCount( id, e, t, j );
5170 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
5171 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file);
5172 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j );
5173 KMessageBox::information( this, mess );
5174
5175
5176}
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 8670832..0924f07 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,669 +1,670 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#include <qscrollbar.h> 33#include <qscrollbar.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qtopia/ir.h> 35#include <qtopia/ir.h>
36#else 36#else
37#define Ir char 37#define Ir char
38#endif 38#endif
39#include <libkcal/calendar.h> 39#include <libkcal/calendar.h>
40#include <libkcal/scheduler.h> 40#include <libkcal/scheduler.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <KDGanttMinimizeSplitter.h> 43#include <KDGanttMinimizeSplitter.h>
44 44
45#include <korganizer/calendarviewbase.h> 45#include <korganizer/calendarviewbase.h>
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn ); 141 void mergeFile( QString fn );
142 142
143 signals: 143 signals:
144 void save (); 144 void save ();
145 void saveStopTimer (); 145 void saveStopTimer ();
146 void tempDisableBR(bool); 146 void tempDisableBR(bool);
147 /** This todo has been modified */ 147 /** This todo has been modified */
148 void todoModified(Todo *, int); 148 void todoModified(Todo *, int);
149 149
150 /** when change is made to options dialog, the topwidget will catch this 150 /** when change is made to options dialog, the topwidget will catch this
151 * and emit this signal which notifies all widgets which have registered 151 * and emit this signal which notifies all widgets which have registered
152 * for notification to update their settings. */ 152 * for notification to update their settings. */
153 void configChanged(); 153 void configChanged();
154 /** emitted when the topwidget is closing down, so that any attached 154 /** emitted when the topwidget is closing down, so that any attached
155 child windows can also close. */ 155 child windows can also close. */
156 void closingDown(); 156 void closingDown();
157 /** emitted right before we die */ 157 /** emitted right before we die */
158 void closed(QWidget *); 158 void closed(QWidget *);
159 159
160 /** Emitted when state of modified flag changes */ 160 /** Emitted when state of modified flag changes */
161 void modifiedChanged(bool); 161 void modifiedChanged(bool);
162 void signalmodified(); 162 void signalmodified();
163 163
164 /** Emitted when state of read-only flag changes */ 164 /** Emitted when state of read-only flag changes */
165 void readOnlyChanged(bool); 165 void readOnlyChanged(bool);
166 166
167 /** Emitted when the unit of navigation changes */ 167 /** Emitted when the unit of navigation changes */
168 void changeNavStringPrev(const QString &); 168 void changeNavStringPrev(const QString &);
169 void changeNavStringNext(const QString &); 169 void changeNavStringNext(const QString &);
170 170
171 /** Emitted when state of events selection has changed and user is organizer*/ 171 /** Emitted when state of events selection has changed and user is organizer*/
172 void organizerEventsSelected(bool); 172 void organizerEventsSelected(bool);
173 /** Emitted when state of events selection has changed and user is attendee*/ 173 /** Emitted when state of events selection has changed and user is attendee*/
174 void groupEventsSelected(bool); 174 void groupEventsSelected(bool);
175 /** 175 /**
176 Emitted when an incidence gets selected. If the selection is cleared the 176 Emitted when an incidence gets selected. If the selection is cleared the
177 signal is emitted with 0 as argument. 177 signal is emitted with 0 as argument.
178 */ 178 */
179 void incidenceSelected( Incidence * ); 179 void incidenceSelected( Incidence * );
180 /** Emitted, when a todoitem is selected or deselected. */ 180 /** Emitted, when a todoitem is selected or deselected. */
181 void todoSelected( bool ); 181 void todoSelected( bool );
182 182
183 /** 183 /**
184 Emitted, when clipboard content changes. Parameter indicates if paste 184 Emitted, when clipboard content changes. Parameter indicates if paste
185 is possible or not. 185 is possible or not.
186 */ 186 */
187 void pasteEnabled(bool); 187 void pasteEnabled(bool);
188 188
189 /** Emitted, when the number of incoming messages has changed. */ 189 /** Emitted, when the number of incoming messages has changed. */
190 void numIncomingChanged(int); 190 void numIncomingChanged(int);
191 191
192 /** Emitted, when the number of outgoing messages has changed. */ 192 /** Emitted, when the number of outgoing messages has changed. */
193 void numOutgoingChanged(int); 193 void numOutgoingChanged(int);
194 194
195 /** Send status message, which can e.g. be displayed in the status bar. */ 195 /** Send status message, which can e.g. be displayed in the status bar. */
196 void statusMessage(const QString &); 196 void statusMessage(const QString &);
197 197
198 void calendarViewExpanded( bool ); 198 void calendarViewExpanded( bool );
199 void updateSearchDialog(); 199 void updateSearchDialog();
200 void filtersUpdated(); 200 void filtersUpdated();
201 201
202 202
203 public slots: 203 public slots:
204 void displayCalendarInfo( int id );
204 void nextConflict( bool all, bool allday ); 205 void nextConflict( bool all, bool allday );
205 void conflictAll(); 206 void conflictAll();
206 void conflictAllday(); 207 void conflictAllday();
207 void conflictNotAll(); 208 void conflictNotAll();
208 void setCalReadOnly( int id, bool readO ); 209 void setCalReadOnly( int id, bool readO );
209 void checkAlarms(); 210 void checkAlarms();
210 void checkFiles(); 211 void checkFiles();
211 void slotprintSelInc(); 212 void slotprintSelInc();
212 void showNextAlarms(); 213 void showNextAlarms();
213 void showOpenError(); 214 void showOpenError();
214 void watchSavedFile(); 215 void watchSavedFile();
215 void recheckTimerAlarm(); 216 void recheckTimerAlarm();
216 void checkNextTimerAlarm(); 217 void checkNextTimerAlarm();
217 void addAlarm(const QDateTime &qdt, const QString &noti ); 218 void addAlarm(const QDateTime &qdt, const QString &noti );
218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 219 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
219 void removeAlarm(const QDateTime &qdt, const QString &noti ); 220 void removeAlarm(const QDateTime &qdt, const QString &noti );
220 221
221 /** options dialog made a changed to the configuration. we catch this 222 /** options dialog made a changed to the configuration. we catch this
222 * and notify all widgets which need to update their configuration. */ 223 * and notify all widgets which need to update their configuration. */
223 void updateConfig(); 224 void updateConfig();
224 225
225 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 226 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
226 const QStringList& anniversaryList, const QStringList& realNameList, 227 const QStringList& anniversaryList, const QStringList& realNameList,
227 const QStringList& emailList, const QStringList& assembledNameList, 228 const QStringList& emailList, const QStringList& assembledNameList,
228 const QStringList& uidList); 229 const QStringList& uidList);
229 230
230 /** 231 /**
231 Load calendar from file \a filename. If \a merge is true, load 232 Load calendar from file \a filename. If \a merge is true, load
232 calendar into existing one, if it is false, clear calendar, before 233 calendar into existing one, if it is false, clear calendar, before
233 loading. Return true, if calendar could be successfully loaded. 234 loading. Return true, if calendar could be successfully loaded.
234 */ 235 */
235 bool openCalendar(QString filename, bool merge=false); 236 bool openCalendar(QString filename, bool merge=false);
236 bool loadCalendars(); 237 bool loadCalendars();
237 bool saveCalendars(); 238 bool saveCalendars();
238 bool restoreCalendarSettings(); 239 bool restoreCalendarSettings();
239 bool addCalendar( KopiCalendarFile * ); 240 bool addCalendar( KopiCalendarFile * );
240 void addCalendarId( int id ); 241 void addCalendarId( int id );
241 bool syncCalendar(QString filename,int mode = 0 ); 242 bool syncCalendar(QString filename,int mode = 0 );
242 243
243 /** 244 /**
244 Save calendar data to file. Return true if calendar could be 245 Save calendar data to file. Return true if calendar could be
245 successfully saved. 246 successfully saved.
246 */ 247 */
247 bool saveCalendar(QString filename); 248 bool saveCalendar(QString filename);
248 249
249 /** 250 /**
250 Close calendar. Clear calendar data and reset views to display an empty 251 Close calendar. Clear calendar data and reset views to display an empty
251 calendar. 252 calendar.
252 */ 253 */
253 void closeCalendar(); 254 void closeCalendar();
254 255
255 /** Archive old events of calendar */ 256 /** Archive old events of calendar */
256 void archiveCalendar(); 257 void archiveCalendar();
257 258
258 void showIncidence(); 259 void showIncidence();
259 void editIncidence(); 260 void editIncidence();
260 void editIncidenceDescription(); 261 void editIncidenceDescription();
261 void deleteIncidence(); 262 void deleteIncidence();
262 void cloneIncidence(); 263 void cloneIncidence();
263 void moveIncidence(); 264 void moveIncidence();
264 void beamIncidence(); 265 void beamIncidence();
265 void toggleCancelIncidence(); 266 void toggleCancelIncidence();
266 267
267 /** create an editeventwin with supplied date/time, and if bool is true, 268 /** create an editeventwin with supplied date/time, and if bool is true,
268 * make the event take all day. */ 269 * make the event take all day. */
269 void newEvent(QDateTime, QDateTime, bool allDay ); 270 void newEvent(QDateTime, QDateTime, bool allDay );
270 void newEvent(QDateTime, QDateTime); 271 void newEvent(QDateTime, QDateTime);
271 void newEvent(QDateTime fh); 272 void newEvent(QDateTime fh);
272 void newEvent(QDate dt); 273 void newEvent(QDate dt);
273 /** create new event without having a date hint. Takes current date as 274 /** create new event without having a date hint. Takes current date as
274 default hint. */ 275 default hint. */
275 void newEvent(); 276 void newEvent();
276 void newFloatingEvent(); 277 void newFloatingEvent();
277 278
278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 279 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
279 void showIncidence(Incidence *); 280 void showIncidence(Incidence *);
280 void showIncidence(QString uid); 281 void showIncidence(QString uid);
281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 282 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
282 void editIncidence(Incidence *); 283 void editIncidence(Incidence *);
283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 284 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
284 void deleteIncidence(Incidence *); 285 void deleteIncidence(Incidence *);
285 void cloneIncidence(Incidence *); 286 void cloneIncidence(Incidence *);
286 void cancelIncidence(Incidence *); 287 void cancelIncidence(Incidence *);
287 /** Create an editor for the supplied event. */ 288 /** Create an editor for the supplied event. */
288 void editEvent(Event *); 289 void editEvent(Event *);
289 /** Delete the supplied event. */ 290 /** Delete the supplied event. */
290 void deleteEvent(Event *); 291 void deleteEvent(Event *);
291 /** Delete the event with the given unique ID. Returns false, if event wasn't 292 /** Delete the event with the given unique ID. Returns false, if event wasn't
292 found. */ 293 found. */
293 bool deleteEvent(const QString &uid); 294 bool deleteEvent(const QString &uid);
294 /** Create a read-only viewer dialog for the supplied event. */ 295 /** Create a read-only viewer dialog for the supplied event. */
295 void showEvent(Event *); 296 void showEvent(Event *);
296 297
297 void editJournal(Journal *); 298 void editJournal(Journal *);
298 void showJournal(Journal *); 299 void showJournal(Journal *);
299 void deleteJournal(Journal *); 300 void deleteJournal(Journal *);
300 /** Create an editor dialog for a todo */ 301 /** Create an editor dialog for a todo */
301 void editTodo(Todo *); 302 void editTodo(Todo *);
302 /** Create a read-only viewer dialog for the supplied todo */ 303 /** Create a read-only viewer dialog for the supplied todo */
303 void showTodo(Todo *); 304 void showTodo(Todo *);
304 /** create new todo */ 305 /** create new todo */
305 void newTodo(); 306 void newTodo();
306 void newTodoDateTime(QDateTime, bool allday); 307 void newTodoDateTime(QDateTime, bool allday);
307 /** create new todo with a parent todo */ 308 /** create new todo with a parent todo */
308 void newSubTodo(); 309 void newSubTodo();
309 /** create new todo with a parent todo */ 310 /** create new todo with a parent todo */
310 void newSubTodo(Todo *); 311 void newSubTodo(Todo *);
311 /** Delete todo */ 312 /** Delete todo */
312 void deleteTodo(Todo *); 313 void deleteTodo(Todo *);
313 314
314 315
315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 316 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
316 * emitted as result. */ 317 * emitted as result. */
317 void checkClipboard(); 318 void checkClipboard();
318 319
319 /** using the KConfig associated with the kapp variable, read in the 320 /** using the KConfig associated with the kapp variable, read in the
320 * settings from the config file. 321 * settings from the config file.
321 */ 322 */
322 void readSettings(); 323 void readSettings();
323 324
324 /** write current state to config file. */ 325 /** write current state to config file. */
325 void writeSettings(); 326 void writeSettings();
326 327
327 /** read settings for calendar filters */ 328 /** read settings for calendar filters */
328 void readFilterSettings(KConfig *config); 329 void readFilterSettings(KConfig *config);
329 330
330 /** write settings for calendar filters */ 331 /** write settings for calendar filters */
331 void writeFilterSettings(KConfig *config); 332 void writeFilterSettings(KConfig *config);
332 333
333 /** passes on the message that an event has changed to the currently 334 /** passes on the message that an event has changed to the currently
334 * activated view so that it can make appropriate display changes. */ 335 * activated view so that it can make appropriate display changes. */
335 void changeEventDisplay(Event *, int); 336 void changeEventDisplay(Event *, int);
336 void changeIncidenceDisplay(Incidence *, int); 337 void changeIncidenceDisplay(Incidence *, int);
337 void changeTodoDisplay(Todo *, int); 338 void changeTodoDisplay(Todo *, int);
338 339
339 void eventAdded(Event *); 340 void eventAdded(Event *);
340 void eventChanged(Event *); 341 void eventChanged(Event *);
341 void eventToBeDeleted(Event *); 342 void eventToBeDeleted(Event *);
342 void eventDeleted(); 343 void eventDeleted();
343 344
344 void todoAdded(Todo *); 345 void todoAdded(Todo *);
345 void todoChanged(Todo *); 346 void todoChanged(Todo *);
346 void todoToBeDeleted(Todo *); 347 void todoToBeDeleted(Todo *);
347 void todoDeleted(); 348 void todoDeleted();
348 349
349 void updateView(const QDate &start, const QDate &end); 350 void updateView(const QDate &start, const QDate &end);
350 void updateView(); 351 void updateView();
351 void clearAllViews(); 352 void clearAllViews();
352 353
353 /** Full update of visible todo views */ 354 /** Full update of visible todo views */
354 void updateTodoViews(); 355 void updateTodoViews();
355 356
356 void updateUnmanagedViews(); 357 void updateUnmanagedViews();
357 358
358 /** cut the current appointment to the clipboard */ 359 /** cut the current appointment to the clipboard */
359 void edit_cut(); 360 void edit_cut();
360 361
361 /** copy the current appointment(s) to the clipboard */ 362 /** copy the current appointment(s) to the clipboard */
362 void edit_copy(); 363 void edit_copy();
363 364
364 /** paste the current vobject(s) in the clipboard buffer into calendar */ 365 /** paste the current vobject(s) in the clipboard buffer into calendar */
365 void edit_paste(); 366 void edit_paste();
366 367
367 /** edit viewing and configuration options. */ 368 /** edit viewing and configuration options. */
368 void edit_options(); 369 void edit_options();
369 void edit_global_options(); 370 void edit_global_options();
370 /** 371 /**
371 Functions for printing, previewing a print, and setting up printing 372 Functions for printing, previewing a print, and setting up printing
372 parameters. 373 parameters.
373 */ 374 */
374 void print(); 375 void print();
375 void printSetup(); 376 void printSetup();
376 void printPreview(); 377 void printPreview();
377 378
378 /** Export as iCalendar file */ 379 /** Export as iCalendar file */
379 bool exportICalendar(); 380 bool exportICalendar();
380 bool exportICalendar( QString fn ); 381 bool exportICalendar( QString fn );
381 382
382 /** Export as vCalendar file */ 383 /** Export as vCalendar file */
383 bool exportVCalendar( QString fn); 384 bool exportVCalendar( QString fn);
384 385
385 /** pop up a dialog to show an existing appointment. */ 386 /** pop up a dialog to show an existing appointment. */
386 void appointment_show(); 387 void appointment_show();
387 /** 388 /**
388 * pop up an Appointment Dialog to edit an existing appointment.Get 389 * pop up an Appointment Dialog to edit an existing appointment.Get
389 * information on the appointment from the list of unique IDs that is 390 * information on the appointment from the list of unique IDs that is
390 * currently in the View, called currIds. 391 * currently in the View, called currIds.
391 */ 392 */
392 void appointment_edit(); 393 void appointment_edit();
393 /** 394 /**
394 * pop up dialog confirming deletion of currently selected event in the 395 * pop up dialog confirming deletion of currently selected event in the
395 * View. 396 * View.
396 */ 397 */
397 void appointment_delete(); 398 void appointment_delete();
398 399
399 /** mails the currently selected event to a particular user as a vCalendar 400 /** mails the currently selected event to a particular user as a vCalendar
400 attachment. */ 401 attachment. */
401 void action_mail(); 402 void action_mail();
402 403
403 /* frees a subtodo from it's relation */ 404 /* frees a subtodo from it's relation */
404 void todo_unsub( Todo * ); 405 void todo_unsub( Todo * );
405 void todo_resub( Todo * parent, Todo * sub ); 406 void todo_resub( Todo * parent, Todo * sub );
406 407
407 /** Take ownership of selected event. */ 408 /** Take ownership of selected event. */
408 void takeOverEvent(); 409 void takeOverEvent();
409 410
410 /** Take ownership of all events in calendar. */ 411 /** Take ownership of all events in calendar. */
411 void takeOverCalendar(); 412 void takeOverCalendar();
412 413
413 /** query whether or not the calendar is "dirty". */ 414 /** query whether or not the calendar is "dirty". */
414 bool isModified(); 415 bool isModified();
415 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 416 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
416 void setModified(bool modified=true); 417 void setModified(bool modified=true);
417 418
418 /** query if the calendar is read-only. */ 419 /** query if the calendar is read-only. */
419 bool isReadOnly(); 420 bool isReadOnly();
420 /** set state of calendar to read-only */ 421 /** set state of calendar to read-only */
421 void setReadOnly(bool readOnly=true); 422 void setReadOnly(bool readOnly=true);
422 423
423 void eventUpdated(Incidence *); 424 void eventUpdated(Incidence *);
424 425
425 /* iTIP scheduling actions */ 426 /* iTIP scheduling actions */
426 void schedule_publish(Incidence *incidence = 0); 427 void schedule_publish(Incidence *incidence = 0);
427 void schedule_request(Incidence *incidence = 0); 428 void schedule_request(Incidence *incidence = 0);
428 void schedule_refresh(Incidence *incidence = 0); 429 void schedule_refresh(Incidence *incidence = 0);
429 void schedule_cancel(Incidence *incidence = 0); 430 void schedule_cancel(Incidence *incidence = 0);
430 void schedule_add(Incidence *incidence = 0); 431 void schedule_add(Incidence *incidence = 0);
431 void schedule_reply(Incidence *incidence = 0); 432 void schedule_reply(Incidence *incidence = 0);
432 void schedule_counter(Incidence *incidence = 0); 433 void schedule_counter(Incidence *incidence = 0);
433 void schedule_declinecounter(Incidence *incidence = 0); 434 void schedule_declinecounter(Incidence *incidence = 0);
434 void schedule_publish_freebusy(int daysToPublish = 30); 435 void schedule_publish_freebusy(int daysToPublish = 30);
435 436
436 void openAddressbook(); 437 void openAddressbook();
437 438
438 void editFilters(); 439 void editFilters();
439 void toggleFilerEnabled(); 440 void toggleFilerEnabled();
440 QPtrList<CalFilter> filters(); 441 QPtrList<CalFilter> filters();
441 void toggleFilter(); 442 void toggleFilter();
442 void showFilter(bool visible); 443 void showFilter(bool visible);
443 void updateFilter(); 444 void updateFilter();
444 void filterEdited(); 445 void filterEdited();
445 void selectFilter( int ); 446 void selectFilter( int );
446 KOFilterView *filterView(); 447 KOFilterView *filterView();
447 448
448 void showIntro(); 449 void showIntro();
449 450
450 /** Move the curdatepient view date to today */ 451 /** Move the curdatepient view date to today */
451 void goToday(); 452 void goToday();
452 453
453 /** Move to the next date(s) in the current view */ 454 /** Move to the next date(s) in the current view */
454 void goNext(); 455 void goNext();
455 456
456 /** Move to the previous date(s) in the current view */ 457 /** Move to the previous date(s) in the current view */
457 void goPrevious(); 458 void goPrevious();
458 /** Move to the next date(s) in the current view */ 459 /** Move to the next date(s) in the current view */
459 void goNextMonth(); 460 void goNextMonth();
460 461
461 /** Move to the previous date(s) in the current view */ 462 /** Move to the previous date(s) in the current view */
462 void goPreviousMonth(); 463 void goPreviousMonth();
463 464
464 void toggleExpand(); 465 void toggleExpand();
465 void toggleDateNavigatorWidget(); 466 void toggleDateNavigatorWidget();
466 void toggleAllDaySize(); 467 void toggleAllDaySize();
467 468
468 /** Look for new messages in the inbox */ 469 /** Look for new messages in the inbox */
469 void lookForIncomingMessages(); 470 void lookForIncomingMessages();
470 /** Look for new messages in the outbox */ 471 /** Look for new messages in the outbox */
471 void lookForOutgoingMessages(); 472 void lookForOutgoingMessages();
472 473
473 void processMainViewSelection( Incidence * ); 474 void processMainViewSelection( Incidence * );
474 void processTodoListSelection( Incidence * ); 475 void processTodoListSelection( Incidence * );
475 476
476 void processIncidenceSelection( Incidence * ); 477 void processIncidenceSelection( Incidence * );
477 478
478 void purgeCompleted(); 479 void purgeCompleted();
479 bool removeCompletedSubTodos( Todo* ); 480 bool removeCompletedSubTodos( Todo* );
480 void slotCalendarChanged(); 481 void slotCalendarChanged();
481 bool importBday(); 482 bool importBday();
482 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 483 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
483 bool importQtopia( const QString &categoriesFile, 484 bool importQtopia( const QString &categoriesFile,
484 const QString &datebookFile, 485 const QString &datebookFile,
485 const QString &tasklistFile ); 486 const QString &tasklistFile );
486 void syncExternal( int mode ); 487 void syncExternal( int mode );
487 void slotSelectPickerDate( QDate ) ; 488 void slotSelectPickerDate( QDate ) ;
488 void showDatePicker() ; 489 void showDatePicker() ;
489 void showDatePickerPopup() ; 490 void showDatePickerPopup() ;
490 void moveIncidence(Incidence *) ; 491 void moveIncidence(Incidence *) ;
491 void beamIncidence(Incidence *) ; 492 void beamIncidence(Incidence *) ;
492 void beamCalendar() ; 493 void beamCalendar() ;
493 void beamFilteredCalendar() ; 494 void beamFilteredCalendar() ;
494 void beamIncidenceList(QPtrList<Incidence>) ; 495 void beamIncidenceList(QPtrList<Incidence>) ;
495 void manageCategories(); 496 void manageCategories();
496 void editCategories(); 497 void editCategories();
497 int addCategories(); 498 int addCategories();
498 void removeCategories(); 499 void removeCategories();
499 void setSyncDevice( QString ); 500 void setSyncDevice( QString );
500 void setSyncName( QString ); 501 void setSyncName( QString );
501 void showDay( QDate ); 502 void showDay( QDate );
502 void undo_delete(); 503 void undo_delete();
503 protected slots: 504 protected slots:
504 void resetFocus(); 505 void resetFocus();
505 void scrollBarValue(int); 506 void scrollBarValue(int);
506 void slotViewerClosed(); 507 void slotViewerClosed();
507 void timerAlarm(); 508 void timerAlarm();
508 void suspendAlarm(); 509 void suspendAlarm();
509 void beamDone( Ir *ir ); 510 void beamDone( Ir *ir );
510 /** Select a view or adapt the current view to display the specified dates. */ 511 /** Select a view or adapt the current view to display the specified dates. */
511 void showDates( const KCal::DateList & ); 512 void showDates( const KCal::DateList & );
512 void selectWeekNum ( int ); 513 void selectWeekNum ( int );
513 void checkConflictForEvent(); 514 void checkConflictForEvent();
514 515
515 public: 516 public:
516 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ); 517 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval );
517 // show a standard warning 518 // show a standard warning
518 // returns KMsgBox::yesNoCancel() 519 // returns KMsgBox::yesNoCancel()
519 int msgCalModified(); 520 int msgCalModified();
520 virtual bool sync(KSyncManager* manager, QString filename, int mode); 521 virtual bool sync(KSyncManager* manager, QString filename, int mode);
521 522
522 virtual bool syncExternal(KSyncManager* manager, QString resource); 523 virtual bool syncExternal(KSyncManager* manager, QString resource);
523 virtual void removeSyncInfo( QString syncProfile); 524 virtual void removeSyncInfo( QString syncProfile);
524 void setSyncManager(KSyncManager* manager); 525 void setSyncManager(KSyncManager* manager);
525 void setLoadedFileVersion(QDateTime); 526 void setLoadedFileVersion(QDateTime);
526 bool checkFileVersion(QString fn); 527 bool checkFileVersion(QString fn);
527 bool checkAllFileVersions(); 528 bool checkAllFileVersions();
528 bool checkFileChanged(QString fn); 529 bool checkFileChanged(QString fn);
529 Event* getLastSyncEvent(); 530 Event* getLastSyncEvent();
530 /** Adapt navigation units correpsonding to step size of navigation of the 531 /** Adapt navigation units correpsonding to step size of navigation of the
531 * current view. 532 * current view.
532 */ 533 */
533 void adaptNavigationUnits(); 534 void adaptNavigationUnits();
534 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 535 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
535 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 536 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
536 //Attendee* getYourAttendee(Event *event); 537 //Attendee* getYourAttendee(Event *event);
537 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 538 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
538 void setScrollBarStep(int val ); 539 void setScrollBarStep(int val );
539 540
540 protected: 541 protected:
541 Event *mConflictingEvent; 542 Event *mConflictingEvent;
542 void schedule(Scheduler::Method, Incidence *incidence = 0); 543 void schedule(Scheduler::Method, Incidence *incidence = 0);
543 544
544 // returns KMsgBox::OKCandel() 545 // returns KMsgBox::OKCandel()
545 int msgItemDelete(const QString name); 546 int msgItemDelete(const QString name);
546 void showEventEditor(); 547 void showEventEditor();
547 void showTodoEditor(); 548 void showTodoEditor();
548 Todo *selectedTodo(); 549 Todo *selectedTodo();
549 private: 550 private:
550#ifdef DESKTOP_VERSION 551#ifdef DESKTOP_VERSION
551 QScrollBar * mDateScrollBar; 552 QScrollBar * mDateScrollBar;
552#endif 553#endif
553 QDateTime mNextAlarmDateTime; 554 QDateTime mNextAlarmDateTime;
554 bool mViewerCallerIsSearchDialog; 555 bool mViewerCallerIsSearchDialog;
555 bool mBlockShowDates; 556 bool mBlockShowDates;
556 KSyncManager* mSyncManager; 557 KSyncManager* mSyncManager;
557 AlarmDialog * mAlarmDialog; 558 AlarmDialog * mAlarmDialog;
558 QString mAlarmNotification; 559 QString mAlarmNotification;
559 QString mSuspendAlarmNotification; 560 QString mSuspendAlarmNotification;
560 QTimer* mSuspendTimer; 561 QTimer* mSuspendTimer;
561 QTimer* mAlarmTimer; 562 QTimer* mAlarmTimer;
562 QTimer* mRecheckAlarmTimer; 563 QTimer* mRecheckAlarmTimer;
563 void computeAlarm( QString ); 564 void computeAlarm( QString );
564 void startAlarm( QString, QString ); 565 void startAlarm( QString, QString );
565 void setSyncEventsReadOnly(); 566 void setSyncEventsReadOnly();
566 567
567 QDateTime loadedFileVersion; 568 QDateTime loadedFileVersion;
568 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 569 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
569 void checkExternalId( Incidence * inc ); 570 void checkExternalId( Incidence * inc );
570 int mGlobalSyncMode; 571 int mGlobalSyncMode;
571 QString mCurrentSyncDevice; 572 QString mCurrentSyncDevice;
572 QString mCurrentSyncName; 573 QString mCurrentSyncName;
573 void init(); 574 void init();
574 int mDatePickerMode; 575 int mDatePickerMode;
575 bool mFlagEditDescription; 576 bool mFlagEditDescription;
576 QDateTime mLastCalendarSync; 577 QDateTime mLastCalendarSync;
577 void createPrinter(); 578 void createPrinter();
578 579
579 void calendarModified( bool, Calendar * ); 580 void calendarModified( bool, Calendar * );
580 581
581 CalPrinter *mCalPrinter; 582 CalPrinter *mCalPrinter;
582 583
583 QSplitter *mPanner; 584 QSplitter *mPanner;
584 QSplitter *mLeftSplitter; 585 QSplitter *mLeftSplitter;
585 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame; 586 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame;
586 QWidgetStack *mRightFrame; 587 QWidgetStack *mRightFrame;
587 588
588 KDatePicker* mDatePicker; 589 KDatePicker* mDatePicker;
589 QVBox* mDateFrame; 590 QVBox* mDateFrame;
590 591
591 DateNavigatorContainer *mDateNavigator; // widget showing small month view. 592 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
592 593
593 KOFilterView *mFilterView; 594 KOFilterView *mFilterView;
594 KOCalEditView *mCalEditView; 595 KOCalEditView *mCalEditView;
595 596
596 ResourceView *mResourceView; 597 ResourceView *mResourceView;
597 598
598 // calendar object for this viewing instance 599 // calendar object for this viewing instance
599 Calendar *mCalendar; 600 Calendar *mCalendar;
600 601
601 CalendarResourceManager *mResourceManager; 602 CalendarResourceManager *mResourceManager;
602 603
603 FileStorage *mStorage; 604 FileStorage *mStorage;
604 605
605 DateNavigator *mNavigator; 606 DateNavigator *mNavigator;
606 607
607 KOViewManager *mViewManager; 608 KOViewManager *mViewManager;
608 KODialogManager *mDialogManager; 609 KODialogManager *mDialogManager;
609 610
610 // Calendar filters 611 // Calendar filters
611 QPtrList<CalFilter> mFilters; 612 QPtrList<CalFilter> mFilters;
612 613
613 // various housekeeping variables. 614 // various housekeeping variables.
614 bool mModified; // flag indicating if calendar is modified 615 bool mModified; // flag indicating if calendar is modified
615 bool mReadOnly; // flag indicating if calendar is read-only 616 bool mReadOnly; // flag indicating if calendar is read-only
616 QDate mSaveSingleDate; 617 QDate mSaveSingleDate;
617 618
618 Incidence *mSelectedIncidence; 619 Incidence *mSelectedIncidence;
619 Incidence *mMoveIncidence; 620 Incidence *mMoveIncidence;
620 QDate mMoveIncidenceOldDate; 621 QDate mMoveIncidenceOldDate;
621 KOTodoView *mTodoList; 622 KOTodoView *mTodoList;
622 KOEventEditor * mEventEditor; 623 KOEventEditor * mEventEditor;
623 KOTodoEditor * mTodoEditor; 624 KOTodoEditor * mTodoEditor;
624 KOEventViewerDialog * mEventViewerDialog; 625 KOEventViewerDialog * mEventViewerDialog;
625 void keyPressEvent ( QKeyEvent *e) ; 626 void keyPressEvent ( QKeyEvent *e) ;
626 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 627 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
627}; 628};
628 629
629 630
630class CalendarViewVisitor : public Incidence::Visitor 631class CalendarViewVisitor : public Incidence::Visitor
631{ 632{
632 public: 633 public:
633 CalendarViewVisitor() : mView( 0 ) {} 634 CalendarViewVisitor() : mView( 0 ) {}
634 635
635 bool act( Incidence *incidence, CalendarView *view ) 636 bool act( Incidence *incidence, CalendarView *view )
636 { 637 {
637 mView = view; 638 mView = view;
638 return incidence->accept( *this ); 639 return incidence->accept( *this );
639 } 640 }
640 641
641 protected: 642 protected:
642 CalendarView *mView; 643 CalendarView *mView;
643}; 644};
644 645
645class ShowIncidenceVisitor : public CalendarViewVisitor 646class ShowIncidenceVisitor : public CalendarViewVisitor
646{ 647{
647 protected: 648 protected:
648 bool visit( Event *event ) { mView->showEvent( event ); return true; } 649 bool visit( Event *event ) { mView->showEvent( event ); return true; }
649 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 650 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
650 bool visit( Journal * j ) { mView->showJournal( j );return true; } 651 bool visit( Journal * j ) { mView->showJournal( j );return true; }
651}; 652};
652 653
653class EditIncidenceVisitor : public CalendarViewVisitor 654class EditIncidenceVisitor : public CalendarViewVisitor
654{ 655{
655 protected: 656 protected:
656 bool visit( Event *event ) { mView->editEvent( event ); return true; } 657 bool visit( Event *event ) { mView->editEvent( event ); return true; }
657 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 658 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
658 bool visit( Journal *j ) { mView->editJournal( j); return true; } 659 bool visit( Journal *j ) { mView->editJournal( j); return true; }
659}; 660};
660 661
661class DeleteIncidenceVisitor : public CalendarViewVisitor 662class DeleteIncidenceVisitor : public CalendarViewVisitor
662{ 663{
663 protected: 664 protected:
664 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 665 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
665 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 666 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
666 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 667 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
667}; 668};
668 669
669#endif 670#endif
diff --git a/korganizer/kofilterview.cpp b/korganizer/kofilterview.cpp
index ef25fd0..ee9c9f6 100644
--- a/korganizer/kofilterview.cpp
+++ b/korganizer/kofilterview.cpp
@@ -1,497 +1,499 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 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 <qcheckbox.h> 24#include <qcheckbox.h>
25#include <qcombobox.h> 25#include <qcombobox.h>
26#include <qpushbutton.h> 26#include <qpushbutton.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qdialog.h> 29#include <qdialog.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qwhatsthis.h> 32#include <qwhatsthis.h>
33#include <qdir.h> 33#include <qdir.h>
34 34
35 35
36#include <libkcal/calfilter.h> 36#include <libkcal/calfilter.h>
37 37
38#include "kofilterview.h" 38#include "kofilterview.h"
39#include "koprefs.h" 39#include "koprefs.h"
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42#include <kglobalsettings.h> 42#include <kglobalsettings.h>
43#include <kcolorbutton.h> 43#include <kcolorbutton.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46 46
47 47
48 48
49 49
50KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent, 50KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent,
51 const char* name,WFlags fl ) 51 const char* name,WFlags fl )
52 : KOFilterView_base(parent,name,fl) 52 : KOFilterView_base(parent,name,fl)
53{ 53{
54 mFilters = filterList; 54 mFilters = filterList;
55 55
56 connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged())); 56 connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged()));
57 connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged())); 57 connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged()));
58 connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters())); 58 connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters()));
59} 59}
60 60
61KOFilterView::~KOFilterView() 61KOFilterView::~KOFilterView()
62{ 62{
63 // no need to delete child widgets, Qt does it all for us 63 // no need to delete child widgets, Qt does it all for us
64} 64}
65 65
66bool KOFilterView::filtersEnabled() 66bool KOFilterView::filtersEnabled()
67{ 67{
68 return mEnabledCheck->isChecked(); 68 return mEnabledCheck->isChecked();
69} 69}
70 70
71void KOFilterView::setFiltersEnabled(bool set) 71void KOFilterView::setFiltersEnabled(bool set)
72{ 72{
73 mEnabledCheck->setChecked(set); 73 mEnabledCheck->setChecked(set);
74 emit filterChanged(); 74 emit filterChanged();
75} 75}
76 76
77 77
78void KOFilterView::updateFilters() 78void KOFilterView::updateFilters()
79{ 79{
80 mSelectionCombo->clear(); 80 mSelectionCombo->clear();
81 81
82 CalFilter *filter = mFilters->first(); 82 CalFilter *filter = mFilters->first();
83 while(filter) { 83 while(filter) {
84 mSelectionCombo->insertItem(filter->name()); 84 mSelectionCombo->insertItem(filter->name());
85 filter = mFilters->next(); 85 filter = mFilters->next();
86 } 86 }
87} 87}
88 88
89CalFilter *KOFilterView::selectedFilter() 89CalFilter *KOFilterView::selectedFilter()
90{ 90{
91 CalFilter *f = mFilters->at(mSelectionCombo->currentItem()); 91 CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
92 return f; 92 return f;
93} 93}
94 94
95void KOFilterView::setSelectedFilter(QString filterName) 95void KOFilterView::setSelectedFilter(QString filterName)
96{ 96{
97 int filter_num = mSelectionCombo->count(); 97 int filter_num = mSelectionCombo->count();
98 int i; 98 int i;
99 for (i=0;i<filter_num;i++) { 99 for (i=0;i<filter_num;i++) {
100 if (mSelectionCombo->text(i)==filterName) 100 if (mSelectionCombo->text(i)==filterName)
101 mSelectionCombo->setCurrentItem(i); 101 mSelectionCombo->setCurrentItem(i);
102 } 102 }
103 emit filterChanged(); 103 emit filterChanged();
104} 104}
105void KOFilterView::setSelectedFilter( int fil ) 105void KOFilterView::setSelectedFilter( int fil )
106{ 106{
107 if ( fil >= mSelectionCombo->count() ) 107 if ( fil >= mSelectionCombo->count() )
108 return; 108 return;
109 mSelectionCombo->setCurrentItem( fil ); 109 mSelectionCombo->setCurrentItem( fil );
110 emit filterChanged(); 110 emit filterChanged();
111} 111}
112 112
113 113
114 114
115KOCalEditView::KOCalEditView(QWidget* parent, 115KOCalEditView::KOCalEditView(QWidget* parent,
116 const char* name ) 116 const char* name )
117 : QScrollView(parent,name) 117 : QScrollView(parent,name)
118{ 118{
119 mw = 0; 119 mw = 0;
120 setResizePolicy( AutoOneFit ); 120 setResizePolicy( AutoOneFit );
121 setFrameStyle ( QFrame::Panel | QFrame::Plain ); 121 setFrameStyle ( QFrame::Panel | QFrame::Plain );
122 setLineWidth ( 1 ); 122 setLineWidth ( 1 );
123 setMidLineWidth ( 1 ); 123 setMidLineWidth ( 1 );
124 setFocusPolicy(NoFocus); 124 setFocusPolicy(NoFocus);
125} 125}
126 126
127KOCalEditView::~KOCalEditView() 127KOCalEditView::~KOCalEditView()
128{ 128{
129 // no need to delete child widgets, Qt does it all for us 129 // no need to delete child widgets, Qt does it all for us
130} 130}
131void KOCalEditView::selectCal(int id ,bool b) 131void KOCalEditView::selectCal(int id ,bool b)
132{ 132{
133 KOPrefs::instance()->getCalendar( id )->isEnabled = b; 133 KOPrefs::instance()->getCalendar( id )->isEnabled = b;
134 emit calendarEnabled ( id, b ); 134 emit calendarEnabled ( id, b );
135 emit needsUpdate(); 135 emit needsUpdate();
136 136
137} 137}
138void KOCalEditView::selectStdCal( int id ) 138void KOCalEditView::selectStdCal( int id )
139{ 139{
140 KOCalRadioButton* it = mStdandardB.first(); 140 KOCalRadioButton* it = mStdandardB.first();
141 while ( it ) { 141 while ( it ) {
142 it->blockSignals( true ); 142 it->blockSignals( true );
143 it->setChecked( it->num() == id ); 143 it->setChecked( it->num() == id );
144 it->blockSignals( false ); 144 it->blockSignals( false );
145 it = mStdandardB.next(); 145 it = mStdandardB.next();
146 } 146 }
147 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 147 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
148 while ( kkf ) { 148 while ( kkf ) {
149 kkf->isStandard = (kkf->mCalNumber == id ); 149 kkf->isStandard = (kkf->mCalNumber == id );
150 kkf = KOPrefs::instance()->mCalendars.next(); 150 kkf = KOPrefs::instance()->mCalendars.next();
151 } 151 }
152 emit setCalendarDefault ( id ); 152 emit setCalendarDefault ( id );
153} 153}
154 154
155void KOCalEditView::selectCalAlarm(int id ,bool b ) 155void KOCalEditView::selectCalAlarm(int id ,bool b )
156{ 156{
157 KOPrefs::instance()->getCalendar( id )->isAlarmEnabled = b; 157 KOPrefs::instance()->getCalendar( id )->isAlarmEnabled = b;
158 emit alarmEnabled ( id , b ); 158 emit alarmEnabled ( id , b );
159 emit needsUpdate(); 159 emit needsUpdate();
160} 160}
161void KOCalEditView::selectReadOnly(int id ,bool b ) 161void KOCalEditView::selectReadOnly(int id ,bool b )
162{ 162{
163 163
164 emit calendarReadonly ( id , b ); 164 emit calendarReadonly ( id , b );
165 KOPrefs::instance()->getCalendar( id )->isReadOnly = b; 165 KOPrefs::instance()->getCalendar( id )->isReadOnly = b;
166 if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) { 166 if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) {
167 findNewStandard(); 167 findNewStandard();
168 } 168 }
169 if ( !b ){ 169 if ( !b ){
170 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 170 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
171 while ( kkf ) { 171 while ( kkf ) {
172 if (kkf->isReadOnly && kkf->isStandard ) { 172 if (kkf->isReadOnly && kkf->isStandard ) {
173 selectStdCal( id ); 173 selectStdCal( id );
174 break; 174 break;
175 } 175 }
176 kkf = KOPrefs::instance()->mCalendars.next(); 176 kkf = KOPrefs::instance()->mCalendars.next();
177 } 177 }
178 } 178 }
179 179
180 mStdandardB.at(id-1)->setEnabled( !b ); 180 mStdandardB.at(id-1)->setEnabled( !b );
181 emit needsUpdate(); 181 emit needsUpdate();
182 182
183} 183}
184void KOCalEditView::findNewStandard() 184void KOCalEditView::findNewStandard()
185{ 185{
186 bool found = false; 186 bool found = false;
187 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 187 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
188 while ( kkf ) { 188 while ( kkf ) {
189 if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) { 189 if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) {
190 found = true; 190 found = true;
191 selectStdCal( kkf->mCalNumber ); 191 selectStdCal( kkf->mCalNumber );
192 break; 192 break;
193 } 193 }
194 kkf = KOPrefs::instance()->mCalendars.next(); 194 kkf = KOPrefs::instance()->mCalendars.next();
195 } 195 }
196 if ( !found ) { 196 if ( !found ) {
197 KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"), 197 KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"),
198 i18n("Houston, we have a problem!") ); 198 i18n("Houston, we have a problem!") );
199 199
200 } 200 }
201} 201}
202 202
203void KOCalEditView::setColor( const QColor& c, int id ) 203void KOCalEditView::setColor( const QColor& c, int id )
204{ 204{
205 KOPrefs::instance()->getCalendar( id )->mDefaultColor = c; 205 KOPrefs::instance()->getCalendar( id )->mDefaultColor = c;
206 emit needsUpdate(); 206 emit needsUpdate();
207} 207}
208void KOCalEditView::deleteCal( int id ) 208void KOCalEditView::deleteCal( int id )
209{ 209{
210 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id ); 210 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
211 QString name = kkf->mName; 211 QString name = kkf->mName;
212 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 ); 212 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
213 if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return; 213 if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return;
214 bool findnewstd = kkf->isStandard; 214 bool findnewstd = kkf->isStandard;
215 emit removeCalendar ( id ); 215 emit removeCalendar ( id );
216 KOPrefs::instance()->mCalendars.remove ( kkf ); 216 KOPrefs::instance()->mCalendars.remove ( kkf );
217 if ( findnewstd ) findNewStandard(); 217 if ( findnewstd ) findNewStandard();
218 emit needsUpdate(); 218 emit needsUpdate();
219 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 219 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
220} 220}
221void KOCalEditView::infoCal( int id ) 221void KOCalEditView::infoCal( int id )
222{ 222{
223 QString name = KOPrefs::instance()->getCalendar( id )->mName; 223 QString name = KOPrefs::instance()->getCalendar( id )->mName;
224 QString file = KGlobal::formatMessage ( KOPrefs::instance()->getCalendar( id )->mFileName, 0 ); 224 QString file = KGlobal::formatMessage ( KOPrefs::instance()->getCalendar( id )->mFileName, 0 );
225 if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) { 225 if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) {
226 if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) { 226 if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) {
227 emit calendarAdded( id ); 227 emit calendarAdded( id );
228 emit needsUpdate(); 228 emit needsUpdate();
229 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 229 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
230 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) ); 230 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) );
231 } 231 }
232 } 232 }
233 else 233 else {
234 KMessageBox::information( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file) ); 234 emit requestCalendarInfo( id );
235
236 }
235} 237}
236void KOCalEditView::readConfig() 238void KOCalEditView::readConfig()
237{ 239{
238 240
239 mStdandardB.clear(); 241 mStdandardB.clear();
240 mEnabledB.clear(); 242 mEnabledB.clear();
241 mAlarmB.clear(); 243 mAlarmB.clear();
242 mROB.clear(); 244 mROB.clear();
243 245
244 if ( mw ) delete mw; 246 if ( mw ) delete mw;
245 mw = new QWidget ( viewport() ); 247 mw = new QWidget ( viewport() );
246 addChild(mw); 248 addChild(mw);
247 int ii = 0; 249 int ii = 0;
248 mainLayout = new QGridLayout ( mw , 2, 8 ); 250 mainLayout = new QGridLayout ( mw , 2, 8 );
249 mainLayout->setMargin( 2 ); 251 mainLayout->setMargin( 2 );
250 mainLayout->setSpacing( 2 ); 252 mainLayout->setSpacing( 2 );
251 QPushButton * addButT = new QPushButton ( mw ); 253 QPushButton * addButT = new QPushButton ( mw );
252 addButT->setFocusPolicy(NoFocus); 254 addButT->setFocusPolicy(NoFocus);
253 mainLayout->addWidget( addButT,0,0 ); 255 mainLayout->addWidget( addButT,0,0 );
254 addButT->setText( "D"); 256 addButT->setText( "D");
255 connect(addButT,SIGNAL(clicked()),SLOT(defaultInfo())); 257 connect(addButT,SIGNAL(clicked()),SLOT(defaultInfo()));
256 QWhatsThis::add( addButT, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); 258 QWhatsThis::add( addButT, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") );
257 //addBut->setPixmap ( SmallIcon("greenhook16")); 259 //addBut->setPixmap ( SmallIcon("greenhook16"));
258 QPushButton *addBut = new QPushButton ( mw ); 260 QPushButton *addBut = new QPushButton ( mw );
259 addBut->setFocusPolicy(NoFocus); 261 addBut->setFocusPolicy(NoFocus);
260 mainLayout->addWidget( addBut,0,++ii ); 262 mainLayout->addWidget( addBut,0,++ii );
261 addBut->setPixmap ( SmallIcon("eye")); 263 addBut->setPixmap ( SmallIcon("eye"));
262 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.") ); 264 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.") );
263 connect(addBut,SIGNAL(clicked()),SLOT(enableAll())); 265 connect(addBut,SIGNAL(clicked()),SLOT(enableAll()));
264 int max = addBut->sizeHint().height(); 266 int max = addBut->sizeHint().height();
265 addBut->setMaximumWidth( max ); 267 addBut->setMaximumWidth( max );
266 addButT->setFixedSize( QSize( max, max ) ); 268 addButT->setFixedSize( QSize( max, max ) );
267 QLabel* lab = new QLabel (i18n(" Calendar \n Resource "), mw ); 269 QLabel* lab = new QLabel (i18n(" Calendar \n Resource "), mw );
268 mainLayout->addWidget( lab,0,++ii ); 270 mainLayout->addWidget( lab,0,++ii );
269 QWhatsThis::add( lab, i18n("In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.") ); 271 QWhatsThis::add( lab, i18n("In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.") );
270 //lab = new QLabel ( i18n(" "), mw ); 272 //lab = new QLabel ( i18n(" "), mw );
271 //mainLayout->addWidget( lab,0,++ii ); 273 //mainLayout->addWidget( lab,0,++ii );
272 //lab->setFixedWidth( 1 ); 274 //lab->setFixedWidth( 1 );
273 addBut = new QPushButton ( mw ); 275 addBut = new QPushButton ( mw );
274 addBut->setFocusPolicy(NoFocus); 276 addBut->setFocusPolicy(NoFocus);
275 mainLayout->addWidget( addBut,0,++ii ); 277 mainLayout->addWidget( addBut,0,++ii );
276 addBut->setPixmap ( SmallIcon("bell")); 278 addBut->setPixmap ( SmallIcon("bell"));
277 QWhatsThis::add( addBut, i18n("In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as \"do not use\". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.") ); 279 QWhatsThis::add( addBut, i18n("In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as \"do not use\". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.") );
278 connect(addBut,SIGNAL(clicked()),SLOT(enableAlarm())); 280 connect(addBut,SIGNAL(clicked()),SLOT(enableAlarm()));
279 addBut->setMaximumWidth( addBut->sizeHint().height() ); 281 addBut->setMaximumWidth( addBut->sizeHint().height() );
280 282
281 addBut = new QPushButton ( mw ); 283 addBut = new QPushButton ( mw );
282 addBut->setFocusPolicy(NoFocus); 284 addBut->setFocusPolicy(NoFocus);
283 mainLayout->addWidget( addBut,0,++ii ); 285 mainLayout->addWidget( addBut,0,++ii );
284 addBut->setPixmap ( SmallIcon("pencil")); 286 addBut->setPixmap ( SmallIcon("pencil"));
285 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.") ); 287 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.") );
286 connect(addBut,SIGNAL(clicked()),SLOT(disableRO())); 288 connect(addBut,SIGNAL(clicked()),SLOT(disableRO()));
287 addBut->setMaximumWidth( addBut->sizeHint().height() ); 289 addBut->setMaximumWidth( addBut->sizeHint().height() );
288 lab = new QLabel ( "", mw ); 290 lab = new QLabel ( "", mw );
289 mainLayout->addWidget( lab,0,++ii ); 291 mainLayout->addWidget( lab,0,++ii );
290 292
291 addBut = new QPushButton ( mw ); 293 addBut = new QPushButton ( mw );
292 addBut->setFocusPolicy(NoFocus); 294 addBut->setFocusPolicy(NoFocus);
293 mainLayout->addWidget( addBut,0,++ii ); 295 mainLayout->addWidget( addBut,0,++ii );
294 addBut->setPixmap ( SmallIcon("plus")); 296 addBut->setPixmap ( SmallIcon("plus"));
295 connect(addBut,SIGNAL(clicked()),SLOT(addCal())); 297 connect(addBut,SIGNAL(clicked()),SLOT(addCal()));
296 QWhatsThis::add( addBut, i18n("Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.") ); 298 QWhatsThis::add( addBut, i18n("Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.") );
297 lab = new QLabel ( " ", mw ); 299 lab = new QLabel ( " ", mw );
298 mainLayout->addWidget( lab,0,++ii ); 300 mainLayout->addWidget( lab,0,++ii );
299 301
300 302
301 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 303 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
302 int row = 1; 304 int row = 1;
303 bool errorLoadStandard = false; 305 bool errorLoadStandard = false;
304 while ( kkf ) { 306 while ( kkf ) {
305 int iii = 0; 307 int iii = 0;
306 KOCalRadioButton* rb = new KOCalRadioButton( mw ); 308 KOCalRadioButton* rb = new KOCalRadioButton( mw );
307 mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb ); 309 mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb );
308 rb->setChecked( kkf->isStandard ); 310 rb->setChecked( kkf->isStandard );
309 if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) ) 311 if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) )
310 errorLoadStandard = true; 312 errorLoadStandard = true;
311 rb->setNum( kkf->mCalNumber ); 313 rb->setNum( kkf->mCalNumber );
312 connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) ); 314 connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) );
313 if ( kkf->mErrorOnLoad || kkf->isReadOnly ) 315 if ( kkf->mErrorOnLoad || kkf->isReadOnly )
314 rb->setEnabled( false ); 316 rb->setEnabled( false );
315 KOCalCheckButton* cb = new KOCalCheckButton( mw ); 317 KOCalCheckButton* cb = new KOCalCheckButton( mw );
316 mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb ); 318 mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb );
317 cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad ); 319 cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad );
318 cb->setNum( kkf->mCalNumber ); 320 cb->setNum( kkf->mCalNumber );
319 if ( kkf->mErrorOnLoad ) 321 if ( kkf->mErrorOnLoad )
320 cb->setEnabled( false ); 322 cb->setEnabled( false );
321 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) ); 323 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) );
322 KOCalButton* name = new KOCalButton( mw ); 324 KOCalButton* name = new KOCalButton( mw );
323 name->setNum( kkf->mCalNumber ); 325 name->setNum( kkf->mCalNumber );
324 name->setText( kkf->mName ); 326 name->setText( kkf->mName );
325 mainLayout->addWidget( name,row,++iii ); 327 mainLayout->addWidget( name,row,++iii );
326 connect (name, SIGNAL (selectNum(int)), SLOT ( infoCal(int) ) ); 328 connect (name, SIGNAL (selectNum(int)), SLOT ( infoCal(int) ) );
327 //lab = new QLabel (" ", mw ); 329 //lab = new QLabel (" ", mw );
328 //mainLayout->addWidget( lab,row,++iii ); 330 //mainLayout->addWidget( lab,row,++iii );
329 cb = new KOCalCheckButton( mw ); 331 cb = new KOCalCheckButton( mw );
330 mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb ); 332 mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb );
331 cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad); 333 cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad);
332 cb->setNum( kkf->mCalNumber ); 334 cb->setNum( kkf->mCalNumber );
333 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) ); 335 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) );
334 if ( kkf->mErrorOnLoad ) 336 if ( kkf->mErrorOnLoad )
335 cb->setEnabled( false ); 337 cb->setEnabled( false );
336 cb = new KOCalCheckButton( mw ); 338 cb = new KOCalCheckButton( mw );
337 mainLayout->addWidget( cb,row,++iii );mROB.append( cb ); 339 mainLayout->addWidget( cb,row,++iii );mROB.append( cb );
338 cb->setChecked( kkf->isReadOnly ); 340 cb->setChecked( kkf->isReadOnly );
339 cb->setNum( kkf->mCalNumber ); 341 cb->setNum( kkf->mCalNumber );
340 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectReadOnly(int,bool) ) ); 342 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectReadOnly(int,bool) ) );
341 if ( kkf->mErrorOnLoad ) 343 if ( kkf->mErrorOnLoad )
342 cb->setEnabled( false ); 344 cb->setEnabled( false );
343 if ( row > 1) { 345 if ( row > 1) {
344 KColorButton *colb = new KColorButton( mw ); 346 KColorButton *colb = new KColorButton( mw );
345 mainLayout->addWidget( colb,row,++iii ); 347 mainLayout->addWidget( colb,row,++iii );
346 colb->setID( kkf->mCalNumber ); 348 colb->setID( kkf->mCalNumber );
347 colb->setColor( kkf->mDefaultColor ); 349 colb->setColor( kkf->mDefaultColor );
348 connect (colb, SIGNAL (changedID(const QColor&, int )), SLOT ( setColor(const QColor&,int) ) ); 350 connect (colb, SIGNAL (changedID(const QColor&, int )), SLOT ( setColor(const QColor&,int) ) );
349 KOCalButton* calb = new KOCalButton( mw ); 351 KOCalButton* calb = new KOCalButton( mw );
350 mainLayout->addWidget( calb,row,++iii ); 352 mainLayout->addWidget( calb,row,++iii );
351 calb->setNum( kkf->mCalNumber ); 353 calb->setNum( kkf->mCalNumber );
352 calb->setPixmap ( SmallIcon("minus")); 354 calb->setPixmap ( SmallIcon("minus"));
353 connect (calb, SIGNAL (selectNum(int)), SLOT ( deleteCal(int) ) ); 355 connect (calb, SIGNAL (selectNum(int)), SLOT ( deleteCal(int) ) );
354 int hei = calb->sizeHint().height(); 356 int hei = calb->sizeHint().height();
355 //calb->setMaximumSize( hei*9/10, hei*9/10 ); 357 //calb->setMaximumSize( hei*9/10, hei*9/10 );
356 } 358 }
357 ++row; 359 ++row;
358 kkf = KOPrefs::instance()->mCalendars.next(); 360 kkf = KOPrefs::instance()->mCalendars.next();
359 } 361 }
360 if ( errorLoadStandard ) 362 if ( errorLoadStandard )
361 findNewStandard(); 363 findNewStandard();
362 lab = new QLabel ( "", mw ); 364 lab = new QLabel ( "", mw );
363 mainLayout->addWidget( lab,row,0 ); 365 mainLayout->addWidget( lab,row,0 );
364 mw->show(); 366 mw->show();
365 367
366} 368}
367 369
368void KOCalEditView::defaultInfo() 370void KOCalEditView::defaultInfo()
369{ 371{
370 KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); 372 KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") );
371} 373}
372void KOCalEditView::addCal() 374void KOCalEditView::addCal()
373{ 375{
374 bool tryagain = true; 376 bool tryagain = true;
375 QString name, file = KGlobalSettings::calendarDir()+"newCal.ics"; 377 QString name, file = KGlobalSettings::calendarDir()+"newCal.ics";
376 while ( tryagain ) { 378 while ( tryagain ) {
377 KONewCalPrefs prefs ( this ); 379 KONewCalPrefs prefs ( this );
378 prefs.nameE->setText( name ); 380 prefs.nameE->setText( name );
379 prefs.url->setURL( file ); 381 prefs.url->setURL( file );
380 if ( ! prefs.exec() ) 382 if ( ! prefs.exec() )
381 return; 383 return;
382 name = prefs.calName(); 384 name = prefs.calName();
383 file = prefs.calFileName(); 385 file = prefs.calFileName();
384 tryagain = false; 386 tryagain = false;
385 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 387 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
386 while ( kkf ) { 388 while ( kkf ) {
387 if ( kkf->mName == name ) { 389 if ( kkf->mName == name ) {
388 KMessageBox::information( this, i18n("Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!").arg( name ) ); 390 KMessageBox::information( this, i18n("Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!").arg( name ) );
389 name = ""; 391 name = "";
390 tryagain = true; 392 tryagain = true;
391 break; 393 break;
392 } 394 }
393 if ( kkf->mFileName == file ) { 395 if ( kkf->mFileName == file ) {
394 KMessageBox::information( this, i18n("Sorry, the file \n%1\nis already loaded!\nPlease choose another file!").arg( KGlobal::formatMessage (file, 0 )) ); 396 KMessageBox::information( this, i18n("Sorry, the file \n%1\nis already loaded!\nPlease choose another file!").arg( KGlobal::formatMessage (file, 0 )) );
395 tryagain = true; 397 tryagain = true;
396 file = KGlobalSettings::calendarDir()+"newCal.ics"; 398 file = KGlobalSettings::calendarDir()+"newCal.ics";
397 break; 399 break;
398 } 400 }
399 kkf = KOPrefs::instance()->mCalendars.next(); 401 kkf = KOPrefs::instance()->mCalendars.next();
400 } 402 }
401 QFileInfo fi ( file ); 403 QFileInfo fi ( file );
402 if ( fi.isDir() ) { 404 if ( fi.isDir() ) {
403 tryagain = true; 405 tryagain = true;
404 } 406 }
405 } 407 }
406 addCalendar ( name, file ); 408 addCalendar ( name, file );
407 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) ); 409 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) );
408} 410}
409int KOCalEditView::addCalendar( QString name, QString file, bool ask ) 411int KOCalEditView::addCalendar( QString name, QString file, bool ask )
410{ 412{
411 file = QDir::convertSeparators( file ); 413 file = QDir::convertSeparators( file );
412 QFileInfo fi ( file ); 414 QFileInfo fi ( file );
413 QString absFile = file; 415 QString absFile = file;
414 bool isRelative = false; 416 bool isRelative = false;
415 if ( fi.isRelative() ) { 417 if ( fi.isRelative() ) {
416 isRelative = true; 418 isRelative = true;
417 absFile = QDir::convertSeparators( KGlobalSettings::calendarDir()+file ); 419 absFile = QDir::convertSeparators( KGlobalSettings::calendarDir()+file );
418 fi.setFile( absFile ); 420 fi.setFile( absFile );
419 } else { 421 } else {
420 QString cd = QDir::convertSeparators( KGlobalSettings::calendarDir() ); 422 QString cd = QDir::convertSeparators( KGlobalSettings::calendarDir() );
421 if ( file.left( cd.length() ) == cd ) { 423 if ( file.left( cd.length() ) == cd ) {
422 isRelative = true; 424 isRelative = true;
423 file = fi.fileName (); 425 file = fi.fileName ();
424 fi.setFile( absFile ); 426 fi.setFile( absFile );
425 } 427 }
426 } 428 }
427 if (!fi.exists() ) { 429 if (!fi.exists() ) {
428 if ( ask ) 430 if ( ask )
429 if ( KMessageBox::questionYesNo(this, i18n("The file\n%1\ndoes not exist!\nShall I create it for you?").arg( KGlobal::formatMessage (absFile,0) ) )== KMessageBox::No ) 431 if ( KMessageBox::questionYesNo(this, i18n("The file\n%1\ndoes not exist!\nShall I create it for you?").arg( KGlobal::formatMessage (absFile,0) ) )== KMessageBox::No )
430 return 0; 432 return 0;
431 QFile fileIn( absFile ); 433 QFile fileIn( absFile );
432 if (!fileIn.open( IO_WriteOnly ) ) { 434 if (!fileIn.open( IO_WriteOnly ) ) {
433 KMessageBox::sorry( this, i18n("Sorry, cannot create the file\n%1!\nNo calendar added!").arg( file ) ); 435 KMessageBox::sorry( this, i18n("Sorry, cannot create the file\n%1!\nNo calendar added!").arg( file ) );
434 return 0; 436 return 0;
435 } 437 }
436 QTextStream tsIn( &fileIn ); 438 QTextStream tsIn( &fileIn );
437 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 439 tsIn.setCodec( QTextCodec::codecForName("utf8") );
438 tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n"; 440 tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n";
439 fileIn.close(); 441 fileIn.close();
440 } 442 }
441 KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar(); 443 KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar();
442 kkf->mName = name; 444 kkf->mName = name;
443 kkf->mFileName = absFile; 445 kkf->mFileName = absFile;
444 kkf->mSavedFileName = file; 446 kkf->mSavedFileName = file;
445 kkf->isRelative = isRelative; 447 kkf->isRelative = isRelative;
446 emit calendarAdded( kkf->mCalNumber ); 448 emit calendarAdded( kkf->mCalNumber );
447 if ( ask ) 449 if ( ask )
448 emit needsUpdate(); 450 emit needsUpdate();
449 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 451 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
450 return kkf->mCalNumber; 452 return kkf->mCalNumber;
451} 453}
452int KOCalEditView::getBirtdayID() 454int KOCalEditView::getBirtdayID()
453{ 455{
454 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 456 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
455 while ( kkf ) { 457 while ( kkf ) {
456 if ( kkf->mName == i18n("Birthdays") ) 458 if ( kkf->mName == i18n("Birthdays") )
457 return kkf->mCalNumber; 459 return kkf->mCalNumber;
458 kkf = KOPrefs::instance()->mCalendars.next(); 460 kkf = KOPrefs::instance()->mCalendars.next();
459 } 461 }
460 QString file = locateLocal( "data", "korganizer/birthdays.ics" ); 462 QString file = locateLocal( "data", "korganizer/birthdays.ics" );
461 return addCalendar( i18n("Birthdays"), file, false ); 463 return addCalendar( i18n("Birthdays"), file, false );
462} 464}
463 465
464void KOCalEditView::enableAll() 466void KOCalEditView::enableAll()
465{ 467{
466 toggleList( mEnabledB ); 468 toggleList( mEnabledB );
467} 469}
468void KOCalEditView::enableAlarm() 470void KOCalEditView::enableAlarm()
469{ 471{
470 toggleList( mAlarmB ); 472 toggleList( mAlarmB );
471} 473}
472void KOCalEditView::disableRO() 474void KOCalEditView::disableRO()
473{ 475{
474 toggleList( mROB, false ); 476 toggleList( mROB, false );
475} 477}
476void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable ) 478void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable )
477{ 479{
478 bool dis = !enable; 480 bool dis = !enable;
479 KOCalCheckButton* it = list.first(); 481 KOCalCheckButton* it = list.first();
480 while ( it ) { 482 while ( it ) {
481 if ( !it->isChecked() == enable && it->isEnabled() ) { 483 if ( !it->isChecked() == enable && it->isEnabled() ) {
482 dis = !dis; 484 dis = !dis;
483 break; 485 break;
484 } 486 }
485 it = list.next(); 487 it = list.next();
486 } 488 }
487 it = list.first(); 489 it = list.first();
488 while ( it ) { 490 while ( it ) {
489 if ( it->isEnabled() ) 491 if ( it->isEnabled() )
490 it->setChecked(dis); 492 it->setChecked(dis);
491 it = list.next(); 493 it = list.next();
492 } 494 }
493} 495}
494void KOCalEditView::deleteAll() 496void KOCalEditView::deleteAll()
495{ 497{
496 qDebug("delteAll"); 498 qDebug("delteAll");
497} 499}
diff --git a/korganizer/kofilterview.h b/korganizer/kofilterview.h
index d534dbf..0dd423a 100644
--- a/korganizer/kofilterview.h
+++ b/korganizer/kofilterview.h
@@ -1,256 +1,257 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 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 KOFILTERVIEW_H 23#ifndef KOFILTERVIEW_H
24#define KOFILTERVIEW_H 24#define KOFILTERVIEW_H
25 25
26#include <qstring.h> 26#include <qstring.h>
27#include <qcheckbox.h> 27#include <qcheckbox.h>
28#include <qapplication.h> 28#include <qapplication.h>
29#include <qradiobutton.h> 29#include <qradiobutton.h>
30#include <qlayout.h> 30#include <qlayout.h>
31#include <qlabel.h> 31#include <qlabel.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qscrollview.h> 33#include <qscrollview.h>
34#include <qpushbutton.h> 34#include <qpushbutton.h>
35#include <kconfig.h> 35#include <kconfig.h>
36#include "kofilterview_base.h" 36#include "kofilterview_base.h"
37 37
38#include <libkcal/calfilter.h> 38#include <libkcal/calfilter.h>
39 39
40#include <kurlrequester.h> 40#include <kurlrequester.h>
41#include <klineedit.h> 41#include <klineedit.h>
42#include <kglobal.h> 42#include <kglobal.h>
43#include <kmessagebox.h> 43#include <kmessagebox.h>
44 44
45class QGridLayout; 45class QGridLayout;
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49class KONewCalPrefs : public QDialog 49class KONewCalPrefs : public QDialog
50{ 50{
51 Q_OBJECT 51 Q_OBJECT
52 public: 52 public:
53 KONewCalPrefs( QWidget *parent=0, const char *name=0 ) : 53 KONewCalPrefs( QWidget *parent=0, const char *name=0 ) :
54 QDialog( parent, name, true ) 54 QDialog( parent, name, true )
55 { 55 {
56 setCaption( i18n("Add new Calendar") ); 56 setCaption( i18n("Add new Calendar") );
57 QVBoxLayout* lay = new QVBoxLayout( this ); 57 QVBoxLayout* lay = new QVBoxLayout( this );
58 lay->setSpacing( 3 ); 58 lay->setSpacing( 3 );
59 lay->setMargin( 3 ); 59 lay->setMargin( 3 );
60 QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this ); 60 QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this );
61 lay->addWidget( lab ); 61 lay->addWidget( lab );
62 nameE = new KLineEdit( this ); 62 nameE = new KLineEdit( this );
63 lay->addWidget( nameE ); 63 lay->addWidget( nameE );
64 lab = new QLabel( i18n("<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)"), this ); 64 lab = new QLabel( i18n("<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)"), this );
65 lay->addWidget( lab ); 65 lay->addWidget( lab );
66 url = new KURLRequester ( this ); 66 url = new KURLRequester ( this );
67 lay->addWidget( url ); 67 lay->addWidget( url );
68 QPushButton * ok = new QPushButton( i18n("OK"), this ); 68 QPushButton * ok = new QPushButton( i18n("OK"), this );
69 lay->addWidget( ok ); 69 lay->addWidget( ok );
70 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 70 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
71 lay->addWidget( cancel ); 71 lay->addWidget( cancel );
72 connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) ); 72 connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) );
73 connect (cancel, SIGNAL( clicked() ), this, SLOT ( reject()) ); 73 connect (cancel, SIGNAL( clicked() ), this, SLOT ( reject()) );
74 int minwid = 440; 74 int minwid = 440;
75 if ( QApplication::desktop()->width() < 480 ) minwid = 220; 75 if ( QApplication::desktop()->width() < 480 ) minwid = 220;
76 setMinimumWidth( minwid ); 76 setMinimumWidth( minwid );
77 resize(sizeHint() ); 77 resize(sizeHint() );
78 } 78 }
79 79
80 QString calName() { return nameE->text(); } 80 QString calName() { return nameE->text(); }
81 QString calFileName() { return url->url(); } 81 QString calFileName() { return url->url(); }
82 82
83public slots: 83public slots:
84void checkValid() { 84void checkValid() {
85 if ( nameE->text().isEmpty() ) { 85 if ( nameE->text().isEmpty() ) {
86 KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") ); 86 KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") );
87 nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () )); 87 nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () ));
88 return; 88 return;
89 } 89 }
90 if ( url->url().isEmpty() ) { 90 if ( url->url().isEmpty() ) {
91 KMessageBox::information( this, i18n("Sorry, the file name is empty!") ); 91 KMessageBox::information( this, i18n("Sorry, the file name is empty!") );
92 url->setURL( nameE->text() + ".ics" ); 92 url->setURL( nameE->text() + ".ics" );
93 return; 93 return;
94 } 94 }
95 accept(); 95 accept();
96} 96}
97 97
98public: 98public:
99 KLineEdit* nameE; 99 KLineEdit* nameE;
100 KURLRequester *url; 100 KURLRequester *url;
101}; 101};
102 102
103class KOCalButton : public QPushButton 103class KOCalButton : public QPushButton
104{ 104{
105 Q_OBJECT 105 Q_OBJECT
106 public: 106 public:
107 KOCalButton( QWidget *parent=0, const char *name=0 ) : 107 KOCalButton( QWidget *parent=0, const char *name=0 ) :
108 QPushButton( parent, name) 108 QPushButton( parent, name)
109 { 109 {
110 connect( this, SIGNAL( clicked() ), 110 connect( this, SIGNAL( clicked() ),
111 SLOT( bottonClicked() )); 111 SLOT( bottonClicked() ));
112 mNumber = -1; 112 mNumber = -1;
113 setFocusPolicy(NoFocus); 113 setFocusPolicy(NoFocus);
114 } 114 }
115 void setNum ( int num ) {mNumber = num; } 115 void setNum ( int num ) {mNumber = num; }
116 signals: 116 signals:
117 void selectNum ( int ); 117 void selectNum ( int );
118private: 118private:
119 int mNumber; 119 int mNumber;
120 void keyPressEvent ( QKeyEvent * e ) 120 void keyPressEvent ( QKeyEvent * e )
121 { 121 {
122 e->ignore(); 122 e->ignore();
123 } 123 }
124 124
125private slots : 125private slots :
126 void bottonClicked() { if ( mNumber > 0 ) emit selectNum ( mNumber ); } 126 void bottonClicked() { if ( mNumber > 0 ) emit selectNum ( mNumber ); }
127}; 127};
128class KOCalCheckButton : public QCheckBox 128class KOCalCheckButton : public QCheckBox
129{ 129{
130 Q_OBJECT 130 Q_OBJECT
131 public: 131 public:
132 KOCalCheckButton( QWidget *parent=0, const char *name=0 ) : 132 KOCalCheckButton( QWidget *parent=0, const char *name=0 ) :
133 QCheckBox( parent, name) 133 QCheckBox( parent, name)
134 { 134 {
135 connect( this, SIGNAL( toggled ( bool ) ), 135 connect( this, SIGNAL( toggled ( bool ) ),
136 SLOT( bottonClicked( bool ) )); 136 SLOT( bottonClicked( bool ) ));
137 mNumber = -1; 137 mNumber = -1;
138 setFocusPolicy(NoFocus); 138 setFocusPolicy(NoFocus);
139 //setMaximumWidth( 10 ); 139 //setMaximumWidth( 10 );
140 140
141 } 141 }
142 void setNum ( int num ) {mNumber = num; } 142 void setNum ( int num ) {mNumber = num; }
143 signals: 143 signals:
144 void selectNum ( int, bool ); 144 void selectNum ( int, bool );
145private: 145private:
146 int mNumber; 146 int mNumber;
147 void keyPressEvent ( QKeyEvent * e ) 147 void keyPressEvent ( QKeyEvent * e )
148 { 148 {
149 e->ignore(); 149 e->ignore();
150 } 150 }
151 151
152private slots : 152private slots :
153 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); } 153 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); }
154}; 154};
155 155
156class KOCalRadioButton : public QRadioButton 156class KOCalRadioButton : public QRadioButton
157{ 157{
158 Q_OBJECT 158 Q_OBJECT
159 public: 159 public:
160 KOCalRadioButton( QWidget *parent=0, const char *name=0 ) : 160 KOCalRadioButton( QWidget *parent=0, const char *name=0 ) :
161 QRadioButton( parent, name) 161 QRadioButton( parent, name)
162 { 162 {
163 connect( this, SIGNAL( toggled ( bool ) ), 163 connect( this, SIGNAL( toggled ( bool ) ),
164 SLOT( bottonClicked( bool ) )); 164 SLOT( bottonClicked( bool ) ));
165 mNumber = -1; 165 mNumber = -1;
166 setFocusPolicy(NoFocus); 166 setFocusPolicy(NoFocus);
167 //setMaximumWidth( 10 ); 167 //setMaximumWidth( 10 );
168 168
169 } 169 }
170 int num() { return mNumber;} 170 int num() { return mNumber;}
171 void setNum ( int num ) {mNumber = num; } 171 void setNum ( int num ) {mNumber = num; }
172 signals: 172 signals:
173 void selectNum ( int ); 173 void selectNum ( int );
174private: 174private:
175 int mNumber; 175 int mNumber;
176 void keyPressEvent ( QKeyEvent * e ) 176 void keyPressEvent ( QKeyEvent * e )
177 { 177 {
178 e->ignore(); 178 e->ignore();
179 } 179 }
180 180
181private slots : 181private slots :
182 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); } 182 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); }
183}; 183};
184 184
185 185
186 186
187class KOFilterView : public KOFilterView_base 187class KOFilterView : public KOFilterView_base
188{ 188{
189 Q_OBJECT 189 Q_OBJECT
190 public: 190 public:
191 KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent=0,const char* name=0, WFlags fl=0); 191 KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent=0,const char* name=0, WFlags fl=0);
192 ~KOFilterView(); 192 ~KOFilterView();
193 193
194 void updateFilters(); 194 void updateFilters();
195 195
196 bool filtersEnabled(); 196 bool filtersEnabled();
197 void setFiltersEnabled(bool); 197 void setFiltersEnabled(bool);
198 CalFilter *selectedFilter(); 198 CalFilter *selectedFilter();
199 void setSelectedFilter(QString); 199 void setSelectedFilter(QString);
200 void setSelectedFilter( int ); 200 void setSelectedFilter( int );
201 201
202 signals: 202 signals:
203 void filterChanged(); 203 void filterChanged();
204 void editFilters(); 204 void editFilters();
205 205
206 private: 206 private:
207 QPtrList<CalFilter> *mFilters; 207 QPtrList<CalFilter> *mFilters;
208}; 208};
209 209
210class KOCalEditView : public QScrollView 210class KOCalEditView : public QScrollView
211{ 211{
212 Q_OBJECT 212 Q_OBJECT
213 public: 213 public:
214 KOCalEditView( QWidget* parent=0,const char* name=0); 214 KOCalEditView( QWidget* parent=0,const char* name=0);
215 ~KOCalEditView(); 215 ~KOCalEditView();
216 int addCalendar( QString calName, QString fileName, bool ask = true ); 216 int addCalendar( QString calName, QString fileName, bool ask = true );
217 int getBirtdayID(); 217 int getBirtdayID();
218 public slots: 218 public slots:
219 void addCal(); 219 void addCal();
220 void enableAll(); 220 void enableAll();
221 void enableAlarm(); 221 void enableAlarm();
222 void disableRO(); 222 void disableRO();
223 void deleteAll(); 223 void deleteAll();
224 void selectStdCal(int); 224 void selectStdCal(int);
225 void selectCal(int,bool ); 225 void selectCal(int,bool );
226 void selectCalAlarm(int,bool ); 226 void selectCalAlarm(int,bool );
227 void selectReadOnly(int,bool ); 227 void selectReadOnly(int,bool );
228 void setColor(const QColor &,int) ; 228 void setColor(const QColor &,int) ;
229 void deleteCal(int) ; 229 void deleteCal(int) ;
230 void infoCal(int) ; 230 void infoCal(int) ;
231 void readConfig(); 231 void readConfig();
232 void defaultInfo(); 232 void defaultInfo();
233 void findNewStandard(); 233 void findNewStandard();
234 signals: 234 signals:
235 void alarmEnabled ( int cal, bool enable ); 235 void alarmEnabled ( int cal, bool enable );
236 void calendarEnabled ( int cal, bool enable ); 236 void calendarEnabled ( int cal, bool enable );
237 void calendarReadonly ( int cal, bool readonly ); 237 void calendarReadonly ( int cal, bool readonly );
238 void setCalendarDefault ( int cal ); 238 void setCalendarDefault ( int cal );
239 void removeCalendar ( int cal ); 239 void removeCalendar ( int cal );
240 void calendarAdded( int ); 240 void calendarAdded( int );
241 void needsUpdate(); 241 void needsUpdate();
242 void checkCalendar(); 242 void checkCalendar();
243 void requestCalendarInfo( int id );
243 244
244 private: 245 private:
245 QWidget *mw; 246 QWidget *mw;
246 void toggleList ( QPtrList<KOCalCheckButton> , bool b = true ); 247 void toggleList ( QPtrList<KOCalCheckButton> , bool b = true );
247 QPtrList<KOCalRadioButton> mStdandardB; 248 QPtrList<KOCalRadioButton> mStdandardB;
248 QPtrList<KOCalCheckButton> mEnabledB; 249 QPtrList<KOCalCheckButton> mEnabledB;
249 QPtrList<KOCalCheckButton> mAlarmB; 250 QPtrList<KOCalCheckButton> mAlarmB;
250 QPtrList<KOCalCheckButton> mROB; 251 QPtrList<KOCalCheckButton> mROB;
251 QGridLayout* mainLayout; 252 QGridLayout* mainLayout;
252}; 253};
253 254
254 255
255 256
256#endif // KOFILTERVIEW_H 257#endif // KOFILTERVIEW_H