summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-08-07 15:02:15 (UTC)
committer zautrix <zautrix>2004-08-07 15:02:15 (UTC)
commita9a774e19c02f03de948b6064804b913abd4f08b (patch) (unidiff)
tree351a08e627bc661f9b69a0af7452f9749865e619
parent31764784e8753157a936e42e21dcdc41bd8e2eb7 (diff)
downloadkdepimpi-a9a774e19c02f03de948b6064804b913abd4f08b.zip
kdepimpi-a9a774e19c02f03de948b6064804b913abd4f08b.tar.gz
kdepimpi-a9a774e19c02f03de948b6064804b913abd4f08b.tar.bz2
more Sync fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp5
-rw-r--r--libkcal/sharpformat.cpp2
2 files changed, 5 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 5150455..f859b90 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3507 +1,3510 @@
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->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 730 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
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->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 776 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
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}
871// probaly useless 871// probaly useless
872void CalendarView::setupExternSyncProfiles() 872void CalendarView::setupExternSyncProfiles()
873{ 873{
874 Event* lse; 874 Event* lse;
875 mExternLastSyncEvent.clear(); 875 mExternLastSyncEvent.clear();
876 int i; 876 int i;
877 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) { 877 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
878 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] ); 878 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
879 if ( lse ) 879 if ( lse )
880 mExternLastSyncEvent.append( lse ); 880 mExternLastSyncEvent.append( lse );
881 else 881 else
882 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1()); 882 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
883 } 883 }
884 884
885} 885}
886// we check, if the to delete event has a id for a profile 886// we check, if the to delete event has a id for a profile
887// if yes, we set this id in the profile to delete 887// if yes, we set this id in the profile to delete
888void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 888void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
889{ 889{
890 if ( ! lastSync.count() == 0 ) 890 if ( lastSync.count() == 0 ) {
891 //qDebug(" lastSync.count() == 0");
891 return; 892 return;
893 }
892 if ( toDelete->type() == "Journal" ) 894 if ( toDelete->type() == "Journal" )
893 return; 895 return;
894 896
895 Event* eve = lastSync.first(); 897 Event* eve = lastSync.first();
896 898
897 while ( eve ) { 899 while ( eve ) {
898 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 900 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
899 if ( !id.isEmpty() ) { 901 if ( !id.isEmpty() ) {
900 QString des = eve->description(); 902 QString des = eve->description();
901 QString pref = "e"; 903 QString pref = "e";
902 if ( toDelete->type() == "Todo" ) 904 if ( toDelete->type() == "Todo" )
903 pref = "t"; 905 pref = "t";
904 des += pref+ id + ","; 906 des += pref+ id + ",";
905 eve->setReadOnly( false ); 907 eve->setReadOnly( false );
906 eve->setDescription( des ); 908 eve->setDescription( des );
909 //qDebug("setdes %s ", des.latin1());
907 eve->setReadOnly( true ); 910 eve->setReadOnly( true );
908 } 911 }
909 eve = lastSync.next(); 912 eve = lastSync.next();
910 } 913 }
911 914
912} 915}
913void CalendarView::checkExternalId( Incidence * inc ) 916void CalendarView::checkExternalId( Incidence * inc )
914{ 917{
915 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 918 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
916 checkExternSyncEvent( lastSync, inc ); 919 checkExternSyncEvent( lastSync, inc );
917 920
918} 921}
919bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 922bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
920{ 923{
921 bool syncOK = true; 924 bool syncOK = true;
922 int addedEvent = 0; 925 int addedEvent = 0;
923 int addedEventR = 0; 926 int addedEventR = 0;
924 int deletedEventR = 0; 927 int deletedEventR = 0;
925 int deletedEventL = 0; 928 int deletedEventL = 0;
926 int changedLocal = 0; 929 int changedLocal = 0;
927 int changedRemote = 0; 930 int changedRemote = 0;
928 //QPtrList<Event> el = local->rawEvents(); 931 //QPtrList<Event> el = local->rawEvents();
929 Event* eventR; 932 Event* eventR;
930 QString uid; 933 QString uid;
931 int take; 934 int take;
932 Event* eventL; 935 Event* eventL;
933 Event* eventRSync; 936 Event* eventRSync;
934 Event* eventLSync; 937 Event* eventLSync;
935 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 938 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
936 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 939 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
937 bool fullDateRange = false; 940 bool fullDateRange = false;
938 mLastCalendarSync = QDateTime::currentDateTime(); 941 mLastCalendarSync = QDateTime::currentDateTime();
939 QDateTime modifiedCalendar = mLastCalendarSync;; 942 QDateTime modifiedCalendar = mLastCalendarSync;;
940 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 943 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
941 if ( eventR ) { 944 if ( eventR ) {
942 eventRSync = (Event*) eventR->clone(); 945 eventRSync = (Event*) eventR->clone();
943 remote->deleteEvent(eventR ); 946 remote->deleteEvent(eventR );
944 947
945 } else { 948 } else {
946 fullDateRange = true; 949 fullDateRange = true;
947 eventRSync = new Event(); 950 eventRSync = new Event();
948 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 951 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
949 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 952 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
950 eventRSync->setDtStart( mLastCalendarSync ); 953 eventRSync->setDtStart( mLastCalendarSync );
951 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 954 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
952 eventRSync->setCategories( i18n("SyncEvent") ); 955 eventRSync->setCategories( i18n("SyncEvent") );
953 } 956 }
954 eventLSync = getLastSyncEvent(); 957 eventLSync = getLastSyncEvent();
955 if ( eventLSync->dtStart() == mLastCalendarSync ) 958 if ( eventLSync->dtStart() == mLastCalendarSync )
956 fullDateRange = true; 959 fullDateRange = true;
957 960
958 if ( ! fullDateRange ) { 961 if ( ! fullDateRange ) {
959 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 962 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
960 963
961 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 964 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
962 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 965 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
963 fullDateRange = true; 966 fullDateRange = true;
964 } 967 }
965 } 968 }
966 if ( fullDateRange ) 969 if ( fullDateRange )
967 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 970 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
968 else 971 else
969 mLastCalendarSync = eventLSync->dtStart(); 972 mLastCalendarSync = eventLSync->dtStart();
970 // for resyncing if own file has changed 973 // for resyncing if own file has changed
971 if ( mCurrentSyncDevice == "deleteaftersync" ) { 974 if ( mCurrentSyncDevice == "deleteaftersync" ) {
972 mLastCalendarSync = loadedFileVersion; 975 mLastCalendarSync = loadedFileVersion;
973 qDebug("setting mLastCalendarSync "); 976 qDebug("setting mLastCalendarSync ");
974 } 977 }
975 //qDebug("*************************** "); 978 //qDebug("*************************** ");
976 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 979 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
977 QPtrList<Incidence> er = remote->rawIncidences(); 980 QPtrList<Incidence> er = remote->rawIncidences();
978 Incidence* inR = er.first(); 981 Incidence* inR = er.first();
979 Incidence* inL; 982 Incidence* inL;
980 QProgressBar bar( er.count(),0 ); 983 QProgressBar bar( er.count(),0 );
981 bar.setCaption (i18n("Syncing - close to abort!") ); 984 bar.setCaption (i18n("Syncing - close to abort!") );
982 985
983 int w = 300; 986 int w = 300;
984 if ( QApplication::desktop()->width() < 320 ) 987 if ( QApplication::desktop()->width() < 320 )
985 w = 220; 988 w = 220;
986 int h = bar.sizeHint().height() ; 989 int h = bar.sizeHint().height() ;
987 int dw = QApplication::desktop()->width(); 990 int dw = QApplication::desktop()->width();
988 int dh = QApplication::desktop()->height(); 991 int dh = QApplication::desktop()->height();
989 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 992 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
990 bar.show(); 993 bar.show();
991 int modulo = (er.count()/10)+1; 994 int modulo = (er.count()/10)+1;
992 int incCounter = 0; 995 int incCounter = 0;
993 while ( inR ) { 996 while ( inR ) {
994 if ( ! bar.isVisible() ) 997 if ( ! bar.isVisible() )
995 return false; 998 return false;
996 if ( incCounter % modulo == 0 ) 999 if ( incCounter % modulo == 0 )
997 bar.setProgress( incCounter ); 1000 bar.setProgress( incCounter );
998 ++incCounter; 1001 ++incCounter;
999 uid = inR->uid(); 1002 uid = inR->uid();
1000 bool skipIncidence = false; 1003 bool skipIncidence = false;
1001 if ( uid.left(15) == QString("last-syncEvent-") ) 1004 if ( uid.left(15) == QString("last-syncEvent-") )
1002 skipIncidence = true; 1005 skipIncidence = true;
1003 1006
1004 qApp->processEvents(); 1007 qApp->processEvents();
1005 if ( !skipIncidence ) { 1008 if ( !skipIncidence ) {
1006 inL = local->incidence( uid ); 1009 inL = local->incidence( uid );
1007 if ( inL ) { // maybe conflict - same uid in both calendars 1010 if ( inL ) { // maybe conflict - same uid in both calendars
1008 int maxrev = inL->revision(); 1011 int maxrev = inL->revision();
1009 if ( maxrev < inR->revision() ) 1012 if ( maxrev < inR->revision() )
1010 maxrev = inR->revision(); 1013 maxrev = inR->revision();
1011 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1014 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1012 //qDebug("take %d %s ", take, inL->summary().latin1()); 1015 //qDebug("take %d %s ", take, inL->summary().latin1());
1013 if ( take == 3 ) 1016 if ( take == 3 )
1014 return false; 1017 return false;
1015 if ( take == 1 ) {// take local 1018 if ( take == 1 ) {// take local
1016 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1019 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1017 remote->deleteIncidence( inR ); 1020 remote->deleteIncidence( inR );
1018 if ( inL->revision() < maxrev ) 1021 if ( inL->revision() < maxrev )
1019 inL->setRevision( maxrev ); 1022 inL->setRevision( maxrev );
1020 remote->addIncidence( inL->clone() ); 1023 remote->addIncidence( inL->clone() );
1021 ++changedRemote; 1024 ++changedRemote;
1022 } else { 1025 } else {
1023 if ( inR->revision() < maxrev ) 1026 if ( inR->revision() < maxrev )
1024 inR->setRevision( maxrev ); 1027 inR->setRevision( maxrev );
1025 local->deleteIncidence( inL ); 1028 local->deleteIncidence( inL );
1026 local->addIncidence( inR->clone() ); 1029 local->addIncidence( inR->clone() );
1027 ++changedLocal; 1030 ++changedLocal;
1028 } 1031 }
1029 } 1032 }
1030 } else { // no conflict 1033 } else { // no conflict
1031 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1034 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1032 QString des = eventLSync->description(); 1035 QString des = eventLSync->description();
1033 QString pref = "e"; 1036 QString pref = "e";
1034 if ( inR->type() == "Todo" ) 1037 if ( inR->type() == "Todo" )
1035 pref = "t"; 1038 pref = "t";
1036 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1039 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1037 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1040 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1038 //remote->deleteIncidence( inR ); 1041 //remote->deleteIncidence( inR );
1039 ++deletedEventR; 1042 ++deletedEventR;
1040 } else { 1043 } else {
1041 inR->setLastModified( modifiedCalendar ); 1044 inR->setLastModified( modifiedCalendar );
1042 local->addIncidence( inR->clone() ); 1045 local->addIncidence( inR->clone() );
1043 ++addedEvent; 1046 ++addedEvent;
1044 } 1047 }
1045 } else { 1048 } else {
1046 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1049 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1047 inR->setLastModified( modifiedCalendar ); 1050 inR->setLastModified( modifiedCalendar );
1048 local->addIncidence( inR->clone() ); 1051 local->addIncidence( inR->clone() );
1049 ++addedEvent; 1052 ++addedEvent;
1050 } else { 1053 } else {
1051 checkExternSyncEvent(eventRSyncSharp, inR); 1054 checkExternSyncEvent(eventRSyncSharp, inR);
1052 remote->deleteIncidence( inR ); 1055 remote->deleteIncidence( inR );
1053 ++deletedEventR; 1056 ++deletedEventR;
1054 } 1057 }
1055 } 1058 }
1056 } 1059 }
1057 } 1060 }
1058 inR = er.next(); 1061 inR = er.next();
1059 } 1062 }
1060 QPtrList<Incidence> el = local->rawIncidences(); 1063 QPtrList<Incidence> el = local->rawIncidences();
1061 inL = el.first(); 1064 inL = el.first();
1062 modulo = (el.count()/10)+1; 1065 modulo = (el.count()/10)+1;
1063 bar.setCaption (i18n("Add / remove events") ); 1066 bar.setCaption (i18n("Add / remove events") );
1064 bar.setTotalSteps ( el.count() ) ; 1067 bar.setTotalSteps ( el.count() ) ;
1065 bar.show(); 1068 bar.show();
1066 incCounter = 0; 1069 incCounter = 0;
1067 1070
1068 while ( inL ) { 1071 while ( inL ) {
1069 1072
1070 qApp->processEvents(); 1073 qApp->processEvents();
1071 if ( ! bar.isVisible() ) 1074 if ( ! bar.isVisible() )
1072 return false; 1075 return false;
1073 if ( incCounter % modulo == 0 ) 1076 if ( incCounter % modulo == 0 )
1074 bar.setProgress( incCounter ); 1077 bar.setProgress( incCounter );
1075 ++incCounter; 1078 ++incCounter;
1076 uid = inL->uid(); 1079 uid = inL->uid();
1077 bool skipIncidence = false; 1080 bool skipIncidence = false;
1078 if ( uid.left(15) == QString("last-syncEvent-") ) 1081 if ( uid.left(15) == QString("last-syncEvent-") )
1079 skipIncidence = true; 1082 skipIncidence = true;
1080 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1083 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1081 skipIncidence = true; 1084 skipIncidence = true;
1082 if ( !skipIncidence ) { 1085 if ( !skipIncidence ) {
1083 inR = remote->incidence( uid ); 1086 inR = remote->incidence( uid );
1084 if ( ! inR ) { 1087 if ( ! inR ) {
1085 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1088 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1086 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1089 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1087 local->deleteIncidence( inL ); 1090 local->deleteIncidence( inL );
1088 ++deletedEventL; 1091 ++deletedEventL;
1089 } else { 1092 } else {
1090 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1093 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1091 inL->removeID(mCurrentSyncDevice ); 1094 inL->removeID(mCurrentSyncDevice );
1092 ++addedEventR; 1095 ++addedEventR;
1093 inL->setLastModified( modifiedCalendar ); 1096 inL->setLastModified( modifiedCalendar );
1094 remote->addIncidence( inL->clone() ); 1097 remote->addIncidence( inL->clone() );
1095 } 1098 }
1096 } 1099 }
1097 } else { 1100 } else {
1098 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1101 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1099 checkExternSyncEvent(eventLSyncSharp, inL); 1102 checkExternSyncEvent(eventLSyncSharp, inL);
1100 local->deleteIncidence( inL ); 1103 local->deleteIncidence( inL );
1101 ++deletedEventL; 1104 ++deletedEventL;
1102 } else { 1105 } else {
1103 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1106 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1104 ++addedEventR; 1107 ++addedEventR;
1105 inL->setLastModified( modifiedCalendar ); 1108 inL->setLastModified( modifiedCalendar );
1106 remote->addIncidence( inL->clone() ); 1109 remote->addIncidence( inL->clone() );
1107 } 1110 }
1108 } 1111 }
1109 } 1112 }
1110 } 1113 }
1111 } 1114 }
1112 inL = el.next(); 1115 inL = el.next();
1113 } 1116 }
1114 1117
1115 bar.hide(); 1118 bar.hide();
1116 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1119 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1117 eventLSync->setReadOnly( false ); 1120 eventLSync->setReadOnly( false );
1118 eventLSync->setDtStart( mLastCalendarSync ); 1121 eventLSync->setDtStart( mLastCalendarSync );
1119 eventRSync->setDtStart( mLastCalendarSync ); 1122 eventRSync->setDtStart( mLastCalendarSync );
1120 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1123 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1121 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1124 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1122 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1125 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1123 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1126 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1124 eventLSync->setReadOnly( true ); 1127 eventLSync->setReadOnly( true );
1125 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1128 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1126 remote->addEvent( eventRSync ); 1129 remote->addEvent( eventRSync );
1127 QString mes; 1130 QString mes;
1128 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 ); 1131 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 );
1129 if ( KOPrefs::instance()->mShowSyncSummary ) { 1132 if ( KOPrefs::instance()->mShowSyncSummary ) {
1130 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1133 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1131 } 1134 }
1132 qDebug( mes ); 1135 qDebug( mes );
1133 mCalendar->checkAlarmForIncidence( 0, true ); 1136 mCalendar->checkAlarmForIncidence( 0, true );
1134 return syncOK; 1137 return syncOK;
1135} 1138}
1136 1139
1137void CalendarView::setSyncDevice( QString s ) 1140void CalendarView::setSyncDevice( QString s )
1138{ 1141{
1139 mCurrentSyncDevice= s; 1142 mCurrentSyncDevice= s;
1140} 1143}
1141void CalendarView::setSyncName( QString s ) 1144void CalendarView::setSyncName( QString s )
1142{ 1145{
1143 mCurrentSyncName= s; 1146 mCurrentSyncName= s;
1144} 1147}
1145bool CalendarView::syncCalendar(QString filename, int mode) 1148bool CalendarView::syncCalendar(QString filename, int mode)
1146{ 1149{
1147 mGlobalSyncMode = SYNC_MODE_NORMAL; 1150 mGlobalSyncMode = SYNC_MODE_NORMAL;
1148 CalendarLocal* calendar = new CalendarLocal(); 1151 CalendarLocal* calendar = new CalendarLocal();
1149 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1152 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1150 FileStorage* storage = new FileStorage( calendar ); 1153 FileStorage* storage = new FileStorage( calendar );
1151 bool syncOK = false; 1154 bool syncOK = false;
1152 storage->setFileName( filename ); 1155 storage->setFileName( filename );
1153 // qDebug("loading ... "); 1156 // qDebug("loading ... ");
1154 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1157 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1155 getEventViewerDialog()->setSyncMode( true ); 1158 getEventViewerDialog()->setSyncMode( true );
1156 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1159 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1157 getEventViewerDialog()->setSyncMode( false ); 1160 getEventViewerDialog()->setSyncMode( false );
1158 if ( syncOK ) { 1161 if ( syncOK ) {
1159 if ( KOPrefs::instance()->mWriteBackFile ) 1162 if ( KOPrefs::instance()->mWriteBackFile )
1160 { 1163 {
1161 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1164 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1162 storage->save(); 1165 storage->save();
1163 } 1166 }
1164 } 1167 }
1165 setModified( true ); 1168 setModified( true );
1166 } 1169 }
1167 delete storage; 1170 delete storage;
1168 delete calendar; 1171 delete calendar;
1169 if ( syncOK ) 1172 if ( syncOK )
1170 updateView(); 1173 updateView();
1171 return syncOK; 1174 return syncOK;
1172} 1175}
1173void CalendarView::syncSharp() 1176void CalendarView::syncSharp()
1174{ 1177{
1175#ifndef DESKTOP_VERSION 1178#ifndef DESKTOP_VERSION
1176 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1179 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1177 //mCurrentSyncDevice = "sharp-DTM"; 1180 //mCurrentSyncDevice = "sharp-DTM";
1178 if ( KOPrefs::instance()->mAskForPreferences ) 1181 if ( KOPrefs::instance()->mAskForPreferences )
1179 edit_sync_options(); 1182 edit_sync_options();
1180 qApp->processEvents(); 1183 qApp->processEvents();
1181 CalendarLocal* calendar = new CalendarLocal(); 1184 CalendarLocal* calendar = new CalendarLocal();
1182 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1185 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1183 bool syncOK = false; 1186 bool syncOK = false;
1184 SharpFormat sharpFormat; 1187 SharpFormat sharpFormat;
1185 if ( sharpFormat.load( calendar, mCalendar ) ) { 1188 if ( sharpFormat.load( calendar, mCalendar ) ) {
1186 getEventViewerDialog()->setSyncMode( true ); 1189 getEventViewerDialog()->setSyncMode( true );
1187 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1190 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1188 getEventViewerDialog()->setSyncMode( false ); 1191 getEventViewerDialog()->setSyncMode( false );
1189 qApp->processEvents(); 1192 qApp->processEvents();
1190 if ( syncOK ) { 1193 if ( syncOK ) {
1191 if ( KOPrefs::instance()->mWriteBackFile ) 1194 if ( KOPrefs::instance()->mWriteBackFile )
1192 { 1195 {
1193 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1196 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1194 Incidence* inc = iL.first(); 1197 Incidence* inc = iL.first();
1195 /* obsolete 1198 /* obsolete
1196 while ( inc ) { 1199 while ( inc ) {
1197 inc->setZaurusStat( inc->revision () ); 1200 inc->setZaurusStat( inc->revision () );
1198 inc = iL.next(); 1201 inc = iL.next();
1199 } 1202 }
1200 */ 1203 */
1201 // pending: clean last sync event description 1204 // pending: clean last sync event description
1202 sharpFormat.save(calendar); 1205 sharpFormat.save(calendar);
1203 iL = calendar->rawIncidences(); 1206 iL = calendar->rawIncidences();
1204 inc = iL.first(); 1207 inc = iL.first();
1205 Incidence* loc; 1208 Incidence* loc;
1206 while ( inc ) { 1209 while ( inc ) {
1207 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1210 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1208 loc = mCalendar->incidence(inc->uid() ); 1211 loc = mCalendar->incidence(inc->uid() );
1209 if ( loc ) { 1212 if ( loc ) {
1210 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1213 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1211 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1214 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1212 } 1215 }
1213 } 1216 }
1214 inc = iL.next(); 1217 inc = iL.next();
1215 } 1218 }
1216 Incidence* lse = getLastSyncEvent(); 1219 Incidence* lse = getLastSyncEvent();
1217 if ( lse ) { 1220 if ( lse ) {
1218 lse->setReadOnly( false ); 1221 lse->setReadOnly( false );
1219 lse->setDescription( "" ); 1222 lse->setDescription( "" );
1220 lse->setReadOnly( true ); 1223 lse->setReadOnly( true );
1221 } 1224 }
1222 } 1225 }
1223 } 1226 }
1224 setModified( true ); 1227 setModified( true );
1225 } else { 1228 } else {
1226 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1229 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1227 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1230 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1228 question, i18n("Ok")) ; 1231 question, i18n("Ok")) ;
1229 1232
1230 } 1233 }
1231 delete calendar; 1234 delete calendar;
1232 updateView(); 1235 updateView();
1233 return ;//syncOK; 1236 return ;//syncOK;
1234#endif 1237#endif
1235} 1238}
1236 1239
1237 1240
1238#include <kabc/stdaddressbook.h> 1241#include <kabc/stdaddressbook.h>
1239bool CalendarView::importBday() 1242bool CalendarView::importBday()
1240{ 1243{
1241 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1244 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1242 KABC::AddressBook::Iterator it; 1245 KABC::AddressBook::Iterator it;
1243 int count = 0; 1246 int count = 0;
1244 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1247 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1245 ++count; 1248 ++count;
1246 } 1249 }
1247 QProgressBar bar(count,0 ); 1250 QProgressBar bar(count,0 );
1248 int w = 300; 1251 int w = 300;
1249 if ( QApplication::desktop()->width() < 320 ) 1252 if ( QApplication::desktop()->width() < 320 )
1250 w = 220; 1253 w = 220;
1251 int h = bar.sizeHint().height() ; 1254 int h = bar.sizeHint().height() ;
1252 int dw = QApplication::desktop()->width(); 1255 int dw = QApplication::desktop()->width();
1253 int dh = QApplication::desktop()->height(); 1256 int dh = QApplication::desktop()->height();
1254 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1257 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1255 bar.show(); 1258 bar.show();
1256 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1259 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1257 qApp->processEvents(); 1260 qApp->processEvents();
1258 count = 0; 1261 count = 0;
1259 int addCount = 0; 1262 int addCount = 0;
1260 KCal::Attendee* a = 0; 1263 KCal::Attendee* a = 0;
1261 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1264 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1262 if ( ! bar.isVisible() ) 1265 if ( ! bar.isVisible() )
1263 return false; 1266 return false;
1264 bar.setProgress( count++ ); 1267 bar.setProgress( count++ );
1265 qApp->processEvents(); 1268 qApp->processEvents();
1266 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1269 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1267 if ( (*it).birthday().date().isValid() ){ 1270 if ( (*it).birthday().date().isValid() ){
1268 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1271 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1269 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1272 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1270 ++addCount; 1273 ++addCount;
1271 } 1274 }
1272 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1275 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1273 if ( anni.isValid() ){ 1276 if ( anni.isValid() ){
1274 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1277 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1275 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1278 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1276 ++addCount; 1279 ++addCount;
1277 } 1280 }
1278 } 1281 }
1279 updateView(); 1282 updateView();
1280 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1283 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1281 return true; 1284 return true;
1282} 1285}
1283 1286
1284bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1287bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1285{ 1288{
1286 //qDebug("addAnni "); 1289 //qDebug("addAnni ");
1287 Event * ev = new Event(); 1290 Event * ev = new Event();
1288 if ( a ) { 1291 if ( a ) {
1289 ev->addAttendee( a ); 1292 ev->addAttendee( a );
1290 } 1293 }
1291 QString kind; 1294 QString kind;
1292 if ( birthday ) 1295 if ( birthday )
1293 kind = i18n( "Birthday" ); 1296 kind = i18n( "Birthday" );
1294 else 1297 else
1295 kind = i18n( "Anniversary" ); 1298 kind = i18n( "Anniversary" );
1296 ev->setSummary( name + " - " + kind ); 1299 ev->setSummary( name + " - " + kind );
1297 ev->setOrganizer( "nobody@nowhere" ); 1300 ev->setOrganizer( "nobody@nowhere" );
1298 ev->setCategories( kind ); 1301 ev->setCategories( kind );
1299 ev->setDtStart( QDateTime(date) ); 1302 ev->setDtStart( QDateTime(date) );
1300 ev->setDtEnd( QDateTime(date) ); 1303 ev->setDtEnd( QDateTime(date) );
1301 ev->setFloats( true ); 1304 ev->setFloats( true );
1302 Recurrence * rec = ev->recurrence(); 1305 Recurrence * rec = ev->recurrence();
1303 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1306 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1304 rec->addYearlyNum( date.month() ); 1307 rec->addYearlyNum( date.month() );
1305 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1308 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1306 delete ev; 1309 delete ev;
1307 return false; 1310 return false;
1308 } 1311 }
1309 return true; 1312 return true;
1310 1313
1311} 1314}
1312bool CalendarView::importQtopia( const QString &categories, 1315bool CalendarView::importQtopia( const QString &categories,
1313 const QString &datebook, 1316 const QString &datebook,
1314 const QString &todolist ) 1317 const QString &todolist )
1315{ 1318{
1316 1319
1317 QtopiaFormat qtopiaFormat; 1320 QtopiaFormat qtopiaFormat;
1318 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1321 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1319 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1322 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1320 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1323 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1321 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1324 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1322 1325
1323 updateView(); 1326 updateView();
1324 return true; 1327 return true;
1325 1328
1326#if 0 1329#if 0
1327 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1330 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1328 mCurrentSyncDevice = "qtopia-XML"; 1331 mCurrentSyncDevice = "qtopia-XML";
1329 if ( KOPrefs::instance()->mAskForPreferences ) 1332 if ( KOPrefs::instance()->mAskForPreferences )
1330 edit_sync_options(); 1333 edit_sync_options();
1331 qApp->processEvents(); 1334 qApp->processEvents();
1332 CalendarLocal* calendar = new CalendarLocal(); 1335 CalendarLocal* calendar = new CalendarLocal();
1333 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1336 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1334 bool syncOK = false; 1337 bool syncOK = false;
1335 QtopiaFormat qtopiaFormat; 1338 QtopiaFormat qtopiaFormat;
1336 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1339 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1337 bool loadOk = true; 1340 bool loadOk = true;
1338 if ( !categories.isEmpty() ) 1341 if ( !categories.isEmpty() )
1339 loadOk = qtopiaFormat.load( calendar, categories ); 1342 loadOk = qtopiaFormat.load( calendar, categories );
1340 if ( loadOk && !datebook.isEmpty() ) 1343 if ( loadOk && !datebook.isEmpty() )
1341 loadOk = qtopiaFormat.load( calendar, datebook ); 1344 loadOk = qtopiaFormat.load( calendar, datebook );
1342 if ( loadOk && !todolist.isEmpty() ) 1345 if ( loadOk && !todolist.isEmpty() )
1343 loadOk = qtopiaFormat.load( calendar, todolist ); 1346 loadOk = qtopiaFormat.load( calendar, todolist );
1344 1347
1345 if ( loadOk ) { 1348 if ( loadOk ) {
1346 getEventViewerDialog()->setSyncMode( true ); 1349 getEventViewerDialog()->setSyncMode( true );
1347 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1350 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1348 getEventViewerDialog()->setSyncMode( false ); 1351 getEventViewerDialog()->setSyncMode( false );
1349 qApp->processEvents(); 1352 qApp->processEvents();
1350 if ( syncOK ) { 1353 if ( syncOK ) {
1351 if ( KOPrefs::instance()->mWriteBackFile ) 1354 if ( KOPrefs::instance()->mWriteBackFile )
1352 { 1355 {
1353 // write back XML file 1356 // write back XML file
1354 1357
1355 } 1358 }
1356 setModified( true ); 1359 setModified( true );
1357 } 1360 }
1358 } else { 1361 } else {
1359 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1362 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1360 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1363 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1361 question, i18n("Ok")) ; 1364 question, i18n("Ok")) ;
1362 } 1365 }
1363 delete calendar; 1366 delete calendar;
1364 updateView(); 1367 updateView();
1365 return syncOK; 1368 return syncOK;
1366 1369
1367 1370
1368#endif 1371#endif
1369 1372
1370} 1373}
1371 1374
1372void CalendarView::setSyncEventsReadOnly() 1375void CalendarView::setSyncEventsReadOnly()
1373{ 1376{
1374 Event * ev; 1377 Event * ev;
1375 QPtrList<Event> eL = mCalendar->rawEvents(); 1378 QPtrList<Event> eL = mCalendar->rawEvents();
1376 ev = eL.first(); 1379 ev = eL.first();
1377 while ( ev ) { 1380 while ( ev ) {
1378 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1381 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1379 ev->setReadOnly( true ); 1382 ev->setReadOnly( true );
1380 ev = eL.next(); 1383 ev = eL.next();
1381 } 1384 }
1382} 1385}
1383bool CalendarView::openCalendar(QString filename, bool merge) 1386bool CalendarView::openCalendar(QString filename, bool merge)
1384{ 1387{
1385 1388
1386 if (filename.isEmpty()) { 1389 if (filename.isEmpty()) {
1387 return false; 1390 return false;
1388 } 1391 }
1389 1392
1390 if (!QFile::exists(filename)) { 1393 if (!QFile::exists(filename)) {
1391 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1394 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1392 return false; 1395 return false;
1393 } 1396 }
1394 1397
1395 globalFlagBlockAgenda = 1; 1398 globalFlagBlockAgenda = 1;
1396 if (!merge) mCalendar->close(); 1399 if (!merge) mCalendar->close();
1397 1400
1398 mStorage->setFileName( filename ); 1401 mStorage->setFileName( filename );
1399 1402
1400 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1403 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1401 if ( merge ) ;//setModified( true ); 1404 if ( merge ) ;//setModified( true );
1402 else { 1405 else {
1403 //setModified( true ); 1406 //setModified( true );
1404 mViewManager->setDocumentId( filename ); 1407 mViewManager->setDocumentId( filename );
1405 mDialogManager->setDocumentId( filename ); 1408 mDialogManager->setDocumentId( filename );
1406 mTodoList->setDocumentId( filename ); 1409 mTodoList->setDocumentId( filename );
1407 } 1410 }
1408 globalFlagBlockAgenda = 2; 1411 globalFlagBlockAgenda = 2;
1409 // if ( getLastSyncEvent() ) 1412 // if ( getLastSyncEvent() )
1410 // getLastSyncEvent()->setReadOnly( true ); 1413 // getLastSyncEvent()->setReadOnly( true );
1411 mCalendar->reInitAlarmSettings(); 1414 mCalendar->reInitAlarmSettings();
1412 setSyncEventsReadOnly(); 1415 setSyncEventsReadOnly();
1413 updateUnmanagedViews(); 1416 updateUnmanagedViews();
1414 updateView(); 1417 updateView();
1415 if ( filename != MainWindow::defaultFileName() ) 1418 if ( filename != MainWindow::defaultFileName() )
1416 saveCalendar( MainWindow::defaultFileName() ); 1419 saveCalendar( MainWindow::defaultFileName() );
1417 loadedFileVersion = QDateTime::currentDateTime(); 1420 loadedFileVersion = QDateTime::currentDateTime();
1418 return true; 1421 return true;
1419 } else { 1422 } else {
1420 // while failing to load, the calendar object could 1423 // while failing to load, the calendar object could
1421 // have become partially populated. Clear it out. 1424 // have become partially populated. Clear it out.
1422 if ( !merge ) mCalendar->close(); 1425 if ( !merge ) mCalendar->close();
1423 1426
1424 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1427 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1425 1428
1426 globalFlagBlockAgenda = 2; 1429 globalFlagBlockAgenda = 2;
1427 updateView(); 1430 updateView();
1428 } 1431 }
1429 return false; 1432 return false;
1430} 1433}
1431void CalendarView::setLoadedFileVersion(QDateTime dt) 1434void CalendarView::setLoadedFileVersion(QDateTime dt)
1432{ 1435{
1433 loadedFileVersion = dt; 1436 loadedFileVersion = dt;
1434} 1437}
1435bool CalendarView::checkFileChanged(QString fn) 1438bool CalendarView::checkFileChanged(QString fn)
1436{ 1439{
1437 QFileInfo finf ( fn ); 1440 QFileInfo finf ( fn );
1438 if ( !finf.exists() ) 1441 if ( !finf.exists() )
1439 return true; 1442 return true;
1440 QDateTime dt = finf.lastModified (); 1443 QDateTime dt = finf.lastModified ();
1441 if ( dt <= loadedFileVersion ) 1444 if ( dt <= loadedFileVersion )
1442 return false; 1445 return false;
1443 return true; 1446 return true;
1444 1447
1445} 1448}
1446bool CalendarView::checkFileVersion(QString fn) 1449bool CalendarView::checkFileVersion(QString fn)
1447{ 1450{
1448 QFileInfo finf ( fn ); 1451 QFileInfo finf ( fn );
1449 if ( !finf.exists() ) 1452 if ( !finf.exists() )
1450 return true; 1453 return true;
1451 QDateTime dt = finf.lastModified (); 1454 QDateTime dt = finf.lastModified ();
1452 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1455 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1453 //qDebug("file on disk version %s",dt.toString().latin1()); 1456 //qDebug("file on disk version %s",dt.toString().latin1());
1454 if ( dt <= loadedFileVersion ) 1457 if ( dt <= loadedFileVersion )
1455 return true; 1458 return true;
1456 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)) , 1459 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)) ,
1457 i18n("KO/Pi Warning"),i18n("Overwrite"), 1460 i18n("KO/Pi Warning"),i18n("Overwrite"),
1458 i18n("Sync+save")); 1461 i18n("Sync+save"));
1459 1462
1460 if ( km == KMessageBox::Cancel ) 1463 if ( km == KMessageBox::Cancel )
1461 return false; 1464 return false;
1462 if ( km == KMessageBox::Yes ) 1465 if ( km == KMessageBox::Yes )
1463 return true; 1466 return true;
1464 1467
1465 setSyncDevice("deleteaftersync" ); 1468 setSyncDevice("deleteaftersync" );
1466 KOPrefs::instance()->mAskForPreferences = true; 1469 KOPrefs::instance()->mAskForPreferences = true;
1467 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1470 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1468 KOPrefs::instance()->mWriteBackFile = false; 1471 KOPrefs::instance()->mWriteBackFile = false;
1469 KOPrefs::instance()->mWriteBackExistingOnly = false; 1472 KOPrefs::instance()->mWriteBackExistingOnly = false;
1470 KOPrefs::instance()->mShowSyncSummary = false; 1473 KOPrefs::instance()->mShowSyncSummary = false;
1471 syncCalendar( fn, 3 ); 1474 syncCalendar( fn, 3 );
1472 Event * e = getLastSyncEvent(); 1475 Event * e = getLastSyncEvent();
1473 mCalendar->deleteEvent ( e ); 1476 mCalendar->deleteEvent ( e );
1474 updateView(); 1477 updateView();
1475 return true; 1478 return true;
1476} 1479}
1477 1480
1478bool CalendarView::saveCalendar( QString filename ) 1481bool CalendarView::saveCalendar( QString filename )
1479{ 1482{
1480 1483
1481 // Store back all unsaved data into calendar object 1484 // Store back all unsaved data into calendar object
1482 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1485 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1483 if ( mViewManager->currentView() ) 1486 if ( mViewManager->currentView() )
1484 mViewManager->currentView()->flushView(); 1487 mViewManager->currentView()->flushView();
1485 1488
1486 //mStorage->setFileName( filename ); 1489 //mStorage->setFileName( filename );
1487 1490
1488 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1491 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1489 mStorage->setFileName( filename ); 1492 mStorage->setFileName( filename );
1490 bool success; 1493 bool success;
1491 success = mStorage->save(); 1494 success = mStorage->save();
1492 if ( !success ) { 1495 if ( !success ) {
1493 return false; 1496 return false;
1494 } 1497 }
1495 1498
1496 return true; 1499 return true;
1497} 1500}
1498 1501
1499void CalendarView::closeCalendar() 1502void CalendarView::closeCalendar()
1500{ 1503{
1501 1504
1502 // child windows no longer valid 1505 // child windows no longer valid
1503 emit closingDown(); 1506 emit closingDown();
1504 1507
1505 mCalendar->close(); 1508 mCalendar->close();
1506 setModified(false); 1509 setModified(false);
1507 updateView(); 1510 updateView();
1508} 1511}
1509 1512
1510void CalendarView::archiveCalendar() 1513void CalendarView::archiveCalendar()
1511{ 1514{
1512 mDialogManager->showArchiveDialog(); 1515 mDialogManager->showArchiveDialog();
1513} 1516}
1514 1517
1515 1518
1516void CalendarView::readSettings() 1519void CalendarView::readSettings()
1517{ 1520{
1518 1521
1519 1522
1520 // mViewManager->showAgendaView(); 1523 // mViewManager->showAgendaView();
1521 QString str; 1524 QString str;
1522 //qDebug("CalendarView::readSettings() "); 1525 //qDebug("CalendarView::readSettings() ");
1523 // read settings from the KConfig, supplying reasonable 1526 // read settings from the KConfig, supplying reasonable
1524 // defaults where none are to be found 1527 // defaults where none are to be found
1525 KConfig *config = KOGlobals::config(); 1528 KConfig *config = KOGlobals::config();
1526#ifndef KORG_NOSPLITTER 1529#ifndef KORG_NOSPLITTER
1527 config->setGroup("KOrganizer Geometry"); 1530 config->setGroup("KOrganizer Geometry");
1528 1531
1529 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1532 QValueList<int> sizes = config->readIntListEntry("Separator1");
1530 if (sizes.count() != 2) { 1533 if (sizes.count() != 2) {
1531 sizes << mDateNavigator->minimumSizeHint().width(); 1534 sizes << mDateNavigator->minimumSizeHint().width();
1532 sizes << 300; 1535 sizes << 300;
1533 } 1536 }
1534 mPanner->setSizes(sizes); 1537 mPanner->setSizes(sizes);
1535 1538
1536 sizes = config->readIntListEntry("Separator2"); 1539 sizes = config->readIntListEntry("Separator2");
1537 if ( ( mResourceView && sizes.count() == 4 ) || 1540 if ( ( mResourceView && sizes.count() == 4 ) ||
1538 ( !mResourceView && sizes.count() == 3 ) ) { 1541 ( !mResourceView && sizes.count() == 3 ) ) {
1539 mLeftSplitter->setSizes(sizes); 1542 mLeftSplitter->setSizes(sizes);
1540 } 1543 }
1541#endif 1544#endif
1542 globalFlagBlockAgenda = 1; 1545 globalFlagBlockAgenda = 1;
1543 mViewManager->showAgendaView(); 1546 mViewManager->showAgendaView();
1544 //mViewManager->readSettings( config ); 1547 //mViewManager->readSettings( config );
1545 mTodoList->restoreLayout(config,QString("Todo Layout")); 1548 mTodoList->restoreLayout(config,QString("Todo Layout"));
1546 readFilterSettings(config); 1549 readFilterSettings(config);
1547 config->setGroup( "Views" ); 1550 config->setGroup( "Views" );
1548 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1551 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1549 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1552 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1550 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1553 else if ( dateCount == 7 ) mNavigator->selectWeek();
1551 else mNavigator->selectDates( dateCount ); 1554 else mNavigator->selectDates( dateCount );
1552 // mViewManager->readSettings( config ); 1555 // mViewManager->readSettings( config );
1553 updateConfig(); 1556 updateConfig();
1554 globalFlagBlockAgenda = 2; 1557 globalFlagBlockAgenda = 2;
1555 mViewManager->readSettings( config ); 1558 mViewManager->readSettings( config );
1556#ifdef DESKTOP_VERSION 1559#ifdef DESKTOP_VERSION
1557 config->setGroup("WidgetLayout"); 1560 config->setGroup("WidgetLayout");
1558 QStringList list; 1561 QStringList list;
1559 list = config->readListEntry("MainLayout"); 1562 list = config->readListEntry("MainLayout");
1560 int x,y,w,h; 1563 int x,y,w,h;
1561 if ( ! list.isEmpty() ) { 1564 if ( ! list.isEmpty() ) {
1562 x = list[0].toInt(); 1565 x = list[0].toInt();
1563 y = list[1].toInt(); 1566 y = list[1].toInt();
1564 w = list[2].toInt(); 1567 w = list[2].toInt();
1565 h = list[3].toInt(); 1568 h = list[3].toInt();
1566 topLevelWidget()->setGeometry(x,y,w,h); 1569 topLevelWidget()->setGeometry(x,y,w,h);
1567 1570
1568 } else { 1571 } else {
1569 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1572 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1570 } 1573 }
1571 list = config->readListEntry("EditEventLayout"); 1574 list = config->readListEntry("EditEventLayout");
1572 if ( ! list.isEmpty() ) { 1575 if ( ! list.isEmpty() ) {
1573 x = list[0].toInt(); 1576 x = list[0].toInt();
1574 y = list[1].toInt(); 1577 y = list[1].toInt();
1575 w = list[2].toInt(); 1578 w = list[2].toInt();
1576 h = list[3].toInt(); 1579 h = list[3].toInt();
1577 mEventEditor->setGeometry(x,y,w,h); 1580 mEventEditor->setGeometry(x,y,w,h);
1578 1581
1579 } 1582 }
1580 list = config->readListEntry("EditTodoLayout"); 1583 list = config->readListEntry("EditTodoLayout");
1581 if ( ! list.isEmpty() ) { 1584 if ( ! list.isEmpty() ) {
1582 x = list[0].toInt(); 1585 x = list[0].toInt();
1583 y = list[1].toInt(); 1586 y = list[1].toInt();
1584 w = list[2].toInt(); 1587 w = list[2].toInt();
1585 h = list[3].toInt(); 1588 h = list[3].toInt();
1586 mTodoEditor->setGeometry(x,y,w,h); 1589 mTodoEditor->setGeometry(x,y,w,h);
1587 1590
1588 } 1591 }
1589 list = config->readListEntry("ViewerLayout"); 1592 list = config->readListEntry("ViewerLayout");
1590 if ( ! list.isEmpty() ) { 1593 if ( ! list.isEmpty() ) {
1591 x = list[0].toInt(); 1594 x = list[0].toInt();
1592 y = list[1].toInt(); 1595 y = list[1].toInt();
1593 w = list[2].toInt(); 1596 w = list[2].toInt();
1594 h = list[3].toInt(); 1597 h = list[3].toInt();
1595 getEventViewerDialog()->setGeometry(x,y,w,h); 1598 getEventViewerDialog()->setGeometry(x,y,w,h);
1596 } 1599 }
1597#endif 1600#endif
1598 1601
1599} 1602}
1600 1603
1601 1604
1602void CalendarView::writeSettings() 1605void CalendarView::writeSettings()
1603{ 1606{
1604 // kdDebug() << "CalendarView::writeSettings" << endl; 1607 // kdDebug() << "CalendarView::writeSettings" << endl;
1605 1608
1606 KConfig *config = KOGlobals::config(); 1609 KConfig *config = KOGlobals::config();
1607 1610
1608#ifndef KORG_NOSPLITTER 1611#ifndef KORG_NOSPLITTER
1609 config->setGroup("KOrganizer Geometry"); 1612 config->setGroup("KOrganizer Geometry");
1610 1613
1611 QValueList<int> list = mPanner->sizes(); 1614 QValueList<int> list = mPanner->sizes();
1612 config->writeEntry("Separator1",list); 1615 config->writeEntry("Separator1",list);
1613 1616
1614 list = mLeftSplitter->sizes(); 1617 list = mLeftSplitter->sizes();
1615 config->writeEntry("Separator2",list); 1618 config->writeEntry("Separator2",list);
1616#endif 1619#endif
1617 1620
1618 mViewManager->writeSettings( config ); 1621 mViewManager->writeSettings( config );
1619 mTodoList->saveLayout(config,QString("Todo Layout")); 1622 mTodoList->saveLayout(config,QString("Todo Layout"));
1620 mDialogManager->writeSettings( config ); 1623 mDialogManager->writeSettings( config );
1621 //KOPrefs::instance()->usrWriteConfig(); 1624 //KOPrefs::instance()->usrWriteConfig();
1622 KOPrefs::instance()->writeConfig(); 1625 KOPrefs::instance()->writeConfig();
1623 1626
1624 writeFilterSettings(config); 1627 writeFilterSettings(config);
1625 1628
1626 config->setGroup( "Views" ); 1629 config->setGroup( "Views" );
1627 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1630 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1628 1631
1629#ifdef DESKTOP_VERSION 1632#ifdef DESKTOP_VERSION
1630 config->setGroup("WidgetLayout"); 1633 config->setGroup("WidgetLayout");
1631 QStringList list ;//= config->readListEntry("MainLayout"); 1634 QStringList list ;//= config->readListEntry("MainLayout");
1632 int x,y,w,h; 1635 int x,y,w,h;
1633 QWidget* wid; 1636 QWidget* wid;
1634 wid = topLevelWidget(); 1637 wid = topLevelWidget();
1635 x = wid->geometry().x(); 1638 x = wid->geometry().x();
1636 y = wid->geometry().y(); 1639 y = wid->geometry().y();
1637 w = wid->width(); 1640 w = wid->width();
1638 h = wid->height(); 1641 h = wid->height();
1639 list.clear(); 1642 list.clear();
1640 list << QString::number( x ); 1643 list << QString::number( x );
1641 list << QString::number( y ); 1644 list << QString::number( y );
1642 list << QString::number( w ); 1645 list << QString::number( w );
1643 list << QString::number( h ); 1646 list << QString::number( h );
1644 config->writeEntry("MainLayout",list ); 1647 config->writeEntry("MainLayout",list );
1645 1648
1646 wid = mEventEditor; 1649 wid = mEventEditor;
1647 x = wid->geometry().x(); 1650 x = wid->geometry().x();
1648 y = wid->geometry().y(); 1651 y = wid->geometry().y();
1649 w = wid->width(); 1652 w = wid->width();
1650 h = wid->height(); 1653 h = wid->height();
1651 list.clear(); 1654 list.clear();
1652 list << QString::number( x ); 1655 list << QString::number( x );
1653 list << QString::number( y ); 1656 list << QString::number( y );
1654 list << QString::number( w ); 1657 list << QString::number( w );
1655 list << QString::number( h ); 1658 list << QString::number( h );
1656 config->writeEntry("EditEventLayout",list ); 1659 config->writeEntry("EditEventLayout",list );
1657 1660
1658 wid = mTodoEditor; 1661 wid = mTodoEditor;
1659 x = wid->geometry().x(); 1662 x = wid->geometry().x();
1660 y = wid->geometry().y(); 1663 y = wid->geometry().y();
1661 w = wid->width(); 1664 w = wid->width();
1662 h = wid->height(); 1665 h = wid->height();
1663 list.clear(); 1666 list.clear();
1664 list << QString::number( x ); 1667 list << QString::number( x );
1665 list << QString::number( y ); 1668 list << QString::number( y );
1666 list << QString::number( w ); 1669 list << QString::number( w );
1667 list << QString::number( h ); 1670 list << QString::number( h );
1668 config->writeEntry("EditTodoLayout",list ); 1671 config->writeEntry("EditTodoLayout",list );
1669 wid = getEventViewerDialog(); 1672 wid = getEventViewerDialog();
1670 x = wid->geometry().x(); 1673 x = wid->geometry().x();
1671 y = wid->geometry().y(); 1674 y = wid->geometry().y();
1672 w = wid->width(); 1675 w = wid->width();
1673 h = wid->height(); 1676 h = wid->height();
1674 list.clear(); 1677 list.clear();
1675 list << QString::number( x ); 1678 list << QString::number( x );
1676 list << QString::number( y ); 1679 list << QString::number( y );
1677 list << QString::number( w ); 1680 list << QString::number( w );
1678 list << QString::number( h ); 1681 list << QString::number( h );
1679 config->writeEntry("ViewerLayout",list ); 1682 config->writeEntry("ViewerLayout",list );
1680 wid = mDialogManager->getSearchDialog(); 1683 wid = mDialogManager->getSearchDialog();
1681 if ( wid ) { 1684 if ( wid ) {
1682 x = wid->geometry().x(); 1685 x = wid->geometry().x();
1683 y = wid->geometry().y(); 1686 y = wid->geometry().y();
1684 w = wid->width(); 1687 w = wid->width();
1685 h = wid->height(); 1688 h = wid->height();
1686 list.clear(); 1689 list.clear();
1687 list << QString::number( x ); 1690 list << QString::number( x );
1688 list << QString::number( y ); 1691 list << QString::number( y );
1689 list << QString::number( w ); 1692 list << QString::number( w );
1690 list << QString::number( h ); 1693 list << QString::number( h );
1691 config->writeEntry("SearchLayout",list ); 1694 config->writeEntry("SearchLayout",list );
1692 } 1695 }
1693#endif 1696#endif
1694 1697
1695 1698
1696 config->sync(); 1699 config->sync();
1697} 1700}
1698 1701
1699void CalendarView::readFilterSettings(KConfig *config) 1702void CalendarView::readFilterSettings(KConfig *config)
1700{ 1703{
1701 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1704 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1702 1705
1703 mFilters.clear(); 1706 mFilters.clear();
1704 1707
1705 config->setGroup("General"); 1708 config->setGroup("General");
1706 QStringList filterList = config->readListEntry("CalendarFilters"); 1709 QStringList filterList = config->readListEntry("CalendarFilters");
1707 1710
1708 QStringList::ConstIterator it = filterList.begin(); 1711 QStringList::ConstIterator it = filterList.begin();
1709 QStringList::ConstIterator end = filterList.end(); 1712 QStringList::ConstIterator end = filterList.end();
1710 while(it != end) { 1713 while(it != end) {
1711 // kdDebug() << " filter: " << (*it) << endl; 1714 // kdDebug() << " filter: " << (*it) << endl;
1712 1715
1713 CalFilter *filter; 1716 CalFilter *filter;
1714 filter = new CalFilter(*it); 1717 filter = new CalFilter(*it);
1715 config->setGroup("Filter_" + (*it)); 1718 config->setGroup("Filter_" + (*it));
1716 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1719 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1717 filter->setCriteria(config->readNumEntry("Criteria",0)); 1720 filter->setCriteria(config->readNumEntry("Criteria",0));
1718 filter->setCategoryList(config->readListEntry("CategoryList")); 1721 filter->setCategoryList(config->readListEntry("CategoryList"));
1719 mFilters.append(filter); 1722 mFilters.append(filter);
1720 1723
1721 ++it; 1724 ++it;
1722 } 1725 }
1723 1726
1724 if (mFilters.count() == 0) { 1727 if (mFilters.count() == 0) {
1725 CalFilter *filter = new CalFilter(i18n("Default")); 1728 CalFilter *filter = new CalFilter(i18n("Default"));
1726 mFilters.append(filter); 1729 mFilters.append(filter);
1727 } 1730 }
1728 mFilterView->updateFilters(); 1731 mFilterView->updateFilters();
1729 config->setGroup("FilterView"); 1732 config->setGroup("FilterView");
1730 1733
1731 mFilterView->blockSignals(true); 1734 mFilterView->blockSignals(true);
1732 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 1735 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
1733 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 1736 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
1734 mFilterView->blockSignals(false); 1737 mFilterView->blockSignals(false);
1735 // We do it manually to avoid it being done twice by the above calls 1738 // We do it manually to avoid it being done twice by the above calls
1736 updateFilter(); 1739 updateFilter();
1737} 1740}
1738 1741
1739void CalendarView::writeFilterSettings(KConfig *config) 1742void CalendarView::writeFilterSettings(KConfig *config)
1740{ 1743{
1741 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 1744 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
1742 1745
1743 QStringList filterList; 1746 QStringList filterList;
1744 1747
1745 CalFilter *filter = mFilters.first(); 1748 CalFilter *filter = mFilters.first();
1746 while(filter) { 1749 while(filter) {
1747 // kdDebug() << " fn: " << filter->name() << endl; 1750 // kdDebug() << " fn: " << filter->name() << endl;
1748 filterList << filter->name(); 1751 filterList << filter->name();
1749 config->setGroup("Filter_" + filter->name()); 1752 config->setGroup("Filter_" + filter->name());
1750 config->writeEntry("Criteria",filter->criteria()); 1753 config->writeEntry("Criteria",filter->criteria());
1751 config->writeEntry("CategoryList",filter->categoryList()); 1754 config->writeEntry("CategoryList",filter->categoryList());
1752 filter = mFilters.next(); 1755 filter = mFilters.next();
1753 } 1756 }
1754 config->setGroup("General"); 1757 config->setGroup("General");
1755 config->writeEntry("CalendarFilters",filterList); 1758 config->writeEntry("CalendarFilters",filterList);
1756 1759
1757 config->setGroup("FilterView"); 1760 config->setGroup("FilterView");
1758 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 1761 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
1759 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 1762 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
1760} 1763}
1761 1764
1762 1765
1763void CalendarView::goToday() 1766void CalendarView::goToday()
1764{ 1767{
1765 mNavigator->selectToday(); 1768 mNavigator->selectToday();
1766} 1769}
1767 1770
1768void CalendarView::goNext() 1771void CalendarView::goNext()
1769{ 1772{
1770 mNavigator->selectNext(); 1773 mNavigator->selectNext();
1771} 1774}
1772 1775
1773void CalendarView::goPrevious() 1776void CalendarView::goPrevious()
1774{ 1777{
1775 mNavigator->selectPrevious(); 1778 mNavigator->selectPrevious();
1776} 1779}
1777void CalendarView::goNextMonth() 1780void CalendarView::goNextMonth()
1778{ 1781{
1779 mNavigator->selectNextMonth(); 1782 mNavigator->selectNextMonth();
1780} 1783}
1781 1784
1782void CalendarView::goPreviousMonth() 1785void CalendarView::goPreviousMonth()
1783{ 1786{
1784 mNavigator->selectPreviousMonth(); 1787 mNavigator->selectPreviousMonth();
1785} 1788}
1786void CalendarView::writeLocale() 1789void CalendarView::writeLocale()
1787{ 1790{
1788 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 1791 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
1789 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 1792 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
1790 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 1793 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
1791 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 1794 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
1792 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 1795 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
1793 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 1796 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
1794 dummy = KOPrefs::instance()->mUserDateFormatShort; 1797 dummy = KOPrefs::instance()->mUserDateFormatShort;
1795 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 1798 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
1796 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 1799 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
1797 KOPrefs::instance()->mDaylightsavingStart, 1800 KOPrefs::instance()->mDaylightsavingStart,
1798 KOPrefs::instance()->mDaylightsavingEnd ); 1801 KOPrefs::instance()->mDaylightsavingEnd );
1799 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId ); 1802 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId );
1800} 1803}
1801void CalendarView::updateConfig() 1804void CalendarView::updateConfig()
1802{ 1805{
1803 writeLocale(); 1806 writeLocale();
1804 if ( KOPrefs::instance()->mUseAppColors ) 1807 if ( KOPrefs::instance()->mUseAppColors )
1805 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 1808 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
1806 emit configChanged(); 1809 emit configChanged();
1807 mTodoList->updateConfig(); 1810 mTodoList->updateConfig();
1808 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 1811 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
1809 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1812 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1810 // To make the "fill window" configurations work 1813 // To make the "fill window" configurations work
1811 //mViewManager->raiseCurrentView(); 1814 //mViewManager->raiseCurrentView();
1812} 1815}
1813 1816
1814 1817
1815void CalendarView::eventChanged(Event *event) 1818void CalendarView::eventChanged(Event *event)
1816{ 1819{
1817 changeEventDisplay(event,KOGlobals::EVENTEDITED); 1820 changeEventDisplay(event,KOGlobals::EVENTEDITED);
1818 //updateUnmanagedViews(); 1821 //updateUnmanagedViews();
1819} 1822}
1820 1823
1821void CalendarView::eventAdded(Event *event) 1824void CalendarView::eventAdded(Event *event)
1822{ 1825{
1823 changeEventDisplay(event,KOGlobals::EVENTADDED); 1826 changeEventDisplay(event,KOGlobals::EVENTADDED);
1824} 1827}
1825 1828
1826void CalendarView::eventToBeDeleted(Event *) 1829void CalendarView::eventToBeDeleted(Event *)
1827{ 1830{
1828 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 1831 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
1829} 1832}
1830 1833
1831void CalendarView::eventDeleted() 1834void CalendarView::eventDeleted()
1832{ 1835{
1833 changeEventDisplay(0,KOGlobals::EVENTDELETED); 1836 changeEventDisplay(0,KOGlobals::EVENTDELETED);
1834} 1837}
1835void CalendarView::changeTodoDisplay(Todo *which, int action) 1838void CalendarView::changeTodoDisplay(Todo *which, int action)
1836{ 1839{
1837 changeIncidenceDisplay((Incidence *)which, action); 1840 changeIncidenceDisplay((Incidence *)which, action);
1838} 1841}
1839 1842
1840void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 1843void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
1841{ 1844{
1842 updateUnmanagedViews(); 1845 updateUnmanagedViews();
1843 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 1846 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
1844 if ( action == KOGlobals::EVENTDELETED ) { //delete 1847 if ( action == KOGlobals::EVENTDELETED ) { //delete
1845 mCalendar->checkAlarmForIncidence( 0, true ); 1848 mCalendar->checkAlarmForIncidence( 0, true );
1846 if ( mEventViewerDialog ) 1849 if ( mEventViewerDialog )
1847 mEventViewerDialog->hide(); 1850 mEventViewerDialog->hide();
1848 } 1851 }
1849 else 1852 else
1850 mCalendar->checkAlarmForIncidence( which , false ); 1853 mCalendar->checkAlarmForIncidence( which , false );
1851} 1854}
1852 1855
1853// most of the changeEventDisplays() right now just call the view's 1856// most of the changeEventDisplays() right now just call the view's
1854// total update mode, but they SHOULD be recoded to be more refresh-efficient. 1857// total update mode, but they SHOULD be recoded to be more refresh-efficient.
1855void CalendarView::changeEventDisplay(Event *which, int action) 1858void CalendarView::changeEventDisplay(Event *which, int action)
1856{ 1859{
1857 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 1860 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
1858 changeIncidenceDisplay((Incidence *)which, action); 1861 changeIncidenceDisplay((Incidence *)which, action);
1859 mDateNavigator->updateView(); 1862 mDateNavigator->updateView();
1860 //mDialogManager->updateSearchDialog(); 1863 //mDialogManager->updateSearchDialog();
1861 1864
1862 if (which) { 1865 if (which) {
1863 // If there is an event view visible update the display 1866 // If there is an event view visible update the display
1864 mViewManager->currentView()->changeEventDisplay(which,action); 1867 mViewManager->currentView()->changeEventDisplay(which,action);
1865 // TODO: check, if update needed 1868 // TODO: check, if update needed
1866 // if (which->getTodoStatus()) { 1869 // if (which->getTodoStatus()) {
1867 mTodoList->updateView(); 1870 mTodoList->updateView();
1868 // } 1871 // }
1869 } else { 1872 } else {
1870 mViewManager->currentView()->updateView(); 1873 mViewManager->currentView()->updateView();
1871 } 1874 }
1872} 1875}
1873 1876
1874 1877
1875void CalendarView::updateTodoViews() 1878void CalendarView::updateTodoViews()
1876{ 1879{
1877 1880
1878 mTodoList->updateView(); 1881 mTodoList->updateView();
1879 mViewManager->currentView()->updateView(); 1882 mViewManager->currentView()->updateView();
1880 1883
1881} 1884}
1882 1885
1883 1886
1884void CalendarView::updateView(const QDate &start, const QDate &end) 1887void CalendarView::updateView(const QDate &start, const QDate &end)
1885{ 1888{
1886 mTodoList->updateView(); 1889 mTodoList->updateView();
1887 mViewManager->updateView(start, end); 1890 mViewManager->updateView(start, end);
1888 //mDateNavigator->updateView(); 1891 //mDateNavigator->updateView();
1889} 1892}
1890 1893
1891void CalendarView::updateView() 1894void CalendarView::updateView()
1892{ 1895{
1893 DateList tmpList = mNavigator->selectedDates(); 1896 DateList tmpList = mNavigator->selectedDates();
1894 1897
1895 // We assume that the navigator only selects consecutive days. 1898 // We assume that the navigator only selects consecutive days.
1896 updateView( tmpList.first(), tmpList.last() ); 1899 updateView( tmpList.first(), tmpList.last() );
1897} 1900}
1898 1901
1899void CalendarView::updateUnmanagedViews() 1902void CalendarView::updateUnmanagedViews()
1900{ 1903{
1901 mDateNavigator->updateDayMatrix(); 1904 mDateNavigator->updateDayMatrix();
1902} 1905}
1903 1906
1904int CalendarView::msgItemDelete() 1907int CalendarView::msgItemDelete()
1905{ 1908{
1906 return KMessageBox::warningContinueCancel(this, 1909 return KMessageBox::warningContinueCancel(this,
1907 i18n("This item will be\npermanently deleted."), 1910 i18n("This item will be\npermanently deleted."),
1908 i18n("KO/Pi Confirmation"),i18n("Delete")); 1911 i18n("KO/Pi Confirmation"),i18n("Delete"));
1909} 1912}
1910 1913
1911 1914
1912void CalendarView::edit_cut() 1915void CalendarView::edit_cut()
1913{ 1916{
1914 Event *anEvent=0; 1917 Event *anEvent=0;
1915 1918
1916 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 1919 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
1917 1920
1918 if (mViewManager->currentView()->isEventView()) { 1921 if (mViewManager->currentView()->isEventView()) {
1919 if ( incidence && incidence->type() == "Event" ) { 1922 if ( incidence && incidence->type() == "Event" ) {
1920 anEvent = static_cast<Event *>(incidence); 1923 anEvent = static_cast<Event *>(incidence);
1921 } 1924 }
1922 } 1925 }
1923 1926
1924 if (!anEvent) { 1927 if (!anEvent) {
1925 KNotifyClient::beep(); 1928 KNotifyClient::beep();
1926 return; 1929 return;
1927 } 1930 }
1928 DndFactory factory( mCalendar ); 1931 DndFactory factory( mCalendar );
1929 factory.cutEvent(anEvent); 1932 factory.cutEvent(anEvent);
1930 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 1933 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
1931} 1934}
1932 1935
1933void CalendarView::edit_copy() 1936void CalendarView::edit_copy()
1934{ 1937{
1935 Event *anEvent=0; 1938 Event *anEvent=0;
1936 1939
1937 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 1940 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
1938 1941
1939 if (mViewManager->currentView()->isEventView()) { 1942 if (mViewManager->currentView()->isEventView()) {
1940 if ( incidence && incidence->type() == "Event" ) { 1943 if ( incidence && incidence->type() == "Event" ) {
1941 anEvent = static_cast<Event *>(incidence); 1944 anEvent = static_cast<Event *>(incidence);
1942 } 1945 }
1943 } 1946 }
1944 1947
1945 if (!anEvent) { 1948 if (!anEvent) {
1946 KNotifyClient::beep(); 1949 KNotifyClient::beep();
1947 return; 1950 return;
1948 } 1951 }
1949 DndFactory factory( mCalendar ); 1952 DndFactory factory( mCalendar );
1950 factory.copyEvent(anEvent); 1953 factory.copyEvent(anEvent);
1951} 1954}
1952 1955
1953void CalendarView::edit_paste() 1956void CalendarView::edit_paste()
1954{ 1957{
1955 QDate date = mNavigator->selectedDates().first(); 1958 QDate date = mNavigator->selectedDates().first();
1956 1959
1957 DndFactory factory( mCalendar ); 1960 DndFactory factory( mCalendar );
1958 Event *pastedEvent = factory.pasteEvent( date ); 1961 Event *pastedEvent = factory.pasteEvent( date );
1959 1962
1960 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 1963 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
1961} 1964}
1962 1965
1963void CalendarView::edit_options() 1966void CalendarView::edit_options()
1964{ 1967{
1965 mDialogManager->showOptionsDialog(); 1968 mDialogManager->showOptionsDialog();
1966 //writeSettings(); 1969 //writeSettings();
1967} 1970}
1968void CalendarView::edit_sync_options() 1971void CalendarView::edit_sync_options()
1969{ 1972{
1970 //mDialogManager->showSyncOptions(); 1973 //mDialogManager->showSyncOptions();
1971 //KOPrefs::instance()->mSyncAlgoPrefs 1974 //KOPrefs::instance()->mSyncAlgoPrefs
1972 QDialog dia( this, "dia", true ); 1975 QDialog dia( this, "dia", true );
1973 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 1976 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
1974 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 1977 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
1975 QVBoxLayout lay ( &dia ); 1978 QVBoxLayout lay ( &dia );
1976 lay.setSpacing( 2 ); 1979 lay.setSpacing( 2 );
1977 lay.setMargin( 3 ); 1980 lay.setMargin( 3 );
1978 lay.addWidget(&gr); 1981 lay.addWidget(&gr);
1979 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 1982 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
1980 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 1983 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
1981 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 1984 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
1982 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 1985 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
1983 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 1986 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
1984 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 1987 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
1985 //QRadioButton both( i18n("Take both on conflict"), &gr ); 1988 //QRadioButton both( i18n("Take both on conflict"), &gr );
1986 QPushButton pb ( "OK", &dia); 1989 QPushButton pb ( "OK", &dia);
1987 lay.addWidget( &pb ); 1990 lay.addWidget( &pb );
1988 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 1991 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
1989 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) { 1992 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) {
1990 case 0: 1993 case 0:
1991 loc.setChecked( true); 1994 loc.setChecked( true);
1992 break; 1995 break;
1993 case 1: 1996 case 1:
1994 rem.setChecked( true ); 1997 rem.setChecked( true );
1995 break; 1998 break;
1996 case 2: 1999 case 2:
1997 newest.setChecked( true); 2000 newest.setChecked( true);
1998 break; 2001 break;
1999 case 3: 2002 case 3:
2000 ask.setChecked( true); 2003 ask.setChecked( true);
2001 break; 2004 break;
2002 case 4: 2005 case 4:
2003 f_loc.setChecked( true); 2006 f_loc.setChecked( true);
2004 break; 2007 break;
2005 case 5: 2008 case 5:
2006 f_rem.setChecked( true); 2009 f_rem.setChecked( true);
2007 break; 2010 break;
2008 case 6: 2011 case 6:
2009 // both.setChecked( true); 2012 // both.setChecked( true);
2010 break; 2013 break;
2011 default: 2014 default:
2012 break; 2015 break;
2013 } 2016 }
2014 if ( dia.exec() ) { 2017 if ( dia.exec() ) {
2015 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2018 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2016 } 2019 }
2017 2020
2018} 2021}
2019 2022
2020void CalendarView::slotSelectPickerDate( QDate d) 2023void CalendarView::slotSelectPickerDate( QDate d)
2021{ 2024{
2022 mDateFrame->hide(); 2025 mDateFrame->hide();
2023 if ( mDatePickerMode == 1 ) { 2026 if ( mDatePickerMode == 1 ) {
2024 mNavigator->slotDaySelect( d ); 2027 mNavigator->slotDaySelect( d );
2025 } else if ( mDatePickerMode == 2 ) { 2028 } else if ( mDatePickerMode == 2 ) {
2026 if ( mMoveIncidence->type() == "Todo" ) { 2029 if ( mMoveIncidence->type() == "Todo" ) {
2027 Todo * to = (Todo *) mMoveIncidence; 2030 Todo * to = (Todo *) mMoveIncidence;
2028 QTime tim; 2031 QTime tim;
2029 if ( to->hasDueDate() ) 2032 if ( to->hasDueDate() )
2030 tim = to->dtDue().time(); 2033 tim = to->dtDue().time();
2031 else { 2034 else {
2032 tim = QTime ( 0,0,0 ); 2035 tim = QTime ( 0,0,0 );
2033 to->setFloats( true ); 2036 to->setFloats( true );
2034 to->setHasDueDate( true ); 2037 to->setHasDueDate( true );
2035 } 2038 }
2036 QDateTime dt ( d,tim ); 2039 QDateTime dt ( d,tim );
2037 to->setDtDue( dt ); 2040 to->setDtDue( dt );
2038 todoChanged( to ); 2041 todoChanged( to );
2039 } else { 2042 } else {
2040 QTime tim = mMoveIncidence->dtStart().time(); 2043 QTime tim = mMoveIncidence->dtStart().time();
2041 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2044 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2042 QDateTime dt ( d,tim ); 2045 QDateTime dt ( d,tim );
2043 mMoveIncidence->setDtStart( dt ); 2046 mMoveIncidence->setDtStart( dt );
2044 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2047 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2045 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2048 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2046 } 2049 }
2047 2050
2048 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2051 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2049 } 2052 }
2050} 2053}
2051 2054
2052void CalendarView::removeCategories() 2055void CalendarView::removeCategories()
2053{ 2056{
2054 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2057 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2055 QStringList catList = KOPrefs::instance()->mCustomCategories; 2058 QStringList catList = KOPrefs::instance()->mCustomCategories;
2056 QStringList catIncList; 2059 QStringList catIncList;
2057 QStringList newCatList; 2060 QStringList newCatList;
2058 Incidence* inc = incList.first(); 2061 Incidence* inc = incList.first();
2059 int i; 2062 int i;
2060 int count = 0; 2063 int count = 0;
2061 while ( inc ) { 2064 while ( inc ) {
2062 newCatList.clear(); 2065 newCatList.clear();
2063 catIncList = inc->categories() ; 2066 catIncList = inc->categories() ;
2064 for( i = 0; i< catIncList.count(); ++i ) { 2067 for( i = 0; i< catIncList.count(); ++i ) {
2065 if ( catList.contains (catIncList[i])) 2068 if ( catList.contains (catIncList[i]))
2066 newCatList.append( catIncList[i] ); 2069 newCatList.append( catIncList[i] );
2067 } 2070 }
2068 newCatList.sort(); 2071 newCatList.sort();
2069 inc->setCategories( newCatList.join(",") ); 2072 inc->setCategories( newCatList.join(",") );
2070 inc = incList.next(); 2073 inc = incList.next();
2071 } 2074 }
2072} 2075}
2073 2076
2074int CalendarView::addCategories() 2077int CalendarView::addCategories()
2075{ 2078{
2076 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2079 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2077 QStringList catList = KOPrefs::instance()->mCustomCategories; 2080 QStringList catList = KOPrefs::instance()->mCustomCategories;
2078 QStringList catIncList; 2081 QStringList catIncList;
2079 Incidence* inc = incList.first(); 2082 Incidence* inc = incList.first();
2080 int i; 2083 int i;
2081 int count = 0; 2084 int count = 0;
2082 while ( inc ) { 2085 while ( inc ) {
2083 catIncList = inc->categories() ; 2086 catIncList = inc->categories() ;
2084 for( i = 0; i< catIncList.count(); ++i ) { 2087 for( i = 0; i< catIncList.count(); ++i ) {
2085 if ( !catList.contains (catIncList[i])) { 2088 if ( !catList.contains (catIncList[i])) {
2086 catList.append( catIncList[i] ); 2089 catList.append( catIncList[i] );
2087 //qDebug("add cat %s ", catIncList[i].latin1()); 2090 //qDebug("add cat %s ", catIncList[i].latin1());
2088 ++count; 2091 ++count;
2089 } 2092 }
2090 } 2093 }
2091 inc = incList.next(); 2094 inc = incList.next();
2092 } 2095 }
2093 catList.sort(); 2096 catList.sort();
2094 KOPrefs::instance()->mCustomCategories = catList; 2097 KOPrefs::instance()->mCustomCategories = catList;
2095 return count; 2098 return count;
2096} 2099}
2097 2100
2098void CalendarView::manageCategories() 2101void CalendarView::manageCategories()
2099{ 2102{
2100 KOCatPrefs* cp = new KOCatPrefs(); 2103 KOCatPrefs* cp = new KOCatPrefs();
2101 cp->show(); 2104 cp->show();
2102 int w =cp->sizeHint().width() ; 2105 int w =cp->sizeHint().width() ;
2103 int h = cp->sizeHint().height() ; 2106 int h = cp->sizeHint().height() ;
2104 int dw = QApplication::desktop()->width(); 2107 int dw = QApplication::desktop()->width();
2105 int dh = QApplication::desktop()->height(); 2108 int dh = QApplication::desktop()->height();
2106 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2109 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2107 if ( !cp->exec() ) { 2110 if ( !cp->exec() ) {
2108 delete cp; 2111 delete cp;
2109 return; 2112 return;
2110 } 2113 }
2111 int count = 0; 2114 int count = 0;
2112 if ( cp->addCat() ) { 2115 if ( cp->addCat() ) {
2113 count = addCategories(); 2116 count = addCategories();
2114 if ( count ) { 2117 if ( count ) {
2115 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2118 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2116 writeSettings(); 2119 writeSettings();
2117 } 2120 }
2118 } else { 2121 } else {
2119 removeCategories(); 2122 removeCategories();
2120 updateView(); 2123 updateView();
2121 } 2124 }
2122 delete cp; 2125 delete cp;
2123} 2126}
2124 2127
2125void CalendarView::beamIncidence(Incidence * Inc) 2128void CalendarView::beamIncidence(Incidence * Inc)
2126{ 2129{
2127 QPtrList<Incidence> delSel ; 2130 QPtrList<Incidence> delSel ;
2128 delSel.append(Inc); 2131 delSel.append(Inc);
2129 beamIncidenceList( delSel ); 2132 beamIncidenceList( delSel );
2130} 2133}
2131void CalendarView::beamCalendar() 2134void CalendarView::beamCalendar()
2132{ 2135{
2133 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2136 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2134 //qDebug("beamCalendar() "); 2137 //qDebug("beamCalendar() ");
2135 beamIncidenceList( delSel ); 2138 beamIncidenceList( delSel );
2136} 2139}
2137void CalendarView::beamFilteredCalendar() 2140void CalendarView::beamFilteredCalendar()
2138{ 2141{
2139 QPtrList<Incidence> delSel = mCalendar->incidences(); 2142 QPtrList<Incidence> delSel = mCalendar->incidences();
2140 //qDebug("beamFilteredCalendar() "); 2143 //qDebug("beamFilteredCalendar() ");
2141 beamIncidenceList( delSel ); 2144 beamIncidenceList( delSel );
2142} 2145}
2143void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2146void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2144{ 2147{
2145 if ( beamDialog->exec () == QDialog::Rejected ) 2148 if ( beamDialog->exec () == QDialog::Rejected )
2146 return; 2149 return;
2147 2150
2148 QString fn = "/tmp/kopibeamfile"; 2151 QString fn = "/tmp/kopibeamfile";
2149 QString mes; 2152 QString mes;
2150 bool createbup = true; 2153 bool createbup = true;
2151 if ( createbup ) { 2154 if ( createbup ) {
2152 QString description = "\n"; 2155 QString description = "\n";
2153 CalendarLocal* cal = new CalendarLocal(); 2156 CalendarLocal* cal = new CalendarLocal();
2154 if ( beamDialog->beamLocal() ) 2157 if ( beamDialog->beamLocal() )
2155 cal->setLocalTime(); 2158 cal->setLocalTime();
2156 else 2159 else
2157 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 2160 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
2158 Incidence *incidence = delSel.first(); 2161 Incidence *incidence = delSel.first();
2159 bool addText = false; 2162 bool addText = false;
2160 if ( delSel.count() < 10 ) 2163 if ( delSel.count() < 10 )
2161 addText = true; 2164 addText = true;
2162 else { 2165 else {
2163 description.sprintf(i18n(" %d items?"),delSel.count() ); 2166 description.sprintf(i18n(" %d items?"),delSel.count() );
2164 } 2167 }
2165 while ( incidence ) { 2168 while ( incidence ) {
2166 Incidence *in = incidence->clone(); 2169 Incidence *in = incidence->clone();
2167 if ( addText ) 2170 if ( addText )
2168 description += in->summary() + "\n"; 2171 description += in->summary() + "\n";
2169 cal->addIncidence( in ); 2172 cal->addIncidence( in );
2170 incidence = delSel.next(); 2173 incidence = delSel.next();
2171 } 2174 }
2172 if ( beamDialog->beamVcal() ) { 2175 if ( beamDialog->beamVcal() ) {
2173 fn += ".vcs"; 2176 fn += ".vcs";
2174 FileStorage storage( cal, fn, new VCalFormat ); 2177 FileStorage storage( cal, fn, new VCalFormat );
2175 storage.save(); 2178 storage.save();
2176 } else { 2179 } else {
2177 fn += ".ics"; 2180 fn += ".ics";
2178 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2181 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2179 storage.save(); 2182 storage.save();
2180 } 2183 }
2181 delete cal; 2184 delete cal;
2182 mes = i18n("KO/Pi: Ready for beaming"); 2185 mes = i18n("KO/Pi: Ready for beaming");
2183 setCaption(mes); 2186 setCaption(mes);
2184 2187
2185#ifndef DESKTOP_VERSION 2188#ifndef DESKTOP_VERSION
2186 Ir *ir = new Ir( this ); 2189 Ir *ir = new Ir( this );
2187 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2190 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2188 ir->send( fn, description, "text/x-vCalendar" ); 2191 ir->send( fn, description, "text/x-vCalendar" );
2189#endif 2192#endif
2190 } 2193 }
2191} 2194}
2192void CalendarView::beamDone( Ir *ir ) 2195void CalendarView::beamDone( Ir *ir )
2193{ 2196{
2194#ifndef DESKTOP_VERSION 2197#ifndef DESKTOP_VERSION
2195 delete ir; 2198 delete ir;
2196#endif 2199#endif
2197} 2200}
2198 2201
2199void CalendarView::moveIncidence(Incidence * inc ) 2202void CalendarView::moveIncidence(Incidence * inc )
2200{ 2203{
2201 if ( !inc ) return; 2204 if ( !inc ) return;
2202 // qDebug("showDatePickerForIncidence( ) "); 2205 // qDebug("showDatePickerForIncidence( ) ");
2203 if ( mDateFrame->isVisible() ) 2206 if ( mDateFrame->isVisible() )
2204 mDateFrame->hide(); 2207 mDateFrame->hide();
2205 else { 2208 else {
2206 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2209 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2207 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2210 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2208 int dw = QApplication::desktop()->width(); 2211 int dw = QApplication::desktop()->width();
2209 int dh = QApplication::desktop()->height(); 2212 int dh = QApplication::desktop()->height();
2210 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2213 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2211 mDateFrame->show(); 2214 mDateFrame->show();
2212 } 2215 }
2213 mDatePickerMode = 2; 2216 mDatePickerMode = 2;
2214 mMoveIncidence = inc ; 2217 mMoveIncidence = inc ;
2215 QDate da; 2218 QDate da;
2216 if ( mMoveIncidence->type() == "Todo" ) { 2219 if ( mMoveIncidence->type() == "Todo" ) {
2217 Todo * to = (Todo *) mMoveIncidence; 2220 Todo * to = (Todo *) mMoveIncidence;
2218 if ( to->hasDueDate() ) 2221 if ( to->hasDueDate() )
2219 da = to->dtDue().date(); 2222 da = to->dtDue().date();
2220 else 2223 else
2221 da = QDate::currentDate(); 2224 da = QDate::currentDate();
2222 } else { 2225 } else {
2223 da = mMoveIncidence->dtStart().date(); 2226 da = mMoveIncidence->dtStart().date();
2224 } 2227 }
2225 mDatePicker->setDate( da ); 2228 mDatePicker->setDate( da );
2226} 2229}
2227void CalendarView::showDatePicker( ) 2230void CalendarView::showDatePicker( )
2228{ 2231{
2229 //qDebug("CalendarView::showDatePicker( ) "); 2232 //qDebug("CalendarView::showDatePicker( ) ");
2230 if ( mDateFrame->isVisible() ) 2233 if ( mDateFrame->isVisible() )
2231 mDateFrame->hide(); 2234 mDateFrame->hide();
2232 else { 2235 else {
2233 int w =mDatePicker->sizeHint().width() ; 2236 int w =mDatePicker->sizeHint().width() ;
2234 int h = mDatePicker->sizeHint().height() ; 2237 int h = mDatePicker->sizeHint().height() ;
2235 int dw = QApplication::desktop()->width(); 2238 int dw = QApplication::desktop()->width();
2236 int dh = QApplication::desktop()->height(); 2239 int dh = QApplication::desktop()->height();
2237 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2240 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2238 mDateFrame->show(); 2241 mDateFrame->show();
2239 } 2242 }
2240 mDatePickerMode = 1; 2243 mDatePickerMode = 1;
2241 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2244 mDatePicker->setDate( mNavigator->selectedDates().first() );
2242} 2245}
2243 2246
2244void CalendarView::showEventEditor() 2247void CalendarView::showEventEditor()
2245{ 2248{
2246#ifdef DESKTOP_VERSION 2249#ifdef DESKTOP_VERSION
2247 mEventEditor->show(); 2250 mEventEditor->show();
2248#else 2251#else
2249 mEventEditor->showMaximized(); 2252 mEventEditor->showMaximized();
2250#endif 2253#endif
2251} 2254}
2252void CalendarView::showTodoEditor() 2255void CalendarView::showTodoEditor()
2253{ 2256{
2254#ifdef DESKTOP_VERSION 2257#ifdef DESKTOP_VERSION
2255 mTodoEditor->show(); 2258 mTodoEditor->show();
2256#else 2259#else
2257 mTodoEditor->showMaximized(); 2260 mTodoEditor->showMaximized();
2258#endif 2261#endif
2259} 2262}
2260void CalendarView::cancelIncidence(Incidence * inc ) 2263void CalendarView::cancelIncidence(Incidence * inc )
2261{ 2264{
2262 inc->setCancelled( ! inc->cancelled() ); 2265 inc->setCancelled( ! inc->cancelled() );
2263 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2266 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2264 updateView(); 2267 updateView();
2265} 2268}
2266void CalendarView::cloneIncidence(Incidence * orgInc ) 2269void CalendarView::cloneIncidence(Incidence * orgInc )
2267{ 2270{
2268 Incidence * newInc = orgInc->clone(); 2271 Incidence * newInc = orgInc->clone();
2269 newInc->recreate(); 2272 newInc->recreate();
2270 2273
2271 if ( newInc->type() == "Todo" ) { 2274 if ( newInc->type() == "Todo" ) {
2272 Todo* t = (Todo*) newInc; 2275 Todo* t = (Todo*) newInc;
2273 mTodoEditor->editTodo( t ); 2276 mTodoEditor->editTodo( t );
2274 showTodoEditor(); 2277 showTodoEditor();
2275 if ( mTodoEditor->exec() ) { 2278 if ( mTodoEditor->exec() ) {
2276 mCalendar->addTodo( t ); 2279 mCalendar->addTodo( t );
2277 updateView(); 2280 updateView();
2278 } else { 2281 } else {
2279 delete t; 2282 delete t;
2280 } 2283 }
2281 } 2284 }
2282 else { 2285 else {
2283 Event* e = (Event*) newInc; 2286 Event* e = (Event*) newInc;
2284 mEventEditor->editEvent( e ); 2287 mEventEditor->editEvent( e );
2285 showEventEditor(); 2288 showEventEditor();
2286 if ( mEventEditor->exec() ) { 2289 if ( mEventEditor->exec() ) {
2287 mCalendar->addEvent( e ); 2290 mCalendar->addEvent( e );
2288 updateView(); 2291 updateView();
2289 } else { 2292 } else {
2290 delete e; 2293 delete e;
2291 } 2294 }
2292 } 2295 }
2293} 2296}
2294 2297
2295void CalendarView::newEvent() 2298void CalendarView::newEvent()
2296{ 2299{
2297 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2300 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2298 KOAgendaView *aView = mViewManager->agendaView(); 2301 KOAgendaView *aView = mViewManager->agendaView();
2299 if (aView) { 2302 if (aView) {
2300 if (aView->selectionStart().isValid()) { 2303 if (aView->selectionStart().isValid()) {
2301 if (aView->selectedIsAllDay()) { 2304 if (aView->selectedIsAllDay()) {
2302 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2305 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2303 } else { 2306 } else {
2304 newEvent(aView->selectionStart(),aView->selectionEnd()); 2307 newEvent(aView->selectionStart(),aView->selectionEnd());
2305 } 2308 }
2306 return; 2309 return;
2307 } 2310 }
2308 } 2311 }
2309 2312
2310 QDate date = mNavigator->selectedDates().first(); 2313 QDate date = mNavigator->selectedDates().first();
2311 QDateTime current = QDateTime::currentDateTime(); 2314 QDateTime current = QDateTime::currentDateTime();
2312 if ( date <= current.date() ) { 2315 if ( date <= current.date() ) {
2313 int hour = current.time().hour() +1; 2316 int hour = current.time().hour() +1;
2314 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2317 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2315 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2318 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2316 } else 2319 } else
2317 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2320 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2318 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2321 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2319 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2322 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2320} 2323}
2321 2324
2322void CalendarView::newEvent(QDateTime fh) 2325void CalendarView::newEvent(QDateTime fh)
2323{ 2326{
2324 newEvent(fh, 2327 newEvent(fh,
2325 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2328 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2326} 2329}
2327 2330
2328void CalendarView::newEvent(QDate dt) 2331void CalendarView::newEvent(QDate dt)
2329{ 2332{
2330 newEvent(QDateTime(dt, QTime(0,0,0)), 2333 newEvent(QDateTime(dt, QTime(0,0,0)),
2331 QDateTime(dt, QTime(0,0,0)), true); 2334 QDateTime(dt, QTime(0,0,0)), true);
2332} 2335}
2333 2336
2334void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2337void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2335{ 2338{
2336 2339
2337 mEventEditor->newEvent(fromHint,toHint,allDay); 2340 mEventEditor->newEvent(fromHint,toHint,allDay);
2338 if ( mFilterView->filtersEnabled() ) { 2341 if ( mFilterView->filtersEnabled() ) {
2339 CalFilter *filter = mFilterView->selectedFilter(); 2342 CalFilter *filter = mFilterView->selectedFilter();
2340 if (filter && filter->showCategories()) { 2343 if (filter && filter->showCategories()) {
2341 mEventEditor->setCategories(filter->categoryList().join(",") ); 2344 mEventEditor->setCategories(filter->categoryList().join(",") );
2342 } 2345 }
2343 if ( filter ) 2346 if ( filter )
2344 mEventEditor->setSecrecy( filter->getSecrecy() ); 2347 mEventEditor->setSecrecy( filter->getSecrecy() );
2345 } 2348 }
2346 showEventEditor(); 2349 showEventEditor();
2347} 2350}
2348void CalendarView::todoAdded(Todo * t) 2351void CalendarView::todoAdded(Todo * t)
2349{ 2352{
2350 2353
2351 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2354 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2352 updateTodoViews(); 2355 updateTodoViews();
2353} 2356}
2354void CalendarView::todoChanged(Todo * t) 2357void CalendarView::todoChanged(Todo * t)
2355{ 2358{
2356 emit todoModified( t, 4 ); 2359 emit todoModified( t, 4 );
2357 // updateTodoViews(); 2360 // updateTodoViews();
2358} 2361}
2359void CalendarView::todoToBeDeleted(Todo *) 2362void CalendarView::todoToBeDeleted(Todo *)
2360{ 2363{
2361 //qDebug("todoToBeDeleted(Todo *) "); 2364 //qDebug("todoToBeDeleted(Todo *) ");
2362 updateTodoViews(); 2365 updateTodoViews();
2363} 2366}
2364void CalendarView::todoDeleted() 2367void CalendarView::todoDeleted()
2365{ 2368{
2366 //qDebug(" todoDeleted()"); 2369 //qDebug(" todoDeleted()");
2367 updateTodoViews(); 2370 updateTodoViews();
2368} 2371}
2369 2372
2370 2373
2371 2374
2372void CalendarView::newTodo() 2375void CalendarView::newTodo()
2373{ 2376{
2374 2377
2375 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2378 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2376 if ( mFilterView->filtersEnabled() ) { 2379 if ( mFilterView->filtersEnabled() ) {
2377 CalFilter *filter = mFilterView->selectedFilter(); 2380 CalFilter *filter = mFilterView->selectedFilter();
2378 if (filter && filter->showCategories()) { 2381 if (filter && filter->showCategories()) {
2379 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2382 mTodoEditor->setCategories(filter->categoryList().join(",") );
2380 } 2383 }
2381 if ( filter ) 2384 if ( filter )
2382 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2385 mTodoEditor->setSecrecy( filter->getSecrecy() );
2383 } 2386 }
2384 showTodoEditor(); 2387 showTodoEditor();
2385} 2388}
2386 2389
2387void CalendarView::newSubTodo() 2390void CalendarView::newSubTodo()
2388{ 2391{
2389 Todo *todo = selectedTodo(); 2392 Todo *todo = selectedTodo();
2390 if ( todo ) newSubTodo( todo ); 2393 if ( todo ) newSubTodo( todo );
2391} 2394}
2392 2395
2393void CalendarView::newSubTodo(Todo *parentEvent) 2396void CalendarView::newSubTodo(Todo *parentEvent)
2394{ 2397{
2395 2398
2396 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2399 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2397 showTodoEditor(); 2400 showTodoEditor();
2398} 2401}
2399 2402
2400void CalendarView::newFloatingEvent() 2403void CalendarView::newFloatingEvent()
2401{ 2404{
2402 DateList tmpList = mNavigator->selectedDates(); 2405 DateList tmpList = mNavigator->selectedDates();
2403 QDate date = tmpList.first(); 2406 QDate date = tmpList.first();
2404 2407
2405 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2408 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2406 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2409 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2407} 2410}
2408 2411
2409 2412
2410void CalendarView::editEvent( Event *event ) 2413void CalendarView::editEvent( Event *event )
2411{ 2414{
2412 2415
2413 if ( !event ) return; 2416 if ( !event ) return;
2414 if ( event->isReadOnly() ) { 2417 if ( event->isReadOnly() ) {
2415 showEvent( event ); 2418 showEvent( event );
2416 return; 2419 return;
2417 } 2420 }
2418 mEventEditor->editEvent( event , mFlagEditDescription); 2421 mEventEditor->editEvent( event , mFlagEditDescription);
2419 showEventEditor(); 2422 showEventEditor();
2420} 2423}
2421void CalendarView::editJournal( Journal *jour ) 2424void CalendarView::editJournal( Journal *jour )
2422{ 2425{
2423 if ( !jour ) return; 2426 if ( !jour ) return;
2424 mDialogManager->hideSearchDialog(); 2427 mDialogManager->hideSearchDialog();
2425 mViewManager->showJournalView(); 2428 mViewManager->showJournalView();
2426 mNavigator->slotDaySelect( jour->dtStart().date() ); 2429 mNavigator->slotDaySelect( jour->dtStart().date() );
2427} 2430}
2428void CalendarView::editTodo( Todo *todo ) 2431void CalendarView::editTodo( Todo *todo )
2429{ 2432{
2430 if ( !todo ) return; 2433 if ( !todo ) return;
2431 2434
2432 if ( todo->isReadOnly() ) { 2435 if ( todo->isReadOnly() ) {
2433 showTodo( todo ); 2436 showTodo( todo );
2434 return; 2437 return;
2435 } 2438 }
2436 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2439 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2437 showTodoEditor(); 2440 showTodoEditor();
2438 2441
2439} 2442}
2440 2443
2441KOEventViewerDialog* CalendarView::getEventViewerDialog() 2444KOEventViewerDialog* CalendarView::getEventViewerDialog()
2442{ 2445{
2443 if ( !mEventViewerDialog ) { 2446 if ( !mEventViewerDialog ) {
2444 mEventViewerDialog = new KOEventViewerDialog(this); 2447 mEventViewerDialog = new KOEventViewerDialog(this);
2445 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2448 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2446 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2449 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2447 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2450 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2448 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2451 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2449 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2452 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2450 viewManager(), SLOT( showAgendaView( bool ) ) ); 2453 viewManager(), SLOT( showAgendaView( bool ) ) );
2451 mEventViewerDialog->resize( 640, 480 ); 2454 mEventViewerDialog->resize( 640, 480 );
2452 2455
2453 } 2456 }
2454 return mEventViewerDialog; 2457 return mEventViewerDialog;
2455} 2458}
2456void CalendarView::showEvent(Event *event) 2459void CalendarView::showEvent(Event *event)
2457{ 2460{
2458 getEventViewerDialog()->setEvent(event); 2461 getEventViewerDialog()->setEvent(event);
2459 getEventViewerDialog()->showMe(); 2462 getEventViewerDialog()->showMe();
2460} 2463}
2461 2464
2462void CalendarView::showTodo(Todo *event) 2465void CalendarView::showTodo(Todo *event)
2463{ 2466{
2464 getEventViewerDialog()->setTodo(event); 2467 getEventViewerDialog()->setTodo(event);
2465 getEventViewerDialog()->showMe(); 2468 getEventViewerDialog()->showMe();
2466} 2469}
2467void CalendarView::showJournal( Journal *jour ) 2470void CalendarView::showJournal( Journal *jour )
2468{ 2471{
2469 getEventViewerDialog()->setJournal(jour); 2472 getEventViewerDialog()->setJournal(jour);
2470 getEventViewerDialog()->showMe(); 2473 getEventViewerDialog()->showMe();
2471 2474
2472} 2475}
2473// void CalendarView::todoModified (Todo *event, int changed) 2476// void CalendarView::todoModified (Todo *event, int changed)
2474// { 2477// {
2475// // if (mDialogList.find (event) != mDialogList.end ()) { 2478// // if (mDialogList.find (event) != mDialogList.end ()) {
2476// // kdDebug() << "Todo modified and open" << endl; 2479// // kdDebug() << "Todo modified and open" << endl;
2477// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2480// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2478// // temp->modified (changed); 2481// // temp->modified (changed);
2479 2482
2480// // } 2483// // }
2481 2484
2482// mViewManager->updateView(); 2485// mViewManager->updateView();
2483// } 2486// }
2484 2487
2485void CalendarView::appointment_show() 2488void CalendarView::appointment_show()
2486{ 2489{
2487 Event *anEvent = 0; 2490 Event *anEvent = 0;
2488 2491
2489 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2492 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2490 2493
2491 if (mViewManager->currentView()->isEventView()) { 2494 if (mViewManager->currentView()->isEventView()) {
2492 if ( incidence && incidence->type() == "Event" ) { 2495 if ( incidence && incidence->type() == "Event" ) {
2493 anEvent = static_cast<Event *>(incidence); 2496 anEvent = static_cast<Event *>(incidence);
2494 } 2497 }
2495 } 2498 }
2496 2499
2497 if (!anEvent) { 2500 if (!anEvent) {
2498 KNotifyClient::beep(); 2501 KNotifyClient::beep();
2499 return; 2502 return;
2500 } 2503 }
2501 2504
2502 showEvent(anEvent); 2505 showEvent(anEvent);
2503} 2506}
2504 2507
2505void CalendarView::appointment_edit() 2508void CalendarView::appointment_edit()
2506{ 2509{
2507 Event *anEvent = 0; 2510 Event *anEvent = 0;
2508 2511
2509 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2512 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2510 2513
2511 if (mViewManager->currentView()->isEventView()) { 2514 if (mViewManager->currentView()->isEventView()) {
2512 if ( incidence && incidence->type() == "Event" ) { 2515 if ( incidence && incidence->type() == "Event" ) {
2513 anEvent = static_cast<Event *>(incidence); 2516 anEvent = static_cast<Event *>(incidence);
2514 } 2517 }
2515 } 2518 }
2516 2519
2517 if (!anEvent) { 2520 if (!anEvent) {
2518 KNotifyClient::beep(); 2521 KNotifyClient::beep();
2519 return; 2522 return;
2520 } 2523 }
2521 2524
2522 editEvent(anEvent); 2525 editEvent(anEvent);
2523} 2526}
2524 2527
2525void CalendarView::appointment_delete() 2528void CalendarView::appointment_delete()
2526{ 2529{
2527 Event *anEvent = 0; 2530 Event *anEvent = 0;
2528 2531
2529 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2532 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2530 2533
2531 if (mViewManager->currentView()->isEventView()) { 2534 if (mViewManager->currentView()->isEventView()) {
2532 if ( incidence && incidence->type() == "Event" ) { 2535 if ( incidence && incidence->type() == "Event" ) {
2533 anEvent = static_cast<Event *>(incidence); 2536 anEvent = static_cast<Event *>(incidence);
2534 } 2537 }
2535 } 2538 }
2536 2539
2537 if (!anEvent) { 2540 if (!anEvent) {
2538 KNotifyClient::beep(); 2541 KNotifyClient::beep();
2539 return; 2542 return;
2540 } 2543 }
2541 2544
2542 deleteEvent(anEvent); 2545 deleteEvent(anEvent);
2543} 2546}
2544 2547
2545void CalendarView::todo_unsub(Todo *anTodo ) 2548void CalendarView::todo_unsub(Todo *anTodo )
2546{ 2549{
2547 // Todo *anTodo = selectedTodo(); 2550 // Todo *anTodo = selectedTodo();
2548 if (!anTodo) return; 2551 if (!anTodo) return;
2549 if (!anTodo->relatedTo()) return; 2552 if (!anTodo->relatedTo()) return;
2550 anTodo->relatedTo()->removeRelation(anTodo); 2553 anTodo->relatedTo()->removeRelation(anTodo);
2551 anTodo->setRelatedTo(0); 2554 anTodo->setRelatedTo(0);
2552 anTodo->updated(); 2555 anTodo->updated();
2553 anTodo->setRelatedToUid(""); 2556 anTodo->setRelatedToUid("");
2554 setModified(true); 2557 setModified(true);
2555 updateView(); 2558 updateView();
2556} 2559}
2557 2560
2558void CalendarView::deleteTodo(Todo *todo) 2561void CalendarView::deleteTodo(Todo *todo)
2559{ 2562{
2560 if (!todo) { 2563 if (!todo) {
2561 KNotifyClient::beep(); 2564 KNotifyClient::beep();
2562 return; 2565 return;
2563 } 2566 }
2564 if (KOPrefs::instance()->mConfirm) { 2567 if (KOPrefs::instance()->mConfirm) {
2565 switch (msgItemDelete()) { 2568 switch (msgItemDelete()) {
2566 case KMessageBox::Continue: // OK 2569 case KMessageBox::Continue: // OK
2567 if (!todo->relations().isEmpty()) { 2570 if (!todo->relations().isEmpty()) {
2568 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2571 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2569 i18n("Delete To-Do")); 2572 i18n("Delete To-Do"));
2570 } else { 2573 } else {
2571 checkExternalId( todo ); 2574 checkExternalId( todo );
2572 calendar()->deleteTodo(todo); 2575 calendar()->deleteTodo(todo);
2573 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2576 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2574 updateView(); 2577 updateView();
2575 } 2578 }
2576 break; 2579 break;
2577 } // switch 2580 } // switch
2578 } else { 2581 } else {
2579 if (!todo->relations().isEmpty()) { 2582 if (!todo->relations().isEmpty()) {
2580 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2583 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2581 i18n("Delete To-Do")); 2584 i18n("Delete To-Do"));
2582 } else { 2585 } else {
2583 checkExternalId( todo ); 2586 checkExternalId( todo );
2584 mCalendar->deleteTodo(todo); 2587 mCalendar->deleteTodo(todo);
2585 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2588 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2586 updateView(); 2589 updateView();
2587 } 2590 }
2588 } 2591 }
2589 emit updateSearchDialog(); 2592 emit updateSearchDialog();
2590} 2593}
2591void CalendarView::deleteJournal(Journal *jour) 2594void CalendarView::deleteJournal(Journal *jour)
2592{ 2595{
2593 if (!jour) { 2596 if (!jour) {
2594 KNotifyClient::beep(); 2597 KNotifyClient::beep();
2595 return; 2598 return;
2596 } 2599 }
2597 if (KOPrefs::instance()->mConfirm) { 2600 if (KOPrefs::instance()->mConfirm) {
2598 switch (msgItemDelete()) { 2601 switch (msgItemDelete()) {
2599 case KMessageBox::Continue: // OK 2602 case KMessageBox::Continue: // OK
2600 calendar()->deleteJournal(jour); 2603 calendar()->deleteJournal(jour);
2601 updateView(); 2604 updateView();
2602 break; 2605 break;
2603 } // switch 2606 } // switch
2604 } else { 2607 } else {
2605 calendar()->deleteJournal(jour);; 2608 calendar()->deleteJournal(jour);;
2606 updateView(); 2609 updateView();
2607 } 2610 }
2608 emit updateSearchDialog(); 2611 emit updateSearchDialog();
2609} 2612}
2610 2613
2611void CalendarView::deleteEvent(Event *anEvent) 2614void CalendarView::deleteEvent(Event *anEvent)
2612{ 2615{
2613 if (!anEvent) { 2616 if (!anEvent) {
2614 KNotifyClient::beep(); 2617 KNotifyClient::beep();
2615 return; 2618 return;
2616 } 2619 }
2617 2620
2618 if (anEvent->recurrence()->doesRecur()) { 2621 if (anEvent->recurrence()->doesRecur()) {
2619 QDate itemDate = mViewManager->currentSelectionDate(); 2622 QDate itemDate = mViewManager->currentSelectionDate();
2620 int km; 2623 int km;
2621 if (!itemDate.isValid()) { 2624 if (!itemDate.isValid()) {
2622 //kdDebug() << "Date Not Valid" << endl; 2625 //kdDebug() << "Date Not Valid" << endl;
2623 if (KOPrefs::instance()->mConfirm) { 2626 if (KOPrefs::instance()->mConfirm) {
2624 km = KMessageBox::warningContinueCancel(this,anEvent->summary() + 2627 km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
2625 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2628 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2626 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2629 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2627 if ( km == KMessageBox::Continue ) 2630 if ( km == KMessageBox::Continue )
2628 km = KMessageBox::No; // No = all below 2631 km = KMessageBox::No; // No = all below
2629 } else 2632 } else
2630 km = KMessageBox::No; 2633 km = KMessageBox::No;
2631 } else { 2634 } else {
2632 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() + 2635 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
2633 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2636 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2634 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2637 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2635 i18n("KO/Pi Confirmation"),i18n("Current"), 2638 i18n("KO/Pi Confirmation"),i18n("Current"),
2636 i18n("All")); 2639 i18n("All"));
2637 } 2640 }
2638 switch(km) { 2641 switch(km) {
2639 2642
2640 case KMessageBox::No: // Continue // all 2643 case KMessageBox::No: // Continue // all
2641 //qDebug("KMessageBox::No "); 2644 //qDebug("KMessageBox::No ");
2642 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2645 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2643 schedule(Scheduler::Cancel,anEvent); 2646 schedule(Scheduler::Cancel,anEvent);
2644 2647
2645 checkExternalId( anEvent); 2648 checkExternalId( anEvent);
2646 mCalendar->deleteEvent(anEvent); 2649 mCalendar->deleteEvent(anEvent);
2647 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2650 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2648 break; 2651 break;
2649 2652
2650 // Disabled because it does not work 2653 // Disabled because it does not work
2651 //#if 0 2654 //#if 0
2652 case KMessageBox::Yes: // just this one 2655 case KMessageBox::Yes: // just this one
2653 //QDate qd = mNavigator->selectedDates().first(); 2656 //QDate qd = mNavigator->selectedDates().first();
2654 //if (!qd.isValid()) { 2657 //if (!qd.isValid()) {
2655 // kdDebug() << "no date selected, or invalid date" << endl; 2658 // kdDebug() << "no date selected, or invalid date" << endl;
2656 // KNotifyClient::beep(); 2659 // KNotifyClient::beep();
2657 // return; 2660 // return;
2658 //} 2661 //}
2659 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2662 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2660 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2663 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2661 anEvent->addExDate(itemDate); 2664 anEvent->addExDate(itemDate);
2662 int duration = anEvent->recurrence()->duration(); 2665 int duration = anEvent->recurrence()->duration();
2663 if ( duration > 0 ) { 2666 if ( duration > 0 ) {
2664 anEvent->recurrence()->setDuration( duration - 1 ); 2667 anEvent->recurrence()->setDuration( duration - 1 );
2665 } 2668 }
2666 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2669 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2667 } 2670 }
2668 break; 2671 break;
2669 //#endif 2672 //#endif
2670 } // switch 2673 } // switch
2671 } else { 2674 } else {
2672 if (KOPrefs::instance()->mConfirm) { 2675 if (KOPrefs::instance()->mConfirm) {
2673 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() + 2676 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
2674 i18n("\nAre you sure you want\nto delete this event?"), 2677 i18n("\nAre you sure you want\nto delete this event?"),
2675 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 2678 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
2676 case KMessageBox::Continue: // OK 2679 case KMessageBox::Continue: // OK
2677 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2680 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2678 schedule(Scheduler::Cancel,anEvent); 2681 schedule(Scheduler::Cancel,anEvent);
2679 checkExternalId( anEvent); 2682 checkExternalId( anEvent);
2680 mCalendar->deleteEvent(anEvent); 2683 mCalendar->deleteEvent(anEvent);
2681 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2684 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2682 break; 2685 break;
2683 } // switch 2686 } // switch
2684 } else { 2687 } else {
2685 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2688 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2686 schedule(Scheduler::Cancel,anEvent); 2689 schedule(Scheduler::Cancel,anEvent);
2687 checkExternalId( anEvent); 2690 checkExternalId( anEvent);
2688 mCalendar->deleteEvent(anEvent); 2691 mCalendar->deleteEvent(anEvent);
2689 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2692 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2690 } 2693 }
2691 } // if-else 2694 } // if-else
2692 emit updateSearchDialog(); 2695 emit updateSearchDialog();
2693} 2696}
2694 2697
2695bool CalendarView::deleteEvent(const QString &uid) 2698bool CalendarView::deleteEvent(const QString &uid)
2696{ 2699{
2697 Event *ev = mCalendar->event(uid); 2700 Event *ev = mCalendar->event(uid);
2698 if (ev) { 2701 if (ev) {
2699 deleteEvent(ev); 2702 deleteEvent(ev);
2700 return true; 2703 return true;
2701 } else { 2704 } else {
2702 return false; 2705 return false;
2703 } 2706 }
2704} 2707}
2705 2708
2706/*****************************************************************************/ 2709/*****************************************************************************/
2707 2710
2708void CalendarView::action_mail() 2711void CalendarView::action_mail()
2709{ 2712{
2710#ifndef KORG_NOMAIL 2713#ifndef KORG_NOMAIL
2711 KOMailClient mailClient; 2714 KOMailClient mailClient;
2712 2715
2713 Incidence *incidence = currentSelection(); 2716 Incidence *incidence = currentSelection();
2714 2717
2715 if (!incidence) { 2718 if (!incidence) {
2716 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2719 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2717 return; 2720 return;
2718 } 2721 }
2719 if(incidence->attendeeCount() == 0 ) { 2722 if(incidence->attendeeCount() == 0 ) {
2720 KMessageBox::sorry(this, 2723 KMessageBox::sorry(this,
2721 i18n("Can't generate mail:\nNo attendees defined.\n")); 2724 i18n("Can't generate mail:\nNo attendees defined.\n"));
2722 return; 2725 return;
2723 } 2726 }
2724 2727
2725 CalendarLocal cal_tmp; 2728 CalendarLocal cal_tmp;
2726 Event *event = 0; 2729 Event *event = 0;
2727 Event *ev = 0; 2730 Event *ev = 0;
2728 if ( incidence && incidence->type() == "Event" ) { 2731 if ( incidence && incidence->type() == "Event" ) {
2729 event = static_cast<Event *>(incidence); 2732 event = static_cast<Event *>(incidence);
2730 ev = new Event(*event); 2733 ev = new Event(*event);
2731 cal_tmp.addEvent(ev); 2734 cal_tmp.addEvent(ev);
2732 } 2735 }
2733 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave); 2736 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave);
2734 QString attachment = mForm.toString( &cal_tmp ); 2737 QString attachment = mForm.toString( &cal_tmp );
2735 if (ev) delete(ev); 2738 if (ev) delete(ev);
2736 2739
2737 mailClient.mailAttendees(currentSelection(), attachment); 2740 mailClient.mailAttendees(currentSelection(), attachment);
2738 2741
2739#endif 2742#endif
2740 2743
2741#if 0 2744#if 0
2742 Event *anEvent = 0; 2745 Event *anEvent = 0;
2743 if (mViewManager->currentView()->isEventView()) { 2746 if (mViewManager->currentView()->isEventView()) {
2744 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 2747 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
2745 } 2748 }
2746 2749
2747 if (!anEvent) { 2750 if (!anEvent) {
2748 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2751 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2749 return; 2752 return;
2750 } 2753 }
2751 if(anEvent->attendeeCount() == 0 ) { 2754 if(anEvent->attendeeCount() == 0 ) {
2752 KMessageBox::sorry(this, 2755 KMessageBox::sorry(this,
2753 i18n("Can't generate mail:\nNo attendees defined.\n")); 2756 i18n("Can't generate mail:\nNo attendees defined.\n"));
2754 return; 2757 return;
2755 } 2758 }
2756 2759
2757 mailobject.emailEvent(anEvent); 2760 mailobject.emailEvent(anEvent);
2758#endif 2761#endif
2759} 2762}
2760 2763
2761 2764
2762void CalendarView::schedule_publish(Incidence *incidence) 2765void CalendarView::schedule_publish(Incidence *incidence)
2763{ 2766{
2764 Event *event = 0; 2767 Event *event = 0;
2765 Todo *todo = 0; 2768 Todo *todo = 0;
2766 2769
2767 if (incidence == 0) { 2770 if (incidence == 0) {
2768 incidence = mViewManager->currentView()->selectedIncidences().first(); 2771 incidence = mViewManager->currentView()->selectedIncidences().first();
2769 if (incidence == 0) { 2772 if (incidence == 0) {
2770 incidence = mTodoList->selectedIncidences().first(); 2773 incidence = mTodoList->selectedIncidences().first();
2771 } 2774 }
2772 } 2775 }
2773 if ( incidence && incidence->type() == "Event" ) { 2776 if ( incidence && incidence->type() == "Event" ) {
2774 event = static_cast<Event *>(incidence); 2777 event = static_cast<Event *>(incidence);
2775 } else { 2778 } else {
2776 if ( incidence && incidence->type() == "Todo" ) { 2779 if ( incidence && incidence->type() == "Todo" ) {
2777 todo = static_cast<Todo *>(incidence); 2780 todo = static_cast<Todo *>(incidence);
2778 } 2781 }
2779 } 2782 }
2780 2783
2781 if (!event && !todo) { 2784 if (!event && !todo) {
2782 KMessageBox::sorry(this,i18n("No event selected.")); 2785 KMessageBox::sorry(this,i18n("No event selected."));
2783 return; 2786 return;
2784 } 2787 }
2785 2788
2786 PublishDialog *publishdlg = new PublishDialog(); 2789 PublishDialog *publishdlg = new PublishDialog();
2787 if (incidence->attendeeCount()>0) { 2790 if (incidence->attendeeCount()>0) {
2788 QPtrList<Attendee> attendees = incidence->attendees(); 2791 QPtrList<Attendee> attendees = incidence->attendees();
2789 attendees.first(); 2792 attendees.first();
2790 while ( attendees.current()!=0 ) { 2793 while ( attendees.current()!=0 ) {
2791 publishdlg->addAttendee(attendees.current()); 2794 publishdlg->addAttendee(attendees.current());
2792 attendees.next(); 2795 attendees.next();
2793 } 2796 }
2794 } 2797 }
2795 bool send = true; 2798 bool send = true;
2796 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 2799 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
2797 if ( publishdlg->exec() != QDialog::Accepted ) 2800 if ( publishdlg->exec() != QDialog::Accepted )
2798 send = false; 2801 send = false;
2799 } 2802 }
2800 if ( send ) { 2803 if ( send ) {
2801 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2804 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2802 if ( event ) { 2805 if ( event ) {
2803 Event *ev = new Event(*event); 2806 Event *ev = new Event(*event);
2804 ev->registerObserver(0); 2807 ev->registerObserver(0);
2805 ev->clearAttendees(); 2808 ev->clearAttendees();
2806 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2809 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2807 delete(ev); 2810 delete(ev);
2808 } 2811 }
2809 } else { 2812 } else {
2810 if ( todo ) { 2813 if ( todo ) {
2811 Todo *ev = new Todo(*todo); 2814 Todo *ev = new Todo(*todo);
2812 ev->registerObserver(0); 2815 ev->registerObserver(0);
2813 ev->clearAttendees(); 2816 ev->clearAttendees();
2814 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2817 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2815 delete(ev); 2818 delete(ev);
2816 } 2819 }
2817 } 2820 }
2818 } 2821 }
2819 } 2822 }
2820 delete publishdlg; 2823 delete publishdlg;
2821} 2824}
2822 2825
2823void CalendarView::schedule_request(Incidence *incidence) 2826void CalendarView::schedule_request(Incidence *incidence)
2824{ 2827{
2825 schedule(Scheduler::Request,incidence); 2828 schedule(Scheduler::Request,incidence);
2826} 2829}
2827 2830
2828void CalendarView::schedule_refresh(Incidence *incidence) 2831void CalendarView::schedule_refresh(Incidence *incidence)
2829{ 2832{
2830 schedule(Scheduler::Refresh,incidence); 2833 schedule(Scheduler::Refresh,incidence);
2831} 2834}
2832 2835
2833void CalendarView::schedule_cancel(Incidence *incidence) 2836void CalendarView::schedule_cancel(Incidence *incidence)
2834{ 2837{
2835 schedule(Scheduler::Cancel,incidence); 2838 schedule(Scheduler::Cancel,incidence);
2836} 2839}
2837 2840
2838void CalendarView::schedule_add(Incidence *incidence) 2841void CalendarView::schedule_add(Incidence *incidence)
2839{ 2842{
2840 schedule(Scheduler::Add,incidence); 2843 schedule(Scheduler::Add,incidence);
2841} 2844}
2842 2845
2843void CalendarView::schedule_reply(Incidence *incidence) 2846void CalendarView::schedule_reply(Incidence *incidence)
2844{ 2847{
2845 schedule(Scheduler::Reply,incidence); 2848 schedule(Scheduler::Reply,incidence);
2846} 2849}
2847 2850
2848void CalendarView::schedule_counter(Incidence *incidence) 2851void CalendarView::schedule_counter(Incidence *incidence)
2849{ 2852{
2850 schedule(Scheduler::Counter,incidence); 2853 schedule(Scheduler::Counter,incidence);
2851} 2854}
2852 2855
2853void CalendarView::schedule_declinecounter(Incidence *incidence) 2856void CalendarView::schedule_declinecounter(Incidence *incidence)
2854{ 2857{
2855 schedule(Scheduler::Declinecounter,incidence); 2858 schedule(Scheduler::Declinecounter,incidence);
2856} 2859}
2857 2860
2858void CalendarView::schedule_publish_freebusy(int daysToPublish) 2861void CalendarView::schedule_publish_freebusy(int daysToPublish)
2859{ 2862{
2860 QDateTime start = QDateTime::currentDateTime(); 2863 QDateTime start = QDateTime::currentDateTime();
2861 QDateTime end = start.addDays(daysToPublish); 2864 QDateTime end = start.addDays(daysToPublish);
2862 2865
2863 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 2866 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
2864 freebusy->setOrganizer(KOPrefs::instance()->email()); 2867 freebusy->setOrganizer(KOPrefs::instance()->email());
2865 2868
2866 2869
2867 PublishDialog *publishdlg = new PublishDialog(); 2870 PublishDialog *publishdlg = new PublishDialog();
2868 if ( publishdlg->exec() == QDialog::Accepted ) { 2871 if ( publishdlg->exec() == QDialog::Accepted ) {
2869 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2872 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2870 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 2873 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
2871 delete(freebusy); 2874 delete(freebusy);
2872 } 2875 }
2873 } 2876 }
2874 delete publishdlg; 2877 delete publishdlg;
2875} 2878}
2876 2879
2877void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 2880void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
2878{ 2881{
2879 Event *event = 0; 2882 Event *event = 0;
2880 Todo *todo = 0; 2883 Todo *todo = 0;
2881 2884
2882 if (incidence == 0) { 2885 if (incidence == 0) {
2883 incidence = mViewManager->currentView()->selectedIncidences().first(); 2886 incidence = mViewManager->currentView()->selectedIncidences().first();
2884 if (incidence == 0) { 2887 if (incidence == 0) {
2885 incidence = mTodoList->selectedIncidences().first(); 2888 incidence = mTodoList->selectedIncidences().first();
2886 } 2889 }
2887 } 2890 }
2888 if ( incidence && incidence->type() == "Event" ) { 2891 if ( incidence && incidence->type() == "Event" ) {
2889 event = static_cast<Event *>(incidence); 2892 event = static_cast<Event *>(incidence);
2890 } 2893 }
2891 if ( incidence && incidence->type() == "Todo" ) { 2894 if ( incidence && incidence->type() == "Todo" ) {
2892 todo = static_cast<Todo *>(incidence); 2895 todo = static_cast<Todo *>(incidence);
2893 } 2896 }
2894 2897
2895 if (!event && !todo) { 2898 if (!event && !todo) {
2896 KMessageBox::sorry(this,i18n("No event selected.")); 2899 KMessageBox::sorry(this,i18n("No event selected."));
2897 return; 2900 return;
2898 } 2901 }
2899 2902
2900 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 2903 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
2901 KMessageBox::sorry(this,i18n("The event has no attendees.")); 2904 KMessageBox::sorry(this,i18n("The event has no attendees."));
2902 return; 2905 return;
2903 } 2906 }
2904 2907
2905 Event *ev = 0; 2908 Event *ev = 0;
2906 if (event) ev = new Event(*event); 2909 if (event) ev = new Event(*event);
2907 Todo *to = 0; 2910 Todo *to = 0;
2908 if (todo) to = new Todo(*todo); 2911 if (todo) to = new Todo(*todo);
2909 2912
2910 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 2913 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
2911 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 2914 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
2912 if (!me) { 2915 if (!me) {
2913 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 2916 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
2914 return; 2917 return;
2915 } 2918 }
2916 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 2919 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
2917 StatusDialog *statdlg = new StatusDialog(this); 2920 StatusDialog *statdlg = new StatusDialog(this);
2918 if (!statdlg->exec()==QDialog::Accepted) return; 2921 if (!statdlg->exec()==QDialog::Accepted) return;
2919 me->setStatus( statdlg->status() ); 2922 me->setStatus( statdlg->status() );
2920 delete(statdlg); 2923 delete(statdlg);
2921 } 2924 }
2922 Attendee *menew = new Attendee(*me); 2925 Attendee *menew = new Attendee(*me);
2923 if (ev) { 2926 if (ev) {
2924 ev->clearAttendees(); 2927 ev->clearAttendees();
2925 ev->addAttendee(menew,false); 2928 ev->addAttendee(menew,false);
2926 } else { 2929 } else {
2927 if (to) { 2930 if (to) {
2928 todo->clearAttendees(); 2931 todo->clearAttendees();
2929 todo->addAttendee(menew,false); 2932 todo->addAttendee(menew,false);
2930 } 2933 }
2931 } 2934 }
2932 } 2935 }
2933 2936
2934 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2937 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2935 if (ev) { 2938 if (ev) {
2936 if ( !dlg->addMessage(ev,method) ) delete(ev); 2939 if ( !dlg->addMessage(ev,method) ) delete(ev);
2937 } else { 2940 } else {
2938 if (to) { 2941 if (to) {
2939 if ( !dlg->addMessage(to,method) ) delete(to); 2942 if ( !dlg->addMessage(to,method) ) delete(to);
2940 } 2943 }
2941 } 2944 }
2942} 2945}
2943 2946
2944void CalendarView::openAddressbook() 2947void CalendarView::openAddressbook()
2945{ 2948{
2946 KRun::runCommand("kaddressbook"); 2949 KRun::runCommand("kaddressbook");
2947} 2950}
2948 2951
2949void CalendarView::setModified(bool modified) 2952void CalendarView::setModified(bool modified)
2950{ 2953{
2951 if ( modified ) 2954 if ( modified )
2952 emit signalmodified(); 2955 emit signalmodified();
2953 if (mModified != modified) { 2956 if (mModified != modified) {
2954 mModified = modified; 2957 mModified = modified;
2955 emit modifiedChanged(mModified); 2958 emit modifiedChanged(mModified);
2956 } 2959 }
2957} 2960}
2958 2961
2959bool CalendarView::isReadOnly() 2962bool CalendarView::isReadOnly()
2960{ 2963{
2961 return mReadOnly; 2964 return mReadOnly;
2962} 2965}
2963 2966
2964void CalendarView::setReadOnly(bool readOnly) 2967void CalendarView::setReadOnly(bool readOnly)
2965{ 2968{
2966 if (mReadOnly != readOnly) { 2969 if (mReadOnly != readOnly) {
2967 mReadOnly = readOnly; 2970 mReadOnly = readOnly;
2968 emit readOnlyChanged(mReadOnly); 2971 emit readOnlyChanged(mReadOnly);
2969 } 2972 }
2970} 2973}
2971 2974
2972bool CalendarView::isModified() 2975bool CalendarView::isModified()
2973{ 2976{
2974 return mModified; 2977 return mModified;
2975} 2978}
2976 2979
2977void CalendarView::printSetup() 2980void CalendarView::printSetup()
2978{ 2981{
2979#ifndef KORG_NOPRINTER 2982#ifndef KORG_NOPRINTER
2980 createPrinter(); 2983 createPrinter();
2981 2984
2982 mCalPrinter->setupPrinter(); 2985 mCalPrinter->setupPrinter();
2983#endif 2986#endif
2984} 2987}
2985 2988
2986void CalendarView::print() 2989void CalendarView::print()
2987{ 2990{
2988#ifndef KORG_NOPRINTER 2991#ifndef KORG_NOPRINTER
2989 createPrinter(); 2992 createPrinter();
2990 2993
2991 DateList tmpDateList = mNavigator->selectedDates(); 2994 DateList tmpDateList = mNavigator->selectedDates();
2992 mCalPrinter->print(CalPrinter::Month, 2995 mCalPrinter->print(CalPrinter::Month,
2993 tmpDateList.first(), tmpDateList.last()); 2996 tmpDateList.first(), tmpDateList.last());
2994#endif 2997#endif
2995} 2998}
2996 2999
2997void CalendarView::printPreview() 3000void CalendarView::printPreview()
2998{ 3001{
2999#ifndef KORG_NOPRINTER 3002#ifndef KORG_NOPRINTER
3000 kdDebug() << "CalendarView::printPreview()" << endl; 3003 kdDebug() << "CalendarView::printPreview()" << endl;
3001 3004
3002 createPrinter(); 3005 createPrinter();
3003 3006
3004 DateList tmpDateList = mNavigator->selectedDates(); 3007 DateList tmpDateList = mNavigator->selectedDates();
3005 3008
3006 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3009 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3007 tmpDateList.last()); 3010 tmpDateList.last());
3008#endif 3011#endif
3009} 3012}
3010 3013
3011void CalendarView::exportICalendar() 3014void CalendarView::exportICalendar()
3012{ 3015{
3013 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3016 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3014 3017
3015 // Force correct extension 3018 // Force correct extension
3016 if (filename.right(4) != ".ics") filename += ".ics"; 3019 if (filename.right(4) != ".ics") filename += ".ics";
3017 3020
3018 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3021 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3019 storage.save(); 3022 storage.save();
3020} 3023}
3021 3024
3022bool CalendarView::exportVCalendar( QString filename ) 3025bool CalendarView::exportVCalendar( QString filename )
3023{ 3026{
3024 if (mCalendar->journals().count() > 0) { 3027 if (mCalendar->journals().count() > 0) {
3025 int result = KMessageBox::warningContinueCancel(this, 3028 int result = KMessageBox::warningContinueCancel(this,
3026 i18n("The journal entries can not be\nexported to a vCalendar file."), 3029 i18n("The journal entries can not be\nexported to a vCalendar file."),
3027 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3030 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3028 true); 3031 true);
3029 if (result != KMessageBox::Continue) return false; 3032 if (result != KMessageBox::Continue) return false;
3030 } 3033 }
3031 3034
3032 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3035 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3033 3036
3034 // Force correct extension 3037 // Force correct extension
3035 if (filename.right(4) != ".vcs") filename += ".vcs"; 3038 if (filename.right(4) != ".vcs") filename += ".vcs";
3036 3039
3037 FileStorage storage( mCalendar, filename, new VCalFormat ); 3040 FileStorage storage( mCalendar, filename, new VCalFormat );
3038 return storage.save(); 3041 return storage.save();
3039 3042
3040} 3043}
3041 3044
3042void CalendarView::eventUpdated(Incidence *) 3045void CalendarView::eventUpdated(Incidence *)
3043{ 3046{
3044 setModified(); 3047 setModified();
3045 // Don't call updateView here. The code, which has caused the update of the 3048 // Don't call updateView here. The code, which has caused the update of the
3046 // event is responsible for updating the view. 3049 // event is responsible for updating the view.
3047 // updateView(); 3050 // updateView();
3048} 3051}
3049 3052
3050void CalendarView::adaptNavigationUnits() 3053void CalendarView::adaptNavigationUnits()
3051{ 3054{
3052 if (mViewManager->currentView()->isEventView()) { 3055 if (mViewManager->currentView()->isEventView()) {
3053 int days = mViewManager->currentView()->currentDateCount(); 3056 int days = mViewManager->currentView()->currentDateCount();
3054 if (days == 1) { 3057 if (days == 1) {
3055 emit changeNavStringPrev(i18n("&Previous Day")); 3058 emit changeNavStringPrev(i18n("&Previous Day"));
3056 emit changeNavStringNext(i18n("&Next Day")); 3059 emit changeNavStringNext(i18n("&Next Day"));
3057 } else { 3060 } else {
3058 emit changeNavStringPrev(i18n("&Previous Week")); 3061 emit changeNavStringPrev(i18n("&Previous Week"));
3059 emit changeNavStringNext(i18n("&Next Week")); 3062 emit changeNavStringNext(i18n("&Next Week"));
3060 } 3063 }
3061 } 3064 }
3062} 3065}
3063 3066
3064void CalendarView::processMainViewSelection( Incidence *incidence ) 3067void CalendarView::processMainViewSelection( Incidence *incidence )
3065{ 3068{
3066 if ( incidence ) mTodoList->clearSelection(); 3069 if ( incidence ) mTodoList->clearSelection();
3067 processIncidenceSelection( incidence ); 3070 processIncidenceSelection( incidence );
3068} 3071}
3069 3072
3070void CalendarView::processTodoListSelection( Incidence *incidence ) 3073void CalendarView::processTodoListSelection( Incidence *incidence )
3071{ 3074{
3072 if ( incidence && mViewManager->currentView() ) { 3075 if ( incidence && mViewManager->currentView() ) {
3073 mViewManager->currentView()->clearSelection(); 3076 mViewManager->currentView()->clearSelection();
3074 } 3077 }
3075 processIncidenceSelection( incidence ); 3078 processIncidenceSelection( incidence );
3076} 3079}
3077 3080
3078void CalendarView::processIncidenceSelection( Incidence *incidence ) 3081void CalendarView::processIncidenceSelection( Incidence *incidence )
3079{ 3082{
3080 if ( incidence == mSelectedIncidence ) return; 3083 if ( incidence == mSelectedIncidence ) return;
3081 3084
3082 mSelectedIncidence = incidence; 3085 mSelectedIncidence = incidence;
3083 3086
3084 emit incidenceSelected( mSelectedIncidence ); 3087 emit incidenceSelected( mSelectedIncidence );
3085 3088
3086 if ( incidence && incidence->type() == "Event" ) { 3089 if ( incidence && incidence->type() == "Event" ) {
3087 Event *event = static_cast<Event *>( incidence ); 3090 Event *event = static_cast<Event *>( incidence );
3088 if ( event->organizer() == KOPrefs::instance()->email() ) { 3091 if ( event->organizer() == KOPrefs::instance()->email() ) {
3089 emit organizerEventsSelected( true ); 3092 emit organizerEventsSelected( true );
3090 } else { 3093 } else {
3091 emit organizerEventsSelected(false); 3094 emit organizerEventsSelected(false);
3092 } 3095 }
3093 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3096 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3094 KOPrefs::instance()->email() ) ) { 3097 KOPrefs::instance()->email() ) ) {
3095 emit groupEventsSelected( true ); 3098 emit groupEventsSelected( true );
3096 } else { 3099 } else {
3097 emit groupEventsSelected(false); 3100 emit groupEventsSelected(false);
3098 } 3101 }
3099 return; 3102 return;
3100 } else { 3103 } else {
3101 if ( incidence && incidence->type() == "Todo" ) { 3104 if ( incidence && incidence->type() == "Todo" ) {
3102 emit todoSelected( true ); 3105 emit todoSelected( true );
3103 Todo *event = static_cast<Todo *>( incidence ); 3106 Todo *event = static_cast<Todo *>( incidence );
3104 if ( event->organizer() == KOPrefs::instance()->email() ) { 3107 if ( event->organizer() == KOPrefs::instance()->email() ) {
3105 emit organizerEventsSelected( true ); 3108 emit organizerEventsSelected( true );
3106 } else { 3109 } else {
3107 emit organizerEventsSelected(false); 3110 emit organizerEventsSelected(false);
3108 } 3111 }
3109 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3112 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3110 KOPrefs::instance()->email() ) ) { 3113 KOPrefs::instance()->email() ) ) {
3111 emit groupEventsSelected( true ); 3114 emit groupEventsSelected( true );
3112 } else { 3115 } else {
3113 emit groupEventsSelected(false); 3116 emit groupEventsSelected(false);
3114 } 3117 }
3115 return; 3118 return;
3116 } else { 3119 } else {
3117 emit todoSelected( false ); 3120 emit todoSelected( false );
3118 emit organizerEventsSelected(false); 3121 emit organizerEventsSelected(false);
3119 emit groupEventsSelected(false); 3122 emit groupEventsSelected(false);
3120 } 3123 }
3121 return; 3124 return;
3122 } 3125 }
3123 3126
3124 /* if ( incidence && incidence->type() == "Todo" ) { 3127 /* if ( incidence && incidence->type() == "Todo" ) {
3125 emit todoSelected( true ); 3128 emit todoSelected( true );
3126 } else { 3129 } else {
3127 emit todoSelected( false ); 3130 emit todoSelected( false );
3128 }*/ 3131 }*/
3129} 3132}
3130 3133
3131 3134
3132void CalendarView::checkClipboard() 3135void CalendarView::checkClipboard()
3133{ 3136{
3134#ifndef KORG_NODND 3137#ifndef KORG_NODND
3135 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3138 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3136 emit pasteEnabled(true); 3139 emit pasteEnabled(true);
3137 } else { 3140 } else {
3138 emit pasteEnabled(false); 3141 emit pasteEnabled(false);
3139 } 3142 }
3140#endif 3143#endif
3141} 3144}
3142 3145
3143void CalendarView::showDates(const DateList &selectedDates) 3146void CalendarView::showDates(const DateList &selectedDates)
3144{ 3147{
3145 // kdDebug() << "CalendarView::selectDates()" << endl; 3148 // kdDebug() << "CalendarView::selectDates()" << endl;
3146 3149
3147 if ( mViewManager->currentView() ) { 3150 if ( mViewManager->currentView() ) {
3148 updateView( selectedDates.first(), selectedDates.last() ); 3151 updateView( selectedDates.first(), selectedDates.last() );
3149 } else { 3152 } else {
3150 mViewManager->showAgendaView(); 3153 mViewManager->showAgendaView();
3151 } 3154 }
3152 3155
3153 QString selDates; 3156 QString selDates;
3154 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3157 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3155 if (selectedDates.first() < selectedDates.last() ) 3158 if (selectedDates.first() < selectedDates.last() )
3156 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3159 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3157 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3160 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3158 3161
3159} 3162}
3160 3163
3161QPtrList<CalFilter> CalendarView::filters() 3164QPtrList<CalFilter> CalendarView::filters()
3162{ 3165{
3163 return mFilters; 3166 return mFilters;
3164 3167
3165} 3168}
3166void CalendarView::editFilters() 3169void CalendarView::editFilters()
3167{ 3170{
3168 // kdDebug() << "CalendarView::editFilters()" << endl; 3171 // kdDebug() << "CalendarView::editFilters()" << endl;
3169 3172
3170 CalFilter *filter = mFilters.first(); 3173 CalFilter *filter = mFilters.first();
3171 while(filter) { 3174 while(filter) {
3172 kdDebug() << " Filter: " << filter->name() << endl; 3175 kdDebug() << " Filter: " << filter->name() << endl;
3173 filter = mFilters.next(); 3176 filter = mFilters.next();
3174 } 3177 }
3175 3178
3176 mDialogManager->showFilterEditDialog(&mFilters); 3179 mDialogManager->showFilterEditDialog(&mFilters);
3177} 3180}
3178void CalendarView::toggleFilter() 3181void CalendarView::toggleFilter()
3179{ 3182{
3180 showFilter(! mFilterView->isVisible()); 3183 showFilter(! mFilterView->isVisible());
3181} 3184}
3182 3185
3183KOFilterView *CalendarView::filterView() 3186KOFilterView *CalendarView::filterView()
3184{ 3187{
3185 return mFilterView; 3188 return mFilterView;
3186} 3189}
3187void CalendarView::selectFilter( int fil ) 3190void CalendarView::selectFilter( int fil )
3188{ 3191{
3189 mFilterView->setSelectedFilter( fil ); 3192 mFilterView->setSelectedFilter( fil );
3190} 3193}
3191void CalendarView::showFilter(bool visible) 3194void CalendarView::showFilter(bool visible)
3192{ 3195{
3193 if (visible) mFilterView->show(); 3196 if (visible) mFilterView->show();
3194 else mFilterView->hide(); 3197 else mFilterView->hide();
3195} 3198}
3196void CalendarView::toggleFilerEnabled( ) 3199void CalendarView::toggleFilerEnabled( )
3197{ 3200{
3198 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3201 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3199 if ( !mFilterView->filtersEnabled() ) 3202 if ( !mFilterView->filtersEnabled() )
3200 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3203 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3201 3204
3202} 3205}
3203void CalendarView::updateFilter() 3206void CalendarView::updateFilter()
3204{ 3207{
3205 CalFilter *filter = mFilterView->selectedFilter(); 3208 CalFilter *filter = mFilterView->selectedFilter();
3206 if (filter) { 3209 if (filter) {
3207 if (mFilterView->filtersEnabled()) { 3210 if (mFilterView->filtersEnabled()) {
3208 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3211 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3209 filter->setEnabled(true); 3212 filter->setEnabled(true);
3210 } 3213 }
3211 else filter->setEnabled(false); 3214 else filter->setEnabled(false);
3212 mCalendar->setFilter(filter); 3215 mCalendar->setFilter(filter);
3213 updateView(); 3216 updateView();
3214 } 3217 }
3215} 3218}
3216 3219
3217void CalendarView::filterEdited() 3220void CalendarView::filterEdited()
3218{ 3221{
3219 mFilterView->updateFilters(); 3222 mFilterView->updateFilters();
3220 updateFilter(); 3223 updateFilter();
3221 writeSettings(); 3224 writeSettings();
3222} 3225}
3223 3226
3224 3227
3225void CalendarView::takeOverEvent() 3228void CalendarView::takeOverEvent()
3226{ 3229{
3227 Incidence *incidence = currentSelection(); 3230 Incidence *incidence = currentSelection();
3228 3231
3229 if (!incidence) return; 3232 if (!incidence) return;
3230 3233
3231 incidence->setOrganizer(KOPrefs::instance()->email()); 3234 incidence->setOrganizer(KOPrefs::instance()->email());
3232 incidence->recreate(); 3235 incidence->recreate();
3233 incidence->setReadOnly(false); 3236 incidence->setReadOnly(false);
3234 3237
3235 updateView(); 3238 updateView();
3236} 3239}
3237 3240
3238void CalendarView::takeOverCalendar() 3241void CalendarView::takeOverCalendar()
3239{ 3242{
3240 // TODO: Create Calendar::allIncidences() function and use it here 3243 // TODO: Create Calendar::allIncidences() function and use it here
3241 3244
3242 QPtrList<Event> events = mCalendar->events(); 3245 QPtrList<Event> events = mCalendar->events();
3243 for(uint i=0; i<events.count(); ++i) { 3246 for(uint i=0; i<events.count(); ++i) {
3244 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3247 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3245 events.at(i)->recreate(); 3248 events.at(i)->recreate();
3246 events.at(i)->setReadOnly(false); 3249 events.at(i)->setReadOnly(false);
3247 } 3250 }
3248 3251
3249 QPtrList<Todo> todos = mCalendar->todos(); 3252 QPtrList<Todo> todos = mCalendar->todos();
3250 for(uint i=0; i<todos.count(); ++i) { 3253 for(uint i=0; i<todos.count(); ++i) {
3251 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3254 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3252 todos.at(i)->recreate(); 3255 todos.at(i)->recreate();
3253 todos.at(i)->setReadOnly(false); 3256 todos.at(i)->setReadOnly(false);
3254 } 3257 }
3255 3258
3256 QPtrList<Journal> journals = mCalendar->journals(); 3259 QPtrList<Journal> journals = mCalendar->journals();
3257 for(uint i=0; i<journals.count(); ++i) { 3260 for(uint i=0; i<journals.count(); ++i) {
3258 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3261 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3259 journals.at(i)->recreate(); 3262 journals.at(i)->recreate();
3260 journals.at(i)->setReadOnly(false); 3263 journals.at(i)->setReadOnly(false);
3261 } 3264 }
3262 3265
3263 updateView(); 3266 updateView();
3264} 3267}
3265 3268
3266void CalendarView::showIntro() 3269void CalendarView::showIntro()
3267{ 3270{
3268 kdDebug() << "To be implemented." << endl; 3271 kdDebug() << "To be implemented." << endl;
3269} 3272}
3270 3273
3271QWidgetStack *CalendarView::viewStack() 3274QWidgetStack *CalendarView::viewStack()
3272{ 3275{
3273 return mRightFrame; 3276 return mRightFrame;
3274} 3277}
3275 3278
3276QWidget *CalendarView::leftFrame() 3279QWidget *CalendarView::leftFrame()
3277{ 3280{
3278 return mLeftFrame; 3281 return mLeftFrame;
3279} 3282}
3280 3283
3281DateNavigator *CalendarView::dateNavigator() 3284DateNavigator *CalendarView::dateNavigator()
3282{ 3285{
3283 return mNavigator; 3286 return mNavigator;
3284} 3287}
3285 3288
3286KDateNavigator* CalendarView::dateNavigatorWidget() 3289KDateNavigator* CalendarView::dateNavigatorWidget()
3287{ 3290{
3288 return mDateNavigator; 3291 return mDateNavigator;
3289} 3292}
3290void CalendarView::toggleDateNavigatorWidget() 3293void CalendarView::toggleDateNavigatorWidget()
3291{ 3294{
3292 if (mDateNavigator->isVisible()) 3295 if (mDateNavigator->isVisible())
3293 mDateNavigator->hide(); 3296 mDateNavigator->hide();
3294 else 3297 else
3295 mDateNavigator->show(); 3298 mDateNavigator->show();
3296} 3299}
3297void CalendarView::addView(KOrg::BaseView *view) 3300void CalendarView::addView(KOrg::BaseView *view)
3298{ 3301{
3299 mViewManager->addView(view); 3302 mViewManager->addView(view);
3300} 3303}
3301 3304
3302void CalendarView::showView(KOrg::BaseView *view) 3305void CalendarView::showView(KOrg::BaseView *view)
3303{ 3306{
3304 mViewManager->showView(view, mLeftFrame->isVisible()); 3307 mViewManager->showView(view, mLeftFrame->isVisible());
3305} 3308}
3306 3309
3307Incidence *CalendarView::currentSelection() 3310Incidence *CalendarView::currentSelection()
3308{ 3311{
3309 return mViewManager->currentSelection(); 3312 return mViewManager->currentSelection();
3310} 3313}
3311void CalendarView::toggleAllDaySize() 3314void CalendarView::toggleAllDaySize()
3312{ 3315{
3313 /* 3316 /*
3314 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3317 if ( KOPrefs::instance()->mAllDaySize > 47 )
3315 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3318 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3316 else 3319 else
3317 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3320 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3318 */ 3321 */
3319 viewManager()->agendaView()->toggleAllDay(); 3322 viewManager()->agendaView()->toggleAllDay();
3320} 3323}
3321void CalendarView::toggleExpand() 3324void CalendarView::toggleExpand()
3322{ 3325{
3323 // if ( mLeftFrame->isHidden() ) { 3326 // if ( mLeftFrame->isHidden() ) {
3324 // mLeftFrame->show(); 3327 // mLeftFrame->show();
3325 // emit calendarViewExpanded( false ); 3328 // emit calendarViewExpanded( false );
3326 // } else { 3329 // } else {
3327 // mLeftFrame->hide(); 3330 // mLeftFrame->hide();
3328 // emit calendarViewExpanded( true ); 3331 // emit calendarViewExpanded( true );
3329 // } 3332 // }
3330 3333
3331 globalFlagBlockAgenda = 1; 3334 globalFlagBlockAgenda = 1;
3332 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3335 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3333 globalFlagBlockAgenda = 5; 3336 globalFlagBlockAgenda = 5;
3334 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3337 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3335 //mViewManager->showView( 0, true ); 3338 //mViewManager->showView( 0, true );
3336} 3339}
3337 3340
3338void CalendarView::calendarModified( bool modified, Calendar * ) 3341void CalendarView::calendarModified( bool modified, Calendar * )
3339{ 3342{
3340 setModified( modified ); 3343 setModified( modified );
3341} 3344}
3342 3345
3343Todo *CalendarView::selectedTodo() 3346Todo *CalendarView::selectedTodo()
3344{ 3347{
3345 Incidence *incidence = currentSelection(); 3348 Incidence *incidence = currentSelection();
3346 if ( incidence && incidence->type() == "Todo" ) { 3349 if ( incidence && incidence->type() == "Todo" ) {
3347 return static_cast<Todo *>( incidence ); 3350 return static_cast<Todo *>( incidence );
3348 } 3351 }
3349 3352
3350 incidence = mTodoList->selectedIncidences().first(); 3353 incidence = mTodoList->selectedIncidences().first();
3351 if ( incidence && incidence->type() == "Todo" ) { 3354 if ( incidence && incidence->type() == "Todo" ) {
3352 return static_cast<Todo *>( incidence ); 3355 return static_cast<Todo *>( incidence );
3353 } 3356 }
3354 3357
3355 return 0; 3358 return 0;
3356} 3359}
3357 3360
3358void CalendarView::dialogClosing(Incidence *in) 3361void CalendarView::dialogClosing(Incidence *in)
3359{ 3362{
3360 // mDialogList.remove(in); 3363 // mDialogList.remove(in);
3361} 3364}
3362 3365
3363void CalendarView::showIncidence() 3366void CalendarView::showIncidence()
3364{ 3367{
3365 Incidence *incidence = currentSelection(); 3368 Incidence *incidence = currentSelection();
3366 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3369 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3367 if ( incidence ) { 3370 if ( incidence ) {
3368 ShowIncidenceVisitor v; 3371 ShowIncidenceVisitor v;
3369 v.act( incidence, this ); 3372 v.act( incidence, this );
3370 } 3373 }
3371} 3374}
3372void CalendarView::editIncidenceDescription() 3375void CalendarView::editIncidenceDescription()
3373{ 3376{
3374 mFlagEditDescription = true; 3377 mFlagEditDescription = true;
3375 editIncidence(); 3378 editIncidence();
3376 mFlagEditDescription = false; 3379 mFlagEditDescription = false;
3377} 3380}
3378void CalendarView::editIncidence() 3381void CalendarView::editIncidence()
3379{ 3382{
3380 // qDebug("editIncidence() "); 3383 // qDebug("editIncidence() ");
3381 Incidence *incidence = currentSelection(); 3384 Incidence *incidence = currentSelection();
3382 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3385 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3383 if ( incidence ) { 3386 if ( incidence ) {
3384 EditIncidenceVisitor v; 3387 EditIncidenceVisitor v;
3385 v.act( incidence, this ); 3388 v.act( incidence, this );
3386 } 3389 }
3387} 3390}
3388 3391
3389void CalendarView::deleteIncidence() 3392void CalendarView::deleteIncidence()
3390{ 3393{
3391 Incidence *incidence = currentSelection(); 3394 Incidence *incidence = currentSelection();
3392 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3395 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3393 if ( incidence ) { 3396 if ( incidence ) {
3394 deleteIncidence(incidence); 3397 deleteIncidence(incidence);
3395 } 3398 }
3396} 3399}
3397 3400
3398void CalendarView::showIncidence(Incidence *incidence) 3401void CalendarView::showIncidence(Incidence *incidence)
3399{ 3402{
3400 if ( incidence ) { 3403 if ( incidence ) {
3401 ShowIncidenceVisitor v; 3404 ShowIncidenceVisitor v;
3402 v.act( incidence, this ); 3405 v.act( incidence, this );
3403 } 3406 }
3404} 3407}
3405 3408
3406void CalendarView::editIncidence(Incidence *incidence) 3409void CalendarView::editIncidence(Incidence *incidence)
3407{ 3410{
3408 if ( incidence ) { 3411 if ( incidence ) {
3409 3412
3410 EditIncidenceVisitor v; 3413 EditIncidenceVisitor v;
3411 v.act( incidence, this ); 3414 v.act( incidence, this );
3412 3415
3413 } 3416 }
3414} 3417}
3415 3418
3416void CalendarView::deleteIncidence(Incidence *incidence) 3419void CalendarView::deleteIncidence(Incidence *incidence)
3417{ 3420{
3418 //qDebug(" CalendarView::deleteIncidence "); 3421 //qDebug(" CalendarView::deleteIncidence ");
3419 if ( incidence ) { 3422 if ( incidence ) {
3420 DeleteIncidenceVisitor v; 3423 DeleteIncidenceVisitor v;
3421 v.act( incidence, this ); 3424 v.act( incidence, this );
3422 } 3425 }
3423} 3426}
3424 3427
3425 3428
3426void CalendarView::lookForOutgoingMessages() 3429void CalendarView::lookForOutgoingMessages()
3427{ 3430{
3428 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3431 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3429 ogd->loadMessages(); 3432 ogd->loadMessages();
3430} 3433}
3431 3434
3432void CalendarView::lookForIncomingMessages() 3435void CalendarView::lookForIncomingMessages()
3433{ 3436{
3434 IncomingDialog *icd = mDialogManager->incomingDialog(); 3437 IncomingDialog *icd = mDialogManager->incomingDialog();
3435 icd->retrieve(); 3438 icd->retrieve();
3436} 3439}
3437 3440
3438bool CalendarView::removeCompletedSubTodos( Todo* t ) 3441bool CalendarView::removeCompletedSubTodos( Todo* t )
3439{ 3442{
3440 bool deleteTodo = true; 3443 bool deleteTodo = true;
3441 QPtrList<Incidence> subTodos; 3444 QPtrList<Incidence> subTodos;
3442 Incidence *aTodo; 3445 Incidence *aTodo;
3443 subTodos = t->relations(); 3446 subTodos = t->relations();
3444 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3447 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3445 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3448 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3446 deleteTodo = false; 3449 deleteTodo = false;
3447 } 3450 }
3448 if ( deleteTodo ) { 3451 if ( deleteTodo ) {
3449 if ( t->isCompleted() ) { 3452 if ( t->isCompleted() ) {
3450 checkExternalId( t ); 3453 checkExternalId( t );
3451 mCalendar->deleteTodo( t ); 3454 mCalendar->deleteTodo( t );
3452 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3455 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3453 } 3456 }
3454 else 3457 else
3455 deleteTodo = false; 3458 deleteTodo = false;
3456 } 3459 }
3457 return deleteTodo; 3460 return deleteTodo;
3458 3461
3459} 3462}
3460void CalendarView::purgeCompleted() 3463void CalendarView::purgeCompleted()
3461{ 3464{
3462 int result = KMessageBox::warningContinueCancel(this, 3465 int result = KMessageBox::warningContinueCancel(this,
3463 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3466 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3464 3467
3465 if (result == KMessageBox::Continue) { 3468 if (result == KMessageBox::Continue) {
3466 3469
3467 QPtrList<Todo> todoCal; 3470 QPtrList<Todo> todoCal;
3468 QPtrList<Todo> rootTodos; 3471 QPtrList<Todo> rootTodos;
3469 //QPtrList<Incidence> rel; 3472 //QPtrList<Incidence> rel;
3470 Todo *aTodo;//, *rTodo; 3473 Todo *aTodo;//, *rTodo;
3471 Incidence *rIncidence; 3474 Incidence *rIncidence;
3472 bool childDelete = false; 3475 bool childDelete = false;
3473 bool deletedOne = true; 3476 bool deletedOne = true;
3474 todoCal = calendar()->todos(); 3477 todoCal = calendar()->todos();
3475 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3478 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3476 if ( !aTodo->relatedTo() ) 3479 if ( !aTodo->relatedTo() )
3477 rootTodos.append( aTodo ); 3480 rootTodos.append( aTodo );
3478 } 3481 }
3479 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3482 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3480 removeCompletedSubTodos( aTodo ); 3483 removeCompletedSubTodos( aTodo );
3481 } 3484 }
3482 3485
3483 updateView(); 3486 updateView();
3484 } 3487 }
3485} 3488}
3486 3489
3487void CalendarView::slotCalendarChanged() 3490void CalendarView::slotCalendarChanged()
3488{ 3491{
3489 ; 3492 ;
3490} 3493}
3491 3494
3492NavigatorBar *CalendarView::navigatorBar() 3495NavigatorBar *CalendarView::navigatorBar()
3493{ 3496{
3494 return mNavigatorBar; 3497 return mNavigatorBar;
3495} 3498}
3496 3499
3497 3500
3498 3501
3499void CalendarView::keyPressEvent ( QKeyEvent *e) 3502void CalendarView::keyPressEvent ( QKeyEvent *e)
3500{ 3503{
3501 //qDebug(" alendarView::keyPressEvent "); 3504 //qDebug(" alendarView::keyPressEvent ");
3502 e->ignore(); 3505 e->ignore();
3503} 3506}
3504 3507
3505//#include "calendarview.moc" 3508//#include "calendarview.moc"
3506 3509
3507//#include "calendarviewbase.moc" 3510//#include "calendarviewbase.moc"
diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp
index ebfe164..4e54fdf 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( "Sharp_DTM",attList[0] ); 88 event = existingCalendar->event( "Sharp_DTM",attList[0] );
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->setID("Sharp_DTM", attList[0] ); 93 event->setID("Sharp_DTM", attList[0] );
94 event->setCsum( "Sharp_DTM", QString::number( cSum )); 94 event->setCsum( "Sharp_DTM", QString::number( 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]+"T000000", false ).date(),QTime(0,0,0 ) )); 101 event->setDtStart( QDateTime(fromString( attList[17]+"T000000", false ).date(),QTime(0,0,0 ) ));
102 event->setDtEnd( QDateTime(fromString( attList[18]+"T000000", false ).date(),QTime(0,0,0 ))); 102 event->setDtEnd( QDateTime(fromString( attList[18]+"T000000", 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( "Sharp_DTM", attList[0] ); 192 todo = existingCalendar->todo( "Sharp_DTM", attList[0] );
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->setID( "Sharp_DTM", attList[0]); 204 todo->setID( "Sharp_DTM", attList[0]);
205 todo->setCsum( "Sharp_DTM", QString::number( cSum )); 205 todo->setCsum( "Sharp_DTM", QString::number( 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 true 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->setID( "Sharp_DTM",templist[0] ); 469 inc->setID( "Sharp_DTM",templist[0] );
470 inc->setCsum( "Sharp_DTM", QString::number( getCsum( templist ) )); 470 inc->setCsum( "Sharp_DTM", QString::number( 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->getID("Sharp_DTM").isEmpty() ) { // add new 523 else if ( ev->getID("Sharp_DTM").isEmpty() ) { // 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->getID("Sharp_DTM").isEmpty() ) { // add new 609 else if ( to->getID("Sharp_DTM").isEmpty() ) { // 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( event->getID("Sharp_DTM") ); 699 list.append( 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( todo->getID("Sharp_DTM") ); 863 list.append( 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}