summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp43
-rw-r--r--korganizer/calendarview.h2
-rw-r--r--libkcal/calendar.h4
-rw-r--r--libkcal/calendarlocal.cpp8
-rw-r--r--libkcal/calendarlocal.h4
-rw-r--r--libkcal/incidencebase.cpp12
-rw-r--r--libkcal/incidencebase.h3
-rw-r--r--libkcal/sharpformat.cpp18
8 files changed, 35 insertions, 59 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 9160e1d..cbe2a10 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3506 +1,3497 @@
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 (preston.brown@yale.edu) 8 Preston Brown (preston.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 66
67#include <libkcal/vcaldrag.h> 67#include <libkcal/vcaldrag.h>
68#include <libkcal/icaldrag.h> 68#include <libkcal/icaldrag.h>
69#include <libkcal/icalformat.h> 69#include <libkcal/icalformat.h>
70#include <libkcal/vcalformat.h> 70#include <libkcal/vcalformat.h>
71#include <libkcal/scheduler.h> 71#include <libkcal/scheduler.h>
72#include <libkcal/calendarlocal.h> 72#include <libkcal/calendarlocal.h>
73#include <libkcal/journal.h> 73#include <libkcal/journal.h>
74#include <libkcal/calfilter.h> 74#include <libkcal/calfilter.h>
75#include <libkcal/attendee.h> 75#include <libkcal/attendee.h>
76#include <libkcal/dndfactory.h> 76#include <libkcal/dndfactory.h>
77#include <libkcal/freebusy.h> 77#include <libkcal/freebusy.h>
78#include <libkcal/filestorage.h> 78#include <libkcal/filestorage.h>
79#include <libkcal/calendarresources.h> 79#include <libkcal/calendarresources.h>
80#include <libkcal/qtopiaformat.h> 80#include <libkcal/qtopiaformat.h>
81#include "../kalarmd/alarmdialog.h" 81#include "../kalarmd/alarmdialog.h"
82 82
83#ifndef DESKTOP_VERSION 83#ifndef DESKTOP_VERSION
84#include <libkcal/sharpformat.h> 84#include <libkcal/sharpformat.h>
85#endif 85#endif
86#ifndef KORG_NOMAIL 86#ifndef KORG_NOMAIL
87#include "komailclient.h" 87#include "komailclient.h"
88#endif 88#endif
89#ifndef KORG_NOPRINTER 89#ifndef KORG_NOPRINTER
90#include "calprinter.h" 90#include "calprinter.h"
91#endif 91#endif
92#ifndef KORG_NOPLUGINS 92#ifndef KORG_NOPLUGINS
93#include "kocore.h" 93#include "kocore.h"
94#endif 94#endif
95#include "koeventeditor.h" 95#include "koeventeditor.h"
96#include "kotodoeditor.h" 96#include "kotodoeditor.h"
97#include "koprefs.h" 97#include "koprefs.h"
98#include "koeventviewerdialog.h" 98#include "koeventviewerdialog.h"
99#include "publishdialog.h" 99#include "publishdialog.h"
100#include "kofilterview.h" 100#include "kofilterview.h"
101#include "koglobals.h" 101#include "koglobals.h"
102#include "koviewmanager.h" 102#include "koviewmanager.h"
103#include "koagendaview.h" 103#include "koagendaview.h"
104#include "kodialogmanager.h" 104#include "kodialogmanager.h"
105#include "outgoingdialog.h" 105#include "outgoingdialog.h"
106#include "incomingdialog.h" 106#include "incomingdialog.h"
107#include "statusdialog.h" 107#include "statusdialog.h"
108#include "kdatenavigator.h" 108#include "kdatenavigator.h"
109#include "kotodoview.h" 109#include "kotodoview.h"
110#include "datenavigator.h" 110#include "datenavigator.h"
111#include "resourceview.h" 111#include "resourceview.h"
112#include "navigatorbar.h" 112#include "navigatorbar.h"
113#include "searchdialog.h" 113#include "searchdialog.h"
114#include "mainwindow.h" 114#include "mainwindow.h"
115 115
116#include "calendarview.h" 116#include "calendarview.h"
117#ifndef DESKTOP_VERSION 117#ifndef DESKTOP_VERSION
118#include <qtopia/alarmserver.h> 118#include <qtopia/alarmserver.h>
119#endif 119#endif
120#ifndef _WIN32_ 120#ifndef _WIN32_
121#include <stdlib.h> 121#include <stdlib.h>
122#include <stdio.h> 122#include <stdio.h>
123#include <unistd.h> 123#include <unistd.h>
124#else 124#else
125#include <qprocess.h> 125#include <qprocess.h>
126#endif 126#endif
127using namespace KOrg; 127using namespace KOrg;
128using namespace KCal; 128using namespace KCal;
129extern int globalFlagBlockAgenda; 129extern int globalFlagBlockAgenda;
130extern int globalFlagBlockStartup; 130extern int globalFlagBlockStartup;
131 131
132 132
133 133
134class KOBeamPrefs : public QDialog 134class KOBeamPrefs : public QDialog
135{ 135{
136 public: 136 public:
137 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 137 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
138 QDialog( parent, name, true ) 138 QDialog( parent, name, true )
139 { 139 {
140 setCaption( i18n("Beam Options") ); 140 setCaption( i18n("Beam Options") );
141 QVBoxLayout* lay = new QVBoxLayout( this ); 141 QVBoxLayout* lay = new QVBoxLayout( this );
142 lay->setSpacing( 3 ); 142 lay->setSpacing( 3 );
143 lay->setMargin( 3 ); 143 lay->setMargin( 3 );
144 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 144 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
145 lay->addWidget( format ); 145 lay->addWidget( format );
146 format->setExclusive ( true ) ; 146 format->setExclusive ( true ) ;
147 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 147 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
148 lay->addWidget( time ); time->setExclusive ( true ) ; 148 lay->addWidget( time ); time->setExclusive ( true ) ;
149 vcal = new QRadioButton(" vCalendar ", format ); 149 vcal = new QRadioButton(" vCalendar ", format );
150 ical = new QRadioButton(" iCalendar ", format ); 150 ical = new QRadioButton(" iCalendar ", format );
151 vcal->setChecked( true ); 151 vcal->setChecked( true );
152 tz = new QRadioButton(i18n(" With timezone "), time ); 152 tz = new QRadioButton(i18n(" With timezone "), time );
153 local = new QRadioButton(i18n(" Local time "), time ); 153 local = new QRadioButton(i18n(" Local time "), time );
154 tz->setChecked( true ); 154 tz->setChecked( true );
155 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 155 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
156 lay->addWidget( ok ); 156 lay->addWidget( ok );
157 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 157 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
158 lay->addWidget( cancel ); 158 lay->addWidget( cancel );
159 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 159 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
160 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 160 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
161 resize( 200, 200 ); 161 resize( 200, 200 );
162 } 162 }
163 163
164 bool beamVcal() { return vcal->isChecked(); } 164 bool beamVcal() { return vcal->isChecked(); }
165 bool beamLocal() { return local->isChecked(); } 165 bool beamLocal() { return local->isChecked(); }
166private: 166private:
167 QRadioButton* vcal, *ical, *local, *tz; 167 QRadioButton* vcal, *ical, *local, *tz;
168}; 168};
169class KOCatPrefs : public QDialog 169class KOCatPrefs : public QDialog
170{ 170{
171 public: 171 public:
172 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 172 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
173 QDialog( parent, name, true ) 173 QDialog( parent, name, true )
174 { 174 {
175 setCaption( i18n("Manage new Categories") ); 175 setCaption( i18n("Manage new Categories") );
176 QVBoxLayout* lay = new QVBoxLayout( this ); 176 QVBoxLayout* lay = new QVBoxLayout( this );
177 lay->setSpacing( 3 ); 177 lay->setSpacing( 3 );
178 lay->setMargin( 3 ); 178 lay->setMargin( 3 );
179 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 179 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
180 lay->addWidget( lab ); 180 lay->addWidget( lab );
181 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 181 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
182 lay->addWidget( format ); 182 lay->addWidget( format );
183 format->setExclusive ( true ) ; 183 format->setExclusive ( true ) ;
184 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 184 addCatBut = new QRadioButton(i18n("Add to category list"), format );
185 new QRadioButton(i18n("Remove from Events/Todos"), format ); 185 new QRadioButton(i18n("Remove from Events/Todos"), format );
186 addCatBut->setChecked( true ); 186 addCatBut->setChecked( true );
187 QPushButton * ok = new QPushButton( i18n("OK"), this ); 187 QPushButton * ok = new QPushButton( i18n("OK"), this );
188 lay->addWidget( ok ); 188 lay->addWidget( ok );
189 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 189 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
190 lay->addWidget( cancel ); 190 lay->addWidget( cancel );
191 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 191 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
192 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 192 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
193 resize( 200, 200 ); 193 resize( 200, 200 );
194 } 194 }
195 195
196 bool addCat() { return addCatBut->isChecked(); } 196 bool addCat() { return addCatBut->isChecked(); }
197private: 197private:
198 QRadioButton* addCatBut; 198 QRadioButton* addCatBut;
199}; 199};
200 200
201 201
202 202
203CalendarView::CalendarView( CalendarResources *calendar, 203CalendarView::CalendarView( CalendarResources *calendar,
204 QWidget *parent, const char *name ) 204 QWidget *parent, const char *name )
205 : CalendarViewBase( parent, name ), 205 : CalendarViewBase( parent, name ),
206 mCalendar( calendar ), 206 mCalendar( calendar ),
207 mResourceManager( calendar->resourceManager() ) 207 mResourceManager( calendar->resourceManager() )
208{ 208{
209 209
210 mEventEditor = 0; 210 mEventEditor = 0;
211 mTodoEditor = 0; 211 mTodoEditor = 0;
212 212
213 init(); 213 init();
214} 214}
215 215
216CalendarView::CalendarView( Calendar *calendar, 216CalendarView::CalendarView( Calendar *calendar,
217 QWidget *parent, const char *name ) 217 QWidget *parent, const char *name )
218 : CalendarViewBase( parent, name ), 218 : CalendarViewBase( parent, name ),
219 mCalendar( calendar ), 219 mCalendar( calendar ),
220 mResourceManager( 0 ) 220 mResourceManager( 0 )
221{ 221{
222 222
223 mEventEditor = 0; 223 mEventEditor = 0;
224 mTodoEditor = 0; 224 mTodoEditor = 0;
225 init();} 225 init();}
226 226
227void CalendarView::init() 227void CalendarView::init()
228{ 228{
229 beamDialog = new KOBeamPrefs(); 229 beamDialog = new KOBeamPrefs();
230 mDatePickerMode = 0; 230 mDatePickerMode = 0;
231 mCurrentSyncDevice = ""; 231 mCurrentSyncDevice = "";
232 writeLocale(); 232 writeLocale();
233 mViewManager = new KOViewManager( this ); 233 mViewManager = new KOViewManager( this );
234 mDialogManager = new KODialogManager( this ); 234 mDialogManager = new KODialogManager( this );
235 mEventViewerDialog = 0; 235 mEventViewerDialog = 0;
236 mModified = false; 236 mModified = false;
237 mReadOnly = false; 237 mReadOnly = false;
238 mSelectedIncidence = 0; 238 mSelectedIncidence = 0;
239 mCalPrinter = 0; 239 mCalPrinter = 0;
240 mFilters.setAutoDelete(true); 240 mFilters.setAutoDelete(true);
241 241
242 mCalendar->registerObserver( this ); 242 mCalendar->registerObserver( this );
243 // TODO: Make sure that view is updated, when calendar is changed. 243 // TODO: Make sure that view is updated, when calendar is changed.
244 244
245 mStorage = new FileStorage( mCalendar ); 245 mStorage = new FileStorage( mCalendar );
246 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 246 mNavigator = new DateNavigator( this, "datevav", mViewManager );
247 247
248 QBoxLayout *topLayout = (QBoxLayout*)layout(); 248 QBoxLayout *topLayout = (QBoxLayout*)layout();
249#ifndef KORG_NOSPLITTER 249#ifndef KORG_NOSPLITTER
250 // create the main layout frames. 250 // create the main layout frames.
251 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 251 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
252 topLayout->addWidget(mPanner); 252 topLayout->addWidget(mPanner);
253 253
254 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 254 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
255 "CalendarView::LeftFrame"); 255 "CalendarView::LeftFrame");
256 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 256 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
257 257
258 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 258 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
259 "CalendarView::DateNavigator", QDate::currentDate() ); 259 "CalendarView::DateNavigator", QDate::currentDate() );
260 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 260 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
261 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 261 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
262 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 262 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
263 263
264#ifdef KORG_NORESOURCEVIEW 264#ifdef KORG_NORESOURCEVIEW
265 mResourceView = 0; 265 mResourceView = 0;
266#else 266#else
267 if ( mResourceManager ) { 267 if ( mResourceManager ) {
268 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 268 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
269 mResourceView->updateView(); 269 mResourceView->updateView();
270 connect( mResourceView, SIGNAL( resourcesChanged() ), 270 connect( mResourceView, SIGNAL( resourcesChanged() ),
271 SLOT( updateView() ) ); 271 SLOT( updateView() ) );
272 } else { 272 } else {
273 mResourceView = 0; 273 mResourceView = 0;
274 } 274 }
275#endif 275#endif
276 QWidget *rightBox = new QWidget( mPanner ); 276 QWidget *rightBox = new QWidget( mPanner );
277 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 277 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
278 278
279 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 279 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
280 rightLayout->addWidget( mNavigatorBar ); 280 rightLayout->addWidget( mNavigatorBar );
281 281
282 mRightFrame = new QWidgetStack( rightBox ); 282 mRightFrame = new QWidgetStack( rightBox );
283 rightLayout->addWidget( mRightFrame, 1 ); 283 rightLayout->addWidget( mRightFrame, 1 );
284 284
285 mLeftFrame = mLeftSplitter; 285 mLeftFrame = mLeftSplitter;
286#else 286#else
287 QWidget *mainBox = new QWidget( this ); 287 QWidget *mainBox = new QWidget( this );
288 QWidget *leftFrame = new QWidget( mainBox ); 288 QWidget *leftFrame = new QWidget( mainBox );
289 289
290 QBoxLayout * mainBoxLayout; 290 QBoxLayout * mainBoxLayout;
291 QBoxLayout * leftFrameLayout; 291 QBoxLayout * leftFrameLayout;
292 if ( KOPrefs::instance()->mVerticalScreen ) { 292 if ( KOPrefs::instance()->mVerticalScreen ) {
293 mainBoxLayout = new QVBoxLayout(mainBox); 293 mainBoxLayout = new QVBoxLayout(mainBox);
294 leftFrameLayout = new QHBoxLayout(leftFrame ); 294 leftFrameLayout = new QHBoxLayout(leftFrame );
295 } else { 295 } else {
296 mainBoxLayout = new QHBoxLayout(mainBox); 296 mainBoxLayout = new QHBoxLayout(mainBox);
297 leftFrameLayout = new QVBoxLayout(leftFrame ); 297 leftFrameLayout = new QVBoxLayout(leftFrame );
298 } 298 }
299 topLayout->addWidget( mainBox ); 299 topLayout->addWidget( mainBox );
300 mainBoxLayout->addWidget (leftFrame); 300 mainBoxLayout->addWidget (leftFrame);
301 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 301 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
302 "CalendarView::DateNavigator", QDate::currentDate()); 302 "CalendarView::DateNavigator", QDate::currentDate());
303 // mDateNavigator->blockSignals( true ); 303 // mDateNavigator->blockSignals( true );
304 leftFrameLayout->addWidget( mDateNavigator ); 304 leftFrameLayout->addWidget( mDateNavigator );
305 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 305 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
306 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); 306 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist");
307 307
308 if ( QApplication::desktop()->width() < 480 ) { 308 if ( QApplication::desktop()->width() < 480 ) {
309 leftFrameLayout->addWidget(mFilterView); 309 leftFrameLayout->addWidget(mFilterView);
310 leftFrameLayout->addWidget(mTodoList, 2 ); 310 leftFrameLayout->addWidget(mTodoList, 2 );
311 311
312 } else { 312 } else {
313 leftFrameLayout->addWidget(mTodoList,2 ); 313 leftFrameLayout->addWidget(mTodoList,2 );
314 leftFrameLayout->addWidget(mFilterView ); 314 leftFrameLayout->addWidget(mFilterView );
315 } 315 }
316 mFilterView->hide(); 316 mFilterView->hide();
317 QWidget *rightBox = new QWidget( mainBox ); 317 QWidget *rightBox = new QWidget( mainBox );
318 mainBoxLayout->addWidget ( rightBox, 10 ); 318 mainBoxLayout->addWidget ( rightBox, 10 );
319 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 319 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
320 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 320 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
321 mRightFrame = new QWidgetStack( rightBox ); 321 mRightFrame = new QWidgetStack( rightBox );
322 rightLayout->addWidget( mNavigatorBar ); 322 rightLayout->addWidget( mNavigatorBar );
323 rightLayout->addWidget( mRightFrame, 10 ); 323 rightLayout->addWidget( mRightFrame, 10 );
324 324
325 mLeftFrame = leftFrame; 325 mLeftFrame = leftFrame;
326 if ( KOPrefs::instance()->mVerticalScreen ) { 326 if ( KOPrefs::instance()->mVerticalScreen ) {
327 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 327 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
328 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 328 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
329 } else { 329 } else {
330 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 330 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
331 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 331 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
332 } 332 }
333 333
334 //qDebug("Calendarview Size %d %d ", width(), height()); 334 //qDebug("Calendarview Size %d %d ", width(), height());
335#endif 335#endif
336 336
337 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 337 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
338 SLOT( showDates( const KCal::DateList & ) ) ); 338 SLOT( showDates( const KCal::DateList & ) ) );
339 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 339 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
340 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 340 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
341 341
342 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 342 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
343 mNavigator, SLOT( selectPreviousYear() ) ); 343 mNavigator, SLOT( selectPreviousYear() ) );
344 connect( mNavigatorBar, SIGNAL( goNextYear() ), 344 connect( mNavigatorBar, SIGNAL( goNextYear() ),
345 mNavigator, SLOT( selectNextYear() ) ); 345 mNavigator, SLOT( selectNextYear() ) );
346 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 346 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
347 mNavigator, SLOT( selectPreviousMonth() ) ); 347 mNavigator, SLOT( selectPreviousMonth() ) );
348 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 348 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
349 mNavigator, SLOT( selectNextMonth() ) ); 349 mNavigator, SLOT( selectNextMonth() ) );
350 350
351 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 351 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
352 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 352 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
353 353
354 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 354 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
355 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 355 mNavigator, SLOT( selectWeek( const QDate & ) ) );
356 356
357 connect( mDateNavigator, SIGNAL( goPrevYear() ), 357 connect( mDateNavigator, SIGNAL( goPrevYear() ),
358 mNavigator, SLOT( selectPreviousYear() ) ); 358 mNavigator, SLOT( selectPreviousYear() ) );
359 connect( mDateNavigator, SIGNAL( goNextYear() ), 359 connect( mDateNavigator, SIGNAL( goNextYear() ),
360 mNavigator, SLOT( selectNextYear() ) ); 360 mNavigator, SLOT( selectNextYear() ) );
361 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 361 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
362 mNavigator, SLOT( selectPreviousMonth() ) ); 362 mNavigator, SLOT( selectPreviousMonth() ) );
363 connect( mDateNavigator, SIGNAL( goNextMonth() ), 363 connect( mDateNavigator, SIGNAL( goNextMonth() ),
364 mNavigator, SLOT( selectNextMonth() ) ); 364 mNavigator, SLOT( selectNextMonth() ) );
365 365
366 connect( mDateNavigator, SIGNAL( goPrevious() ), 366 connect( mDateNavigator, SIGNAL( goPrevious() ),
367 mNavigator, SLOT( selectPrevious() ) ); 367 mNavigator, SLOT( selectPrevious() ) );
368 connect( mDateNavigator, SIGNAL( goNext() ), 368 connect( mDateNavigator, SIGNAL( goNext() ),
369 mNavigator, SLOT( selectNext() ) ); 369 mNavigator, SLOT( selectNext() ) );
370 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 370 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
371 mNavigator, SLOT( slotMonthSelect( int ) ) ); 371 mNavigator, SLOT( slotMonthSelect( int ) ) );
372 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 372 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
373 mNavigator, SLOT( slotMonthSelect( int ) ) ); 373 mNavigator, SLOT( slotMonthSelect( int ) ) );
374 374
375 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 375 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
376 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 376 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
377 377
378 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 378 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
379 SLOT( eventAdded( Event *) ) ); 379 SLOT( eventAdded( Event *) ) );
380 380
381 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 381 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
382 382
383 connect( this, SIGNAL( configChanged() ), 383 connect( this, SIGNAL( configChanged() ),
384 mDateNavigator, SLOT( updateConfig() ) ); 384 mDateNavigator, SLOT( updateConfig() ) );
385 385
386 connect( mTodoList, SIGNAL( newTodoSignal() ), 386 connect( mTodoList, SIGNAL( newTodoSignal() ),
387 SLOT( newTodo() ) ); 387 SLOT( newTodo() ) );
388 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 388 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
389 SLOT( newSubTodo( Todo * ) ) ); 389 SLOT( newSubTodo( Todo * ) ) );
390 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 390 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
391 SLOT( editTodo( Todo * ) ) ); 391 SLOT( editTodo( Todo * ) ) );
392 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 392 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
393 SLOT( showTodo( Todo *) ) ); 393 SLOT( showTodo( Todo *) ) );
394 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 394 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
395 SLOT( deleteTodo( Todo *) ) ); 395 SLOT( deleteTodo( Todo *) ) );
396 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 396 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
397 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 397 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
398 SLOT( purgeCompleted() ) ); 398 SLOT( purgeCompleted() ) );
399 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 399 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
400 SIGNAL( todoModified( Todo *, int ) ) ); 400 SIGNAL( todoModified( Todo *, int ) ) );
401 401
402 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 402 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
403 this, SLOT ( cloneIncidence( Incidence * ) ) ); 403 this, SLOT ( cloneIncidence( Incidence * ) ) );
404 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 404 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
405 this, SLOT (cancelIncidence( Incidence * ) ) ); 405 this, SLOT (cancelIncidence( Incidence * ) ) );
406 406
407 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 407 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
408 this, SLOT ( moveIncidence( Incidence * ) ) ); 408 this, SLOT ( moveIncidence( Incidence * ) ) );
409 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 409 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
410 this, SLOT ( beamIncidence( Incidence * ) ) ); 410 this, SLOT ( beamIncidence( Incidence * ) ) );
411 411
412 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 412 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
413 this, SLOT ( todo_unsub( Todo * ) ) ); 413 this, SLOT ( todo_unsub( Todo * ) ) );
414 414
415 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 415 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
416 SLOT( updateTodo( Todo *, int ) ) ); 416 SLOT( updateTodo( Todo *, int ) ) );
417 connect( this, SIGNAL( todoModified( Todo *, int )), this, 417 connect( this, SIGNAL( todoModified( Todo *, int )), this,
418 SLOT( changeTodoDisplay( Todo *, int ) ) ); 418 SLOT( changeTodoDisplay( Todo *, int ) ) );
419 419
420 420
421 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 421 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
422 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 422 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
423 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 423 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
424 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 424 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
425 425
426 426
427 427
428 428
429 429
430 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 430 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
431 SLOT(checkClipboard())); 431 SLOT(checkClipboard()));
432 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 432 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
433 SLOT( processTodoListSelection( Incidence * ) ) ); 433 SLOT( processTodoListSelection( Incidence * ) ) );
434 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 434 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
435 435
436 // kdDebug() << "CalendarView::CalendarView() done" << endl; 436 // kdDebug() << "CalendarView::CalendarView() done" << endl;
437 437
438 mDateFrame = new QVBox(0,0,WType_Popup); 438 mDateFrame = new QVBox(0,0,WType_Popup);
439 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 439 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
440 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 440 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
441 mDateFrame->setLineWidth(3); 441 mDateFrame->setLineWidth(3);
442 mDateFrame->hide(); 442 mDateFrame->hide();
443 mDateFrame->setCaption( i18n( "Pick a date to display")); 443 mDateFrame->setCaption( i18n( "Pick a date to display"));
444 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 444 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
445 445
446 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 446 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
447 447
448 mEventEditor = mDialogManager->getEventEditor(); 448 mEventEditor = mDialogManager->getEventEditor();
449 mTodoEditor = mDialogManager->getTodoEditor(); 449 mTodoEditor = mDialogManager->getTodoEditor();
450 450
451 mFlagEditDescription = false; 451 mFlagEditDescription = false;
452 452
453 mSuspendTimer = new QTimer( this ); 453 mSuspendTimer = new QTimer( this );
454 mAlarmTimer = new QTimer( this ); 454 mAlarmTimer = new QTimer( this );
455 mRecheckAlarmTimer = new QTimer( this ); 455 mRecheckAlarmTimer = new QTimer( this );
456 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 456 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
457 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 457 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
458 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 458 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
459 mAlarmDialog = new AlarmDialog( this ); 459 mAlarmDialog = new AlarmDialog( this );
460 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 460 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
461 mAlarmDialog->setServerNotification( false ); 461 mAlarmDialog->setServerNotification( false );
462 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 462 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
463} 463}
464 464
465 465
466CalendarView::~CalendarView() 466CalendarView::~CalendarView()
467{ 467{
468 // kdDebug() << "~CalendarView()" << endl; 468 // kdDebug() << "~CalendarView()" << endl;
469 //qDebug("CalendarView::~CalendarView() "); 469 //qDebug("CalendarView::~CalendarView() ");
470 delete mDialogManager; 470 delete mDialogManager;
471 delete mViewManager; 471 delete mViewManager;
472 delete mStorage; 472 delete mStorage;
473 delete mDateFrame ; 473 delete mDateFrame ;
474 delete beamDialog; 474 delete beamDialog;
475 //kdDebug() << "~CalendarView() done" << endl; 475 //kdDebug() << "~CalendarView() done" << endl;
476} 476}
477void CalendarView::timerAlarm() 477void CalendarView::timerAlarm()
478{ 478{
479 //qDebug("CalendarView::timerAlarm() "); 479 //qDebug("CalendarView::timerAlarm() ");
480 computeAlarm(mAlarmNotification ); 480 computeAlarm(mAlarmNotification );
481} 481}
482 482
483void CalendarView::suspendAlarm() 483void CalendarView::suspendAlarm()
484{ 484{
485 //qDebug(" CalendarView::suspendAlarm() "); 485 //qDebug(" CalendarView::suspendAlarm() ");
486 computeAlarm(mSuspendAlarmNotification ); 486 computeAlarm(mSuspendAlarmNotification );
487 487
488} 488}
489 489
490void CalendarView::startAlarm( QString mess , QString filename) 490void CalendarView::startAlarm( QString mess , QString filename)
491{ 491{
492 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 492 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
493 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 493 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
494 494
495} 495}
496 496
497void CalendarView::checkNextTimerAlarm() 497void CalendarView::checkNextTimerAlarm()
498{ 498{
499 mCalendar->checkAlarmForIncidence( 0, true ); 499 mCalendar->checkAlarmForIncidence( 0, true );
500} 500}
501 501
502void CalendarView::computeAlarm( QString msg ) 502void CalendarView::computeAlarm( QString msg )
503{ 503{
504 504
505 QString mess = msg; 505 QString mess = msg;
506 QString mAlarmMessage = mess.mid( 9 ); 506 QString mAlarmMessage = mess.mid( 9 );
507 QString filename = MainWindow::resourcePath(); 507 QString filename = MainWindow::resourcePath();
508 filename += "koalarm.wav"; 508 filename += "koalarm.wav";
509 QString tempfilename; 509 QString tempfilename;
510 if ( mess.left( 13 ) == "suspend_alarm") { 510 if ( mess.left( 13 ) == "suspend_alarm") {
511 bool error = false; 511 bool error = false;
512 int len = mess.mid( 13 ).find("+++"); 512 int len = mess.mid( 13 ).find("+++");
513 if ( len < 2 ) 513 if ( len < 2 )
514 error = true; 514 error = true;
515 else { 515 else {
516 tempfilename = mess.mid( 13, len ); 516 tempfilename = mess.mid( 13, len );
517 if ( !QFile::exists( tempfilename ) ) 517 if ( !QFile::exists( tempfilename ) )
518 error = true; 518 error = true;
519 } 519 }
520 if ( ! error ) { 520 if ( ! error ) {
521 filename = tempfilename; 521 filename = tempfilename;
522 } 522 }
523 mAlarmMessage = mess.mid( 13+len+3 ); 523 mAlarmMessage = mess.mid( 13+len+3 );
524 //qDebug("suspend file %s ",tempfilename.latin1() ); 524 //qDebug("suspend file %s ",tempfilename.latin1() );
525 startAlarm( mAlarmMessage, filename); 525 startAlarm( mAlarmMessage, filename);
526 return; 526 return;
527 } 527 }
528 if ( mess.left( 11 ) == "timer_alarm") { 528 if ( mess.left( 11 ) == "timer_alarm") {
529 //mTimerTime = 0; 529 //mTimerTime = 0;
530 startAlarm( mess.mid( 11 ), filename ); 530 startAlarm( mess.mid( 11 ), filename );
531 return; 531 return;
532 } 532 }
533 if ( mess.left( 10 ) == "proc_alarm") { 533 if ( mess.left( 10 ) == "proc_alarm") {
534 bool error = false; 534 bool error = false;
535 int len = mess.mid( 10 ).find("+++"); 535 int len = mess.mid( 10 ).find("+++");
536 if ( len < 2 ) 536 if ( len < 2 )
537 error = true; 537 error = true;
538 else { 538 else {
539 tempfilename = mess.mid( 10, len ); 539 tempfilename = mess.mid( 10, len );
540 if ( !QFile::exists( tempfilename ) ) 540 if ( !QFile::exists( tempfilename ) )
541 error = true; 541 error = true;
542 } 542 }
543 if ( error ) { 543 if ( error ) {
544 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 544 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
545 mAlarmMessage += mess.mid( 10+len+3+9 ); 545 mAlarmMessage += mess.mid( 10+len+3+9 );
546 } else { 546 } else {
547 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 547 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
548 //qDebug("-----system command %s ",tempfilename.latin1() ); 548 //qDebug("-----system command %s ",tempfilename.latin1() );
549#ifndef _WIN32_ 549#ifndef _WIN32_
550 if ( vfork () == 0 ) { 550 if ( vfork () == 0 ) {
551 execl ( tempfilename.latin1(), 0 ); 551 execl ( tempfilename.latin1(), 0 );
552 return; 552 return;
553 } 553 }
554#else 554#else
555 QProcess* p = new QProcess(); 555 QProcess* p = new QProcess();
556 p->addArgument( tempfilename.latin1() ); 556 p->addArgument( tempfilename.latin1() );
557 p->start(); 557 p->start();
558 return; 558 return;
559#endif 559#endif
560 560
561 return; 561 return;
562 } 562 }
563 563
564 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 564 //qDebug("+++++++system command %s ",tempfilename.latin1() );
565 } 565 }
566 if ( mess.left( 11 ) == "audio_alarm") { 566 if ( mess.left( 11 ) == "audio_alarm") {
567 bool error = false; 567 bool error = false;
568 int len = mess.mid( 11 ).find("+++"); 568 int len = mess.mid( 11 ).find("+++");
569 if ( len < 2 ) 569 if ( len < 2 )
570 error = true; 570 error = true;
571 else { 571 else {
572 tempfilename = mess.mid( 11, len ); 572 tempfilename = mess.mid( 11, len );
573 if ( !QFile::exists( tempfilename ) ) 573 if ( !QFile::exists( tempfilename ) )
574 error = true; 574 error = true;
575 } 575 }
576 if ( ! error ) { 576 if ( ! error ) {
577 filename = tempfilename; 577 filename = tempfilename;
578 } 578 }
579 mAlarmMessage = mess.mid( 11+len+3+9 ); 579 mAlarmMessage = mess.mid( 11+len+3+9 );
580 //qDebug("audio file command %s ",tempfilename.latin1() ); 580 //qDebug("audio file command %s ",tempfilename.latin1() );
581 } 581 }
582 if ( mess.left( 9 ) == "cal_alarm") { 582 if ( mess.left( 9 ) == "cal_alarm") {
583 mAlarmMessage = mess.mid( 9 ) ; 583 mAlarmMessage = mess.mid( 9 ) ;
584 } 584 }
585 585
586 startAlarm( mAlarmMessage, filename ); 586 startAlarm( mAlarmMessage, filename );
587 587
588 588
589} 589}
590 590
591void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 591void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
592{ 592{
593 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 593 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
594 594
595 mSuspendAlarmNotification = noti; 595 mSuspendAlarmNotification = noti;
596 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 596 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
597 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 597 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
598 mSuspendTimer->start( ms , true ); 598 mSuspendTimer->start( ms , true );
599 599
600} 600}
601 601
602void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 602void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
603{ 603{
604 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 604 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
605 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 605 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
606#ifndef DESKTOP_VERSION 606#ifndef DESKTOP_VERSION
607 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 607 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
608#endif 608#endif
609 return; 609 return;
610 } 610 }
611 int maxSec; 611 int maxSec;
612 //maxSec = 5; //testing only 612 //maxSec = 5; //testing only
613 maxSec = 86400+3600; // one day+1hour 613 maxSec = 86400+3600; // one day+1hour
614 mAlarmNotification = noti; 614 mAlarmNotification = noti;
615 int sec = QDateTime::currentDateTime().secsTo( qdt ); 615 int sec = QDateTime::currentDateTime().secsTo( qdt );
616 if ( sec > maxSec ) { 616 if ( sec > maxSec ) {
617 mRecheckAlarmTimer->start( maxSec * 1000 ); 617 mRecheckAlarmTimer->start( maxSec * 1000 );
618 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 618 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
619 return; 619 return;
620 } else { 620 } else {
621 mRecheckAlarmTimer->stop(); 621 mRecheckAlarmTimer->stop();
622 } 622 }
623 //qDebug("Alarm timer started with secs: %d ", sec); 623 //qDebug("Alarm timer started with secs: %d ", sec);
624 mAlarmTimer->start( sec *1000 , true ); 624 mAlarmTimer->start( sec *1000 , true );
625 625
626} 626}
627// called by mRecheckAlarmTimer to get next alarm 627// called by mRecheckAlarmTimer to get next alarm
628// we need this, because a QTimer has only a max range of 25 days 628// we need this, because a QTimer has only a max range of 25 days
629void CalendarView::recheckTimerAlarm() 629void CalendarView::recheckTimerAlarm()
630{ 630{
631 mAlarmTimer->stop(); 631 mAlarmTimer->stop();
632 mRecheckAlarmTimer->stop(); 632 mRecheckAlarmTimer->stop();
633 mCalendar->checkAlarmForIncidence( 0, true ); 633 mCalendar->checkAlarmForIncidence( 0, true );
634} 634}
635void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 635void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
636{ 636{
637 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 637 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
638 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 638 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
639#ifndef DESKTOP_VERSION 639#ifndef DESKTOP_VERSION
640 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 640 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
641#endif 641#endif
642 return; 642 return;
643 } 643 }
644 mAlarmTimer->stop(); 644 mAlarmTimer->stop();
645} 645}
646void CalendarView::selectWeekNum ( int num ) 646void CalendarView::selectWeekNum ( int num )
647{ 647{
648 dateNavigator()->selectWeek( num ); 648 dateNavigator()->selectWeek( num );
649 mViewManager->showWeekView(); 649 mViewManager->showWeekView();
650} 650}
651KOViewManager *CalendarView::viewManager() 651KOViewManager *CalendarView::viewManager()
652{ 652{
653 return mViewManager; 653 return mViewManager;
654} 654}
655 655
656KODialogManager *CalendarView::dialogManager() 656KODialogManager *CalendarView::dialogManager()
657{ 657{
658 return mDialogManager; 658 return mDialogManager;
659} 659}
660 660
661QDate CalendarView::startDate() 661QDate CalendarView::startDate()
662{ 662{
663 DateList dates = mNavigator->selectedDates(); 663 DateList dates = mNavigator->selectedDates();
664 664
665 return dates.first(); 665 return dates.first();
666} 666}
667 667
668QDate CalendarView::endDate() 668QDate CalendarView::endDate()
669{ 669{
670 DateList dates = mNavigator->selectedDates(); 670 DateList dates = mNavigator->selectedDates();
671 671
672 return dates.last(); 672 return dates.last();
673} 673}
674 674
675 675
676void CalendarView::createPrinter() 676void CalendarView::createPrinter()
677{ 677{
678#ifndef KORG_NOPRINTER 678#ifndef KORG_NOPRINTER
679 if (!mCalPrinter) { 679 if (!mCalPrinter) {
680 mCalPrinter = new CalPrinter(this, mCalendar); 680 mCalPrinter = new CalPrinter(this, mCalendar);
681 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 681 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
682 } 682 }
683#endif 683#endif
684} 684}
685 685
686void CalendarView::confSync() 686void CalendarView::confSync()
687{ 687{
688 static KSyncPrefsDialog* sp = 0; 688 static KSyncPrefsDialog* sp = 0;
689 if ( ! sp ) { 689 if ( ! sp ) {
690 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 690 sp = new KSyncPrefsDialog( this, "syncprefs", true );
691 } 691 }
692 sp->usrReadConfig(); 692 sp->usrReadConfig();
693#ifndef DESKTOP_VERSION 693#ifndef DESKTOP_VERSION
694 sp->showMaximized(); 694 sp->showMaximized();
695#else 695#else
696 sp->show(); 696 sp->show();
697#endif 697#endif
698 sp->exec(); 698 sp->exec();
699 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 699 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
700 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 700 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
701} 701}
702 702
703 703
704//KOPrefs::instance()->mWriteBackFile 704//KOPrefs::instance()->mWriteBackFile
705//KOPrefs::instance()->mWriteBackExistingOnly 705//KOPrefs::instance()->mWriteBackExistingOnly
706 706
707// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 707// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
708// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 708// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
709// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 709// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
710// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 710// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
711// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 711// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
712// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 712// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
713 713
714int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 714int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
715{ 715{
716 716
717 //void setZaurusId(int id); 717 //void setZaurusId(int id);
718 // int zaurusId() const; 718 // int zaurusId() const;
719 // void setZaurusUid(int id); 719 // void setZaurusUid(int id);
720 // int zaurusUid() const; 720 // int zaurusUid() const;
721 // void setZaurusStat(int id); 721 // void setZaurusStat(int id);
722 // int zaurusStat() const; 722 // int zaurusStat() const;
723 // 0 equal 723 // 0 equal
724 // 1 take local 724 // 1 take local
725 // 2 take remote 725 // 2 take remote
726 // 3 cancel 726 // 3 cancel
727 QDateTime lastSync = mLastCalendarSync; 727 QDateTime lastSync = mLastCalendarSync;
728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
729 bool remCh, locCh; 729 bool remCh, locCh;
730 remCh = ( remote->zaurusUid() != local->zaurusUid() ); 730 remCh = ( remote->zaurusUid() != local->zaurusUid() );
731 locCh = ( local->lastModified() > mLastCalendarSync ); 731 locCh = ( local->lastModified() > mLastCalendarSync );
732 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); 732 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() );
733 if ( !remCh && ! locCh ) { 733 if ( !remCh && ! locCh ) {
734 //qDebug("both not changed "); 734 //qDebug("both not changed ");
735 lastSync = local->lastModified().addDays(1); 735 lastSync = local->lastModified().addDays(1);
736 } else { 736 } else {
737 if ( locCh ) { 737 if ( locCh ) {
738 //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() ); 738 //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() );
739 lastSync = local->lastModified().addDays( -1 ); 739 lastSync = local->lastModified().addDays( -1 );
740 if ( !remCh ) 740 if ( !remCh )
741 remote->setLastModified( lastSync.addDays( -1 ) ); 741 remote->setLastModified( lastSync.addDays( -1 ) );
742 } else { 742 } else {
743 //qDebug(" not loc changed "); 743 //qDebug(" not loc changed ");
744 lastSync = local->lastModified().addDays( 1 ); 744 lastSync = local->lastModified().addDays( 1 );
745 if ( remCh ) 745 if ( remCh )
746 remote->setLastModified( lastSync.addDays( 1 ) ); 746 remote->setLastModified( lastSync.addDays( 1 ) );
747 747
748 } 748 }
749 } 749 }
750 full = true; 750 full = true;
751 if ( mode < SYNC_PREF_ASK ) 751 if ( mode < SYNC_PREF_ASK )
752 mode = SYNC_PREF_ASK; 752 mode = SYNC_PREF_ASK;
753 } else { 753 } else {
754 if ( local->lastModified() == remote->lastModified() ) 754 if ( local->lastModified() == remote->lastModified() )
755 if ( local->revision() == remote->revision() ) 755 if ( local->revision() == remote->revision() )
756 return 0; 756 return 0;
757 757
758 } 758 }
759 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 759 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
760 760
761 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); 761 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision());
762 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 762 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
763 //full = true; //debug only 763 //full = true; //debug only
764 if ( full ) { 764 if ( full ) {
765 bool equ = false; 765 bool equ = false;
766 if ( local->type() == "Event" ) { 766 if ( local->type() == "Event" ) {
767 equ = (*((Event*) local) == *((Event*) remote)); 767 equ = (*((Event*) local) == *((Event*) remote));
768 } 768 }
769 else if ( local->type() =="Todo" ) 769 else if ( local->type() =="Todo" )
770 equ = (*((Todo*) local) == (*(Todo*) remote)); 770 equ = (*((Todo*) local) == (*(Todo*) remote));
771 else if ( local->type() =="Journal" ) 771 else if ( local->type() =="Journal" )
772 equ = (*((Journal*) local) == *((Journal*) remote)); 772 equ = (*((Journal*) local) == *((Journal*) remote));
773 if ( equ ) { 773 if ( equ ) {
774 //qDebug("equal "); 774 //qDebug("equal ");
775 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 775 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
776 local->setZaurusUid( remote->zaurusUid() ); 776 local->setZaurusUid( remote->zaurusUid() );
777 } 777 }
778 if ( mode < SYNC_PREF_FORCE_LOCAL ) 778 if ( mode < SYNC_PREF_FORCE_LOCAL )
779 return 0; 779 return 0;
780 780
781 }//else //debug only 781 }//else //debug only
782 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 782 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
783 } 783 }
784 int result; 784 int result;
785 bool localIsNew; 785 bool localIsNew;
786 if ( full && mode < SYNC_PREF_NEWEST ) 786 if ( full && mode < SYNC_PREF_NEWEST )
787 mode = SYNC_PREF_ASK; 787 mode = SYNC_PREF_ASK;
788 788
789 switch( mode ) { 789 switch( mode ) {
790 case SYNC_PREF_LOCAL: 790 case SYNC_PREF_LOCAL:
791 if ( lastSync > remote->lastModified() ) 791 if ( lastSync > remote->lastModified() )
792 return 1; 792 return 1;
793 if ( lastSync > local->lastModified() ) 793 if ( lastSync > local->lastModified() )
794 return 2; 794 return 2;
795 return 1; 795 return 1;
796 break; 796 break;
797 case SYNC_PREF_REMOTE: 797 case SYNC_PREF_REMOTE:
798 if ( lastSync > remote->lastModified() ) 798 if ( lastSync > remote->lastModified() )
799 return 1; 799 return 1;
800 if ( lastSync > local->lastModified() ) 800 if ( lastSync > local->lastModified() )
801 return 2; 801 return 2;
802 return 2; 802 return 2;
803 break; 803 break;
804 case SYNC_PREF_NEWEST: 804 case SYNC_PREF_NEWEST:
805 if ( local->lastModified() > remote->lastModified() ) 805 if ( local->lastModified() > remote->lastModified() )
806 return 1; 806 return 1;
807 else 807 else
808 return 2; 808 return 2;
809 break; 809 break;
810 case SYNC_PREF_ASK: 810 case SYNC_PREF_ASK:
811 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 811 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
812 if ( lastSync > remote->lastModified() ) 812 if ( lastSync > remote->lastModified() )
813 return 1; 813 return 1;
814 if ( lastSync > local->lastModified() ) 814 if ( lastSync > local->lastModified() )
815 return 2; 815 return 2;
816 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 816 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
817 localIsNew = local->lastModified() > remote->lastModified(); 817 localIsNew = local->lastModified() > remote->lastModified();
818 if ( localIsNew ) 818 if ( localIsNew )
819 getEventViewerDialog()->setColorMode( 1 ); 819 getEventViewerDialog()->setColorMode( 1 );
820 else 820 else
821 getEventViewerDialog()->setColorMode( 2 ); 821 getEventViewerDialog()->setColorMode( 2 );
822 getEventViewerDialog()->setIncidence(local); 822 getEventViewerDialog()->setIncidence(local);
823 if ( localIsNew ) 823 if ( localIsNew )
824 getEventViewerDialog()->setColorMode( 2 ); 824 getEventViewerDialog()->setColorMode( 2 );
825 else 825 else
826 getEventViewerDialog()->setColorMode( 1 ); 826 getEventViewerDialog()->setColorMode( 1 );
827 getEventViewerDialog()->addIncidence(remote); 827 getEventViewerDialog()->addIncidence(remote);
828 getEventViewerDialog()->setColorMode( 0 ); 828 getEventViewerDialog()->setColorMode( 0 );
829 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 829 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
830 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 830 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
831 getEventViewerDialog()->showMe(); 831 getEventViewerDialog()->showMe();
832 result = getEventViewerDialog()->executeS( localIsNew ); 832 result = getEventViewerDialog()->executeS( localIsNew );
833 return result; 833 return result;
834 834
835 break; 835 break;
836 case SYNC_PREF_FORCE_LOCAL: 836 case SYNC_PREF_FORCE_LOCAL:
837 return 1; 837 return 1;
838 break; 838 break;
839 case SYNC_PREF_FORCE_REMOTE: 839 case SYNC_PREF_FORCE_REMOTE:
840 return 2; 840 return 2;
841 break; 841 break;
842 842
843 default: 843 default:
844 // SYNC_PREF_TAKE_BOTH not implemented 844 // SYNC_PREF_TAKE_BOTH not implemented
845 break; 845 break;
846 } 846 }
847 return 0; 847 return 0;
848} 848}
849Event* CalendarView::getLastSyncEvent() 849Event* CalendarView::getLastSyncEvent()
850{ 850{
851 Event* lse; 851 Event* lse;
852 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 852 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
853 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 853 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
854 if (!lse) { 854 if (!lse) {
855 lse = new Event(); 855 lse = new Event();
856 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 856 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
857 QString sum = ""; 857 QString sum = "";
858 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 858 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
859 sum = "E: "; 859 sum = "E: ";
860 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 860 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
861 lse->setDtStart( mLastCalendarSync ); 861 lse->setDtStart( mLastCalendarSync );
862 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 862 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
863 lse->setCategories( i18n("SyncEvent") ); 863 lse->setCategories( i18n("SyncEvent") );
864 lse->setReadOnly( true ); 864 lse->setReadOnly( true );
865 mCalendar->addEvent( lse ); 865 mCalendar->addEvent( lse );
866 } 866 }
867 867
868 return lse; 868 return lse;
869 869
870} 870}
871void CalendarView::setupExternSyncProfiles() 871void CalendarView::setupExternSyncProfiles()
872{ 872{
873 Event* lse; 873 Event* lse;
874 mExternLastSyncEvent.clear(); 874 mExternLastSyncEvent.clear();
875 int i; 875 int i;
876 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) { 876 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
877 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] ); 877 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
878 if ( lse ) 878 if ( lse )
879 mExternLastSyncEvent.append( lse ); 879 mExternLastSyncEvent.append( lse );
880 else 880 else
881 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1()); 881 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
882 } 882 }
883 883
884} 884}
885// we check, if the to delete event has a id for a profile 885// we check, if the to delete event has a id for a profile
886// if yes, we set this id in the profile to delete 886// if yes, we set this id in the profile to delete
887void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 887void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
888{ 888{
889 if ( ! lastSync.count() == 0 ) 889 if ( ! lastSync.count() == 0 )
890 return; 890 return;
891 if ( toDelete->type() == "Journal" ) 891 if ( toDelete->type() == "Journal" )
892 return; 892 return;
893 893
894 Event* eve = lastSync.first(); 894 Event* eve = lastSync.first();
895 895
896 while ( eve ) { 896 while ( eve ) {
897 int id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 897 int id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
898 if ( id >= 0 ) { 898 if ( id >= 0 ) {
899 QString des = eve->description(); 899 QString des = eve->description();
900 QString pref = "e"; 900 QString pref = "e";
901 if ( toDelete->type() == "Todo" ) 901 if ( toDelete->type() == "Todo" )
902 pref = "t"; 902 pref = "t";
903 des += pref+ QString::number ( id ) + ","; 903 des += pref+ QString::number ( id ) + ",";
904 eve->setReadOnly( false ); 904 eve->setReadOnly( false );
905 eve->setDescription( des ); 905 eve->setDescription( des );
906 eve->setReadOnly( true ); 906 eve->setReadOnly( true );
907 } 907 }
908 eve = lastSync.next(); 908 eve = lastSync.next();
909 } 909 }
910 910
911} 911}
912void CalendarView::checkExternalId( Incidence * inc )
913{
914 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
915 checkExternSyncEvent( lastSync, inc );
916
917}
912bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 918bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
913{ 919{
914 bool syncOK = true; 920 bool syncOK = true;
915 int addedEvent = 0; 921 int addedEvent = 0;
916 int addedEventR = 0; 922 int addedEventR = 0;
917 int deletedEventR = 0; 923 int deletedEventR = 0;
918 int deletedEventL = 0; 924 int deletedEventL = 0;
919 int changedLocal = 0; 925 int changedLocal = 0;
920 int changedRemote = 0; 926 int changedRemote = 0;
921 //QPtrList<Event> el = local->rawEvents(); 927 //QPtrList<Event> el = local->rawEvents();
922 Event* eventR; 928 Event* eventR;
923 QString uid; 929 QString uid;
924 int take; 930 int take;
925 Event* eventL; 931 Event* eventL;
926 Event* eventRSync; 932 Event* eventRSync;
927 Event* eventLSync; 933 Event* eventLSync;
928 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 934 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
929 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 935 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
930 bool fullDateRange = false; 936 bool fullDateRange = false;
931 mLastCalendarSync = QDateTime::currentDateTime(); 937 mLastCalendarSync = QDateTime::currentDateTime();
932 QDateTime modifiedCalendar = mLastCalendarSync;; 938 QDateTime modifiedCalendar = mLastCalendarSync;;
933 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 939 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
934 if ( eventR ) { 940 if ( eventR ) {
935 eventRSync = (Event*) eventR->clone(); 941 eventRSync = (Event*) eventR->clone();
936 remote->deleteEvent(eventR ); 942 remote->deleteEvent(eventR );
937 943
938 } else { 944 } else {
939 fullDateRange = true; 945 fullDateRange = true;
940 eventRSync = new Event(); 946 eventRSync = new Event();
941 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 947 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
942 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 948 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
943 eventRSync->setDtStart( mLastCalendarSync ); 949 eventRSync->setDtStart( mLastCalendarSync );
944 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 950 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
945 eventRSync->setCategories( i18n("SyncEvent") ); 951 eventRSync->setCategories( i18n("SyncEvent") );
946 } 952 }
947 eventLSync = getLastSyncEvent(); 953 eventLSync = getLastSyncEvent();
948 if ( eventLSync->dtStart() == mLastCalendarSync ) 954 if ( eventLSync->dtStart() == mLastCalendarSync )
949 fullDateRange = true; 955 fullDateRange = true;
950 956
951 if ( ! fullDateRange ) { 957 if ( ! fullDateRange ) {
952 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 958 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
953 959
954 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 960 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
955 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 961 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
956 fullDateRange = true; 962 fullDateRange = true;
957 } 963 }
958 } 964 }
959 if ( fullDateRange ) 965 if ( fullDateRange )
960 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 966 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
961 else 967 else
962 mLastCalendarSync = eventLSync->dtStart(); 968 mLastCalendarSync = eventLSync->dtStart();
963 // for resyncing if own file has changed 969 // for resyncing if own file has changed
964 if ( mCurrentSyncDevice == "deleteaftersync" ) { 970 if ( mCurrentSyncDevice == "deleteaftersync" ) {
965 mLastCalendarSync = loadedFileVersion; 971 mLastCalendarSync = loadedFileVersion;
966 qDebug("setting mLastCalendarSync "); 972 qDebug("setting mLastCalendarSync ");
967 } 973 }
968 //qDebug("*************************** "); 974 //qDebug("*************************** ");
969 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 975 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
970 QPtrList<Incidence> er = remote->rawIncidences(); 976 QPtrList<Incidence> er = remote->rawIncidences();
971 Incidence* inR = er.first(); 977 Incidence* inR = er.first();
972 Incidence* inL; 978 Incidence* inL;
973 QProgressBar bar( er.count(),0 ); 979 QProgressBar bar( er.count(),0 );
974 bar.setCaption (i18n("Syncing - close to abort!") ); 980 bar.setCaption (i18n("Syncing - close to abort!") );
975 981
976 int w = 300; 982 int w = 300;
977 if ( QApplication::desktop()->width() < 320 ) 983 if ( QApplication::desktop()->width() < 320 )
978 w = 220; 984 w = 220;
979 int h = bar.sizeHint().height() ; 985 int h = bar.sizeHint().height() ;
980 int dw = QApplication::desktop()->width(); 986 int dw = QApplication::desktop()->width();
981 int dh = QApplication::desktop()->height(); 987 int dh = QApplication::desktop()->height();
982 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 988 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
983 bar.show(); 989 bar.show();
984 int modulo = (er.count()/10)+1; 990 int modulo = (er.count()/10)+1;
985 int incCounter = 0; 991 int incCounter = 0;
986 while ( inR ) { 992 while ( inR ) {
987 if ( ! bar.isVisible() ) 993 if ( ! bar.isVisible() )
988 return false; 994 return false;
989 if ( incCounter % modulo == 0 ) 995 if ( incCounter % modulo == 0 )
990 bar.setProgress( incCounter ); 996 bar.setProgress( incCounter );
991 ++incCounter; 997 ++incCounter;
992 uid = inR->uid(); 998 uid = inR->uid();
993 bool skipIncidence = false; 999 bool skipIncidence = false;
994 if ( uid.left(15) == QString("last-syncEvent-") ) 1000 if ( uid.left(15) == QString("last-syncEvent-") )
995 skipIncidence = true; 1001 skipIncidence = true;
996 1002
997 qApp->processEvents(); 1003 qApp->processEvents();
998 if ( !skipIncidence ) { 1004 if ( !skipIncidence ) {
999 inL = local->incidence( uid ); 1005 inL = local->incidence( uid );
1000 if ( inL ) { // maybe conflict - same uid in both calendars 1006 if ( inL ) { // maybe conflict - same uid in both calendars
1001 int maxrev = inL->revision(); 1007 int maxrev = inL->revision();
1002 if ( maxrev < inR->revision() ) 1008 if ( maxrev < inR->revision() )
1003 maxrev = inR->revision(); 1009 maxrev = inR->revision();
1004 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1010 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1005 //qDebug("take %d %s ", take, inL->summary().latin1()); 1011 //qDebug("take %d %s ", take, inL->summary().latin1());
1006 if ( take == 3 ) 1012 if ( take == 3 )
1007 return false; 1013 return false;
1008 if ( take == 1 ) {// take local 1014 if ( take == 1 ) {// take local
1009 inL->setZaurusUid( inR->zaurusUid() ); 1015 inL->setZaurusUid( inR->zaurusUid() );
1010 remote->deleteIncidence( inR ); 1016 remote->deleteIncidence( inR );
1011 if ( inL->revision() < maxrev ) 1017 if ( inL->revision() < maxrev )
1012 inL->setRevision( maxrev ); 1018 inL->setRevision( maxrev );
1013 remote->addIncidence( inL->clone() ); 1019 remote->addIncidence( inL->clone() );
1014 ++changedRemote; 1020 ++changedRemote;
1015 } else { 1021 } else {
1016 if ( inR->revision() < maxrev ) 1022 if ( inR->revision() < maxrev )
1017 inR->setRevision( maxrev ); 1023 inR->setRevision( maxrev );
1018 local->deleteIncidence( inL ); 1024 local->deleteIncidence( inL );
1019 local->addIncidence( inR->clone() ); 1025 local->addIncidence( inR->clone() );
1020 ++changedLocal; 1026 ++changedLocal;
1021 } 1027 }
1022 } 1028 }
1023 } else { // no conflict 1029 } else { // no conflict
1024 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1030 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1025 QString des = eventLSync->description(); 1031 QString des = eventLSync->description();
1026 QString pref = "e"; 1032 QString pref = "e";
1027 if ( inR->type() == "Todo" ) 1033 if ( inR->type() == "Todo" )
1028 pref = "t"; 1034 pref = "t";
1029 if ( des.find(pref+QString::number( inR->zaurusId() ) +"," ) >= 0 && mode != 5) { // delete it 1035 if ( des.find(pref+QString::number( inR->getID(mCurrentSyncDevice) ) +"," ) >= 0 && mode != 5) { // delete it
1030 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1036 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1031 //remote->deleteIncidence( inR ); 1037 //remote->deleteIncidence( inR );
1032 ++deletedEventR; 1038 ++deletedEventR;
1033 } else { 1039 } else {
1034 inR->setLastModified( modifiedCalendar ); 1040 inR->setLastModified( modifiedCalendar );
1035 local->addIncidence( inR->clone() ); 1041 local->addIncidence( inR->clone() );
1036 ++addedEvent; 1042 ++addedEvent;
1037 } 1043 }
1038 } else { 1044 } else {
1039 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1045 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1040 inR->setLastModified( modifiedCalendar ); 1046 inR->setLastModified( modifiedCalendar );
1041 local->addIncidence( inR->clone() ); 1047 local->addIncidence( inR->clone() );
1042 ++addedEvent; 1048 ++addedEvent;
1043 } else { 1049 } else {
1044 checkExternSyncEvent(eventRSyncSharp, inR); 1050 checkExternSyncEvent(eventRSyncSharp, inR);
1045 remote->deleteIncidence( inR ); 1051 remote->deleteIncidence( inR );
1046 ++deletedEventR; 1052 ++deletedEventR;
1047 } 1053 }
1048 } 1054 }
1049 } 1055 }
1050 } 1056 }
1051 inR = er.next(); 1057 inR = er.next();
1052 } 1058 }
1053 QPtrList<Incidence> el = local->rawIncidences(); 1059 QPtrList<Incidence> el = local->rawIncidences();
1054 inL = el.first(); 1060 inL = el.first();
1055 modulo = (el.count()/10)+1; 1061 modulo = (el.count()/10)+1;
1056 bar.setCaption (i18n("Add / remove events") ); 1062 bar.setCaption (i18n("Add / remove events") );
1057 bar.setTotalSteps ( el.count() ) ; 1063 bar.setTotalSteps ( el.count() ) ;
1058 bar.show(); 1064 bar.show();
1059 incCounter = 0; 1065 incCounter = 0;
1060 1066
1061 while ( inL ) { 1067 while ( inL ) {
1062 1068
1063 qApp->processEvents(); 1069 qApp->processEvents();
1064 if ( ! bar.isVisible() ) 1070 if ( ! bar.isVisible() )
1065 return false; 1071 return false;
1066 if ( incCounter % modulo == 0 ) 1072 if ( incCounter % modulo == 0 )
1067 bar.setProgress( incCounter ); 1073 bar.setProgress( incCounter );
1068 ++incCounter; 1074 ++incCounter;
1069 uid = inL->uid(); 1075 uid = inL->uid();
1070 bool skipIncidence = false; 1076 bool skipIncidence = false;
1071 if ( uid.left(15) == QString("last-syncEvent-") ) 1077 if ( uid.left(15) == QString("last-syncEvent-") )
1072 skipIncidence = true; 1078 skipIncidence = true;
1073 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1079 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1074 skipIncidence = true; 1080 skipIncidence = true;
1075 if ( !skipIncidence ) { 1081 if ( !skipIncidence ) {
1076 inR = remote->incidence( uid ); 1082 inR = remote->incidence( uid );
1077 if ( ! inR ) { 1083 if ( ! inR ) {
1078 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1084 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1079 if ( inL->zaurusId() >= 0 && mode != 4 ) { 1085 if ( inL->getID(mCurrentSyncDevice) >= 0 && mode != 4 ) {
1080 local->deleteIncidence( inL ); 1086 local->deleteIncidence( inL );
1081 ++deletedEventL; 1087 ++deletedEventL;
1082 } else { 1088 } else {
1083 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1089 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1084 inL->setZaurusId( -1 ); 1090 inL->setID(mCurrentSyncDevice, -1 );
1085 ++addedEventR; 1091 ++addedEventR;
1086 inL->setLastModified( modifiedCalendar ); 1092 inL->setLastModified( modifiedCalendar );
1087 remote->addIncidence( inL->clone() ); 1093 remote->addIncidence( inL->clone() );
1088 } 1094 }
1089 } 1095 }
1090 } else { 1096 } else {
1091 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1097 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1092 checkExternSyncEvent(eventLSyncSharp, inL); 1098 checkExternSyncEvent(eventLSyncSharp, inL);
1093 local->deleteIncidence( inL ); 1099 local->deleteIncidence( inL );
1094 ++deletedEventL; 1100 ++deletedEventL;
1095 } else { 1101 } else {
1096 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1102 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1097 ++addedEventR; 1103 ++addedEventR;
1098 inL->setLastModified( modifiedCalendar ); 1104 inL->setLastModified( modifiedCalendar );
1099 remote->addIncidence( inL->clone() ); 1105 remote->addIncidence( inL->clone() );
1100 } 1106 }
1101 } 1107 }
1102 } 1108 }
1103 } 1109 }
1104 } 1110 }
1105 inL = el.next(); 1111 inL = el.next();
1106 } 1112 }
1107 1113
1108 bar.hide(); 1114 bar.hide();
1109 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1115 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1110 eventLSync->setReadOnly( false ); 1116 eventLSync->setReadOnly( false );
1111 eventLSync->setDtStart( mLastCalendarSync ); 1117 eventLSync->setDtStart( mLastCalendarSync );
1112 eventRSync->setDtStart( mLastCalendarSync ); 1118 eventRSync->setDtStart( mLastCalendarSync );
1113 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1119 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1114 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1120 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1115 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1121 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1116 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1122 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1117 eventLSync->setReadOnly( true ); 1123 eventLSync->setReadOnly( true );
1118 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1124 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1119 remote->addEvent( eventRSync ); 1125 remote->addEvent( eventRSync );
1120 QString mes; 1126 QString mes;
1121 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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR ); 1127 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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR );
1122 if ( KOPrefs::instance()->mShowSyncSummary ) { 1128 if ( KOPrefs::instance()->mShowSyncSummary ) {
1123 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1129 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1124 } 1130 }
1125 qDebug( mes ); 1131 qDebug( mes );
1126 mCalendar->checkAlarmForIncidence( 0, true ); 1132 mCalendar->checkAlarmForIncidence( 0, true );
1127 return syncOK; 1133 return syncOK;
1128} 1134}
1129 1135
1130void CalendarView::setSyncDevice( QString s ) 1136void CalendarView::setSyncDevice( QString s )
1131{ 1137{
1132 mCurrentSyncDevice= s; 1138 mCurrentSyncDevice= s;
1133} 1139}
1134void CalendarView::setSyncName( QString s ) 1140void CalendarView::setSyncName( QString s )
1135{ 1141{
1136 mCurrentSyncName= s; 1142 mCurrentSyncName= s;
1137} 1143}
1138bool CalendarView::syncCalendar(QString filename, int mode) 1144bool CalendarView::syncCalendar(QString filename, int mode)
1139{ 1145{
1140 mGlobalSyncMode = SYNC_MODE_NORMAL; 1146 mGlobalSyncMode = SYNC_MODE_NORMAL;
1141 CalendarLocal* calendar = new CalendarLocal(); 1147 CalendarLocal* calendar = new CalendarLocal();
1142 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1148 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1143 FileStorage* storage = new FileStorage( calendar ); 1149 FileStorage* storage = new FileStorage( calendar );
1144 bool syncOK = false; 1150 bool syncOK = false;
1145 storage->setFileName( filename ); 1151 storage->setFileName( filename );
1146 // qDebug("loading ... "); 1152 // qDebug("loading ... ");
1147 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1153 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1148 getEventViewerDialog()->setSyncMode( true ); 1154 getEventViewerDialog()->setSyncMode( true );
1149 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1155 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1150 getEventViewerDialog()->setSyncMode( false ); 1156 getEventViewerDialog()->setSyncMode( false );
1151 if ( syncOK ) { 1157 if ( syncOK ) {
1152 if ( KOPrefs::instance()->mWriteBackFile ) 1158 if ( KOPrefs::instance()->mWriteBackFile )
1153 { 1159 {
1154 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1160 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1155 storage->save(); 1161 storage->save();
1156 } 1162 }
1157 } 1163 }
1158 setModified( true ); 1164 setModified( true );
1159 } 1165 }
1160 delete storage; 1166 delete storage;
1161 delete calendar; 1167 delete calendar;
1162 if ( syncOK ) 1168 if ( syncOK )
1163 updateView(); 1169 updateView();
1164 return syncOK; 1170 return syncOK;
1165} 1171}
1166void CalendarView::syncSharp() 1172void CalendarView::syncSharp()
1167{ 1173{
1168#ifndef DESKTOP_VERSION 1174#ifndef DESKTOP_VERSION
1169 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1175 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1170 //mCurrentSyncDevice = "sharp-DTM"; 1176 //mCurrentSyncDevice = "sharp-DTM";
1171 if ( KOPrefs::instance()->mAskForPreferences ) 1177 if ( KOPrefs::instance()->mAskForPreferences )
1172 edit_sync_options(); 1178 edit_sync_options();
1173 qApp->processEvents(); 1179 qApp->processEvents();
1174 CalendarLocal* calendar = new CalendarLocal(); 1180 CalendarLocal* calendar = new CalendarLocal();
1175 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1181 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1176 bool syncOK = false; 1182 bool syncOK = false;
1177 SharpFormat sharpFormat; 1183 SharpFormat sharpFormat;
1178 if ( sharpFormat.load( calendar, mCalendar ) ) { 1184 if ( sharpFormat.load( calendar, mCalendar ) ) {
1179 getEventViewerDialog()->setSyncMode( true ); 1185 getEventViewerDialog()->setSyncMode( true );
1180 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1186 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1181 getEventViewerDialog()->setSyncMode( false ); 1187 getEventViewerDialog()->setSyncMode( false );
1182 qApp->processEvents(); 1188 qApp->processEvents();
1183 if ( syncOK ) { 1189 if ( syncOK ) {
1184 if ( KOPrefs::instance()->mWriteBackFile ) 1190 if ( KOPrefs::instance()->mWriteBackFile )
1185 { 1191 {
1186 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1192 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1187 Incidence* inc = iL.first(); 1193 Incidence* inc = iL.first();
1188 /* obsolete 1194 /* obsolete
1189 while ( inc ) { 1195 while ( inc ) {
1190 inc->setZaurusStat( inc->revision () ); 1196 inc->setZaurusStat( inc->revision () );
1191 inc = iL.next(); 1197 inc = iL.next();
1192 } 1198 }
1193 */ 1199 */
1194 // pending: clean last sync event description 1200 // pending: clean last sync event description
1195 sharpFormat.save(calendar); 1201 sharpFormat.save(calendar);
1196 iL = calendar->rawIncidences(); 1202 iL = calendar->rawIncidences();
1197 inc = iL.first(); 1203 inc = iL.first();
1198 Incidence* loc; 1204 Incidence* loc;
1199 while ( inc ) { 1205 while ( inc ) {
1200 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1206 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1201 loc = mCalendar->incidence(inc->uid() ); 1207 loc = mCalendar->incidence(inc->uid() );
1202 if ( loc ) { 1208 if ( loc ) {
1203 loc->setZaurusId( inc->zaurusId() ); 1209 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1204 loc->setZaurusUid( inc->zaurusUid() ); 1210 loc->setZaurusUid( inc->zaurusUid() );
1205 } 1211 }
1206 } 1212 }
1207 inc = iL.next(); 1213 inc = iL.next();
1208 } 1214 }
1209 Incidence* lse = getLastSyncEvent(); 1215 Incidence* lse = getLastSyncEvent();
1210 if ( lse ) { 1216 if ( lse ) {
1211 lse->setReadOnly( false ); 1217 lse->setReadOnly( false );
1212 lse->setDescription( "" ); 1218 lse->setDescription( "" );
1213 lse->setReadOnly( true ); 1219 lse->setReadOnly( true );
1214 } 1220 }
1215 } 1221 }
1216 } 1222 }
1217 setModified( true ); 1223 setModified( true );
1218 } else { 1224 } else {
1219 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1225 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1220 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1226 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1221 question, i18n("Ok")) ; 1227 question, i18n("Ok")) ;
1222 1228
1223 } 1229 }
1224 delete calendar; 1230 delete calendar;
1225 updateView(); 1231 updateView();
1226 return ;//syncOK; 1232 return ;//syncOK;
1227#endif 1233#endif
1228} 1234}
1229 1235
1230 1236
1231#include <kabc/stdaddressbook.h> 1237#include <kabc/stdaddressbook.h>
1232bool CalendarView::importBday() 1238bool CalendarView::importBday()
1233{ 1239{
1234 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1240 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1235 KABC::AddressBook::Iterator it; 1241 KABC::AddressBook::Iterator it;
1236 int count = 0; 1242 int count = 0;
1237 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1243 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1238 ++count; 1244 ++count;
1239 } 1245 }
1240 QProgressBar bar(count,0 ); 1246 QProgressBar bar(count,0 );
1241 int w = 300; 1247 int w = 300;
1242 if ( QApplication::desktop()->width() < 320 ) 1248 if ( QApplication::desktop()->width() < 320 )
1243 w = 220; 1249 w = 220;
1244 int h = bar.sizeHint().height() ; 1250 int h = bar.sizeHint().height() ;
1245 int dw = QApplication::desktop()->width(); 1251 int dw = QApplication::desktop()->width();
1246 int dh = QApplication::desktop()->height(); 1252 int dh = QApplication::desktop()->height();
1247 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1253 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1248 bar.show(); 1254 bar.show();
1249 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1255 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1250 qApp->processEvents(); 1256 qApp->processEvents();
1251 count = 0; 1257 count = 0;
1252 int addCount = 0; 1258 int addCount = 0;
1253 KCal::Attendee* a = 0; 1259 KCal::Attendee* a = 0;
1254 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1260 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1255 if ( ! bar.isVisible() ) 1261 if ( ! bar.isVisible() )
1256 return false; 1262 return false;
1257 bar.setProgress( count++ ); 1263 bar.setProgress( count++ );
1258 qApp->processEvents(); 1264 qApp->processEvents();
1259 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1265 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1260 if ( (*it).birthday().date().isValid() ){ 1266 if ( (*it).birthday().date().isValid() ){
1261 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1267 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1262 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1268 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1263 ++addCount; 1269 ++addCount;
1264 } 1270 }
1265 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1271 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1266 if ( anni.isValid() ){ 1272 if ( anni.isValid() ){
1267 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1273 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1268 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1274 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1269 ++addCount; 1275 ++addCount;
1270 } 1276 }
1271 } 1277 }
1272 updateView(); 1278 updateView();
1273 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1279 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1274 return true; 1280 return true;
1275} 1281}
1276 1282
1277bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1283bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1278{ 1284{
1279 //qDebug("addAnni "); 1285 //qDebug("addAnni ");
1280 Event * ev = new Event(); 1286 Event * ev = new Event();
1281 if ( a ) { 1287 if ( a ) {
1282 ev->addAttendee( a ); 1288 ev->addAttendee( a );
1283 } 1289 }
1284 QString kind; 1290 QString kind;
1285 if ( birthday ) 1291 if ( birthday )
1286 kind = i18n( "Birthday" ); 1292 kind = i18n( "Birthday" );
1287 else 1293 else
1288 kind = i18n( "Anniversary" ); 1294 kind = i18n( "Anniversary" );
1289 ev->setSummary( name + " - " + kind ); 1295 ev->setSummary( name + " - " + kind );
1290 ev->setOrganizer( "nobody@nowhere" ); 1296 ev->setOrganizer( "nobody@nowhere" );
1291 ev->setCategories( kind ); 1297 ev->setCategories( kind );
1292 ev->setDtStart( QDateTime(date) ); 1298 ev->setDtStart( QDateTime(date) );
1293 ev->setDtEnd( QDateTime(date) ); 1299 ev->setDtEnd( QDateTime(date) );
1294 ev->setFloats( true ); 1300 ev->setFloats( true );
1295 Recurrence * rec = ev->recurrence(); 1301 Recurrence * rec = ev->recurrence();
1296 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1302 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1297 rec->addYearlyNum( date.month() ); 1303 rec->addYearlyNum( date.month() );
1298 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1304 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1299 delete ev; 1305 delete ev;
1300 return false; 1306 return false;
1301 } 1307 }
1302 return true; 1308 return true;
1303 1309
1304} 1310}
1305bool CalendarView::importQtopia( const QString &categories, 1311bool CalendarView::importQtopia( const QString &categories,
1306 const QString &datebook, 1312 const QString &datebook,
1307 const QString &todolist ) 1313 const QString &todolist )
1308{ 1314{
1309 1315
1310 QtopiaFormat qtopiaFormat; 1316 QtopiaFormat qtopiaFormat;
1311 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1317 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1312 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1318 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1313 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1319 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1314 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1320 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1315 1321
1316 updateView(); 1322 updateView();
1317 return true; 1323 return true;
1318 1324
1319#if 0 1325#if 0
1320 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1326 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1321 mCurrentSyncDevice = "qtopia-XML"; 1327 mCurrentSyncDevice = "qtopia-XML";
1322 if ( KOPrefs::instance()->mAskForPreferences ) 1328 if ( KOPrefs::instance()->mAskForPreferences )
1323 edit_sync_options(); 1329 edit_sync_options();
1324 qApp->processEvents(); 1330 qApp->processEvents();
1325 CalendarLocal* calendar = new CalendarLocal(); 1331 CalendarLocal* calendar = new CalendarLocal();
1326 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1332 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1327 bool syncOK = false; 1333 bool syncOK = false;
1328 QtopiaFormat qtopiaFormat; 1334 QtopiaFormat qtopiaFormat;
1329 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1335 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1330 bool loadOk = true; 1336 bool loadOk = true;
1331 if ( !categories.isEmpty() ) 1337 if ( !categories.isEmpty() )
1332 loadOk = qtopiaFormat.load( calendar, categories ); 1338 loadOk = qtopiaFormat.load( calendar, categories );
1333 if ( loadOk && !datebook.isEmpty() ) 1339 if ( loadOk && !datebook.isEmpty() )
1334 loadOk = qtopiaFormat.load( calendar, datebook ); 1340 loadOk = qtopiaFormat.load( calendar, datebook );
1335 if ( loadOk && !todolist.isEmpty() ) 1341 if ( loadOk && !todolist.isEmpty() )
1336 loadOk = qtopiaFormat.load( calendar, todolist ); 1342 loadOk = qtopiaFormat.load( calendar, todolist );
1337 1343
1338 if ( loadOk ) { 1344 if ( loadOk ) {
1339 getEventViewerDialog()->setSyncMode( true ); 1345 getEventViewerDialog()->setSyncMode( true );
1340 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1346 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1341 getEventViewerDialog()->setSyncMode( false ); 1347 getEventViewerDialog()->setSyncMode( false );
1342 qApp->processEvents(); 1348 qApp->processEvents();
1343 if ( syncOK ) { 1349 if ( syncOK ) {
1344 if ( KOPrefs::instance()->mWriteBackFile ) 1350 if ( KOPrefs::instance()->mWriteBackFile )
1345 { 1351 {
1346 // write back XML file 1352 // write back XML file
1347 1353
1348 } 1354 }
1349 setModified( true ); 1355 setModified( true );
1350 } 1356 }
1351 } else { 1357 } else {
1352 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1358 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1353 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1359 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1354 question, i18n("Ok")) ; 1360 question, i18n("Ok")) ;
1355 } 1361 }
1356 delete calendar; 1362 delete calendar;
1357 updateView(); 1363 updateView();
1358 return syncOK; 1364 return syncOK;
1359 1365
1360 1366
1361#endif 1367#endif
1362 1368
1363} 1369}
1364 1370
1365void CalendarView::setSyncEventsReadOnly() 1371void CalendarView::setSyncEventsReadOnly()
1366{ 1372{
1367 Event * ev; 1373 Event * ev;
1368 QPtrList<Event> eL = mCalendar->rawEvents(); 1374 QPtrList<Event> eL = mCalendar->rawEvents();
1369 ev = eL.first(); 1375 ev = eL.first();
1370 while ( ev ) { 1376 while ( ev ) {
1371 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1377 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1372 ev->setReadOnly( true ); 1378 ev->setReadOnly( true );
1373 ev = eL.next(); 1379 ev = eL.next();
1374 } 1380 }
1375} 1381}
1376bool CalendarView::openCalendar(QString filename, bool merge) 1382bool CalendarView::openCalendar(QString filename, bool merge)
1377{ 1383{
1378 1384
1379 if (filename.isEmpty()) { 1385 if (filename.isEmpty()) {
1380 return false; 1386 return false;
1381 } 1387 }
1382 1388
1383 if (!QFile::exists(filename)) { 1389 if (!QFile::exists(filename)) {
1384 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1390 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1385 return false; 1391 return false;
1386 } 1392 }
1387 1393
1388 globalFlagBlockAgenda = 1; 1394 globalFlagBlockAgenda = 1;
1389 if (!merge) mCalendar->close(); 1395 if (!merge) mCalendar->close();
1390 1396
1391 mStorage->setFileName( filename ); 1397 mStorage->setFileName( filename );
1392 1398
1393 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1399 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1394 if ( merge ) ;//setModified( true ); 1400 if ( merge ) ;//setModified( true );
1395 else { 1401 else {
1396 //setModified( true ); 1402 //setModified( true );
1397 mViewManager->setDocumentId( filename ); 1403 mViewManager->setDocumentId( filename );
1398 mDialogManager->setDocumentId( filename ); 1404 mDialogManager->setDocumentId( filename );
1399 mTodoList->setDocumentId( filename ); 1405 mTodoList->setDocumentId( filename );
1400 } 1406 }
1401 globalFlagBlockAgenda = 2; 1407 globalFlagBlockAgenda = 2;
1402 // if ( getLastSyncEvent() ) 1408 // if ( getLastSyncEvent() )
1403 // getLastSyncEvent()->setReadOnly( true ); 1409 // getLastSyncEvent()->setReadOnly( true );
1404 mCalendar->reInitAlarmSettings(); 1410 mCalendar->reInitAlarmSettings();
1405 setSyncEventsReadOnly(); 1411 setSyncEventsReadOnly();
1406 updateUnmanagedViews(); 1412 updateUnmanagedViews();
1407 updateView(); 1413 updateView();
1408 if ( filename != MainWindow::defaultFileName() ) 1414 if ( filename != MainWindow::defaultFileName() )
1409 saveCalendar( MainWindow::defaultFileName() ); 1415 saveCalendar( MainWindow::defaultFileName() );
1410 loadedFileVersion = QDateTime::currentDateTime(); 1416 loadedFileVersion = QDateTime::currentDateTime();
1411 return true; 1417 return true;
1412 } else { 1418 } else {
1413 // while failing to load, the calendar object could 1419 // while failing to load, the calendar object could
1414 // have become partially populated. Clear it out. 1420 // have become partially populated. Clear it out.
1415 if ( !merge ) mCalendar->close(); 1421 if ( !merge ) mCalendar->close();
1416 1422
1417 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1423 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1418 1424
1419 globalFlagBlockAgenda = 2; 1425 globalFlagBlockAgenda = 2;
1420 updateView(); 1426 updateView();
1421 } 1427 }
1422 return false; 1428 return false;
1423} 1429}
1424void CalendarView::setLoadedFileVersion(QDateTime dt) 1430void CalendarView::setLoadedFileVersion(QDateTime dt)
1425{ 1431{
1426 loadedFileVersion = dt; 1432 loadedFileVersion = dt;
1427} 1433}
1428bool CalendarView::checkFileChanged(QString fn) 1434bool CalendarView::checkFileChanged(QString fn)
1429{ 1435{
1430 QFileInfo finf ( fn ); 1436 QFileInfo finf ( fn );
1431 if ( !finf.exists() ) 1437 if ( !finf.exists() )
1432 return true; 1438 return true;
1433 QDateTime dt = finf.lastModified (); 1439 QDateTime dt = finf.lastModified ();
1434 if ( dt <= loadedFileVersion ) 1440 if ( dt <= loadedFileVersion )
1435 return false; 1441 return false;
1436 return true; 1442 return true;
1437 1443
1438} 1444}
1439bool CalendarView::checkFileVersion(QString fn) 1445bool CalendarView::checkFileVersion(QString fn)
1440{ 1446{
1441 QFileInfo finf ( fn ); 1447 QFileInfo finf ( fn );
1442 if ( !finf.exists() ) 1448 if ( !finf.exists() )
1443 return true; 1449 return true;
1444 QDateTime dt = finf.lastModified (); 1450 QDateTime dt = finf.lastModified ();
1445 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1451 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1446 //qDebug("file on disk version %s",dt.toString().latin1()); 1452 //qDebug("file on disk version %s",dt.toString().latin1());
1447 if ( dt <= loadedFileVersion ) 1453 if ( dt <= loadedFileVersion )
1448 return true; 1454 return true;
1449 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) , 1455 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) ,
1450 i18n("KO/Pi Warning"),i18n("Overwrite"), 1456 i18n("KO/Pi Warning"),i18n("Overwrite"),
1451 i18n("Sync+save")); 1457 i18n("Sync+save"));
1452 1458
1453 if ( km == KMessageBox::Cancel ) 1459 if ( km == KMessageBox::Cancel )
1454 return false; 1460 return false;
1455 if ( km == KMessageBox::Yes ) 1461 if ( km == KMessageBox::Yes )
1456 return true; 1462 return true;
1457 1463
1458 setSyncDevice("deleteaftersync" ); 1464 setSyncDevice("deleteaftersync" );
1459 KOPrefs::instance()->mAskForPreferences = true; 1465 KOPrefs::instance()->mAskForPreferences = true;
1460 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1466 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1461 KOPrefs::instance()->mWriteBackFile = false; 1467 KOPrefs::instance()->mWriteBackFile = false;
1462 KOPrefs::instance()->mWriteBackExistingOnly = false; 1468 KOPrefs::instance()->mWriteBackExistingOnly = false;
1463 KOPrefs::instance()->mShowSyncSummary = false; 1469 KOPrefs::instance()->mShowSyncSummary = false;
1464 syncCalendar( fn, 3 ); 1470 syncCalendar( fn, 3 );
1465 Event * e = getLastSyncEvent(); 1471 Event * e = getLastSyncEvent();
1466 mCalendar->deleteEvent ( e ); 1472 mCalendar->deleteEvent ( e );
1467 updateView(); 1473 updateView();
1468 return true; 1474 return true;
1469} 1475}
1470 1476
1471bool CalendarView::saveCalendar( QString filename ) 1477bool CalendarView::saveCalendar( QString filename )
1472{ 1478{
1473 1479
1474 // Store back all unsaved data into calendar object 1480 // Store back all unsaved data into calendar object
1475 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1481 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1476 if ( mViewManager->currentView() ) 1482 if ( mViewManager->currentView() )
1477 mViewManager->currentView()->flushView(); 1483 mViewManager->currentView()->flushView();
1478 1484
1479 //mStorage->setFileName( filename ); 1485 //mStorage->setFileName( filename );
1480 1486
1481 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1487 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1482 mStorage->setFileName( filename ); 1488 mStorage->setFileName( filename );
1483 bool success; 1489 bool success;
1484 success = mStorage->save(); 1490 success = mStorage->save();
1485 if ( !success ) { 1491 if ( !success ) {
1486 return false; 1492 return false;
1487 } 1493 }
1488 1494
1489 return true; 1495 return true;
1490} 1496}
1491 1497
1492void CalendarView::closeCalendar() 1498void CalendarView::closeCalendar()
1493{ 1499{
1494 1500
1495 // child windows no longer valid 1501 // child windows no longer valid
1496 emit closingDown(); 1502 emit closingDown();
1497 1503
1498 mCalendar->close(); 1504 mCalendar->close();
1499 setModified(false); 1505 setModified(false);
1500 updateView(); 1506 updateView();
1501} 1507}
1502 1508
1503void CalendarView::archiveCalendar() 1509void CalendarView::archiveCalendar()
1504{ 1510{
1505 mDialogManager->showArchiveDialog(); 1511 mDialogManager->showArchiveDialog();
1506} 1512}
1507 1513
1508 1514
1509void CalendarView::readSettings() 1515void CalendarView::readSettings()
1510{ 1516{
1511 1517
1512 1518
1513 // mViewManager->showAgendaView(); 1519 // mViewManager->showAgendaView();
1514 QString str; 1520 QString str;
1515 //qDebug("CalendarView::readSettings() "); 1521 //qDebug("CalendarView::readSettings() ");
1516 // read settings from the KConfig, supplying reasonable 1522 // read settings from the KConfig, supplying reasonable
1517 // defaults where none are to be found 1523 // defaults where none are to be found
1518 KConfig *config = KOGlobals::config(); 1524 KConfig *config = KOGlobals::config();
1519#ifndef KORG_NOSPLITTER 1525#ifndef KORG_NOSPLITTER
1520 config->setGroup("KOrganizer Geometry"); 1526 config->setGroup("KOrganizer Geometry");
1521 1527
1522 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1528 QValueList<int> sizes = config->readIntListEntry("Separator1");
1523 if (sizes.count() != 2) { 1529 if (sizes.count() != 2) {
1524 sizes << mDateNavigator->minimumSizeHint().width(); 1530 sizes << mDateNavigator->minimumSizeHint().width();
1525 sizes << 300; 1531 sizes << 300;
1526 } 1532 }
1527 mPanner->setSizes(sizes); 1533 mPanner->setSizes(sizes);
1528 1534
1529 sizes = config->readIntListEntry("Separator2"); 1535 sizes = config->readIntListEntry("Separator2");
1530 if ( ( mResourceView && sizes.count() == 4 ) || 1536 if ( ( mResourceView && sizes.count() == 4 ) ||
1531 ( !mResourceView && sizes.count() == 3 ) ) { 1537 ( !mResourceView && sizes.count() == 3 ) ) {
1532 mLeftSplitter->setSizes(sizes); 1538 mLeftSplitter->setSizes(sizes);
1533 } 1539 }
1534#endif 1540#endif
1535 globalFlagBlockAgenda = 1; 1541 globalFlagBlockAgenda = 1;
1536 mViewManager->showAgendaView(); 1542 mViewManager->showAgendaView();
1537 //mViewManager->readSettings( config ); 1543 //mViewManager->readSettings( config );
1538 mTodoList->restoreLayout(config,QString("Todo Layout")); 1544 mTodoList->restoreLayout(config,QString("Todo Layout"));
1539 readFilterSettings(config); 1545 readFilterSettings(config);
1540 config->setGroup( "Views" ); 1546 config->setGroup( "Views" );
1541 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1547 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1542 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1548 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1543 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1549 else if ( dateCount == 7 ) mNavigator->selectWeek();
1544 else mNavigator->selectDates( dateCount ); 1550 else mNavigator->selectDates( dateCount );
1545 // mViewManager->readSettings( config ); 1551 // mViewManager->readSettings( config );
1546 updateConfig(); 1552 updateConfig();
1547 globalFlagBlockAgenda = 2; 1553 globalFlagBlockAgenda = 2;
1548 mViewManager->readSettings( config ); 1554 mViewManager->readSettings( config );
1549#ifdef DESKTOP_VERSION 1555#ifdef DESKTOP_VERSION
1550 config->setGroup("WidgetLayout"); 1556 config->setGroup("WidgetLayout");
1551 QStringList list; 1557 QStringList list;
1552 list = config->readListEntry("MainLayout"); 1558 list = config->readListEntry("MainLayout");
1553 int x,y,w,h; 1559 int x,y,w,h;
1554 if ( ! list.isEmpty() ) { 1560 if ( ! list.isEmpty() ) {
1555 x = list[0].toInt(); 1561 x = list[0].toInt();
1556 y = list[1].toInt(); 1562 y = list[1].toInt();
1557 w = list[2].toInt(); 1563 w = list[2].toInt();
1558 h = list[3].toInt(); 1564 h = list[3].toInt();
1559 topLevelWidget()->setGeometry(x,y,w,h); 1565 topLevelWidget()->setGeometry(x,y,w,h);
1560 1566
1561 } else { 1567 } else {
1562 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1568 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1563 } 1569 }
1564 list = config->readListEntry("EditEventLayout"); 1570 list = config->readListEntry("EditEventLayout");
1565 if ( ! list.isEmpty() ) { 1571 if ( ! list.isEmpty() ) {
1566 x = list[0].toInt(); 1572 x = list[0].toInt();
1567 y = list[1].toInt(); 1573 y = list[1].toInt();
1568 w = list[2].toInt(); 1574 w = list[2].toInt();
1569 h = list[3].toInt(); 1575 h = list[3].toInt();
1570 mEventEditor->setGeometry(x,y,w,h); 1576 mEventEditor->setGeometry(x,y,w,h);
1571 1577
1572 } 1578 }
1573 list = config->readListEntry("EditTodoLayout"); 1579 list = config->readListEntry("EditTodoLayout");
1574 if ( ! list.isEmpty() ) { 1580 if ( ! list.isEmpty() ) {
1575 x = list[0].toInt(); 1581 x = list[0].toInt();
1576 y = list[1].toInt(); 1582 y = list[1].toInt();
1577 w = list[2].toInt(); 1583 w = list[2].toInt();
1578 h = list[3].toInt(); 1584 h = list[3].toInt();
1579 mTodoEditor->setGeometry(x,y,w,h); 1585 mTodoEditor->setGeometry(x,y,w,h);
1580 1586
1581 } 1587 }
1582 list = config->readListEntry("ViewerLayout"); 1588 list = config->readListEntry("ViewerLayout");
1583 if ( ! list.isEmpty() ) { 1589 if ( ! list.isEmpty() ) {
1584 x = list[0].toInt(); 1590 x = list[0].toInt();
1585 y = list[1].toInt(); 1591 y = list[1].toInt();
1586 w = list[2].toInt(); 1592 w = list[2].toInt();
1587 h = list[3].toInt(); 1593 h = list[3].toInt();
1588 getEventViewerDialog()->setGeometry(x,y,w,h); 1594 getEventViewerDialog()->setGeometry(x,y,w,h);
1589 } 1595 }
1590#endif 1596#endif
1591 1597
1592} 1598}
1593 1599
1594 1600
1595void CalendarView::writeSettings() 1601void CalendarView::writeSettings()
1596{ 1602{
1597 // kdDebug() << "CalendarView::writeSettings" << endl; 1603 // kdDebug() << "CalendarView::writeSettings" << endl;
1598 1604
1599 KConfig *config = KOGlobals::config(); 1605 KConfig *config = KOGlobals::config();
1600 1606
1601#ifndef KORG_NOSPLITTER 1607#ifndef KORG_NOSPLITTER
1602 config->setGroup("KOrganizer Geometry"); 1608 config->setGroup("KOrganizer Geometry");
1603 1609
1604 QValueList<int> list = mPanner->sizes(); 1610 QValueList<int> list = mPanner->sizes();
1605 config->writeEntry("Separator1",list); 1611 config->writeEntry("Separator1",list);
1606 1612
1607 list = mLeftSplitter->sizes(); 1613 list = mLeftSplitter->sizes();
1608 config->writeEntry("Separator2",list); 1614 config->writeEntry("Separator2",list);
1609#endif 1615#endif
1610 1616
1611 mViewManager->writeSettings( config ); 1617 mViewManager->writeSettings( config );
1612 mTodoList->saveLayout(config,QString("Todo Layout")); 1618 mTodoList->saveLayout(config,QString("Todo Layout"));
1613 mDialogManager->writeSettings( config ); 1619 mDialogManager->writeSettings( config );
1614 //KOPrefs::instance()->usrWriteConfig(); 1620 //KOPrefs::instance()->usrWriteConfig();
1615 KOPrefs::instance()->writeConfig(); 1621 KOPrefs::instance()->writeConfig();
1616 1622
1617 writeFilterSettings(config); 1623 writeFilterSettings(config);
1618 1624
1619 config->setGroup( "Views" ); 1625 config->setGroup( "Views" );
1620 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1626 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1621 1627
1622#ifdef DESKTOP_VERSION 1628#ifdef DESKTOP_VERSION
1623 config->setGroup("WidgetLayout"); 1629 config->setGroup("WidgetLayout");
1624 QStringList list ;//= config->readListEntry("MainLayout"); 1630 QStringList list ;//= config->readListEntry("MainLayout");
1625 int x,y,w,h; 1631 int x,y,w,h;
1626 QWidget* wid; 1632 QWidget* wid;
1627 wid = topLevelWidget(); 1633 wid = topLevelWidget();
1628 x = wid->geometry().x(); 1634 x = wid->geometry().x();
1629 y = wid->geometry().y(); 1635 y = wid->geometry().y();
1630 w = wid->width(); 1636 w = wid->width();
1631 h = wid->height(); 1637 h = wid->height();
1632 list.clear(); 1638 list.clear();
1633 list << QString::number( x ); 1639 list << QString::number( x );
1634 list << QString::number( y ); 1640 list << QString::number( y );
1635 list << QString::number( w ); 1641 list << QString::number( w );
1636 list << QString::number( h ); 1642 list << QString::number( h );
1637 config->writeEntry("MainLayout",list ); 1643 config->writeEntry("MainLayout",list );
1638 1644
1639 wid = mEventEditor; 1645 wid = mEventEditor;
1640 x = wid->geometry().x(); 1646 x = wid->geometry().x();
1641 y = wid->geometry().y(); 1647 y = wid->geometry().y();
1642 w = wid->width(); 1648 w = wid->width();
1643 h = wid->height(); 1649 h = wid->height();
1644 list.clear(); 1650 list.clear();
1645 list << QString::number( x ); 1651 list << QString::number( x );
1646 list << QString::number( y ); 1652 list << QString::number( y );
1647 list << QString::number( w ); 1653 list << QString::number( w );
1648 list << QString::number( h ); 1654 list << QString::number( h );
1649 config->writeEntry("EditEventLayout",list ); 1655 config->writeEntry("EditEventLayout",list );
1650 1656
1651 wid = mTodoEditor; 1657 wid = mTodoEditor;
1652 x = wid->geometry().x(); 1658 x = wid->geometry().x();
1653 y = wid->geometry().y(); 1659 y = wid->geometry().y();
1654 w = wid->width(); 1660 w = wid->width();
1655 h = wid->height(); 1661 h = wid->height();
1656 list.clear(); 1662 list.clear();
1657 list << QString::number( x ); 1663 list << QString::number( x );
1658 list << QString::number( y ); 1664 list << QString::number( y );
1659 list << QString::number( w ); 1665 list << QString::number( w );
1660 list << QString::number( h ); 1666 list << QString::number( h );
1661 config->writeEntry("EditTodoLayout",list ); 1667 config->writeEntry("EditTodoLayout",list );
1662 wid = getEventViewerDialog(); 1668 wid = getEventViewerDialog();
1663 x = wid->geometry().x(); 1669 x = wid->geometry().x();
1664 y = wid->geometry().y(); 1670 y = wid->geometry().y();
1665 w = wid->width(); 1671 w = wid->width();
1666 h = wid->height(); 1672 h = wid->height();
1667 list.clear(); 1673 list.clear();
1668 list << QString::number( x ); 1674 list << QString::number( x );
1669 list << QString::number( y ); 1675 list << QString::number( y );
1670 list << QString::number( w ); 1676 list << QString::number( w );
1671 list << QString::number( h ); 1677 list << QString::number( h );
1672 config->writeEntry("ViewerLayout",list ); 1678 config->writeEntry("ViewerLayout",list );
1673 wid = mDialogManager->getSearchDialog(); 1679 wid = mDialogManager->getSearchDialog();
1674 if ( wid ) { 1680 if ( wid ) {
1675 x = wid->geometry().x(); 1681 x = wid->geometry().x();
1676 y = wid->geometry().y(); 1682 y = wid->geometry().y();
1677 w = wid->width(); 1683 w = wid->width();
1678 h = wid->height(); 1684 h = wid->height();
1679 list.clear(); 1685 list.clear();
1680 list << QString::number( x ); 1686 list << QString::number( x );
1681 list << QString::number( y ); 1687 list << QString::number( y );
1682 list << QString::number( w ); 1688 list << QString::number( w );
1683 list << QString::number( h ); 1689 list << QString::number( h );
1684 config->writeEntry("SearchLayout",list ); 1690 config->writeEntry("SearchLayout",list );
1685 } 1691 }
1686#endif 1692#endif
1687 1693
1688 1694
1689 config->sync(); 1695 config->sync();
1690} 1696}
1691 1697
1692void CalendarView::readFilterSettings(KConfig *config) 1698void CalendarView::readFilterSettings(KConfig *config)
1693{ 1699{
1694 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1700 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1695 1701
1696 mFilters.clear(); 1702 mFilters.clear();
1697 1703
1698 config->setGroup("General"); 1704 config->setGroup("General");
1699 QStringList filterList = config->readListEntry("CalendarFilters"); 1705 QStringList filterList = config->readListEntry("CalendarFilters");
1700 1706
1701 QStringList::ConstIterator it = filterList.begin(); 1707 QStringList::ConstIterator it = filterList.begin();
1702 QStringList::ConstIterator end = filterList.end(); 1708 QStringList::ConstIterator end = filterList.end();
1703 while(it != end) { 1709 while(it != end) {
1704 // kdDebug() << " filter: " << (*it) << endl; 1710 // kdDebug() << " filter: " << (*it) << endl;
1705 1711
1706 CalFilter *filter; 1712 CalFilter *filter;
1707 filter = new CalFilter(*it); 1713 filter = new CalFilter(*it);
1708 config->setGroup("Filter_" + (*it)); 1714 config->setGroup("Filter_" + (*it));
1709 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1715 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1710 filter->setCriteria(config->readNumEntry("Criteria",0)); 1716 filter->setCriteria(config->readNumEntry("Criteria",0));
1711 filter->setCategoryList(config->readListEntry("CategoryList")); 1717 filter->setCategoryList(config->readListEntry("CategoryList"));
1712 mFilters.append(filter); 1718 mFilters.append(filter);
1713 1719
1714 ++it; 1720 ++it;
1715 } 1721 }
1716 1722
1717 if (mFilters.count() == 0) { 1723 if (mFilters.count() == 0) {
1718 CalFilter *filter = new CalFilter(i18n("Default")); 1724 CalFilter *filter = new CalFilter(i18n("Default"));
1719 mFilters.append(filter); 1725 mFilters.append(filter);
1720 } 1726 }
1721 mFilterView->updateFilters(); 1727 mFilterView->updateFilters();
1722 config->setGroup("FilterView"); 1728 config->setGroup("FilterView");
1723 1729
1724 mFilterView->blockSignals(true); 1730 mFilterView->blockSignals(true);
1725 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 1731 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
1726 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 1732 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
1727 mFilterView->blockSignals(false); 1733 mFilterView->blockSignals(false);
1728 // We do it manually to avoid it being done twice by the above calls 1734 // We do it manually to avoid it being done twice by the above calls
1729 updateFilter(); 1735 updateFilter();
1730} 1736}
1731 1737
1732void CalendarView::writeFilterSettings(KConfig *config) 1738void CalendarView::writeFilterSettings(KConfig *config)
1733{ 1739{
1734 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 1740 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
1735 1741
1736 QStringList filterList; 1742 QStringList filterList;
1737 1743
1738 CalFilter *filter = mFilters.first(); 1744 CalFilter *filter = mFilters.first();
1739 while(filter) { 1745 while(filter) {
1740 // kdDebug() << " fn: " << filter->name() << endl; 1746 // kdDebug() << " fn: " << filter->name() << endl;
1741 filterList << filter->name(); 1747 filterList << filter->name();
1742 config->setGroup("Filter_" + filter->name()); 1748 config->setGroup("Filter_" + filter->name());
1743 config->writeEntry("Criteria",filter->criteria()); 1749 config->writeEntry("Criteria",filter->criteria());
1744 config->writeEntry("CategoryList",filter->categoryList()); 1750 config->writeEntry("CategoryList",filter->categoryList());
1745 filter = mFilters.next(); 1751 filter = mFilters.next();
1746 } 1752 }
1747 config->setGroup("General"); 1753 config->setGroup("General");
1748 config->writeEntry("CalendarFilters",filterList); 1754 config->writeEntry("CalendarFilters",filterList);
1749 1755
1750 config->setGroup("FilterView"); 1756 config->setGroup("FilterView");
1751 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 1757 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
1752 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 1758 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
1753} 1759}
1754 1760
1755 1761
1756void CalendarView::goToday() 1762void CalendarView::goToday()
1757{ 1763{
1758 mNavigator->selectToday(); 1764 mNavigator->selectToday();
1759} 1765}
1760 1766
1761void CalendarView::goNext() 1767void CalendarView::goNext()
1762{ 1768{
1763 mNavigator->selectNext(); 1769 mNavigator->selectNext();
1764} 1770}
1765 1771
1766void CalendarView::goPrevious() 1772void CalendarView::goPrevious()
1767{ 1773{
1768 mNavigator->selectPrevious(); 1774 mNavigator->selectPrevious();
1769} 1775}
1770void CalendarView::goNextMonth() 1776void CalendarView::goNextMonth()
1771{ 1777{
1772 mNavigator->selectNextMonth(); 1778 mNavigator->selectNextMonth();
1773} 1779}
1774 1780
1775void CalendarView::goPreviousMonth() 1781void CalendarView::goPreviousMonth()
1776{ 1782{
1777 mNavigator->selectPreviousMonth(); 1783 mNavigator->selectPreviousMonth();
1778} 1784}
1779void CalendarView::writeLocale() 1785void CalendarView::writeLocale()
1780{ 1786{
1781 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 1787 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
1782 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 1788 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
1783 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 1789 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
1784 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 1790 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
1785 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 1791 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
1786 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 1792 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
1787 dummy = KOPrefs::instance()->mUserDateFormatShort; 1793 dummy = KOPrefs::instance()->mUserDateFormatShort;
1788 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 1794 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
1789 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 1795 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
1790 KOPrefs::instance()->mDaylightsavingStart, 1796 KOPrefs::instance()->mDaylightsavingStart,
1791 KOPrefs::instance()->mDaylightsavingEnd ); 1797 KOPrefs::instance()->mDaylightsavingEnd );
1792 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId ); 1798 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId );
1793} 1799}
1794void CalendarView::updateConfig() 1800void CalendarView::updateConfig()
1795{ 1801{
1796 writeLocale(); 1802 writeLocale();
1797 if ( KOPrefs::instance()->mUseAppColors ) 1803 if ( KOPrefs::instance()->mUseAppColors )
1798 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 1804 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
1799 emit configChanged(); 1805 emit configChanged();
1800 mTodoList->updateConfig(); 1806 mTodoList->updateConfig();
1801 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 1807 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
1802 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1808 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1803 // To make the "fill window" configurations work 1809 // To make the "fill window" configurations work
1804 //mViewManager->raiseCurrentView(); 1810 //mViewManager->raiseCurrentView();
1805} 1811}
1806 1812
1807 1813
1808void CalendarView::eventChanged(Event *event) 1814void CalendarView::eventChanged(Event *event)
1809{ 1815{
1810 changeEventDisplay(event,KOGlobals::EVENTEDITED); 1816 changeEventDisplay(event,KOGlobals::EVENTEDITED);
1811 //updateUnmanagedViews(); 1817 //updateUnmanagedViews();
1812} 1818}
1813 1819
1814void CalendarView::eventAdded(Event *event) 1820void CalendarView::eventAdded(Event *event)
1815{ 1821{
1816 changeEventDisplay(event,KOGlobals::EVENTADDED); 1822 changeEventDisplay(event,KOGlobals::EVENTADDED);
1817} 1823}
1818 1824
1819void CalendarView::eventToBeDeleted(Event *) 1825void CalendarView::eventToBeDeleted(Event *)
1820{ 1826{
1821 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 1827 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
1822} 1828}
1823 1829
1824void CalendarView::eventDeleted() 1830void CalendarView::eventDeleted()
1825{ 1831{
1826 changeEventDisplay(0,KOGlobals::EVENTDELETED); 1832 changeEventDisplay(0,KOGlobals::EVENTDELETED);
1827} 1833}
1828void CalendarView::changeTodoDisplay(Todo *which, int action) 1834void CalendarView::changeTodoDisplay(Todo *which, int action)
1829{ 1835{
1830 changeIncidenceDisplay((Incidence *)which, action); 1836 changeIncidenceDisplay((Incidence *)which, action);
1831} 1837}
1832void CalendarView::checkZaurusId( int id, bool todo ) 1838
1833{
1834 if ( id >= 0 ) {
1835 Incidence* lse = mCalendar->event( "last-syncEvent-Sharp-DTM");
1836 if ( lse ) {
1837 QString des = lse->description();
1838 QString pref = "e";
1839 if ( todo )
1840 pref = "t";
1841 des += pref+ QString::number ( id ) + ",";
1842 lse->setReadOnly( false );
1843 lse->setDescription( des );
1844 lse->setReadOnly( true );
1845 }
1846 }
1847}
1848void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 1839void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
1849{ 1840{
1850 updateUnmanagedViews(); 1841 updateUnmanagedViews();
1851 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 1842 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
1852 if ( action == KOGlobals::EVENTDELETED ) { //delete 1843 if ( action == KOGlobals::EVENTDELETED ) { //delete
1853 mCalendar->checkAlarmForIncidence( 0, true ); 1844 mCalendar->checkAlarmForIncidence( 0, true );
1854 if ( mEventViewerDialog ) 1845 if ( mEventViewerDialog )
1855 mEventViewerDialog->hide(); 1846 mEventViewerDialog->hide();
1856 } 1847 }
1857 else 1848 else
1858 mCalendar->checkAlarmForIncidence( which , false ); 1849 mCalendar->checkAlarmForIncidence( which , false );
1859} 1850}
1860 1851
1861// most of the changeEventDisplays() right now just call the view's 1852// most of the changeEventDisplays() right now just call the view's
1862// total update mode, but they SHOULD be recoded to be more refresh-efficient. 1853// total update mode, but they SHOULD be recoded to be more refresh-efficient.
1863void CalendarView::changeEventDisplay(Event *which, int action) 1854void CalendarView::changeEventDisplay(Event *which, int action)
1864{ 1855{
1865 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 1856 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
1866 changeIncidenceDisplay((Incidence *)which, action); 1857 changeIncidenceDisplay((Incidence *)which, action);
1867 mDateNavigator->updateView(); 1858 mDateNavigator->updateView();
1868 //mDialogManager->updateSearchDialog(); 1859 //mDialogManager->updateSearchDialog();
1869 1860
1870 if (which) { 1861 if (which) {
1871 // If there is an event view visible update the display 1862 // If there is an event view visible update the display
1872 mViewManager->currentView()->changeEventDisplay(which,action); 1863 mViewManager->currentView()->changeEventDisplay(which,action);
1873 // TODO: check, if update needed 1864 // TODO: check, if update needed
1874 // if (which->getTodoStatus()) { 1865 // if (which->getTodoStatus()) {
1875 mTodoList->updateView(); 1866 mTodoList->updateView();
1876 // } 1867 // }
1877 } else { 1868 } else {
1878 mViewManager->currentView()->updateView(); 1869 mViewManager->currentView()->updateView();
1879 } 1870 }
1880} 1871}
1881 1872
1882 1873
1883void CalendarView::updateTodoViews() 1874void CalendarView::updateTodoViews()
1884{ 1875{
1885 1876
1886 mTodoList->updateView(); 1877 mTodoList->updateView();
1887 mViewManager->currentView()->updateView(); 1878 mViewManager->currentView()->updateView();
1888 1879
1889} 1880}
1890 1881
1891 1882
1892void CalendarView::updateView(const QDate &start, const QDate &end) 1883void CalendarView::updateView(const QDate &start, const QDate &end)
1893{ 1884{
1894 mTodoList->updateView(); 1885 mTodoList->updateView();
1895 mViewManager->updateView(start, end); 1886 mViewManager->updateView(start, end);
1896 //mDateNavigator->updateView(); 1887 //mDateNavigator->updateView();
1897} 1888}
1898 1889
1899void CalendarView::updateView() 1890void CalendarView::updateView()
1900{ 1891{
1901 DateList tmpList = mNavigator->selectedDates(); 1892 DateList tmpList = mNavigator->selectedDates();
1902 1893
1903 // We assume that the navigator only selects consecutive days. 1894 // We assume that the navigator only selects consecutive days.
1904 updateView( tmpList.first(), tmpList.last() ); 1895 updateView( tmpList.first(), tmpList.last() );
1905} 1896}
1906 1897
1907void CalendarView::updateUnmanagedViews() 1898void CalendarView::updateUnmanagedViews()
1908{ 1899{
1909 mDateNavigator->updateDayMatrix(); 1900 mDateNavigator->updateDayMatrix();
1910} 1901}
1911 1902
1912int CalendarView::msgItemDelete() 1903int CalendarView::msgItemDelete()
1913{ 1904{
1914 return KMessageBox::warningContinueCancel(this, 1905 return KMessageBox::warningContinueCancel(this,
1915 i18n("This item will be\npermanently deleted."), 1906 i18n("This item will be\npermanently deleted."),
1916 i18n("KO/Pi Confirmation"),i18n("Delete")); 1907 i18n("KO/Pi Confirmation"),i18n("Delete"));
1917} 1908}
1918 1909
1919 1910
1920void CalendarView::edit_cut() 1911void CalendarView::edit_cut()
1921{ 1912{
1922 Event *anEvent=0; 1913 Event *anEvent=0;
1923 1914
1924 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 1915 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
1925 1916
1926 if (mViewManager->currentView()->isEventView()) { 1917 if (mViewManager->currentView()->isEventView()) {
1927 if ( incidence && incidence->type() == "Event" ) { 1918 if ( incidence && incidence->type() == "Event" ) {
1928 anEvent = static_cast<Event *>(incidence); 1919 anEvent = static_cast<Event *>(incidence);
1929 } 1920 }
1930 } 1921 }
1931 1922
1932 if (!anEvent) { 1923 if (!anEvent) {
1933 KNotifyClient::beep(); 1924 KNotifyClient::beep();
1934 return; 1925 return;
1935 } 1926 }
1936 DndFactory factory( mCalendar ); 1927 DndFactory factory( mCalendar );
1937 factory.cutEvent(anEvent); 1928 factory.cutEvent(anEvent);
1938 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 1929 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
1939} 1930}
1940 1931
1941void CalendarView::edit_copy() 1932void CalendarView::edit_copy()
1942{ 1933{
1943 Event *anEvent=0; 1934 Event *anEvent=0;
1944 1935
1945 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 1936 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
1946 1937
1947 if (mViewManager->currentView()->isEventView()) { 1938 if (mViewManager->currentView()->isEventView()) {
1948 if ( incidence && incidence->type() == "Event" ) { 1939 if ( incidence && incidence->type() == "Event" ) {
1949 anEvent = static_cast<Event *>(incidence); 1940 anEvent = static_cast<Event *>(incidence);
1950 } 1941 }
1951 } 1942 }
1952 1943
1953 if (!anEvent) { 1944 if (!anEvent) {
1954 KNotifyClient::beep(); 1945 KNotifyClient::beep();
1955 return; 1946 return;
1956 } 1947 }
1957 DndFactory factory( mCalendar ); 1948 DndFactory factory( mCalendar );
1958 factory.copyEvent(anEvent); 1949 factory.copyEvent(anEvent);
1959} 1950}
1960 1951
1961void CalendarView::edit_paste() 1952void CalendarView::edit_paste()
1962{ 1953{
1963 QDate date = mNavigator->selectedDates().first(); 1954 QDate date = mNavigator->selectedDates().first();
1964 1955
1965 DndFactory factory( mCalendar ); 1956 DndFactory factory( mCalendar );
1966 Event *pastedEvent = factory.pasteEvent( date ); 1957 Event *pastedEvent = factory.pasteEvent( date );
1967 1958
1968 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 1959 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
1969} 1960}
1970 1961
1971void CalendarView::edit_options() 1962void CalendarView::edit_options()
1972{ 1963{
1973 mDialogManager->showOptionsDialog(); 1964 mDialogManager->showOptionsDialog();
1974 //writeSettings(); 1965 //writeSettings();
1975} 1966}
1976void CalendarView::edit_sync_options() 1967void CalendarView::edit_sync_options()
1977{ 1968{
1978 //mDialogManager->showSyncOptions(); 1969 //mDialogManager->showSyncOptions();
1979 //KOPrefs::instance()->mSyncAlgoPrefs 1970 //KOPrefs::instance()->mSyncAlgoPrefs
1980 QDialog dia( this, "dia", true ); 1971 QDialog dia( this, "dia", true );
1981 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 1972 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
1982 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 1973 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
1983 QVBoxLayout lay ( &dia ); 1974 QVBoxLayout lay ( &dia );
1984 lay.setSpacing( 2 ); 1975 lay.setSpacing( 2 );
1985 lay.setMargin( 3 ); 1976 lay.setMargin( 3 );
1986 lay.addWidget(&gr); 1977 lay.addWidget(&gr);
1987 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 1978 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
1988 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 1979 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
1989 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 1980 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
1990 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 1981 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
1991 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 1982 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
1992 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 1983 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
1993 //QRadioButton both( i18n("Take both on conflict"), &gr ); 1984 //QRadioButton both( i18n("Take both on conflict"), &gr );
1994 QPushButton pb ( "OK", &dia); 1985 QPushButton pb ( "OK", &dia);
1995 lay.addWidget( &pb ); 1986 lay.addWidget( &pb );
1996 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 1987 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
1997 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) { 1988 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) {
1998 case 0: 1989 case 0:
1999 loc.setChecked( true); 1990 loc.setChecked( true);
2000 break; 1991 break;
2001 case 1: 1992 case 1:
2002 rem.setChecked( true ); 1993 rem.setChecked( true );
2003 break; 1994 break;
2004 case 2: 1995 case 2:
2005 newest.setChecked( true); 1996 newest.setChecked( true);
2006 break; 1997 break;
2007 case 3: 1998 case 3:
2008 ask.setChecked( true); 1999 ask.setChecked( true);
2009 break; 2000 break;
2010 case 4: 2001 case 4:
2011 f_loc.setChecked( true); 2002 f_loc.setChecked( true);
2012 break; 2003 break;
2013 case 5: 2004 case 5:
2014 f_rem.setChecked( true); 2005 f_rem.setChecked( true);
2015 break; 2006 break;
2016 case 6: 2007 case 6:
2017 // both.setChecked( true); 2008 // both.setChecked( true);
2018 break; 2009 break;
2019 default: 2010 default:
2020 break; 2011 break;
2021 } 2012 }
2022 if ( dia.exec() ) { 2013 if ( dia.exec() ) {
2023 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2014 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2024 } 2015 }
2025 2016
2026} 2017}
2027 2018
2028void CalendarView::slotSelectPickerDate( QDate d) 2019void CalendarView::slotSelectPickerDate( QDate d)
2029{ 2020{
2030 mDateFrame->hide(); 2021 mDateFrame->hide();
2031 if ( mDatePickerMode == 1 ) { 2022 if ( mDatePickerMode == 1 ) {
2032 mNavigator->slotDaySelect( d ); 2023 mNavigator->slotDaySelect( d );
2033 } else if ( mDatePickerMode == 2 ) { 2024 } else if ( mDatePickerMode == 2 ) {
2034 if ( mMoveIncidence->type() == "Todo" ) { 2025 if ( mMoveIncidence->type() == "Todo" ) {
2035 Todo * to = (Todo *) mMoveIncidence; 2026 Todo * to = (Todo *) mMoveIncidence;
2036 QTime tim; 2027 QTime tim;
2037 if ( to->hasDueDate() ) 2028 if ( to->hasDueDate() )
2038 tim = to->dtDue().time(); 2029 tim = to->dtDue().time();
2039 else { 2030 else {
2040 tim = QTime ( 0,0,0 ); 2031 tim = QTime ( 0,0,0 );
2041 to->setFloats( true ); 2032 to->setFloats( true );
2042 to->setHasDueDate( true ); 2033 to->setHasDueDate( true );
2043 } 2034 }
2044 QDateTime dt ( d,tim ); 2035 QDateTime dt ( d,tim );
2045 to->setDtDue( dt ); 2036 to->setDtDue( dt );
2046 todoChanged( to ); 2037 todoChanged( to );
2047 } else { 2038 } else {
2048 QTime tim = mMoveIncidence->dtStart().time(); 2039 QTime tim = mMoveIncidence->dtStart().time();
2049 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2040 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2050 QDateTime dt ( d,tim ); 2041 QDateTime dt ( d,tim );
2051 mMoveIncidence->setDtStart( dt ); 2042 mMoveIncidence->setDtStart( dt );
2052 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2043 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2053 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2044 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2054 } 2045 }
2055 2046
2056 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2047 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2057 } 2048 }
2058} 2049}
2059 2050
2060void CalendarView::removeCategories() 2051void CalendarView::removeCategories()
2061{ 2052{
2062 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2053 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2063 QStringList catList = KOPrefs::instance()->mCustomCategories; 2054 QStringList catList = KOPrefs::instance()->mCustomCategories;
2064 QStringList catIncList; 2055 QStringList catIncList;
2065 QStringList newCatList; 2056 QStringList newCatList;
2066 Incidence* inc = incList.first(); 2057 Incidence* inc = incList.first();
2067 int i; 2058 int i;
2068 int count = 0; 2059 int count = 0;
2069 while ( inc ) { 2060 while ( inc ) {
2070 newCatList.clear(); 2061 newCatList.clear();
2071 catIncList = inc->categories() ; 2062 catIncList = inc->categories() ;
2072 for( i = 0; i< catIncList.count(); ++i ) { 2063 for( i = 0; i< catIncList.count(); ++i ) {
2073 if ( catList.contains (catIncList[i])) 2064 if ( catList.contains (catIncList[i]))
2074 newCatList.append( catIncList[i] ); 2065 newCatList.append( catIncList[i] );
2075 } 2066 }
2076 newCatList.sort(); 2067 newCatList.sort();
2077 inc->setCategories( newCatList.join(",") ); 2068 inc->setCategories( newCatList.join(",") );
2078 inc = incList.next(); 2069 inc = incList.next();
2079 } 2070 }
2080} 2071}
2081 2072
2082int CalendarView::addCategories() 2073int CalendarView::addCategories()
2083{ 2074{
2084 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2075 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2085 QStringList catList = KOPrefs::instance()->mCustomCategories; 2076 QStringList catList = KOPrefs::instance()->mCustomCategories;
2086 QStringList catIncList; 2077 QStringList catIncList;
2087 Incidence* inc = incList.first(); 2078 Incidence* inc = incList.first();
2088 int i; 2079 int i;
2089 int count = 0; 2080 int count = 0;
2090 while ( inc ) { 2081 while ( inc ) {
2091 catIncList = inc->categories() ; 2082 catIncList = inc->categories() ;
2092 for( i = 0; i< catIncList.count(); ++i ) { 2083 for( i = 0; i< catIncList.count(); ++i ) {
2093 if ( !catList.contains (catIncList[i])) { 2084 if ( !catList.contains (catIncList[i])) {
2094 catList.append( catIncList[i] ); 2085 catList.append( catIncList[i] );
2095 //qDebug("add cat %s ", catIncList[i].latin1()); 2086 //qDebug("add cat %s ", catIncList[i].latin1());
2096 ++count; 2087 ++count;
2097 } 2088 }
2098 } 2089 }
2099 inc = incList.next(); 2090 inc = incList.next();
2100 } 2091 }
2101 catList.sort(); 2092 catList.sort();
2102 KOPrefs::instance()->mCustomCategories = catList; 2093 KOPrefs::instance()->mCustomCategories = catList;
2103 return count; 2094 return count;
2104} 2095}
2105 2096
2106void CalendarView::manageCategories() 2097void CalendarView::manageCategories()
2107{ 2098{
2108 KOCatPrefs* cp = new KOCatPrefs(); 2099 KOCatPrefs* cp = new KOCatPrefs();
2109 cp->show(); 2100 cp->show();
2110 int w =cp->sizeHint().width() ; 2101 int w =cp->sizeHint().width() ;
2111 int h = cp->sizeHint().height() ; 2102 int h = cp->sizeHint().height() ;
2112 int dw = QApplication::desktop()->width(); 2103 int dw = QApplication::desktop()->width();
2113 int dh = QApplication::desktop()->height(); 2104 int dh = QApplication::desktop()->height();
2114 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2105 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2115 if ( !cp->exec() ) { 2106 if ( !cp->exec() ) {
2116 delete cp; 2107 delete cp;
2117 return; 2108 return;
2118 } 2109 }
2119 int count = 0; 2110 int count = 0;
2120 if ( cp->addCat() ) { 2111 if ( cp->addCat() ) {
2121 count = addCategories(); 2112 count = addCategories();
2122 if ( count ) { 2113 if ( count ) {
2123 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2114 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2124 writeSettings(); 2115 writeSettings();
2125 } 2116 }
2126 } else { 2117 } else {
2127 removeCategories(); 2118 removeCategories();
2128 updateView(); 2119 updateView();
2129 } 2120 }
2130 delete cp; 2121 delete cp;
2131} 2122}
2132 2123
2133void CalendarView::beamIncidence(Incidence * Inc) 2124void CalendarView::beamIncidence(Incidence * Inc)
2134{ 2125{
2135 QPtrList<Incidence> delSel ; 2126 QPtrList<Incidence> delSel ;
2136 delSel.append(Inc); 2127 delSel.append(Inc);
2137 beamIncidenceList( delSel ); 2128 beamIncidenceList( delSel );
2138} 2129}
2139void CalendarView::beamCalendar() 2130void CalendarView::beamCalendar()
2140{ 2131{
2141 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2132 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2142 //qDebug("beamCalendar() "); 2133 //qDebug("beamCalendar() ");
2143 beamIncidenceList( delSel ); 2134 beamIncidenceList( delSel );
2144} 2135}
2145void CalendarView::beamFilteredCalendar() 2136void CalendarView::beamFilteredCalendar()
2146{ 2137{
2147 QPtrList<Incidence> delSel = mCalendar->incidences(); 2138 QPtrList<Incidence> delSel = mCalendar->incidences();
2148 //qDebug("beamFilteredCalendar() "); 2139 //qDebug("beamFilteredCalendar() ");
2149 beamIncidenceList( delSel ); 2140 beamIncidenceList( delSel );
2150} 2141}
2151void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2142void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2152{ 2143{
2153 if ( beamDialog->exec () == QDialog::Rejected ) 2144 if ( beamDialog->exec () == QDialog::Rejected )
2154 return; 2145 return;
2155 2146
2156 QString fn = "/tmp/kopibeamfile"; 2147 QString fn = "/tmp/kopibeamfile";
2157 QString mes; 2148 QString mes;
2158 bool createbup = true; 2149 bool createbup = true;
2159 if ( createbup ) { 2150 if ( createbup ) {
2160 QString description = "\n"; 2151 QString description = "\n";
2161 CalendarLocal* cal = new CalendarLocal(); 2152 CalendarLocal* cal = new CalendarLocal();
2162 if ( beamDialog->beamLocal() ) 2153 if ( beamDialog->beamLocal() )
2163 cal->setLocalTime(); 2154 cal->setLocalTime();
2164 else 2155 else
2165 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 2156 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
2166 Incidence *incidence = delSel.first(); 2157 Incidence *incidence = delSel.first();
2167 bool addText = false; 2158 bool addText = false;
2168 if ( delSel.count() < 10 ) 2159 if ( delSel.count() < 10 )
2169 addText = true; 2160 addText = true;
2170 else { 2161 else {
2171 description.sprintf(i18n(" %d items?"),delSel.count() ); 2162 description.sprintf(i18n(" %d items?"),delSel.count() );
2172 } 2163 }
2173 while ( incidence ) { 2164 while ( incidence ) {
2174 Incidence *in = incidence->clone(); 2165 Incidence *in = incidence->clone();
2175 if ( addText ) 2166 if ( addText )
2176 description += in->summary() + "\n"; 2167 description += in->summary() + "\n";
2177 cal->addIncidence( in ); 2168 cal->addIncidence( in );
2178 incidence = delSel.next(); 2169 incidence = delSel.next();
2179 } 2170 }
2180 if ( beamDialog->beamVcal() ) { 2171 if ( beamDialog->beamVcal() ) {
2181 fn += ".vcs"; 2172 fn += ".vcs";
2182 FileStorage storage( cal, fn, new VCalFormat ); 2173 FileStorage storage( cal, fn, new VCalFormat );
2183 storage.save(); 2174 storage.save();
2184 } else { 2175 } else {
2185 fn += ".ics"; 2176 fn += ".ics";
2186 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2177 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2187 storage.save(); 2178 storage.save();
2188 } 2179 }
2189 delete cal; 2180 delete cal;
2190 mes = i18n("KO/Pi: Ready for beaming"); 2181 mes = i18n("KO/Pi: Ready for beaming");
2191 setCaption(mes); 2182 setCaption(mes);
2192 2183
2193#ifndef DESKTOP_VERSION 2184#ifndef DESKTOP_VERSION
2194 Ir *ir = new Ir( this ); 2185 Ir *ir = new Ir( this );
2195 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2186 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2196 ir->send( fn, description, "text/x-vCalendar" ); 2187 ir->send( fn, description, "text/x-vCalendar" );
2197#endif 2188#endif
2198 } 2189 }
2199} 2190}
2200void CalendarView::beamDone( Ir *ir ) 2191void CalendarView::beamDone( Ir *ir )
2201{ 2192{
2202#ifndef DESKTOP_VERSION 2193#ifndef DESKTOP_VERSION
2203 delete ir; 2194 delete ir;
2204#endif 2195#endif
2205} 2196}
2206 2197
2207void CalendarView::moveIncidence(Incidence * inc ) 2198void CalendarView::moveIncidence(Incidence * inc )
2208{ 2199{
2209 if ( !inc ) return; 2200 if ( !inc ) return;
2210 // qDebug("showDatePickerForIncidence( ) "); 2201 // qDebug("showDatePickerForIncidence( ) ");
2211 if ( mDateFrame->isVisible() ) 2202 if ( mDateFrame->isVisible() )
2212 mDateFrame->hide(); 2203 mDateFrame->hide();
2213 else { 2204 else {
2214 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2205 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2215 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2206 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2216 int dw = QApplication::desktop()->width(); 2207 int dw = QApplication::desktop()->width();
2217 int dh = QApplication::desktop()->height(); 2208 int dh = QApplication::desktop()->height();
2218 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2209 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2219 mDateFrame->show(); 2210 mDateFrame->show();
2220 } 2211 }
2221 mDatePickerMode = 2; 2212 mDatePickerMode = 2;
2222 mMoveIncidence = inc ; 2213 mMoveIncidence = inc ;
2223 QDate da; 2214 QDate da;
2224 if ( mMoveIncidence->type() == "Todo" ) { 2215 if ( mMoveIncidence->type() == "Todo" ) {
2225 Todo * to = (Todo *) mMoveIncidence; 2216 Todo * to = (Todo *) mMoveIncidence;
2226 if ( to->hasDueDate() ) 2217 if ( to->hasDueDate() )
2227 da = to->dtDue().date(); 2218 da = to->dtDue().date();
2228 else 2219 else
2229 da = QDate::currentDate(); 2220 da = QDate::currentDate();
2230 } else { 2221 } else {
2231 da = mMoveIncidence->dtStart().date(); 2222 da = mMoveIncidence->dtStart().date();
2232 } 2223 }
2233 mDatePicker->setDate( da ); 2224 mDatePicker->setDate( da );
2234} 2225}
2235void CalendarView::showDatePicker( ) 2226void CalendarView::showDatePicker( )
2236{ 2227{
2237 //qDebug("CalendarView::showDatePicker( ) "); 2228 //qDebug("CalendarView::showDatePicker( ) ");
2238 if ( mDateFrame->isVisible() ) 2229 if ( mDateFrame->isVisible() )
2239 mDateFrame->hide(); 2230 mDateFrame->hide();
2240 else { 2231 else {
2241 int w =mDatePicker->sizeHint().width() ; 2232 int w =mDatePicker->sizeHint().width() ;
2242 int h = mDatePicker->sizeHint().height() ; 2233 int h = mDatePicker->sizeHint().height() ;
2243 int dw = QApplication::desktop()->width(); 2234 int dw = QApplication::desktop()->width();
2244 int dh = QApplication::desktop()->height(); 2235 int dh = QApplication::desktop()->height();
2245 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2236 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2246 mDateFrame->show(); 2237 mDateFrame->show();
2247 } 2238 }
2248 mDatePickerMode = 1; 2239 mDatePickerMode = 1;
2249 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2240 mDatePicker->setDate( mNavigator->selectedDates().first() );
2250} 2241}
2251 2242
2252void CalendarView::showEventEditor() 2243void CalendarView::showEventEditor()
2253{ 2244{
2254#ifdef DESKTOP_VERSION 2245#ifdef DESKTOP_VERSION
2255 mEventEditor->show(); 2246 mEventEditor->show();
2256#else 2247#else
2257 mEventEditor->showMaximized(); 2248 mEventEditor->showMaximized();
2258#endif 2249#endif
2259} 2250}
2260void CalendarView::showTodoEditor() 2251void CalendarView::showTodoEditor()
2261{ 2252{
2262#ifdef DESKTOP_VERSION 2253#ifdef DESKTOP_VERSION
2263 mTodoEditor->show(); 2254 mTodoEditor->show();
2264#else 2255#else
2265 mTodoEditor->showMaximized(); 2256 mTodoEditor->showMaximized();
2266#endif 2257#endif
2267} 2258}
2268void CalendarView::cancelIncidence(Incidence * inc ) 2259void CalendarView::cancelIncidence(Incidence * inc )
2269{ 2260{
2270 inc->setCancelled( ! inc->cancelled() ); 2261 inc->setCancelled( ! inc->cancelled() );
2271 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2262 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2272 updateView(); 2263 updateView();
2273} 2264}
2274void CalendarView::cloneIncidence(Incidence * orgInc ) 2265void CalendarView::cloneIncidence(Incidence * orgInc )
2275{ 2266{
2276 Incidence * newInc = orgInc->clone(); 2267 Incidence * newInc = orgInc->clone();
2277 newInc->recreate(); 2268 newInc->recreate();
2278 2269
2279 if ( newInc->type() == "Todo" ) { 2270 if ( newInc->type() == "Todo" ) {
2280 Todo* t = (Todo*) newInc; 2271 Todo* t = (Todo*) newInc;
2281 mTodoEditor->editTodo( t ); 2272 mTodoEditor->editTodo( t );
2282 showTodoEditor(); 2273 showTodoEditor();
2283 if ( mTodoEditor->exec() ) { 2274 if ( mTodoEditor->exec() ) {
2284 mCalendar->addTodo( t ); 2275 mCalendar->addTodo( t );
2285 updateView(); 2276 updateView();
2286 } else { 2277 } else {
2287 delete t; 2278 delete t;
2288 } 2279 }
2289 } 2280 }
2290 else { 2281 else {
2291 Event* e = (Event*) newInc; 2282 Event* e = (Event*) newInc;
2292 mEventEditor->editEvent( e ); 2283 mEventEditor->editEvent( e );
2293 showEventEditor(); 2284 showEventEditor();
2294 if ( mEventEditor->exec() ) { 2285 if ( mEventEditor->exec() ) {
2295 mCalendar->addEvent( e ); 2286 mCalendar->addEvent( e );
2296 updateView(); 2287 updateView();
2297 } else { 2288 } else {
2298 delete e; 2289 delete e;
2299 } 2290 }
2300 } 2291 }
2301} 2292}
2302 2293
2303void CalendarView::newEvent() 2294void CalendarView::newEvent()
2304{ 2295{
2305 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2296 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2306 KOAgendaView *aView = mViewManager->agendaView(); 2297 KOAgendaView *aView = mViewManager->agendaView();
2307 if (aView) { 2298 if (aView) {
2308 if (aView->selectionStart().isValid()) { 2299 if (aView->selectionStart().isValid()) {
2309 if (aView->selectedIsAllDay()) { 2300 if (aView->selectedIsAllDay()) {
2310 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2301 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2311 } else { 2302 } else {
2312 newEvent(aView->selectionStart(),aView->selectionEnd()); 2303 newEvent(aView->selectionStart(),aView->selectionEnd());
2313 } 2304 }
2314 return; 2305 return;
2315 } 2306 }
2316 } 2307 }
2317 2308
2318 QDate date = mNavigator->selectedDates().first(); 2309 QDate date = mNavigator->selectedDates().first();
2319 QDateTime current = QDateTime::currentDateTime(); 2310 QDateTime current = QDateTime::currentDateTime();
2320 if ( date <= current.date() ) { 2311 if ( date <= current.date() ) {
2321 int hour = current.time().hour() +1; 2312 int hour = current.time().hour() +1;
2322 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2313 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2323 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2314 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2324 } else 2315 } else
2325 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2316 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2326 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2317 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2327 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2318 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2328} 2319}
2329 2320
2330void CalendarView::newEvent(QDateTime fh) 2321void CalendarView::newEvent(QDateTime fh)
2331{ 2322{
2332 newEvent(fh, 2323 newEvent(fh,
2333 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2324 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2334} 2325}
2335 2326
2336void CalendarView::newEvent(QDate dt) 2327void CalendarView::newEvent(QDate dt)
2337{ 2328{
2338 newEvent(QDateTime(dt, QTime(0,0,0)), 2329 newEvent(QDateTime(dt, QTime(0,0,0)),
2339 QDateTime(dt, QTime(0,0,0)), true); 2330 QDateTime(dt, QTime(0,0,0)), true);
2340} 2331}
2341 2332
2342void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2333void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2343{ 2334{
2344 2335
2345 mEventEditor->newEvent(fromHint,toHint,allDay); 2336 mEventEditor->newEvent(fromHint,toHint,allDay);
2346 if ( mFilterView->filtersEnabled() ) { 2337 if ( mFilterView->filtersEnabled() ) {
2347 CalFilter *filter = mFilterView->selectedFilter(); 2338 CalFilter *filter = mFilterView->selectedFilter();
2348 if (filter && filter->showCategories()) { 2339 if (filter && filter->showCategories()) {
2349 mEventEditor->setCategories(filter->categoryList().join(",") ); 2340 mEventEditor->setCategories(filter->categoryList().join(",") );
2350 } 2341 }
2351 if ( filter ) 2342 if ( filter )
2352 mEventEditor->setSecrecy( filter->getSecrecy() ); 2343 mEventEditor->setSecrecy( filter->getSecrecy() );
2353 } 2344 }
2354 showEventEditor(); 2345 showEventEditor();
2355} 2346}
2356void CalendarView::todoAdded(Todo * t) 2347void CalendarView::todoAdded(Todo * t)
2357{ 2348{
2358 2349
2359 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2350 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2360 updateTodoViews(); 2351 updateTodoViews();
2361} 2352}
2362void CalendarView::todoChanged(Todo * t) 2353void CalendarView::todoChanged(Todo * t)
2363{ 2354{
2364 emit todoModified( t, 4 ); 2355 emit todoModified( t, 4 );
2365 // updateTodoViews(); 2356 // updateTodoViews();
2366} 2357}
2367void CalendarView::todoToBeDeleted(Todo *) 2358void CalendarView::todoToBeDeleted(Todo *)
2368{ 2359{
2369 //qDebug("todoToBeDeleted(Todo *) "); 2360 //qDebug("todoToBeDeleted(Todo *) ");
2370 updateTodoViews(); 2361 updateTodoViews();
2371} 2362}
2372void CalendarView::todoDeleted() 2363void CalendarView::todoDeleted()
2373{ 2364{
2374 //qDebug(" todoDeleted()"); 2365 //qDebug(" todoDeleted()");
2375 updateTodoViews(); 2366 updateTodoViews();
2376} 2367}
2377 2368
2378 2369
2379 2370
2380void CalendarView::newTodo() 2371void CalendarView::newTodo()
2381{ 2372{
2382 2373
2383 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2374 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2384 if ( mFilterView->filtersEnabled() ) { 2375 if ( mFilterView->filtersEnabled() ) {
2385 CalFilter *filter = mFilterView->selectedFilter(); 2376 CalFilter *filter = mFilterView->selectedFilter();
2386 if (filter && filter->showCategories()) { 2377 if (filter && filter->showCategories()) {
2387 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2378 mTodoEditor->setCategories(filter->categoryList().join(",") );
2388 } 2379 }
2389 if ( filter ) 2380 if ( filter )
2390 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2381 mTodoEditor->setSecrecy( filter->getSecrecy() );
2391 } 2382 }
2392 showTodoEditor(); 2383 showTodoEditor();
2393} 2384}
2394 2385
2395void CalendarView::newSubTodo() 2386void CalendarView::newSubTodo()
2396{ 2387{
2397 Todo *todo = selectedTodo(); 2388 Todo *todo = selectedTodo();
2398 if ( todo ) newSubTodo( todo ); 2389 if ( todo ) newSubTodo( todo );
2399} 2390}
2400 2391
2401void CalendarView::newSubTodo(Todo *parentEvent) 2392void CalendarView::newSubTodo(Todo *parentEvent)
2402{ 2393{
2403 2394
2404 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2395 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2405 showTodoEditor(); 2396 showTodoEditor();
2406} 2397}
2407 2398
2408void CalendarView::newFloatingEvent() 2399void CalendarView::newFloatingEvent()
2409{ 2400{
2410 DateList tmpList = mNavigator->selectedDates(); 2401 DateList tmpList = mNavigator->selectedDates();
2411 QDate date = tmpList.first(); 2402 QDate date = tmpList.first();
2412 2403
2413 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2404 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2414 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2405 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2415} 2406}
2416 2407
2417 2408
2418void CalendarView::editEvent( Event *event ) 2409void CalendarView::editEvent( Event *event )
2419{ 2410{
2420 2411
2421 if ( !event ) return; 2412 if ( !event ) return;
2422 if ( event->isReadOnly() ) { 2413 if ( event->isReadOnly() ) {
2423 showEvent( event ); 2414 showEvent( event );
2424 return; 2415 return;
2425 } 2416 }
2426 mEventEditor->editEvent( event , mFlagEditDescription); 2417 mEventEditor->editEvent( event , mFlagEditDescription);
2427 showEventEditor(); 2418 showEventEditor();
2428} 2419}
2429void CalendarView::editJournal( Journal *jour ) 2420void CalendarView::editJournal( Journal *jour )
2430{ 2421{
2431 if ( !jour ) return; 2422 if ( !jour ) return;
2432 mDialogManager->hideSearchDialog(); 2423 mDialogManager->hideSearchDialog();
2433 mViewManager->showJournalView(); 2424 mViewManager->showJournalView();
2434 mNavigator->slotDaySelect( jour->dtStart().date() ); 2425 mNavigator->slotDaySelect( jour->dtStart().date() );
2435} 2426}
2436void CalendarView::editTodo( Todo *todo ) 2427void CalendarView::editTodo( Todo *todo )
2437{ 2428{
2438 if ( !todo ) return; 2429 if ( !todo ) return;
2439 2430
2440 if ( todo->isReadOnly() ) { 2431 if ( todo->isReadOnly() ) {
2441 showTodo( todo ); 2432 showTodo( todo );
2442 return; 2433 return;
2443 } 2434 }
2444 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2435 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2445 showTodoEditor(); 2436 showTodoEditor();
2446 2437
2447} 2438}
2448 2439
2449KOEventViewerDialog* CalendarView::getEventViewerDialog() 2440KOEventViewerDialog* CalendarView::getEventViewerDialog()
2450{ 2441{
2451 if ( !mEventViewerDialog ) { 2442 if ( !mEventViewerDialog ) {
2452 mEventViewerDialog = new KOEventViewerDialog(this); 2443 mEventViewerDialog = new KOEventViewerDialog(this);
2453 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2444 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2454 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2445 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2455 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2446 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2456 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2447 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2457 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2448 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2458 viewManager(), SLOT( showAgendaView( bool ) ) ); 2449 viewManager(), SLOT( showAgendaView( bool ) ) );
2459 mEventViewerDialog->resize( 640, 480 ); 2450 mEventViewerDialog->resize( 640, 480 );
2460 2451
2461 } 2452 }
2462 return mEventViewerDialog; 2453 return mEventViewerDialog;
2463} 2454}
2464void CalendarView::showEvent(Event *event) 2455void CalendarView::showEvent(Event *event)
2465{ 2456{
2466 getEventViewerDialog()->setEvent(event); 2457 getEventViewerDialog()->setEvent(event);
2467 getEventViewerDialog()->showMe(); 2458 getEventViewerDialog()->showMe();
2468} 2459}
2469 2460
2470void CalendarView::showTodo(Todo *event) 2461void CalendarView::showTodo(Todo *event)
2471{ 2462{
2472 getEventViewerDialog()->setTodo(event); 2463 getEventViewerDialog()->setTodo(event);
2473 getEventViewerDialog()->showMe(); 2464 getEventViewerDialog()->showMe();
2474} 2465}
2475void CalendarView::showJournal( Journal *jour ) 2466void CalendarView::showJournal( Journal *jour )
2476{ 2467{
2477 getEventViewerDialog()->setJournal(jour); 2468 getEventViewerDialog()->setJournal(jour);
2478 getEventViewerDialog()->showMe(); 2469 getEventViewerDialog()->showMe();
2479 2470
2480} 2471}
2481// void CalendarView::todoModified (Todo *event, int changed) 2472// void CalendarView::todoModified (Todo *event, int changed)
2482// { 2473// {
2483// // if (mDialogList.find (event) != mDialogList.end ()) { 2474// // if (mDialogList.find (event) != mDialogList.end ()) {
2484// // kdDebug() << "Todo modified and open" << endl; 2475// // kdDebug() << "Todo modified and open" << endl;
2485// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2476// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2486// // temp->modified (changed); 2477// // temp->modified (changed);
2487 2478
2488// // } 2479// // }
2489 2480
2490// mViewManager->updateView(); 2481// mViewManager->updateView();
2491// } 2482// }
2492 2483
2493void CalendarView::appointment_show() 2484void CalendarView::appointment_show()
2494{ 2485{
2495 Event *anEvent = 0; 2486 Event *anEvent = 0;
2496 2487
2497 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2488 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2498 2489
2499 if (mViewManager->currentView()->isEventView()) { 2490 if (mViewManager->currentView()->isEventView()) {
2500 if ( incidence && incidence->type() == "Event" ) { 2491 if ( incidence && incidence->type() == "Event" ) {
2501 anEvent = static_cast<Event *>(incidence); 2492 anEvent = static_cast<Event *>(incidence);
2502 } 2493 }
2503 } 2494 }
2504 2495
2505 if (!anEvent) { 2496 if (!anEvent) {
2506 KNotifyClient::beep(); 2497 KNotifyClient::beep();
2507 return; 2498 return;
2508 } 2499 }
2509 2500
2510 showEvent(anEvent); 2501 showEvent(anEvent);
2511} 2502}
2512 2503
2513void CalendarView::appointment_edit() 2504void CalendarView::appointment_edit()
2514{ 2505{
2515 Event *anEvent = 0; 2506 Event *anEvent = 0;
2516 2507
2517 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2508 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2518 2509
2519 if (mViewManager->currentView()->isEventView()) { 2510 if (mViewManager->currentView()->isEventView()) {
2520 if ( incidence && incidence->type() == "Event" ) { 2511 if ( incidence && incidence->type() == "Event" ) {
2521 anEvent = static_cast<Event *>(incidence); 2512 anEvent = static_cast<Event *>(incidence);
2522 } 2513 }
2523 } 2514 }
2524 2515
2525 if (!anEvent) { 2516 if (!anEvent) {
2526 KNotifyClient::beep(); 2517 KNotifyClient::beep();
2527 return; 2518 return;
2528 } 2519 }
2529 2520
2530 editEvent(anEvent); 2521 editEvent(anEvent);
2531} 2522}
2532 2523
2533void CalendarView::appointment_delete() 2524void CalendarView::appointment_delete()
2534{ 2525{
2535 Event *anEvent = 0; 2526 Event *anEvent = 0;
2536 2527
2537 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2528 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2538 2529
2539 if (mViewManager->currentView()->isEventView()) { 2530 if (mViewManager->currentView()->isEventView()) {
2540 if ( incidence && incidence->type() == "Event" ) { 2531 if ( incidence && incidence->type() == "Event" ) {
2541 anEvent = static_cast<Event *>(incidence); 2532 anEvent = static_cast<Event *>(incidence);
2542 } 2533 }
2543 } 2534 }
2544 2535
2545 if (!anEvent) { 2536 if (!anEvent) {
2546 KNotifyClient::beep(); 2537 KNotifyClient::beep();
2547 return; 2538 return;
2548 } 2539 }
2549 2540
2550 deleteEvent(anEvent); 2541 deleteEvent(anEvent);
2551} 2542}
2552 2543
2553void CalendarView::todo_unsub(Todo *anTodo ) 2544void CalendarView::todo_unsub(Todo *anTodo )
2554{ 2545{
2555 // Todo *anTodo = selectedTodo(); 2546 // Todo *anTodo = selectedTodo();
2556 if (!anTodo) return; 2547 if (!anTodo) return;
2557 if (!anTodo->relatedTo()) return; 2548 if (!anTodo->relatedTo()) return;
2558 anTodo->relatedTo()->removeRelation(anTodo); 2549 anTodo->relatedTo()->removeRelation(anTodo);
2559 anTodo->setRelatedTo(0); 2550 anTodo->setRelatedTo(0);
2560 anTodo->updated(); 2551 anTodo->updated();
2561 anTodo->setRelatedToUid(""); 2552 anTodo->setRelatedToUid("");
2562 setModified(true); 2553 setModified(true);
2563 updateView(); 2554 updateView();
2564} 2555}
2565 2556
2566void CalendarView::deleteTodo(Todo *todo) 2557void CalendarView::deleteTodo(Todo *todo)
2567{ 2558{
2568 if (!todo) { 2559 if (!todo) {
2569 KNotifyClient::beep(); 2560 KNotifyClient::beep();
2570 return; 2561 return;
2571 } 2562 }
2572 if (KOPrefs::instance()->mConfirm) { 2563 if (KOPrefs::instance()->mConfirm) {
2573 switch (msgItemDelete()) { 2564 switch (msgItemDelete()) {
2574 case KMessageBox::Continue: // OK 2565 case KMessageBox::Continue: // OK
2575 if (!todo->relations().isEmpty()) { 2566 if (!todo->relations().isEmpty()) {
2576 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2567 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2577 i18n("Delete To-Do")); 2568 i18n("Delete To-Do"));
2578 } else { 2569 } else {
2579 checkZaurusId( todo->zaurusId(), true ); 2570 checkExternalId( todo );
2580 calendar()->deleteTodo(todo); 2571 calendar()->deleteTodo(todo);
2581 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2572 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2582 updateView(); 2573 updateView();
2583 } 2574 }
2584 break; 2575 break;
2585 } // switch 2576 } // switch
2586 } else { 2577 } else {
2587 if (!todo->relations().isEmpty()) { 2578 if (!todo->relations().isEmpty()) {
2588 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2579 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2589 i18n("Delete To-Do")); 2580 i18n("Delete To-Do"));
2590 } else { 2581 } else {
2591 checkZaurusId( todo->zaurusId(), true ); 2582 checkExternalId( todo );
2592 mCalendar->deleteTodo(todo); 2583 mCalendar->deleteTodo(todo);
2593 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2584 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2594 updateView(); 2585 updateView();
2595 } 2586 }
2596 } 2587 }
2597 emit updateSearchDialog(); 2588 emit updateSearchDialog();
2598} 2589}
2599void CalendarView::deleteJournal(Journal *jour) 2590void CalendarView::deleteJournal(Journal *jour)
2600{ 2591{
2601 if (!jour) { 2592 if (!jour) {
2602 KNotifyClient::beep(); 2593 KNotifyClient::beep();
2603 return; 2594 return;
2604 } 2595 }
2605 if (KOPrefs::instance()->mConfirm) { 2596 if (KOPrefs::instance()->mConfirm) {
2606 switch (msgItemDelete()) { 2597 switch (msgItemDelete()) {
2607 case KMessageBox::Continue: // OK 2598 case KMessageBox::Continue: // OK
2608 calendar()->deleteJournal(jour); 2599 calendar()->deleteJournal(jour);
2609 updateView(); 2600 updateView();
2610 break; 2601 break;
2611 } // switch 2602 } // switch
2612 } else { 2603 } else {
2613 calendar()->deleteJournal(jour);; 2604 calendar()->deleteJournal(jour);;
2614 updateView(); 2605 updateView();
2615 } 2606 }
2616 emit updateSearchDialog(); 2607 emit updateSearchDialog();
2617} 2608}
2618 2609
2619void CalendarView::deleteEvent(Event *anEvent) 2610void CalendarView::deleteEvent(Event *anEvent)
2620{ 2611{
2621 if (!anEvent) { 2612 if (!anEvent) {
2622 KNotifyClient::beep(); 2613 KNotifyClient::beep();
2623 return; 2614 return;
2624 } 2615 }
2625 2616
2626 if (anEvent->recurrence()->doesRecur()) { 2617 if (anEvent->recurrence()->doesRecur()) {
2627 QDate itemDate = mViewManager->currentSelectionDate(); 2618 QDate itemDate = mViewManager->currentSelectionDate();
2628 int km; 2619 int km;
2629 if (!itemDate.isValid()) { 2620 if (!itemDate.isValid()) {
2630 //kdDebug() << "Date Not Valid" << endl; 2621 //kdDebug() << "Date Not Valid" << endl;
2631 if (KOPrefs::instance()->mConfirm) { 2622 if (KOPrefs::instance()->mConfirm) {
2632 km = KMessageBox::warningContinueCancel(this,anEvent->summary() + 2623 km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
2633 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2624 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2634 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2625 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2635 if ( km == KMessageBox::Continue ) 2626 if ( km == KMessageBox::Continue )
2636 km = KMessageBox::No; // No = all below 2627 km = KMessageBox::No; // No = all below
2637 } else 2628 } else
2638 km = KMessageBox::No; 2629 km = KMessageBox::No;
2639 } else { 2630 } else {
2640 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() + 2631 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
2641 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2632 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2642 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2633 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2643 i18n("KO/Pi Confirmation"),i18n("Current"), 2634 i18n("KO/Pi Confirmation"),i18n("Current"),
2644 i18n("All")); 2635 i18n("All"));
2645 } 2636 }
2646 switch(km) { 2637 switch(km) {
2647 2638
2648 case KMessageBox::No: // Continue // all 2639 case KMessageBox::No: // Continue // all
2649 //qDebug("KMessageBox::No "); 2640 //qDebug("KMessageBox::No ");
2650 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2641 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2651 schedule(Scheduler::Cancel,anEvent); 2642 schedule(Scheduler::Cancel,anEvent);
2652 2643
2653 checkZaurusId( anEvent->zaurusId()); 2644 checkExternalId( anEvent);
2654 mCalendar->deleteEvent(anEvent); 2645 mCalendar->deleteEvent(anEvent);
2655 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2646 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2656 break; 2647 break;
2657 2648
2658 // Disabled because it does not work 2649 // Disabled because it does not work
2659 //#if 0 2650 //#if 0
2660 case KMessageBox::Yes: // just this one 2651 case KMessageBox::Yes: // just this one
2661 //QDate qd = mNavigator->selectedDates().first(); 2652 //QDate qd = mNavigator->selectedDates().first();
2662 //if (!qd.isValid()) { 2653 //if (!qd.isValid()) {
2663 // kdDebug() << "no date selected, or invalid date" << endl; 2654 // kdDebug() << "no date selected, or invalid date" << endl;
2664 // KNotifyClient::beep(); 2655 // KNotifyClient::beep();
2665 // return; 2656 // return;
2666 //} 2657 //}
2667 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2658 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2668 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2659 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2669 anEvent->addExDate(itemDate); 2660 anEvent->addExDate(itemDate);
2670 int duration = anEvent->recurrence()->duration(); 2661 int duration = anEvent->recurrence()->duration();
2671 if ( duration > 0 ) { 2662 if ( duration > 0 ) {
2672 anEvent->recurrence()->setDuration( duration - 1 ); 2663 anEvent->recurrence()->setDuration( duration - 1 );
2673 } 2664 }
2674 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2665 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2675 } 2666 }
2676 break; 2667 break;
2677 //#endif 2668 //#endif
2678 } // switch 2669 } // switch
2679 } else { 2670 } else {
2680 if (KOPrefs::instance()->mConfirm) { 2671 if (KOPrefs::instance()->mConfirm) {
2681 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() + 2672 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
2682 i18n("\nAre you sure you want\nto delete this event?"), 2673 i18n("\nAre you sure you want\nto delete this event?"),
2683 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 2674 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
2684 case KMessageBox::Continue: // OK 2675 case KMessageBox::Continue: // OK
2685 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2676 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2686 schedule(Scheduler::Cancel,anEvent); 2677 schedule(Scheduler::Cancel,anEvent);
2687 checkZaurusId( anEvent->zaurusId()); 2678 checkExternalId( anEvent);
2688 mCalendar->deleteEvent(anEvent); 2679 mCalendar->deleteEvent(anEvent);
2689 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2680 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2690 break; 2681 break;
2691 } // switch 2682 } // switch
2692 } else { 2683 } else {
2693 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2684 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2694 schedule(Scheduler::Cancel,anEvent); 2685 schedule(Scheduler::Cancel,anEvent);
2695 checkZaurusId( anEvent->zaurusId()); 2686 checkExternalId( anEvent);
2696 mCalendar->deleteEvent(anEvent); 2687 mCalendar->deleteEvent(anEvent);
2697 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2688 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2698 } 2689 }
2699 } // if-else 2690 } // if-else
2700 emit updateSearchDialog(); 2691 emit updateSearchDialog();
2701} 2692}
2702 2693
2703bool CalendarView::deleteEvent(const QString &uid) 2694bool CalendarView::deleteEvent(const QString &uid)
2704{ 2695{
2705 Event *ev = mCalendar->event(uid); 2696 Event *ev = mCalendar->event(uid);
2706 if (ev) { 2697 if (ev) {
2707 deleteEvent(ev); 2698 deleteEvent(ev);
2708 return true; 2699 return true;
2709 } else { 2700 } else {
2710 return false; 2701 return false;
2711 } 2702 }
2712} 2703}
2713 2704
2714/*****************************************************************************/ 2705/*****************************************************************************/
2715 2706
2716void CalendarView::action_mail() 2707void CalendarView::action_mail()
2717{ 2708{
2718#ifndef KORG_NOMAIL 2709#ifndef KORG_NOMAIL
2719 KOMailClient mailClient; 2710 KOMailClient mailClient;
2720 2711
2721 Incidence *incidence = currentSelection(); 2712 Incidence *incidence = currentSelection();
2722 2713
2723 if (!incidence) { 2714 if (!incidence) {
2724 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2715 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2725 return; 2716 return;
2726 } 2717 }
2727 if(incidence->attendeeCount() == 0 ) { 2718 if(incidence->attendeeCount() == 0 ) {
2728 KMessageBox::sorry(this, 2719 KMessageBox::sorry(this,
2729 i18n("Can't generate mail:\nNo attendees defined.\n")); 2720 i18n("Can't generate mail:\nNo attendees defined.\n"));
2730 return; 2721 return;
2731 } 2722 }
2732 2723
2733 CalendarLocal cal_tmp; 2724 CalendarLocal cal_tmp;
2734 Event *event = 0; 2725 Event *event = 0;
2735 Event *ev = 0; 2726 Event *ev = 0;
2736 if ( incidence && incidence->type() == "Event" ) { 2727 if ( incidence && incidence->type() == "Event" ) {
2737 event = static_cast<Event *>(incidence); 2728 event = static_cast<Event *>(incidence);
2738 ev = new Event(*event); 2729 ev = new Event(*event);
2739 cal_tmp.addEvent(ev); 2730 cal_tmp.addEvent(ev);
2740 } 2731 }
2741 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave); 2732 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave);
2742 QString attachment = mForm.toString( &cal_tmp ); 2733 QString attachment = mForm.toString( &cal_tmp );
2743 if (ev) delete(ev); 2734 if (ev) delete(ev);
2744 2735
2745 mailClient.mailAttendees(currentSelection(), attachment); 2736 mailClient.mailAttendees(currentSelection(), attachment);
2746 2737
2747#endif 2738#endif
2748 2739
2749#if 0 2740#if 0
2750 Event *anEvent = 0; 2741 Event *anEvent = 0;
2751 if (mViewManager->currentView()->isEventView()) { 2742 if (mViewManager->currentView()->isEventView()) {
2752 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 2743 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
2753 } 2744 }
2754 2745
2755 if (!anEvent) { 2746 if (!anEvent) {
2756 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2747 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2757 return; 2748 return;
2758 } 2749 }
2759 if(anEvent->attendeeCount() == 0 ) { 2750 if(anEvent->attendeeCount() == 0 ) {
2760 KMessageBox::sorry(this, 2751 KMessageBox::sorry(this,
2761 i18n("Can't generate mail:\nNo attendees defined.\n")); 2752 i18n("Can't generate mail:\nNo attendees defined.\n"));
2762 return; 2753 return;
2763 } 2754 }
2764 2755
2765 mailobject.emailEvent(anEvent); 2756 mailobject.emailEvent(anEvent);
2766#endif 2757#endif
2767} 2758}
2768 2759
2769 2760
2770void CalendarView::schedule_publish(Incidence *incidence) 2761void CalendarView::schedule_publish(Incidence *incidence)
2771{ 2762{
2772 Event *event = 0; 2763 Event *event = 0;
2773 Todo *todo = 0; 2764 Todo *todo = 0;
2774 2765
2775 if (incidence == 0) { 2766 if (incidence == 0) {
2776 incidence = mViewManager->currentView()->selectedIncidences().first(); 2767 incidence = mViewManager->currentView()->selectedIncidences().first();
2777 if (incidence == 0) { 2768 if (incidence == 0) {
2778 incidence = mTodoList->selectedIncidences().first(); 2769 incidence = mTodoList->selectedIncidences().first();
2779 } 2770 }
2780 } 2771 }
2781 if ( incidence && incidence->type() == "Event" ) { 2772 if ( incidence && incidence->type() == "Event" ) {
2782 event = static_cast<Event *>(incidence); 2773 event = static_cast<Event *>(incidence);
2783 } else { 2774 } else {
2784 if ( incidence && incidence->type() == "Todo" ) { 2775 if ( incidence && incidence->type() == "Todo" ) {
2785 todo = static_cast<Todo *>(incidence); 2776 todo = static_cast<Todo *>(incidence);
2786 } 2777 }
2787 } 2778 }
2788 2779
2789 if (!event && !todo) { 2780 if (!event && !todo) {
2790 KMessageBox::sorry(this,i18n("No event selected.")); 2781 KMessageBox::sorry(this,i18n("No event selected."));
2791 return; 2782 return;
2792 } 2783 }
2793 2784
2794 PublishDialog *publishdlg = new PublishDialog(); 2785 PublishDialog *publishdlg = new PublishDialog();
2795 if (incidence->attendeeCount()>0) { 2786 if (incidence->attendeeCount()>0) {
2796 QPtrList<Attendee> attendees = incidence->attendees(); 2787 QPtrList<Attendee> attendees = incidence->attendees();
2797 attendees.first(); 2788 attendees.first();
2798 while ( attendees.current()!=0 ) { 2789 while ( attendees.current()!=0 ) {
2799 publishdlg->addAttendee(attendees.current()); 2790 publishdlg->addAttendee(attendees.current());
2800 attendees.next(); 2791 attendees.next();
2801 } 2792 }
2802 } 2793 }
2803 bool send = true; 2794 bool send = true;
2804 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 2795 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
2805 if ( publishdlg->exec() != QDialog::Accepted ) 2796 if ( publishdlg->exec() != QDialog::Accepted )
2806 send = false; 2797 send = false;
2807 } 2798 }
2808 if ( send ) { 2799 if ( send ) {
2809 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2800 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2810 if ( event ) { 2801 if ( event ) {
2811 Event *ev = new Event(*event); 2802 Event *ev = new Event(*event);
2812 ev->registerObserver(0); 2803 ev->registerObserver(0);
2813 ev->clearAttendees(); 2804 ev->clearAttendees();
2814 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2805 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2815 delete(ev); 2806 delete(ev);
2816 } 2807 }
2817 } else { 2808 } else {
2818 if ( todo ) { 2809 if ( todo ) {
2819 Todo *ev = new Todo(*todo); 2810 Todo *ev = new Todo(*todo);
2820 ev->registerObserver(0); 2811 ev->registerObserver(0);
2821 ev->clearAttendees(); 2812 ev->clearAttendees();
2822 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2813 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2823 delete(ev); 2814 delete(ev);
2824 } 2815 }
2825 } 2816 }
2826 } 2817 }
2827 } 2818 }
2828 delete publishdlg; 2819 delete publishdlg;
2829} 2820}
2830 2821
2831void CalendarView::schedule_request(Incidence *incidence) 2822void CalendarView::schedule_request(Incidence *incidence)
2832{ 2823{
2833 schedule(Scheduler::Request,incidence); 2824 schedule(Scheduler::Request,incidence);
2834} 2825}
2835 2826
2836void CalendarView::schedule_refresh(Incidence *incidence) 2827void CalendarView::schedule_refresh(Incidence *incidence)
2837{ 2828{
2838 schedule(Scheduler::Refresh,incidence); 2829 schedule(Scheduler::Refresh,incidence);
2839} 2830}
2840 2831
2841void CalendarView::schedule_cancel(Incidence *incidence) 2832void CalendarView::schedule_cancel(Incidence *incidence)
2842{ 2833{
2843 schedule(Scheduler::Cancel,incidence); 2834 schedule(Scheduler::Cancel,incidence);
2844} 2835}
2845 2836
2846void CalendarView::schedule_add(Incidence *incidence) 2837void CalendarView::schedule_add(Incidence *incidence)
2847{ 2838{
2848 schedule(Scheduler::Add,incidence); 2839 schedule(Scheduler::Add,incidence);
2849} 2840}
2850 2841
2851void CalendarView::schedule_reply(Incidence *incidence) 2842void CalendarView::schedule_reply(Incidence *incidence)
2852{ 2843{
2853 schedule(Scheduler::Reply,incidence); 2844 schedule(Scheduler::Reply,incidence);
2854} 2845}
2855 2846
2856void CalendarView::schedule_counter(Incidence *incidence) 2847void CalendarView::schedule_counter(Incidence *incidence)
2857{ 2848{
2858 schedule(Scheduler::Counter,incidence); 2849 schedule(Scheduler::Counter,incidence);
2859} 2850}
2860 2851
2861void CalendarView::schedule_declinecounter(Incidence *incidence) 2852void CalendarView::schedule_declinecounter(Incidence *incidence)
2862{ 2853{
2863 schedule(Scheduler::Declinecounter,incidence); 2854 schedule(Scheduler::Declinecounter,incidence);
2864} 2855}
2865 2856
2866void CalendarView::schedule_publish_freebusy(int daysToPublish) 2857void CalendarView::schedule_publish_freebusy(int daysToPublish)
2867{ 2858{
2868 QDateTime start = QDateTime::currentDateTime(); 2859 QDateTime start = QDateTime::currentDateTime();
2869 QDateTime end = start.addDays(daysToPublish); 2860 QDateTime end = start.addDays(daysToPublish);
2870 2861
2871 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 2862 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
2872 freebusy->setOrganizer(KOPrefs::instance()->email()); 2863 freebusy->setOrganizer(KOPrefs::instance()->email());
2873 2864
2874 2865
2875 PublishDialog *publishdlg = new PublishDialog(); 2866 PublishDialog *publishdlg = new PublishDialog();
2876 if ( publishdlg->exec() == QDialog::Accepted ) { 2867 if ( publishdlg->exec() == QDialog::Accepted ) {
2877 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2868 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2878 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 2869 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
2879 delete(freebusy); 2870 delete(freebusy);
2880 } 2871 }
2881 } 2872 }
2882 delete publishdlg; 2873 delete publishdlg;
2883} 2874}
2884 2875
2885void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 2876void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
2886{ 2877{
2887 Event *event = 0; 2878 Event *event = 0;
2888 Todo *todo = 0; 2879 Todo *todo = 0;
2889 2880
2890 if (incidence == 0) { 2881 if (incidence == 0) {
2891 incidence = mViewManager->currentView()->selectedIncidences().first(); 2882 incidence = mViewManager->currentView()->selectedIncidences().first();
2892 if (incidence == 0) { 2883 if (incidence == 0) {
2893 incidence = mTodoList->selectedIncidences().first(); 2884 incidence = mTodoList->selectedIncidences().first();
2894 } 2885 }
2895 } 2886 }
2896 if ( incidence && incidence->type() == "Event" ) { 2887 if ( incidence && incidence->type() == "Event" ) {
2897 event = static_cast<Event *>(incidence); 2888 event = static_cast<Event *>(incidence);
2898 } 2889 }
2899 if ( incidence && incidence->type() == "Todo" ) { 2890 if ( incidence && incidence->type() == "Todo" ) {
2900 todo = static_cast<Todo *>(incidence); 2891 todo = static_cast<Todo *>(incidence);
2901 } 2892 }
2902 2893
2903 if (!event && !todo) { 2894 if (!event && !todo) {
2904 KMessageBox::sorry(this,i18n("No event selected.")); 2895 KMessageBox::sorry(this,i18n("No event selected."));
2905 return; 2896 return;
2906 } 2897 }
2907 2898
2908 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 2899 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
2909 KMessageBox::sorry(this,i18n("The event has no attendees.")); 2900 KMessageBox::sorry(this,i18n("The event has no attendees."));
2910 return; 2901 return;
2911 } 2902 }
2912 2903
2913 Event *ev = 0; 2904 Event *ev = 0;
2914 if (event) ev = new Event(*event); 2905 if (event) ev = new Event(*event);
2915 Todo *to = 0; 2906 Todo *to = 0;
2916 if (todo) to = new Todo(*todo); 2907 if (todo) to = new Todo(*todo);
2917 2908
2918 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 2909 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
2919 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 2910 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
2920 if (!me) { 2911 if (!me) {
2921 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 2912 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
2922 return; 2913 return;
2923 } 2914 }
2924 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 2915 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
2925 StatusDialog *statdlg = new StatusDialog(this); 2916 StatusDialog *statdlg = new StatusDialog(this);
2926 if (!statdlg->exec()==QDialog::Accepted) return; 2917 if (!statdlg->exec()==QDialog::Accepted) return;
2927 me->setStatus( statdlg->status() ); 2918 me->setStatus( statdlg->status() );
2928 delete(statdlg); 2919 delete(statdlg);
2929 } 2920 }
2930 Attendee *menew = new Attendee(*me); 2921 Attendee *menew = new Attendee(*me);
2931 if (ev) { 2922 if (ev) {
2932 ev->clearAttendees(); 2923 ev->clearAttendees();
2933 ev->addAttendee(menew,false); 2924 ev->addAttendee(menew,false);
2934 } else { 2925 } else {
2935 if (to) { 2926 if (to) {
2936 todo->clearAttendees(); 2927 todo->clearAttendees();
2937 todo->addAttendee(menew,false); 2928 todo->addAttendee(menew,false);
2938 } 2929 }
2939 } 2930 }
2940 } 2931 }
2941 2932
2942 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2933 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2943 if (ev) { 2934 if (ev) {
2944 if ( !dlg->addMessage(ev,method) ) delete(ev); 2935 if ( !dlg->addMessage(ev,method) ) delete(ev);
2945 } else { 2936 } else {
2946 if (to) { 2937 if (to) {
2947 if ( !dlg->addMessage(to,method) ) delete(to); 2938 if ( !dlg->addMessage(to,method) ) delete(to);
2948 } 2939 }
2949 } 2940 }
2950} 2941}
2951 2942
2952void CalendarView::openAddressbook() 2943void CalendarView::openAddressbook()
2953{ 2944{
2954 KRun::runCommand("kaddressbook"); 2945 KRun::runCommand("kaddressbook");
2955} 2946}
2956 2947
2957void CalendarView::setModified(bool modified) 2948void CalendarView::setModified(bool modified)
2958{ 2949{
2959 if ( modified ) 2950 if ( modified )
2960 emit signalmodified(); 2951 emit signalmodified();
2961 if (mModified != modified) { 2952 if (mModified != modified) {
2962 mModified = modified; 2953 mModified = modified;
2963 emit modifiedChanged(mModified); 2954 emit modifiedChanged(mModified);
2964 } 2955 }
2965} 2956}
2966 2957
2967bool CalendarView::isReadOnly() 2958bool CalendarView::isReadOnly()
2968{ 2959{
2969 return mReadOnly; 2960 return mReadOnly;
2970} 2961}
2971 2962
2972void CalendarView::setReadOnly(bool readOnly) 2963void CalendarView::setReadOnly(bool readOnly)
2973{ 2964{
2974 if (mReadOnly != readOnly) { 2965 if (mReadOnly != readOnly) {
2975 mReadOnly = readOnly; 2966 mReadOnly = readOnly;
2976 emit readOnlyChanged(mReadOnly); 2967 emit readOnlyChanged(mReadOnly);
2977 } 2968 }
2978} 2969}
2979 2970
2980bool CalendarView::isModified() 2971bool CalendarView::isModified()
2981{ 2972{
2982 return mModified; 2973 return mModified;
2983} 2974}
2984 2975
2985void CalendarView::printSetup() 2976void CalendarView::printSetup()
2986{ 2977{
2987#ifndef KORG_NOPRINTER 2978#ifndef KORG_NOPRINTER
2988 createPrinter(); 2979 createPrinter();
2989 2980
2990 mCalPrinter->setupPrinter(); 2981 mCalPrinter->setupPrinter();
2991#endif 2982#endif
2992} 2983}
2993 2984
2994void CalendarView::print() 2985void CalendarView::print()
2995{ 2986{
2996#ifndef KORG_NOPRINTER 2987#ifndef KORG_NOPRINTER
2997 createPrinter(); 2988 createPrinter();
2998 2989
2999 DateList tmpDateList = mNavigator->selectedDates(); 2990 DateList tmpDateList = mNavigator->selectedDates();
3000 mCalPrinter->print(CalPrinter::Month, 2991 mCalPrinter->print(CalPrinter::Month,
3001 tmpDateList.first(), tmpDateList.last()); 2992 tmpDateList.first(), tmpDateList.last());
3002#endif 2993#endif
3003} 2994}
3004 2995
3005void CalendarView::printPreview() 2996void CalendarView::printPreview()
3006{ 2997{
3007#ifndef KORG_NOPRINTER 2998#ifndef KORG_NOPRINTER
3008 kdDebug() << "CalendarView::printPreview()" << endl; 2999 kdDebug() << "CalendarView::printPreview()" << endl;
3009 3000
3010 createPrinter(); 3001 createPrinter();
3011 3002
3012 DateList tmpDateList = mNavigator->selectedDates(); 3003 DateList tmpDateList = mNavigator->selectedDates();
3013 3004
3014 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3005 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3015 tmpDateList.last()); 3006 tmpDateList.last());
3016#endif 3007#endif
3017} 3008}
3018 3009
3019void CalendarView::exportICalendar() 3010void CalendarView::exportICalendar()
3020{ 3011{
3021 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3012 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3022 3013
3023 // Force correct extension 3014 // Force correct extension
3024 if (filename.right(4) != ".ics") filename += ".ics"; 3015 if (filename.right(4) != ".ics") filename += ".ics";
3025 3016
3026 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3017 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3027 storage.save(); 3018 storage.save();
3028} 3019}
3029 3020
3030bool CalendarView::exportVCalendar( QString filename ) 3021bool CalendarView::exportVCalendar( QString filename )
3031{ 3022{
3032 if (mCalendar->journals().count() > 0) { 3023 if (mCalendar->journals().count() > 0) {
3033 int result = KMessageBox::warningContinueCancel(this, 3024 int result = KMessageBox::warningContinueCancel(this,
3034 i18n("The journal entries can not be\nexported to a vCalendar file."), 3025 i18n("The journal entries can not be\nexported to a vCalendar file."),
3035 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3026 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3036 true); 3027 true);
3037 if (result != KMessageBox::Continue) return false; 3028 if (result != KMessageBox::Continue) return false;
3038 } 3029 }
3039 3030
3040 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3031 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3041 3032
3042 // Force correct extension 3033 // Force correct extension
3043 if (filename.right(4) != ".vcs") filename += ".vcs"; 3034 if (filename.right(4) != ".vcs") filename += ".vcs";
3044 3035
3045 FileStorage storage( mCalendar, filename, new VCalFormat ); 3036 FileStorage storage( mCalendar, filename, new VCalFormat );
3046 return storage.save(); 3037 return storage.save();
3047 3038
3048} 3039}
3049 3040
3050void CalendarView::eventUpdated(Incidence *) 3041void CalendarView::eventUpdated(Incidence *)
3051{ 3042{
3052 setModified(); 3043 setModified();
3053 // Don't call updateView here. The code, which has caused the update of the 3044 // Don't call updateView here. The code, which has caused the update of the
3054 // event is responsible for updating the view. 3045 // event is responsible for updating the view.
3055 // updateView(); 3046 // updateView();
3056} 3047}
3057 3048
3058void CalendarView::adaptNavigationUnits() 3049void CalendarView::adaptNavigationUnits()
3059{ 3050{
3060 if (mViewManager->currentView()->isEventView()) { 3051 if (mViewManager->currentView()->isEventView()) {
3061 int days = mViewManager->currentView()->currentDateCount(); 3052 int days = mViewManager->currentView()->currentDateCount();
3062 if (days == 1) { 3053 if (days == 1) {
3063 emit changeNavStringPrev(i18n("&Previous Day")); 3054 emit changeNavStringPrev(i18n("&Previous Day"));
3064 emit changeNavStringNext(i18n("&Next Day")); 3055 emit changeNavStringNext(i18n("&Next Day"));
3065 } else { 3056 } else {
3066 emit changeNavStringPrev(i18n("&Previous Week")); 3057 emit changeNavStringPrev(i18n("&Previous Week"));
3067 emit changeNavStringNext(i18n("&Next Week")); 3058 emit changeNavStringNext(i18n("&Next Week"));
3068 } 3059 }
3069 } 3060 }
3070} 3061}
3071 3062
3072void CalendarView::processMainViewSelection( Incidence *incidence ) 3063void CalendarView::processMainViewSelection( Incidence *incidence )
3073{ 3064{
3074 if ( incidence ) mTodoList->clearSelection(); 3065 if ( incidence ) mTodoList->clearSelection();
3075 processIncidenceSelection( incidence ); 3066 processIncidenceSelection( incidence );
3076} 3067}
3077 3068
3078void CalendarView::processTodoListSelection( Incidence *incidence ) 3069void CalendarView::processTodoListSelection( Incidence *incidence )
3079{ 3070{
3080 if ( incidence && mViewManager->currentView() ) { 3071 if ( incidence && mViewManager->currentView() ) {
3081 mViewManager->currentView()->clearSelection(); 3072 mViewManager->currentView()->clearSelection();
3082 } 3073 }
3083 processIncidenceSelection( incidence ); 3074 processIncidenceSelection( incidence );
3084} 3075}
3085 3076
3086void CalendarView::processIncidenceSelection( Incidence *incidence ) 3077void CalendarView::processIncidenceSelection( Incidence *incidence )
3087{ 3078{
3088 if ( incidence == mSelectedIncidence ) return; 3079 if ( incidence == mSelectedIncidence ) return;
3089 3080
3090 mSelectedIncidence = incidence; 3081 mSelectedIncidence = incidence;
3091 3082
3092 emit incidenceSelected( mSelectedIncidence ); 3083 emit incidenceSelected( mSelectedIncidence );
3093 3084
3094 if ( incidence && incidence->type() == "Event" ) { 3085 if ( incidence && incidence->type() == "Event" ) {
3095 Event *event = static_cast<Event *>( incidence ); 3086 Event *event = static_cast<Event *>( incidence );
3096 if ( event->organizer() == KOPrefs::instance()->email() ) { 3087 if ( event->organizer() == KOPrefs::instance()->email() ) {
3097 emit organizerEventsSelected( true ); 3088 emit organizerEventsSelected( true );
3098 } else { 3089 } else {
3099 emit organizerEventsSelected(false); 3090 emit organizerEventsSelected(false);
3100 } 3091 }
3101 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3092 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3102 KOPrefs::instance()->email() ) ) { 3093 KOPrefs::instance()->email() ) ) {
3103 emit groupEventsSelected( true ); 3094 emit groupEventsSelected( true );
3104 } else { 3095 } else {
3105 emit groupEventsSelected(false); 3096 emit groupEventsSelected(false);
3106 } 3097 }
3107 return; 3098 return;
3108 } else { 3099 } else {
3109 if ( incidence && incidence->type() == "Todo" ) { 3100 if ( incidence && incidence->type() == "Todo" ) {
3110 emit todoSelected( true ); 3101 emit todoSelected( true );
3111 Todo *event = static_cast<Todo *>( incidence ); 3102 Todo *event = static_cast<Todo *>( incidence );
3112 if ( event->organizer() == KOPrefs::instance()->email() ) { 3103 if ( event->organizer() == KOPrefs::instance()->email() ) {
3113 emit organizerEventsSelected( true ); 3104 emit organizerEventsSelected( true );
3114 } else { 3105 } else {
3115 emit organizerEventsSelected(false); 3106 emit organizerEventsSelected(false);
3116 } 3107 }
3117 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3108 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3118 KOPrefs::instance()->email() ) ) { 3109 KOPrefs::instance()->email() ) ) {
3119 emit groupEventsSelected( true ); 3110 emit groupEventsSelected( true );
3120 } else { 3111 } else {
3121 emit groupEventsSelected(false); 3112 emit groupEventsSelected(false);
3122 } 3113 }
3123 return; 3114 return;
3124 } else { 3115 } else {
3125 emit todoSelected( false ); 3116 emit todoSelected( false );
3126 emit organizerEventsSelected(false); 3117 emit organizerEventsSelected(false);
3127 emit groupEventsSelected(false); 3118 emit groupEventsSelected(false);
3128 } 3119 }
3129 return; 3120 return;
3130 } 3121 }
3131 3122
3132 /* if ( incidence && incidence->type() == "Todo" ) { 3123 /* if ( incidence && incidence->type() == "Todo" ) {
3133 emit todoSelected( true ); 3124 emit todoSelected( true );
3134 } else { 3125 } else {
3135 emit todoSelected( false ); 3126 emit todoSelected( false );
3136 }*/ 3127 }*/
3137} 3128}
3138 3129
3139 3130
3140void CalendarView::checkClipboard() 3131void CalendarView::checkClipboard()
3141{ 3132{
3142#ifndef KORG_NODND 3133#ifndef KORG_NODND
3143 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3134 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3144 emit pasteEnabled(true); 3135 emit pasteEnabled(true);
3145 } else { 3136 } else {
3146 emit pasteEnabled(false); 3137 emit pasteEnabled(false);
3147 } 3138 }
3148#endif 3139#endif
3149} 3140}
3150 3141
3151void CalendarView::showDates(const DateList &selectedDates) 3142void CalendarView::showDates(const DateList &selectedDates)
3152{ 3143{
3153 // kdDebug() << "CalendarView::selectDates()" << endl; 3144 // kdDebug() << "CalendarView::selectDates()" << endl;
3154 3145
3155 if ( mViewManager->currentView() ) { 3146 if ( mViewManager->currentView() ) {
3156 updateView( selectedDates.first(), selectedDates.last() ); 3147 updateView( selectedDates.first(), selectedDates.last() );
3157 } else { 3148 } else {
3158 mViewManager->showAgendaView(); 3149 mViewManager->showAgendaView();
3159 } 3150 }
3160 3151
3161 QString selDates; 3152 QString selDates;
3162 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3153 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3163 if (selectedDates.first() < selectedDates.last() ) 3154 if (selectedDates.first() < selectedDates.last() )
3164 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3155 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3165 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3156 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3166 3157
3167} 3158}
3168 3159
3169void CalendarView::editFilters() 3160void CalendarView::editFilters()
3170{ 3161{
3171 // kdDebug() << "CalendarView::editFilters()" << endl; 3162 // kdDebug() << "CalendarView::editFilters()" << endl;
3172 3163
3173 CalFilter *filter = mFilters.first(); 3164 CalFilter *filter = mFilters.first();
3174 while(filter) { 3165 while(filter) {
3175 kdDebug() << " Filter: " << filter->name() << endl; 3166 kdDebug() << " Filter: " << filter->name() << endl;
3176 filter = mFilters.next(); 3167 filter = mFilters.next();
3177 } 3168 }
3178 3169
3179 mDialogManager->showFilterEditDialog(&mFilters); 3170 mDialogManager->showFilterEditDialog(&mFilters);
3180} 3171}
3181void CalendarView::toggleFilter() 3172void CalendarView::toggleFilter()
3182{ 3173{
3183 showFilter(! mFilterView->isVisible()); 3174 showFilter(! mFilterView->isVisible());
3184} 3175}
3185 3176
3186void CalendarView::selectFilter( int fil ) 3177void CalendarView::selectFilter( int fil )
3187{ 3178{
3188 mFilterView->setSelectedFilter( fil ); 3179 mFilterView->setSelectedFilter( fil );
3189} 3180}
3190void CalendarView::showFilter(bool visible) 3181void CalendarView::showFilter(bool visible)
3191{ 3182{
3192 if (visible) mFilterView->show(); 3183 if (visible) mFilterView->show();
3193 else mFilterView->hide(); 3184 else mFilterView->hide();
3194} 3185}
3195void CalendarView::toggleFilerEnabled( ) 3186void CalendarView::toggleFilerEnabled( )
3196{ 3187{
3197 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3188 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3198 if ( !mFilterView->filtersEnabled() ) 3189 if ( !mFilterView->filtersEnabled() )
3199 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3190 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3200 3191
3201} 3192}
3202void CalendarView::updateFilter() 3193void CalendarView::updateFilter()
3203{ 3194{
3204 CalFilter *filter = mFilterView->selectedFilter(); 3195 CalFilter *filter = mFilterView->selectedFilter();
3205 if (filter) { 3196 if (filter) {
3206 if (mFilterView->filtersEnabled()) { 3197 if (mFilterView->filtersEnabled()) {
3207 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3198 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3208 filter->setEnabled(true); 3199 filter->setEnabled(true);
3209 } 3200 }
3210 else filter->setEnabled(false); 3201 else filter->setEnabled(false);
3211 mCalendar->setFilter(filter); 3202 mCalendar->setFilter(filter);
3212 updateView(); 3203 updateView();
3213 } 3204 }
3214} 3205}
3215 3206
3216void CalendarView::filterEdited() 3207void CalendarView::filterEdited()
3217{ 3208{
3218 mFilterView->updateFilters(); 3209 mFilterView->updateFilters();
3219 updateFilter(); 3210 updateFilter();
3220 writeSettings(); 3211 writeSettings();
3221} 3212}
3222 3213
3223 3214
3224void CalendarView::takeOverEvent() 3215void CalendarView::takeOverEvent()
3225{ 3216{
3226 Incidence *incidence = currentSelection(); 3217 Incidence *incidence = currentSelection();
3227 3218
3228 if (!incidence) return; 3219 if (!incidence) return;
3229 3220
3230 incidence->setOrganizer(KOPrefs::instance()->email()); 3221 incidence->setOrganizer(KOPrefs::instance()->email());
3231 incidence->recreate(); 3222 incidence->recreate();
3232 incidence->setReadOnly(false); 3223 incidence->setReadOnly(false);
3233 3224
3234 updateView(); 3225 updateView();
3235} 3226}
3236 3227
3237void CalendarView::takeOverCalendar() 3228void CalendarView::takeOverCalendar()
3238{ 3229{
3239 // TODO: Create Calendar::allIncidences() function and use it here 3230 // TODO: Create Calendar::allIncidences() function and use it here
3240 3231
3241 QPtrList<Event> events = mCalendar->events(); 3232 QPtrList<Event> events = mCalendar->events();
3242 for(uint i=0; i<events.count(); ++i) { 3233 for(uint i=0; i<events.count(); ++i) {
3243 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3234 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3244 events.at(i)->recreate(); 3235 events.at(i)->recreate();
3245 events.at(i)->setReadOnly(false); 3236 events.at(i)->setReadOnly(false);
3246 } 3237 }
3247 3238
3248 QPtrList<Todo> todos = mCalendar->todos(); 3239 QPtrList<Todo> todos = mCalendar->todos();
3249 for(uint i=0; i<todos.count(); ++i) { 3240 for(uint i=0; i<todos.count(); ++i) {
3250 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3241 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3251 todos.at(i)->recreate(); 3242 todos.at(i)->recreate();
3252 todos.at(i)->setReadOnly(false); 3243 todos.at(i)->setReadOnly(false);
3253 } 3244 }
3254 3245
3255 QPtrList<Journal> journals = mCalendar->journals(); 3246 QPtrList<Journal> journals = mCalendar->journals();
3256 for(uint i=0; i<journals.count(); ++i) { 3247 for(uint i=0; i<journals.count(); ++i) {
3257 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3248 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3258 journals.at(i)->recreate(); 3249 journals.at(i)->recreate();
3259 journals.at(i)->setReadOnly(false); 3250 journals.at(i)->setReadOnly(false);
3260 } 3251 }
3261 3252
3262 updateView(); 3253 updateView();
3263} 3254}
3264 3255
3265void CalendarView::showIntro() 3256void CalendarView::showIntro()
3266{ 3257{
3267 kdDebug() << "To be implemented." << endl; 3258 kdDebug() << "To be implemented." << endl;
3268} 3259}
3269 3260
3270QWidgetStack *CalendarView::viewStack() 3261QWidgetStack *CalendarView::viewStack()
3271{ 3262{
3272 return mRightFrame; 3263 return mRightFrame;
3273} 3264}
3274 3265
3275QWidget *CalendarView::leftFrame() 3266QWidget *CalendarView::leftFrame()
3276{ 3267{
3277 return mLeftFrame; 3268 return mLeftFrame;
3278} 3269}
3279 3270
3280DateNavigator *CalendarView::dateNavigator() 3271DateNavigator *CalendarView::dateNavigator()
3281{ 3272{
3282 return mNavigator; 3273 return mNavigator;
3283} 3274}
3284 3275
3285KDateNavigator* CalendarView::dateNavigatorWidget() 3276KDateNavigator* CalendarView::dateNavigatorWidget()
3286{ 3277{
3287 return mDateNavigator; 3278 return mDateNavigator;
3288} 3279}
3289void CalendarView::toggleDateNavigatorWidget() 3280void CalendarView::toggleDateNavigatorWidget()
3290{ 3281{
3291 if (mDateNavigator->isVisible()) 3282 if (mDateNavigator->isVisible())
3292 mDateNavigator->hide(); 3283 mDateNavigator->hide();
3293 else 3284 else
3294 mDateNavigator->show(); 3285 mDateNavigator->show();
3295} 3286}
3296void CalendarView::addView(KOrg::BaseView *view) 3287void CalendarView::addView(KOrg::BaseView *view)
3297{ 3288{
3298 mViewManager->addView(view); 3289 mViewManager->addView(view);
3299} 3290}
3300 3291
3301void CalendarView::showView(KOrg::BaseView *view) 3292void CalendarView::showView(KOrg::BaseView *view)
3302{ 3293{
3303 mViewManager->showView(view, mLeftFrame->isVisible()); 3294 mViewManager->showView(view, mLeftFrame->isVisible());
3304} 3295}
3305 3296
3306Incidence *CalendarView::currentSelection() 3297Incidence *CalendarView::currentSelection()
3307{ 3298{
3308 return mViewManager->currentSelection(); 3299 return mViewManager->currentSelection();
3309} 3300}
3310void CalendarView::toggleAllDaySize() 3301void CalendarView::toggleAllDaySize()
3311{ 3302{
3312 /* 3303 /*
3313 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3304 if ( KOPrefs::instance()->mAllDaySize > 47 )
3314 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3305 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3315 else 3306 else
3316 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3307 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3317 */ 3308 */
3318 viewManager()->agendaView()->toggleAllDay(); 3309 viewManager()->agendaView()->toggleAllDay();
3319} 3310}
3320void CalendarView::toggleExpand() 3311void CalendarView::toggleExpand()
3321{ 3312{
3322 // if ( mLeftFrame->isHidden() ) { 3313 // if ( mLeftFrame->isHidden() ) {
3323 // mLeftFrame->show(); 3314 // mLeftFrame->show();
3324 // emit calendarViewExpanded( false ); 3315 // emit calendarViewExpanded( false );
3325 // } else { 3316 // } else {
3326 // mLeftFrame->hide(); 3317 // mLeftFrame->hide();
3327 // emit calendarViewExpanded( true ); 3318 // emit calendarViewExpanded( true );
3328 // } 3319 // }
3329 3320
3330 globalFlagBlockAgenda = 1; 3321 globalFlagBlockAgenda = 1;
3331 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3322 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3332 globalFlagBlockAgenda = 5; 3323 globalFlagBlockAgenda = 5;
3333 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3324 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3334 //mViewManager->showView( 0, true ); 3325 //mViewManager->showView( 0, true );
3335} 3326}
3336 3327
3337void CalendarView::calendarModified( bool modified, Calendar * ) 3328void CalendarView::calendarModified( bool modified, Calendar * )
3338{ 3329{
3339 setModified( modified ); 3330 setModified( modified );
3340} 3331}
3341 3332
3342Todo *CalendarView::selectedTodo() 3333Todo *CalendarView::selectedTodo()
3343{ 3334{
3344 Incidence *incidence = currentSelection(); 3335 Incidence *incidence = currentSelection();
3345 if ( incidence && incidence->type() == "Todo" ) { 3336 if ( incidence && incidence->type() == "Todo" ) {
3346 return static_cast<Todo *>( incidence ); 3337 return static_cast<Todo *>( incidence );
3347 } 3338 }
3348 3339
3349 incidence = mTodoList->selectedIncidences().first(); 3340 incidence = mTodoList->selectedIncidences().first();
3350 if ( incidence && incidence->type() == "Todo" ) { 3341 if ( incidence && incidence->type() == "Todo" ) {
3351 return static_cast<Todo *>( incidence ); 3342 return static_cast<Todo *>( incidence );
3352 } 3343 }
3353 3344
3354 return 0; 3345 return 0;
3355} 3346}
3356 3347
3357void CalendarView::dialogClosing(Incidence *in) 3348void CalendarView::dialogClosing(Incidence *in)
3358{ 3349{
3359 // mDialogList.remove(in); 3350 // mDialogList.remove(in);
3360} 3351}
3361 3352
3362void CalendarView::showIncidence() 3353void CalendarView::showIncidence()
3363{ 3354{
3364 Incidence *incidence = currentSelection(); 3355 Incidence *incidence = currentSelection();
3365 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3356 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3366 if ( incidence ) { 3357 if ( incidence ) {
3367 ShowIncidenceVisitor v; 3358 ShowIncidenceVisitor v;
3368 v.act( incidence, this ); 3359 v.act( incidence, this );
3369 } 3360 }
3370} 3361}
3371void CalendarView::editIncidenceDescription() 3362void CalendarView::editIncidenceDescription()
3372{ 3363{
3373 mFlagEditDescription = true; 3364 mFlagEditDescription = true;
3374 editIncidence(); 3365 editIncidence();
3375 mFlagEditDescription = false; 3366 mFlagEditDescription = false;
3376} 3367}
3377void CalendarView::editIncidence() 3368void CalendarView::editIncidence()
3378{ 3369{
3379 // qDebug("editIncidence() "); 3370 // qDebug("editIncidence() ");
3380 Incidence *incidence = currentSelection(); 3371 Incidence *incidence = currentSelection();
3381 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3372 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3382 if ( incidence ) { 3373 if ( incidence ) {
3383 EditIncidenceVisitor v; 3374 EditIncidenceVisitor v;
3384 v.act( incidence, this ); 3375 v.act( incidence, this );
3385 } 3376 }
3386} 3377}
3387 3378
3388void CalendarView::deleteIncidence() 3379void CalendarView::deleteIncidence()
3389{ 3380{
3390 Incidence *incidence = currentSelection(); 3381 Incidence *incidence = currentSelection();
3391 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3382 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3392 if ( incidence ) { 3383 if ( incidence ) {
3393 deleteIncidence(incidence); 3384 deleteIncidence(incidence);
3394 } 3385 }
3395} 3386}
3396 3387
3397void CalendarView::showIncidence(Incidence *incidence) 3388void CalendarView::showIncidence(Incidence *incidence)
3398{ 3389{
3399 if ( incidence ) { 3390 if ( incidence ) {
3400 ShowIncidenceVisitor v; 3391 ShowIncidenceVisitor v;
3401 v.act( incidence, this ); 3392 v.act( incidence, this );
3402 } 3393 }
3403} 3394}
3404 3395
3405void CalendarView::editIncidence(Incidence *incidence) 3396void CalendarView::editIncidence(Incidence *incidence)
3406{ 3397{
3407 if ( incidence ) { 3398 if ( incidence ) {
3408 3399
3409 EditIncidenceVisitor v; 3400 EditIncidenceVisitor v;
3410 v.act( incidence, this ); 3401 v.act( incidence, this );
3411 3402
3412 } 3403 }
3413} 3404}
3414 3405
3415void CalendarView::deleteIncidence(Incidence *incidence) 3406void CalendarView::deleteIncidence(Incidence *incidence)
3416{ 3407{
3417 //qDebug(" CalendarView::deleteIncidence "); 3408 //qDebug(" CalendarView::deleteIncidence ");
3418 if ( incidence ) { 3409 if ( incidence ) {
3419 DeleteIncidenceVisitor v; 3410 DeleteIncidenceVisitor v;
3420 v.act( incidence, this ); 3411 v.act( incidence, this );
3421 } 3412 }
3422} 3413}
3423 3414
3424 3415
3425void CalendarView::lookForOutgoingMessages() 3416void CalendarView::lookForOutgoingMessages()
3426{ 3417{
3427 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3418 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3428 ogd->loadMessages(); 3419 ogd->loadMessages();
3429} 3420}
3430 3421
3431void CalendarView::lookForIncomingMessages() 3422void CalendarView::lookForIncomingMessages()
3432{ 3423{
3433 IncomingDialog *icd = mDialogManager->incomingDialog(); 3424 IncomingDialog *icd = mDialogManager->incomingDialog();
3434 icd->retrieve(); 3425 icd->retrieve();
3435} 3426}
3436 3427
3437bool CalendarView::removeCompletedSubTodos( Todo* t ) 3428bool CalendarView::removeCompletedSubTodos( Todo* t )
3438{ 3429{
3439 bool deleteTodo = true; 3430 bool deleteTodo = true;
3440 QPtrList<Incidence> subTodos; 3431 QPtrList<Incidence> subTodos;
3441 Incidence *aTodo; 3432 Incidence *aTodo;
3442 subTodos = t->relations(); 3433 subTodos = t->relations();
3443 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3434 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3444 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3435 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3445 deleteTodo = false; 3436 deleteTodo = false;
3446 } 3437 }
3447 if ( deleteTodo ) { 3438 if ( deleteTodo ) {
3448 if ( t->isCompleted() ) { 3439 if ( t->isCompleted() ) {
3449 checkZaurusId( t->zaurusId(), true ); 3440 checkExternalId( t );
3450 mCalendar->deleteTodo( t ); 3441 mCalendar->deleteTodo( t );
3451 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3442 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3452 } 3443 }
3453 else 3444 else
3454 deleteTodo = false; 3445 deleteTodo = false;
3455 } 3446 }
3456 return deleteTodo; 3447 return deleteTodo;
3457 3448
3458} 3449}
3459void CalendarView::purgeCompleted() 3450void CalendarView::purgeCompleted()
3460{ 3451{
3461 int result = KMessageBox::warningContinueCancel(this, 3452 int result = KMessageBox::warningContinueCancel(this,
3462 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3453 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3463 3454
3464 if (result == KMessageBox::Continue) { 3455 if (result == KMessageBox::Continue) {
3465 3456
3466 QPtrList<Todo> todoCal; 3457 QPtrList<Todo> todoCal;
3467 QPtrList<Todo> rootTodos; 3458 QPtrList<Todo> rootTodos;
3468 //QPtrList<Incidence> rel; 3459 //QPtrList<Incidence> rel;
3469 Todo *aTodo;//, *rTodo; 3460 Todo *aTodo;//, *rTodo;
3470 Incidence *rIncidence; 3461 Incidence *rIncidence;
3471 bool childDelete = false; 3462 bool childDelete = false;
3472 bool deletedOne = true; 3463 bool deletedOne = true;
3473 todoCal = calendar()->todos(); 3464 todoCal = calendar()->todos();
3474 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3465 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3475 if ( !aTodo->relatedTo() ) 3466 if ( !aTodo->relatedTo() )
3476 rootTodos.append( aTodo ); 3467 rootTodos.append( aTodo );
3477 } 3468 }
3478 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3469 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3479 removeCompletedSubTodos( aTodo ); 3470 removeCompletedSubTodos( aTodo );
3480 } 3471 }
3481 3472
3482 updateView(); 3473 updateView();
3483 } 3474 }
3484} 3475}
3485 3476
3486void CalendarView::slotCalendarChanged() 3477void CalendarView::slotCalendarChanged()
3487{ 3478{
3488 ; 3479 ;
3489} 3480}
3490 3481
3491NavigatorBar *CalendarView::navigatorBar() 3482NavigatorBar *CalendarView::navigatorBar()
3492{ 3483{
3493 return mNavigatorBar; 3484 return mNavigatorBar;
3494} 3485}
3495 3486
3496 3487
3497 3488
3498void CalendarView::keyPressEvent ( QKeyEvent *e) 3489void CalendarView::keyPressEvent ( QKeyEvent *e)
3499{ 3490{
3500 //qDebug(" alendarView::keyPressEvent "); 3491 //qDebug(" alendarView::keyPressEvent ");
3501 e->ignore(); 3492 e->ignore();
3502} 3493}
3503 3494
3504//#include "calendarview.moc" 3495//#include "calendarview.moc"
3505 3496
3506//#include "calendarviewbase.moc" 3497//#include "calendarviewbase.moc"
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 557554f..f7a1213 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,587 +1,587 @@
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#ifndef DESKTOP_VERSION 33#ifndef DESKTOP_VERSION
34#include <qtopia/ir.h> 34#include <qtopia/ir.h>
35#else 35#else
36#define Ir char 36#define Ir char
37#endif 37#endif
38#include <libkcal/calendar.h> 38#include <libkcal/calendar.h>
39#include <libkcal/scheduler.h> 39#include <libkcal/scheduler.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42 42
43#include <korganizer/calendarviewbase.h> 43#include <korganizer/calendarviewbase.h>
44 44
45class QWidgetStack; 45class QWidgetStack;
46class QSplitter; 46class QSplitter;
47 47
48class CalPrinter; 48class CalPrinter;
49class KOFilterView; 49class KOFilterView;
50class KOViewManager; 50class KOViewManager;
51class KODialogManager; 51class KODialogManager;
52class KOTodoView; 52class KOTodoView;
53class KDateNavigator; 53class KDateNavigator;
54class DateNavigator; 54class DateNavigator;
55class KOIncidenceEditor; 55class KOIncidenceEditor;
56class KDatePicker; 56class KDatePicker;
57class ResourceView; 57class ResourceView;
58class NavigatorBar; 58class NavigatorBar;
59class KOEventEditor; 59class KOEventEditor;
60class KOTodoEditor ; 60class KOTodoEditor ;
61class KOEventViewerDialog; 61class KOEventViewerDialog;
62class KOBeamPrefs; 62class KOBeamPrefs;
63class KSyncProfile; 63class KSyncProfile;
64class AlarmDialog; 64class AlarmDialog;
65class KCal::Attendee; 65class KCal::Attendee;
66 66
67namespace KCal { class FileStorage; } 67namespace KCal { class FileStorage; }
68 68
69using namespace KCal; 69using namespace KCal;
70 70
71/** 71/**
72 This is the main calendar widget. It provides the different vies on t he 72 This is the main calendar widget. It provides the different vies on t he
73 calendar data as well as the date navigator. It also handles synchronisation 73 calendar data as well as the date navigator. It also handles synchronisation
74 of the different views and controls the different dialogs like preferences, 74 of the different views and controls the different dialogs like preferences,
75 event editor, search dialog etc. 75 event editor, search dialog etc.
76 76
77 @short main calendar view widget 77 @short main calendar view widget
78 @author Cornelius Schumacher 78 @author Cornelius Schumacher
79*/ 79*/
80class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer 80class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer
81{ 81{
82 Q_OBJECT 82 Q_OBJECT
83 public: 83 public:
84 /** 84 /**
85 Constructs a new calendar view widget. 85 Constructs a new calendar view widget.
86 86
87 @param calendar calendar document 87 @param calendar calendar document
88 @param parent parent window 88 @param parent parent window
89 @param name Qt internal widget object name 89 @param name Qt internal widget object name
90 */ 90 */
91 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 91 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
92 const char *name = 0 ); 92 const char *name = 0 );
93 CalendarView( Calendar *calendar, QWidget *parent = 0, 93 CalendarView( Calendar *calendar, QWidget *parent = 0,
94 const char *name = 0 ); 94 const char *name = 0 );
95 virtual ~CalendarView(); 95 virtual ~CalendarView();
96 96
97 Calendar *calendar() { return mCalendar; } 97 Calendar *calendar() { return mCalendar; }
98 98
99 KOViewManager *viewManager(); 99 KOViewManager *viewManager();
100 KODialogManager *dialogManager(); 100 KODialogManager *dialogManager();
101 101
102 QDate startDate(); 102 QDate startDate();
103 QDate endDate(); 103 QDate endDate();
104 104
105 QWidgetStack *viewStack(); 105 QWidgetStack *viewStack();
106 QWidget *leftFrame(); 106 QWidget *leftFrame();
107 NavigatorBar *navigatorBar(); 107 NavigatorBar *navigatorBar();
108 108
109 DateNavigator *dateNavigator(); 109 DateNavigator *dateNavigator();
110 KDateNavigator *dateNavigatorWidget(); 110 KDateNavigator *dateNavigatorWidget();
111 111
112 void addView(KOrg::BaseView *); 112 void addView(KOrg::BaseView *);
113 void showView(KOrg::BaseView *); 113 void showView(KOrg::BaseView *);
114 KOEventViewerDialog* getEventViewerDialog(); 114 KOEventViewerDialog* getEventViewerDialog();
115 Incidence *currentSelection(); 115 Incidence *currentSelection();
116 void setupExternSyncProfiles(); 116 void setupExternSyncProfiles();
117 117
118 signals: 118 signals:
119 /** This todo has been modified */ 119 /** This todo has been modified */
120 void todoModified(Todo *, int); 120 void todoModified(Todo *, int);
121 121
122 /** when change is made to options dialog, the topwidget will catch this 122 /** when change is made to options dialog, the topwidget will catch this
123 * and emit this signal which notifies all widgets which have registered 123 * and emit this signal which notifies all widgets which have registered
124 * for notification to update their settings. */ 124 * for notification to update their settings. */
125 void configChanged(); 125 void configChanged();
126 /** emitted when the topwidget is closing down, so that any attached 126 /** emitted when the topwidget is closing down, so that any attached
127 child windows can also close. */ 127 child windows can also close. */
128 void closingDown(); 128 void closingDown();
129 /** emitted right before we die */ 129 /** emitted right before we die */
130 void closed(QWidget *); 130 void closed(QWidget *);
131 131
132 /** Emitted when state of modified flag changes */ 132 /** Emitted when state of modified flag changes */
133 void modifiedChanged(bool); 133 void modifiedChanged(bool);
134 void signalmodified(); 134 void signalmodified();
135 135
136 /** Emitted when state of read-only flag changes */ 136 /** Emitted when state of read-only flag changes */
137 void readOnlyChanged(bool); 137 void readOnlyChanged(bool);
138 138
139 /** Emitted when the unit of navigation changes */ 139 /** Emitted when the unit of navigation changes */
140 void changeNavStringPrev(const QString &); 140 void changeNavStringPrev(const QString &);
141 void changeNavStringNext(const QString &); 141 void changeNavStringNext(const QString &);
142 142
143 /** Emitted when state of events selection has changed and user is organizer*/ 143 /** Emitted when state of events selection has changed and user is organizer*/
144 void organizerEventsSelected(bool); 144 void organizerEventsSelected(bool);
145 /** Emitted when state of events selection has changed and user is attendee*/ 145 /** Emitted when state of events selection has changed and user is attendee*/
146 void groupEventsSelected(bool); 146 void groupEventsSelected(bool);
147 /** 147 /**
148 Emitted when an incidence gets selected. If the selection is cleared the 148 Emitted when an incidence gets selected. If the selection is cleared the
149 signal is emitted with 0 as argument. 149 signal is emitted with 0 as argument.
150 */ 150 */
151 void incidenceSelected( Incidence * ); 151 void incidenceSelected( Incidence * );
152 /** Emitted, when a todoitem is selected or deselected. */ 152 /** Emitted, when a todoitem is selected or deselected. */
153 void todoSelected( bool ); 153 void todoSelected( bool );
154 154
155 /** 155 /**
156 Emitted, when clipboard content changes. Parameter indicates if paste 156 Emitted, when clipboard content changes. Parameter indicates if paste
157 is possible or not. 157 is possible or not.
158 */ 158 */
159 void pasteEnabled(bool); 159 void pasteEnabled(bool);
160 160
161 /** Emitted, when the number of incoming messages has changed. */ 161 /** Emitted, when the number of incoming messages has changed. */
162 void numIncomingChanged(int); 162 void numIncomingChanged(int);
163 163
164 /** Emitted, when the number of outgoing messages has changed. */ 164 /** Emitted, when the number of outgoing messages has changed. */
165 void numOutgoingChanged(int); 165 void numOutgoingChanged(int);
166 166
167 /** Send status message, which can e.g. be displayed in the status bar. */ 167 /** Send status message, which can e.g. be displayed in the status bar. */
168 void statusMessage(const QString &); 168 void statusMessage(const QString &);
169 169
170 void calendarViewExpanded( bool ); 170 void calendarViewExpanded( bool );
171 void updateSearchDialog(); 171 void updateSearchDialog();
172 172
173 173
174 public slots: 174 public slots:
175 void recheckTimerAlarm(); 175 void recheckTimerAlarm();
176 void checkNextTimerAlarm(); 176 void checkNextTimerAlarm();
177 void addAlarm(const QDateTime &qdt, const QString &noti ); 177 void addAlarm(const QDateTime &qdt, const QString &noti );
178 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 178 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
179 void removeAlarm(const QDateTime &qdt, const QString &noti ); 179 void removeAlarm(const QDateTime &qdt, const QString &noti );
180 180
181 /** options dialog made a changed to the configuration. we catch this 181 /** options dialog made a changed to the configuration. we catch this
182 * and notify all widgets which need to update their configuration. */ 182 * and notify all widgets which need to update their configuration. */
183 void updateConfig(); 183 void updateConfig();
184 184
185 /** 185 /**
186 Load calendar from file \a filename. If \a merge is true, load 186 Load calendar from file \a filename. If \a merge is true, load
187 calendar into existing one, if it is false, clear calendar, before 187 calendar into existing one, if it is false, clear calendar, before
188 loading. Return true, if calendar could be successfully loaded. 188 loading. Return true, if calendar could be successfully loaded.
189 */ 189 */
190 bool openCalendar(QString filename, bool merge=false); 190 bool openCalendar(QString filename, bool merge=false);
191 bool syncCalendar(QString filename,int mode = 0 ); 191 bool syncCalendar(QString filename,int mode = 0 );
192 192
193 /** 193 /**
194 Save calendar data to file. Return true if calendar could be 194 Save calendar data to file. Return true if calendar could be
195 successfully saved. 195 successfully saved.
196 */ 196 */
197 bool saveCalendar(QString filename); 197 bool saveCalendar(QString filename);
198 198
199 /** 199 /**
200 Close calendar. Clear calendar data and reset views to display an empty 200 Close calendar. Clear calendar data and reset views to display an empty
201 calendar. 201 calendar.
202 */ 202 */
203 void closeCalendar(); 203 void closeCalendar();
204 204
205 /** Archive old events of calendar */ 205 /** Archive old events of calendar */
206 void archiveCalendar(); 206 void archiveCalendar();
207 207
208 void showIncidence(); 208 void showIncidence();
209 void editIncidence(); 209 void editIncidence();
210 void editIncidenceDescription(); 210 void editIncidenceDescription();
211 void deleteIncidence(); 211 void deleteIncidence();
212 212
213 /** create an editeventwin with supplied date/time, and if bool is true, 213 /** create an editeventwin with supplied date/time, and if bool is true,
214 * make the event take all day. */ 214 * make the event take all day. */
215 void newEvent(QDateTime, QDateTime, bool allDay = false); 215 void newEvent(QDateTime, QDateTime, bool allDay = false);
216 void newEvent(QDateTime fh); 216 void newEvent(QDateTime fh);
217 void newEvent(QDate dt); 217 void newEvent(QDate dt);
218 /** create new event without having a date hint. Takes current date as 218 /** create new event without having a date hint. Takes current date as
219 default hint. */ 219 default hint. */
220 void newEvent(); 220 void newEvent();
221 void newFloatingEvent(); 221 void newFloatingEvent();
222 222
223 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 223 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
224 void showIncidence(Incidence *); 224 void showIncidence(Incidence *);
225 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 225 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
226 void editIncidence(Incidence *); 226 void editIncidence(Incidence *);
227 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 227 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
228 void deleteIncidence(Incidence *); 228 void deleteIncidence(Incidence *);
229 void cloneIncidence(Incidence *); 229 void cloneIncidence(Incidence *);
230 void cancelIncidence(Incidence *); 230 void cancelIncidence(Incidence *);
231 /** Create an editor for the supplied event. */ 231 /** Create an editor for the supplied event. */
232 void editEvent(Event *); 232 void editEvent(Event *);
233 /** Delete the supplied event. */ 233 /** Delete the supplied event. */
234 void deleteEvent(Event *); 234 void deleteEvent(Event *);
235 /** Delete the event with the given unique ID. Returns false, if event wasn't 235 /** Delete the event with the given unique ID. Returns false, if event wasn't
236 found. */ 236 found. */
237 bool deleteEvent(const QString &uid); 237 bool deleteEvent(const QString &uid);
238 /** Create a read-only viewer dialog for the supplied event. */ 238 /** Create a read-only viewer dialog for the supplied event. */
239 void showEvent(Event *); 239 void showEvent(Event *);
240 240
241 void editJournal(Journal *); 241 void editJournal(Journal *);
242 void showJournal(Journal *); 242 void showJournal(Journal *);
243 void deleteJournal(Journal *); 243 void deleteJournal(Journal *);
244 /** Create an editor dialog for a todo */ 244 /** Create an editor dialog for a todo */
245 void editTodo(Todo *); 245 void editTodo(Todo *);
246 /** Create a read-only viewer dialog for the supplied todo */ 246 /** Create a read-only viewer dialog for the supplied todo */
247 void showTodo(Todo *); 247 void showTodo(Todo *);
248 /** create new todo */ 248 /** create new todo */
249 void newTodo(); 249 void newTodo();
250 /** create new todo with a parent todo */ 250 /** create new todo with a parent todo */
251 void newSubTodo(); 251 void newSubTodo();
252 /** create new todo with a parent todo */ 252 /** create new todo with a parent todo */
253 void newSubTodo(Todo *); 253 void newSubTodo(Todo *);
254 /** Delete todo */ 254 /** Delete todo */
255 void deleteTodo(Todo *); 255 void deleteTodo(Todo *);
256 256
257 257
258 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 258 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
259 * emitted as result. */ 259 * emitted as result. */
260 void checkClipboard(); 260 void checkClipboard();
261 261
262 /** using the KConfig associated with the kapp variable, read in the 262 /** using the KConfig associated with the kapp variable, read in the
263 * settings from the config file. 263 * settings from the config file.
264 */ 264 */
265 void readSettings(); 265 void readSettings();
266 266
267 /** write current state to config file. */ 267 /** write current state to config file. */
268 void writeSettings(); 268 void writeSettings();
269 269
270 /** read settings for calendar filters */ 270 /** read settings for calendar filters */
271 void readFilterSettings(KConfig *config); 271 void readFilterSettings(KConfig *config);
272 272
273 /** write settings for calendar filters */ 273 /** write settings for calendar filters */
274 void writeFilterSettings(KConfig *config); 274 void writeFilterSettings(KConfig *config);
275 275
276 /** passes on the message that an event has changed to the currently 276 /** passes on the message that an event has changed to the currently
277 * activated view so that it can make appropriate display changes. */ 277 * activated view so that it can make appropriate display changes. */
278 void changeEventDisplay(Event *, int); 278 void changeEventDisplay(Event *, int);
279 void changeIncidenceDisplay(Incidence *, int); 279 void changeIncidenceDisplay(Incidence *, int);
280 void changeTodoDisplay(Todo *, int); 280 void changeTodoDisplay(Todo *, int);
281 281
282 void eventAdded(Event *); 282 void eventAdded(Event *);
283 void eventChanged(Event *); 283 void eventChanged(Event *);
284 void eventToBeDeleted(Event *); 284 void eventToBeDeleted(Event *);
285 void eventDeleted(); 285 void eventDeleted();
286 286
287 void todoAdded(Todo *); 287 void todoAdded(Todo *);
288 void todoChanged(Todo *); 288 void todoChanged(Todo *);
289 void todoToBeDeleted(Todo *); 289 void todoToBeDeleted(Todo *);
290 void todoDeleted(); 290 void todoDeleted();
291 291
292 void updateView(const QDate &start, const QDate &end); 292 void updateView(const QDate &start, const QDate &end);
293 void updateView(); 293 void updateView();
294 294
295 /** Full update of visible todo views */ 295 /** Full update of visible todo views */
296 void updateTodoViews(); 296 void updateTodoViews();
297 297
298 void updateUnmanagedViews(); 298 void updateUnmanagedViews();
299 299
300 /** cut the current appointment to the clipboard */ 300 /** cut the current appointment to the clipboard */
301 void edit_cut(); 301 void edit_cut();
302 302
303 /** copy the current appointment(s) to the clipboard */ 303 /** copy the current appointment(s) to the clipboard */
304 void edit_copy(); 304 void edit_copy();
305 305
306 /** paste the current vobject(s) in the clipboard buffer into calendar */ 306 /** paste the current vobject(s) in the clipboard buffer into calendar */
307 void edit_paste(); 307 void edit_paste();
308 308
309 /** edit viewing and configuration options. */ 309 /** edit viewing and configuration options. */
310 void edit_options(); 310 void edit_options();
311 void edit_sync_options(); 311 void edit_sync_options();
312 /** 312 /**
313 Functions for printing, previewing a print, and setting up printing 313 Functions for printing, previewing a print, and setting up printing
314 parameters. 314 parameters.
315 */ 315 */
316 void print(); 316 void print();
317 void printSetup(); 317 void printSetup();
318 void printPreview(); 318 void printPreview();
319 319
320 /** Export as iCalendar file */ 320 /** Export as iCalendar file */
321 void exportICalendar(); 321 void exportICalendar();
322 322
323 /** Export as vCalendar file */ 323 /** Export as vCalendar file */
324 bool exportVCalendar( QString fn); 324 bool exportVCalendar( QString fn);
325 325
326 /** pop up a dialog to show an existing appointment. */ 326 /** pop up a dialog to show an existing appointment. */
327 void appointment_show(); 327 void appointment_show();
328 /** 328 /**
329 * pop up an Appointment Dialog to edit an existing appointment.Get 329 * pop up an Appointment Dialog to edit an existing appointment.Get
330 * information on the appointment from the list of unique IDs that is 330 * information on the appointment from the list of unique IDs that is
331 * currently in the View, called currIds. 331 * currently in the View, called currIds.
332 */ 332 */
333 void appointment_edit(); 333 void appointment_edit();
334 /** 334 /**
335 * pop up dialog confirming deletion of currently selected event in the 335 * pop up dialog confirming deletion of currently selected event in the
336 * View. 336 * View.
337 */ 337 */
338 void appointment_delete(); 338 void appointment_delete();
339 339
340 /** mails the currently selected event to a particular user as a vCalendar 340 /** mails the currently selected event to a particular user as a vCalendar
341 attachment. */ 341 attachment. */
342 void action_mail(); 342 void action_mail();
343 343
344 /* frees a subtodo from it's relation */ 344 /* frees a subtodo from it's relation */
345 void todo_unsub( Todo * ); 345 void todo_unsub( Todo * );
346 346
347 /** Take ownership of selected event. */ 347 /** Take ownership of selected event. */
348 void takeOverEvent(); 348 void takeOverEvent();
349 349
350 /** Take ownership of all events in calendar. */ 350 /** Take ownership of all events in calendar. */
351 void takeOverCalendar(); 351 void takeOverCalendar();
352 352
353 /** query whether or not the calendar is "dirty". */ 353 /** query whether or not the calendar is "dirty". */
354 bool isModified(); 354 bool isModified();
355 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 355 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
356 void setModified(bool modified=true); 356 void setModified(bool modified=true);
357 357
358 /** query if the calendar is read-only. */ 358 /** query if the calendar is read-only. */
359 bool isReadOnly(); 359 bool isReadOnly();
360 /** set state of calendar to read-only */ 360 /** set state of calendar to read-only */
361 void setReadOnly(bool readOnly=true); 361 void setReadOnly(bool readOnly=true);
362 362
363 void eventUpdated(Incidence *); 363 void eventUpdated(Incidence *);
364 364
365 /* iTIP scheduling actions */ 365 /* iTIP scheduling actions */
366 void schedule_publish(Incidence *incidence = 0); 366 void schedule_publish(Incidence *incidence = 0);
367 void schedule_request(Incidence *incidence = 0); 367 void schedule_request(Incidence *incidence = 0);
368 void schedule_refresh(Incidence *incidence = 0); 368 void schedule_refresh(Incidence *incidence = 0);
369 void schedule_cancel(Incidence *incidence = 0); 369 void schedule_cancel(Incidence *incidence = 0);
370 void schedule_add(Incidence *incidence = 0); 370 void schedule_add(Incidence *incidence = 0);
371 void schedule_reply(Incidence *incidence = 0); 371 void schedule_reply(Incidence *incidence = 0);
372 void schedule_counter(Incidence *incidence = 0); 372 void schedule_counter(Incidence *incidence = 0);
373 void schedule_declinecounter(Incidence *incidence = 0); 373 void schedule_declinecounter(Incidence *incidence = 0);
374 void schedule_publish_freebusy(int daysToPublish = 30); 374 void schedule_publish_freebusy(int daysToPublish = 30);
375 375
376 void openAddressbook(); 376 void openAddressbook();
377 377
378 void editFilters(); 378 void editFilters();
379 void toggleFilerEnabled(); 379 void toggleFilerEnabled();
380 380
381 void toggleFilter(); 381 void toggleFilter();
382 void showFilter(bool visible); 382 void showFilter(bool visible);
383 void updateFilter(); 383 void updateFilter();
384 void filterEdited(); 384 void filterEdited();
385 void selectFilter( int ); 385 void selectFilter( int );
386 386
387 void showIntro(); 387 void showIntro();
388 388
389 /** Move the curdatepient view date to today */ 389 /** Move the curdatepient view date to today */
390 void goToday(); 390 void goToday();
391 391
392 /** Move to the next date(s) in the current view */ 392 /** Move to the next date(s) in the current view */
393 void goNext(); 393 void goNext();
394 394
395 /** Move to the previous date(s) in the current view */ 395 /** Move to the previous date(s) in the current view */
396 void goPrevious(); 396 void goPrevious();
397 /** Move to the next date(s) in the current view */ 397 /** Move to the next date(s) in the current view */
398 void goNextMonth(); 398 void goNextMonth();
399 399
400 /** Move to the previous date(s) in the current view */ 400 /** Move to the previous date(s) in the current view */
401 void goPreviousMonth(); 401 void goPreviousMonth();
402 402
403 void toggleExpand(); 403 void toggleExpand();
404 void toggleDateNavigatorWidget(); 404 void toggleDateNavigatorWidget();
405 void toggleAllDaySize(); 405 void toggleAllDaySize();
406 void dialogClosing(Incidence *); 406 void dialogClosing(Incidence *);
407 407
408 /** Look for new messages in the inbox */ 408 /** Look for new messages in the inbox */
409 void lookForIncomingMessages(); 409 void lookForIncomingMessages();
410 /** Look for new messages in the outbox */ 410 /** Look for new messages in the outbox */
411 void lookForOutgoingMessages(); 411 void lookForOutgoingMessages();
412 412
413 void processMainViewSelection( Incidence * ); 413 void processMainViewSelection( Incidence * );
414 void processTodoListSelection( Incidence * ); 414 void processTodoListSelection( Incidence * );
415 415
416 void processIncidenceSelection( Incidence * ); 416 void processIncidenceSelection( Incidence * );
417 417
418 void purgeCompleted(); 418 void purgeCompleted();
419 bool removeCompletedSubTodos( Todo* ); 419 bool removeCompletedSubTodos( Todo* );
420 void slotCalendarChanged(); 420 void slotCalendarChanged();
421 bool importBday(); 421 bool importBday();
422 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 422 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
423 bool importQtopia( const QString &categoriesFile, 423 bool importQtopia( const QString &categoriesFile,
424 const QString &datebookFile, 424 const QString &datebookFile,
425 const QString &tasklistFile ); 425 const QString &tasklistFile );
426 void syncSharp( ); 426 void syncSharp( );
427 void slotSelectPickerDate( QDate ) ; 427 void slotSelectPickerDate( QDate ) ;
428 void showDatePicker( ) ; 428 void showDatePicker( ) ;
429 void moveIncidence(Incidence *) ; 429 void moveIncidence(Incidence *) ;
430 void beamIncidence(Incidence *) ; 430 void beamIncidence(Incidence *) ;
431 void beamCalendar() ; 431 void beamCalendar() ;
432 void beamFilteredCalendar() ; 432 void beamFilteredCalendar() ;
433 void beamIncidenceList(QPtrList<Incidence>) ; 433 void beamIncidenceList(QPtrList<Incidence>) ;
434 void manageCategories(); 434 void manageCategories();
435 int addCategories(); 435 int addCategories();
436 void removeCategories(); 436 void removeCategories();
437 void setSyncDevice( QString ); 437 void setSyncDevice( QString );
438 void setSyncName( QString ); 438 void setSyncName( QString );
439 protected slots: 439 protected slots:
440 void timerAlarm(); 440 void timerAlarm();
441 void suspendAlarm(); 441 void suspendAlarm();
442 void beamDone( Ir *ir ); 442 void beamDone( Ir *ir );
443 /** Select a view or adapt the current view to display the specified dates. */ 443 /** Select a view or adapt the current view to display the specified dates. */
444 void showDates( const KCal::DateList & ); 444 void showDates( const KCal::DateList & );
445 void selectWeekNum ( int ); 445 void selectWeekNum ( int );
446 446
447 public: 447 public:
448 // show a standard warning 448 // show a standard warning
449 // returns KMsgBox::yesNoCancel() 449 // returns KMsgBox::yesNoCancel()
450 int msgCalModified(); 450 int msgCalModified();
451 void confSync(); 451 void confSync();
452 void setLoadedFileVersion(QDateTime); 452 void setLoadedFileVersion(QDateTime);
453 bool checkFileVersion(QString fn); 453 bool checkFileVersion(QString fn);
454 bool checkFileChanged(QString fn); 454 bool checkFileChanged(QString fn);
455 Event* getLastSyncEvent(); 455 Event* getLastSyncEvent();
456 /** Adapt navigation units correpsonding to step size of navigation of the 456 /** Adapt navigation units correpsonding to step size of navigation of the
457 * current view. 457 * current view.
458 */ 458 */
459 void adaptNavigationUnits(); 459 void adaptNavigationUnits();
460 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 460 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
461 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 461 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
462 //Attendee* getYourAttendee(Event *event); 462 //Attendee* getYourAttendee(Event *event);
463 protected: 463 protected:
464 void schedule(Scheduler::Method, Incidence *incidence = 0); 464 void schedule(Scheduler::Method, Incidence *incidence = 0);
465 465
466 // returns KMsgBox::OKCandel() 466 // returns KMsgBox::OKCandel()
467 int msgItemDelete(); 467 int msgItemDelete();
468 void showEventEditor(); 468 void showEventEditor();
469 void showTodoEditor(); 469 void showTodoEditor();
470 void writeLocale(); 470 void writeLocale();
471 Todo *selectedTodo(); 471 Todo *selectedTodo();
472 472
473 private: 473 private:
474 AlarmDialog * mAlarmDialog; 474 AlarmDialog * mAlarmDialog;
475 QString mAlarmNotification; 475 QString mAlarmNotification;
476 QString mSuspendAlarmNotification; 476 QString mSuspendAlarmNotification;
477 QTimer* mSuspendTimer; 477 QTimer* mSuspendTimer;
478 QTimer* mAlarmTimer; 478 QTimer* mAlarmTimer;
479 QTimer* mRecheckAlarmTimer; 479 QTimer* mRecheckAlarmTimer;
480 void computeAlarm( QString ); 480 void computeAlarm( QString );
481 void startAlarm( QString, QString ); 481 void startAlarm( QString, QString );
482 void setSyncEventsReadOnly(); 482 void setSyncEventsReadOnly();
483 483
484 QDateTime loadedFileVersion; 484 QDateTime loadedFileVersion;
485 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 485 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
486 void checkZaurusId( int id, bool todo = false ); 486 void checkExternalId( Incidence * inc );
487 int mGlobalSyncMode; 487 int mGlobalSyncMode;
488 QString mCurrentSyncDevice; 488 QString mCurrentSyncDevice;
489 QString mCurrentSyncName; 489 QString mCurrentSyncName;
490 KOBeamPrefs* beamDialog; 490 KOBeamPrefs* beamDialog;
491 void init(); 491 void init();
492 int mDatePickerMode; 492 int mDatePickerMode;
493 bool mFlagEditDescription; 493 bool mFlagEditDescription;
494 QDateTime mLastCalendarSync; 494 QDateTime mLastCalendarSync;
495 void createPrinter(); 495 void createPrinter();
496 496
497 void calendarModified( bool, Calendar * ); 497 void calendarModified( bool, Calendar * );
498 498
499 CalPrinter *mCalPrinter; 499 CalPrinter *mCalPrinter;
500 500
501 QSplitter *mPanner; 501 QSplitter *mPanner;
502 QSplitter *mLeftSplitter; 502 QSplitter *mLeftSplitter;
503 QWidget *mLeftFrame; 503 QWidget *mLeftFrame;
504 QWidgetStack *mRightFrame; 504 QWidgetStack *mRightFrame;
505 505
506 KDatePicker* mDatePicker; 506 KDatePicker* mDatePicker;
507 QVBox* mDateFrame; 507 QVBox* mDateFrame;
508 NavigatorBar *mNavigatorBar; 508 NavigatorBar *mNavigatorBar;
509 509
510 KDateNavigator *mDateNavigator; // widget showing small month view. 510 KDateNavigator *mDateNavigator; // widget showing small month view.
511 511
512 KOFilterView *mFilterView; 512 KOFilterView *mFilterView;
513 513
514 ResourceView *mResourceView; 514 ResourceView *mResourceView;
515 515
516 // calendar object for this viewing instance 516 // calendar object for this viewing instance
517 Calendar *mCalendar; 517 Calendar *mCalendar;
518 518
519 CalendarResourceManager *mResourceManager; 519 CalendarResourceManager *mResourceManager;
520 520
521 FileStorage *mStorage; 521 FileStorage *mStorage;
522 522
523 DateNavigator *mNavigator; 523 DateNavigator *mNavigator;
524 524
525 KOViewManager *mViewManager; 525 KOViewManager *mViewManager;
526 KODialogManager *mDialogManager; 526 KODialogManager *mDialogManager;
527 527
528 // Calendar filters 528 // Calendar filters
529 QPtrList<CalFilter> mFilters; 529 QPtrList<CalFilter> mFilters;
530 530
531 // various housekeeping variables. 531 // various housekeeping variables.
532 bool mModified; // flag indicating if calendar is modified 532 bool mModified; // flag indicating if calendar is modified
533 bool mReadOnly; // flag indicating if calendar is read-only 533 bool mReadOnly; // flag indicating if calendar is read-only
534 QDate mSaveSingleDate; 534 QDate mSaveSingleDate;
535 535
536 Incidence *mSelectedIncidence; 536 Incidence *mSelectedIncidence;
537 Incidence *mMoveIncidence; 537 Incidence *mMoveIncidence;
538 QPtrList<Event> mExternLastSyncEvent; 538 QPtrList<Event> mExternLastSyncEvent;
539 KOTodoView *mTodoList; 539 KOTodoView *mTodoList;
540 KOEventEditor * mEventEditor; 540 KOEventEditor * mEventEditor;
541 KOTodoEditor * mTodoEditor; 541 KOTodoEditor * mTodoEditor;
542 KOEventViewerDialog * mEventViewerDialog; 542 KOEventViewerDialog * mEventViewerDialog;
543 void keyPressEvent ( QKeyEvent *e) ; 543 void keyPressEvent ( QKeyEvent *e) ;
544 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 544 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
545}; 545};
546 546
547 547
548class CalendarViewVisitor : public Incidence::Visitor 548class CalendarViewVisitor : public Incidence::Visitor
549{ 549{
550 public: 550 public:
551 CalendarViewVisitor() : mView( 0 ) {} 551 CalendarViewVisitor() : mView( 0 ) {}
552 552
553 bool act( Incidence *incidence, CalendarView *view ) 553 bool act( Incidence *incidence, CalendarView *view )
554 { 554 {
555 mView = view; 555 mView = view;
556 return incidence->accept( *this ); 556 return incidence->accept( *this );
557 } 557 }
558 558
559 protected: 559 protected:
560 CalendarView *mView; 560 CalendarView *mView;
561}; 561};
562 562
563class ShowIncidenceVisitor : public CalendarViewVisitor 563class ShowIncidenceVisitor : public CalendarViewVisitor
564{ 564{
565 protected: 565 protected:
566 bool visit( Event *event ) { mView->showEvent( event ); return true; } 566 bool visit( Event *event ) { mView->showEvent( event ); return true; }
567 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 567 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
568 bool visit( Journal * j ) { mView->showJournal( j );return true; } 568 bool visit( Journal * j ) { mView->showJournal( j );return true; }
569}; 569};
570 570
571class EditIncidenceVisitor : public CalendarViewVisitor 571class EditIncidenceVisitor : public CalendarViewVisitor
572{ 572{
573 protected: 573 protected:
574 bool visit( Event *event ) { mView->editEvent( event ); return true; } 574 bool visit( Event *event ) { mView->editEvent( event ); return true; }
575 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 575 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
576 bool visit( Journal *j ) { mView->editJournal( j); return true; } 576 bool visit( Journal *j ) { mView->editJournal( j); return true; }
577}; 577};
578 578
579class DeleteIncidenceVisitor : public CalendarViewVisitor 579class DeleteIncidenceVisitor : public CalendarViewVisitor
580{ 580{
581 protected: 581 protected:
582 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 582 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
583 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 583 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
584 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 584 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
585}; 585};
586 586
587#endif 587#endif
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index df5bbcf..d59bca6 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,350 +1,350 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35 35
36#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 36#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
37 37
38class KConfig; 38class KConfig;
39 39
40namespace KCal { 40namespace KCal {
41 41
42class CalFilter; 42class CalFilter;
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 void deleteIncidence(Incidence *in); 68 void deleteIncidence(Incidence *in);
69 /** 69 /**
70 Clears out the current calendar, freeing all used memory etc. 70 Clears out the current calendar, freeing all used memory etc.
71 */ 71 */
72 virtual void close() = 0; 72 virtual void close() = 0;
73 73
74 /** 74 /**
75 Sync changes in memory to persistant storage. 75 Sync changes in memory to persistant storage.
76 */ 76 */
77 virtual void save() = 0; 77 virtual void save() = 0;
78 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 78 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
79 virtual bool isSaving() { return false; } 79 virtual bool isSaving() { return false; }
80 80
81 /** 81 /**
82 Return the owner of the calendar's full name. 82 Return the owner of the calendar's full name.
83 */ 83 */
84 const QString &getOwner() const; 84 const QString &getOwner() const;
85 /** 85 /**
86 Set the owner of the calendar. Should be owner's full name. 86 Set the owner of the calendar. Should be owner's full name.
87 */ 87 */
88 void setOwner( const QString &os ); 88 void setOwner( const QString &os );
89 /** 89 /**
90 Return the email address of the calendar owner. 90 Return the email address of the calendar owner.
91 */ 91 */
92 const QString &getEmail(); 92 const QString &getEmail();
93 /** 93 /**
94 Set the email address of the calendar owner. 94 Set the email address of the calendar owner.
95 */ 95 */
96 void setEmail( const QString & ); 96 void setEmail( const QString & );
97 97
98 /** 98 /**
99 Set time zone from a timezone string (e.g. -2:00) 99 Set time zone from a timezone string (e.g. -2:00)
100 */ 100 */
101 void setTimeZone( const QString &tz ); 101 void setTimeZone( const QString &tz );
102 /** 102 /**
103 Set time zone from a minutes value (e.g. -60) 103 Set time zone from a minutes value (e.g. -60)
104 */ 104 */
105 void setTimeZone( int tz ); 105 void setTimeZone( int tz );
106 /** 106 /**
107 Return time zone as offest in minutes. 107 Return time zone as offest in minutes.
108 */ 108 */
109 int getTimeZone() const; 109 int getTimeZone() const;
110 /** 110 /**
111 Compute an ISO 8601 format string from the time zone. 111 Compute an ISO 8601 format string from the time zone.
112 */ 112 */
113 QString getTimeZoneStr() const; 113 QString getTimeZoneStr() const;
114 /** 114 /**
115 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 115 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
116 values). 116 values).
117 */ 117 */
118 void setTimeZoneId( const QString & ); 118 void setTimeZoneId( const QString & );
119 /** 119 /**
120 Return time zone id. 120 Return time zone id.
121 */ 121 */
122 QString timeZoneId() const; 122 QString timeZoneId() const;
123 /** 123 /**
124 Use local time, not UTC or a time zone. 124 Use local time, not UTC or a time zone.
125 */ 125 */
126 void setLocalTime(); 126 void setLocalTime();
127 /** 127 /**
128 Return whether local time is being used. 128 Return whether local time is being used.
129 */ 129 */
130 bool isLocalTime() const; 130 bool isLocalTime() const;
131 131
132 /** 132 /**
133 Add an incidence to calendar. 133 Add an incidence to calendar.
134 134
135 @return true on success, false on error. 135 @return true on success, false on error.
136 */ 136 */
137 virtual bool addIncidence( Incidence * ); 137 virtual bool addIncidence( Incidence * );
138 /** 138 /**
139 Return filtered list of all incidences of this calendar. 139 Return filtered list of all incidences of this calendar.
140 */ 140 */
141 virtual QPtrList<Incidence> incidences(); 141 virtual QPtrList<Incidence> incidences();
142 142
143 /** 143 /**
144 Return unfiltered list of all incidences of this calendar. 144 Return unfiltered list of all incidences of this calendar.
145 */ 145 */
146 virtual QPtrList<Incidence> rawIncidences(); 146 virtual QPtrList<Incidence> rawIncidences();
147 147
148 /** 148 /**
149 Adds a Event to this calendar object. 149 Adds a Event to this calendar object.
150 @param anEvent a pointer to the event to add 150 @param anEvent a pointer to the event to add
151 151
152 @return true on success, false on error. 152 @return true on success, false on error.
153 */ 153 */
154 virtual bool addEventNoDup( Event *event ) = 0; 154 virtual bool addEventNoDup( Event *event ) = 0;
155 virtual bool addAnniversaryNoDup( Event *event ) = 0; 155 virtual bool addAnniversaryNoDup( Event *event ) = 0;
156 virtual bool addEvent( Event *anEvent ) = 0; 156 virtual bool addEvent( Event *anEvent ) = 0;
157 /** 157 /**
158 Delete event from calendar. 158 Delete event from calendar.
159 */ 159 */
160 virtual void deleteEvent( Event * ) = 0; 160 virtual void deleteEvent( Event * ) = 0;
161 /** 161 /**
162 Retrieves an event on the basis of the unique string ID. 162 Retrieves an event on the basis of the unique string ID.
163 */ 163 */
164 virtual Event *event( const QString &UniqueStr ) = 0; 164 virtual Event *event( const QString &UniqueStr ) = 0;
165 virtual Event *event( int ) = 0; 165 virtual Event *event( QString, int ) = 0;
166 /** 166 /**
167 Builds and then returns a list of all events that match for the 167 Builds and then returns a list of all events that match for the
168 date specified. useful for dayView, etc. etc. 168 date specified. useful for dayView, etc. etc.
169 The calendar filter is applied. 169 The calendar filter is applied.
170 */ 170 */
171 QPtrList<Event> events( const QDate &date, bool sorted = false); 171 QPtrList<Event> events( const QDate &date, bool sorted = false);
172 /** 172 /**
173 Get events, which occur on the given date. 173 Get events, which occur on the given date.
174 The calendar filter is applied. 174 The calendar filter is applied.
175 */ 175 */
176 QPtrList<Event> events( const QDateTime &qdt ); 176 QPtrList<Event> events( const QDateTime &qdt );
177 /** 177 /**
178 Get events in a range of dates. If inclusive is set to true, only events 178 Get events in a range of dates. If inclusive is set to true, only events
179 are returned, which are completely included in the range. 179 are returned, which are completely included in the range.
180 The calendar filter is applied. 180 The calendar filter is applied.
181 */ 181 */
182 QPtrList<Event> events( const QDate &start, const QDate &end, 182 QPtrList<Event> events( const QDate &start, const QDate &end,
183 bool inclusive = false); 183 bool inclusive = false);
184 /** 184 /**
185 Return filtered list of all events in calendar. 185 Return filtered list of all events in calendar.
186 */ 186 */
187 virtual QPtrList<Event> events(); 187 virtual QPtrList<Event> events();
188 /** 188 /**
189 Return unfiltered list of all events in calendar. 189 Return unfiltered list of all events in calendar.
190 */ 190 */
191 virtual QPtrList<Event> rawEvents() = 0; 191 virtual QPtrList<Event> rawEvents() = 0;
192 192
193 /** 193 /**
194 Add a todo to the todolist. 194 Add a todo to the todolist.
195 195
196 @return true on success, false on error. 196 @return true on success, false on error.
197 */ 197 */
198 virtual bool addTodo( Todo *todo ) = 0; 198 virtual bool addTodo( Todo *todo ) = 0;
199 virtual bool addTodoNoDup( Todo *todo ) = 0; 199 virtual bool addTodoNoDup( Todo *todo ) = 0;
200 /** 200 /**
201 Remove a todo from the todolist. 201 Remove a todo from the todolist.
202 */ 202 */
203 virtual void deleteTodo( Todo * ) = 0; 203 virtual void deleteTodo( Todo * ) = 0;
204 virtual void deleteJournal( Journal * ) = 0; 204 virtual void deleteJournal( Journal * ) = 0;
205 /** 205 /**
206 Return filterd list of todos. 206 Return filterd list of todos.
207 */ 207 */
208 virtual QPtrList<Todo> todos(); 208 virtual QPtrList<Todo> todos();
209 /** 209 /**
210 Searches todolist for an event with this unique string identifier, 210 Searches todolist for an event with this unique string identifier,
211 returns a pointer or null. 211 returns a pointer or null.
212 */ 212 */
213 virtual Todo *todo( const QString &uid ) = 0; 213 virtual Todo *todo( const QString &uid ) = 0;
214 virtual Todo *todo( int ) = 0; 214 virtual Todo *todo( QString, int ) = 0;
215 /** 215 /**
216 Returns list of todos due on the specified date. 216 Returns list of todos due on the specified date.
217 */ 217 */
218 virtual QPtrList<Todo> todos( const QDate &date ) = 0; 218 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
219 /** 219 /**
220 Return unfiltered list of todos. 220 Return unfiltered list of todos.
221 */ 221 */
222 virtual QPtrList<Todo> rawTodos() = 0; 222 virtual QPtrList<Todo> rawTodos() = 0;
223 223
224 /** 224 /**
225 Add a Journal entry to calendar. 225 Add a Journal entry to calendar.
226 226
227 @return true on success, false on error. 227 @return true on success, false on error.
228 */ 228 */
229 virtual bool addJournal( Journal * ) = 0; 229 virtual bool addJournal( Journal * ) = 0;
230 /** 230 /**
231 Return Journal for given date. 231 Return Journal for given date.
232 */ 232 */
233 virtual Journal *journal( const QDate & ) = 0; 233 virtual Journal *journal( const QDate & ) = 0;
234 /** 234 /**
235 Return Journal with given UID. 235 Return Journal with given UID.
236 */ 236 */
237 virtual Journal *journal( const QString &UID ) = 0; 237 virtual Journal *journal( const QString &UID ) = 0;
238 /** 238 /**
239 Return list of all Journal entries. 239 Return list of all Journal entries.
240 */ 240 */
241 virtual QPtrList<Journal> journals() = 0; 241 virtual QPtrList<Journal> journals() = 0;
242 242
243 /** 243 /**
244 Searches all incidence types for an incidence with this unique 244 Searches all incidence types for an incidence with this unique
245 string identifier, returns a pointer or null. 245 string identifier, returns a pointer or null.
246 */ 246 */
247 Incidence* incidence( const QString&UID ); 247 Incidence* incidence( const QString&UID );
248 248
249 /** 249 /**
250 Setup relations for an incidence. 250 Setup relations for an incidence.
251 */ 251 */
252 virtual void setupRelations( Incidence * ); 252 virtual void setupRelations( Incidence * );
253 /** 253 /**
254 Remove all relations to an incidence 254 Remove all relations to an incidence
255 */ 255 */
256 virtual void removeRelations( Incidence * ); 256 virtual void removeRelations( Incidence * );
257 257
258 /** 258 /**
259 Set calendar filter, which filters events for the events() functions. 259 Set calendar filter, which filters events for the events() functions.
260 The Filter object is owned by the caller. 260 The Filter object is owned by the caller.
261 */ 261 */
262 void setFilter( CalFilter * ); 262 void setFilter( CalFilter * );
263 /** 263 /**
264 Return calendar filter. 264 Return calendar filter.
265 */ 265 */
266 CalFilter *filter(); 266 CalFilter *filter();
267 virtual QDateTime nextAlarm( int daysTo ) = 0; 267 virtual QDateTime nextAlarm( int daysTo ) = 0;
268 virtual QString nextSummary( ) const = 0; 268 virtual QString nextSummary( ) const = 0;
269 virtual void reInitAlarmSettings() = 0; 269 virtual void reInitAlarmSettings() = 0;
270 virtual QDateTime nextAlarmEventDateTime() const = 0; 270 virtual QDateTime nextAlarmEventDateTime() const = 0;
271 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0; 271 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
272 /** 272 /**
273 Return all alarms, which ocur in the given time interval. 273 Return all alarms, which ocur in the given time interval.
274 */ 274 */
275 virtual Alarm::List alarms( const QDateTime &from, 275 virtual Alarm::List alarms( const QDateTime &from,
276 const QDateTime &to ) = 0; 276 const QDateTime &to ) = 0;
277 277
278 class Observer { 278 class Observer {
279 public: 279 public:
280 virtual void calendarModified( bool, Calendar * ) = 0; 280 virtual void calendarModified( bool, Calendar * ) = 0;
281 }; 281 };
282 282
283 void registerObserver( Observer * ); 283 void registerObserver( Observer * );
284 284
285 void setModified( bool ); 285 void setModified( bool );
286 286
287 /** 287 /**
288 Set product id returned by loadedProductId(). This function is only 288 Set product id returned by loadedProductId(). This function is only
289 useful for the calendar loading code. 289 useful for the calendar loading code.
290 */ 290 */
291 void setLoadedProductId( const QString & ); 291 void setLoadedProductId( const QString & );
292 /** 292 /**
293 Return product id taken from file that has been loaded. Returns 293 Return product id taken from file that has been loaded. Returns
294 QString::null, if no calendar has been loaded. 294 QString::null, if no calendar has been loaded.
295 */ 295 */
296 QString loadedProductId(); 296 QString loadedProductId();
297 297
298 signals: 298 signals:
299 void calendarChanged(); 299 void calendarChanged();
300 void calendarSaved(); 300 void calendarSaved();
301 void calendarLoaded(); 301 void calendarLoaded();
302 void addAlarm(const QDateTime &qdt, const QString &noti ); 302 void addAlarm(const QDateTime &qdt, const QString &noti );
303 void removeAlarm(const QDateTime &qdt, const QString &noti ); 303 void removeAlarm(const QDateTime &qdt, const QString &noti );
304 304
305 protected: 305 protected:
306 /** 306 /**
307 Get unfiltered events, which occur on the given date. 307 Get unfiltered events, which occur on the given date.
308 */ 308 */
309 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0; 309 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
310 /** 310 /**
311 Get unfiltered events, which occur on the given date. 311 Get unfiltered events, which occur on the given date.
312 */ 312 */
313 virtual QPtrList<Event> rawEventsForDate( const QDate &date, 313 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
314 bool sorted = false ) = 0; 314 bool sorted = false ) = 0;
315 /** 315 /**
316 Get events in a range of dates. If inclusive is set to true, only events 316 Get events in a range of dates. If inclusive is set to true, only events
317 are returned, which are completely included in the range. 317 are returned, which are completely included in the range.
318 */ 318 */
319 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 319 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
320 bool inclusive = false ) = 0; 320 bool inclusive = false ) = 0;
321 Incidence *mNextAlarmIncidence; 321 Incidence *mNextAlarmIncidence;
322 322
323private: 323private:
324 void init(); 324 void init();
325 325
326 QString mOwner; // who the calendar belongs to 326 QString mOwner; // who the calendar belongs to
327 QString mOwnerEmail; // email address of the owner 327 QString mOwnerEmail; // email address of the owner
328 int mTimeZone; // timezone OFFSET from GMT (MINUTES) 328 int mTimeZone; // timezone OFFSET from GMT (MINUTES)
329 bool mLocalTime; // use local time, not UTC or a time zone 329 bool mLocalTime; // use local time, not UTC or a time zone
330 330
331 CalFilter *mFilter; 331 CalFilter *mFilter;
332 CalFilter *mDefaultFilter; 332 CalFilter *mDefaultFilter;
333 333
334 QString mTimeZoneId; 334 QString mTimeZoneId;
335 335
336 Observer *mObserver; 336 Observer *mObserver;
337 bool mNewObserver; 337 bool mNewObserver;
338 338
339 bool mModified; 339 bool mModified;
340 340
341 QString mLoadedProductId; 341 QString mLoadedProductId;
342 342
343 // This list is used to put together related todos 343 // This list is used to put together related todos
344 QDict<Incidence> mOrphans; 344 QDict<Incidence> mOrphans;
345 QDict<Incidence> mOrphanUids; 345 QDict<Incidence> mOrphanUids;
346}; 346};
347 347
348} 348}
349 349
350#endif 350#endif
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 09ce9f0..e464a77 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,698 +1,698 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 close(); 68 close();
69} 69}
70 70
71bool CalendarLocal::load( const QString &fileName ) 71bool CalendarLocal::load( const QString &fileName )
72{ 72{
73 FileStorage storage( this, fileName ); 73 FileStorage storage( this, fileName );
74 return storage.load(); 74 return storage.load();
75} 75}
76 76
77bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 77bool CalendarLocal::save( const QString &fileName, CalFormat *format )
78{ 78{
79 FileStorage storage( this, fileName, format ); 79 FileStorage storage( this, fileName, format );
80 return storage.save(); 80 return storage.save();
81} 81}
82 82
83void CalendarLocal::close() 83void CalendarLocal::close()
84{ 84{
85 mEventList.setAutoDelete( true ); 85 mEventList.setAutoDelete( true );
86 mTodoList.setAutoDelete( true ); 86 mTodoList.setAutoDelete( true );
87 mJournalList.setAutoDelete( false ); 87 mJournalList.setAutoDelete( false );
88 88
89 mEventList.clear(); 89 mEventList.clear();
90 mTodoList.clear(); 90 mTodoList.clear();
91 mJournalList.clear(); 91 mJournalList.clear();
92 92
93 mEventList.setAutoDelete( false ); 93 mEventList.setAutoDelete( false );
94 mTodoList.setAutoDelete( false ); 94 mTodoList.setAutoDelete( false );
95 mJournalList.setAutoDelete( false ); 95 mJournalList.setAutoDelete( false );
96 96
97 setModified( false ); 97 setModified( false );
98} 98}
99 99
100bool CalendarLocal::addAnniversaryNoDup( Event *event ) 100bool CalendarLocal::addAnniversaryNoDup( Event *event )
101{ 101{
102 QString cat; 102 QString cat;
103 bool isBirthday = true; 103 bool isBirthday = true;
104 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 104 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
105 isBirthday = false; 105 isBirthday = false;
106 cat = i18n( "Anniversary" ); 106 cat = i18n( "Anniversary" );
107 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 107 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
108 isBirthday = true; 108 isBirthday = true;
109 cat = i18n( "Birthday" ); 109 cat = i18n( "Birthday" );
110 } else { 110 } else {
111 qDebug("addAnniversaryNoDup called without fitting category! "); 111 qDebug("addAnniversaryNoDup called without fitting category! ");
112 return false; 112 return false;
113 } 113 }
114 Event * eve; 114 Event * eve;
115 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 115 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
116 if ( !(eve->categories().contains( cat ) )) 116 if ( !(eve->categories().contains( cat ) ))
117 continue; 117 continue;
118 // now we have an event with fitting category 118 // now we have an event with fitting category
119 if ( eve->dtStart().date() != event->dtStart().date() ) 119 if ( eve->dtStart().date() != event->dtStart().date() )
120 continue; 120 continue;
121 // now we have an event with fitting category+date 121 // now we have an event with fitting category+date
122 if ( eve->summary() != event->summary() ) 122 if ( eve->summary() != event->summary() )
123 continue; 123 continue;
124 // now we have an event with fitting category+date+summary 124 // now we have an event with fitting category+date+summary
125 return false; 125 return false;
126 } 126 }
127 return addEvent( event ); 127 return addEvent( event );
128 128
129} 129}
130bool CalendarLocal::addEventNoDup( Event *event ) 130bool CalendarLocal::addEventNoDup( Event *event )
131{ 131{
132 Event * eve; 132 Event * eve;
133 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 133 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
134 if ( *eve == *event ) { 134 if ( *eve == *event ) {
135 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 135 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
136 return false; 136 return false;
137 } 137 }
138 } 138 }
139 return addEvent( event ); 139 return addEvent( event );
140} 140}
141 141
142bool CalendarLocal::addEvent( Event *event ) 142bool CalendarLocal::addEvent( Event *event )
143{ 143{
144 insertEvent( event ); 144 insertEvent( event );
145 145
146 event->registerObserver( this ); 146 event->registerObserver( this );
147 147
148 setModified( true ); 148 setModified( true );
149 149
150 return true; 150 return true;
151} 151}
152 152
153void CalendarLocal::deleteEvent( Event *event ) 153void CalendarLocal::deleteEvent( Event *event )
154{ 154{
155 155
156 156
157 if ( mEventList.removeRef( event ) ) { 157 if ( mEventList.removeRef( event ) ) {
158 setModified( true ); 158 setModified( true );
159 } 159 }
160} 160}
161 161
162 162
163Event *CalendarLocal::event( const QString &uid ) 163Event *CalendarLocal::event( const QString &uid )
164{ 164{
165 165
166 Event *event; 166 Event *event;
167 167
168 for ( event = mEventList.first(); event; event = mEventList.next() ) { 168 for ( event = mEventList.first(); event; event = mEventList.next() ) {
169 if ( event->uid() == uid ) { 169 if ( event->uid() == uid ) {
170 return event; 170 return event;
171 } 171 }
172 } 172 }
173 173
174 return 0; 174 return 0;
175} 175}
176bool CalendarLocal::addTodoNoDup( Todo *todo ) 176bool CalendarLocal::addTodoNoDup( Todo *todo )
177{ 177{
178 Todo * eve; 178 Todo * eve;
179 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 179 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
180 if ( *eve == *todo ) { 180 if ( *eve == *todo ) {
181 //qDebug("duplicate todo found! not inserted! "); 181 //qDebug("duplicate todo found! not inserted! ");
182 return false; 182 return false;
183 } 183 }
184 } 184 }
185 return addTodo( todo ); 185 return addTodo( todo );
186} 186}
187bool CalendarLocal::addTodo( Todo *todo ) 187bool CalendarLocal::addTodo( Todo *todo )
188{ 188{
189 mTodoList.append( todo ); 189 mTodoList.append( todo );
190 190
191 todo->registerObserver( this ); 191 todo->registerObserver( this );
192 192
193 // Set up subtask relations 193 // Set up subtask relations
194 setupRelations( todo ); 194 setupRelations( todo );
195 195
196 setModified( true ); 196 setModified( true );
197 197
198 return true; 198 return true;
199} 199}
200 200
201void CalendarLocal::deleteTodo( Todo *todo ) 201void CalendarLocal::deleteTodo( Todo *todo )
202{ 202{
203 // Handle orphaned children 203 // Handle orphaned children
204 removeRelations( todo ); 204 removeRelations( todo );
205 205
206 if ( mTodoList.removeRef( todo ) ) { 206 if ( mTodoList.removeRef( todo ) ) {
207 setModified( true ); 207 setModified( true );
208 } 208 }
209} 209}
210 210
211QPtrList<Todo> CalendarLocal::rawTodos() 211QPtrList<Todo> CalendarLocal::rawTodos()
212{ 212{
213 return mTodoList; 213 return mTodoList;
214} 214}
215Todo *CalendarLocal::todo( int id ) 215Todo *CalendarLocal::todo( QString syncProf, int id )
216{ 216{
217 Todo *todo; 217 Todo *todo;
218 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 218 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
219 if ( todo->zaurusId() == id ) return todo; 219 if ( todo->getID( syncProf ) == id ) return todo;
220 } 220 }
221 221
222 return 0; 222 return 0;
223} 223}
224 224
225QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 225QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
226{ 226{
227 QPtrList<Event> el; 227 QPtrList<Event> el;
228 Event *todo; 228 Event *todo;
229 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 229 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
230 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 230 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
231 if ( todo->summary().left(3) == "E: " ) 231 if ( todo->summary().left(3) == "E: " )
232 el.append( todo ); 232 el.append( todo );
233 } 233 }
234 234
235 return el; 235 return el;
236 236
237} 237}
238Event *CalendarLocal::event( int id ) 238Event *CalendarLocal::event( QString syncProf, int id )
239{ 239{
240 Event *todo; 240 Event *todo;
241 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 241 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
242 if ( todo->zaurusId() == id ) return todo; 242 if ( todo->getID( syncProf ) == id ) return todo;
243 } 243 }
244 244
245 return 0; 245 return 0;
246} 246}
247Todo *CalendarLocal::todo( const QString &uid ) 247Todo *CalendarLocal::todo( const QString &uid )
248{ 248{
249 Todo *todo; 249 Todo *todo;
250 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 250 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
251 if ( todo->uid() == uid ) return todo; 251 if ( todo->uid() == uid ) return todo;
252 } 252 }
253 253
254 return 0; 254 return 0;
255} 255}
256QString CalendarLocal::nextSummary() const 256QString CalendarLocal::nextSummary() const
257{ 257{
258 return mNextSummary; 258 return mNextSummary;
259} 259}
260QDateTime CalendarLocal::nextAlarmEventDateTime() const 260QDateTime CalendarLocal::nextAlarmEventDateTime() const
261{ 261{
262 return mNextAlarmEventDateTime; 262 return mNextAlarmEventDateTime;
263} 263}
264void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 264void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
265{ 265{
266 //mNextAlarmIncidence 266 //mNextAlarmIncidence
267 //mNextAlarmDateTime 267 //mNextAlarmDateTime
268 //return mNextSummary; 268 //return mNextSummary;
269 //return mNextAlarmEventDateTime; 269 //return mNextAlarmEventDateTime;
270 bool newNextAlarm = false; 270 bool newNextAlarm = false;
271 bool computeNextAlarm = false; 271 bool computeNextAlarm = false;
272 bool ok; 272 bool ok;
273 int offset; 273 int offset;
274 QDateTime nextA; 274 QDateTime nextA;
275 // QString nextSum; 275 // QString nextSum;
276 //QDateTime nextEvent; 276 //QDateTime nextEvent;
277 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 277 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
278 computeNextAlarm = true; 278 computeNextAlarm = true;
279 } else { 279 } else {
280 if ( ! deleted ) { 280 if ( ! deleted ) {
281 nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ; 281 nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ;
282 if ( ok ) { 282 if ( ok ) {
283 if ( nextA < mNextAlarmDateTime ) { 283 if ( nextA < mNextAlarmDateTime ) {
284 deRegisterAlarm(); 284 deRegisterAlarm();
285 mNextAlarmDateTime = nextA; 285 mNextAlarmDateTime = nextA;
286 mNextSummary = incidence->summary(); 286 mNextSummary = incidence->summary();
287 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 287 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
288 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 288 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
289 newNextAlarm = true; 289 newNextAlarm = true;
290 mNextAlarmIncidence = incidence; 290 mNextAlarmIncidence = incidence;
291 } else { 291 } else {
292 if ( incidence == mNextAlarmIncidence ) { 292 if ( incidence == mNextAlarmIncidence ) {
293 computeNextAlarm = true; 293 computeNextAlarm = true;
294 } 294 }
295 } 295 }
296 } else { 296 } else {
297 if ( mNextAlarmIncidence == incidence ) { 297 if ( mNextAlarmIncidence == incidence ) {
298 computeNextAlarm = true; 298 computeNextAlarm = true;
299 } 299 }
300 } 300 }
301 } else { // deleted 301 } else { // deleted
302 if ( incidence == mNextAlarmIncidence ) { 302 if ( incidence == mNextAlarmIncidence ) {
303 computeNextAlarm = true; 303 computeNextAlarm = true;
304 } 304 }
305 } 305 }
306 } 306 }
307 if ( computeNextAlarm ) { 307 if ( computeNextAlarm ) {
308 deRegisterAlarm(); 308 deRegisterAlarm();
309 nextA = nextAlarm( 1000 ); 309 nextA = nextAlarm( 1000 );
310 if (! mNextAlarmIncidence ) { 310 if (! mNextAlarmIncidence ) {
311 return; 311 return;
312 } 312 }
313 newNextAlarm = true; 313 newNextAlarm = true;
314 } 314 }
315 if ( newNextAlarm ) 315 if ( newNextAlarm )
316 registerAlarm(); 316 registerAlarm();
317} 317}
318QString CalendarLocal:: getAlarmNotification() 318QString CalendarLocal:: getAlarmNotification()
319{ 319{
320 QString ret; 320 QString ret;
321 // this should not happen 321 // this should not happen
322 if (! mNextAlarmIncidence ) 322 if (! mNextAlarmIncidence )
323 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 323 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
324 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 324 Alarm* alarm = mNextAlarmIncidence->alarms().first();
325 if ( alarm->type() == Alarm::Procedure ) { 325 if ( alarm->type() == Alarm::Procedure ) {
326 ret = "proc_alarm" + alarm->programFile()+"+++"; 326 ret = "proc_alarm" + alarm->programFile()+"+++";
327 } else { 327 } else {
328 ret = "audio_alarm" +alarm->audioFile() +"+++"; 328 ret = "audio_alarm" +alarm->audioFile() +"+++";
329 } 329 }
330 ret += "cal_alarm"+ mNextSummary.left( 25 ); 330 ret += "cal_alarm"+ mNextSummary.left( 25 );
331 if ( mNextSummary.length() > 25 ) 331 if ( mNextSummary.length() > 25 )
332 ret += "\n" + mNextSummary.mid(25, 25 ); 332 ret += "\n" + mNextSummary.mid(25, 25 );
333 ret+= "\n"+mNextAlarmEventDateTimeString; 333 ret+= "\n"+mNextAlarmEventDateTimeString;
334 return ret; 334 return ret;
335} 335}
336void CalendarLocal::registerAlarm() 336void CalendarLocal::registerAlarm()
337{ 337{
338 mLastAlarmNotificationString = getAlarmNotification(); 338 mLastAlarmNotificationString = getAlarmNotification();
339 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 339 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
340 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 340 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
341// #ifndef DESKTOP_VERSION 341// #ifndef DESKTOP_VERSION
342// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 342// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
343// #endif 343// #endif
344} 344}
345void CalendarLocal::deRegisterAlarm() 345void CalendarLocal::deRegisterAlarm()
346{ 346{
347 if ( mLastAlarmNotificationString.isNull() ) 347 if ( mLastAlarmNotificationString.isNull() )
348 return; 348 return;
349 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 349 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
350 350
351 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 351 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
352// #ifndef DESKTOP_VERSION 352// #ifndef DESKTOP_VERSION
353// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 353// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
354// #endif 354// #endif
355} 355}
356 356
357QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 357QPtrList<Todo> CalendarLocal::todos( const QDate &date )
358{ 358{
359 QPtrList<Todo> todos; 359 QPtrList<Todo> todos;
360 360
361 Todo *todo; 361 Todo *todo;
362 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 362 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
363 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 363 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
364 todos.append( todo ); 364 todos.append( todo );
365 } 365 }
366 } 366 }
367 367
368 filter()->apply( &todos ); 368 filter()->apply( &todos );
369 return todos; 369 return todos;
370} 370}
371void CalendarLocal::reInitAlarmSettings() 371void CalendarLocal::reInitAlarmSettings()
372{ 372{
373 if ( !mNextAlarmIncidence ) { 373 if ( !mNextAlarmIncidence ) {
374 nextAlarm( 1000 ); 374 nextAlarm( 1000 );
375 } 375 }
376 deRegisterAlarm(); 376 deRegisterAlarm();
377 mNextAlarmIncidence = 0; 377 mNextAlarmIncidence = 0;
378 checkAlarmForIncidence( 0, false ); 378 checkAlarmForIncidence( 0, false );
379 379
380} 380}
381 381
382 382
383 383
384QDateTime CalendarLocal::nextAlarm( int daysTo ) 384QDateTime CalendarLocal::nextAlarm( int daysTo )
385{ 385{
386 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 386 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
387 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 387 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
388 QDateTime next; 388 QDateTime next;
389 Event *e; 389 Event *e;
390 bool ok; 390 bool ok;
391 bool found = false; 391 bool found = false;
392 int offset; 392 int offset;
393 mNextAlarmIncidence = 0; 393 mNextAlarmIncidence = 0;
394 for( e = mEventList.first(); e; e = mEventList.next() ) { 394 for( e = mEventList.first(); e; e = mEventList.next() ) {
395 next = e->getNextAlarmDateTime(& ok, &offset ) ; 395 next = e->getNextAlarmDateTime(& ok, &offset ) ;
396 if ( ok ) { 396 if ( ok ) {
397 if ( next < nextA ) { 397 if ( next < nextA ) {
398 nextA = next; 398 nextA = next;
399 found = true; 399 found = true;
400 mNextSummary = e->summary(); 400 mNextSummary = e->summary();
401 mNextAlarmEventDateTime = next.addSecs(offset ) ; 401 mNextAlarmEventDateTime = next.addSecs(offset ) ;
402 mNextAlarmIncidence = (Incidence *) e; 402 mNextAlarmIncidence = (Incidence *) e;
403 } 403 }
404 } 404 }
405 } 405 }
406 Todo *t; 406 Todo *t;
407 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 407 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
408 next = t->getNextAlarmDateTime(& ok, &offset ) ; 408 next = t->getNextAlarmDateTime(& ok, &offset ) ;
409 if ( ok ) { 409 if ( ok ) {
410 if ( next < nextA ) { 410 if ( next < nextA ) {
411 nextA = next; 411 nextA = next;
412 found = true; 412 found = true;
413 mNextSummary = t->summary(); 413 mNextSummary = t->summary();
414 mNextAlarmEventDateTime = next.addSecs(offset ); 414 mNextAlarmEventDateTime = next.addSecs(offset );
415 mNextAlarmIncidence = (Incidence *) t; 415 mNextAlarmIncidence = (Incidence *) t;
416 } 416 }
417 } 417 }
418 } 418 }
419 if ( mNextAlarmIncidence ) { 419 if ( mNextAlarmIncidence ) {
420 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 420 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
421 mNextAlarmDateTime = nextA; 421 mNextAlarmDateTime = nextA;
422 } 422 }
423 return nextA; 423 return nextA;
424} 424}
425Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 425Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
426{ 426{
427 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 427 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
428} 428}
429 429
430Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 430Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
431{ 431{
432 kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - " 432 kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - "
433 << to.toString() << ")\n"; 433 << to.toString() << ")\n";
434 434
435 Alarm::List alarms; 435 Alarm::List alarms;
436 436
437 Event *e; 437 Event *e;
438 438
439 for( e = mEventList.first(); e; e = mEventList.next() ) { 439 for( e = mEventList.first(); e; e = mEventList.next() ) {
440 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 440 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
441 else appendAlarms( alarms, e, from, to ); 441 else appendAlarms( alarms, e, from, to );
442 } 442 }
443 443
444 Todo *t; 444 Todo *t;
445 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 445 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
446 appendAlarms( alarms, t, from, to ); 446 appendAlarms( alarms, t, from, to );
447 } 447 }
448 448
449 return alarms; 449 return alarms;
450} 450}
451 451
452void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 452void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
453 const QDateTime &from, const QDateTime &to ) 453 const QDateTime &from, const QDateTime &to )
454{ 454{
455 QPtrList<Alarm> alarmList = incidence->alarms(); 455 QPtrList<Alarm> alarmList = incidence->alarms();
456 Alarm *alarm; 456 Alarm *alarm;
457 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 457 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
458// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 458// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
459// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 459// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
460 if ( alarm->enabled() ) { 460 if ( alarm->enabled() ) {
461 if ( alarm->time() >= from && alarm->time() <= to ) { 461 if ( alarm->time() >= from && alarm->time() <= to ) {
462 kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary() 462 kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary()
463 << "': " << alarm->time().toString() << endl; 463 << "': " << alarm->time().toString() << endl;
464 alarms.append( alarm ); 464 alarms.append( alarm );
465 } 465 }
466 } 466 }
467 } 467 }
468} 468}
469 469
470void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 470void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
471 Incidence *incidence, 471 Incidence *incidence,
472 const QDateTime &from, 472 const QDateTime &from,
473 const QDateTime &to ) 473 const QDateTime &to )
474{ 474{
475 475
476 QPtrList<Alarm> alarmList = incidence->alarms(); 476 QPtrList<Alarm> alarmList = incidence->alarms();
477 Alarm *alarm; 477 Alarm *alarm;
478 QDateTime qdt; 478 QDateTime qdt;
479 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 479 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
480 if (incidence->recursOn(from.date())) { 480 if (incidence->recursOn(from.date())) {
481 qdt.setTime(alarm->time().time()); 481 qdt.setTime(alarm->time().time());
482 qdt.setDate(from.date()); 482 qdt.setDate(from.date());
483 } 483 }
484 else qdt = alarm->time(); 484 else qdt = alarm->time();
485 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 485 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
486 if ( alarm->enabled() ) { 486 if ( alarm->enabled() ) {
487 if ( qdt >= from && qdt <= to ) { 487 if ( qdt >= from && qdt <= to ) {
488 alarms.append( alarm ); 488 alarms.append( alarm );
489 } 489 }
490 } 490 }
491 } 491 }
492} 492}
493 493
494 494
495/****************************** PROTECTED METHODS ****************************/ 495/****************************** PROTECTED METHODS ****************************/
496 496
497// after changes are made to an event, this should be called. 497// after changes are made to an event, this should be called.
498void CalendarLocal::update( IncidenceBase *incidence ) 498void CalendarLocal::update( IncidenceBase *incidence )
499{ 499{
500 incidence->setSyncStatus( Event::SYNCMOD ); 500 incidence->setSyncStatus( Event::SYNCMOD );
501 incidence->setLastModified( QDateTime::currentDateTime() ); 501 incidence->setLastModified( QDateTime::currentDateTime() );
502 // we should probably update the revision number here, 502 // we should probably update the revision number here,
503 // or internally in the Event itself when certain things change. 503 // or internally in the Event itself when certain things change.
504 // need to verify with ical documentation. 504 // need to verify with ical documentation.
505 505
506 setModified( true ); 506 setModified( true );
507} 507}
508 508
509void CalendarLocal::insertEvent( Event *event ) 509void CalendarLocal::insertEvent( Event *event )
510{ 510{
511 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 511 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
512} 512}
513 513
514 514
515QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 515QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
516{ 516{
517 QPtrList<Event> eventList; 517 QPtrList<Event> eventList;
518 518
519 Event *event; 519 Event *event;
520 for( event = mEventList.first(); event; event = mEventList.next() ) { 520 for( event = mEventList.first(); event; event = mEventList.next() ) {
521 if ( event->doesRecur() ) { 521 if ( event->doesRecur() ) {
522 if ( event->isMultiDay() ) { 522 if ( event->isMultiDay() ) {
523 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 523 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
524 int i; 524 int i;
525 for ( i = 0; i <= extraDays; i++ ) { 525 for ( i = 0; i <= extraDays; i++ ) {
526 if ( event->recursOn( qd.addDays( -i ) ) ) { 526 if ( event->recursOn( qd.addDays( -i ) ) ) {
527 eventList.append( event ); 527 eventList.append( event );
528 break; 528 break;
529 } 529 }
530 } 530 }
531 } else { 531 } else {
532 if ( event->recursOn( qd ) ) 532 if ( event->recursOn( qd ) )
533 eventList.append( event ); 533 eventList.append( event );
534 } 534 }
535 } else { 535 } else {
536 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 536 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
537 eventList.append( event ); 537 eventList.append( event );
538 } 538 }
539 } 539 }
540 } 540 }
541 541
542 if ( !sorted ) { 542 if ( !sorted ) {
543 return eventList; 543 return eventList;
544 } 544 }
545 545
546 // kdDebug(5800) << "Sorting events for date\n" << endl; 546 // kdDebug(5800) << "Sorting events for date\n" << endl;
547 // now, we have to sort it based on dtStart.time() 547 // now, we have to sort it based on dtStart.time()
548 QPtrList<Event> eventListSorted; 548 QPtrList<Event> eventListSorted;
549 Event *sortEvent; 549 Event *sortEvent;
550 for ( event = eventList.first(); event; event = eventList.next() ) { 550 for ( event = eventList.first(); event; event = eventList.next() ) {
551 sortEvent = eventListSorted.first(); 551 sortEvent = eventListSorted.first();
552 int i = 0; 552 int i = 0;
553 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 553 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
554 { 554 {
555 i++; 555 i++;
556 sortEvent = eventListSorted.next(); 556 sortEvent = eventListSorted.next();
557 } 557 }
558 eventListSorted.insert( i, event ); 558 eventListSorted.insert( i, event );
559 } 559 }
560 return eventListSorted; 560 return eventListSorted;
561} 561}
562 562
563 563
564QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 564QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
565 bool inclusive ) 565 bool inclusive )
566{ 566{
567 Event *event = 0; 567 Event *event = 0;
568 568
569 QPtrList<Event> eventList; 569 QPtrList<Event> eventList;
570 570
571 // Get non-recurring events 571 // Get non-recurring events
572 for( event = mEventList.first(); event; event = mEventList.next() ) { 572 for( event = mEventList.first(); event; event = mEventList.next() ) {
573 if ( event->doesRecur() ) { 573 if ( event->doesRecur() ) {
574 QDate rStart = event->dtStart().date(); 574 QDate rStart = event->dtStart().date();
575 bool found = false; 575 bool found = false;
576 if ( inclusive ) { 576 if ( inclusive ) {
577 if ( rStart >= start && rStart <= end ) { 577 if ( rStart >= start && rStart <= end ) {
578 // Start date of event is in range. Now check for end date. 578 // Start date of event is in range. Now check for end date.
579 // if duration is negative, event recurs forever, so do not include it. 579 // if duration is negative, event recurs forever, so do not include it.
580 if ( event->recurrence()->duration() == 0 ) { // End date set 580 if ( event->recurrence()->duration() == 0 ) { // End date set
581 QDate rEnd = event->recurrence()->endDate(); 581 QDate rEnd = event->recurrence()->endDate();
582 if ( rEnd >= start && rEnd <= end ) { // End date within range 582 if ( rEnd >= start && rEnd <= end ) { // End date within range
583 found = true; 583 found = true;
584 } 584 }
585 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 585 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
586 // TODO: Calculate end date from duration. Should be done in Event 586 // TODO: Calculate end date from duration. Should be done in Event
587 // For now exclude all events with a duration. 587 // For now exclude all events with a duration.
588 } 588 }
589 } 589 }
590 } else { 590 } else {
591 bool founOne; 591 bool founOne;
592 QDate next = event->getNextOccurence( start, &founOne ).date(); 592 QDate next = event->getNextOccurence( start, &founOne ).date();
593 if ( founOne ) { 593 if ( founOne ) {
594 if ( next <= end ) { 594 if ( next <= end ) {
595 found = true; 595 found = true;
596 } 596 }
597 } 597 }
598 598
599 /* 599 /*
600 // crap !!! 600 // crap !!!
601 if ( rStart <= end ) { // Start date not after range 601 if ( rStart <= end ) { // Start date not after range
602 if ( rStart >= start ) { // Start date within range 602 if ( rStart >= start ) { // Start date within range
603 found = true; 603 found = true;
604 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 604 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
605 found = true; 605 found = true;
606 } else if ( event->recurrence()->duration() == 0 ) { // End date set 606 } else if ( event->recurrence()->duration() == 0 ) { // End date set
607 QDate rEnd = event->recurrence()->endDate(); 607 QDate rEnd = event->recurrence()->endDate();
608 if ( rEnd >= start && rEnd <= end ) { // End date within range 608 if ( rEnd >= start && rEnd <= end ) { // End date within range
609 found = true; 609 found = true;
610 } 610 }
611 } else { // Duration set 611 } else { // Duration set
612 // TODO: Calculate end date from duration. Should be done in Event 612 // TODO: Calculate end date from duration. Should be done in Event
613 // For now include all events with a duration. 613 // For now include all events with a duration.
614 found = true; 614 found = true;
615 } 615 }
616 } 616 }
617 */ 617 */
618 618
619 } 619 }
620 620
621 if ( found ) eventList.append( event ); 621 if ( found ) eventList.append( event );
622 } else { 622 } else {
623 QDate s = event->dtStart().date(); 623 QDate s = event->dtStart().date();
624 QDate e = event->dtEnd().date(); 624 QDate e = event->dtEnd().date();
625 625
626 if ( inclusive ) { 626 if ( inclusive ) {
627 if ( s >= start && e <= end ) { 627 if ( s >= start && e <= end ) {
628 eventList.append( event ); 628 eventList.append( event );
629 } 629 }
630 } else { 630 } else {
631 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { 631 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) {
632 eventList.append( event ); 632 eventList.append( event );
633 } 633 }
634 } 634 }
635 } 635 }
636 } 636 }
637 637
638 return eventList; 638 return eventList;
639} 639}
640 640
641QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 641QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
642{ 642{
643 return rawEventsForDate( qdt.date() ); 643 return rawEventsForDate( qdt.date() );
644} 644}
645 645
646QPtrList<Event> CalendarLocal::rawEvents() 646QPtrList<Event> CalendarLocal::rawEvents()
647{ 647{
648 return mEventList; 648 return mEventList;
649} 649}
650 650
651bool CalendarLocal::addJournal(Journal *journal) 651bool CalendarLocal::addJournal(Journal *journal)
652{ 652{
653 if ( journal->dtStart().isValid()) 653 if ( journal->dtStart().isValid())
654 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; 654 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl;
655 else 655 else
656 kdDebug(5800) << "Adding Journal without a DTSTART" << endl; 656 kdDebug(5800) << "Adding Journal without a DTSTART" << endl;
657 657
658 mJournalList.append(journal); 658 mJournalList.append(journal);
659 659
660 journal->registerObserver( this ); 660 journal->registerObserver( this );
661 661
662 setModified( true ); 662 setModified( true );
663 663
664 return true; 664 return true;
665} 665}
666 666
667void CalendarLocal::deleteJournal( Journal *journal ) 667void CalendarLocal::deleteJournal( Journal *journal )
668{ 668{
669 if ( mJournalList.removeRef(journal) ) { 669 if ( mJournalList.removeRef(journal) ) {
670 setModified( true ); 670 setModified( true );
671 } 671 }
672} 672}
673 673
674Journal *CalendarLocal::journal( const QDate &date ) 674Journal *CalendarLocal::journal( const QDate &date )
675{ 675{
676// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 676// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
677 677
678 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 678 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
679 if ( it->dtStart().date() == date ) 679 if ( it->dtStart().date() == date )
680 return it; 680 return it;
681 681
682 return 0; 682 return 0;
683} 683}
684 684
685Journal *CalendarLocal::journal( const QString &uid ) 685Journal *CalendarLocal::journal( const QString &uid )
686{ 686{
687 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 687 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
688 if ( it->uid() == uid ) 688 if ( it->uid() == uid )
689 return it; 689 return it;
690 690
691 return 0; 691 return 0;
692} 692}
693 693
694QPtrList<Journal> CalendarLocal::journals() 694QPtrList<Journal> CalendarLocal::journals()
695{ 695{
696 return mJournalList; 696 return mJournalList;
697} 697}
698 698
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index 3257198..4728063 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,217 +1,217 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 46
47 /** 47 /**
48 Loads a calendar on disk in vCalendar or iCalendar format into the current 48 Loads a calendar on disk in vCalendar or iCalendar format into the current
49 calendar. Any information already present is lost. 49 calendar. Any information already present is lost.
50 @return true, if successfull, false on error. 50 @return true, if successfull, false on error.
51 @param fileName the name of the calendar on disk. 51 @param fileName the name of the calendar on disk.
52 */ 52 */
53 bool load( const QString &fileName ); 53 bool load( const QString &fileName );
54 /** 54 /**
55 Writes out the calendar to disk in the specified \a format. 55 Writes out the calendar to disk in the specified \a format.
56 CalendarLocal takes ownership of the CalFormat object. 56 CalendarLocal takes ownership of the CalFormat object.
57 @return true, if successfull, false on error. 57 @return true, if successfull, false on error.
58 @param fileName the name of the file 58 @param fileName the name of the file
59 */ 59 */
60 bool save( const QString &fileName, CalFormat *format = 0 ); 60 bool save( const QString &fileName, CalFormat *format = 0 );
61 61
62 /** 62 /**
63 Clears out the current calendar, freeing all used memory etc. etc. 63 Clears out the current calendar, freeing all used memory etc. etc.
64 */ 64 */
65 void close(); 65 void close();
66 66
67 void save() {} 67 void save() {}
68 68
69 /** 69 /**
70 Add Event to calendar. 70 Add Event to calendar.
71 */ 71 */
72 bool addAnniversaryNoDup( Event *event ); 72 bool addAnniversaryNoDup( Event *event );
73 bool addEventNoDup( Event *event ); 73 bool addEventNoDup( Event *event );
74 bool addEvent( Event *event ); 74 bool addEvent( Event *event );
75 /** 75 /**
76 Deletes an event from this calendar. 76 Deletes an event from this calendar.
77 */ 77 */
78 void deleteEvent( Event *event ); 78 void deleteEvent( Event *event );
79 79
80 /** 80 /**
81 Retrieves an event on the basis of the unique string ID. 81 Retrieves an event on the basis of the unique string ID.
82 */ 82 */
83 Event *event( const QString &uid ); 83 Event *event( const QString &uid );
84 /** 84 /**
85 Return unfiltered list of all events in calendar. 85 Return unfiltered list of all events in calendar.
86 */ 86 */
87 QPtrList<Event> rawEvents(); 87 QPtrList<Event> rawEvents();
88 QPtrList<Event> getExternLastSyncEvents(); 88 QPtrList<Event> getExternLastSyncEvents();
89 /** 89 /**
90 Add a todo to the todolist. 90 Add a todo to the todolist.
91 */ 91 */
92 bool addTodo( Todo *todo ); 92 bool addTodo( Todo *todo );
93 bool addTodoNoDup( Todo *todo ); 93 bool addTodoNoDup( Todo *todo );
94 /** 94 /**
95 Remove a todo from the todolist. 95 Remove a todo from the todolist.
96 */ 96 */
97 void deleteTodo( Todo * ); 97 void deleteTodo( Todo * );
98 /** 98 /**
99 Searches todolist for an event with this unique string identifier, 99 Searches todolist for an event with this unique string identifier,
100 returns a pointer or null. 100 returns a pointer or null.
101 */ 101 */
102 Todo *todo( const QString &uid ); 102 Todo *todo( const QString &uid );
103 /** 103 /**
104 Return list of all todos. 104 Return list of all todos.
105 */ 105 */
106 QPtrList<Todo> rawTodos(); 106 QPtrList<Todo> rawTodos();
107 /** 107 /**
108 Returns list of todos due on the specified date. 108 Returns list of todos due on the specified date.
109 */ 109 */
110 QPtrList<Todo> todos( const QDate &date ); 110 QPtrList<Todo> todos( const QDate &date );
111 /** 111 /**
112 Return list of all todos. 112 Return list of all todos.
113 113
114 Workaround because compiler does not recognize function of base class. 114 Workaround because compiler does not recognize function of base class.
115 */ 115 */
116 QPtrList<Todo> todos() { return Calendar::todos(); } 116 QPtrList<Todo> todos() { return Calendar::todos(); }
117 117
118 /** 118 /**
119 Add a Journal entry to calendar. 119 Add a Journal entry to calendar.
120 */ 120 */
121 bool addJournal( Journal * ); 121 bool addJournal( Journal * );
122 /** 122 /**
123 Remove a Journal from the calendar. 123 Remove a Journal from the calendar.
124 */ 124 */
125 void deleteJournal( Journal * ); 125 void deleteJournal( Journal * );
126 /** 126 /**
127 Return Journal for given date. 127 Return Journal for given date.
128 */ 128 */
129 Journal *journal( const QDate & ); 129 Journal *journal( const QDate & );
130 /** 130 /**
131 Return Journal with given UID. 131 Return Journal with given UID.
132 */ 132 */
133 Journal *journal( const QString &uid ); 133 Journal *journal( const QString &uid );
134 /** 134 /**
135 Return list of all Journals stored in calendar. 135 Return list of all Journals stored in calendar.
136 */ 136 */
137 QPtrList<Journal> journals(); 137 QPtrList<Journal> journals();
138 138
139 /** 139 /**
140 Return all alarms, which ocur in the given time interval. 140 Return all alarms, which ocur in the given time interval.
141 */ 141 */
142 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 142 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
143 143
144 /** 144 /**
145 Return all alarms, which ocur before given date. 145 Return all alarms, which ocur before given date.
146 */ 146 */
147 Alarm::List alarmsTo( const QDateTime &to ); 147 Alarm::List alarmsTo( const QDateTime &to );
148 148
149 QDateTime nextAlarm( int daysTo ) ; 149 QDateTime nextAlarm( int daysTo ) ;
150 QDateTime nextAlarmEventDateTime() const; 150 QDateTime nextAlarmEventDateTime() const;
151 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 151 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
152 void registerAlarm(); 152 void registerAlarm();
153 void deRegisterAlarm(); 153 void deRegisterAlarm();
154 QString getAlarmNotification(); 154 QString getAlarmNotification();
155 QString nextSummary() const ; 155 QString nextSummary() const ;
156 /** 156 /**
157 This method should be called whenever a Event is modified directly 157 This method should be called whenever a Event is modified directly
158 via it's pointer. It makes sure that the calendar is internally 158 via it's pointer. It makes sure that the calendar is internally
159 consistent. 159 consistent.
160 */ 160 */
161 void update( IncidenceBase *incidence ); 161 void update( IncidenceBase *incidence );
162 162
163 /** 163 /**
164 Builds and then returns a list of all events that match for the 164 Builds and then returns a list of all events that match for the
165 date specified. useful for dayView, etc. etc. 165 date specified. useful for dayView, etc. etc.
166 */ 166 */
167 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false ); 167 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false );
168 /** 168 /**
169 Get unfiltered events for date \a qdt. 169 Get unfiltered events for date \a qdt.
170 */ 170 */
171 QPtrList<Event> rawEventsForDate( const QDateTime &qdt ); 171 QPtrList<Event> rawEventsForDate( const QDateTime &qdt );
172 /** 172 /**
173 Get unfiltered events in a range of dates. If inclusive is set to true, 173 Get unfiltered events in a range of dates. If inclusive is set to true,
174 only events are returned, which are completely included in the range. 174 only events are returned, which are completely included in the range.
175 */ 175 */
176 QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 176 QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
177 bool inclusive = false ); 177 bool inclusive = false );
178 Todo *CalendarLocal::todo( int uid ); 178 Todo *todo( QString, int uid );
179 Event *CalendarLocal::event( int uid ); 179 Event *event( QString,int uid );
180 180
181 181
182 182
183 protected: 183 protected:
184 184
185 // Event* mNextAlarmEvent; 185 // Event* mNextAlarmEvent;
186 QString mNextSummary; 186 QString mNextSummary;
187 QString mNextAlarmEventDateTimeString; 187 QString mNextAlarmEventDateTimeString;
188 QString mLastAlarmNotificationString; 188 QString mLastAlarmNotificationString;
189 QDateTime mNextAlarmEventDateTime; 189 QDateTime mNextAlarmEventDateTime;
190 QDateTime mNextAlarmDateTime; 190 QDateTime mNextAlarmDateTime;
191 void reInitAlarmSettings(); 191 void reInitAlarmSettings();
192 192
193 /** Notification function of IncidenceBase::Observer. */ 193 /** Notification function of IncidenceBase::Observer. */
194 void incidenceUpdated( IncidenceBase *i ) { update( i ); } 194 void incidenceUpdated( IncidenceBase *i ) { update( i ); }
195 195
196 /** inserts an event into its "proper place" in the calendar. */ 196 /** inserts an event into its "proper place" in the calendar. */
197 void insertEvent( Event *event ); 197 void insertEvent( Event *event );
198 198
199 /** Append alarms of incidence in interval to list of alarms. */ 199 /** Append alarms of incidence in interval to list of alarms. */
200 void appendAlarms( Alarm::List &alarms, Incidence *incidence, 200 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
201 const QDateTime &from, const QDateTime &to ); 201 const QDateTime &from, const QDateTime &to );
202 202
203 /** Append alarms of recurring events in interval to list of alarms. */ 203 /** Append alarms of recurring events in interval to list of alarms. */
204 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence, 204 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
205 const QDateTime &from, const QDateTime &to ); 205 const QDateTime &from, const QDateTime &to );
206 206
207 private: 207 private:
208 void init(); 208 void init();
209 209
210 QPtrList<Event> mEventList; 210 QPtrList<Event> mEventList;
211 QPtrList<Todo> mTodoList; 211 QPtrList<Todo> mTodoList;
212 QPtrList<Journal> mJournalList; 212 QPtrList<Journal> mJournalList;
213}; 213};
214 214
215} 215}
216 216
217#endif 217#endif
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index f1db8b7..5d8785b 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,474 +1,462 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24 24
25#include "calformat.h" 25#include "calformat.h"
26 26
27#include "incidencebase.h" 27#include "incidencebase.h"
28 28
29using namespace KCal; 29using namespace KCal;
30 30
31IncidenceBase::IncidenceBase() : 31IncidenceBase::IncidenceBase() :
32 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 32 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
33 mPilotId(0), mSyncStatus(SYNCMOD) 33 mPilotId(0), mSyncStatus(SYNCMOD)
34{ 34{
35 setUid(CalFormat::createUniqueId()); 35 setUid(CalFormat::createUniqueId());
36 mOrganizer = ""; 36 mOrganizer = "";
37 mFloats = false; 37 mFloats = false;
38 mDuration = 0; 38 mDuration = 0;
39 mHasDuration = false; 39 mHasDuration = false;
40 mPilotId = 0; 40 mPilotId = 0;
41 mZaurusId = -1;
42 mZaurusUid = 0; 41 mZaurusUid = 0;
43 mExternalId = ":"; 42 mExternalId = ":";
44 mTempSyncStat = 0; 43 mTempSyncStat = 0;
45 mSyncStatus = 0; 44 mSyncStatus = 0;
46 mAttendees.setAutoDelete( true ); 45 mAttendees.setAutoDelete( true );
47} 46}
48 47
49IncidenceBase::IncidenceBase(const IncidenceBase &i) : 48IncidenceBase::IncidenceBase(const IncidenceBase &i) :
50 CustomProperties( i ) 49 CustomProperties( i )
51{ 50{
52 mReadOnly = i.mReadOnly; 51 mReadOnly = i.mReadOnly;
53 mDtStart = i.mDtStart; 52 mDtStart = i.mDtStart;
54 mDuration = i.mDuration; 53 mDuration = i.mDuration;
55 mHasDuration = i.mHasDuration; 54 mHasDuration = i.mHasDuration;
56 mOrganizer = i.mOrganizer; 55 mOrganizer = i.mOrganizer;
57 mUid = i.mUid; 56 mUid = i.mUid;
58 QPtrList<Attendee> attendees = i.attendees(); 57 QPtrList<Attendee> attendees = i.attendees();
59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 58 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
60 mAttendees.append( new Attendee( *a ) ); 59 mAttendees.append( new Attendee( *a ) );
61 } 60 }
62 mFloats = i.mFloats; 61 mFloats = i.mFloats;
63 mLastModified = i.mLastModified; 62 mLastModified = i.mLastModified;
64 mPilotId = i.mPilotId; 63 mPilotId = i.mPilotId;
65 mZaurusId = i.mZaurusId;
66 mZaurusUid = i.mZaurusUid; 64 mZaurusUid = i.mZaurusUid;
67 mTempSyncStat = i.mTempSyncStat; 65 mTempSyncStat = i.mTempSyncStat;
68 mSyncStatus = i.mSyncStatus; 66 mSyncStatus = i.mSyncStatus;
69 mExternalId = i.mExternalId; 67 mExternalId = i.mExternalId;
70 // The copied object is a new one, so it isn't observed by the observer 68 // The copied object is a new one, so it isn't observed by the observer
71 // of the original object. 69 // of the original object.
72 mObservers.clear(); 70 mObservers.clear();
73 71
74 mAttendees.setAutoDelete( true ); 72 mAttendees.setAutoDelete( true );
75} 73}
76 74
77IncidenceBase::~IncidenceBase() 75IncidenceBase::~IncidenceBase()
78{ 76{
79} 77}
80 78
81 79
82bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) 80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 )
83{ 81{
84 // do not compare mSyncStatus and mExternalId 82 // do not compare mSyncStatus and mExternalId
85 if( i1.attendees().count() != i2.attendees().count() ) { 83 if( i1.attendees().count() != i2.attendees().count() ) {
86 return false; // no need to check further 84 return false; // no need to check further
87 } 85 }
88 if ( i1.attendees().count() > 0 ) { 86 if ( i1.attendees().count() > 0 ) {
89 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; 87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ;
90 while ( a1 ) { 88 while ( a1 ) {
91 if ( !( (*a1) == (*a2)) ) 89 if ( !( (*a1) == (*a2)) )
92 { 90 {
93 //qDebug("Attendee not equal "); 91 //qDebug("Attendee not equal ");
94 return false; 92 return false;
95 } 93 }
96 a1 = i1.attendees().next(); 94 a1 = i1.attendees().next();
97 a2 = i2.attendees().next(); 95 a2 = i2.attendees().next();
98 } 96 }
99 } 97 }
100 //if ( i1.dtStart() != i2.dtStart() ) 98 //if ( i1.dtStart() != i2.dtStart() )
101 // return false; 99 // return false;
102#if 0 100#if 0
103 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); 101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() );
104 qDebug("1 %d ",i1.duration() == i2.duration() ); 102 qDebug("1 %d ",i1.duration() == i2.duration() );
105 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); 103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() );
106 qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); 104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() );
107 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); 105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() );
108 qDebug("6 %d ",i1.organizer() == i2.organizer() ); 106 qDebug("6 %d ",i1.organizer() == i2.organizer() );
109 107
110#endif 108#endif
111 return ( i1.organizer() == i2.organizer() && 109 return ( i1.organizer() == i2.organizer() &&
112 // i1.uid() == i2.uid() && 110 // i1.uid() == i2.uid() &&
113 // Don't compare lastModified, otherwise the operator is not 111 // Don't compare lastModified, otherwise the operator is not
114 // of much use. We are not comparing for identity, after all. 112 // of much use. We are not comparing for identity, after all.
115 i1.doesFloat() == i2.doesFloat() && 113 i1.doesFloat() == i2.doesFloat() &&
116 i1.duration() == i2.duration() && 114 i1.duration() == i2.duration() &&
117 i1.hasDuration() == i2.hasDuration() && 115 i1.hasDuration() == i2.hasDuration() &&
118 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); 116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() );
119 // no need to compare mObserver 117 // no need to compare mObserver
120} 118}
121 119
122 120
123QDateTime IncidenceBase::getEvenTime( QDateTime dt ) 121QDateTime IncidenceBase::getEvenTime( QDateTime dt )
124{ 122{
125 QTime t = dt.time(); 123 QTime t = dt.time();
126 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
127 return dt; 125 return dt;
128} 126}
129 127
130 128
131void IncidenceBase::setUid(const QString &uid) 129void IncidenceBase::setUid(const QString &uid)
132{ 130{
133 mUid = uid; 131 mUid = uid;
134 updated(); 132 updated();
135} 133}
136 134
137QString IncidenceBase::uid() const 135QString IncidenceBase::uid() const
138{ 136{
139 return mUid; 137 return mUid;
140} 138}
141 139
142void IncidenceBase::setLastModified(const QDateTime &lm) 140void IncidenceBase::setLastModified(const QDateTime &lm)
143{ 141{
144 // DON'T! updated() because we call this from 142 // DON'T! updated() because we call this from
145 // Calendar::updateEvent(). 143 // Calendar::updateEvent().
146 mLastModified = getEvenTime(lm); 144 mLastModified = getEvenTime(lm);
147 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); 145 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1());
148} 146}
149 147
150QDateTime IncidenceBase::lastModified() const 148QDateTime IncidenceBase::lastModified() const
151{ 149{
152 return mLastModified; 150 return mLastModified;
153} 151}
154 152
155void IncidenceBase::setOrganizer(const QString &o) 153void IncidenceBase::setOrganizer(const QString &o)
156{ 154{
157 // we don't check for readonly here, because it is 155 // we don't check for readonly here, because it is
158 // possible that by setting the organizer we are changing 156 // possible that by setting the organizer we are changing
159 // the event's readonly status... 157 // the event's readonly status...
160 mOrganizer = o; 158 mOrganizer = o;
161 if (mOrganizer.left(7).upper() == "MAILTO:") 159 if (mOrganizer.left(7).upper() == "MAILTO:")
162 mOrganizer = mOrganizer.remove(0,7); 160 mOrganizer = mOrganizer.remove(0,7);
163 161
164 updated(); 162 updated();
165} 163}
166 164
167QString IncidenceBase::organizer() const 165QString IncidenceBase::organizer() const
168{ 166{
169 return mOrganizer; 167 return mOrganizer;
170} 168}
171 169
172void IncidenceBase::setReadOnly( bool readOnly ) 170void IncidenceBase::setReadOnly( bool readOnly )
173{ 171{
174 mReadOnly = readOnly; 172 mReadOnly = readOnly;
175} 173}
176 174
177void IncidenceBase::setDtStart(const QDateTime &dtStart) 175void IncidenceBase::setDtStart(const QDateTime &dtStart)
178{ 176{
179// if (mReadOnly) return; 177// if (mReadOnly) return;
180 mDtStart = getEvenTime(dtStart); 178 mDtStart = getEvenTime(dtStart);
181 updated(); 179 updated();
182} 180}
183 181
184QDateTime IncidenceBase::dtStart() const 182QDateTime IncidenceBase::dtStart() const
185{ 183{
186 return mDtStart; 184 return mDtStart;
187} 185}
188 186
189QString IncidenceBase::dtStartTimeStr() const 187QString IncidenceBase::dtStartTimeStr() const
190{ 188{
191 return KGlobal::locale()->formatTime(dtStart().time()); 189 return KGlobal::locale()->formatTime(dtStart().time());
192} 190}
193 191
194QString IncidenceBase::dtStartDateStr(bool shortfmt) const 192QString IncidenceBase::dtStartDateStr(bool shortfmt) const
195{ 193{
196 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); 194 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt);
197} 195}
198 196
199QString IncidenceBase::dtStartStr(bool shortfmt) const 197QString IncidenceBase::dtStartStr(bool shortfmt) const
200{ 198{
201 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); 199 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt);
202} 200}
203 201
204 202
205bool IncidenceBase::doesFloat() const 203bool IncidenceBase::doesFloat() const
206{ 204{
207 return mFloats; 205 return mFloats;
208} 206}
209 207
210void IncidenceBase::setFloats(bool f) 208void IncidenceBase::setFloats(bool f)
211{ 209{
212 if (mReadOnly) return; 210 if (mReadOnly) return;
213 mFloats = f; 211 mFloats = f;
214 updated(); 212 updated();
215} 213}
216 214
217 215
218void IncidenceBase::addAttendee(Attendee *a, bool doupdate) 216void IncidenceBase::addAttendee(Attendee *a, bool doupdate)
219{ 217{
220 if (mReadOnly) return; 218 if (mReadOnly) return;
221 if (a->name().left(7).upper() == "MAILTO:") 219 if (a->name().left(7).upper() == "MAILTO:")
222 a->setName(a->name().remove(0,7)); 220 a->setName(a->name().remove(0,7));
223 221
224 mAttendees.append(a); 222 mAttendees.append(a);
225 if (doupdate) updated(); 223 if (doupdate) updated();
226} 224}
227 225
228#if 0 226#if 0
229void IncidenceBase::removeAttendee(Attendee *a) 227void IncidenceBase::removeAttendee(Attendee *a)
230{ 228{
231 if (mReadOnly) return; 229 if (mReadOnly) return;
232 mAttendees.removeRef(a); 230 mAttendees.removeRef(a);
233 updated(); 231 updated();
234} 232}
235 233
236void IncidenceBase::removeAttendee(const char *n) 234void IncidenceBase::removeAttendee(const char *n)
237{ 235{
238 Attendee *a; 236 Attendee *a;
239 237
240 if (mReadOnly) return; 238 if (mReadOnly) return;
241 for (a = mAttendees.first(); a; a = mAttendees.next()) 239 for (a = mAttendees.first(); a; a = mAttendees.next())
242 if (a->getName() == n) { 240 if (a->getName() == n) {
243 mAttendees.remove(); 241 mAttendees.remove();
244 break; 242 break;
245 } 243 }
246} 244}
247#endif 245#endif
248 246
249void IncidenceBase::clearAttendees() 247void IncidenceBase::clearAttendees()
250{ 248{
251 if (mReadOnly) return; 249 if (mReadOnly) return;
252 mAttendees.clear(); 250 mAttendees.clear();
253} 251}
254 252
255#if 0 253#if 0
256Attendee *IncidenceBase::getAttendee(const char *n) const 254Attendee *IncidenceBase::getAttendee(const char *n) const
257{ 255{
258 QPtrListIterator<Attendee> qli(mAttendees); 256 QPtrListIterator<Attendee> qli(mAttendees);
259 257
260 qli.toFirst(); 258 qli.toFirst();
261 while (qli) { 259 while (qli) {
262 if (qli.current()->getName() == n) 260 if (qli.current()->getName() == n)
263 return qli.current(); 261 return qli.current();
264 ++qli; 262 ++qli;
265 } 263 }
266 return 0L; 264 return 0L;
267} 265}
268#endif 266#endif
269 267
270Attendee *IncidenceBase::attendeeByMail(const QString &email) 268Attendee *IncidenceBase::attendeeByMail(const QString &email)
271{ 269{
272 QPtrListIterator<Attendee> qli(mAttendees); 270 QPtrListIterator<Attendee> qli(mAttendees);
273 271
274 qli.toFirst(); 272 qli.toFirst();
275 while (qli) { 273 while (qli) {
276 if (qli.current()->email() == email) 274 if (qli.current()->email() == email)
277 return qli.current(); 275 return qli.current();
278 ++qli; 276 ++qli;
279 } 277 }
280 return 0L; 278 return 0L;
281} 279}
282 280
283Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) 281Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email)
284{ 282{
285 QPtrListIterator<Attendee> qli(mAttendees); 283 QPtrListIterator<Attendee> qli(mAttendees);
286 284
287 QStringList mails = emails; 285 QStringList mails = emails;
288 if (!email.isEmpty()) { 286 if (!email.isEmpty()) {
289 mails.append(email); 287 mails.append(email);
290 } 288 }
291 qli.toFirst(); 289 qli.toFirst();
292 while (qli) { 290 while (qli) {
293 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { 291 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
294 if (qli.current()->email() == *it) 292 if (qli.current()->email() == *it)
295 return qli.current(); 293 return qli.current();
296 } 294 }
297 295
298 ++qli; 296 ++qli;
299 } 297 }
300 return 0L; 298 return 0L;
301} 299}
302 300
303void IncidenceBase::setDuration(int seconds) 301void IncidenceBase::setDuration(int seconds)
304{ 302{
305 mDuration = seconds; 303 mDuration = seconds;
306 setHasDuration(true); 304 setHasDuration(true);
307} 305}
308 306
309int IncidenceBase::duration() const 307int IncidenceBase::duration() const
310{ 308{
311 return mDuration; 309 return mDuration;
312} 310}
313 311
314void IncidenceBase::setHasDuration(bool b) 312void IncidenceBase::setHasDuration(bool b)
315{ 313{
316 mHasDuration = b; 314 mHasDuration = b;
317} 315}
318 316
319bool IncidenceBase::hasDuration() const 317bool IncidenceBase::hasDuration() const
320{ 318{
321 return mHasDuration; 319 return mHasDuration;
322} 320}
323 321
324void IncidenceBase::setSyncStatus(int stat) 322void IncidenceBase::setSyncStatus(int stat)
325{ 323{
326 if (mReadOnly) return; 324 if (mReadOnly) return;
327 mSyncStatus = stat; 325 mSyncStatus = stat;
328} 326}
329 327
330int IncidenceBase::syncStatus() const 328int IncidenceBase::syncStatus() const
331{ 329{
332 return mSyncStatus; 330 return mSyncStatus;
333} 331}
334 332
335void IncidenceBase::setPilotId( int id ) 333void IncidenceBase::setPilotId( int id )
336{ 334{
337 if (mReadOnly) return; 335 if (mReadOnly) return;
338 mPilotId = id; 336 mPilotId = id;
339} 337}
340 338
341int IncidenceBase::pilotId() const 339int IncidenceBase::pilotId() const
342{ 340{
343 return mPilotId; 341 return mPilotId;
344} 342}
345void IncidenceBase::setZaurusId( int id )
346{
347 if (mReadOnly) return;
348 mZaurusId = id;
349}
350
351int IncidenceBase::zaurusId() const
352{
353 return mZaurusId;
354}
355 343
356int IncidenceBase::zaurusUid() const 344int IncidenceBase::zaurusUid() const
357{ 345{
358 return mZaurusUid; 346 return mZaurusUid;
359} 347}
360void IncidenceBase::setZaurusUid( int id ) 348void IncidenceBase::setZaurusUid( int id )
361{ 349{
362 if (mReadOnly) return; 350 if (mReadOnly) return;
363 mZaurusUid = id; 351 mZaurusUid = id;
364} 352}
365 353
366int IncidenceBase::tempSyncStat() const 354int IncidenceBase::tempSyncStat() const
367{ 355{
368 return mTempSyncStat; 356 return mTempSyncStat;
369} 357}
370void IncidenceBase::setTempSyncStat( int id ) 358void IncidenceBase::setTempSyncStat( int id )
371{ 359{
372 if (mReadOnly) return; 360 if (mReadOnly) return;
373 mTempSyncStat = id; 361 mTempSyncStat = id;
374} 362}
375 363
376void IncidenceBase::setID( const QString & prof , int id ) 364void IncidenceBase::setID( const QString & prof , int id )
377{ 365{
378 int num = mExternalId.find( ":"+prof+";" ); 366 int num = mExternalId.find( ":"+prof+";" );
379 if ( num >= 0 ) { 367 if ( num >= 0 ) {
380 int len = prof.length()+2; 368 int len = prof.length()+2;
381 int end = mExternalId.find( ";", num+len ); 369 int end = mExternalId.find( ";", num+len );
382 if ( end > 0 ) { 370 if ( end > 0 ) {
383 mExternalId = mExternalId.left( num+len ) +QString::number( id)+mExternalId.mid( end ); 371 mExternalId = mExternalId.left( num+len ) +QString::number( id)+mExternalId.mid( end );
384 } else 372 } else
385 qDebug("Error in IncidenceBase::setID "); 373 qDebug("Error in IncidenceBase::setID ");
386 } else { 374 } else {
387 mExternalId += prof+";"+QString::number( id) +";0:"; 375 mExternalId += prof+";"+QString::number( id) +";0:";
388 } 376 }
389 qDebug("setID*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() ); 377 qDebug("setID*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() );
390} 378}
391int IncidenceBase::getID( const QString & prof) 379int IncidenceBase::getID( const QString & prof)
392{ 380{
393 int ret = -1; 381 int ret = -1;
394 int num = mExternalId.find(":"+ prof+";" ); 382 int num = mExternalId.find(":"+ prof+";" );
395 if ( num >= 0 ) { 383 if ( num >= 0 ) {
396 int len = prof.length()+2; 384 int len = prof.length()+2;
397 int end = mExternalId.find( ";", num+len ); 385 int end = mExternalId.find( ";", num+len );
398 if ( end > 0 ) { 386 if ( end > 0 ) {
399 bool ok; 387 bool ok;
400 ret = mExternalId.mid ( num + len,end-len-num).toInt( &ok ); 388 ret = mExternalId.mid ( num + len,end-len-num).toInt( &ok );
401 if (!ok) 389 if (!ok)
402 ret = -1; 390 ret = -1;
403 } 391 }
404 } 392 }
405 qDebug("getID*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); 393 qDebug("getID*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() );
406 return ret; 394 return ret;
407} 395}
408 396
409// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: 397// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0:
410// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 398// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0
411void IncidenceBase::setCsum( const QString & prof , int id ) 399void IncidenceBase::setCsum( const QString & prof , int id )
412{ 400{
413 int num = mExternalId.find( ":"+prof+";"); 401 int num = mExternalId.find( ":"+prof+";");
414 if ( num >= 0 ) { 402 if ( num >= 0 ) {
415 int len = prof.length()+2; 403 int len = prof.length()+2;
416 num = mExternalId.find( ";", num+len ); 404 num = mExternalId.find( ";", num+len );
417 int end = mExternalId.find( ":", num+1 ); 405 int end = mExternalId.find( ":", num+1 );
418 if ( end > 0 ) { 406 if ( end > 0 ) {
419 mExternalId = mExternalId.left( num ) +QString::number(id)+mExternalId.mid( end ); 407 mExternalId = mExternalId.left( num ) +QString::number(id)+mExternalId.mid( end );
420 } else 408 } else
421 qDebug("Error in IncidenceBase::setCsum "); 409 qDebug("Error in IncidenceBase::setCsum ");
422 } else { 410 } else {
423 mExternalId += prof+";-1;"+QString::number( id) +":"; 411 mExternalId += prof+";-1;"+QString::number( id) +":";
424 } 412 }
425 qDebug("setCsum*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() ); 413 qDebug("setCsum*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() );
426} 414}
427int IncidenceBase::getCsum( const QString & prof) 415int IncidenceBase::getCsum( const QString & prof)
428{ 416{
429 int ret = -1; 417 int ret = -1;
430 int num = mExternalId.find( ":"+prof+";" ); 418 int num = mExternalId.find( ":"+prof+";" );
431 if ( num >= 0 ) { 419 if ( num >= 0 ) {
432 int len = prof.length()+2; 420 int len = prof.length()+2;
433 num = mExternalId.find( ";", num+len ); 421 num = mExternalId.find( ";", num+len );
434 int end = mExternalId.find( ":", num+1 ); 422 int end = mExternalId.find( ":", num+1 );
435 if ( end > 0 ) { 423 if ( end > 0 ) {
436 bool ok; 424 bool ok;
437 ret = mExternalId.mid ( num ,end-num).toInt( &ok ); 425 ret = mExternalId.mid ( num ,end-num).toInt( &ok );
438 if (!ok) 426 if (!ok)
439 ret = -1; 427 ret = -1;
440 } 428 }
441 } 429 }
442 qDebug("getCsum*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); 430 qDebug("getCsum*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() );
443 return ret; 431 return ret;
444} 432}
445 433
446void IncidenceBase::setIDStr( const QString & s ) 434void IncidenceBase::setIDStr( const QString & s )
447{ 435{
448 if (mReadOnly) return; 436 if (mReadOnly) return;
449 mExternalId = s; 437 mExternalId = s;
450} 438}
451 439
452QString IncidenceBase::IDStr() const 440QString IncidenceBase::IDStr() const
453{ 441{
454 return mExternalId ; 442 return mExternalId ;
455} 443}
456void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) 444void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
457{ 445{
458 if( !mObservers.contains(observer) ) mObservers.append( observer ); 446 if( !mObservers.contains(observer) ) mObservers.append( observer );
459} 447}
460 448
461void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) 449void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
462{ 450{
463 mObservers.remove( observer ); 451 mObservers.remove( observer );
464} 452}
465 453
466void IncidenceBase::updated() 454void IncidenceBase::updated()
467{ 455{
468 QPtrListIterator<Observer> it(mObservers); 456 QPtrListIterator<Observer> it(mObservers);
469 while( it.current() ) { 457 while( it.current() ) {
470 Observer *o = it.current(); 458 Observer *o = it.current();
471 ++it; 459 ++it;
472 o->incidenceUpdated( this ); 460 o->incidenceUpdated( this );
473 } 461 }
474} 462}
diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h
index 2f85df6..e2950d3 100644
--- a/libkcal/incidencebase.h
+++ b/libkcal/incidencebase.h
@@ -1,178 +1,175 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20#ifndef KCAL_INCIDENCEBASE_H 20#ifndef KCAL_INCIDENCEBASE_H
21#define KCAL_INCIDENCEBASE_H 21#define KCAL_INCIDENCEBASE_H
22// 22//
23// Incidence - base class of calendaring components 23// Incidence - base class of calendaring components
24// 24//
25 25
26#include <qdatetime.h> 26#include <qdatetime.h>
27#include <qstringlist.h> 27#include <qstringlist.h>
28#include <qvaluelist.h> 28#include <qvaluelist.h>
29#include <qptrlist.h> 29#include <qptrlist.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "attendee.h" 32#include "attendee.h"
33 33
34namespace KCal { 34namespace KCal {
35 35
36typedef QValueList<QDate> DateList; 36typedef QValueList<QDate> DateList;
37 37
38/** 38/**
39 This class provides the base class common to all calendar components. 39 This class provides the base class common to all calendar components.
40*/ 40*/
41class IncidenceBase : public CustomProperties 41class IncidenceBase : public CustomProperties
42{ 42{
43 public: 43 public:
44 class Observer { 44 class Observer {
45 public: 45 public:
46 virtual void incidenceUpdated( IncidenceBase * ) = 0; 46 virtual void incidenceUpdated( IncidenceBase * ) = 0;
47 }; 47 };
48 48
49 IncidenceBase(); 49 IncidenceBase();
50 IncidenceBase(const IncidenceBase &); 50 IncidenceBase(const IncidenceBase &);
51 virtual ~IncidenceBase(); 51 virtual ~IncidenceBase();
52 52
53 virtual QCString type() const = 0; 53 virtual QCString type() const = 0;
54 54
55 /** Set the unique id for the event */ 55 /** Set the unique id for the event */
56 void setUid(const QString &); 56 void setUid(const QString &);
57 /** Return the unique id for the event */ 57 /** Return the unique id for the event */
58 QString uid() const; 58 QString uid() const;
59 59
60 /** Sets the time the incidence was last modified. */ 60 /** Sets the time the incidence was last modified. */
61 void setLastModified(const QDateTime &lm); 61 void setLastModified(const QDateTime &lm);
62 /** Return the time the incidence was last modified. */ 62 /** Return the time the incidence was last modified. */
63 QDateTime lastModified() const; 63 QDateTime lastModified() const;
64 64
65 /** sets the organizer for the event */ 65 /** sets the organizer for the event */
66 void setOrganizer(const QString &o); 66 void setOrganizer(const QString &o);
67 QString organizer() const; 67 QString organizer() const;
68 68
69 /** Set readonly status. */ 69 /** Set readonly status. */
70 virtual void setReadOnly( bool ); 70 virtual void setReadOnly( bool );
71 /** Return if the object is read-only. */ 71 /** Return if the object is read-only. */
72 bool isReadOnly() const { return mReadOnly; } 72 bool isReadOnly() const { return mReadOnly; }
73 73
74 /** for setting the event's starting date/time with a QDateTime. */ 74 /** for setting the event's starting date/time with a QDateTime. */
75 virtual void setDtStart(const QDateTime &dtStart); 75 virtual void setDtStart(const QDateTime &dtStart);
76 /** returns an event's starting date/time as a QDateTime. */ 76 /** returns an event's starting date/time as a QDateTime. */
77 QDateTime dtStart() const; 77 QDateTime dtStart() const;
78 /** returns an event's starting time as a string formatted according to the 78 /** returns an event's starting time as a string formatted according to the
79 users locale settings */ 79 users locale settings */
80 QString dtStartTimeStr() const; 80 QString dtStartTimeStr() const;
81 /** returns an event's starting date as a string formatted according to the 81 /** returns an event's starting date as a string formatted according to the
82 users locale settings */ 82 users locale settings */
83 QString dtStartDateStr(bool shortfmt=true) const; 83 QString dtStartDateStr(bool shortfmt=true) const;
84 /** returns an event's starting date and time as a string formatted according 84 /** returns an event's starting date and time as a string formatted according
85 to the users locale settings */ 85 to the users locale settings */
86 QString dtStartStr(bool shortfmt=true) const; 86 QString dtStartStr(bool shortfmt=true) const;
87 87
88 virtual void setDuration(int seconds); 88 virtual void setDuration(int seconds);
89 int duration() const; 89 int duration() const;
90 void setHasDuration(bool); 90 void setHasDuration(bool);
91 bool hasDuration() const; 91 bool hasDuration() const;
92 92
93 /** Return true or false depending on whether the incidence "floats," 93 /** Return true or false depending on whether the incidence "floats,"
94 * i.e. has a date but no time attached to it. */ 94 * i.e. has a date but no time attached to it. */
95 bool doesFloat() const; 95 bool doesFloat() const;
96 /** Set whether the incidence floats, i.e. has a date but no time attached to it. */ 96 /** Set whether the incidence floats, i.e. has a date but no time attached to it. */
97 void setFloats(bool f); 97 void setFloats(bool f);
98 98
99 /** 99 /**
100 Add Attendee to this incidence. IncidenceBase takes ownership of the 100 Add Attendee to this incidence. IncidenceBase takes ownership of the
101 Attendee object. 101 Attendee object.
102 */ 102 */
103 void addAttendee(Attendee *a, bool doupdate=true ); 103 void addAttendee(Attendee *a, bool doupdate=true );
104// void removeAttendee(Attendee *a); 104// void removeAttendee(Attendee *a);
105// void removeAttendee(const char *n); 105// void removeAttendee(const char *n);
106 /** Remove all Attendees. */ 106 /** Remove all Attendees. */
107 void clearAttendees(); 107 void clearAttendees();
108 /** Return list of attendees. */ 108 /** Return list of attendees. */
109 QPtrList<Attendee> attendees() const { return mAttendees; }; 109 QPtrList<Attendee> attendees() const { return mAttendees; };
110 /** Return number of attendees. */ 110 /** Return number of attendees. */
111 int attendeeCount() const { return mAttendees.count(); }; 111 int attendeeCount() const { return mAttendees.count(); };
112 /** Return the Attendee with this email */ 112 /** Return the Attendee with this email */
113 Attendee* attendeeByMail(const QString &); 113 Attendee* attendeeByMail(const QString &);
114 /** Return first Attendee with one of this emails */ 114 /** Return first Attendee with one of this emails */
115 Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null); 115 Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null);
116 116
117 /** pilot syncronization states */ 117 /** pilot syncronization states */
118 enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 }; 118 enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 };
119 /** Set synchronisation satus. */ 119 /** Set synchronisation satus. */
120 void setSyncStatus(int stat); 120 void setSyncStatus(int stat);
121 /** Return synchronisation status. */ 121 /** Return synchronisation status. */
122 int syncStatus() const; 122 int syncStatus() const;
123 123
124 /** Set Pilot Id. */ 124 /** Set Pilot Id. */
125 void setPilotId(int id); 125 void setPilotId(int id);
126 /** Return Pilot Id. */ 126 /** Return Pilot Id. */
127 int pilotId() const; 127 int pilotId() const;
128 128
129 void setZaurusId(int id);
130 int zaurusId() const;
131 void setZaurusUid(int id); 129 void setZaurusUid(int id);
132 int zaurusUid() const; 130 int zaurusUid() const;
133 void setTempSyncStat(int id); 131 void setTempSyncStat(int id);
134 int tempSyncStat() const; 132 int tempSyncStat() const;
135 void setIDStr( const QString & ); 133 void setIDStr( const QString & );
136 QString IDStr() const; 134 QString IDStr() const;
137 void setID( const QString &, int ); 135 void setID( const QString &, int );
138 int getID( const QString & ); 136 int getID( const QString & );
139 void setCsum( const QString &, int ); 137 void setCsum( const QString &, int );
140 int getCsum( const QString & ); 138 int getCsum( const QString & );
141 139
142 140
143 void registerObserver( Observer * ); 141 void registerObserver( Observer * );
144 void unRegisterObserver( Observer * ); 142 void unRegisterObserver( Observer * );
145 void updated(); 143 void updated();
146 144
147 protected: 145 protected:
148 bool mReadOnly; 146 bool mReadOnly;
149 QDateTime getEvenTime( QDateTime ); 147 QDateTime getEvenTime( QDateTime );
150 148
151 private: 149 private:
152 // base components 150 // base components
153 QDateTime mDtStart; 151 QDateTime mDtStart;
154 QString mOrganizer; 152 QString mOrganizer;
155 QString mUid; 153 QString mUid;
156 QDateTime mLastModified; 154 QDateTime mLastModified;
157 QPtrList<Attendee> mAttendees; 155 QPtrList<Attendee> mAttendees;
158 156
159 bool mFloats; 157 bool mFloats;
160 158
161 int mDuration; 159 int mDuration;
162 bool mHasDuration; 160 bool mHasDuration;
163 QString mExternalId; 161 QString mExternalId;
164 int mZaurusId;
165 int mZaurusUid; 162 int mZaurusUid;
166 int mTempSyncStat; 163 int mTempSyncStat;
167 164
168 // PILOT SYNCHRONIZATION STUFF 165 // PILOT SYNCHRONIZATION STUFF
169 int mPilotId; // unique id for pilot sync 166 int mPilotId; // unique id for pilot sync
170 int mSyncStatus; // status (for sync) 167 int mSyncStatus; // status (for sync)
171 168
172 QPtrList<Observer> mObservers; 169 QPtrList<Observer> mObservers;
173}; 170};
174 171
175bool operator==( const IncidenceBase&, const IncidenceBase& ); 172bool operator==( const IncidenceBase&, const IncidenceBase& );
176} 173}
177 174
178#endif 175#endif
diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp
index d39d2dd..605a54d 100644
--- a/libkcal/sharpformat.cpp
+++ b/libkcal/sharpformat.cpp
@@ -1,1008 +1,1008 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qclipboard.h> 28#include <qclipboard.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qxml.h> 32#include <qxml.h>
33#include <qlabel.h> 33#include <qlabel.h>
34 34
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kglobal.h> 37#include <kglobal.h>
38 38
39#include "calendar.h" 39#include "calendar.h"
40#include "alarm.h" 40#include "alarm.h"
41#include "recurrence.h" 41#include "recurrence.h"
42#include "calendarlocal.h" 42#include "calendarlocal.h"
43 43
44#include "sharpformat.h" 44#include "sharpformat.h"
45#include "syncdefines.h" 45#include "syncdefines.h"
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY 49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY
50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
51 51
52//ARSD silentalarm = 0 52//ARSD silentalarm = 0
53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly 53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly
54// 12 RFRQ 54// 12 RFRQ
55// 13 RPOS pos = 4. monday in month 55// 13 RPOS pos = 4. monday in month
56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun 56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun
57// 15 REND 0 = no end/ 1 = end 57// 15 REND 0 = no end/ 1 = end
58// 16 REDT rec end dt 58// 16 REDT rec end dt
59//ALSD 59//ALSD
60//ALED 60//ALED
61//MDAY 61//MDAY
62 62
63class SharpParser : public QObject 63class SharpParser : public QObject
64{ 64{
65 public: 65 public:
66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) { 66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) {
67 oldCategories = 0; 67 oldCategories = 0;
68 } 68 }
69 69
70 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName ) 70 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName )
71 { 71 {
72 int i = 1; 72 int i = 1;
73 bool skip = true; 73 bool skip = true;
74 int max = attList.count() -2; 74 int max = attList.count() -2;
75 while ( i < max ) { 75 while ( i < max ) {
76 if ( !attList[i].isEmpty() ) { 76 if ( !attList[i].isEmpty() ) {
77 skip = false; 77 skip = false;
78 break; 78 break;
79 } 79 }
80 ++i ; 80 ++i ;
81 } 81 }
82 if ( skip ) 82 if ( skip )
83 return false; 83 return false;
84 ulong cSum = SharpFormat::getCsum(attList ); 84 ulong cSum = SharpFormat::getCsum(attList );
85 85
86 if ( qName == "Event" ) { 86 if ( qName == "Event" ) {
87 Event *event; 87 Event *event;
88 event = existingCalendar->event( attList[0].toInt() ); 88 event = existingCalendar->event( "Sharp_DTM",attList[0].toInt() );
89 if ( event ) 89 if ( event )
90 event = (Event*)event->clone(); 90 event = (Event*)event->clone();
91 else 91 else
92 event = new Event; 92 event = new Event;
93 event->setZaurusId( attList[0].toInt() ); 93 event->setID("Sharp_DTM", attList[0].toInt() );
94 event->setZaurusUid( cSum ); 94 event->setZaurusUid( cSum );
95 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 95 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
96 96
97 event->setSummary( attList[2] ); 97 event->setSummary( attList[2] );
98 event->setLocation( attList[3] ); 98 event->setLocation( attList[3] );
99 event->setDescription( attList[4] ); 99 event->setDescription( attList[4] );
100 if ( attList[7] == "1" ) { 100 if ( attList[7] == "1" ) {
101 event->setDtStart( QDateTime(fromString( attList[17]+"000000", false ).date(),QTime(0,0,0 ) )); 101 event->setDtStart( QDateTime(fromString( attList[17]+"000000", false ).date(),QTime(0,0,0 ) ));
102 event->setDtEnd( QDateTime(fromString( attList[18]+"000000", false ).date(),QTime(0,0,0 ))); 102 event->setDtEnd( QDateTime(fromString( attList[18]+"000000", false ).date(),QTime(0,0,0 )));
103 event->setFloats( true ); 103 event->setFloats( true );
104 } else { 104 } else {
105 event->setFloats( false ); 105 event->setFloats( false );
106 event->setDtStart( fromString( attList[5] ) ); 106 event->setDtStart( fromString( attList[5] ) );
107 event->setDtEnd( fromString( attList[6] )); 107 event->setDtEnd( fromString( attList[6] ));
108 } 108 }
109 109
110 QString rtype = attList[11]; 110 QString rtype = attList[11];
111 if ( rtype != "255" ) { 111 if ( rtype != "255" ) {
112 // qDebug("recurs "); 112 // qDebug("recurs ");
113 QDate startDate = event->dtStart().date(); 113 QDate startDate = event->dtStart().date();
114 114
115 QString freqStr = attList[12]; 115 QString freqStr = attList[12];
116 int freq = freqStr.toInt(); 116 int freq = freqStr.toInt();
117 117
118 QString hasEndDateStr = attList[15] ; 118 QString hasEndDateStr = attList[15] ;
119 bool hasEndDate = hasEndDateStr == "1"; 119 bool hasEndDate = hasEndDateStr == "1";
120 120
121 QString endDateStr = attList[16]; 121 QString endDateStr = attList[16];
122 QDate endDate = fromString( endDateStr ).date(); 122 QDate endDate = fromString( endDateStr ).date();
123 123
124 QString weekDaysStr = attList[14]; 124 QString weekDaysStr = attList[14];
125 uint weekDaysNum = weekDaysStr.toInt(); 125 uint weekDaysNum = weekDaysStr.toInt();
126 126
127 QBitArray weekDays( 7 ); 127 QBitArray weekDays( 7 );
128 int i; 128 int i;
129 int bb = 1; 129 int bb = 1;
130 for( i = 1; i <= 7; ++i ) { 130 for( i = 1; i <= 7; ++i ) {
131 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 131 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
132 bb = 2 << (i-1); 132 bb = 2 << (i-1);
133 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 133 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
134 } 134 }
135 // qDebug("next "); 135 // qDebug("next ");
136 QString posStr = attList[13]; 136 QString posStr = attList[13];
137 int pos = posStr.toInt(); 137 int pos = posStr.toInt();
138 Recurrence *r = event->recurrence(); 138 Recurrence *r = event->recurrence();
139 139
140 if ( rtype == "0" ) { 140 if ( rtype == "0" ) {
141 if ( hasEndDate ) r->setDaily( freq, endDate ); 141 if ( hasEndDate ) r->setDaily( freq, endDate );
142 else r->setDaily( freq, -1 ); 142 else r->setDaily( freq, -1 );
143 } else if ( rtype == "1" ) { 143 } else if ( rtype == "1" ) {
144 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 144 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
145 else r->setWeekly( freq, weekDays, -1 ); 145 else r->setWeekly( freq, weekDays, -1 );
146 } else if ( rtype == "3" ) { 146 } else if ( rtype == "3" ) {
147 if ( hasEndDate ) 147 if ( hasEndDate )
148 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 148 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
149 else 149 else
150 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 ); 150 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 );
151 r->addMonthlyDay( startDate.day() ); 151 r->addMonthlyDay( startDate.day() );
152 } else if ( rtype == "2" ) { 152 } else if ( rtype == "2" ) {
153 if ( hasEndDate ) 153 if ( hasEndDate )
154 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 154 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
155 else 155 else
156 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 ); 156 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 );
157 QBitArray days( 7 ); 157 QBitArray days( 7 );
158 days.fill( false ); 158 days.fill( false );
159 days.setBit( startDate.dayOfWeek() - 1 ); 159 days.setBit( startDate.dayOfWeek() - 1 );
160 r->addMonthlyPos( pos, days ); 160 r->addMonthlyPos( pos, days );
161 } else if ( rtype == "4" ) { 161 } else if ( rtype == "4" ) {
162 if ( hasEndDate ) 162 if ( hasEndDate )
163 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 163 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
164 else 164 else
165 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 165 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
166 r->addYearlyNum( startDate.month() ); 166 r->addYearlyNum( startDate.month() );
167 } 167 }
168 } 168 }
169 169
170 QString categoryList = attList[1] ; 170 QString categoryList = attList[1] ;
171 event->setCategories( lookupCategories( categoryList ) ); 171 event->setCategories( lookupCategories( categoryList ) );
172 172
173 // strange 0 semms to mean: alarm enabled 173 // strange 0 semms to mean: alarm enabled
174 if ( attList[8] == "0" ) { 174 if ( attList[8] == "0" ) {
175 Alarm *alarm; 175 Alarm *alarm;
176 if ( event->alarms().count() > 0 ) 176 if ( event->alarms().count() > 0 )
177 alarm = event->alarms().first(); 177 alarm = event->alarms().first();
178 else { 178 else {
179 alarm = new Alarm( event ); 179 alarm = new Alarm( event );
180 event->addAlarm( alarm ); 180 event->addAlarm( alarm );
181 } 181 }
182 alarm->setType( Alarm::Audio ); 182 alarm->setType( Alarm::Audio );
183 alarm->setEnabled( true ); 183 alarm->setEnabled( true );
184 int alarmOffset = attList[9].toInt(); 184 int alarmOffset = attList[9].toInt();
185 alarm->setStartOffset( alarmOffset * -60 ); 185 alarm->setStartOffset( alarmOffset * -60 );
186 } 186 }
187 187
188 mCalendar->addEvent( event); 188 mCalendar->addEvent( event);
189 } else if ( qName == "Todo" ) { 189 } else if ( qName == "Todo" ) {
190 Todo *todo; 190 Todo *todo;
191 191
192 todo = existingCalendar->todo( attList[0].toInt() ); 192 todo = existingCalendar->todo( "Sharp_DTM", attList[0].toInt() );
193 if (todo ) 193 if (todo )
194 todo = (Todo*)todo->clone(); 194 todo = (Todo*)todo->clone();
195 else 195 else
196 todo = new Todo; 196 todo = new Todo;
197 197
198//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1 198//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1
199// 0 1 2 3 4 5 6 7 8 199// 0 1 2 3 4 5 6 7 8
200//1,,,,,1,4,Loch zumachen,"" 200//1,,,,,1,4,Loch zumachen,""
201//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" " 201//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" "
202//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes 202//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes
203 203
204 todo->setZaurusId( attList[0].toInt() ); 204 todo->setID( "Sharp_DTM", attList[0].toInt() );
205 todo->setZaurusUid( cSum ); 205 todo->setZaurusUid( cSum );
206 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 206 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
207 207
208 todo->setSummary( attList[7] ); 208 todo->setSummary( attList[7] );
209 todo->setDescription( attList[8]); 209 todo->setDescription( attList[8]);
210 210
211 int priority = attList[6].toInt(); 211 int priority = attList[6].toInt();
212 if ( priority == 0 ) priority = 3; 212 if ( priority == 0 ) priority = 3;
213 todo->setPriority( priority ); 213 todo->setPriority( priority );
214 214
215 QString categoryList = attList[1]; 215 QString categoryList = attList[1];
216 todo->setCategories( lookupCategories( categoryList ) ); 216 todo->setCategories( lookupCategories( categoryList ) );
217 217
218 218
219 219
220 QString hasDateStr = attList[3]; // due 220 QString hasDateStr = attList[3]; // due
221 if ( !hasDateStr.isEmpty() ) { 221 if ( !hasDateStr.isEmpty() ) {
222 if ( hasDateStr.right(6) == "000000" ) { 222 if ( hasDateStr.right(6) == "000000" ) {
223 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) ); 223 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) );
224 todo->setFloats( true ); 224 todo->setFloats( true );
225 } 225 }
226 else { 226 else {
227 todo->setDtDue( fromString( hasDateStr ) ); 227 todo->setDtDue( fromString( hasDateStr ) );
228 todo->setFloats( false ); 228 todo->setFloats( false );
229 } 229 }
230 230
231 todo->setHasDueDate( true ); 231 todo->setHasDueDate( true );
232 } 232 }
233 hasDateStr = attList[2];//start 233 hasDateStr = attList[2];//start
234 if ( !hasDateStr.isEmpty() ) { 234 if ( !hasDateStr.isEmpty() ) {
235 235
236 todo->setDtStart( fromString( hasDateStr ) ); 236 todo->setDtStart( fromString( hasDateStr ) );
237 todo->setHasStartDate( true); 237 todo->setHasStartDate( true);
238 } else 238 } else
239 todo->setHasStartDate( false ); 239 todo->setHasStartDate( false );
240 hasDateStr = attList[4];//completed 240 hasDateStr = attList[4];//completed
241 if ( !hasDateStr.isEmpty() ) { 241 if ( !hasDateStr.isEmpty() ) {
242 todo->setCompleted(fromString( hasDateStr ) ); 242 todo->setCompleted(fromString( hasDateStr ) );
243 } 243 }
244 QString completedStr = attList[5]; 244 QString completedStr = attList[5];
245 if ( completedStr == "0" ) 245 if ( completedStr == "0" )
246 todo->setCompleted( true ); 246 todo->setCompleted( true );
247 else 247 else
248 todo->setCompleted( false ); 248 todo->setCompleted( false );
249 mCalendar->addTodo( todo ); 249 mCalendar->addTodo( todo );
250 250
251 } else if ( qName == "Category" ) { 251 } else if ( qName == "Category" ) {
252 /* 252 /*
253 QString id = attributes.value( "id" ); 253 QString id = attributes.value( "id" );
254 QString name = attributes.value( "name" ); 254 QString name = attributes.value( "name" );
255 setCategory( id, name ); 255 setCategory( id, name );
256 */ 256 */
257 } 257 }
258 //qDebug("end "); 258 //qDebug("end ");
259 return true; 259 return true;
260 } 260 }
261 261
262 262
263 void setCategoriesList ( QStringList * c ) 263 void setCategoriesList ( QStringList * c )
264 { 264 {
265 oldCategories = c; 265 oldCategories = c;
266 } 266 }
267 267
268 QDateTime fromString ( QString s, bool useTz = true ) { 268 QDateTime fromString ( QString s, bool useTz = true ) {
269 QDateTime dt; 269 QDateTime dt;
270 int y,m,t,h,min,sec; 270 int y,m,t,h,min,sec;
271 y = s.mid(0,4).toInt(); 271 y = s.mid(0,4).toInt();
272 m = s.mid(4,2).toInt(); 272 m = s.mid(4,2).toInt();
273 t = s.mid(6,2).toInt(); 273 t = s.mid(6,2).toInt();
274 h = s.mid(9,2).toInt(); 274 h = s.mid(9,2).toInt();
275 min = s.mid(11,2).toInt(); 275 min = s.mid(11,2).toInt();
276 sec = s.mid(13,2).toInt(); 276 sec = s.mid(13,2).toInt();
277 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec)); 277 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec));
278 int offset = KGlobal::locale()->localTimeOffset( dt ); 278 int offset = KGlobal::locale()->localTimeOffset( dt );
279 if ( useTz ) 279 if ( useTz )
280 dt = dt.addSecs ( offset*60); 280 dt = dt.addSecs ( offset*60);
281 return dt; 281 return dt;
282 282
283 } 283 }
284 protected: 284 protected:
285 QDateTime toDateTime( const QString &value ) 285 QDateTime toDateTime( const QString &value )
286 { 286 {
287 QDateTime dt; 287 QDateTime dt;
288 dt.setTime_t( value.toUInt() ); 288 dt.setTime_t( value.toUInt() );
289 289
290 return dt; 290 return dt;
291 } 291 }
292 292
293 QStringList lookupCategories( const QString &categoryList ) 293 QStringList lookupCategories( const QString &categoryList )
294 { 294 {
295 QStringList categoryIds = QStringList::split( ";", categoryList ); 295 QStringList categoryIds = QStringList::split( ";", categoryList );
296 QStringList categories; 296 QStringList categories;
297 QStringList::ConstIterator it; 297 QStringList::ConstIterator it;
298 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) { 298 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) {
299 QString cate = category( *it ); 299 QString cate = category( *it );
300 if ( oldCategories ) { 300 if ( oldCategories ) {
301 if ( ! oldCategories->contains( cate ) ) 301 if ( ! oldCategories->contains( cate ) )
302 oldCategories->append( cate ); 302 oldCategories->append( cate );
303 } 303 }
304 categories.append(cate ); 304 categories.append(cate );
305 } 305 }
306 return categories; 306 return categories;
307 } 307 }
308 308
309 private: 309 private:
310 Calendar *mCalendar; 310 Calendar *mCalendar;
311 QStringList * oldCategories; 311 QStringList * oldCategories;
312 static QString category( const QString &id ) 312 static QString category( const QString &id )
313 { 313 {
314 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id ); 314 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id );
315 if ( it == mCategoriesMap.end() ) return id; 315 if ( it == mCategoriesMap.end() ) return id;
316 else return *it; 316 else return *it;
317 } 317 }
318 318
319 static void setCategory( const QString &id, const QString &name ) 319 static void setCategory( const QString &id, const QString &name )
320 { 320 {
321 mCategoriesMap.insert( id, name ); 321 mCategoriesMap.insert( id, name );
322 } 322 }
323 323
324 static QMap<QString,QString> mCategoriesMap; 324 static QMap<QString,QString> mCategoriesMap;
325}; 325};
326 326
327QMap<QString,QString> SharpParser::mCategoriesMap; 327QMap<QString,QString> SharpParser::mCategoriesMap;
328 328
329SharpFormat::SharpFormat() 329SharpFormat::SharpFormat()
330{ 330{
331 mCategories = 0; 331 mCategories = 0;
332} 332}
333 333
334SharpFormat::~SharpFormat() 334SharpFormat::~SharpFormat()
335{ 335{
336} 336}
337ulong SharpFormat::getCsum( const QStringList & attList) 337ulong SharpFormat::getCsum( const QStringList & attList)
338{ 338{
339 int max = attList.count() -1; 339 int max = attList.count() -1;
340 ulong cSum = 0; 340 ulong cSum = 0;
341 int j,k,i; 341 int j,k,i;
342 int add; 342 int add;
343 for ( i = 1; i < max ; ++i ) { 343 for ( i = 1; i < max ; ++i ) {
344 QString s = attList[i]; 344 QString s = attList[i];
345 if ( ! s.isEmpty() ){ 345 if ( ! s.isEmpty() ){
346 j = s.length(); 346 j = s.length();
347 for ( k = 0; k < j; ++k ) { 347 for ( k = 0; k < j; ++k ) {
348 int mul = k +1; 348 int mul = k +1;
349 add = s[k].unicode (); 349 add = s[k].unicode ();
350 if ( k < 16 ) 350 if ( k < 16 )
351 mul = mul * mul; 351 mul = mul * mul;
352 add = add * mul *i*i*i; 352 add = add * mul *i*i*i;
353 cSum += add; 353 cSum += add;
354 } 354 }
355 } 355 }
356 } 356 }
357 return cSum; 357 return cSum;
358 358
359} 359}
360#include <stdlib.h> 360#include <stdlib.h>
361#define DEBUGMODE false 361#define DEBUGMODE false
362bool SharpFormat::load( Calendar *calendar, Calendar *existngCal ) 362bool SharpFormat::load( Calendar *calendar, Calendar *existngCal )
363{ 363{
364 364
365 365
366 bool debug = DEBUGMODE; 366 bool debug = DEBUGMODE;
367 //debug = true; 367 //debug = true;
368 QString text; 368 QString text;
369 QString codec = "utf8"; 369 QString codec = "utf8";
370 QLabel status ( i18n("Reading events ..."), 0 ); 370 QLabel status ( i18n("Reading events ..."), 0 );
371 371
372 int w = status.sizeHint().width()+20 ; 372 int w = status.sizeHint().width()+20 ;
373 if ( w < 200 ) w = 200; 373 if ( w < 200 ) w = 200;
374 int h = status.sizeHint().height()+20 ; 374 int h = status.sizeHint().height()+20 ;
375 int dw = QApplication::desktop()->width(); 375 int dw = QApplication::desktop()->width();
376 int dh = QApplication::desktop()->height(); 376 int dh = QApplication::desktop()->height();
377 status.setCaption(i18n("Reading DTM Data") ); 377 status.setCaption(i18n("Reading DTM Data") );
378 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 378 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
379 status.show(); 379 status.show();
380 status.raise(); 380 status.raise();
381 qApp->processEvents(); 381 qApp->processEvents();
382 QString fileName; 382 QString fileName;
383 if ( ! debug ) { 383 if ( ! debug ) {
384 fileName = "/tmp/kopitempout"; 384 fileName = "/tmp/kopitempout";
385 QString command ="db2file datebook -r -c "+ codec + " > " + fileName; 385 QString command ="db2file datebook -r -c "+ codec + " > " + fileName;
386 system ( command.latin1() ); 386 system ( command.latin1() );
387 } else { 387 } else {
388 fileName = "/tmp/events.txt"; 388 fileName = "/tmp/events.txt";
389 389
390 } 390 }
391 QFile file( fileName ); 391 QFile file( fileName );
392 if (!file.open( IO_ReadOnly ) ) { 392 if (!file.open( IO_ReadOnly ) ) {
393 return false; 393 return false;
394 394
395 } 395 }
396 QTextStream ts( &file ); 396 QTextStream ts( &file );
397 ts.setCodec( QTextCodec::codecForName("utf8") ); 397 ts.setCodec( QTextCodec::codecForName("utf8") );
398 text = ts.read(); 398 text = ts.read();
399 file.close(); 399 file.close();
400 status.setText( i18n("Processing events ...") ); 400 status.setText( i18n("Processing events ...") );
401 status.raise(); 401 status.raise();
402 qApp->processEvents(); 402 qApp->processEvents();
403 fromString2Cal( calendar, existngCal, text, "Event" ); 403 fromString2Cal( calendar, existngCal, text, "Event" );
404 status.setText( i18n("Reading todos ...") ); 404 status.setText( i18n("Reading todos ...") );
405 qApp->processEvents(); 405 qApp->processEvents();
406 if ( ! debug ) { 406 if ( ! debug ) {
407 fileName = "/tmp/kopitempout"; 407 fileName = "/tmp/kopitempout";
408 QString command = "db2file todo -r -c " + codec+ " > " + fileName; 408 QString command = "db2file todo -r -c " + codec+ " > " + fileName;
409 system ( command.latin1() ); 409 system ( command.latin1() );
410 } else { 410 } else {
411 fileName = "/tmp/todo.txt"; 411 fileName = "/tmp/todo.txt";
412 } 412 }
413 file.setName( fileName ); 413 file.setName( fileName );
414 if (!file.open( IO_ReadOnly ) ) { 414 if (!file.open( IO_ReadOnly ) ) {
415 return false; 415 return false;
416 416
417 } 417 }
418 ts.setDevice( &file ); 418 ts.setDevice( &file );
419 text = ts.read(); 419 text = ts.read();
420 file.close(); 420 file.close();
421 421
422 status.setText( i18n("Processing todos ...") ); 422 status.setText( i18n("Processing todos ...") );
423 status.raise(); 423 status.raise();
424 qApp->processEvents(); 424 qApp->processEvents();
425 fromString2Cal( calendar, existngCal, text, "Todo" ); 425 fromString2Cal( calendar, existngCal, text, "Todo" );
426 return true; 426 return true;
427} 427}
428int SharpFormat::getNumFromRecord( QString answer, Incidence* inc ) 428int SharpFormat::getNumFromRecord( QString answer, Incidence* inc )
429{ 429{
430 int retval = -1; 430 int retval = -1;
431 QStringList templist; 431 QStringList templist;
432 QString tempString; 432 QString tempString;
433 int start = 0; 433 int start = 0;
434 int len = answer.length(); 434 int len = answer.length();
435 int end = answer.find ("\n",start)+1; 435 int end = answer.find ("\n",start)+1;
436 bool ok = true; 436 bool ok = true;
437 start = end; 437 start = end;
438 int ccc = 0; 438 int ccc = 0;
439 while ( start > 0 ) { 439 while ( start > 0 ) {
440 templist.clear(); 440 templist.clear();
441 ok = true; 441 ok = true;
442 int loopCount = 0; 442 int loopCount = 0;
443 while ( ok ) { 443 while ( ok ) {
444 ++loopCount; 444 ++loopCount;
445 if ( loopCount > 25 ) { 445 if ( loopCount > 25 ) {
446 qDebug("KO: Error in while loop"); 446 qDebug("KO: Error in while loop");
447 ok = false; 447 ok = false;
448 start = 0; 448 start = 0;
449 break; 449 break;
450 } 450 }
451 if ( ok ) 451 if ( ok )
452 tempString = getPart( answer, ok, start ); 452 tempString = getPart( answer, ok, start );
453 if ( start >= len || start == 0 ) { 453 if ( start >= len || start == 0 ) {
454 start = 0; 454 start = 0;
455 ok = false; 455 ok = false;
456 } 456 }
457 if ( tempString.right(1) =="\n" ) 457 if ( tempString.right(1) =="\n" )
458 tempString = tempString.left( tempString.length()-1); 458 tempString = tempString.left( tempString.length()-1);
459 459
460 templist.append( tempString ); 460 templist.append( tempString );
461 } 461 }
462 ++ccc; 462 ++ccc;
463 if ( ccc == 2 && loopCount < 25 ) { 463 if ( ccc == 2 && loopCount < 25 ) {
464 start = 0; 464 start = 0;
465 bool ok; 465 bool ok;
466 int newnum = templist[0].toInt( &ok ); 466 int newnum = templist[0].toInt( &ok );
467 if ( ok && newnum > 0) { 467 if ( ok && newnum > 0) {
468 retval = newnum; 468 retval = newnum;
469 inc->setZaurusId( newnum ); 469 inc->setID( "Sharp_DTM",newnum );
470 inc->setZaurusUid( getCsum( templist ) ); 470 inc->setZaurusUid( getCsum( templist ) );
471 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 471 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
472 } 472 }
473 } 473 }
474 } 474 }
475 //qDebug("getNumFromRecord returning : %d ", retval); 475 //qDebug("getNumFromRecord returning : %d ", retval);
476 return retval; 476 return retval;
477} 477}
478bool SharpFormat::save( Calendar *calendar) 478bool SharpFormat::save( Calendar *calendar)
479{ 479{
480 480
481 QLabel status ( i18n("Processing/adding events ..."), 0 ); 481 QLabel status ( i18n("Processing/adding events ..."), 0 );
482 int w = status.sizeHint().width()+20 ; 482 int w = status.sizeHint().width()+20 ;
483 if ( w < 200 ) w = 200; 483 if ( w < 200 ) w = 200;
484 int h = status.sizeHint().height()+20 ; 484 int h = status.sizeHint().height()+20 ;
485 int dw = QApplication::desktop()->width(); 485 int dw = QApplication::desktop()->width();
486 int dh = QApplication::desktop()->height(); 486 int dh = QApplication::desktop()->height();
487 status.setCaption(i18n("Writing DTM Data") ); 487 status.setCaption(i18n("Writing DTM Data") );
488 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 488 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
489 status.show(); 489 status.show();
490 status.raise(); 490 status.raise();
491 qApp->processEvents(); 491 qApp->processEvents();
492 bool debug = DEBUGMODE; 492 bool debug = DEBUGMODE;
493 QString codec = "utf8"; 493 QString codec = "utf8";
494 QString answer; 494 QString answer;
495 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n"; 495 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n";
496 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n"; 496 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n";
497 QString command; 497 QString command;
498 QPtrList<Event> er = calendar->rawEvents(); 498 QPtrList<Event> er = calendar->rawEvents();
499 Event* ev = er.first(); 499 Event* ev = er.first();
500 QString fileName = "/tmp/kopitempout"; 500 QString fileName = "/tmp/kopitempout";
501 int i = 0; 501 int i = 0;
502 QString changeString = ePrefix; 502 QString changeString = ePrefix;
503 QString deleteString = ePrefix; 503 QString deleteString = ePrefix;
504 bool deleteEnt = false; 504 bool deleteEnt = false;
505 bool changeEnt = false; 505 bool changeEnt = false;
506 QString message = i18n("Processing event # "); 506 QString message = i18n("Processing event # ");
507 int procCount = 0; 507 int procCount = 0;
508 while ( ev ) { 508 while ( ev ) {
509 //qDebug("i %d ", ++i); 509 //qDebug("i %d ", ++i);
510 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 510 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
511 status.setText ( message + QString::number ( ++procCount ) ); 511 status.setText ( message + QString::number ( ++procCount ) );
512 qApp->processEvents(); 512 qApp->processEvents();
513 QString eString = getEventString( ev ); 513 QString eString = getEventString( ev );
514 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 514 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
515 // deleting empty strings does not work. 515 // deleting empty strings does not work.
516 // we write first and x and then delete the record with the x 516 // we write first and x and then delete the record with the x
517 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 517 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
518 changeString += eString + "\n"; 518 changeString += eString + "\n";
519 deleteString += eString + "\n"; 519 deleteString += eString + "\n";
520 deleteEnt = true; 520 deleteEnt = true;
521 changeEnt = true; 521 changeEnt = true;
522 } 522 }
523 else if ( ev->zaurusId() == -1 ) { // add new 523 else if ( ev->getID("Sharp_DTM") == -1 ) { // add new
524 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 524 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
525 system ( command.utf8() ); 525 system ( command.utf8() );
526 QFile file( fileName ); 526 QFile file( fileName );
527 if (!file.open( IO_ReadOnly ) ) { 527 if (!file.open( IO_ReadOnly ) ) {
528 return false; 528 return false;
529 529
530 } 530 }
531 QTextStream ts( &file ); 531 QTextStream ts( &file );
532 ts.setCodec( QTextCodec::codecForName("utf8") ); 532 ts.setCodec( QTextCodec::codecForName("utf8") );
533 answer = ts.read(); 533 answer = ts.read();
534 file.close(); 534 file.close();
535 //qDebug("answer \n%s ", answer.latin1()); 535 //qDebug("answer \n%s ", answer.latin1());
536 getNumFromRecord( answer, ev ) ; 536 getNumFromRecord( answer, ev ) ;
537 537
538 } 538 }
539 else { // change existing 539 else { // change existing
540 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() ); 540 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() );
541 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 541 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
542 changeString += eString + "\n"; 542 changeString += eString + "\n";
543 changeEnt = true; 543 changeEnt = true;
544 544
545 } 545 }
546 } 546 }
547 ev = er.next(); 547 ev = er.next();
548 } 548 }
549 status.setText ( i18n("Changing events ...") ); 549 status.setText ( i18n("Changing events ...") );
550 qApp->processEvents(); 550 qApp->processEvents();
551 //qDebug("changing... "); 551 //qDebug("changing... ");
552 if ( changeEnt ) { 552 if ( changeEnt ) {
553 QFile file( fileName ); 553 QFile file( fileName );
554 if (!file.open( IO_WriteOnly ) ) { 554 if (!file.open( IO_WriteOnly ) ) {
555 return false; 555 return false;
556 556
557 } 557 }
558 QTextStream ts( &file ); 558 QTextStream ts( &file );
559 ts.setCodec( QTextCodec::codecForName("utf8") ); 559 ts.setCodec( QTextCodec::codecForName("utf8") );
560 ts << changeString ; 560 ts << changeString ;
561 file.close(); 561 file.close();
562 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName; 562 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName;
563 system ( command.latin1() ); 563 system ( command.latin1() );
564 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 564 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
565 565
566 } 566 }
567 status.setText ( i18n("Deleting events ...") ); 567 status.setText ( i18n("Deleting events ...") );
568 qApp->processEvents(); 568 qApp->processEvents();
569 //qDebug("deleting... "); 569 //qDebug("deleting... ");
570 if ( deleteEnt ) { 570 if ( deleteEnt ) {
571 QFile file( fileName ); 571 QFile file( fileName );
572 if (!file.open( IO_WriteOnly ) ) { 572 if (!file.open( IO_WriteOnly ) ) {
573 return false; 573 return false;
574 574
575 } 575 }
576 QTextStream ts( &file ); 576 QTextStream ts( &file );
577 ts.setCodec( QTextCodec::codecForName("utf8") ); 577 ts.setCodec( QTextCodec::codecForName("utf8") );
578 ts << deleteString; 578 ts << deleteString;
579 file.close(); 579 file.close();
580 command = "db2file datebook -d -c " + codec+ " < "+ fileName; 580 command = "db2file datebook -d -c " + codec+ " < "+ fileName;
581 system ( command.latin1() ); 581 system ( command.latin1() );
582 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 582 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
583 } 583 }
584 584
585 585
586 changeString = tPrefix; 586 changeString = tPrefix;
587 deleteString = tPrefix; 587 deleteString = tPrefix;
588 status.setText ( i18n("Processing todos ...") ); 588 status.setText ( i18n("Processing todos ...") );
589 qApp->processEvents(); 589 qApp->processEvents();
590 QPtrList<Todo> tl = calendar->rawTodos(); 590 QPtrList<Todo> tl = calendar->rawTodos();
591 Todo* to = tl.first(); 591 Todo* to = tl.first();
592 i = 0; 592 i = 0;
593 message = i18n("Processing todo # "); 593 message = i18n("Processing todo # ");
594 procCount = 0; 594 procCount = 0;
595 while ( to ) { 595 while ( to ) {
596 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 596 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
597 status.setText ( message + QString::number ( ++procCount ) ); 597 status.setText ( message + QString::number ( ++procCount ) );
598 qApp->processEvents(); 598 qApp->processEvents();
599 QString eString = getTodoString( to ); 599 QString eString = getTodoString( to );
600 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 600 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
601 // deleting empty strings does not work. 601 // deleting empty strings does not work.
602 // we write first and x and then delete the record with the x 602 // we write first and x and then delete the record with the x
603 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 603 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
604 changeString += eString + "\n"; 604 changeString += eString + "\n";
605 deleteString += eString + "\n"; 605 deleteString += eString + "\n";
606 deleteEnt = true; 606 deleteEnt = true;
607 changeEnt = true; 607 changeEnt = true;
608 } 608 }
609 else if ( to->zaurusId() == -1 ) { // add new 609 else if ( to->getID("Sharp_DTM") == -1 ) { // add new
610 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName; 610 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName;
611 system ( command.utf8() ); 611 system ( command.utf8() );
612 QFile file( fileName ); 612 QFile file( fileName );
613 if (!file.open( IO_ReadOnly ) ) { 613 if (!file.open( IO_ReadOnly ) ) {
614 return false; 614 return false;
615 615
616 } 616 }
617 QTextStream ts( &file ); 617 QTextStream ts( &file );
618 ts.setCodec( QTextCodec::codecForName("utf8") ); 618 ts.setCodec( QTextCodec::codecForName("utf8") );
619 answer = ts.read(); 619 answer = ts.read();
620 file.close(); 620 file.close();
621 //qDebug("answer \n%s ", answer.latin1()); 621 //qDebug("answer \n%s ", answer.latin1());
622 getNumFromRecord( answer, to ) ; 622 getNumFromRecord( answer, to ) ;
623 623
624 } 624 }
625 else { // change existing 625 else { // change existing
626 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() ); 626 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() );
627 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 627 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
628 changeString += eString + "\n"; 628 changeString += eString + "\n";
629 changeEnt = true; 629 changeEnt = true;
630 630
631 } 631 }
632 } 632 }
633 633
634 to = tl.next(); 634 to = tl.next();
635 } 635 }
636 status.setText ( i18n("Changing todos ...") ); 636 status.setText ( i18n("Changing todos ...") );
637 qApp->processEvents(); 637 qApp->processEvents();
638 //qDebug("changing... "); 638 //qDebug("changing... ");
639 if ( changeEnt ) { 639 if ( changeEnt ) {
640 QFile file( fileName ); 640 QFile file( fileName );
641 if (!file.open( IO_WriteOnly ) ) { 641 if (!file.open( IO_WriteOnly ) ) {
642 return false; 642 return false;
643 643
644 } 644 }
645 QTextStream ts( &file ); 645 QTextStream ts( &file );
646 ts.setCodec( QTextCodec::codecForName("utf8") ); 646 ts.setCodec( QTextCodec::codecForName("utf8") );
647 ts << changeString ; 647 ts << changeString ;
648 file.close(); 648 file.close();
649 command = "db2file todo -w -g -c " + codec+ " < "+ fileName; 649 command = "db2file todo -w -g -c " + codec+ " < "+ fileName;
650 system ( command.latin1() ); 650 system ( command.latin1() );
651 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 651 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
652 652
653 } 653 }
654 status.setText ( i18n("Deleting todos ...") ); 654 status.setText ( i18n("Deleting todos ...") );
655 qApp->processEvents(); 655 qApp->processEvents();
656 //qDebug("deleting... "); 656 //qDebug("deleting... ");
657 if ( deleteEnt ) { 657 if ( deleteEnt ) {
658 QFile file( fileName ); 658 QFile file( fileName );
659 if (!file.open( IO_WriteOnly ) ) { 659 if (!file.open( IO_WriteOnly ) ) {
660 return false; 660 return false;
661 661
662 } 662 }
663 QTextStream ts( &file ); 663 QTextStream ts( &file );
664 ts.setCodec( QTextCodec::codecForName("utf8") ); 664 ts.setCodec( QTextCodec::codecForName("utf8") );
665 ts << deleteString; 665 ts << deleteString;
666 file.close(); 666 file.close();
667 command = "db2file todo -d -c " + codec+ " < "+ fileName; 667 command = "db2file todo -d -c " + codec+ " < "+ fileName;
668 system ( command.latin1() ); 668 system ( command.latin1() );
669 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 669 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
670 } 670 }
671 671
672 return true; 672 return true;
673} 673}
674QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ ) 674QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ )
675{ 675{
676 QString datestr; 676 QString datestr;
677 QString timestr; 677 QString timestr;
678 int offset = KGlobal::locale()->localTimeOffset( dti ); 678 int offset = KGlobal::locale()->localTimeOffset( dti );
679 QDateTime dt; 679 QDateTime dt;
680 if (useTZ) 680 if (useTZ)
681 dt = dti.addSecs ( -(offset*60)); 681 dt = dti.addSecs ( -(offset*60));
682 else 682 else
683 dt = dti; 683 dt = dti;
684 if(dt.date().isValid()){ 684 if(dt.date().isValid()){
685 const QDate& date = dt.date(); 685 const QDate& date = dt.date();
686 datestr.sprintf("%04d%02d%02d", 686 datestr.sprintf("%04d%02d%02d",
687 date.year(), date.month(), date.day()); 687 date.year(), date.month(), date.day());
688 } 688 }
689 if(dt.time().isValid()){ 689 if(dt.time().isValid()){
690 const QTime& time = dt.time(); 690 const QTime& time = dt.time();
691 timestr.sprintf("T%02d%02d%02d", 691 timestr.sprintf("T%02d%02d%02d",
692 time.hour(), time.minute(), time.second()); 692 time.hour(), time.minute(), time.second());
693 } 693 }
694 return datestr + timestr; 694 return datestr + timestr;
695} 695}
696QString SharpFormat::getEventString( Event* event ) 696QString SharpFormat::getEventString( Event* event )
697{ 697{
698 QStringList list; 698 QStringList list;
699 list.append( QString::number(event->zaurusId() ) ); 699 list.append( QString::number(event->getID("Sharp_DTM") ) );
700 list.append( event->categories().join(",") ); 700 list.append( event->categories().join(",") );
701 if ( !event->summary().isEmpty() ) 701 if ( !event->summary().isEmpty() )
702 list.append( event->summary() ); 702 list.append( event->summary() );
703 else 703 else
704 list.append("" ); 704 list.append("" );
705 if ( !event->location().isEmpty() ) 705 if ( !event->location().isEmpty() )
706 list.append( event->location() ); 706 list.append( event->location() );
707 else 707 else
708 list.append("" ); 708 list.append("" );
709 if ( !event->description().isEmpty() ) 709 if ( !event->description().isEmpty() )
710 list.append( event->description() ); 710 list.append( event->description() );
711 else 711 else
712 list.append( "" ); 712 list.append( "" );
713 if ( event->doesFloat () ) { 713 if ( event->doesFloat () ) {
714 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false )); 714 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false ));
715 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6 715 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6
716 list.append( "1" ); 716 list.append( "1" );
717 717
718 } 718 }
719 else { 719 else {
720 list.append( dtToString( event->dtStart()) ); 720 list.append( dtToString( event->dtStart()) );
721 list.append( dtToString( event->dtEnd()) ); //6 721 list.append( dtToString( event->dtEnd()) ); //6
722 list.append( "0" ); 722 list.append( "0" );
723 } 723 }
724 bool noAlarm = true; 724 bool noAlarm = true;
725 if ( event->alarms().count() > 0 ) { 725 if ( event->alarms().count() > 0 ) {
726 Alarm * al = event->alarms().first(); 726 Alarm * al = event->alarms().first();
727 if ( al->enabled() ) { 727 if ( al->enabled() ) {
728 noAlarm = false; 728 noAlarm = false;
729 list.append( "0" ); // yes, 0 == alarm 729 list.append( "0" ); // yes, 0 == alarm
730 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) ); 730 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) );
731 if ( al->type() == Alarm::Audio ) 731 if ( al->type() == Alarm::Audio )
732 list.append( "1" ); // type audio 732 list.append( "1" ); // type audio
733 else 733 else
734 list.append( "0" ); // type silent 734 list.append( "0" ); // type silent
735 } 735 }
736 } 736 }
737 if ( noAlarm ) { 737 if ( noAlarm ) {
738 list.append( "1" ); // yes, 1 == no alarm 738 list.append( "1" ); // yes, 1 == no alarm
739 list.append( "0" ); // no alarm offset 739 list.append( "0" ); // no alarm offset
740 list.append( "1" ); // type 740 list.append( "1" ); // type
741 } 741 }
742 // next is: 11 742 // next is: 11
743 // next is: 11-16 are recurrence 743 // next is: 11-16 are recurrence
744 Recurrence* rec = event->recurrence(); 744 Recurrence* rec = event->recurrence();
745 745
746 bool writeEndDate = false; 746 bool writeEndDate = false;
747 switch ( rec->doesRecur() ) 747 switch ( rec->doesRecur() )
748 { 748 {
749 case Recurrence::rDaily: // 0 749 case Recurrence::rDaily: // 0
750 list.append( "0" ); 750 list.append( "0" );
751 list.append( QString::number( rec->frequency() ));//12 751 list.append( QString::number( rec->frequency() ));//12
752 list.append( "0" ); 752 list.append( "0" );
753 list.append( "0" ); 753 list.append( "0" );
754 writeEndDate = true; 754 writeEndDate = true;
755 break; 755 break;
756 case Recurrence::rWeekly:// 1 756 case Recurrence::rWeekly:// 1
757 list.append( "1" ); 757 list.append( "1" );
758 list.append( QString::number( rec->frequency()) );//12 758 list.append( QString::number( rec->frequency()) );//12
759 list.append( "0" ); 759 list.append( "0" );
760 { 760 {
761 int days = 0; 761 int days = 0;
762 QBitArray weekDays = rec->days(); 762 QBitArray weekDays = rec->days();
763 int i; 763 int i;
764 for( i = 1; i <= 7; ++i ) { 764 for( i = 1; i <= 7; ++i ) {
765 if ( weekDays[i-1] ) { 765 if ( weekDays[i-1] ) {
766 days += 1 << (i-1); 766 days += 1 << (i-1);
767 } 767 }
768 } 768 }
769 list.append( QString::number( days ) ); 769 list.append( QString::number( days ) );
770 } 770 }
771 //pending weekdays 771 //pending weekdays
772 writeEndDate = true; 772 writeEndDate = true;
773 773
774 break; 774 break;
775 case Recurrence::rMonthlyPos:// 2 775 case Recurrence::rMonthlyPos:// 2
776 list.append( "2" ); 776 list.append( "2" );
777 list.append( QString::number( rec->frequency()) );//12 777 list.append( QString::number( rec->frequency()) );//12
778 778
779 writeEndDate = true; 779 writeEndDate = true;
780 { 780 {
781 int count = 1; 781 int count = 1;
782 QPtrList<Recurrence::rMonthPos> rmp; 782 QPtrList<Recurrence::rMonthPos> rmp;
783 rmp = rec->monthPositions(); 783 rmp = rec->monthPositions();
784 if ( rmp.first()->negative ) 784 if ( rmp.first()->negative )
785 count = 5 - rmp.first()->rPos - 1; 785 count = 5 - rmp.first()->rPos - 1;
786 else 786 else
787 count = rmp.first()->rPos - 1; 787 count = rmp.first()->rPos - 1;
788 list.append( QString::number( count ) ); 788 list.append( QString::number( count ) );
789 789
790 } 790 }
791 791
792 list.append( "0" ); 792 list.append( "0" );
793 break; 793 break;
794 case Recurrence::rMonthlyDay:// 3 794 case Recurrence::rMonthlyDay:// 3
795 list.append( "3" ); 795 list.append( "3" );
796 list.append( QString::number( rec->frequency()) );//12 796 list.append( QString::number( rec->frequency()) );//12
797 list.append( "0" ); 797 list.append( "0" );
798 list.append( "0" ); 798 list.append( "0" );
799 writeEndDate = true; 799 writeEndDate = true;
800 break; 800 break;
801 case Recurrence::rYearlyMonth://4 801 case Recurrence::rYearlyMonth://4
802 list.append( "4" ); 802 list.append( "4" );
803 list.append( QString::number( rec->frequency()) );//12 803 list.append( QString::number( rec->frequency()) );//12
804 list.append( "0" ); 804 list.append( "0" );
805 list.append( "0" ); 805 list.append( "0" );
806 writeEndDate = true; 806 writeEndDate = true;
807 break; 807 break;
808 808
809 default: 809 default:
810 list.append( "255" ); 810 list.append( "255" );
811 list.append( QString() ); 811 list.append( QString() );
812 list.append( "0" ); 812 list.append( "0" );
813 list.append( QString() ); 813 list.append( QString() );
814 list.append( "0" ); 814 list.append( "0" );
815 list.append( "20991231T000000" ); 815 list.append( "20991231T000000" );
816 break; 816 break;
817 } 817 }
818 if ( writeEndDate ) { 818 if ( writeEndDate ) {
819 819
820 if ( rec->endDate().isValid() ) { // 15 + 16 820 if ( rec->endDate().isValid() ) { // 15 + 16
821 list.append( "1" ); 821 list.append( "1" );
822 list.append( dtToString( rec->endDate()) ); 822 list.append( dtToString( rec->endDate()) );
823 } else { 823 } else {
824 list.append( "0" ); 824 list.append( "0" );
825 list.append( "20991231T000000" ); 825 list.append( "20991231T000000" );
826 } 826 }
827 827
828 } 828 }
829 if ( event->doesFloat () ) { 829 if ( event->doesFloat () ) {
830 list.append( dtToString( event->dtStart(), false ).left( 8 )); 830 list.append( dtToString( event->dtStart(), false ).left( 8 ));
831 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6 831 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6
832 832
833 } 833 }
834 else { 834 else {
835 list.append( QString() ); 835 list.append( QString() );
836 list.append( QString() ); 836 list.append( QString() );
837 837
838 } 838 }
839 if (event->dtStart().date() == event->dtEnd().date() ) 839 if (event->dtStart().date() == event->dtEnd().date() )
840 list.append( "0" ); 840 list.append( "0" );
841 else 841 else
842 list.append( "1" ); 842 list.append( "1" );
843 843
844 844
845 for(QStringList::Iterator it=list.begin(); 845 for(QStringList::Iterator it=list.begin();
846 it!=list.end(); ++it){ 846 it!=list.end(); ++it){
847 QString& s = (*it); 847 QString& s = (*it);
848 s.replace(QRegExp("\""), "\"\""); 848 s.replace(QRegExp("\""), "\"\"");
849 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 849 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
850 s.prepend('\"'); 850 s.prepend('\"');
851 s.append('\"'); 851 s.append('\"');
852 } else if(s.isEmpty() && !s.isNull()){ 852 } else if(s.isEmpty() && !s.isNull()){
853 s = "\"\""; 853 s = "\"\"";
854 } 854 }
855 } 855 }
856 return list.join(","); 856 return list.join(",");
857 857
858 858
859} 859}
860QString SharpFormat::getTodoString( Todo* todo ) 860QString SharpFormat::getTodoString( Todo* todo )
861{ 861{
862 QStringList list; 862 QStringList list;
863 list.append( QString::number( todo->zaurusId() ) ); 863 list.append( QString::number( todo->getID("Sharp_DTM") ) );
864 list.append( todo->categories().join(",") ); 864 list.append( todo->categories().join(",") );
865 865
866 if ( todo->hasStartDate() ) { 866 if ( todo->hasStartDate() ) {
867 list.append( dtToString( todo->dtStart()) ); 867 list.append( dtToString( todo->dtStart()) );
868 } else 868 } else
869 list.append( QString() ); 869 list.append( QString() );
870 870
871 if ( todo->hasDueDate() ) { 871 if ( todo->hasDueDate() ) {
872 QTime tim; 872 QTime tim;
873 if ( todo->doesFloat()) { 873 if ( todo->doesFloat()) {
874 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; 874 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
875 } else { 875 } else {
876 list.append( dtToString(todo->dtDue() ) ); 876 list.append( dtToString(todo->dtDue() ) );
877 } 877 }
878 } else 878 } else
879 list.append( QString() ); 879 list.append( QString() );
880 880
881 if ( todo->isCompleted() ) { 881 if ( todo->isCompleted() ) {
882 list.append( dtToString( todo->completed()) ); 882 list.append( dtToString( todo->completed()) );
883 list.append( "0" ); // yes 0 == completed 883 list.append( "0" ); // yes 0 == completed
884 } else { 884 } else {
885 list.append( dtToString( todo->completed()) ); 885 list.append( dtToString( todo->completed()) );
886 list.append( "1" ); 886 list.append( "1" );
887 } 887 }
888 list.append( QString::number( todo->priority() )); 888 list.append( QString::number( todo->priority() ));
889 if( ! todo->summary().isEmpty() ) 889 if( ! todo->summary().isEmpty() )
890 list.append( todo->summary() ); 890 list.append( todo->summary() );
891 else 891 else
892 list.append( "" ); 892 list.append( "" );
893 if (! todo->description().isEmpty() ) 893 if (! todo->description().isEmpty() )
894 list.append( todo->description() ); 894 list.append( todo->description() );
895 else 895 else
896 list.append( "" ); 896 list.append( "" );
897 for(QStringList::Iterator it=list.begin(); 897 for(QStringList::Iterator it=list.begin();
898 it!=list.end(); ++it){ 898 it!=list.end(); ++it){
899 QString& s = (*it); 899 QString& s = (*it);
900 s.replace(QRegExp("\""), "\"\""); 900 s.replace(QRegExp("\""), "\"\"");
901 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 901 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
902 s.prepend('\"'); 902 s.prepend('\"');
903 s.append('\"'); 903 s.append('\"');
904 } else if(s.isEmpty() && !s.isNull()){ 904 } else if(s.isEmpty() && !s.isNull()){
905 s = "\"\""; 905 s = "\"\"";
906 } 906 }
907 } 907 }
908 return list.join(","); 908 return list.join(",");
909} 909}
910QString SharpFormat::getPart( const QString & text, bool &ok, int &start ) 910QString SharpFormat::getPart( const QString & text, bool &ok, int &start )
911{ 911{
912 //qDebug("start %d ", start); 912 //qDebug("start %d ", start);
913 913
914 QString retval =""; 914 QString retval ="";
915 if ( text.at(start) == '"' ) { 915 if ( text.at(start) == '"' ) {
916 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) { 916 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) {
917 start = start +2; 917 start = start +2;
918 if ( text.mid( start,1) == "," ) { 918 if ( text.mid( start,1) == "," ) {
919 start += 1; 919 start += 1;
920 } 920 }
921 retval = ""; 921 retval = "";
922 if ( text.mid( start,1) == "\n" ) { 922 if ( text.mid( start,1) == "\n" ) {
923 start += 1; 923 start += 1;
924 ok = false; 924 ok = false;
925 } 925 }
926 return retval; 926 return retval;
927 } 927 }
928 int hk = start+1; 928 int hk = start+1;
929 hk = text.find ('"',hk); 929 hk = text.find ('"',hk);
930 while ( text.at(hk+1) == '"' ) 930 while ( text.at(hk+1) == '"' )
931 hk = text.find ('"',hk+2); 931 hk = text.find ('"',hk+2);
932 retval = text.mid( start+1, hk-start-1); 932 retval = text.mid( start+1, hk-start-1);
933 start = hk+1; 933 start = hk+1;
934 retval.replace( QRegExp("\"\""), "\""); 934 retval.replace( QRegExp("\"\""), "\"");
935 if ( text.mid( start,1) == "," ) { 935 if ( text.mid( start,1) == "," ) {
936 start += 1; 936 start += 1;
937 } 937 }
938 if ( text.mid( start,1) == "\n" ) { 938 if ( text.mid( start,1) == "\n" ) {
939 start += 1; 939 start += 1;
940 ok = false; 940 ok = false;
941 } 941 }
942 //qDebug("retval***%s*** ",retval.latin1() ); 942 //qDebug("retval***%s*** ",retval.latin1() );
943 return retval; 943 return retval;
944 944
945 } else { 945 } else {
946 int nl = text.find ("\n",start); 946 int nl = text.find ("\n",start);
947 int kom = text.find (',',start); 947 int kom = text.find (',',start);
948 if ( kom < nl ) { 948 if ( kom < nl ) {
949 // qDebug("kom < nl %d ", kom); 949 // qDebug("kom < nl %d ", kom);
950 retval = text.mid(start, kom-start); 950 retval = text.mid(start, kom-start);
951 start = kom+1; 951 start = kom+1;
952 return retval; 952 return retval;
953 } else { 953 } else {
954 if ( nl == kom ) { 954 if ( nl == kom ) {
955 // qDebug(" nl == kom "); 955 // qDebug(" nl == kom ");
956 start = 0; 956 start = 0;
957 ok = false; 957 ok = false;
958 return "0"; 958 return "0";
959 } 959 }
960 // qDebug(" nl < kom ", nl); 960 // qDebug(" nl < kom ", nl);
961 retval = text.mid( start, nl-start); 961 retval = text.mid( start, nl-start);
962 ok = false; 962 ok = false;
963 start = nl+1; 963 start = nl+1;
964 return retval; 964 return retval;
965 } 965 }
966 } 966 }
967} 967}
968bool SharpFormat::fromString( Calendar *calendar, const QString & text) 968bool SharpFormat::fromString( Calendar *calendar, const QString & text)
969{ 969{
970 return false; 970 return false;
971} 971}
972bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type) 972bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type)
973{ 973{
974 // qDebug("test %s ", text.latin1()); 974 // qDebug("test %s ", text.latin1());
975 QStringList templist; 975 QStringList templist;
976 QString tempString; 976 QString tempString;
977 int start = 0; 977 int start = 0;
978 int len = text.length(); 978 int len = text.length();
979 int end = text.find ("\n",start)+1; 979 int end = text.find ("\n",start)+1;
980 bool ok = true; 980 bool ok = true;
981 start = end; 981 start = end;
982 SharpParser handler( calendar ); 982 SharpParser handler( calendar );
983 handler.setCategoriesList( mCategories ); 983 handler.setCategoriesList( mCategories );
984 while ( start > 0 ) { 984 while ( start > 0 ) {
985 templist.clear(); 985 templist.clear();
986 ok = true; 986 ok = true;
987 while ( ok ) { 987 while ( ok ) {
988 tempString = getPart( text, ok, start ); 988 tempString = getPart( text, ok, start );
989 if ( start >= len || start == 0 ) { 989 if ( start >= len || start == 0 ) {
990 start = 0; 990 start = 0;
991 ok = false; 991 ok = false;
992 } 992 }
993 if ( tempString.right(1) =="\n" ) 993 if ( tempString.right(1) =="\n" )
994 tempString = tempString.left( tempString.length()-1); 994 tempString = tempString.left( tempString.length()-1);
995 //if ( ok ) 995 //if ( ok )
996 templist.append( tempString ); 996 templist.append( tempString );
997 //qDebug("%d ---%s---", templist.count(),tempString.latin1() ); 997 //qDebug("%d ---%s---", templist.count(),tempString.latin1() );
998 } 998 }
999 handler.startElement( existingCalendar, templist, type ); 999 handler.startElement( existingCalendar, templist, type );
1000 } 1000 }
1001 1001
1002 return false; 1002 return false;
1003} 1003}
1004 1004
1005QString SharpFormat::toString( Calendar * ) 1005QString SharpFormat::toString( Calendar * )
1006{ 1006{
1007 return QString::null; 1007 return QString::null;
1008} 1008}