summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 7fae4a9..bc8625d 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3616 +1,3616 @@
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#include <libkcal/phoneformat.h> 86#include <libkcal/phoneformat.h>
87#ifndef KORG_NOMAIL 87#ifndef KORG_NOMAIL
88#include "komailclient.h" 88#include "komailclient.h"
89#endif 89#endif
90#ifndef KORG_NOPRINTER 90#ifndef KORG_NOPRINTER
91#include "calprinter.h" 91#include "calprinter.h"
92#endif 92#endif
93#ifndef KORG_NOPLUGINS 93#ifndef KORG_NOPLUGINS
94#include "kocore.h" 94#include "kocore.h"
95#endif 95#endif
96#include "koeventeditor.h" 96#include "koeventeditor.h"
97#include "kotodoeditor.h" 97#include "kotodoeditor.h"
98#include "koprefs.h" 98#include "koprefs.h"
99#include "koeventviewerdialog.h" 99#include "koeventviewerdialog.h"
100#include "publishdialog.h" 100#include "publishdialog.h"
101#include "kofilterview.h" 101#include "kofilterview.h"
102#include "koglobals.h" 102#include "koglobals.h"
103#include "koviewmanager.h" 103#include "koviewmanager.h"
104#include "koagendaview.h" 104#include "koagendaview.h"
105#include "kodialogmanager.h" 105#include "kodialogmanager.h"
106#include "outgoingdialog.h" 106#include "outgoingdialog.h"
107#include "incomingdialog.h" 107#include "incomingdialog.h"
108#include "statusdialog.h" 108#include "statusdialog.h"
109#include "kdatenavigator.h" 109#include "kdatenavigator.h"
110#include "kotodoview.h" 110#include "kotodoview.h"
111#include "datenavigator.h" 111#include "datenavigator.h"
112#include "resourceview.h" 112#include "resourceview.h"
113#include "navigatorbar.h" 113#include "navigatorbar.h"
114#include "searchdialog.h" 114#include "searchdialog.h"
115#include "mainwindow.h" 115#include "mainwindow.h"
116 116
117#include "calendarview.h" 117#include "calendarview.h"
118#ifndef DESKTOP_VERSION 118#ifndef DESKTOP_VERSION
119#include <qtopia/alarmserver.h> 119#include <qtopia/alarmserver.h>
120#endif 120#endif
121#ifndef _WIN32_ 121#ifndef _WIN32_
122#include <stdlib.h> 122#include <stdlib.h>
123#include <stdio.h> 123#include <stdio.h>
124#include <unistd.h> 124#include <unistd.h>
125#else 125#else
126#include <qprocess.h> 126#include <qprocess.h>
127#endif 127#endif
128using namespace KOrg; 128using namespace KOrg;
129using namespace KCal; 129using namespace KCal;
130extern int globalFlagBlockAgenda; 130extern int globalFlagBlockAgenda;
131extern int globalFlagBlockStartup; 131extern int globalFlagBlockStartup;
132 132
133 133
134 134
135class KOBeamPrefs : public QDialog 135class KOBeamPrefs : public QDialog
136{ 136{
137 public: 137 public:
138 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 138 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
139 QDialog( parent, name, true ) 139 QDialog( parent, name, true )
140 { 140 {
141 setCaption( i18n("Beam Options") ); 141 setCaption( i18n("Beam Options") );
142 QVBoxLayout* lay = new QVBoxLayout( this ); 142 QVBoxLayout* lay = new QVBoxLayout( this );
143 lay->setSpacing( 3 ); 143 lay->setSpacing( 3 );
144 lay->setMargin( 3 ); 144 lay->setMargin( 3 );
145 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 145 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
146 lay->addWidget( format ); 146 lay->addWidget( format );
147 format->setExclusive ( true ) ; 147 format->setExclusive ( true ) ;
148 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 148 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
149 lay->addWidget( time ); time->setExclusive ( true ) ; 149 lay->addWidget( time ); time->setExclusive ( true ) ;
150 vcal = new QRadioButton(" vCalendar ", format ); 150 vcal = new QRadioButton(" vCalendar ", format );
151 ical = new QRadioButton(" iCalendar ", format ); 151 ical = new QRadioButton(" iCalendar ", format );
152 vcal->setChecked( true ); 152 vcal->setChecked( true );
153 tz = new QRadioButton(i18n(" With timezone "), time ); 153 tz = new QRadioButton(i18n(" With timezone "), time );
154 local = new QRadioButton(i18n(" Local time "), time ); 154 local = new QRadioButton(i18n(" Local time "), time );
155 tz->setChecked( true ); 155 tz->setChecked( true );
156 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 156 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
157 lay->addWidget( ok ); 157 lay->addWidget( ok );
158 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 158 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
159 lay->addWidget( cancel ); 159 lay->addWidget( cancel );
160 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 160 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
161 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 161 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
162 resize( 200, 200 ); 162 resize( 200, 200 );
163 } 163 }
164 164
165 bool beamVcal() { return vcal->isChecked(); } 165 bool beamVcal() { return vcal->isChecked(); }
166 bool beamLocal() { return local->isChecked(); } 166 bool beamLocal() { return local->isChecked(); }
167private: 167private:
168 QRadioButton* vcal, *ical, *local, *tz; 168 QRadioButton* vcal, *ical, *local, *tz;
169}; 169};
170class KOCatPrefs : public QDialog 170class KOCatPrefs : public QDialog
171{ 171{
172 public: 172 public:
173 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 173 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
174 QDialog( parent, name, true ) 174 QDialog( parent, name, true )
175 { 175 {
176 setCaption( i18n("Manage new Categories") ); 176 setCaption( i18n("Manage new Categories") );
177 QVBoxLayout* lay = new QVBoxLayout( this ); 177 QVBoxLayout* lay = new QVBoxLayout( this );
178 lay->setSpacing( 3 ); 178 lay->setSpacing( 3 );
179 lay->setMargin( 3 ); 179 lay->setMargin( 3 );
180 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 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 );
181 lay->addWidget( lab ); 181 lay->addWidget( lab );
182 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 182 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
183 lay->addWidget( format ); 183 lay->addWidget( format );
184 format->setExclusive ( true ) ; 184 format->setExclusive ( true ) ;
185 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 185 addCatBut = new QRadioButton(i18n("Add to category list"), format );
186 new QRadioButton(i18n("Remove from Events/Todos"), format ); 186 new QRadioButton(i18n("Remove from Events/Todos"), format );
187 addCatBut->setChecked( true ); 187 addCatBut->setChecked( true );
188 QPushButton * ok = new QPushButton( i18n("OK"), this ); 188 QPushButton * ok = new QPushButton( i18n("OK"), this );
189 lay->addWidget( ok ); 189 lay->addWidget( ok );
190 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 190 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
191 lay->addWidget( cancel ); 191 lay->addWidget( cancel );
192 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 192 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
193 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 193 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
194 resize( 200, 200 ); 194 resize( 200, 200 );
195 } 195 }
196 196
197 bool addCat() { return addCatBut->isChecked(); } 197 bool addCat() { return addCatBut->isChecked(); }
198private: 198private:
199 QRadioButton* addCatBut; 199 QRadioButton* addCatBut;
200}; 200};
201 201
202 202
203 203
204CalendarView::CalendarView( CalendarResources *calendar, 204CalendarView::CalendarView( CalendarResources *calendar,
205 QWidget *parent, const char *name ) 205 QWidget *parent, const char *name )
206 : CalendarViewBase( parent, name ), 206 : CalendarViewBase( parent, name ),
207 mCalendar( calendar ), 207 mCalendar( calendar ),
208 mResourceManager( calendar->resourceManager() ) 208 mResourceManager( calendar->resourceManager() )
209{ 209{
210 210
211 mEventEditor = 0; 211 mEventEditor = 0;
212 mTodoEditor = 0; 212 mTodoEditor = 0;
213 213
214 init(); 214 init();
215} 215}
216 216
217CalendarView::CalendarView( Calendar *calendar, 217CalendarView::CalendarView( Calendar *calendar,
218 QWidget *parent, const char *name ) 218 QWidget *parent, const char *name )
219 : CalendarViewBase( parent, name ), 219 : CalendarViewBase( parent, name ),
220 mCalendar( calendar ), 220 mCalendar( calendar ),
221 mResourceManager( 0 ) 221 mResourceManager( 0 )
222{ 222{
223 223
224 mEventEditor = 0; 224 mEventEditor = 0;
225 mTodoEditor = 0; 225 mTodoEditor = 0;
226 init();} 226 init();}
227 227
228void CalendarView::init() 228void CalendarView::init()
229{ 229{
230 beamDialog = new KOBeamPrefs(); 230 beamDialog = new KOBeamPrefs();
231 mDatePickerMode = 0; 231 mDatePickerMode = 0;
232 mCurrentSyncDevice = ""; 232 mCurrentSyncDevice = "";
233 writeLocale(); 233 writeLocale();
234 mViewManager = new KOViewManager( this ); 234 mViewManager = new KOViewManager( this );
235 mDialogManager = new KODialogManager( this ); 235 mDialogManager = new KODialogManager( this );
236 mEventViewerDialog = 0; 236 mEventViewerDialog = 0;
237 mModified = false; 237 mModified = false;
238 mReadOnly = false; 238 mReadOnly = false;
239 mSelectedIncidence = 0; 239 mSelectedIncidence = 0;
240 mCalPrinter = 0; 240 mCalPrinter = 0;
241 mFilters.setAutoDelete(true); 241 mFilters.setAutoDelete(true);
242 242
243 mCalendar->registerObserver( this ); 243 mCalendar->registerObserver( this );
244 // TODO: Make sure that view is updated, when calendar is changed. 244 // TODO: Make sure that view is updated, when calendar is changed.
245 245
246 mStorage = new FileStorage( mCalendar ); 246 mStorage = new FileStorage( mCalendar );
247 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 247 mNavigator = new DateNavigator( this, "datevav", mViewManager );
248 248
249 QBoxLayout *topLayout = (QBoxLayout*)layout(); 249 QBoxLayout *topLayout = (QBoxLayout*)layout();
250#ifndef KORG_NOSPLITTER 250#ifndef KORG_NOSPLITTER
251 // create the main layout frames. 251 // create the main layout frames.
252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
253 topLayout->addWidget(mPanner); 253 topLayout->addWidget(mPanner);
254 254
255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
256 "CalendarView::LeftFrame"); 256 "CalendarView::LeftFrame");
257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
258 258
259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
260 "CalendarView::DateNavigator", QDate::currentDate() ); 260 "CalendarView::DateNavigator", QDate::currentDate() );
261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
264 264
265#ifdef KORG_NORESOURCEVIEW 265#ifdef KORG_NORESOURCEVIEW
266 mResourceView = 0; 266 mResourceView = 0;
267#else 267#else
268 if ( mResourceManager ) { 268 if ( mResourceManager ) {
269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
270 mResourceView->updateView(); 270 mResourceView->updateView();
271 connect( mResourceView, SIGNAL( resourcesChanged() ), 271 connect( mResourceView, SIGNAL( resourcesChanged() ),
272 SLOT( updateView() ) ); 272 SLOT( updateView() ) );
273 } else { 273 } else {
274 mResourceView = 0; 274 mResourceView = 0;
275 } 275 }
276#endif 276#endif
277 QWidget *rightBox = new QWidget( mPanner ); 277 QWidget *rightBox = new QWidget( mPanner );
278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
279 279
280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
281 rightLayout->addWidget( mNavigatorBar ); 281 rightLayout->addWidget( mNavigatorBar );
282 282
283 mRightFrame = new QWidgetStack( rightBox ); 283 mRightFrame = new QWidgetStack( rightBox );
284 rightLayout->addWidget( mRightFrame, 1 ); 284 rightLayout->addWidget( mRightFrame, 1 );
285 285
286 mLeftFrame = mLeftSplitter; 286 mLeftFrame = mLeftSplitter;
287#else 287#else
288 QWidget *mainBox = new QWidget( this ); 288 QWidget *mainBox = new QWidget( this );
289 QWidget *leftFrame = new QWidget( mainBox ); 289 QWidget *leftFrame = new QWidget( mainBox );
290 290
291 QBoxLayout * mainBoxLayout; 291 QBoxLayout * mainBoxLayout;
292 QBoxLayout * leftFrameLayout; 292 QBoxLayout * leftFrameLayout;
293 if ( KOPrefs::instance()->mVerticalScreen ) { 293 if ( KOPrefs::instance()->mVerticalScreen ) {
294 mainBoxLayout = new QVBoxLayout(mainBox); 294 mainBoxLayout = new QVBoxLayout(mainBox);
295 leftFrameLayout = new QHBoxLayout(leftFrame ); 295 leftFrameLayout = new QHBoxLayout(leftFrame );
296 } else { 296 } else {
297 mainBoxLayout = new QHBoxLayout(mainBox); 297 mainBoxLayout = new QHBoxLayout(mainBox);
298 leftFrameLayout = new QVBoxLayout(leftFrame ); 298 leftFrameLayout = new QVBoxLayout(leftFrame );
299 } 299 }
300 topLayout->addWidget( mainBox ); 300 topLayout->addWidget( mainBox );
301 mainBoxLayout->addWidget (leftFrame); 301 mainBoxLayout->addWidget (leftFrame);
302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
303 "CalendarView::DateNavigator", QDate::currentDate()); 303 "CalendarView::DateNavigator", QDate::currentDate());
304 // mDateNavigator->blockSignals( true ); 304 // mDateNavigator->blockSignals( true );
305 leftFrameLayout->addWidget( mDateNavigator ); 305 leftFrameLayout->addWidget( mDateNavigator );
306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); 307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist");
308 308
309 if ( QApplication::desktop()->width() < 480 ) { 309 if ( QApplication::desktop()->width() < 480 ) {
310 leftFrameLayout->addWidget(mFilterView); 310 leftFrameLayout->addWidget(mFilterView);
311 leftFrameLayout->addWidget(mTodoList, 2 ); 311 leftFrameLayout->addWidget(mTodoList, 2 );
312 312
313 } else { 313 } else {
314 leftFrameLayout->addWidget(mTodoList,2 ); 314 leftFrameLayout->addWidget(mTodoList,2 );
315 leftFrameLayout->addWidget(mFilterView ); 315 leftFrameLayout->addWidget(mFilterView );
316 } 316 }
317 mFilterView->hide(); 317 mFilterView->hide();
318 QWidget *rightBox = new QWidget( mainBox ); 318 QWidget *rightBox = new QWidget( mainBox );
319 mainBoxLayout->addWidget ( rightBox, 10 ); 319 mainBoxLayout->addWidget ( rightBox, 10 );
320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
322 mRightFrame = new QWidgetStack( rightBox ); 322 mRightFrame = new QWidgetStack( rightBox );
323 rightLayout->addWidget( mNavigatorBar ); 323 rightLayout->addWidget( mNavigatorBar );
324 rightLayout->addWidget( mRightFrame, 10 ); 324 rightLayout->addWidget( mRightFrame, 10 );
325 325
326 mLeftFrame = leftFrame; 326 mLeftFrame = leftFrame;
327 if ( KOPrefs::instance()->mVerticalScreen ) { 327 if ( KOPrefs::instance()->mVerticalScreen ) {
328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
330 } else { 330 } else {
331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
333 } 333 }
334 334
335 //qDebug("Calendarview Size %d %d ", width(), height()); 335 //qDebug("Calendarview Size %d %d ", width(), height());
336#endif 336#endif
337 337
338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
339 SLOT( showDates( const KCal::DateList & ) ) ); 339 SLOT( showDates( const KCal::DateList & ) ) );
340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
342 342
343 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 343 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
344 mNavigator, SLOT( selectPreviousYear() ) ); 344 mNavigator, SLOT( selectPreviousYear() ) );
345 connect( mNavigatorBar, SIGNAL( goNextYear() ), 345 connect( mNavigatorBar, SIGNAL( goNextYear() ),
346 mNavigator, SLOT( selectNextYear() ) ); 346 mNavigator, SLOT( selectNextYear() ) );
347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
348 mNavigator, SLOT( selectPreviousMonth() ) ); 348 mNavigator, SLOT( selectPreviousMonth() ) );
349 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 349 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
350 mNavigator, SLOT( selectNextMonth() ) ); 350 mNavigator, SLOT( selectNextMonth() ) );
351 351
352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
354 354
355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
356 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 356 mNavigator, SLOT( selectWeek( const QDate & ) ) );
357 357
358 connect( mDateNavigator, SIGNAL( goPrevYear() ), 358 connect( mDateNavigator, SIGNAL( goPrevYear() ),
359 mNavigator, SLOT( selectPreviousYear() ) ); 359 mNavigator, SLOT( selectPreviousYear() ) );
360 connect( mDateNavigator, SIGNAL( goNextYear() ), 360 connect( mDateNavigator, SIGNAL( goNextYear() ),
361 mNavigator, SLOT( selectNextYear() ) ); 361 mNavigator, SLOT( selectNextYear() ) );
362 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 362 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
363 mNavigator, SLOT( selectPreviousMonth() ) ); 363 mNavigator, SLOT( selectPreviousMonth() ) );
364 connect( mDateNavigator, SIGNAL( goNextMonth() ), 364 connect( mDateNavigator, SIGNAL( goNextMonth() ),
365 mNavigator, SLOT( selectNextMonth() ) ); 365 mNavigator, SLOT( selectNextMonth() ) );
366 366
367 connect( mDateNavigator, SIGNAL( goPrevious() ), 367 connect( mDateNavigator, SIGNAL( goPrevious() ),
368 mNavigator, SLOT( selectPrevious() ) ); 368 mNavigator, SLOT( selectPrevious() ) );
369 connect( mDateNavigator, SIGNAL( goNext() ), 369 connect( mDateNavigator, SIGNAL( goNext() ),
370 mNavigator, SLOT( selectNext() ) ); 370 mNavigator, SLOT( selectNext() ) );
371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
372 mNavigator, SLOT( slotMonthSelect( int ) ) ); 372 mNavigator, SLOT( slotMonthSelect( int ) ) );
373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
374 mNavigator, SLOT( slotMonthSelect( int ) ) ); 374 mNavigator, SLOT( slotMonthSelect( int ) ) );
375 375
376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
378 378
379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
380 SLOT( eventAdded( Event *) ) ); 380 SLOT( eventAdded( Event *) ) );
381 381
382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
383 383
384 connect( this, SIGNAL( configChanged() ), 384 connect( this, SIGNAL( configChanged() ),
385 mDateNavigator, SLOT( updateConfig() ) ); 385 mDateNavigator, SLOT( updateConfig() ) );
386 386
387 connect( mTodoList, SIGNAL( newTodoSignal() ), 387 connect( mTodoList, SIGNAL( newTodoSignal() ),
388 SLOT( newTodo() ) ); 388 SLOT( newTodo() ) );
389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
390 SLOT( newSubTodo( Todo * ) ) ); 390 SLOT( newSubTodo( Todo * ) ) );
391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
392 SLOT( editTodo( Todo * ) ) ); 392 SLOT( editTodo( Todo * ) ) );
393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
394 SLOT( showTodo( Todo *) ) ); 394 SLOT( showTodo( Todo *) ) );
395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
396 SLOT( deleteTodo( Todo *) ) ); 396 SLOT( deleteTodo( Todo *) ) );
397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
399 SLOT( purgeCompleted() ) ); 399 SLOT( purgeCompleted() ) );
400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
401 SIGNAL( todoModified( Todo *, int ) ) ); 401 SIGNAL( todoModified( Todo *, int ) ) );
402 402
403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
404 this, SLOT ( cloneIncidence( Incidence * ) ) ); 404 this, SLOT ( cloneIncidence( Incidence * ) ) );
405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
406 this, SLOT (cancelIncidence( Incidence * ) ) ); 406 this, SLOT (cancelIncidence( Incidence * ) ) );
407 407
408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
409 this, SLOT ( moveIncidence( Incidence * ) ) ); 409 this, SLOT ( moveIncidence( Incidence * ) ) );
410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
411 this, SLOT ( beamIncidence( Incidence * ) ) ); 411 this, SLOT ( beamIncidence( Incidence * ) ) );
412 412
413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
414 this, SLOT ( todo_unsub( Todo * ) ) ); 414 this, SLOT ( todo_unsub( Todo * ) ) );
415 415
416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
417 SLOT( updateTodo( Todo *, int ) ) ); 417 SLOT( updateTodo( Todo *, int ) ) );
418 connect( this, SIGNAL( todoModified( Todo *, int )), this, 418 connect( this, SIGNAL( todoModified( Todo *, int )), this,
419 SLOT( changeTodoDisplay( Todo *, int ) ) ); 419 SLOT( changeTodoDisplay( Todo *, int ) ) );
420 420
421 421
422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
426 426
427 427
428 428
429 429
430 430
431 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 431 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
432 SLOT(checkClipboard())); 432 SLOT(checkClipboard()));
433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
434 SLOT( processTodoListSelection( Incidence * ) ) ); 434 SLOT( processTodoListSelection( Incidence * ) ) );
435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
436 436
437 // kdDebug() << "CalendarView::CalendarView() done" << endl; 437 // kdDebug() << "CalendarView::CalendarView() done" << endl;
438 438
439 mDateFrame = new QVBox(0,0,WType_Popup); 439 mDateFrame = new QVBox(0,0,WType_Popup);
440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
442 mDateFrame->setLineWidth(3); 442 mDateFrame->setLineWidth(3);
443 mDateFrame->hide(); 443 mDateFrame->hide();
444 mDateFrame->setCaption( i18n( "Pick a date to display")); 444 mDateFrame->setCaption( i18n( "Pick a date to display"));
445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
446 446
447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
448 448
449 mEventEditor = mDialogManager->getEventEditor(); 449 mEventEditor = mDialogManager->getEventEditor();
450 mTodoEditor = mDialogManager->getTodoEditor(); 450 mTodoEditor = mDialogManager->getTodoEditor();
451 451
452 mFlagEditDescription = false; 452 mFlagEditDescription = false;
453 453
454 mSuspendTimer = new QTimer( this ); 454 mSuspendTimer = new QTimer( this );
455 mAlarmTimer = new QTimer( this ); 455 mAlarmTimer = new QTimer( this );
456 mRecheckAlarmTimer = new QTimer( this ); 456 mRecheckAlarmTimer = new QTimer( this );
457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
460 mAlarmDialog = new AlarmDialog( this ); 460 mAlarmDialog = new AlarmDialog( this );
461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
462 mAlarmDialog->setServerNotification( false ); 462 mAlarmDialog->setServerNotification( false );
463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
464} 464}
465 465
466 466
467CalendarView::~CalendarView() 467CalendarView::~CalendarView()
468{ 468{
469 // kdDebug() << "~CalendarView()" << endl; 469 // kdDebug() << "~CalendarView()" << endl;
470 //qDebug("CalendarView::~CalendarView() "); 470 //qDebug("CalendarView::~CalendarView() ");
471 delete mDialogManager; 471 delete mDialogManager;
472 delete mViewManager; 472 delete mViewManager;
473 delete mStorage; 473 delete mStorage;
474 delete mDateFrame ; 474 delete mDateFrame ;
475 delete beamDialog; 475 delete beamDialog;
476 //kdDebug() << "~CalendarView() done" << endl; 476 //kdDebug() << "~CalendarView() done" << endl;
477} 477}
478void CalendarView::timerAlarm() 478void CalendarView::timerAlarm()
479{ 479{
480 //qDebug("CalendarView::timerAlarm() "); 480 //qDebug("CalendarView::timerAlarm() ");
481 computeAlarm(mAlarmNotification ); 481 computeAlarm(mAlarmNotification );
482} 482}
483 483
484void CalendarView::suspendAlarm() 484void CalendarView::suspendAlarm()
485{ 485{
486 //qDebug(" CalendarView::suspendAlarm() "); 486 //qDebug(" CalendarView::suspendAlarm() ");
487 computeAlarm(mSuspendAlarmNotification ); 487 computeAlarm(mSuspendAlarmNotification );
488 488
489} 489}
490 490
491void CalendarView::startAlarm( QString mess , QString filename) 491void CalendarView::startAlarm( QString mess , QString filename)
492{ 492{
493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
495 495
496} 496}
497 497
498void CalendarView::checkNextTimerAlarm() 498void CalendarView::checkNextTimerAlarm()
499{ 499{
500 mCalendar->checkAlarmForIncidence( 0, true ); 500 mCalendar->checkAlarmForIncidence( 0, true );
501} 501}
502 502
503void CalendarView::computeAlarm( QString msg ) 503void CalendarView::computeAlarm( QString msg )
504{ 504{
505 505
506 QString mess = msg; 506 QString mess = msg;
507 QString mAlarmMessage = mess.mid( 9 ); 507 QString mAlarmMessage = mess.mid( 9 );
508 QString filename = MainWindow::resourcePath(); 508 QString filename = MainWindow::resourcePath();
509 filename += "koalarm.wav"; 509 filename += "koalarm.wav";
510 QString tempfilename; 510 QString tempfilename;
511 if ( mess.left( 13 ) == "suspend_alarm") { 511 if ( mess.left( 13 ) == "suspend_alarm") {
512 bool error = false; 512 bool error = false;
513 int len = mess.mid( 13 ).find("+++"); 513 int len = mess.mid( 13 ).find("+++");
514 if ( len < 2 ) 514 if ( len < 2 )
515 error = true; 515 error = true;
516 else { 516 else {
517 tempfilename = mess.mid( 13, len ); 517 tempfilename = mess.mid( 13, len );
518 if ( !QFile::exists( tempfilename ) ) 518 if ( !QFile::exists( tempfilename ) )
519 error = true; 519 error = true;
520 } 520 }
521 if ( ! error ) { 521 if ( ! error ) {
522 filename = tempfilename; 522 filename = tempfilename;
523 } 523 }
524 mAlarmMessage = mess.mid( 13+len+3 ); 524 mAlarmMessage = mess.mid( 13+len+3 );
525 //qDebug("suspend file %s ",tempfilename.latin1() ); 525 //qDebug("suspend file %s ",tempfilename.latin1() );
526 startAlarm( mAlarmMessage, filename); 526 startAlarm( mAlarmMessage, filename);
527 return; 527 return;
528 } 528 }
529 if ( mess.left( 11 ) == "timer_alarm") { 529 if ( mess.left( 11 ) == "timer_alarm") {
530 //mTimerTime = 0; 530 //mTimerTime = 0;
531 startAlarm( mess.mid( 11 ), filename ); 531 startAlarm( mess.mid( 11 ), filename );
532 return; 532 return;
533 } 533 }
534 if ( mess.left( 10 ) == "proc_alarm") { 534 if ( mess.left( 10 ) == "proc_alarm") {
535 bool error = false; 535 bool error = false;
536 int len = mess.mid( 10 ).find("+++"); 536 int len = mess.mid( 10 ).find("+++");
537 if ( len < 2 ) 537 if ( len < 2 )
538 error = true; 538 error = true;
539 else { 539 else {
540 tempfilename = mess.mid( 10, len ); 540 tempfilename = mess.mid( 10, len );
541 if ( !QFile::exists( tempfilename ) ) 541 if ( !QFile::exists( tempfilename ) )
542 error = true; 542 error = true;
543 } 543 }
544 if ( error ) { 544 if ( error ) {
545 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 545 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
546 mAlarmMessage += mess.mid( 10+len+3+9 ); 546 mAlarmMessage += mess.mid( 10+len+3+9 );
547 } else { 547 } else {
548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
549 //qDebug("-----system command %s ",tempfilename.latin1() ); 549 //qDebug("-----system command %s ",tempfilename.latin1() );
550#ifndef _WIN32_ 550#ifndef _WIN32_
551 if ( vfork () == 0 ) { 551 if ( vfork () == 0 ) {
552 execl ( tempfilename.latin1(), 0 ); 552 execl ( tempfilename.latin1(), 0 );
553 return; 553 return;
554 } 554 }
555#else 555#else
556 QProcess* p = new QProcess(); 556 QProcess* p = new QProcess();
557 p->addArgument( tempfilename.latin1() ); 557 p->addArgument( tempfilename.latin1() );
558 p->start(); 558 p->start();
559 return; 559 return;
560#endif 560#endif
561 561
562 return; 562 return;
563 } 563 }
564 564
565 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 565 //qDebug("+++++++system command %s ",tempfilename.latin1() );
566 } 566 }
567 if ( mess.left( 11 ) == "audio_alarm") { 567 if ( mess.left( 11 ) == "audio_alarm") {
568 bool error = false; 568 bool error = false;
569 int len = mess.mid( 11 ).find("+++"); 569 int len = mess.mid( 11 ).find("+++");
570 if ( len < 2 ) 570 if ( len < 2 )
571 error = true; 571 error = true;
572 else { 572 else {
573 tempfilename = mess.mid( 11, len ); 573 tempfilename = mess.mid( 11, len );
574 if ( !QFile::exists( tempfilename ) ) 574 if ( !QFile::exists( tempfilename ) )
575 error = true; 575 error = true;
576 } 576 }
577 if ( ! error ) { 577 if ( ! error ) {
578 filename = tempfilename; 578 filename = tempfilename;
579 } 579 }
580 mAlarmMessage = mess.mid( 11+len+3+9 ); 580 mAlarmMessage = mess.mid( 11+len+3+9 );
581 //qDebug("audio file command %s ",tempfilename.latin1() ); 581 //qDebug("audio file command %s ",tempfilename.latin1() );
582 } 582 }
583 if ( mess.left( 9 ) == "cal_alarm") { 583 if ( mess.left( 9 ) == "cal_alarm") {
584 mAlarmMessage = mess.mid( 9 ) ; 584 mAlarmMessage = mess.mid( 9 ) ;
585 } 585 }
586 586
587 startAlarm( mAlarmMessage, filename ); 587 startAlarm( mAlarmMessage, filename );
588 588
589 589
590} 590}
591 591
592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
593{ 593{
594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
595 595
596 mSuspendAlarmNotification = noti; 596 mSuspendAlarmNotification = noti;
597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
599 mSuspendTimer->start( ms , true ); 599 mSuspendTimer->start( ms , true );
600 600
601} 601}
602 602
603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
604{ 604{
605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
607#ifndef DESKTOP_VERSION 607#ifndef DESKTOP_VERSION
608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
609#endif 609#endif
610 return; 610 return;
611 } 611 }
612 int maxSec; 612 int maxSec;
613 //maxSec = 5; //testing only 613 //maxSec = 5; //testing only
614 maxSec = 86400+3600; // one day+1hour 614 maxSec = 86400+3600; // one day+1hour
615 mAlarmNotification = noti; 615 mAlarmNotification = noti;
616 int sec = QDateTime::currentDateTime().secsTo( qdt ); 616 int sec = QDateTime::currentDateTime().secsTo( qdt );
617 if ( sec > maxSec ) { 617 if ( sec > maxSec ) {
618 mRecheckAlarmTimer->start( maxSec * 1000 ); 618 mRecheckAlarmTimer->start( maxSec * 1000 );
619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
620 return; 620 return;
621 } else { 621 } else {
622 mRecheckAlarmTimer->stop(); 622 mRecheckAlarmTimer->stop();
623 } 623 }
624 //qDebug("Alarm timer started with secs: %d ", sec); 624 //qDebug("Alarm timer started with secs: %d ", sec);
625 mAlarmTimer->start( sec *1000 , true ); 625 mAlarmTimer->start( sec *1000 , true );
626 626
627} 627}
628// called by mRecheckAlarmTimer to get next alarm 628// called by mRecheckAlarmTimer to get next alarm
629// we need this, because a QTimer has only a max range of 25 days 629// we need this, because a QTimer has only a max range of 25 days
630void CalendarView::recheckTimerAlarm() 630void CalendarView::recheckTimerAlarm()
631{ 631{
632 mAlarmTimer->stop(); 632 mAlarmTimer->stop();
633 mRecheckAlarmTimer->stop(); 633 mRecheckAlarmTimer->stop();
634 mCalendar->checkAlarmForIncidence( 0, true ); 634 mCalendar->checkAlarmForIncidence( 0, true );
635} 635}
636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
637{ 637{
638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
640#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
642#endif 642#endif
643 return; 643 return;
644 } 644 }
645 mAlarmTimer->stop(); 645 mAlarmTimer->stop();
646} 646}
647void CalendarView::selectWeekNum ( int num ) 647void CalendarView::selectWeekNum ( int num )
648{ 648{
649 dateNavigator()->selectWeek( num ); 649 dateNavigator()->selectWeek( num );
650 mViewManager->showWeekView(); 650 mViewManager->showWeekView();
651} 651}
652KOViewManager *CalendarView::viewManager() 652KOViewManager *CalendarView::viewManager()
653{ 653{
654 return mViewManager; 654 return mViewManager;
655} 655}
656 656
657KODialogManager *CalendarView::dialogManager() 657KODialogManager *CalendarView::dialogManager()
658{ 658{
659 return mDialogManager; 659 return mDialogManager;
660} 660}
661 661
662QDate CalendarView::startDate() 662QDate CalendarView::startDate()
663{ 663{
664 DateList dates = mNavigator->selectedDates(); 664 DateList dates = mNavigator->selectedDates();
665 665
666 return dates.first(); 666 return dates.first();
667} 667}
668 668
669QDate CalendarView::endDate() 669QDate CalendarView::endDate()
670{ 670{
671 DateList dates = mNavigator->selectedDates(); 671 DateList dates = mNavigator->selectedDates();
672 672
673 return dates.last(); 673 return dates.last();
674} 674}
675 675
676 676
677void CalendarView::createPrinter() 677void CalendarView::createPrinter()
678{ 678{
679#ifndef KORG_NOPRINTER 679#ifndef KORG_NOPRINTER
680 if (!mCalPrinter) { 680 if (!mCalPrinter) {
681 mCalPrinter = new CalPrinter(this, mCalendar); 681 mCalPrinter = new CalPrinter(this, mCalendar);
682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
683 } 683 }
684#endif 684#endif
685} 685}
686 686
687void CalendarView::confSync() 687void CalendarView::confSync()
688{ 688{
689 static KSyncPrefsDialog* sp = 0; 689 static KSyncPrefsDialog* sp = 0;
690 if ( ! sp ) { 690 if ( ! sp ) {
691 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 691 sp = new KSyncPrefsDialog( this, "syncprefs", true );
692 } 692 }
693 sp->usrReadConfig(); 693 sp->usrReadConfig();
694#ifndef DESKTOP_VERSION 694#ifndef DESKTOP_VERSION
695 sp->showMaximized(); 695 sp->showMaximized();
696#else 696#else
697 sp->show(); 697 sp->show();
698#endif 698#endif
699 sp->exec(); 699 sp->exec();
700 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 700 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
701 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 701 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
702} 702}
703 703
704 704
705//KOPrefs::instance()->mWriteBackFile 705//KOPrefs::instance()->mWriteBackFile
706//KOPrefs::instance()->mWriteBackExistingOnly 706//KOPrefs::instance()->mWriteBackExistingOnly
707 707
708// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 708// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
709// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 709// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
710// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 710// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
711// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 711// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
712// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 712// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
713// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 713// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
714 714
715int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 715int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
716{ 716{
717 717
718 //void setZaurusId(int id); 718 //void setZaurusId(int id);
719 // int zaurusId() const; 719 // int zaurusId() const;
720 // void setZaurusUid(int id); 720 // void setZaurusUid(int id);
721 // int zaurusUid() const; 721 // int zaurusUid() const;
722 // void setZaurusStat(int id); 722 // void setZaurusStat(int id);
723 // int zaurusStat() const; 723 // int zaurusStat() const;
724 // 0 equal 724 // 0 equal
725 // 1 take local 725 // 1 take local
726 // 2 take remote 726 // 2 take remote
727 // 3 cancel 727 // 3 cancel
728 QDateTime lastSync = mLastCalendarSync; 728 QDateTime lastSync = mLastCalendarSync;
729 QDateTime localMod = local->lastModified(); 729 QDateTime localMod = local->lastModified();
730 QDateTime remoteMod = remote->lastModified(); 730 QDateTime remoteMod = remote->lastModified();
731 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 731 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
732 bool remCh, locCh; 732 bool remCh, locCh;
733 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 733 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
734 //if ( remCh ) 734 //if ( remCh )
735 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 735 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
736 locCh = ( localMod > mLastCalendarSync ); 736 locCh = ( localMod > mLastCalendarSync );
737 if ( !remCh && ! locCh ) { 737 if ( !remCh && ! locCh ) {
738 //qDebug("both not changed "); 738 //qDebug("both not changed ");
739 lastSync = localMod.addDays(1); 739 lastSync = localMod.addDays(1);
740 if ( mode <= SYNC_PREF_ASK ) 740 if ( mode <= SYNC_PREF_ASK )
741 return 0; 741 return 0;
742 } else { 742 } else {
743 if ( locCh ) { 743 if ( locCh ) {
744 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 744 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
745 lastSync = localMod.addDays( -1 ); 745 lastSync = localMod.addDays( -1 );
746 if ( !remCh ) 746 if ( !remCh )
747 remoteMod = ( lastSync.addDays( -1 ) ); 747 remoteMod = ( lastSync.addDays( -1 ) );
748 } else { 748 } else {
749 //qDebug(" not loc changed "); 749 //qDebug(" not loc changed ");
750 lastSync = localMod.addDays( 1 ); 750 lastSync = localMod.addDays( 1 );
751 if ( remCh ) 751 if ( remCh )
752 remoteMod =( lastSync.addDays( 1 ) ); 752 remoteMod =( lastSync.addDays( 1 ) );
753 753
754 } 754 }
755 } 755 }
756 full = true; 756 full = true;
757 if ( mode < SYNC_PREF_ASK ) 757 if ( mode < SYNC_PREF_ASK )
758 mode = SYNC_PREF_ASK; 758 mode = SYNC_PREF_ASK;
759 } else { 759 } else {
760 if ( localMod == remoteMod ) 760 if ( localMod == remoteMod )
761 if ( local->revision() == remote->revision() ) 761 if ( local->revision() == remote->revision() )
762 return 0; 762 return 0;
763 763
764 } 764 }
765 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 765 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
766 766
767 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 767 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
768 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 768 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
769 //full = true; //debug only 769 //full = true; //debug only
770 if ( full ) { 770 if ( full ) {
771 bool equ = false; 771 bool equ = false;
772 if ( local->type() == "Event" ) { 772 if ( local->type() == "Event" ) {
773 equ = (*((Event*) local) == *((Event*) remote)); 773 equ = (*((Event*) local) == *((Event*) remote));
774 } 774 }
775 else if ( local->type() =="Todo" ) 775 else if ( local->type() =="Todo" )
776 equ = (*((Todo*) local) == (*(Todo*) remote)); 776 equ = (*((Todo*) local) == (*(Todo*) remote));
777 else if ( local->type() =="Journal" ) 777 else if ( local->type() =="Journal" )
778 equ = (*((Journal*) local) == *((Journal*) remote)); 778 equ = (*((Journal*) local) == *((Journal*) remote));
779 if ( equ ) { 779 if ( equ ) {
780 //qDebug("equal "); 780 //qDebug("equal ");
781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
782 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 782 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
783 } 783 }
784 if ( mode < SYNC_PREF_FORCE_LOCAL ) 784 if ( mode < SYNC_PREF_FORCE_LOCAL )
785 return 0; 785 return 0;
786 786
787 }//else //debug only 787 }//else //debug only
788 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 788 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
789 } 789 }
790 int result; 790 int result;
791 bool localIsNew; 791 bool localIsNew;
792 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 792 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
793 793
794 if ( full && mode < SYNC_PREF_NEWEST ) 794 if ( full && mode < SYNC_PREF_NEWEST )
795 mode = SYNC_PREF_ASK; 795 mode = SYNC_PREF_ASK;
796 796
797 switch( mode ) { 797 switch( mode ) {
798 case SYNC_PREF_LOCAL: 798 case SYNC_PREF_LOCAL:
799 if ( lastSync > remoteMod ) 799 if ( lastSync > remoteMod )
800 return 1; 800 return 1;
801 if ( lastSync > localMod ) 801 if ( lastSync > localMod )
802 return 2; 802 return 2;
803 return 1; 803 return 1;
804 break; 804 break;
805 case SYNC_PREF_REMOTE: 805 case SYNC_PREF_REMOTE:
806 if ( lastSync > remoteMod ) 806 if ( lastSync > remoteMod )
807 return 1; 807 return 1;
808 if ( lastSync > localMod ) 808 if ( lastSync > localMod )
809 return 2; 809 return 2;
810 return 2; 810 return 2;
811 break; 811 break;
812 case SYNC_PREF_NEWEST: 812 case SYNC_PREF_NEWEST:
813 if ( localMod > remoteMod ) 813 if ( localMod > remoteMod )
814 return 1; 814 return 1;
815 else 815 else
816 return 2; 816 return 2;
817 break; 817 break;
818 case SYNC_PREF_ASK: 818 case SYNC_PREF_ASK:
819 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 819 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
820 if ( lastSync > remoteMod ) 820 if ( lastSync > remoteMod )
821 return 1; 821 return 1;
822 if ( lastSync > localMod ) 822 if ( lastSync > localMod )
823 return 2; 823 return 2;
824 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 824 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
825 localIsNew = localMod >= remoteMod; 825 localIsNew = localMod >= remoteMod;
826 if ( localIsNew ) 826 if ( localIsNew )
827 getEventViewerDialog()->setColorMode( 1 ); 827 getEventViewerDialog()->setColorMode( 1 );
828 else 828 else
829 getEventViewerDialog()->setColorMode( 2 ); 829 getEventViewerDialog()->setColorMode( 2 );
830 getEventViewerDialog()->setIncidence(local); 830 getEventViewerDialog()->setIncidence(local);
831 if ( localIsNew ) 831 if ( localIsNew )
832 getEventViewerDialog()->setColorMode( 2 ); 832 getEventViewerDialog()->setColorMode( 2 );
833 else 833 else
834 getEventViewerDialog()->setColorMode( 1 ); 834 getEventViewerDialog()->setColorMode( 1 );
835 getEventViewerDialog()->addIncidence(remote); 835 getEventViewerDialog()->addIncidence(remote);
836 getEventViewerDialog()->setColorMode( 0 ); 836 getEventViewerDialog()->setColorMode( 0 );
837 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 837 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
838 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 838 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
839 getEventViewerDialog()->showMe(); 839 getEventViewerDialog()->showMe();
840 result = getEventViewerDialog()->executeS( localIsNew ); 840 result = getEventViewerDialog()->executeS( localIsNew );
841 return result; 841 return result;
842 842
843 break; 843 break;
844 case SYNC_PREF_FORCE_LOCAL: 844 case SYNC_PREF_FORCE_LOCAL:
845 return 1; 845 return 1;
846 break; 846 break;
847 case SYNC_PREF_FORCE_REMOTE: 847 case SYNC_PREF_FORCE_REMOTE:
848 return 2; 848 return 2;
849 break; 849 break;
850 850
851 default: 851 default:
852 // SYNC_PREF_TAKE_BOTH not implemented 852 // SYNC_PREF_TAKE_BOTH not implemented
853 break; 853 break;
854 } 854 }
855 return 0; 855 return 0;
856} 856}
857Event* CalendarView::getLastSyncEvent() 857Event* CalendarView::getLastSyncEvent()
858{ 858{
859 Event* lse; 859 Event* lse;
860 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 860 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
861 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 861 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
862 if (!lse) { 862 if (!lse) {
863 lse = new Event(); 863 lse = new Event();
864 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 864 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
865 QString sum = ""; 865 QString sum = "";
866 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 866 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
867 sum = "E: "; 867 sum = "E: ";
868 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 868 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
869 lse->setDtStart( mLastCalendarSync ); 869 lse->setDtStart( mLastCalendarSync );
870 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 870 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
871 lse->setCategories( i18n("SyncEvent") ); 871 lse->setCategories( i18n("SyncEvent") );
872 lse->setReadOnly( true ); 872 lse->setReadOnly( true );
873 mCalendar->addEvent( lse ); 873 mCalendar->addEvent( lse );
874 } 874 }
875 875
876 return lse; 876 return lse;
877 877
878} 878}
879// probaly useless 879// probaly useless
880void CalendarView::setupExternSyncProfiles() 880void CalendarView::setupExternSyncProfiles()
881{ 881{
882 Event* lse; 882 Event* lse;
883 mExternLastSyncEvent.clear(); 883 mExternLastSyncEvent.clear();
884 int i; 884 int i;
885 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) { 885 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
886 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] ); 886 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
887 if ( lse ) 887 if ( lse )
888 mExternLastSyncEvent.append( lse ); 888 mExternLastSyncEvent.append( lse );
889 else 889 else
890 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1()); 890 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
891 } 891 }
892 892
893} 893}
894// we check, if the to delete event has a id for a profile 894// we check, if the to delete event has a id for a profile
895// if yes, we set this id in the profile to delete 895// if yes, we set this id in the profile to delete
896void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 896void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
897{ 897{
898 if ( lastSync.count() == 0 ) { 898 if ( lastSync.count() == 0 ) {
899 //qDebug(" lastSync.count() == 0"); 899 //qDebug(" lastSync.count() == 0");
900 return; 900 return;
901 } 901 }
902 if ( toDelete->type() == "Journal" ) 902 if ( toDelete->type() == "Journal" )
903 return; 903 return;
904 904
905 Event* eve = lastSync.first(); 905 Event* eve = lastSync.first();
906 906
907 while ( eve ) { 907 while ( eve ) {
908 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 908 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
909 if ( !id.isEmpty() ) { 909 if ( !id.isEmpty() ) {
910 QString des = eve->description(); 910 QString des = eve->description();
911 QString pref = "e"; 911 QString pref = "e";
912 if ( toDelete->type() == "Todo" ) 912 if ( toDelete->type() == "Todo" )
913 pref = "t"; 913 pref = "t";
914 des += pref+ id + ","; 914 des += pref+ id + ",";
915 eve->setReadOnly( false ); 915 eve->setReadOnly( false );
916 eve->setDescription( des ); 916 eve->setDescription( des );
917 //qDebug("setdes %s ", des.latin1()); 917 //qDebug("setdes %s ", des.latin1());
918 eve->setReadOnly( true ); 918 eve->setReadOnly( true );
919 } 919 }
920 eve = lastSync.next(); 920 eve = lastSync.next();
921 } 921 }
922 922
923} 923}
924void CalendarView::checkExternalId( Incidence * inc ) 924void CalendarView::checkExternalId( Incidence * inc )
925{ 925{
926 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 926 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
927 checkExternSyncEvent( lastSync, inc ); 927 checkExternSyncEvent( lastSync, inc );
928 928
929} 929}
930bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 930bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
931{ 931{
932 bool syncOK = true; 932 bool syncOK = true;
933 int addedEvent = 0; 933 int addedEvent = 0;
934 int addedEventR = 0; 934 int addedEventR = 0;
935 int deletedEventR = 0; 935 int deletedEventR = 0;
936 int deletedEventL = 0; 936 int deletedEventL = 0;
937 int changedLocal = 0; 937 int changedLocal = 0;
938 int changedRemote = 0; 938 int changedRemote = 0;
939 //QPtrList<Event> el = local->rawEvents(); 939 //QPtrList<Event> el = local->rawEvents();
940 Event* eventR; 940 Event* eventR;
941 QString uid; 941 QString uid;
942 int take; 942 int take;
943 Event* eventL; 943 Event* eventL;
944 Event* eventRSync; 944 Event* eventRSync;
945 Event* eventLSync; 945 Event* eventLSync;
946 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 946 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
947 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 947 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
948 bool fullDateRange = false; 948 bool fullDateRange = false;
949 local->resetTempSyncStat(); 949 local->resetTempSyncStat();
950 mLastCalendarSync = QDateTime::currentDateTime(); 950 mLastCalendarSync = QDateTime::currentDateTime();
951 QDateTime modifiedCalendar = mLastCalendarSync;; 951 QDateTime modifiedCalendar = mLastCalendarSync;;
952 eventLSync = getLastSyncEvent(); 952 eventLSync = getLastSyncEvent();
953 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 953 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
954 if ( eventR ) { 954 if ( eventR ) {
955 eventRSync = (Event*) eventR->clone(); 955 eventRSync = (Event*) eventR->clone();
956 remote->deleteEvent(eventR ); 956 remote->deleteEvent(eventR );
957 957
958 } else { 958 } else {
959 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 959 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
960 eventRSync = (Event*)eventLSync->clone(); 960 eventRSync = (Event*)eventLSync->clone();
961 } else { 961 } else {
962 fullDateRange = true; 962 fullDateRange = true;
963 eventRSync = new Event(); 963 eventRSync = new Event();
964 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 964 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
965 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 965 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
966 eventRSync->setDtStart( mLastCalendarSync ); 966 eventRSync->setDtStart( mLastCalendarSync );
967 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 967 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
968 eventRSync->setCategories( i18n("SyncEvent") ); 968 eventRSync->setCategories( i18n("SyncEvent") );
969 } 969 }
970 } 970 }
971 if ( eventLSync->dtStart() == mLastCalendarSync ) 971 if ( eventLSync->dtStart() == mLastCalendarSync )
972 fullDateRange = true; 972 fullDateRange = true;
973 973
974 if ( ! fullDateRange ) { 974 if ( ! fullDateRange ) {
975 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 975 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
976 976
977 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 977 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
978 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 978 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
979 fullDateRange = true; 979 fullDateRange = true;
980 } 980 }
981 } 981 }
982 if ( fullDateRange ) 982 if ( fullDateRange )
983 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 983 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
984 else 984 else
985 mLastCalendarSync = eventLSync->dtStart(); 985 mLastCalendarSync = eventLSync->dtStart();
986 // for resyncing if own file has changed 986 // for resyncing if own file has changed
987 if ( mCurrentSyncDevice == "deleteaftersync" ) { 987 if ( mCurrentSyncDevice == "deleteaftersync" ) {
988 mLastCalendarSync = loadedFileVersion; 988 mLastCalendarSync = loadedFileVersion;
989 qDebug("setting mLastCalendarSync "); 989 qDebug("setting mLastCalendarSync ");
990 } 990 }
991 //qDebug("*************************** "); 991 //qDebug("*************************** ");
992 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 992 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
993 QPtrList<Incidence> er = remote->rawIncidences(); 993 QPtrList<Incidence> er = remote->rawIncidences();
994 Incidence* inR = er.first(); 994 Incidence* inR = er.first();
995 Incidence* inL; 995 Incidence* inL;
996 QProgressBar bar( er.count(),0 ); 996 QProgressBar bar( er.count(),0 );
997 bar.setCaption (i18n("Syncing - close to abort!") ); 997 bar.setCaption (i18n("Syncing - close to abort!") );
998 998
999 int w = 300; 999 int w = 300;
1000 if ( QApplication::desktop()->width() < 320 ) 1000 if ( QApplication::desktop()->width() < 320 )
1001 w = 220; 1001 w = 220;
1002 int h = bar.sizeHint().height() ; 1002 int h = bar.sizeHint().height() ;
1003 int dw = QApplication::desktop()->width(); 1003 int dw = QApplication::desktop()->width();
1004 int dh = QApplication::desktop()->height(); 1004 int dh = QApplication::desktop()->height();
1005 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1005 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1006 bar.show(); 1006 bar.show();
1007 int modulo = (er.count()/10)+1; 1007 int modulo = (er.count()/10)+1;
1008 int incCounter = 0; 1008 int incCounter = 0;
1009 while ( inR ) { 1009 while ( inR ) {
1010 if ( ! bar.isVisible() ) 1010 if ( ! bar.isVisible() )
1011 return false; 1011 return false;
1012 if ( incCounter % modulo == 0 ) 1012 if ( incCounter % modulo == 0 )
1013 bar.setProgress( incCounter ); 1013 bar.setProgress( incCounter );
1014 ++incCounter; 1014 ++incCounter;
1015 uid = inR->uid(); 1015 uid = inR->uid();
1016 bool skipIncidence = false; 1016 bool skipIncidence = false;
1017 if ( uid.left(15) == QString("last-syncEvent-") ) 1017 if ( uid.left(15) == QString("last-syncEvent-") )
1018 skipIncidence = true; 1018 skipIncidence = true;
1019 QString idS; 1019 QString idS;
1020 qApp->processEvents(); 1020 qApp->processEvents();
1021 if ( !skipIncidence ) { 1021 if ( !skipIncidence ) {
1022 inL = local->incidence( uid ); 1022 inL = local->incidence( uid );
1023 if ( inL ) { // maybe conflict - same uid in both calendars 1023 if ( inL ) { // maybe conflict - same uid in both calendars
1024 int maxrev = inL->revision(); 1024 int maxrev = inL->revision();
1025 if ( maxrev < inR->revision() ) 1025 if ( maxrev < inR->revision() )
1026 maxrev = inR->revision(); 1026 maxrev = inR->revision();
1027 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1027 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1028 //qDebug("take %d %s ", take, inL->summary().latin1()); 1028 //qDebug("take %d %s ", take, inL->summary().latin1());
1029 if ( take == 3 ) 1029 if ( take == 3 )
1030 return false; 1030 return false;
1031 if ( take == 1 ) {// take local 1031 if ( take == 1 ) {// take local
1032 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1032 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1033 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1033 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1034 else 1034 else
1035 idS = inR->IDStr(); 1035 idS = inR->IDStr();
1036 remote->deleteIncidence( inR ); 1036 remote->deleteIncidence( inR );
1037 if ( inL->revision() < maxrev ) 1037 if ( inL->revision() < maxrev )
1038 inL->setRevision( maxrev ); 1038 inL->setRevision( maxrev );
1039 inR = inL->clone(); 1039 inR = inL->clone();
1040 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1040 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1041 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1041 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1042 inR->setIDStr( idS ); 1042 inR->setIDStr( idS );
1043 remote->addIncidence( inR ); 1043 remote->addIncidence( inR );
1044 ++changedRemote; 1044 ++changedRemote;
1045 } else { 1045 } else {
1046 if ( inR->revision() < maxrev ) 1046 if ( inR->revision() < maxrev )
1047 inR->setRevision( maxrev ); 1047 inR->setRevision( maxrev );
1048 idS = inL->IDStr(); 1048 idS = inL->IDStr();
1049 local->deleteIncidence( inL ); 1049 local->deleteIncidence( inL );
1050 inL = inR->clone(); 1050 inL = inR->clone();
1051 inL->setIDStr( idS ); 1051 inL->setIDStr( idS );
1052 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1052 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1053 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1053 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1054 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1054 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1055 } 1055 }
1056 local->addIncidence( inL ); 1056 local->addIncidence( inL );
1057 ++changedLocal; 1057 ++changedLocal;
1058 } 1058 }
1059 } 1059 }
1060 } else { // no conflict 1060 } else { // no conflict
1061 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1061 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1062 QString des = eventLSync->description(); 1062 QString des = eventLSync->description();
1063 QString pref = "e"; 1063 QString pref = "e";
1064 if ( inR->type() == "Todo" ) 1064 if ( inR->type() == "Todo" )
1065 pref = "t"; 1065 pref = "t";
1066 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1066 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1067 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1067 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1068 //remote->deleteIncidence( inR ); 1068 //remote->deleteIncidence( inR );
1069 ++deletedEventR; 1069 ++deletedEventR;
1070 } else { 1070 } else {
1071 inR->setLastModified( modifiedCalendar ); 1071 inR->setLastModified( modifiedCalendar );
1072 inL = inR->clone(); 1072 inL = inR->clone();
1073 local->addIncidence( inL ); 1073 local->addIncidence( inL );
1074 ++addedEvent; 1074 ++addedEvent;
1075 } 1075 }
1076 } else { 1076 } else {
1077 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1077 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1078 inR->setLastModified( modifiedCalendar ); 1078 inR->setLastModified( modifiedCalendar );
1079 local->addIncidence( inR->clone() ); 1079 local->addIncidence( inR->clone() );
1080 ++addedEvent; 1080 ++addedEvent;
1081 } else { 1081 } else {
1082 checkExternSyncEvent(eventRSyncSharp, inR); 1082 checkExternSyncEvent(eventRSyncSharp, inR);
1083 remote->deleteIncidence( inR ); 1083 remote->deleteIncidence( inR );
1084 ++deletedEventR; 1084 ++deletedEventR;
1085 } 1085 }
1086 } 1086 }
1087 } 1087 }
1088 } 1088 }
1089 inR = er.next(); 1089 inR = er.next();
1090 } 1090 }
1091 QPtrList<Incidence> el = local->rawIncidences(); 1091 QPtrList<Incidence> el = local->rawIncidences();
1092 inL = el.first(); 1092 inL = el.first();
1093 modulo = (el.count()/10)+1; 1093 modulo = (el.count()/10)+1;
1094 bar.setCaption (i18n("Add / remove events") ); 1094 bar.setCaption (i18n("Add / remove events") );
1095 bar.setTotalSteps ( el.count() ) ; 1095 bar.setTotalSteps ( el.count() ) ;
1096 bar.show(); 1096 bar.show();
1097 incCounter = 0; 1097 incCounter = 0;
1098 1098
1099 while ( inL ) { 1099 while ( inL ) {
1100 1100
1101 qApp->processEvents(); 1101 qApp->processEvents();
1102 if ( ! bar.isVisible() ) 1102 if ( ! bar.isVisible() )
1103 return false; 1103 return false;
1104 if ( incCounter % modulo == 0 ) 1104 if ( incCounter % modulo == 0 )
1105 bar.setProgress( incCounter ); 1105 bar.setProgress( incCounter );
1106 ++incCounter; 1106 ++incCounter;
1107 uid = inL->uid(); 1107 uid = inL->uid();
1108 bool skipIncidence = false; 1108 bool skipIncidence = false;
1109 if ( uid.left(15) == QString("last-syncEvent-") ) 1109 if ( uid.left(15) == QString("last-syncEvent-") )
1110 skipIncidence = true; 1110 skipIncidence = true;
1111 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1111 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1112 skipIncidence = true; 1112 skipIncidence = true;
1113 if ( !skipIncidence ) { 1113 if ( !skipIncidence ) {
1114 inR = remote->incidence( uid ); 1114 inR = remote->incidence( uid );
1115 if ( ! inR ) { 1115 if ( ! inR ) {
1116 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1116 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1117 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1117 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1118 checkExternSyncEvent(eventLSyncSharp, inL); 1118 checkExternSyncEvent(eventLSyncSharp, inL);
1119 local->deleteIncidence( inL ); 1119 local->deleteIncidence( inL );
1120 ++deletedEventL; 1120 ++deletedEventL;
1121 } else { 1121 } else {
1122 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1122 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1123 inL->removeID(mCurrentSyncDevice ); 1123 inL->removeID(mCurrentSyncDevice );
1124 ++addedEventR; 1124 ++addedEventR;
1125 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1125 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1126 inL->setLastModified( modifiedCalendar ); 1126 inL->setLastModified( modifiedCalendar );
1127 inR = inL->clone(); 1127 inR = inL->clone();
1128 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1128 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1129 remote->addIncidence( inR ); 1129 remote->addIncidence( inR );
1130 } 1130 }
1131 } 1131 }
1132 } else { 1132 } else {
1133 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1133 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1134 checkExternSyncEvent(eventLSyncSharp, inL); 1134 checkExternSyncEvent(eventLSyncSharp, inL);
1135 local->deleteIncidence( inL ); 1135 local->deleteIncidence( inL );
1136 ++deletedEventL; 1136 ++deletedEventL;
1137 } else { 1137 } else {
1138 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1138 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1139 ++addedEventR; 1139 ++addedEventR;
1140 inL->setLastModified( modifiedCalendar ); 1140 inL->setLastModified( modifiedCalendar );
1141 remote->addIncidence( inL->clone() ); 1141 remote->addIncidence( inL->clone() );
1142 } 1142 }
1143 } 1143 }
1144 } 1144 }
1145 } 1145 }
1146 } 1146 }
1147 inL = el.next(); 1147 inL = el.next();
1148 } 1148 }
1149 int delFut = 0; 1149 int delFut = 0;
1150 if ( KOPrefs::instance()->mWriteBackInFuture ) { 1150 if ( KOPrefs::instance()->mWriteBackInFuture ) {
1151 er = remote->rawIncidences(); 1151 er = remote->rawIncidences();
1152 inR = er.first(); 1152 inR = er.first();
1153 QDateTime dt; 1153 QDateTime dt;
1154 QDateTime cur = QDateTime::currentDateTime(); 1154 QDateTime cur = QDateTime::currentDateTime().addDays( -7 );
1155 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); 1155 QDateTime end = cur.addDays( (KOPrefs::instance()->mWriteBackInFuture +1 ) *7 );
1156 while ( inR ) { 1156 while ( inR ) {
1157 if ( inR->type() == "Todo" ) { 1157 if ( inR->type() == "Todo" ) {
1158 Todo * t = (Todo*)inR; 1158 Todo * t = (Todo*)inR;
1159 if ( t->hasDueDate() ) 1159 if ( t->hasDueDate() )
1160 dt = t->dtDue(); 1160 dt = t->dtDue();
1161 else 1161 else
1162 dt = cur.addSecs( 62 ); 1162 dt = cur.addSecs( 62 );
1163 } 1163 }
1164 else if (inR->type() == "Event" ) { 1164 else if (inR->type() == "Event" ) {
1165 bool ok; 1165 bool ok;
1166 dt = inR->getNextOccurence( cur, &ok ); 1166 dt = inR->getNextOccurence( cur, &ok );
1167 if ( !ok ) 1167 if ( !ok )
1168 dt = cur.addSecs( -62 ); 1168 dt = cur.addSecs( -62 );
1169 } 1169 }
1170 else 1170 else
1171 dt = inR->dtStart(); 1171 dt = inR->dtStart();
1172 if ( dt < cur || dt > end ) { 1172 if ( dt < cur || dt > end ) {
1173 remote->deleteIncidence( inR ); 1173 remote->deleteIncidence( inR );
1174 ++delFut; 1174 ++delFut;
1175 } 1175 }
1176 inR = er.next(); 1176 inR = er.next();
1177 } 1177 }
1178 } 1178 }
1179 bar.hide(); 1179 bar.hide();
1180 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1180 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1181 eventLSync->setReadOnly( false ); 1181 eventLSync->setReadOnly( false );
1182 eventLSync->setDtStart( mLastCalendarSync ); 1182 eventLSync->setDtStart( mLastCalendarSync );
1183 eventRSync->setDtStart( mLastCalendarSync ); 1183 eventRSync->setDtStart( mLastCalendarSync );
1184 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1184 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1185 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1185 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1186 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1186 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1187 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1187 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1188 eventLSync->setReadOnly( true ); 1188 eventLSync->setReadOnly( true );
1189 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1189 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1190 remote->addEvent( eventRSync ); 1190 remote->addEvent( eventRSync );
1191 QString mes; 1191 QString mes;
1192 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 ); 1192 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 );
1193 QString delmess; 1193 QString delmess;
1194 if ( delFut ) { 1194 if ( delFut ) {
1195 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture ); 1195 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture );
1196 mes += delmess; 1196 mes += delmess;
1197 } 1197 }
1198 if ( KOPrefs::instance()->mShowSyncSummary ) { 1198 if ( KOPrefs::instance()->mShowSyncSummary ) {
1199 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1199 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1200 } 1200 }
1201 qDebug( mes ); 1201 qDebug( mes );
1202 mCalendar->checkAlarmForIncidence( 0, true ); 1202 mCalendar->checkAlarmForIncidence( 0, true );
1203 return syncOK; 1203 return syncOK;
1204} 1204}
1205 1205
1206void CalendarView::setSyncDevice( QString s ) 1206void CalendarView::setSyncDevice( QString s )
1207{ 1207{
1208 mCurrentSyncDevice= s; 1208 mCurrentSyncDevice= s;
1209} 1209}
1210void CalendarView::setSyncName( QString s ) 1210void CalendarView::setSyncName( QString s )
1211{ 1211{
1212 mCurrentSyncName= s; 1212 mCurrentSyncName= s;
1213} 1213}
1214bool CalendarView::syncCalendar(QString filename, int mode) 1214bool CalendarView::syncCalendar(QString filename, int mode)
1215{ 1215{
1216 mGlobalSyncMode = SYNC_MODE_NORMAL; 1216 mGlobalSyncMode = SYNC_MODE_NORMAL;
1217 CalendarLocal* calendar = new CalendarLocal(); 1217 CalendarLocal* calendar = new CalendarLocal();
1218 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1218 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1219 FileStorage* storage = new FileStorage( calendar ); 1219 FileStorage* storage = new FileStorage( calendar );
1220 bool syncOK = false; 1220 bool syncOK = false;
1221 storage->setFileName( filename ); 1221 storage->setFileName( filename );
1222 // qDebug("loading ... "); 1222 // qDebug("loading ... ");
1223 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1223 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1224 getEventViewerDialog()->setSyncMode( true ); 1224 getEventViewerDialog()->setSyncMode( true );
1225 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1225 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1226 getEventViewerDialog()->setSyncMode( false ); 1226 getEventViewerDialog()->setSyncMode( false );
1227 if ( syncOK ) { 1227 if ( syncOK ) {
1228 if ( KOPrefs::instance()->mWriteBackFile ) 1228 if ( KOPrefs::instance()->mWriteBackFile )
1229 { 1229 {
1230 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1230 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1231 storage->save(); 1231 storage->save();
1232 } 1232 }
1233 } 1233 }
1234 setModified( true ); 1234 setModified( true );
1235 } 1235 }
1236 delete storage; 1236 delete storage;
1237 delete calendar; 1237 delete calendar;
1238 if ( syncOK ) 1238 if ( syncOK )
1239 updateView(); 1239 updateView();
1240 return syncOK; 1240 return syncOK;
1241} 1241}
1242void CalendarView::syncPhone() 1242void CalendarView::syncPhone()
1243{ 1243{
1244 syncExternal( 1 ); 1244 syncExternal( 1 );
1245} 1245}
1246void CalendarView::syncExternal( int mode ) 1246void CalendarView::syncExternal( int mode )
1247{ 1247{
1248 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1248 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1249 //mCurrentSyncDevice = "sharp-DTM"; 1249 //mCurrentSyncDevice = "sharp-DTM";
1250 if ( KOPrefs::instance()->mAskForPreferences ) 1250 if ( KOPrefs::instance()->mAskForPreferences )
1251 edit_sync_options(); 1251 edit_sync_options();
1252 qApp->processEvents(); 1252 qApp->processEvents();
1253 CalendarLocal* calendar = new CalendarLocal(); 1253 CalendarLocal* calendar = new CalendarLocal();
1254 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1254 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1255 bool syncOK = false; 1255 bool syncOK = false;
1256 bool loadSuccess = false; 1256 bool loadSuccess = false;
1257 PhoneFormat* phoneFormat = 0; 1257 PhoneFormat* phoneFormat = 0;
1258#ifndef DESKTOP_VERSION 1258#ifndef DESKTOP_VERSION
1259 SharpFormat* sharpFormat = 0; 1259 SharpFormat* sharpFormat = 0;
1260 if ( mode == 0 ) { // sharp 1260 if ( mode == 0 ) { // sharp
1261 sharpFormat = new SharpFormat () ; 1261 sharpFormat = new SharpFormat () ;
1262 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1262 loadSuccess = sharpFormat->load( calendar, mCalendar );
1263 1263
1264 } else 1264 } else
1265#endif 1265#endif
1266 if ( mode == 1 ) { // phone 1266 if ( mode == 1 ) { // phone
1267 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1267 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1268 KOPrefs::instance()->mPhoneDevice, 1268 KOPrefs::instance()->mPhoneDevice,
1269 KOPrefs::instance()->mPhoneConnection, 1269 KOPrefs::instance()->mPhoneConnection,
1270 KOPrefs::instance()->mPhoneModel); 1270 KOPrefs::instance()->mPhoneModel);
1271 loadSuccess = phoneFormat->load( calendar,mCalendar); 1271 loadSuccess = phoneFormat->load( calendar,mCalendar);
1272 1272
1273 } else 1273 } else
1274 return; 1274 return;
1275 if ( loadSuccess ) { 1275 if ( loadSuccess ) {
1276 getEventViewerDialog()->setSyncMode( true ); 1276 getEventViewerDialog()->setSyncMode( true );
1277 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1277 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1278 getEventViewerDialog()->setSyncMode( false ); 1278 getEventViewerDialog()->setSyncMode( false );
1279 qApp->processEvents(); 1279 qApp->processEvents();
1280 if ( syncOK ) { 1280 if ( syncOK ) {
1281 if ( KOPrefs::instance()->mWriteBackFile ) 1281 if ( KOPrefs::instance()->mWriteBackFile )
1282 { 1282 {
1283 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1283 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1284 Incidence* inc = iL.first(); 1284 Incidence* inc = iL.first();
1285 if ( phoneFormat ) { 1285 if ( phoneFormat ) {
1286 while ( inc ) { 1286 while ( inc ) {
1287 inc->removeID(mCurrentSyncDevice); 1287 inc->removeID(mCurrentSyncDevice);
1288 inc = iL.next(); 1288 inc = iL.next();
1289 } 1289 }
1290 } 1290 }
1291#ifndef DESKTOP_VERSION 1291#ifndef DESKTOP_VERSION
1292 if ( sharpFormat ) 1292 if ( sharpFormat )
1293 sharpFormat->save(calendar); 1293 sharpFormat->save(calendar);
1294#endif 1294#endif
1295 if ( phoneFormat ) 1295 if ( phoneFormat )
1296 phoneFormat->save(calendar); 1296 phoneFormat->save(calendar);
1297 iL = calendar->rawIncidences(); 1297 iL = calendar->rawIncidences();
1298 inc = iL.first(); 1298 inc = iL.first();
1299 Incidence* loc; 1299 Incidence* loc;
1300 while ( inc ) { 1300 while ( inc ) {
1301 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1301 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1302 loc = mCalendar->incidence(inc->uid() ); 1302 loc = mCalendar->incidence(inc->uid() );
1303 if ( loc ) { 1303 if ( loc ) {
1304 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1304 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1305 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1305 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1306 } 1306 }
1307 } 1307 }
1308 inc = iL.next(); 1308 inc = iL.next();
1309 } 1309 }
1310 Incidence* lse = getLastSyncEvent(); 1310 Incidence* lse = getLastSyncEvent();
1311 if ( lse ) { 1311 if ( lse ) {
1312 lse->setReadOnly( false ); 1312 lse->setReadOnly( false );
1313 lse->setDescription( "" ); 1313 lse->setDescription( "" );
1314 lse->setReadOnly( true ); 1314 lse->setReadOnly( true );
1315 } 1315 }
1316 } 1316 }
1317 } 1317 }
1318 setModified( true ); 1318 setModified( true );
1319 } else { 1319 } else {
1320 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1320 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1321 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1321 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1322 question, i18n("Ok")) ; 1322 question, i18n("Ok")) ;
1323 1323
1324 } 1324 }
1325 delete calendar; 1325 delete calendar;
1326 updateView(); 1326 updateView();
1327 return ;//syncOK; 1327 return ;//syncOK;
1328 1328
1329} 1329}
1330void CalendarView::syncSharp() 1330void CalendarView::syncSharp()
1331{ 1331{
1332 syncExternal( 0 ); 1332 syncExternal( 0 );
1333 1333
1334} 1334}
1335 1335
1336 1336
1337//#include <kabc/stdaddressbook.h> 1337//#include <kabc/stdaddressbook.h>
1338bool CalendarView::importBday() 1338bool CalendarView::importBday()
1339{ 1339{
1340#if 0 1340#if 0
1341 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1341 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1342 KABC::AddressBook::Iterator it; 1342 KABC::AddressBook::Iterator it;
1343 int count = 0; 1343 int count = 0;
1344 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1344 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1345 ++count; 1345 ++count;
1346 } 1346 }
1347 QProgressBar bar(count,0 ); 1347 QProgressBar bar(count,0 );
1348 int w = 300; 1348 int w = 300;
1349 if ( QApplication::desktop()->width() < 320 ) 1349 if ( QApplication::desktop()->width() < 320 )
1350 w = 220; 1350 w = 220;
1351 int h = bar.sizeHint().height() ; 1351 int h = bar.sizeHint().height() ;
1352 int dw = QApplication::desktop()->width(); 1352 int dw = QApplication::desktop()->width();
1353 int dh = QApplication::desktop()->height(); 1353 int dh = QApplication::desktop()->height();
1354 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1354 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1355 bar.show(); 1355 bar.show();
1356 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1356 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1357 qApp->processEvents(); 1357 qApp->processEvents();
1358 count = 0; 1358 count = 0;
1359 int addCount = 0; 1359 int addCount = 0;
1360 KCal::Attendee* a = 0; 1360 KCal::Attendee* a = 0;
1361 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1361 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1362 if ( ! bar.isVisible() ) 1362 if ( ! bar.isVisible() )
1363 return false; 1363 return false;
1364 bar.setProgress( count++ ); 1364 bar.setProgress( count++ );
1365 qApp->processEvents(); 1365 qApp->processEvents();
1366 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1366 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1367 if ( (*it).birthday().date().isValid() ){ 1367 if ( (*it).birthday().date().isValid() ){
1368 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1368 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1369 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1369 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1370 ++addCount; 1370 ++addCount;
1371 } 1371 }
1372 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1372 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1373 if ( anni.isValid() ){ 1373 if ( anni.isValid() ){
1374 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1374 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1375 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1375 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1376 ++addCount; 1376 ++addCount;
1377 } 1377 }
1378 } 1378 }
1379 updateView(); 1379 updateView();
1380 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1380 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1381#endif 1381#endif
1382 return true; 1382 return true;
1383} 1383}
1384 1384
1385bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1385bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1386{ 1386{
1387 //qDebug("addAnni "); 1387 //qDebug("addAnni ");
1388 Event * ev = new Event(); 1388 Event * ev = new Event();
1389 if ( a ) { 1389 if ( a ) {
1390 ev->addAttendee( a ); 1390 ev->addAttendee( a );
1391 } 1391 }
1392 QString kind; 1392 QString kind;
1393 if ( birthday ) 1393 if ( birthday )
1394 kind = i18n( "Birthday" ); 1394 kind = i18n( "Birthday" );
1395 else 1395 else
1396 kind = i18n( "Anniversary" ); 1396 kind = i18n( "Anniversary" );
1397 ev->setSummary( name + " - " + kind ); 1397 ev->setSummary( name + " - " + kind );
1398 ev->setOrganizer( "nobody@nowhere" ); 1398 ev->setOrganizer( "nobody@nowhere" );
1399 ev->setCategories( kind ); 1399 ev->setCategories( kind );
1400 ev->setDtStart( QDateTime(date) ); 1400 ev->setDtStart( QDateTime(date) );
1401 ev->setDtEnd( QDateTime(date) ); 1401 ev->setDtEnd( QDateTime(date) );
1402 ev->setFloats( true ); 1402 ev->setFloats( true );
1403 Recurrence * rec = ev->recurrence(); 1403 Recurrence * rec = ev->recurrence();
1404 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1404 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1405 rec->addYearlyNum( date.month() ); 1405 rec->addYearlyNum( date.month() );
1406 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1406 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1407 delete ev; 1407 delete ev;
1408 return false; 1408 return false;
1409 } 1409 }
1410 return true; 1410 return true;
1411 1411
1412} 1412}
1413bool CalendarView::importQtopia( const QString &categories, 1413bool CalendarView::importQtopia( const QString &categories,
1414 const QString &datebook, 1414 const QString &datebook,
1415 const QString &todolist ) 1415 const QString &todolist )
1416{ 1416{
1417 1417
1418 QtopiaFormat qtopiaFormat; 1418 QtopiaFormat qtopiaFormat;
1419 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1419 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1420 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1420 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1421 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1421 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1422 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1422 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1423 1423
1424 updateView(); 1424 updateView();
1425 return true; 1425 return true;
1426 1426
1427#if 0 1427#if 0
1428 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1428 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1429 mCurrentSyncDevice = "qtopia-XML"; 1429 mCurrentSyncDevice = "qtopia-XML";
1430 if ( KOPrefs::instance()->mAskForPreferences ) 1430 if ( KOPrefs::instance()->mAskForPreferences )
1431 edit_sync_options(); 1431 edit_sync_options();
1432 qApp->processEvents(); 1432 qApp->processEvents();
1433 CalendarLocal* calendar = new CalendarLocal(); 1433 CalendarLocal* calendar = new CalendarLocal();
1434 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1434 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1435 bool syncOK = false; 1435 bool syncOK = false;
1436 QtopiaFormat qtopiaFormat; 1436 QtopiaFormat qtopiaFormat;
1437 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1437 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1438 bool loadOk = true; 1438 bool loadOk = true;
1439 if ( !categories.isEmpty() ) 1439 if ( !categories.isEmpty() )
1440 loadOk = qtopiaFormat.load( calendar, categories ); 1440 loadOk = qtopiaFormat.load( calendar, categories );
1441 if ( loadOk && !datebook.isEmpty() ) 1441 if ( loadOk && !datebook.isEmpty() )
1442 loadOk = qtopiaFormat.load( calendar, datebook ); 1442 loadOk = qtopiaFormat.load( calendar, datebook );
1443 if ( loadOk && !todolist.isEmpty() ) 1443 if ( loadOk && !todolist.isEmpty() )
1444 loadOk = qtopiaFormat.load( calendar, todolist ); 1444 loadOk = qtopiaFormat.load( calendar, todolist );
1445 1445
1446 if ( loadOk ) { 1446 if ( loadOk ) {
1447 getEventViewerDialog()->setSyncMode( true ); 1447 getEventViewerDialog()->setSyncMode( true );
1448 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1448 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1449 getEventViewerDialog()->setSyncMode( false ); 1449 getEventViewerDialog()->setSyncMode( false );
1450 qApp->processEvents(); 1450 qApp->processEvents();
1451 if ( syncOK ) { 1451 if ( syncOK ) {
1452 if ( KOPrefs::instance()->mWriteBackFile ) 1452 if ( KOPrefs::instance()->mWriteBackFile )
1453 { 1453 {
1454 // write back XML file 1454 // write back XML file
1455 1455
1456 } 1456 }
1457 setModified( true ); 1457 setModified( true );
1458 } 1458 }
1459 } else { 1459 } else {
1460 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1460 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1461 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1461 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1462 question, i18n("Ok")) ; 1462 question, i18n("Ok")) ;
1463 } 1463 }
1464 delete calendar; 1464 delete calendar;
1465 updateView(); 1465 updateView();
1466 return syncOK; 1466 return syncOK;
1467 1467
1468 1468
1469#endif 1469#endif
1470 1470
1471} 1471}
1472 1472
1473void CalendarView::setSyncEventsReadOnly() 1473void CalendarView::setSyncEventsReadOnly()
1474{ 1474{
1475 Event * ev; 1475 Event * ev;
1476 QPtrList<Event> eL = mCalendar->rawEvents(); 1476 QPtrList<Event> eL = mCalendar->rawEvents();
1477 ev = eL.first(); 1477 ev = eL.first();
1478 while ( ev ) { 1478 while ( ev ) {
1479 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1479 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1480 ev->setReadOnly( true ); 1480 ev->setReadOnly( true );
1481 ev = eL.next(); 1481 ev = eL.next();
1482 } 1482 }
1483} 1483}
1484bool CalendarView::openCalendar(QString filename, bool merge) 1484bool CalendarView::openCalendar(QString filename, bool merge)
1485{ 1485{
1486 1486
1487 if (filename.isEmpty()) { 1487 if (filename.isEmpty()) {
1488 return false; 1488 return false;
1489 } 1489 }
1490 1490
1491 if (!QFile::exists(filename)) { 1491 if (!QFile::exists(filename)) {
1492 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1492 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1493 return false; 1493 return false;
1494 } 1494 }
1495 1495
1496 globalFlagBlockAgenda = 1; 1496 globalFlagBlockAgenda = 1;
1497 if (!merge) mCalendar->close(); 1497 if (!merge) mCalendar->close();
1498 1498
1499 mStorage->setFileName( filename ); 1499 mStorage->setFileName( filename );
1500 1500
1501 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1501 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1502 if ( merge ) ;//setModified( true ); 1502 if ( merge ) ;//setModified( true );
1503 else { 1503 else {
1504 //setModified( true ); 1504 //setModified( true );
1505 mViewManager->setDocumentId( filename ); 1505 mViewManager->setDocumentId( filename );
1506 mDialogManager->setDocumentId( filename ); 1506 mDialogManager->setDocumentId( filename );
1507 mTodoList->setDocumentId( filename ); 1507 mTodoList->setDocumentId( filename );
1508 } 1508 }
1509 globalFlagBlockAgenda = 2; 1509 globalFlagBlockAgenda = 2;
1510 // if ( getLastSyncEvent() ) 1510 // if ( getLastSyncEvent() )
1511 // getLastSyncEvent()->setReadOnly( true ); 1511 // getLastSyncEvent()->setReadOnly( true );
1512 mCalendar->reInitAlarmSettings(); 1512 mCalendar->reInitAlarmSettings();
1513 setSyncEventsReadOnly(); 1513 setSyncEventsReadOnly();
1514 updateUnmanagedViews(); 1514 updateUnmanagedViews();
1515 updateView(); 1515 updateView();
1516 if ( filename != MainWindow::defaultFileName() ) 1516 if ( filename != MainWindow::defaultFileName() )
1517 saveCalendar( MainWindow::defaultFileName() ); 1517 saveCalendar( MainWindow::defaultFileName() );
1518 loadedFileVersion = QDateTime::currentDateTime(); 1518 loadedFileVersion = QDateTime::currentDateTime();
1519 return true; 1519 return true;
1520 } else { 1520 } else {
1521 // while failing to load, the calendar object could 1521 // while failing to load, the calendar object could
1522 // have become partially populated. Clear it out. 1522 // have become partially populated. Clear it out.
1523 if ( !merge ) mCalendar->close(); 1523 if ( !merge ) mCalendar->close();
1524 1524
1525 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1525 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1526 1526
1527 globalFlagBlockAgenda = 2; 1527 globalFlagBlockAgenda = 2;
1528 updateView(); 1528 updateView();
1529 } 1529 }
1530 return false; 1530 return false;
1531} 1531}
1532void CalendarView::setLoadedFileVersion(QDateTime dt) 1532void CalendarView::setLoadedFileVersion(QDateTime dt)
1533{ 1533{
1534 loadedFileVersion = dt; 1534 loadedFileVersion = dt;
1535} 1535}
1536bool CalendarView::checkFileChanged(QString fn) 1536bool CalendarView::checkFileChanged(QString fn)
1537{ 1537{
1538 QFileInfo finf ( fn ); 1538 QFileInfo finf ( fn );
1539 if ( !finf.exists() ) 1539 if ( !finf.exists() )
1540 return true; 1540 return true;
1541 QDateTime dt = finf.lastModified (); 1541 QDateTime dt = finf.lastModified ();
1542 if ( dt <= loadedFileVersion ) 1542 if ( dt <= loadedFileVersion )
1543 return false; 1543 return false;
1544 return true; 1544 return true;
1545 1545
1546} 1546}
1547bool CalendarView::checkFileVersion(QString fn) 1547bool CalendarView::checkFileVersion(QString fn)
1548{ 1548{
1549 QFileInfo finf ( fn ); 1549 QFileInfo finf ( fn );
1550 if ( !finf.exists() ) 1550 if ( !finf.exists() )
1551 return true; 1551 return true;
1552 QDateTime dt = finf.lastModified (); 1552 QDateTime dt = finf.lastModified ();
1553 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1553 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1554 //qDebug("file on disk version %s",dt.toString().latin1()); 1554 //qDebug("file on disk version %s",dt.toString().latin1());
1555 if ( dt <= loadedFileVersion ) 1555 if ( dt <= loadedFileVersion )
1556 return true; 1556 return true;
1557 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)) , 1557 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)) ,
1558 i18n("KO/Pi Warning"),i18n("Overwrite"), 1558 i18n("KO/Pi Warning"),i18n("Overwrite"),
1559 i18n("Sync+save")); 1559 i18n("Sync+save"));
1560 1560
1561 if ( km == KMessageBox::Cancel ) 1561 if ( km == KMessageBox::Cancel )
1562 return false; 1562 return false;
1563 if ( km == KMessageBox::Yes ) 1563 if ( km == KMessageBox::Yes )
1564 return true; 1564 return true;
1565 1565
1566 setSyncDevice("deleteaftersync" ); 1566 setSyncDevice("deleteaftersync" );
1567 KOPrefs::instance()->mAskForPreferences = true; 1567 KOPrefs::instance()->mAskForPreferences = true;
1568 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1568 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1569 KOPrefs::instance()->mWriteBackFile = false; 1569 KOPrefs::instance()->mWriteBackFile = false;
1570 KOPrefs::instance()->mWriteBackExistingOnly = false; 1570 KOPrefs::instance()->mWriteBackExistingOnly = false;
1571 KOPrefs::instance()->mShowSyncSummary = false; 1571 KOPrefs::instance()->mShowSyncSummary = false;
1572 syncCalendar( fn, 3 ); 1572 syncCalendar( fn, 3 );
1573 Event * e = getLastSyncEvent(); 1573 Event * e = getLastSyncEvent();
1574 mCalendar->deleteEvent ( e ); 1574 mCalendar->deleteEvent ( e );
1575 updateView(); 1575 updateView();
1576 return true; 1576 return true;
1577} 1577}
1578 1578
1579bool CalendarView::saveCalendar( QString filename ) 1579bool CalendarView::saveCalendar( QString filename )
1580{ 1580{
1581 1581
1582 // Store back all unsaved data into calendar object 1582 // Store back all unsaved data into calendar object
1583 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1583 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1584 if ( mViewManager->currentView() ) 1584 if ( mViewManager->currentView() )
1585 mViewManager->currentView()->flushView(); 1585 mViewManager->currentView()->flushView();
1586 1586
1587 //mStorage->setFileName( filename ); 1587 //mStorage->setFileName( filename );
1588 1588
1589 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1589 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1590 mStorage->setFileName( filename ); 1590 mStorage->setFileName( filename );
1591 bool success; 1591 bool success;
1592 success = mStorage->save(); 1592 success = mStorage->save();
1593 if ( !success ) { 1593 if ( !success ) {
1594 return false; 1594 return false;
1595 } 1595 }
1596 1596
1597 return true; 1597 return true;
1598} 1598}
1599 1599
1600void CalendarView::closeCalendar() 1600void CalendarView::closeCalendar()
1601{ 1601{
1602 1602
1603 // child windows no longer valid 1603 // child windows no longer valid
1604 emit closingDown(); 1604 emit closingDown();
1605 1605
1606 mCalendar->close(); 1606 mCalendar->close();
1607 setModified(false); 1607 setModified(false);
1608 updateView(); 1608 updateView();
1609} 1609}
1610 1610
1611void CalendarView::archiveCalendar() 1611void CalendarView::archiveCalendar()
1612{ 1612{
1613 mDialogManager->showArchiveDialog(); 1613 mDialogManager->showArchiveDialog();
1614} 1614}
1615 1615
1616 1616
1617void CalendarView::readSettings() 1617void CalendarView::readSettings()
1618{ 1618{
1619 1619
1620 1620
1621 // mViewManager->showAgendaView(); 1621 // mViewManager->showAgendaView();
1622 QString str; 1622 QString str;
1623 //qDebug("CalendarView::readSettings() "); 1623 //qDebug("CalendarView::readSettings() ");
1624 // read settings from the KConfig, supplying reasonable 1624 // read settings from the KConfig, supplying reasonable
1625 // defaults where none are to be found 1625 // defaults where none are to be found
1626 KConfig *config = KOGlobals::config(); 1626 KConfig *config = KOGlobals::config();
1627#ifndef KORG_NOSPLITTER 1627#ifndef KORG_NOSPLITTER
1628 config->setGroup("KOrganizer Geometry"); 1628 config->setGroup("KOrganizer Geometry");
1629 1629
1630 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1630 QValueList<int> sizes = config->readIntListEntry("Separator1");
1631 if (sizes.count() != 2) { 1631 if (sizes.count() != 2) {
1632 sizes << mDateNavigator->minimumSizeHint().width(); 1632 sizes << mDateNavigator->minimumSizeHint().width();
1633 sizes << 300; 1633 sizes << 300;
1634 } 1634 }
1635 mPanner->setSizes(sizes); 1635 mPanner->setSizes(sizes);
1636 1636
1637 sizes = config->readIntListEntry("Separator2"); 1637 sizes = config->readIntListEntry("Separator2");
1638 if ( ( mResourceView && sizes.count() == 4 ) || 1638 if ( ( mResourceView && sizes.count() == 4 ) ||
1639 ( !mResourceView && sizes.count() == 3 ) ) { 1639 ( !mResourceView && sizes.count() == 3 ) ) {
1640 mLeftSplitter->setSizes(sizes); 1640 mLeftSplitter->setSizes(sizes);
1641 } 1641 }
1642#endif 1642#endif
1643 globalFlagBlockAgenda = 1; 1643 globalFlagBlockAgenda = 1;
1644 mViewManager->showAgendaView(); 1644 mViewManager->showAgendaView();
1645 //mViewManager->readSettings( config ); 1645 //mViewManager->readSettings( config );
1646 mTodoList->restoreLayout(config,QString("Todo Layout")); 1646 mTodoList->restoreLayout(config,QString("Todo Layout"));
1647 readFilterSettings(config); 1647 readFilterSettings(config);
1648 config->setGroup( "Views" ); 1648 config->setGroup( "Views" );
1649 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1649 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1650 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1650 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1651 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1651 else if ( dateCount == 7 ) mNavigator->selectWeek();
1652 else mNavigator->selectDates( dateCount ); 1652 else mNavigator->selectDates( dateCount );
1653 // mViewManager->readSettings( config ); 1653 // mViewManager->readSettings( config );
1654 updateConfig(); 1654 updateConfig();
1655 globalFlagBlockAgenda = 2; 1655 globalFlagBlockAgenda = 2;
1656 mViewManager->readSettings( config ); 1656 mViewManager->readSettings( config );
1657#ifdef DESKTOP_VERSION 1657#ifdef DESKTOP_VERSION
1658 config->setGroup("WidgetLayout"); 1658 config->setGroup("WidgetLayout");
1659 QStringList list; 1659 QStringList list;
1660 list = config->readListEntry("MainLayout"); 1660 list = config->readListEntry("MainLayout");
1661 int x,y,w,h; 1661 int x,y,w,h;
1662 if ( ! list.isEmpty() ) { 1662 if ( ! list.isEmpty() ) {
1663 x = list[0].toInt(); 1663 x = list[0].toInt();
1664 y = list[1].toInt(); 1664 y = list[1].toInt();
1665 w = list[2].toInt(); 1665 w = list[2].toInt();
1666 h = list[3].toInt(); 1666 h = list[3].toInt();
1667 topLevelWidget()->setGeometry(x,y,w,h); 1667 topLevelWidget()->setGeometry(x,y,w,h);
1668 1668
1669 } else { 1669 } else {
1670 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1670 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1671 } 1671 }
1672 list = config->readListEntry("EditEventLayout"); 1672 list = config->readListEntry("EditEventLayout");
1673 if ( ! list.isEmpty() ) { 1673 if ( ! list.isEmpty() ) {
1674 x = list[0].toInt(); 1674 x = list[0].toInt();
1675 y = list[1].toInt(); 1675 y = list[1].toInt();
1676 w = list[2].toInt(); 1676 w = list[2].toInt();
1677 h = list[3].toInt(); 1677 h = list[3].toInt();
1678 mEventEditor->setGeometry(x,y,w,h); 1678 mEventEditor->setGeometry(x,y,w,h);
1679 1679
1680 } 1680 }
1681 list = config->readListEntry("EditTodoLayout"); 1681 list = config->readListEntry("EditTodoLayout");
1682 if ( ! list.isEmpty() ) { 1682 if ( ! list.isEmpty() ) {
1683 x = list[0].toInt(); 1683 x = list[0].toInt();
1684 y = list[1].toInt(); 1684 y = list[1].toInt();
1685 w = list[2].toInt(); 1685 w = list[2].toInt();
1686 h = list[3].toInt(); 1686 h = list[3].toInt();
1687 mTodoEditor->setGeometry(x,y,w,h); 1687 mTodoEditor->setGeometry(x,y,w,h);
1688 1688
1689 } 1689 }
1690 list = config->readListEntry("ViewerLayout"); 1690 list = config->readListEntry("ViewerLayout");
1691 if ( ! list.isEmpty() ) { 1691 if ( ! list.isEmpty() ) {
1692 x = list[0].toInt(); 1692 x = list[0].toInt();
1693 y = list[1].toInt(); 1693 y = list[1].toInt();
1694 w = list[2].toInt(); 1694 w = list[2].toInt();
1695 h = list[3].toInt(); 1695 h = list[3].toInt();
1696 getEventViewerDialog()->setGeometry(x,y,w,h); 1696 getEventViewerDialog()->setGeometry(x,y,w,h);
1697 } 1697 }
1698#endif 1698#endif
1699 1699
1700} 1700}
1701 1701
1702 1702
1703void CalendarView::writeSettings() 1703void CalendarView::writeSettings()
1704{ 1704{
1705 // kdDebug() << "CalendarView::writeSettings" << endl; 1705 // kdDebug() << "CalendarView::writeSettings" << endl;
1706 1706
1707 KConfig *config = KOGlobals::config(); 1707 KConfig *config = KOGlobals::config();
1708 1708
1709#ifndef KORG_NOSPLITTER 1709#ifndef KORG_NOSPLITTER
1710 config->setGroup("KOrganizer Geometry"); 1710 config->setGroup("KOrganizer Geometry");
1711 1711
1712 QValueList<int> list = mPanner->sizes(); 1712 QValueList<int> list = mPanner->sizes();
1713 config->writeEntry("Separator1",list); 1713 config->writeEntry("Separator1",list);
1714 1714
1715 list = mLeftSplitter->sizes(); 1715 list = mLeftSplitter->sizes();
1716 config->writeEntry("Separator2",list); 1716 config->writeEntry("Separator2",list);
1717#endif 1717#endif
1718 1718
1719 mViewManager->writeSettings( config ); 1719 mViewManager->writeSettings( config );
1720 mTodoList->saveLayout(config,QString("Todo Layout")); 1720 mTodoList->saveLayout(config,QString("Todo Layout"));
1721 mDialogManager->writeSettings( config ); 1721 mDialogManager->writeSettings( config );
1722 //KOPrefs::instance()->usrWriteConfig(); 1722 //KOPrefs::instance()->usrWriteConfig();
1723 KOPrefs::instance()->writeConfig(); 1723 KOPrefs::instance()->writeConfig();
1724 1724
1725 writeFilterSettings(config); 1725 writeFilterSettings(config);
1726 1726
1727 config->setGroup( "Views" ); 1727 config->setGroup( "Views" );
1728 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1728 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1729 1729
1730#ifdef DESKTOP_VERSION 1730#ifdef DESKTOP_VERSION
1731 config->setGroup("WidgetLayout"); 1731 config->setGroup("WidgetLayout");
1732 QStringList list ;//= config->readListEntry("MainLayout"); 1732 QStringList list ;//= config->readListEntry("MainLayout");
1733 int x,y,w,h; 1733 int x,y,w,h;
1734 QWidget* wid; 1734 QWidget* wid;
1735 wid = topLevelWidget(); 1735 wid = topLevelWidget();
1736 x = wid->geometry().x(); 1736 x = wid->geometry().x();
1737 y = wid->geometry().y(); 1737 y = wid->geometry().y();
1738 w = wid->width(); 1738 w = wid->width();
1739 h = wid->height(); 1739 h = wid->height();
1740 list.clear(); 1740 list.clear();
1741 list << QString::number( x ); 1741 list << QString::number( x );
1742 list << QString::number( y ); 1742 list << QString::number( y );
1743 list << QString::number( w ); 1743 list << QString::number( w );
1744 list << QString::number( h ); 1744 list << QString::number( h );
1745 config->writeEntry("MainLayout",list ); 1745 config->writeEntry("MainLayout",list );
1746 1746
1747 wid = mEventEditor; 1747 wid = mEventEditor;
1748 x = wid->geometry().x(); 1748 x = wid->geometry().x();
1749 y = wid->geometry().y(); 1749 y = wid->geometry().y();
1750 w = wid->width(); 1750 w = wid->width();
1751 h = wid->height(); 1751 h = wid->height();
1752 list.clear(); 1752 list.clear();
1753 list << QString::number( x ); 1753 list << QString::number( x );
1754 list << QString::number( y ); 1754 list << QString::number( y );
1755 list << QString::number( w ); 1755 list << QString::number( w );
1756 list << QString::number( h ); 1756 list << QString::number( h );
1757 config->writeEntry("EditEventLayout",list ); 1757 config->writeEntry("EditEventLayout",list );
1758 1758
1759 wid = mTodoEditor; 1759 wid = mTodoEditor;
1760 x = wid->geometry().x(); 1760 x = wid->geometry().x();
1761 y = wid->geometry().y(); 1761 y = wid->geometry().y();
1762 w = wid->width(); 1762 w = wid->width();
1763 h = wid->height(); 1763 h = wid->height();
1764 list.clear(); 1764 list.clear();
1765 list << QString::number( x ); 1765 list << QString::number( x );
1766 list << QString::number( y ); 1766 list << QString::number( y );
1767 list << QString::number( w ); 1767 list << QString::number( w );
1768 list << QString::number( h ); 1768 list << QString::number( h );
1769 config->writeEntry("EditTodoLayout",list ); 1769 config->writeEntry("EditTodoLayout",list );
1770 wid = getEventViewerDialog(); 1770 wid = getEventViewerDialog();
1771 x = wid->geometry().x(); 1771 x = wid->geometry().x();
1772 y = wid->geometry().y(); 1772 y = wid->geometry().y();
1773 w = wid->width(); 1773 w = wid->width();
1774 h = wid->height(); 1774 h = wid->height();
1775 list.clear(); 1775 list.clear();
1776 list << QString::number( x ); 1776 list << QString::number( x );
1777 list << QString::number( y ); 1777 list << QString::number( y );
1778 list << QString::number( w ); 1778 list << QString::number( w );
1779 list << QString::number( h ); 1779 list << QString::number( h );
1780 config->writeEntry("ViewerLayout",list ); 1780 config->writeEntry("ViewerLayout",list );
1781 wid = mDialogManager->getSearchDialog(); 1781 wid = mDialogManager->getSearchDialog();
1782 if ( wid ) { 1782 if ( wid ) {
1783 x = wid->geometry().x(); 1783 x = wid->geometry().x();
1784 y = wid->geometry().y(); 1784 y = wid->geometry().y();
1785 w = wid->width(); 1785 w = wid->width();
1786 h = wid->height(); 1786 h = wid->height();
1787 list.clear(); 1787 list.clear();
1788 list << QString::number( x ); 1788 list << QString::number( x );
1789 list << QString::number( y ); 1789 list << QString::number( y );
1790 list << QString::number( w ); 1790 list << QString::number( w );
1791 list << QString::number( h ); 1791 list << QString::number( h );
1792 config->writeEntry("SearchLayout",list ); 1792 config->writeEntry("SearchLayout",list );
1793 } 1793 }
1794#endif 1794#endif
1795 1795
1796 1796
1797 config->sync(); 1797 config->sync();
1798} 1798}
1799 1799
1800void CalendarView::readFilterSettings(KConfig *config) 1800void CalendarView::readFilterSettings(KConfig *config)
1801{ 1801{
1802 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1802 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1803 1803
1804 mFilters.clear(); 1804 mFilters.clear();
1805 1805
1806 config->setGroup("General"); 1806 config->setGroup("General");
1807 QStringList filterList = config->readListEntry("CalendarFilters"); 1807 QStringList filterList = config->readListEntry("CalendarFilters");
1808 1808
1809 QStringList::ConstIterator it = filterList.begin(); 1809 QStringList::ConstIterator it = filterList.begin();
1810 QStringList::ConstIterator end = filterList.end(); 1810 QStringList::ConstIterator end = filterList.end();
1811 while(it != end) { 1811 while(it != end) {
1812 // kdDebug() << " filter: " << (*it) << endl; 1812 // kdDebug() << " filter: " << (*it) << endl;
1813 1813
1814 CalFilter *filter; 1814 CalFilter *filter;
1815 filter = new CalFilter(*it); 1815 filter = new CalFilter(*it);
1816 config->setGroup("Filter_" + (*it)); 1816 config->setGroup("Filter_" + (*it));
1817 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1817 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1818 filter->setCriteria(config->readNumEntry("Criteria",0)); 1818 filter->setCriteria(config->readNumEntry("Criteria",0));
1819 filter->setCategoryList(config->readListEntry("CategoryList")); 1819 filter->setCategoryList(config->readListEntry("CategoryList"));
1820 mFilters.append(filter); 1820 mFilters.append(filter);
1821 1821
1822 ++it; 1822 ++it;
1823 } 1823 }
1824 1824
1825 if (mFilters.count() == 0) { 1825 if (mFilters.count() == 0) {
1826 CalFilter *filter = new CalFilter(i18n("Default")); 1826 CalFilter *filter = new CalFilter(i18n("Default"));
1827 mFilters.append(filter); 1827 mFilters.append(filter);
1828 } 1828 }
1829 mFilterView->updateFilters(); 1829 mFilterView->updateFilters();
1830 config->setGroup("FilterView"); 1830 config->setGroup("FilterView");
1831 1831
1832 mFilterView->blockSignals(true); 1832 mFilterView->blockSignals(true);
1833 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 1833 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
1834 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 1834 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
1835 mFilterView->blockSignals(false); 1835 mFilterView->blockSignals(false);
1836 // We do it manually to avoid it being done twice by the above calls 1836 // We do it manually to avoid it being done twice by the above calls
1837 updateFilter(); 1837 updateFilter();
1838} 1838}
1839 1839
1840void CalendarView::writeFilterSettings(KConfig *config) 1840void CalendarView::writeFilterSettings(KConfig *config)
1841{ 1841{
1842 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 1842 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
1843 1843
1844 QStringList filterList; 1844 QStringList filterList;
1845 1845
1846 CalFilter *filter = mFilters.first(); 1846 CalFilter *filter = mFilters.first();
1847 while(filter) { 1847 while(filter) {
1848 // kdDebug() << " fn: " << filter->name() << endl; 1848 // kdDebug() << " fn: " << filter->name() << endl;
1849 filterList << filter->name(); 1849 filterList << filter->name();
1850 config->setGroup("Filter_" + filter->name()); 1850 config->setGroup("Filter_" + filter->name());
1851 config->writeEntry("Criteria",filter->criteria()); 1851 config->writeEntry("Criteria",filter->criteria());
1852 config->writeEntry("CategoryList",filter->categoryList()); 1852 config->writeEntry("CategoryList",filter->categoryList());
1853 filter = mFilters.next(); 1853 filter = mFilters.next();
1854 } 1854 }
1855 config->setGroup("General"); 1855 config->setGroup("General");
1856 config->writeEntry("CalendarFilters",filterList); 1856 config->writeEntry("CalendarFilters",filterList);
1857 1857
1858 config->setGroup("FilterView"); 1858 config->setGroup("FilterView");
1859 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 1859 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
1860 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 1860 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
1861} 1861}
1862 1862
1863 1863
1864void CalendarView::goToday() 1864void CalendarView::goToday()
1865{ 1865{
1866 mNavigator->selectToday(); 1866 mNavigator->selectToday();
1867} 1867}
1868 1868
1869void CalendarView::goNext() 1869void CalendarView::goNext()
1870{ 1870{
1871 mNavigator->selectNext(); 1871 mNavigator->selectNext();
1872} 1872}
1873 1873
1874void CalendarView::goPrevious() 1874void CalendarView::goPrevious()
1875{ 1875{
1876 mNavigator->selectPrevious(); 1876 mNavigator->selectPrevious();
1877} 1877}
1878void CalendarView::goNextMonth() 1878void CalendarView::goNextMonth()
1879{ 1879{
1880 mNavigator->selectNextMonth(); 1880 mNavigator->selectNextMonth();
1881} 1881}
1882 1882
1883void CalendarView::goPreviousMonth() 1883void CalendarView::goPreviousMonth()
1884{ 1884{
1885 mNavigator->selectPreviousMonth(); 1885 mNavigator->selectPreviousMonth();
1886} 1886}
1887void CalendarView::writeLocale() 1887void CalendarView::writeLocale()
1888{ 1888{
1889 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 1889 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
1890 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 1890 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
1891 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 1891 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
1892 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 1892 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
1893 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 1893 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
1894 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 1894 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
1895 dummy = KOPrefs::instance()->mUserDateFormatShort; 1895 dummy = KOPrefs::instance()->mUserDateFormatShort;
1896 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 1896 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
1897 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 1897 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
1898 KOPrefs::instance()->mDaylightsavingStart, 1898 KOPrefs::instance()->mDaylightsavingStart,
1899 KOPrefs::instance()->mDaylightsavingEnd ); 1899 KOPrefs::instance()->mDaylightsavingEnd );
1900 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId ); 1900 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId );
1901} 1901}
1902void CalendarView::updateConfig() 1902void CalendarView::updateConfig()
1903{ 1903{
1904 writeLocale(); 1904 writeLocale();
1905 if ( KOPrefs::instance()->mUseAppColors ) 1905 if ( KOPrefs::instance()->mUseAppColors )
1906 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 1906 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
1907 emit configChanged(); 1907 emit configChanged();
1908 mTodoList->updateConfig(); 1908 mTodoList->updateConfig();
1909 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 1909 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
1910 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1910 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1911 // To make the "fill window" configurations work 1911 // To make the "fill window" configurations work
1912 //mViewManager->raiseCurrentView(); 1912 //mViewManager->raiseCurrentView();
1913} 1913}
1914 1914
1915 1915
1916void CalendarView::eventChanged(Event *event) 1916void CalendarView::eventChanged(Event *event)
1917{ 1917{
1918 changeEventDisplay(event,KOGlobals::EVENTEDITED); 1918 changeEventDisplay(event,KOGlobals::EVENTEDITED);
1919 //updateUnmanagedViews(); 1919 //updateUnmanagedViews();
1920} 1920}
1921 1921
1922void CalendarView::eventAdded(Event *event) 1922void CalendarView::eventAdded(Event *event)
1923{ 1923{
1924 changeEventDisplay(event,KOGlobals::EVENTADDED); 1924 changeEventDisplay(event,KOGlobals::EVENTADDED);
1925} 1925}
1926 1926
1927void CalendarView::eventToBeDeleted(Event *) 1927void CalendarView::eventToBeDeleted(Event *)
1928{ 1928{
1929 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 1929 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
1930} 1930}
1931 1931
1932void CalendarView::eventDeleted() 1932void CalendarView::eventDeleted()
1933{ 1933{
1934 changeEventDisplay(0,KOGlobals::EVENTDELETED); 1934 changeEventDisplay(0,KOGlobals::EVENTDELETED);
1935} 1935}
1936void CalendarView::changeTodoDisplay(Todo *which, int action) 1936void CalendarView::changeTodoDisplay(Todo *which, int action)
1937{ 1937{
1938 changeIncidenceDisplay((Incidence *)which, action); 1938 changeIncidenceDisplay((Incidence *)which, action);
1939 mDateNavigator->updateView(); //LR 1939 mDateNavigator->updateView(); //LR
1940 //mDialogManager->updateSearchDialog(); 1940 //mDialogManager->updateSearchDialog();
1941 1941
1942 if (which) { 1942 if (which) {
1943 mViewManager->updateWNview(); 1943 mViewManager->updateWNview();
1944 //mTodoList->updateView(); 1944 //mTodoList->updateView();
1945 } 1945 }
1946 1946
1947} 1947}
1948 1948
1949void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 1949void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
1950{ 1950{
1951 updateUnmanagedViews(); 1951 updateUnmanagedViews();
1952 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 1952 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
1953 if ( action == KOGlobals::EVENTDELETED ) { //delete 1953 if ( action == KOGlobals::EVENTDELETED ) { //delete
1954 mCalendar->checkAlarmForIncidence( 0, true ); 1954 mCalendar->checkAlarmForIncidence( 0, true );
1955 if ( mEventViewerDialog ) 1955 if ( mEventViewerDialog )
1956 mEventViewerDialog->hide(); 1956 mEventViewerDialog->hide();
1957 } 1957 }
1958 else 1958 else
1959 mCalendar->checkAlarmForIncidence( which , false ); 1959 mCalendar->checkAlarmForIncidence( which , false );
1960} 1960}
1961 1961
1962// most of the changeEventDisplays() right now just call the view's 1962// most of the changeEventDisplays() right now just call the view's
1963// total update mode, but they SHOULD be recoded to be more refresh-efficient. 1963// total update mode, but they SHOULD be recoded to be more refresh-efficient.
1964void CalendarView::changeEventDisplay(Event *which, int action) 1964void CalendarView::changeEventDisplay(Event *which, int action)
1965{ 1965{
1966 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 1966 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
1967 changeIncidenceDisplay((Incidence *)which, action); 1967 changeIncidenceDisplay((Incidence *)which, action);
1968 mDateNavigator->updateView(); 1968 mDateNavigator->updateView();
1969 //mDialogManager->updateSearchDialog(); 1969 //mDialogManager->updateSearchDialog();
1970 1970
1971 if (which) { 1971 if (which) {
1972 // If there is an event view visible update the display 1972 // If there is an event view visible update the display
1973 mViewManager->currentView()->changeEventDisplay(which,action); 1973 mViewManager->currentView()->changeEventDisplay(which,action);
1974 // TODO: check, if update needed 1974 // TODO: check, if update needed
1975 // if (which->getTodoStatus()) { 1975 // if (which->getTodoStatus()) {
1976 mTodoList->updateView(); 1976 mTodoList->updateView();
1977 // } 1977 // }
1978 } else { 1978 } else {
1979 mViewManager->currentView()->updateView(); 1979 mViewManager->currentView()->updateView();
1980 } 1980 }
1981} 1981}
1982 1982
1983 1983
1984void CalendarView::updateTodoViews() 1984void CalendarView::updateTodoViews()
1985{ 1985{
1986 1986
1987 mTodoList->updateView(); 1987 mTodoList->updateView();
1988 mViewManager->currentView()->updateView(); 1988 mViewManager->currentView()->updateView();
1989 1989
1990} 1990}
1991 1991
1992 1992
1993void CalendarView::updateView(const QDate &start, const QDate &end) 1993void CalendarView::updateView(const QDate &start, const QDate &end)
1994{ 1994{
1995 mTodoList->updateView(); 1995 mTodoList->updateView();
1996 mViewManager->updateView(start, end); 1996 mViewManager->updateView(start, end);
1997 //mDateNavigator->updateView(); 1997 //mDateNavigator->updateView();
1998} 1998}
1999 1999
2000void CalendarView::updateView() 2000void CalendarView::updateView()
2001{ 2001{
2002 DateList tmpList = mNavigator->selectedDates(); 2002 DateList tmpList = mNavigator->selectedDates();
2003 2003
2004 // We assume that the navigator only selects consecutive days. 2004 // We assume that the navigator only selects consecutive days.
2005 updateView( tmpList.first(), tmpList.last() ); 2005 updateView( tmpList.first(), tmpList.last() );
2006} 2006}
2007 2007
2008void CalendarView::updateUnmanagedViews() 2008void CalendarView::updateUnmanagedViews()
2009{ 2009{
2010 mDateNavigator->updateDayMatrix(); 2010 mDateNavigator->updateDayMatrix();
2011} 2011}
2012 2012
2013int CalendarView::msgItemDelete() 2013int CalendarView::msgItemDelete()
2014{ 2014{
2015 return KMessageBox::warningContinueCancel(this, 2015 return KMessageBox::warningContinueCancel(this,
2016 i18n("This item will be\npermanently deleted."), 2016 i18n("This item will be\npermanently deleted."),
2017 i18n("KO/Pi Confirmation"),i18n("Delete")); 2017 i18n("KO/Pi Confirmation"),i18n("Delete"));
2018} 2018}
2019 2019
2020 2020
2021void CalendarView::edit_cut() 2021void CalendarView::edit_cut()
2022{ 2022{
2023 Event *anEvent=0; 2023 Event *anEvent=0;
2024 2024
2025 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2025 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2026 2026
2027 if (mViewManager->currentView()->isEventView()) { 2027 if (mViewManager->currentView()->isEventView()) {
2028 if ( incidence && incidence->type() == "Event" ) { 2028 if ( incidence && incidence->type() == "Event" ) {
2029 anEvent = static_cast<Event *>(incidence); 2029 anEvent = static_cast<Event *>(incidence);
2030 } 2030 }
2031 } 2031 }
2032 2032
2033 if (!anEvent) { 2033 if (!anEvent) {
2034 KNotifyClient::beep(); 2034 KNotifyClient::beep();
2035 return; 2035 return;
2036 } 2036 }
2037 DndFactory factory( mCalendar ); 2037 DndFactory factory( mCalendar );
2038 factory.cutEvent(anEvent); 2038 factory.cutEvent(anEvent);
2039 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2039 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2040} 2040}
2041 2041
2042void CalendarView::edit_copy() 2042void CalendarView::edit_copy()
2043{ 2043{
2044 Event *anEvent=0; 2044 Event *anEvent=0;
2045 2045
2046 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2046 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2047 2047
2048 if (mViewManager->currentView()->isEventView()) { 2048 if (mViewManager->currentView()->isEventView()) {
2049 if ( incidence && incidence->type() == "Event" ) { 2049 if ( incidence && incidence->type() == "Event" ) {
2050 anEvent = static_cast<Event *>(incidence); 2050 anEvent = static_cast<Event *>(incidence);
2051 } 2051 }
2052 } 2052 }
2053 2053
2054 if (!anEvent) { 2054 if (!anEvent) {
2055 KNotifyClient::beep(); 2055 KNotifyClient::beep();
2056 return; 2056 return;
2057 } 2057 }
2058 DndFactory factory( mCalendar ); 2058 DndFactory factory( mCalendar );
2059 factory.copyEvent(anEvent); 2059 factory.copyEvent(anEvent);
2060} 2060}
2061 2061
2062void CalendarView::edit_paste() 2062void CalendarView::edit_paste()
2063{ 2063{
2064 QDate date = mNavigator->selectedDates().first(); 2064 QDate date = mNavigator->selectedDates().first();
2065 2065
2066 DndFactory factory( mCalendar ); 2066 DndFactory factory( mCalendar );
2067 Event *pastedEvent = factory.pasteEvent( date ); 2067 Event *pastedEvent = factory.pasteEvent( date );
2068 2068
2069 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2069 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2070} 2070}
2071 2071
2072void CalendarView::edit_options() 2072void CalendarView::edit_options()
2073{ 2073{
2074 mDialogManager->showOptionsDialog(); 2074 mDialogManager->showOptionsDialog();
2075 //writeSettings(); 2075 //writeSettings();
2076} 2076}
2077void CalendarView::edit_sync_options() 2077void CalendarView::edit_sync_options()
2078{ 2078{
2079 //mDialogManager->showSyncOptions(); 2079 //mDialogManager->showSyncOptions();
2080 //KOPrefs::instance()->mSyncAlgoPrefs 2080 //KOPrefs::instance()->mSyncAlgoPrefs
2081 QDialog dia( this, "dia", true ); 2081 QDialog dia( this, "dia", true );
2082 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2082 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2083 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2083 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2084 QVBoxLayout lay ( &dia ); 2084 QVBoxLayout lay ( &dia );
2085 lay.setSpacing( 2 ); 2085 lay.setSpacing( 2 );
2086 lay.setMargin( 3 ); 2086 lay.setMargin( 3 );
2087 lay.addWidget(&gr); 2087 lay.addWidget(&gr);
2088 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2088 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2089 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2089 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2090 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2090 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2091 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2091 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2092 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2092 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2093 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2093 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2094 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2094 //QRadioButton both( i18n("Take both on conflict"), &gr );
2095 QPushButton pb ( "OK", &dia); 2095 QPushButton pb ( "OK", &dia);
2096 lay.addWidget( &pb ); 2096 lay.addWidget( &pb );
2097 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2097 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2098 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) { 2098 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) {
2099 case 0: 2099 case 0:
2100 loc.setChecked( true); 2100 loc.setChecked( true);
2101 break; 2101 break;
2102 case 1: 2102 case 1:
2103 rem.setChecked( true ); 2103 rem.setChecked( true );
2104 break; 2104 break;
2105 case 2: 2105 case 2:
2106 newest.setChecked( true); 2106 newest.setChecked( true);
2107 break; 2107 break;
2108 case 3: 2108 case 3:
2109 ask.setChecked( true); 2109 ask.setChecked( true);
2110 break; 2110 break;
2111 case 4: 2111 case 4:
2112 f_loc.setChecked( true); 2112 f_loc.setChecked( true);
2113 break; 2113 break;
2114 case 5: 2114 case 5:
2115 f_rem.setChecked( true); 2115 f_rem.setChecked( true);
2116 break; 2116 break;
2117 case 6: 2117 case 6:
2118 // both.setChecked( true); 2118 // both.setChecked( true);
2119 break; 2119 break;
2120 default: 2120 default:
2121 break; 2121 break;
2122 } 2122 }
2123 if ( dia.exec() ) { 2123 if ( dia.exec() ) {
2124 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2124 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2125 } 2125 }
2126 2126
2127} 2127}
2128 2128
2129void CalendarView::slotSelectPickerDate( QDate d) 2129void CalendarView::slotSelectPickerDate( QDate d)
2130{ 2130{
2131 mDateFrame->hide(); 2131 mDateFrame->hide();
2132 if ( mDatePickerMode == 1 ) { 2132 if ( mDatePickerMode == 1 ) {
2133 mNavigator->slotDaySelect( d ); 2133 mNavigator->slotDaySelect( d );
2134 } else if ( mDatePickerMode == 2 ) { 2134 } else if ( mDatePickerMode == 2 ) {
2135 if ( mMoveIncidence->type() == "Todo" ) { 2135 if ( mMoveIncidence->type() == "Todo" ) {
2136 Todo * to = (Todo *) mMoveIncidence; 2136 Todo * to = (Todo *) mMoveIncidence;
2137 QTime tim; 2137 QTime tim;
2138 if ( to->hasDueDate() ) 2138 if ( to->hasDueDate() )
2139 tim = to->dtDue().time(); 2139 tim = to->dtDue().time();
2140 else { 2140 else {
2141 tim = QTime ( 0,0,0 ); 2141 tim = QTime ( 0,0,0 );
2142 to->setFloats( true ); 2142 to->setFloats( true );
2143 to->setHasDueDate( true ); 2143 to->setHasDueDate( true );
2144 } 2144 }
2145 QDateTime dt ( d,tim ); 2145 QDateTime dt ( d,tim );
2146 to->setDtDue( dt ); 2146 to->setDtDue( dt );
2147 todoChanged( to ); 2147 todoChanged( to );
2148 } else { 2148 } else {
2149 QTime tim = mMoveIncidence->dtStart().time(); 2149 QTime tim = mMoveIncidence->dtStart().time();
2150 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2150 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2151 QDateTime dt ( d,tim ); 2151 QDateTime dt ( d,tim );
2152 mMoveIncidence->setDtStart( dt ); 2152 mMoveIncidence->setDtStart( dt );
2153 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2153 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2154 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2154 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2155 } 2155 }
2156 2156
2157 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2157 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2158 } 2158 }
2159} 2159}
2160 2160
2161void CalendarView::removeCategories() 2161void CalendarView::removeCategories()
2162{ 2162{
2163 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2163 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2164 QStringList catList = KOPrefs::instance()->mCustomCategories; 2164 QStringList catList = KOPrefs::instance()->mCustomCategories;
2165 QStringList catIncList; 2165 QStringList catIncList;
2166 QStringList newCatList; 2166 QStringList newCatList;
2167 Incidence* inc = incList.first(); 2167 Incidence* inc = incList.first();
2168 int i; 2168 int i;
2169 int count = 0; 2169 int count = 0;
2170 while ( inc ) { 2170 while ( inc ) {
2171 newCatList.clear(); 2171 newCatList.clear();
2172 catIncList = inc->categories() ; 2172 catIncList = inc->categories() ;
2173 for( i = 0; i< catIncList.count(); ++i ) { 2173 for( i = 0; i< catIncList.count(); ++i ) {
2174 if ( catList.contains (catIncList[i])) 2174 if ( catList.contains (catIncList[i]))
2175 newCatList.append( catIncList[i] ); 2175 newCatList.append( catIncList[i] );
2176 } 2176 }
2177 newCatList.sort(); 2177 newCatList.sort();
2178 inc->setCategories( newCatList.join(",") ); 2178 inc->setCategories( newCatList.join(",") );
2179 inc = incList.next(); 2179 inc = incList.next();
2180 } 2180 }
2181} 2181}
2182 2182
2183int CalendarView::addCategories() 2183int CalendarView::addCategories()
2184{ 2184{
2185 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2185 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2186 QStringList catList = KOPrefs::instance()->mCustomCategories; 2186 QStringList catList = KOPrefs::instance()->mCustomCategories;
2187 QStringList catIncList; 2187 QStringList catIncList;
2188 Incidence* inc = incList.first(); 2188 Incidence* inc = incList.first();
2189 int i; 2189 int i;
2190 int count = 0; 2190 int count = 0;
2191 while ( inc ) { 2191 while ( inc ) {
2192 catIncList = inc->categories() ; 2192 catIncList = inc->categories() ;
2193 for( i = 0; i< catIncList.count(); ++i ) { 2193 for( i = 0; i< catIncList.count(); ++i ) {
2194 if ( !catList.contains (catIncList[i])) { 2194 if ( !catList.contains (catIncList[i])) {
2195 catList.append( catIncList[i] ); 2195 catList.append( catIncList[i] );
2196 //qDebug("add cat %s ", catIncList[i].latin1()); 2196 //qDebug("add cat %s ", catIncList[i].latin1());
2197 ++count; 2197 ++count;
2198 } 2198 }
2199 } 2199 }
2200 inc = incList.next(); 2200 inc = incList.next();
2201 } 2201 }
2202 catList.sort(); 2202 catList.sort();
2203 KOPrefs::instance()->mCustomCategories = catList; 2203 KOPrefs::instance()->mCustomCategories = catList;
2204 return count; 2204 return count;
2205} 2205}
2206 2206
2207void CalendarView::manageCategories() 2207void CalendarView::manageCategories()
2208{ 2208{
2209 KOCatPrefs* cp = new KOCatPrefs(); 2209 KOCatPrefs* cp = new KOCatPrefs();
2210 cp->show(); 2210 cp->show();
2211 int w =cp->sizeHint().width() ; 2211 int w =cp->sizeHint().width() ;
2212 int h = cp->sizeHint().height() ; 2212 int h = cp->sizeHint().height() ;
2213 int dw = QApplication::desktop()->width(); 2213 int dw = QApplication::desktop()->width();
2214 int dh = QApplication::desktop()->height(); 2214 int dh = QApplication::desktop()->height();
2215 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2215 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2216 if ( !cp->exec() ) { 2216 if ( !cp->exec() ) {
2217 delete cp; 2217 delete cp;
2218 return; 2218 return;
2219 } 2219 }
2220 int count = 0; 2220 int count = 0;
2221 if ( cp->addCat() ) { 2221 if ( cp->addCat() ) {
2222 count = addCategories(); 2222 count = addCategories();
2223 if ( count ) { 2223 if ( count ) {
2224 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2224 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2225 writeSettings(); 2225 writeSettings();
2226 } 2226 }
2227 } else { 2227 } else {
2228 removeCategories(); 2228 removeCategories();
2229 updateView(); 2229 updateView();
2230 } 2230 }
2231 delete cp; 2231 delete cp;
2232} 2232}
2233 2233
2234void CalendarView::beamIncidence(Incidence * Inc) 2234void CalendarView::beamIncidence(Incidence * Inc)
2235{ 2235{
2236 QPtrList<Incidence> delSel ; 2236 QPtrList<Incidence> delSel ;
2237 delSel.append(Inc); 2237 delSel.append(Inc);
2238 beamIncidenceList( delSel ); 2238 beamIncidenceList( delSel );
2239} 2239}
2240void CalendarView::beamCalendar() 2240void CalendarView::beamCalendar()
2241{ 2241{
2242 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2242 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2243 //qDebug("beamCalendar() "); 2243 //qDebug("beamCalendar() ");
2244 beamIncidenceList( delSel ); 2244 beamIncidenceList( delSel );
2245} 2245}
2246void CalendarView::beamFilteredCalendar() 2246void CalendarView::beamFilteredCalendar()
2247{ 2247{
2248 QPtrList<Incidence> delSel = mCalendar->incidences(); 2248 QPtrList<Incidence> delSel = mCalendar->incidences();
2249 //qDebug("beamFilteredCalendar() "); 2249 //qDebug("beamFilteredCalendar() ");
2250 beamIncidenceList( delSel ); 2250 beamIncidenceList( delSel );
2251} 2251}
2252void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2252void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2253{ 2253{
2254 if ( beamDialog->exec () == QDialog::Rejected ) 2254 if ( beamDialog->exec () == QDialog::Rejected )
2255 return; 2255 return;
2256 2256
2257 QString fn = "/tmp/kopibeamfile"; 2257 QString fn = "/tmp/kopibeamfile";
2258 QString mes; 2258 QString mes;
2259 bool createbup = true; 2259 bool createbup = true;
2260 if ( createbup ) { 2260 if ( createbup ) {
2261 QString description = "\n"; 2261 QString description = "\n";
2262 CalendarLocal* cal = new CalendarLocal(); 2262 CalendarLocal* cal = new CalendarLocal();
2263 if ( beamDialog->beamLocal() ) 2263 if ( beamDialog->beamLocal() )
2264 cal->setLocalTime(); 2264 cal->setLocalTime();
2265 else 2265 else
2266 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 2266 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
2267 Incidence *incidence = delSel.first(); 2267 Incidence *incidence = delSel.first();
2268 bool addText = false; 2268 bool addText = false;
2269 if ( delSel.count() < 10 ) 2269 if ( delSel.count() < 10 )
2270 addText = true; 2270 addText = true;
2271 else { 2271 else {
2272 description.sprintf(i18n(" %d items?"),delSel.count() ); 2272 description.sprintf(i18n(" %d items?"),delSel.count() );
2273 } 2273 }
2274 while ( incidence ) { 2274 while ( incidence ) {
2275 Incidence *in = incidence->clone(); 2275 Incidence *in = incidence->clone();
2276 if ( addText ) 2276 if ( addText )
2277 description += in->summary() + "\n"; 2277 description += in->summary() + "\n";
2278 cal->addIncidence( in ); 2278 cal->addIncidence( in );
2279 incidence = delSel.next(); 2279 incidence = delSel.next();
2280 } 2280 }
2281 if ( beamDialog->beamVcal() ) { 2281 if ( beamDialog->beamVcal() ) {
2282 fn += ".vcs"; 2282 fn += ".vcs";
2283 FileStorage storage( cal, fn, new VCalFormat ); 2283 FileStorage storage( cal, fn, new VCalFormat );
2284 storage.save(); 2284 storage.save();
2285 } else { 2285 } else {
2286 fn += ".ics"; 2286 fn += ".ics";
2287 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2287 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2288 storage.save(); 2288 storage.save();
2289 } 2289 }
2290 delete cal; 2290 delete cal;
2291 mes = i18n("KO/Pi: Ready for beaming"); 2291 mes = i18n("KO/Pi: Ready for beaming");
2292 setCaption(mes); 2292 setCaption(mes);
2293 2293
2294#ifndef DESKTOP_VERSION 2294#ifndef DESKTOP_VERSION
2295 Ir *ir = new Ir( this ); 2295 Ir *ir = new Ir( this );
2296 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2296 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2297 ir->send( fn, description, "text/x-vCalendar" ); 2297 ir->send( fn, description, "text/x-vCalendar" );
2298#endif 2298#endif
2299 } 2299 }
2300} 2300}
2301void CalendarView::beamDone( Ir *ir ) 2301void CalendarView::beamDone( Ir *ir )
2302{ 2302{
2303#ifndef DESKTOP_VERSION 2303#ifndef DESKTOP_VERSION
2304 delete ir; 2304 delete ir;
2305#endif 2305#endif
2306} 2306}
2307 2307
2308void CalendarView::moveIncidence(Incidence * inc ) 2308void CalendarView::moveIncidence(Incidence * inc )
2309{ 2309{
2310 if ( !inc ) return; 2310 if ( !inc ) return;
2311 // qDebug("showDatePickerForIncidence( ) "); 2311 // qDebug("showDatePickerForIncidence( ) ");
2312 if ( mDateFrame->isVisible() ) 2312 if ( mDateFrame->isVisible() )
2313 mDateFrame->hide(); 2313 mDateFrame->hide();
2314 else { 2314 else {
2315 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2315 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2316 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2316 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2317 int dw = QApplication::desktop()->width(); 2317 int dw = QApplication::desktop()->width();
2318 int dh = QApplication::desktop()->height(); 2318 int dh = QApplication::desktop()->height();
2319 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2319 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2320 mDateFrame->show(); 2320 mDateFrame->show();
2321 } 2321 }
2322 mDatePickerMode = 2; 2322 mDatePickerMode = 2;
2323 mMoveIncidence = inc ; 2323 mMoveIncidence = inc ;
2324 QDate da; 2324 QDate da;
2325 if ( mMoveIncidence->type() == "Todo" ) { 2325 if ( mMoveIncidence->type() == "Todo" ) {
2326 Todo * to = (Todo *) mMoveIncidence; 2326 Todo * to = (Todo *) mMoveIncidence;
2327 if ( to->hasDueDate() ) 2327 if ( to->hasDueDate() )
2328 da = to->dtDue().date(); 2328 da = to->dtDue().date();
2329 else 2329 else
2330 da = QDate::currentDate(); 2330 da = QDate::currentDate();
2331 } else { 2331 } else {
2332 da = mMoveIncidence->dtStart().date(); 2332 da = mMoveIncidence->dtStart().date();
2333 } 2333 }
2334 mDatePicker->setDate( da ); 2334 mDatePicker->setDate( da );
2335} 2335}
2336void CalendarView::showDatePicker( ) 2336void CalendarView::showDatePicker( )
2337{ 2337{
2338 //qDebug("CalendarView::showDatePicker( ) "); 2338 //qDebug("CalendarView::showDatePicker( ) ");
2339 if ( mDateFrame->isVisible() ) 2339 if ( mDateFrame->isVisible() )
2340 mDateFrame->hide(); 2340 mDateFrame->hide();
2341 else { 2341 else {
2342 int w =mDatePicker->sizeHint().width() ; 2342 int w =mDatePicker->sizeHint().width() ;
2343 int h = mDatePicker->sizeHint().height() ; 2343 int h = mDatePicker->sizeHint().height() ;
2344 int dw = QApplication::desktop()->width(); 2344 int dw = QApplication::desktop()->width();
2345 int dh = QApplication::desktop()->height(); 2345 int dh = QApplication::desktop()->height();
2346 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2346 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2347 mDateFrame->show(); 2347 mDateFrame->show();
2348 } 2348 }
2349 mDatePickerMode = 1; 2349 mDatePickerMode = 1;
2350 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2350 mDatePicker->setDate( mNavigator->selectedDates().first() );
2351} 2351}
2352 2352
2353void CalendarView::showEventEditor() 2353void CalendarView::showEventEditor()
2354{ 2354{
2355#ifdef DESKTOP_VERSION 2355#ifdef DESKTOP_VERSION
2356 mEventEditor->show(); 2356 mEventEditor->show();
2357#else 2357#else
2358 mEventEditor->showMaximized(); 2358 mEventEditor->showMaximized();
2359#endif 2359#endif
2360} 2360}
2361void CalendarView::showTodoEditor() 2361void CalendarView::showTodoEditor()
2362{ 2362{
2363#ifdef DESKTOP_VERSION 2363#ifdef DESKTOP_VERSION
2364 mTodoEditor->show(); 2364 mTodoEditor->show();
2365#else 2365#else
2366 mTodoEditor->showMaximized(); 2366 mTodoEditor->showMaximized();
2367#endif 2367#endif
2368} 2368}
2369void CalendarView::cancelIncidence(Incidence * inc ) 2369void CalendarView::cancelIncidence(Incidence * inc )
2370{ 2370{
2371 inc->setCancelled( ! inc->cancelled() ); 2371 inc->setCancelled( ! inc->cancelled() );
2372 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2372 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2373 updateView(); 2373 updateView();
2374} 2374}
2375void CalendarView::cloneIncidence(Incidence * orgInc ) 2375void CalendarView::cloneIncidence(Incidence * orgInc )
2376{ 2376{
2377 Incidence * newInc = orgInc->clone(); 2377 Incidence * newInc = orgInc->clone();
2378 newInc->recreate(); 2378 newInc->recreate();
2379 2379
2380 if ( newInc->type() == "Todo" ) { 2380 if ( newInc->type() == "Todo" ) {
2381 Todo* t = (Todo*) newInc; 2381 Todo* t = (Todo*) newInc;
2382 mTodoEditor->editTodo( t ); 2382 mTodoEditor->editTodo( t );
2383 showTodoEditor(); 2383 showTodoEditor();
2384 if ( mTodoEditor->exec() ) { 2384 if ( mTodoEditor->exec() ) {
2385 mCalendar->addTodo( t ); 2385 mCalendar->addTodo( t );
2386 updateView(); 2386 updateView();
2387 } else { 2387 } else {
2388 delete t; 2388 delete t;
2389 } 2389 }
2390 } 2390 }
2391 else { 2391 else {
2392 Event* e = (Event*) newInc; 2392 Event* e = (Event*) newInc;
2393 mEventEditor->editEvent( e ); 2393 mEventEditor->editEvent( e );
2394 showEventEditor(); 2394 showEventEditor();
2395 if ( mEventEditor->exec() ) { 2395 if ( mEventEditor->exec() ) {
2396 mCalendar->addEvent( e ); 2396 mCalendar->addEvent( e );
2397 updateView(); 2397 updateView();
2398 } else { 2398 } else {
2399 delete e; 2399 delete e;
2400 } 2400 }
2401 } 2401 }
2402} 2402}
2403 2403
2404void CalendarView::newEvent() 2404void CalendarView::newEvent()
2405{ 2405{
2406 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2406 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2407 KOAgendaView *aView = mViewManager->agendaView(); 2407 KOAgendaView *aView = mViewManager->agendaView();
2408 if (aView) { 2408 if (aView) {
2409 if (aView->selectionStart().isValid()) { 2409 if (aView->selectionStart().isValid()) {
2410 if (aView->selectedIsAllDay()) { 2410 if (aView->selectedIsAllDay()) {
2411 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2411 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2412 } else { 2412 } else {
2413 newEvent(aView->selectionStart(),aView->selectionEnd()); 2413 newEvent(aView->selectionStart(),aView->selectionEnd());
2414 } 2414 }
2415 return; 2415 return;
2416 } 2416 }
2417 } 2417 }
2418 2418
2419 QDate date = mNavigator->selectedDates().first(); 2419 QDate date = mNavigator->selectedDates().first();
2420 QDateTime current = QDateTime::currentDateTime(); 2420 QDateTime current = QDateTime::currentDateTime();
2421 if ( date <= current.date() ) { 2421 if ( date <= current.date() ) {
2422 int hour = current.time().hour() +1; 2422 int hour = current.time().hour() +1;
2423 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2423 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2424 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2424 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2425 } else 2425 } else
2426 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2426 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2427 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2427 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2428 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2428 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2429} 2429}
2430 2430
2431void CalendarView::newEvent(QDateTime fh) 2431void CalendarView::newEvent(QDateTime fh)
2432{ 2432{
2433 newEvent(fh, 2433 newEvent(fh,
2434 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2434 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2435} 2435}
2436 2436
2437void CalendarView::newEvent(QDate dt) 2437void CalendarView::newEvent(QDate dt)
2438{ 2438{
2439 newEvent(QDateTime(dt, QTime(0,0,0)), 2439 newEvent(QDateTime(dt, QTime(0,0,0)),
2440 QDateTime(dt, QTime(0,0,0)), true); 2440 QDateTime(dt, QTime(0,0,0)), true);
2441} 2441}
2442 2442
2443void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2443void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2444{ 2444{
2445 2445
2446 mEventEditor->newEvent(fromHint,toHint,allDay); 2446 mEventEditor->newEvent(fromHint,toHint,allDay);
2447 if ( mFilterView->filtersEnabled() ) { 2447 if ( mFilterView->filtersEnabled() ) {
2448 CalFilter *filter = mFilterView->selectedFilter(); 2448 CalFilter *filter = mFilterView->selectedFilter();
2449 if (filter && filter->showCategories()) { 2449 if (filter && filter->showCategories()) {
2450 mEventEditor->setCategories(filter->categoryList().join(",") ); 2450 mEventEditor->setCategories(filter->categoryList().join(",") );
2451 } 2451 }
2452 if ( filter ) 2452 if ( filter )
2453 mEventEditor->setSecrecy( filter->getSecrecy() ); 2453 mEventEditor->setSecrecy( filter->getSecrecy() );
2454 } 2454 }
2455 showEventEditor(); 2455 showEventEditor();
2456} 2456}
2457void CalendarView::todoAdded(Todo * t) 2457void CalendarView::todoAdded(Todo * t)
2458{ 2458{
2459 2459
2460 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2460 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2461 updateTodoViews(); 2461 updateTodoViews();
2462} 2462}
2463void CalendarView::todoChanged(Todo * t) 2463void CalendarView::todoChanged(Todo * t)
2464{ 2464{
2465 emit todoModified( t, 4 ); 2465 emit todoModified( t, 4 );
2466 // updateTodoViews(); 2466 // updateTodoViews();
2467} 2467}
2468void CalendarView::todoToBeDeleted(Todo *) 2468void CalendarView::todoToBeDeleted(Todo *)
2469{ 2469{
2470 //qDebug("todoToBeDeleted(Todo *) "); 2470 //qDebug("todoToBeDeleted(Todo *) ");
2471 updateTodoViews(); 2471 updateTodoViews();
2472} 2472}
2473void CalendarView::todoDeleted() 2473void CalendarView::todoDeleted()
2474{ 2474{
2475 //qDebug(" todoDeleted()"); 2475 //qDebug(" todoDeleted()");
2476 updateTodoViews(); 2476 updateTodoViews();
2477} 2477}
2478 2478
2479 2479
2480 2480
2481void CalendarView::newTodo() 2481void CalendarView::newTodo()
2482{ 2482{
2483 2483
2484 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2484 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2485 if ( mFilterView->filtersEnabled() ) { 2485 if ( mFilterView->filtersEnabled() ) {
2486 CalFilter *filter = mFilterView->selectedFilter(); 2486 CalFilter *filter = mFilterView->selectedFilter();
2487 if (filter && filter->showCategories()) { 2487 if (filter && filter->showCategories()) {
2488 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2488 mTodoEditor->setCategories(filter->categoryList().join(",") );
2489 } 2489 }
2490 if ( filter ) 2490 if ( filter )
2491 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2491 mTodoEditor->setSecrecy( filter->getSecrecy() );
2492 } 2492 }
2493 showTodoEditor(); 2493 showTodoEditor();
2494} 2494}
2495 2495
2496void CalendarView::newSubTodo() 2496void CalendarView::newSubTodo()
2497{ 2497{
2498 Todo *todo = selectedTodo(); 2498 Todo *todo = selectedTodo();
2499 if ( todo ) newSubTodo( todo ); 2499 if ( todo ) newSubTodo( todo );
2500} 2500}
2501 2501
2502void CalendarView::newSubTodo(Todo *parentEvent) 2502void CalendarView::newSubTodo(Todo *parentEvent)
2503{ 2503{
2504 2504
2505 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2505 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2506 showTodoEditor(); 2506 showTodoEditor();
2507} 2507}
2508 2508
2509void CalendarView::newFloatingEvent() 2509void CalendarView::newFloatingEvent()
2510{ 2510{
2511 DateList tmpList = mNavigator->selectedDates(); 2511 DateList tmpList = mNavigator->selectedDates();
2512 QDate date = tmpList.first(); 2512 QDate date = tmpList.first();
2513 2513
2514 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2514 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2515 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2515 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2516} 2516}
2517 2517
2518 2518
2519void CalendarView::editEvent( Event *event ) 2519void CalendarView::editEvent( Event *event )
2520{ 2520{
2521 2521
2522 if ( !event ) return; 2522 if ( !event ) return;
2523 if ( event->isReadOnly() ) { 2523 if ( event->isReadOnly() ) {
2524 showEvent( event ); 2524 showEvent( event );
2525 return; 2525 return;
2526 } 2526 }
2527 mEventEditor->editEvent( event , mFlagEditDescription); 2527 mEventEditor->editEvent( event , mFlagEditDescription);
2528 showEventEditor(); 2528 showEventEditor();
2529} 2529}
2530void CalendarView::editJournal( Journal *jour ) 2530void CalendarView::editJournal( Journal *jour )
2531{ 2531{
2532 if ( !jour ) return; 2532 if ( !jour ) return;
2533 mDialogManager->hideSearchDialog(); 2533 mDialogManager->hideSearchDialog();
2534 mViewManager->showJournalView(); 2534 mViewManager->showJournalView();
2535 mNavigator->slotDaySelect( jour->dtStart().date() ); 2535 mNavigator->slotDaySelect( jour->dtStart().date() );
2536} 2536}
2537void CalendarView::editTodo( Todo *todo ) 2537void CalendarView::editTodo( Todo *todo )
2538{ 2538{
2539 if ( !todo ) return; 2539 if ( !todo ) return;
2540 2540
2541 if ( todo->isReadOnly() ) { 2541 if ( todo->isReadOnly() ) {
2542 showTodo( todo ); 2542 showTodo( todo );
2543 return; 2543 return;
2544 } 2544 }
2545 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2545 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2546 showTodoEditor(); 2546 showTodoEditor();
2547 2547
2548} 2548}
2549 2549
2550KOEventViewerDialog* CalendarView::getEventViewerDialog() 2550KOEventViewerDialog* CalendarView::getEventViewerDialog()
2551{ 2551{
2552 if ( !mEventViewerDialog ) { 2552 if ( !mEventViewerDialog ) {
2553 mEventViewerDialog = new KOEventViewerDialog(this); 2553 mEventViewerDialog = new KOEventViewerDialog(this);
2554 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2554 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2555 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2555 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2556 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2556 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2557 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2557 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2558 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2558 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2559 viewManager(), SLOT( showAgendaView( bool ) ) ); 2559 viewManager(), SLOT( showAgendaView( bool ) ) );
2560 mEventViewerDialog->resize( 640, 480 ); 2560 mEventViewerDialog->resize( 640, 480 );
2561 2561
2562 } 2562 }
2563 return mEventViewerDialog; 2563 return mEventViewerDialog;
2564} 2564}
2565void CalendarView::showEvent(Event *event) 2565void CalendarView::showEvent(Event *event)
2566{ 2566{
2567 getEventViewerDialog()->setEvent(event); 2567 getEventViewerDialog()->setEvent(event);
2568 getEventViewerDialog()->showMe(); 2568 getEventViewerDialog()->showMe();
2569} 2569}
2570 2570
2571void CalendarView::showTodo(Todo *event) 2571void CalendarView::showTodo(Todo *event)
2572{ 2572{
2573 getEventViewerDialog()->setTodo(event); 2573 getEventViewerDialog()->setTodo(event);
2574 getEventViewerDialog()->showMe(); 2574 getEventViewerDialog()->showMe();
2575} 2575}
2576void CalendarView::showJournal( Journal *jour ) 2576void CalendarView::showJournal( Journal *jour )
2577{ 2577{
2578 getEventViewerDialog()->setJournal(jour); 2578 getEventViewerDialog()->setJournal(jour);
2579 getEventViewerDialog()->showMe(); 2579 getEventViewerDialog()->showMe();
2580 2580
2581} 2581}
2582// void CalendarView::todoModified (Todo *event, int changed) 2582// void CalendarView::todoModified (Todo *event, int changed)
2583// { 2583// {
2584// // if (mDialogList.find (event) != mDialogList.end ()) { 2584// // if (mDialogList.find (event) != mDialogList.end ()) {
2585// // kdDebug() << "Todo modified and open" << endl; 2585// // kdDebug() << "Todo modified and open" << endl;
2586// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2586// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2587// // temp->modified (changed); 2587// // temp->modified (changed);
2588 2588
2589// // } 2589// // }
2590 2590
2591// mViewManager->updateView(); 2591// mViewManager->updateView();
2592// } 2592// }
2593 2593
2594void CalendarView::appointment_show() 2594void CalendarView::appointment_show()
2595{ 2595{
2596 Event *anEvent = 0; 2596 Event *anEvent = 0;
2597 2597
2598 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2598 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2599 2599
2600 if (mViewManager->currentView()->isEventView()) { 2600 if (mViewManager->currentView()->isEventView()) {
2601 if ( incidence && incidence->type() == "Event" ) { 2601 if ( incidence && incidence->type() == "Event" ) {
2602 anEvent = static_cast<Event *>(incidence); 2602 anEvent = static_cast<Event *>(incidence);
2603 } 2603 }
2604 } 2604 }
2605 2605
2606 if (!anEvent) { 2606 if (!anEvent) {
2607 KNotifyClient::beep(); 2607 KNotifyClient::beep();
2608 return; 2608 return;
2609 } 2609 }
2610 2610
2611 showEvent(anEvent); 2611 showEvent(anEvent);
2612} 2612}
2613 2613
2614void CalendarView::appointment_edit() 2614void CalendarView::appointment_edit()
2615{ 2615{
2616 Event *anEvent = 0; 2616 Event *anEvent = 0;
2617 2617
2618 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2618 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2619 2619
2620 if (mViewManager->currentView()->isEventView()) { 2620 if (mViewManager->currentView()->isEventView()) {
2621 if ( incidence && incidence->type() == "Event" ) { 2621 if ( incidence && incidence->type() == "Event" ) {
2622 anEvent = static_cast<Event *>(incidence); 2622 anEvent = static_cast<Event *>(incidence);
2623 } 2623 }
2624 } 2624 }
2625 2625
2626 if (!anEvent) { 2626 if (!anEvent) {
2627 KNotifyClient::beep(); 2627 KNotifyClient::beep();
2628 return; 2628 return;
2629 } 2629 }
2630 2630
2631 editEvent(anEvent); 2631 editEvent(anEvent);
2632} 2632}
2633 2633
2634void CalendarView::appointment_delete() 2634void CalendarView::appointment_delete()
2635{ 2635{
2636 Event *anEvent = 0; 2636 Event *anEvent = 0;
2637 2637
2638 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2638 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2639 2639
2640 if (mViewManager->currentView()->isEventView()) { 2640 if (mViewManager->currentView()->isEventView()) {
2641 if ( incidence && incidence->type() == "Event" ) { 2641 if ( incidence && incidence->type() == "Event" ) {
2642 anEvent = static_cast<Event *>(incidence); 2642 anEvent = static_cast<Event *>(incidence);
2643 } 2643 }
2644 } 2644 }
2645 2645
2646 if (!anEvent) { 2646 if (!anEvent) {
2647 KNotifyClient::beep(); 2647 KNotifyClient::beep();
2648 return; 2648 return;
2649 } 2649 }
2650 2650
2651 deleteEvent(anEvent); 2651 deleteEvent(anEvent);
2652} 2652}
2653 2653
2654void CalendarView::todo_unsub(Todo *anTodo ) 2654void CalendarView::todo_unsub(Todo *anTodo )
2655{ 2655{
2656 // Todo *anTodo = selectedTodo(); 2656 // Todo *anTodo = selectedTodo();
2657 if (!anTodo) return; 2657 if (!anTodo) return;
2658 if (!anTodo->relatedTo()) return; 2658 if (!anTodo->relatedTo()) return;
2659 anTodo->relatedTo()->removeRelation(anTodo); 2659 anTodo->relatedTo()->removeRelation(anTodo);
2660 anTodo->setRelatedTo(0); 2660 anTodo->setRelatedTo(0);
2661 anTodo->updated(); 2661 anTodo->updated();
2662 anTodo->setRelatedToUid(""); 2662 anTodo->setRelatedToUid("");
2663 setModified(true); 2663 setModified(true);
2664 updateView(); 2664 updateView();
2665} 2665}
2666 2666
2667void CalendarView::deleteTodo(Todo *todo) 2667void CalendarView::deleteTodo(Todo *todo)
2668{ 2668{
2669 if (!todo) { 2669 if (!todo) {
2670 KNotifyClient::beep(); 2670 KNotifyClient::beep();
2671 return; 2671 return;
2672 } 2672 }
2673 if (KOPrefs::instance()->mConfirm) { 2673 if (KOPrefs::instance()->mConfirm) {
2674 switch (msgItemDelete()) { 2674 switch (msgItemDelete()) {
2675 case KMessageBox::Continue: // OK 2675 case KMessageBox::Continue: // OK
2676 if (!todo->relations().isEmpty()) { 2676 if (!todo->relations().isEmpty()) {
2677 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2677 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2678 i18n("Delete To-Do")); 2678 i18n("Delete To-Do"));
2679 } else { 2679 } else {
2680 checkExternalId( todo ); 2680 checkExternalId( todo );
2681 calendar()->deleteTodo(todo); 2681 calendar()->deleteTodo(todo);
2682 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2682 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2683 updateView(); 2683 updateView();
2684 } 2684 }
2685 break; 2685 break;
2686 } // switch 2686 } // switch
2687 } else { 2687 } else {
2688 if (!todo->relations().isEmpty()) { 2688 if (!todo->relations().isEmpty()) {
2689 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2689 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2690 i18n("Delete To-Do")); 2690 i18n("Delete To-Do"));
2691 } else { 2691 } else {
2692 checkExternalId( todo ); 2692 checkExternalId( todo );
2693 mCalendar->deleteTodo(todo); 2693 mCalendar->deleteTodo(todo);
2694 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2694 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2695 updateView(); 2695 updateView();
2696 } 2696 }
2697 } 2697 }
2698 emit updateSearchDialog(); 2698 emit updateSearchDialog();
2699} 2699}
2700void CalendarView::deleteJournal(Journal *jour) 2700void CalendarView::deleteJournal(Journal *jour)
2701{ 2701{
2702 if (!jour) { 2702 if (!jour) {
2703 KNotifyClient::beep(); 2703 KNotifyClient::beep();
2704 return; 2704 return;
2705 } 2705 }
2706 if (KOPrefs::instance()->mConfirm) { 2706 if (KOPrefs::instance()->mConfirm) {
2707 switch (msgItemDelete()) { 2707 switch (msgItemDelete()) {
2708 case KMessageBox::Continue: // OK 2708 case KMessageBox::Continue: // OK
2709 calendar()->deleteJournal(jour); 2709 calendar()->deleteJournal(jour);
2710 updateView(); 2710 updateView();
2711 break; 2711 break;
2712 } // switch 2712 } // switch
2713 } else { 2713 } else {
2714 calendar()->deleteJournal(jour);; 2714 calendar()->deleteJournal(jour);;
2715 updateView(); 2715 updateView();
2716 } 2716 }
2717 emit updateSearchDialog(); 2717 emit updateSearchDialog();
2718} 2718}
2719 2719
2720void CalendarView::deleteEvent(Event *anEvent) 2720void CalendarView::deleteEvent(Event *anEvent)
2721{ 2721{
2722 if (!anEvent) { 2722 if (!anEvent) {
2723 KNotifyClient::beep(); 2723 KNotifyClient::beep();
2724 return; 2724 return;
2725 } 2725 }
2726 2726
2727 if (anEvent->recurrence()->doesRecur()) { 2727 if (anEvent->recurrence()->doesRecur()) {
2728 QDate itemDate = mViewManager->currentSelectionDate(); 2728 QDate itemDate = mViewManager->currentSelectionDate();
2729 int km; 2729 int km;
2730 if (!itemDate.isValid()) { 2730 if (!itemDate.isValid()) {
2731 //kdDebug() << "Date Not Valid" << endl; 2731 //kdDebug() << "Date Not Valid" << endl;
2732 if (KOPrefs::instance()->mConfirm) { 2732 if (KOPrefs::instance()->mConfirm) {
2733 km = KMessageBox::warningContinueCancel(this,anEvent->summary() + 2733 km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
2734 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2734 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2735 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2735 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2736 if ( km == KMessageBox::Continue ) 2736 if ( km == KMessageBox::Continue )
2737 km = KMessageBox::No; // No = all below 2737 km = KMessageBox::No; // No = all below
2738 } else 2738 } else
2739 km = KMessageBox::No; 2739 km = KMessageBox::No;
2740 } else { 2740 } else {
2741 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() + 2741 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
2742 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2742 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2743 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2743 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2744 i18n("KO/Pi Confirmation"),i18n("Current"), 2744 i18n("KO/Pi Confirmation"),i18n("Current"),
2745 i18n("All")); 2745 i18n("All"));
2746 } 2746 }
2747 switch(km) { 2747 switch(km) {
2748 2748
2749 case KMessageBox::No: // Continue // all 2749 case KMessageBox::No: // Continue // all
2750 //qDebug("KMessageBox::No "); 2750 //qDebug("KMessageBox::No ");
2751 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2751 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2752 schedule(Scheduler::Cancel,anEvent); 2752 schedule(Scheduler::Cancel,anEvent);
2753 2753
2754 checkExternalId( anEvent); 2754 checkExternalId( anEvent);
2755 mCalendar->deleteEvent(anEvent); 2755 mCalendar->deleteEvent(anEvent);
2756 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2756 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2757 break; 2757 break;
2758 2758
2759 // Disabled because it does not work 2759 // Disabled because it does not work
2760 //#if 0 2760 //#if 0
2761 case KMessageBox::Yes: // just this one 2761 case KMessageBox::Yes: // just this one
2762 //QDate qd = mNavigator->selectedDates().first(); 2762 //QDate qd = mNavigator->selectedDates().first();
2763 //if (!qd.isValid()) { 2763 //if (!qd.isValid()) {
2764 // kdDebug() << "no date selected, or invalid date" << endl; 2764 // kdDebug() << "no date selected, or invalid date" << endl;
2765 // KNotifyClient::beep(); 2765 // KNotifyClient::beep();
2766 // return; 2766 // return;
2767 //} 2767 //}
2768 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2768 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2769 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2769 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2770 anEvent->addExDate(itemDate); 2770 anEvent->addExDate(itemDate);
2771 int duration = anEvent->recurrence()->duration(); 2771 int duration = anEvent->recurrence()->duration();
2772 if ( duration > 0 ) { 2772 if ( duration > 0 ) {
2773 anEvent->recurrence()->setDuration( duration - 1 ); 2773 anEvent->recurrence()->setDuration( duration - 1 );
2774 } 2774 }
2775 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2775 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2776 } 2776 }
2777 break; 2777 break;
2778 //#endif 2778 //#endif
2779 } // switch 2779 } // switch
2780 } else { 2780 } else {
2781 if (KOPrefs::instance()->mConfirm) { 2781 if (KOPrefs::instance()->mConfirm) {
2782 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() + 2782 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
2783 i18n("\nAre you sure you want\nto delete this event?"), 2783 i18n("\nAre you sure you want\nto delete this event?"),
2784 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 2784 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
2785 case KMessageBox::Continue: // OK 2785 case KMessageBox::Continue: // OK
2786 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2786 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2787 schedule(Scheduler::Cancel,anEvent); 2787 schedule(Scheduler::Cancel,anEvent);
2788 checkExternalId( anEvent); 2788 checkExternalId( anEvent);
2789 mCalendar->deleteEvent(anEvent); 2789 mCalendar->deleteEvent(anEvent);
2790 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2790 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2791 break; 2791 break;
2792 } // switch 2792 } // switch
2793 } else { 2793 } else {
2794 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2794 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2795 schedule(Scheduler::Cancel,anEvent); 2795 schedule(Scheduler::Cancel,anEvent);
2796 checkExternalId( anEvent); 2796 checkExternalId( anEvent);
2797 mCalendar->deleteEvent(anEvent); 2797 mCalendar->deleteEvent(anEvent);
2798 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2798 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2799 } 2799 }
2800 } // if-else 2800 } // if-else
2801 emit updateSearchDialog(); 2801 emit updateSearchDialog();
2802} 2802}
2803 2803
2804bool CalendarView::deleteEvent(const QString &uid) 2804bool CalendarView::deleteEvent(const QString &uid)
2805{ 2805{
2806 Event *ev = mCalendar->event(uid); 2806 Event *ev = mCalendar->event(uid);
2807 if (ev) { 2807 if (ev) {
2808 deleteEvent(ev); 2808 deleteEvent(ev);
2809 return true; 2809 return true;
2810 } else { 2810 } else {
2811 return false; 2811 return false;
2812 } 2812 }
2813} 2813}
2814 2814
2815/*****************************************************************************/ 2815/*****************************************************************************/
2816 2816
2817void CalendarView::action_mail() 2817void CalendarView::action_mail()
2818{ 2818{
2819#ifndef KORG_NOMAIL 2819#ifndef KORG_NOMAIL
2820 KOMailClient mailClient; 2820 KOMailClient mailClient;
2821 2821
2822 Incidence *incidence = currentSelection(); 2822 Incidence *incidence = currentSelection();
2823 2823
2824 if (!incidence) { 2824 if (!incidence) {
2825 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2825 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2826 return; 2826 return;
2827 } 2827 }
2828 if(incidence->attendeeCount() == 0 ) { 2828 if(incidence->attendeeCount() == 0 ) {
2829 KMessageBox::sorry(this, 2829 KMessageBox::sorry(this,
2830 i18n("Can't generate mail:\nNo attendees defined.\n")); 2830 i18n("Can't generate mail:\nNo attendees defined.\n"));
2831 return; 2831 return;
2832 } 2832 }
2833 2833
2834 CalendarLocal cal_tmp; 2834 CalendarLocal cal_tmp;
2835 Event *event = 0; 2835 Event *event = 0;
2836 Event *ev = 0; 2836 Event *ev = 0;
2837 if ( incidence && incidence->type() == "Event" ) { 2837 if ( incidence && incidence->type() == "Event" ) {
2838 event = static_cast<Event *>(incidence); 2838 event = static_cast<Event *>(incidence);
2839 ev = new Event(*event); 2839 ev = new Event(*event);
2840 cal_tmp.addEvent(ev); 2840 cal_tmp.addEvent(ev);
2841 } 2841 }
2842 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave); 2842 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave);
2843 QString attachment = mForm.toString( &cal_tmp ); 2843 QString attachment = mForm.toString( &cal_tmp );
2844 if (ev) delete(ev); 2844 if (ev) delete(ev);
2845 2845
2846 mailClient.mailAttendees(currentSelection(), attachment); 2846 mailClient.mailAttendees(currentSelection(), attachment);
2847 2847
2848#endif 2848#endif
2849 2849
2850#if 0 2850#if 0
2851 Event *anEvent = 0; 2851 Event *anEvent = 0;
2852 if (mViewManager->currentView()->isEventView()) { 2852 if (mViewManager->currentView()->isEventView()) {
2853 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 2853 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
2854 } 2854 }
2855 2855
2856 if (!anEvent) { 2856 if (!anEvent) {
2857 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2857 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2858 return; 2858 return;
2859 } 2859 }
2860 if(anEvent->attendeeCount() == 0 ) { 2860 if(anEvent->attendeeCount() == 0 ) {
2861 KMessageBox::sorry(this, 2861 KMessageBox::sorry(this,
2862 i18n("Can't generate mail:\nNo attendees defined.\n")); 2862 i18n("Can't generate mail:\nNo attendees defined.\n"));
2863 return; 2863 return;
2864 } 2864 }
2865 2865
2866 mailobject.emailEvent(anEvent); 2866 mailobject.emailEvent(anEvent);
2867#endif 2867#endif
2868} 2868}
2869 2869
2870 2870
2871void CalendarView::schedule_publish(Incidence *incidence) 2871void CalendarView::schedule_publish(Incidence *incidence)
2872{ 2872{
2873 Event *event = 0; 2873 Event *event = 0;
2874 Todo *todo = 0; 2874 Todo *todo = 0;
2875 2875
2876 if (incidence == 0) { 2876 if (incidence == 0) {
2877 incidence = mViewManager->currentView()->selectedIncidences().first(); 2877 incidence = mViewManager->currentView()->selectedIncidences().first();
2878 if (incidence == 0) { 2878 if (incidence == 0) {
2879 incidence = mTodoList->selectedIncidences().first(); 2879 incidence = mTodoList->selectedIncidences().first();
2880 } 2880 }
2881 } 2881 }
2882 if ( incidence && incidence->type() == "Event" ) { 2882 if ( incidence && incidence->type() == "Event" ) {
2883 event = static_cast<Event *>(incidence); 2883 event = static_cast<Event *>(incidence);
2884 } else { 2884 } else {
2885 if ( incidence && incidence->type() == "Todo" ) { 2885 if ( incidence && incidence->type() == "Todo" ) {
2886 todo = static_cast<Todo *>(incidence); 2886 todo = static_cast<Todo *>(incidence);
2887 } 2887 }
2888 } 2888 }
2889 2889
2890 if (!event && !todo) { 2890 if (!event && !todo) {
2891 KMessageBox::sorry(this,i18n("No event selected.")); 2891 KMessageBox::sorry(this,i18n("No event selected."));
2892 return; 2892 return;
2893 } 2893 }
2894 2894
2895 PublishDialog *publishdlg = new PublishDialog(); 2895 PublishDialog *publishdlg = new PublishDialog();
2896 if (incidence->attendeeCount()>0) { 2896 if (incidence->attendeeCount()>0) {
2897 QPtrList<Attendee> attendees = incidence->attendees(); 2897 QPtrList<Attendee> attendees = incidence->attendees();
2898 attendees.first(); 2898 attendees.first();
2899 while ( attendees.current()!=0 ) { 2899 while ( attendees.current()!=0 ) {
2900 publishdlg->addAttendee(attendees.current()); 2900 publishdlg->addAttendee(attendees.current());
2901 attendees.next(); 2901 attendees.next();
2902 } 2902 }
2903 } 2903 }
2904 bool send = true; 2904 bool send = true;
2905 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 2905 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
2906 if ( publishdlg->exec() != QDialog::Accepted ) 2906 if ( publishdlg->exec() != QDialog::Accepted )
2907 send = false; 2907 send = false;
2908 } 2908 }
2909 if ( send ) { 2909 if ( send ) {
2910 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2910 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2911 if ( event ) { 2911 if ( event ) {
2912 Event *ev = new Event(*event); 2912 Event *ev = new Event(*event);
2913 ev->registerObserver(0); 2913 ev->registerObserver(0);
2914 ev->clearAttendees(); 2914 ev->clearAttendees();
2915 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2915 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2916 delete(ev); 2916 delete(ev);
2917 } 2917 }
2918 } else { 2918 } else {
2919 if ( todo ) { 2919 if ( todo ) {
2920 Todo *ev = new Todo(*todo); 2920 Todo *ev = new Todo(*todo);
2921 ev->registerObserver(0); 2921 ev->registerObserver(0);
2922 ev->clearAttendees(); 2922 ev->clearAttendees();
2923 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2923 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2924 delete(ev); 2924 delete(ev);
2925 } 2925 }
2926 } 2926 }
2927 } 2927 }
2928 } 2928 }
2929 delete publishdlg; 2929 delete publishdlg;
2930} 2930}
2931 2931
2932void CalendarView::schedule_request(Incidence *incidence) 2932void CalendarView::schedule_request(Incidence *incidence)
2933{ 2933{
2934 schedule(Scheduler::Request,incidence); 2934 schedule(Scheduler::Request,incidence);
2935} 2935}
2936 2936
2937void CalendarView::schedule_refresh(Incidence *incidence) 2937void CalendarView::schedule_refresh(Incidence *incidence)
2938{ 2938{
2939 schedule(Scheduler::Refresh,incidence); 2939 schedule(Scheduler::Refresh,incidence);
2940} 2940}
2941 2941
2942void CalendarView::schedule_cancel(Incidence *incidence) 2942void CalendarView::schedule_cancel(Incidence *incidence)
2943{ 2943{
2944 schedule(Scheduler::Cancel,incidence); 2944 schedule(Scheduler::Cancel,incidence);
2945} 2945}
2946 2946
2947void CalendarView::schedule_add(Incidence *incidence) 2947void CalendarView::schedule_add(Incidence *incidence)
2948{ 2948{
2949 schedule(Scheduler::Add,incidence); 2949 schedule(Scheduler::Add,incidence);
2950} 2950}
2951 2951
2952void CalendarView::schedule_reply(Incidence *incidence) 2952void CalendarView::schedule_reply(Incidence *incidence)
2953{ 2953{
2954 schedule(Scheduler::Reply,incidence); 2954 schedule(Scheduler::Reply,incidence);
2955} 2955}
2956 2956
2957void CalendarView::schedule_counter(Incidence *incidence) 2957void CalendarView::schedule_counter(Incidence *incidence)
2958{ 2958{
2959 schedule(Scheduler::Counter,incidence); 2959 schedule(Scheduler::Counter,incidence);
2960} 2960}
2961 2961
2962void CalendarView::schedule_declinecounter(Incidence *incidence) 2962void CalendarView::schedule_declinecounter(Incidence *incidence)
2963{ 2963{
2964 schedule(Scheduler::Declinecounter,incidence); 2964 schedule(Scheduler::Declinecounter,incidence);
2965} 2965}
2966 2966
2967void CalendarView::schedule_publish_freebusy(int daysToPublish) 2967void CalendarView::schedule_publish_freebusy(int daysToPublish)
2968{ 2968{
2969 QDateTime start = QDateTime::currentDateTime(); 2969 QDateTime start = QDateTime::currentDateTime();
2970 QDateTime end = start.addDays(daysToPublish); 2970 QDateTime end = start.addDays(daysToPublish);
2971 2971
2972 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 2972 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
2973 freebusy->setOrganizer(KOPrefs::instance()->email()); 2973 freebusy->setOrganizer(KOPrefs::instance()->email());
2974 2974
2975 2975
2976 PublishDialog *publishdlg = new PublishDialog(); 2976 PublishDialog *publishdlg = new PublishDialog();
2977 if ( publishdlg->exec() == QDialog::Accepted ) { 2977 if ( publishdlg->exec() == QDialog::Accepted ) {
2978 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2978 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2979 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 2979 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
2980 delete(freebusy); 2980 delete(freebusy);
2981 } 2981 }
2982 } 2982 }
2983 delete publishdlg; 2983 delete publishdlg;
2984} 2984}
2985 2985
2986void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 2986void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
2987{ 2987{
2988 Event *event = 0; 2988 Event *event = 0;
2989 Todo *todo = 0; 2989 Todo *todo = 0;
2990 2990
2991 if (incidence == 0) { 2991 if (incidence == 0) {
2992 incidence = mViewManager->currentView()->selectedIncidences().first(); 2992 incidence = mViewManager->currentView()->selectedIncidences().first();
2993 if (incidence == 0) { 2993 if (incidence == 0) {
2994 incidence = mTodoList->selectedIncidences().first(); 2994 incidence = mTodoList->selectedIncidences().first();
2995 } 2995 }
2996 } 2996 }
2997 if ( incidence && incidence->type() == "Event" ) { 2997 if ( incidence && incidence->type() == "Event" ) {
2998 event = static_cast<Event *>(incidence); 2998 event = static_cast<Event *>(incidence);
2999 } 2999 }
3000 if ( incidence && incidence->type() == "Todo" ) { 3000 if ( incidence && incidence->type() == "Todo" ) {
3001 todo = static_cast<Todo *>(incidence); 3001 todo = static_cast<Todo *>(incidence);
3002 } 3002 }
3003 3003
3004 if (!event && !todo) { 3004 if (!event && !todo) {
3005 KMessageBox::sorry(this,i18n("No event selected.")); 3005 KMessageBox::sorry(this,i18n("No event selected."));
3006 return; 3006 return;
3007 } 3007 }
3008 3008
3009 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3009 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3010 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3010 KMessageBox::sorry(this,i18n("The event has no attendees."));
3011 return; 3011 return;
3012 } 3012 }
3013 3013
3014 Event *ev = 0; 3014 Event *ev = 0;
3015 if (event) ev = new Event(*event); 3015 if (event) ev = new Event(*event);
3016 Todo *to = 0; 3016 Todo *to = 0;
3017 if (todo) to = new Todo(*todo); 3017 if (todo) to = new Todo(*todo);
3018 3018
3019 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3019 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3020 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3020 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3021 if (!me) { 3021 if (!me) {
3022 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3022 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3023 return; 3023 return;
3024 } 3024 }
3025 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3025 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3026 StatusDialog *statdlg = new StatusDialog(this); 3026 StatusDialog *statdlg = new StatusDialog(this);
3027 if (!statdlg->exec()==QDialog::Accepted) return; 3027 if (!statdlg->exec()==QDialog::Accepted) return;
3028 me->setStatus( statdlg->status() ); 3028 me->setStatus( statdlg->status() );
3029 delete(statdlg); 3029 delete(statdlg);
3030 } 3030 }
3031 Attendee *menew = new Attendee(*me); 3031 Attendee *menew = new Attendee(*me);
3032 if (ev) { 3032 if (ev) {
3033 ev->clearAttendees(); 3033 ev->clearAttendees();
3034 ev->addAttendee(menew,false); 3034 ev->addAttendee(menew,false);
3035 } else { 3035 } else {
3036 if (to) { 3036 if (to) {
3037 todo->clearAttendees(); 3037 todo->clearAttendees();
3038 todo->addAttendee(menew,false); 3038 todo->addAttendee(menew,false);
3039 } 3039 }
3040 } 3040 }
3041 } 3041 }
3042 3042
3043 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3043 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3044 if (ev) { 3044 if (ev) {
3045 if ( !dlg->addMessage(ev,method) ) delete(ev); 3045 if ( !dlg->addMessage(ev,method) ) delete(ev);
3046 } else { 3046 } else {
3047 if (to) { 3047 if (to) {
3048 if ( !dlg->addMessage(to,method) ) delete(to); 3048 if ( !dlg->addMessage(to,method) ) delete(to);
3049 } 3049 }
3050 } 3050 }
3051} 3051}
3052 3052
3053void CalendarView::openAddressbook() 3053void CalendarView::openAddressbook()
3054{ 3054{
3055 KRun::runCommand("kaddressbook"); 3055 KRun::runCommand("kaddressbook");
3056} 3056}
3057 3057
3058void CalendarView::setModified(bool modified) 3058void CalendarView::setModified(bool modified)
3059{ 3059{
3060 if ( modified ) 3060 if ( modified )
3061 emit signalmodified(); 3061 emit signalmodified();
3062 if (mModified != modified) { 3062 if (mModified != modified) {
3063 mModified = modified; 3063 mModified = modified;
3064 emit modifiedChanged(mModified); 3064 emit modifiedChanged(mModified);
3065 } 3065 }
3066} 3066}
3067 3067
3068bool CalendarView::isReadOnly() 3068bool CalendarView::isReadOnly()
3069{ 3069{
3070 return mReadOnly; 3070 return mReadOnly;
3071} 3071}
3072 3072
3073void CalendarView::setReadOnly(bool readOnly) 3073void CalendarView::setReadOnly(bool readOnly)
3074{ 3074{
3075 if (mReadOnly != readOnly) { 3075 if (mReadOnly != readOnly) {
3076 mReadOnly = readOnly; 3076 mReadOnly = readOnly;
3077 emit readOnlyChanged(mReadOnly); 3077 emit readOnlyChanged(mReadOnly);
3078 } 3078 }
3079} 3079}
3080 3080
3081bool CalendarView::isModified() 3081bool CalendarView::isModified()
3082{ 3082{
3083 return mModified; 3083 return mModified;
3084} 3084}
3085 3085
3086void CalendarView::printSetup() 3086void CalendarView::printSetup()
3087{ 3087{
3088#ifndef KORG_NOPRINTER 3088#ifndef KORG_NOPRINTER
3089 createPrinter(); 3089 createPrinter();
3090 3090
3091 mCalPrinter->setupPrinter(); 3091 mCalPrinter->setupPrinter();
3092#endif 3092#endif
3093} 3093}
3094 3094
3095void CalendarView::print() 3095void CalendarView::print()
3096{ 3096{
3097#ifndef KORG_NOPRINTER 3097#ifndef KORG_NOPRINTER
3098 createPrinter(); 3098 createPrinter();
3099 3099
3100 DateList tmpDateList = mNavigator->selectedDates(); 3100 DateList tmpDateList = mNavigator->selectedDates();
3101 mCalPrinter->print(CalPrinter::Month, 3101 mCalPrinter->print(CalPrinter::Month,
3102 tmpDateList.first(), tmpDateList.last()); 3102 tmpDateList.first(), tmpDateList.last());
3103#endif 3103#endif
3104} 3104}
3105 3105
3106void CalendarView::printPreview() 3106void CalendarView::printPreview()
3107{ 3107{
3108#ifndef KORG_NOPRINTER 3108#ifndef KORG_NOPRINTER
3109 kdDebug() << "CalendarView::printPreview()" << endl; 3109 kdDebug() << "CalendarView::printPreview()" << endl;
3110 3110
3111 createPrinter(); 3111 createPrinter();
3112 3112
3113 DateList tmpDateList = mNavigator->selectedDates(); 3113 DateList tmpDateList = mNavigator->selectedDates();
3114 3114
3115 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3115 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3116 tmpDateList.last()); 3116 tmpDateList.last());
3117#endif 3117#endif
3118} 3118}
3119 3119
3120void CalendarView::exportICalendar() 3120void CalendarView::exportICalendar()
3121{ 3121{
3122 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3122 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3123 3123
3124 // Force correct extension 3124 // Force correct extension
3125 if (filename.right(4) != ".ics") filename += ".ics"; 3125 if (filename.right(4) != ".ics") filename += ".ics";
3126 3126
3127 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3127 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3128 storage.save(); 3128 storage.save();
3129} 3129}
3130 3130
3131bool CalendarView::exportVCalendar( QString filename ) 3131bool CalendarView::exportVCalendar( QString filename )
3132{ 3132{
3133 if (mCalendar->journals().count() > 0) { 3133 if (mCalendar->journals().count() > 0) {
3134 int result = KMessageBox::warningContinueCancel(this, 3134 int result = KMessageBox::warningContinueCancel(this,
3135 i18n("The journal entries can not be\nexported to a vCalendar file."), 3135 i18n("The journal entries can not be\nexported to a vCalendar file."),
3136 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3136 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3137 true); 3137 true);
3138 if (result != KMessageBox::Continue) return false; 3138 if (result != KMessageBox::Continue) return false;
3139 } 3139 }
3140 3140
3141 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3141 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3142 3142
3143 // Force correct extension 3143 // Force correct extension
3144 if (filename.right(4) != ".vcs") filename += ".vcs"; 3144 if (filename.right(4) != ".vcs") filename += ".vcs";
3145 3145
3146 FileStorage storage( mCalendar, filename, new VCalFormat ); 3146 FileStorage storage( mCalendar, filename, new VCalFormat );
3147 return storage.save(); 3147 return storage.save();
3148 3148
3149} 3149}
3150 3150
3151void CalendarView::eventUpdated(Incidence *) 3151void CalendarView::eventUpdated(Incidence *)
3152{ 3152{
3153 setModified(); 3153 setModified();
3154 // Don't call updateView here. The code, which has caused the update of the 3154 // Don't call updateView here. The code, which has caused the update of the
3155 // event is responsible for updating the view. 3155 // event is responsible for updating the view.
3156 // updateView(); 3156 // updateView();
3157} 3157}
3158 3158
3159void CalendarView::adaptNavigationUnits() 3159void CalendarView::adaptNavigationUnits()
3160{ 3160{
3161 if (mViewManager->currentView()->isEventView()) { 3161 if (mViewManager->currentView()->isEventView()) {
3162 int days = mViewManager->currentView()->currentDateCount(); 3162 int days = mViewManager->currentView()->currentDateCount();
3163 if (days == 1) { 3163 if (days == 1) {
3164 emit changeNavStringPrev(i18n("&Previous Day")); 3164 emit changeNavStringPrev(i18n("&Previous Day"));
3165 emit changeNavStringNext(i18n("&Next Day")); 3165 emit changeNavStringNext(i18n("&Next Day"));
3166 } else { 3166 } else {
3167 emit changeNavStringPrev(i18n("&Previous Week")); 3167 emit changeNavStringPrev(i18n("&Previous Week"));
3168 emit changeNavStringNext(i18n("&Next Week")); 3168 emit changeNavStringNext(i18n("&Next Week"));
3169 } 3169 }
3170 } 3170 }
3171} 3171}
3172 3172
3173void CalendarView::processMainViewSelection( Incidence *incidence ) 3173void CalendarView::processMainViewSelection( Incidence *incidence )
3174{ 3174{
3175 if ( incidence ) mTodoList->clearSelection(); 3175 if ( incidence ) mTodoList->clearSelection();
3176 processIncidenceSelection( incidence ); 3176 processIncidenceSelection( incidence );
3177} 3177}
3178 3178
3179void CalendarView::processTodoListSelection( Incidence *incidence ) 3179void CalendarView::processTodoListSelection( Incidence *incidence )
3180{ 3180{
3181 if ( incidence && mViewManager->currentView() ) { 3181 if ( incidence && mViewManager->currentView() ) {
3182 mViewManager->currentView()->clearSelection(); 3182 mViewManager->currentView()->clearSelection();
3183 } 3183 }
3184 processIncidenceSelection( incidence ); 3184 processIncidenceSelection( incidence );
3185} 3185}
3186 3186
3187void CalendarView::processIncidenceSelection( Incidence *incidence ) 3187void CalendarView::processIncidenceSelection( Incidence *incidence )
3188{ 3188{
3189 if ( incidence == mSelectedIncidence ) return; 3189 if ( incidence == mSelectedIncidence ) return;
3190 3190
3191 mSelectedIncidence = incidence; 3191 mSelectedIncidence = incidence;
3192 3192
3193 emit incidenceSelected( mSelectedIncidence ); 3193 emit incidenceSelected( mSelectedIncidence );
3194 3194
3195 if ( incidence && incidence->type() == "Event" ) { 3195 if ( incidence && incidence->type() == "Event" ) {
3196 Event *event = static_cast<Event *>( incidence ); 3196 Event *event = static_cast<Event *>( incidence );
3197 if ( event->organizer() == KOPrefs::instance()->email() ) { 3197 if ( event->organizer() == KOPrefs::instance()->email() ) {
3198 emit organizerEventsSelected( true ); 3198 emit organizerEventsSelected( true );
3199 } else { 3199 } else {
3200 emit organizerEventsSelected(false); 3200 emit organizerEventsSelected(false);
3201 } 3201 }
3202 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3202 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3203 KOPrefs::instance()->email() ) ) { 3203 KOPrefs::instance()->email() ) ) {
3204 emit groupEventsSelected( true ); 3204 emit groupEventsSelected( true );
3205 } else { 3205 } else {
3206 emit groupEventsSelected(false); 3206 emit groupEventsSelected(false);
3207 } 3207 }
3208 return; 3208 return;
3209 } else { 3209 } else {
3210 if ( incidence && incidence->type() == "Todo" ) { 3210 if ( incidence && incidence->type() == "Todo" ) {
3211 emit todoSelected( true ); 3211 emit todoSelected( true );
3212 Todo *event = static_cast<Todo *>( incidence ); 3212 Todo *event = static_cast<Todo *>( incidence );
3213 if ( event->organizer() == KOPrefs::instance()->email() ) { 3213 if ( event->organizer() == KOPrefs::instance()->email() ) {
3214 emit organizerEventsSelected( true ); 3214 emit organizerEventsSelected( true );
3215 } else { 3215 } else {
3216 emit organizerEventsSelected(false); 3216 emit organizerEventsSelected(false);
3217 } 3217 }
3218 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3218 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3219 KOPrefs::instance()->email() ) ) { 3219 KOPrefs::instance()->email() ) ) {
3220 emit groupEventsSelected( true ); 3220 emit groupEventsSelected( true );
3221 } else { 3221 } else {
3222 emit groupEventsSelected(false); 3222 emit groupEventsSelected(false);
3223 } 3223 }
3224 return; 3224 return;
3225 } else { 3225 } else {
3226 emit todoSelected( false ); 3226 emit todoSelected( false );
3227 emit organizerEventsSelected(false); 3227 emit organizerEventsSelected(false);
3228 emit groupEventsSelected(false); 3228 emit groupEventsSelected(false);
3229 } 3229 }
3230 return; 3230 return;
3231 } 3231 }
3232 3232
3233 /* if ( incidence && incidence->type() == "Todo" ) { 3233 /* if ( incidence && incidence->type() == "Todo" ) {
3234 emit todoSelected( true ); 3234 emit todoSelected( true );
3235 } else { 3235 } else {
3236 emit todoSelected( false ); 3236 emit todoSelected( false );
3237 }*/ 3237 }*/
3238} 3238}
3239 3239
3240 3240
3241void CalendarView::checkClipboard() 3241void CalendarView::checkClipboard()
3242{ 3242{
3243#ifndef KORG_NODND 3243#ifndef KORG_NODND
3244 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3244 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3245 emit pasteEnabled(true); 3245 emit pasteEnabled(true);
3246 } else { 3246 } else {
3247 emit pasteEnabled(false); 3247 emit pasteEnabled(false);
3248 } 3248 }
3249#endif 3249#endif
3250} 3250}
3251 3251
3252void CalendarView::showDates(const DateList &selectedDates) 3252void CalendarView::showDates(const DateList &selectedDates)
3253{ 3253{
3254 // kdDebug() << "CalendarView::selectDates()" << endl; 3254 // kdDebug() << "CalendarView::selectDates()" << endl;
3255 3255
3256 if ( mViewManager->currentView() ) { 3256 if ( mViewManager->currentView() ) {
3257 updateView( selectedDates.first(), selectedDates.last() ); 3257 updateView( selectedDates.first(), selectedDates.last() );
3258 } else { 3258 } else {
3259 mViewManager->showAgendaView(); 3259 mViewManager->showAgendaView();
3260 } 3260 }
3261 3261
3262 QString selDates; 3262 QString selDates;
3263 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3263 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3264 if (selectedDates.first() < selectedDates.last() ) 3264 if (selectedDates.first() < selectedDates.last() )
3265 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3265 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3266 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3266 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3267 3267
3268} 3268}
3269 3269
3270QPtrList<CalFilter> CalendarView::filters() 3270QPtrList<CalFilter> CalendarView::filters()
3271{ 3271{
3272 return mFilters; 3272 return mFilters;
3273 3273
3274} 3274}
3275void CalendarView::editFilters() 3275void CalendarView::editFilters()
3276{ 3276{
3277 // kdDebug() << "CalendarView::editFilters()" << endl; 3277 // kdDebug() << "CalendarView::editFilters()" << endl;
3278 3278
3279 CalFilter *filter = mFilters.first(); 3279 CalFilter *filter = mFilters.first();
3280 while(filter) { 3280 while(filter) {
3281 kdDebug() << " Filter: " << filter->name() << endl; 3281 kdDebug() << " Filter: " << filter->name() << endl;
3282 filter = mFilters.next(); 3282 filter = mFilters.next();
3283 } 3283 }
3284 3284
3285 mDialogManager->showFilterEditDialog(&mFilters); 3285 mDialogManager->showFilterEditDialog(&mFilters);
3286} 3286}
3287void CalendarView::toggleFilter() 3287void CalendarView::toggleFilter()
3288{ 3288{
3289 showFilter(! mFilterView->isVisible()); 3289 showFilter(! mFilterView->isVisible());
3290} 3290}
3291 3291
3292KOFilterView *CalendarView::filterView() 3292KOFilterView *CalendarView::filterView()
3293{ 3293{
3294 return mFilterView; 3294 return mFilterView;
3295} 3295}
3296void CalendarView::selectFilter( int fil ) 3296void CalendarView::selectFilter( int fil )
3297{ 3297{
3298 mFilterView->setSelectedFilter( fil ); 3298 mFilterView->setSelectedFilter( fil );
3299} 3299}
3300void CalendarView::showFilter(bool visible) 3300void CalendarView::showFilter(bool visible)
3301{ 3301{
3302 if (visible) mFilterView->show(); 3302 if (visible) mFilterView->show();
3303 else mFilterView->hide(); 3303 else mFilterView->hide();
3304} 3304}
3305void CalendarView::toggleFilerEnabled( ) 3305void CalendarView::toggleFilerEnabled( )
3306{ 3306{
3307 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3307 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3308 if ( !mFilterView->filtersEnabled() ) 3308 if ( !mFilterView->filtersEnabled() )
3309 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3309 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3310 3310
3311} 3311}
3312void CalendarView::updateFilter() 3312void CalendarView::updateFilter()
3313{ 3313{
3314 CalFilter *filter = mFilterView->selectedFilter(); 3314 CalFilter *filter = mFilterView->selectedFilter();
3315 if (filter) { 3315 if (filter) {
3316 if (mFilterView->filtersEnabled()) { 3316 if (mFilterView->filtersEnabled()) {
3317 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3317 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3318 filter->setEnabled(true); 3318 filter->setEnabled(true);
3319 } 3319 }
3320 else filter->setEnabled(false); 3320 else filter->setEnabled(false);
3321 mCalendar->setFilter(filter); 3321 mCalendar->setFilter(filter);
3322 updateView(); 3322 updateView();
3323 } 3323 }
3324} 3324}
3325 3325
3326void CalendarView::filterEdited() 3326void CalendarView::filterEdited()
3327{ 3327{
3328 mFilterView->updateFilters(); 3328 mFilterView->updateFilters();
3329 updateFilter(); 3329 updateFilter();
3330 writeSettings(); 3330 writeSettings();
3331} 3331}
3332 3332
3333 3333
3334void CalendarView::takeOverEvent() 3334void CalendarView::takeOverEvent()
3335{ 3335{
3336 Incidence *incidence = currentSelection(); 3336 Incidence *incidence = currentSelection();
3337 3337
3338 if (!incidence) return; 3338 if (!incidence) return;
3339 3339
3340 incidence->setOrganizer(KOPrefs::instance()->email()); 3340 incidence->setOrganizer(KOPrefs::instance()->email());
3341 incidence->recreate(); 3341 incidence->recreate();
3342 incidence->setReadOnly(false); 3342 incidence->setReadOnly(false);
3343 3343
3344 updateView(); 3344 updateView();
3345} 3345}
3346 3346
3347void CalendarView::takeOverCalendar() 3347void CalendarView::takeOverCalendar()
3348{ 3348{
3349 // TODO: Create Calendar::allIncidences() function and use it here 3349 // TODO: Create Calendar::allIncidences() function and use it here
3350 3350
3351 QPtrList<Event> events = mCalendar->events(); 3351 QPtrList<Event> events = mCalendar->events();
3352 for(uint i=0; i<events.count(); ++i) { 3352 for(uint i=0; i<events.count(); ++i) {
3353 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3353 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3354 events.at(i)->recreate(); 3354 events.at(i)->recreate();
3355 events.at(i)->setReadOnly(false); 3355 events.at(i)->setReadOnly(false);
3356 } 3356 }
3357 3357
3358 QPtrList<Todo> todos = mCalendar->todos(); 3358 QPtrList<Todo> todos = mCalendar->todos();
3359 for(uint i=0; i<todos.count(); ++i) { 3359 for(uint i=0; i<todos.count(); ++i) {
3360 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3360 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3361 todos.at(i)->recreate(); 3361 todos.at(i)->recreate();
3362 todos.at(i)->setReadOnly(false); 3362 todos.at(i)->setReadOnly(false);
3363 } 3363 }
3364 3364
3365 QPtrList<Journal> journals = mCalendar->journals(); 3365 QPtrList<Journal> journals = mCalendar->journals();
3366 for(uint i=0; i<journals.count(); ++i) { 3366 for(uint i=0; i<journals.count(); ++i) {
3367 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3367 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3368 journals.at(i)->recreate(); 3368 journals.at(i)->recreate();
3369 journals.at(i)->setReadOnly(false); 3369 journals.at(i)->setReadOnly(false);
3370 } 3370 }
3371 3371
3372 updateView(); 3372 updateView();
3373} 3373}
3374 3374
3375void CalendarView::showIntro() 3375void CalendarView::showIntro()
3376{ 3376{
3377 kdDebug() << "To be implemented." << endl; 3377 kdDebug() << "To be implemented." << endl;
3378} 3378}
3379 3379
3380QWidgetStack *CalendarView::viewStack() 3380QWidgetStack *CalendarView::viewStack()
3381{ 3381{
3382 return mRightFrame; 3382 return mRightFrame;
3383} 3383}
3384 3384
3385QWidget *CalendarView::leftFrame() 3385QWidget *CalendarView::leftFrame()
3386{ 3386{
3387 return mLeftFrame; 3387 return mLeftFrame;
3388} 3388}
3389 3389
3390DateNavigator *CalendarView::dateNavigator() 3390DateNavigator *CalendarView::dateNavigator()
3391{ 3391{
3392 return mNavigator; 3392 return mNavigator;
3393} 3393}
3394 3394
3395KDateNavigator* CalendarView::dateNavigatorWidget() 3395KDateNavigator* CalendarView::dateNavigatorWidget()
3396{ 3396{
3397 return mDateNavigator; 3397 return mDateNavigator;
3398} 3398}
3399void CalendarView::toggleDateNavigatorWidget() 3399void CalendarView::toggleDateNavigatorWidget()
3400{ 3400{
3401 if (mDateNavigator->isVisible()) 3401 if (mDateNavigator->isVisible())
3402 mDateNavigator->hide(); 3402 mDateNavigator->hide();
3403 else 3403 else
3404 mDateNavigator->show(); 3404 mDateNavigator->show();
3405} 3405}
3406void CalendarView::addView(KOrg::BaseView *view) 3406void CalendarView::addView(KOrg::BaseView *view)
3407{ 3407{
3408 mViewManager->addView(view); 3408 mViewManager->addView(view);
3409} 3409}
3410 3410
3411void CalendarView::showView(KOrg::BaseView *view) 3411void CalendarView::showView(KOrg::BaseView *view)
3412{ 3412{
3413 mViewManager->showView(view, mLeftFrame->isVisible()); 3413 mViewManager->showView(view, mLeftFrame->isVisible());
3414} 3414}
3415 3415
3416Incidence *CalendarView::currentSelection() 3416Incidence *CalendarView::currentSelection()
3417{ 3417{
3418 return mViewManager->currentSelection(); 3418 return mViewManager->currentSelection();
3419} 3419}
3420void CalendarView::toggleAllDaySize() 3420void CalendarView::toggleAllDaySize()
3421{ 3421{
3422 /* 3422 /*
3423 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3423 if ( KOPrefs::instance()->mAllDaySize > 47 )
3424 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3424 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3425 else 3425 else
3426 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3426 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3427 */ 3427 */
3428 viewManager()->agendaView()->toggleAllDay(); 3428 viewManager()->agendaView()->toggleAllDay();
3429} 3429}
3430void CalendarView::toggleExpand() 3430void CalendarView::toggleExpand()
3431{ 3431{
3432 // if ( mLeftFrame->isHidden() ) { 3432 // if ( mLeftFrame->isHidden() ) {
3433 // mLeftFrame->show(); 3433 // mLeftFrame->show();
3434 // emit calendarViewExpanded( false ); 3434 // emit calendarViewExpanded( false );
3435 // } else { 3435 // } else {
3436 // mLeftFrame->hide(); 3436 // mLeftFrame->hide();
3437 // emit calendarViewExpanded( true ); 3437 // emit calendarViewExpanded( true );
3438 // } 3438 // }
3439 3439
3440 globalFlagBlockAgenda = 1; 3440 globalFlagBlockAgenda = 1;
3441 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3441 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3442 globalFlagBlockAgenda = 5; 3442 globalFlagBlockAgenda = 5;
3443 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3443 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3444 //mViewManager->showView( 0, true ); 3444 //mViewManager->showView( 0, true );
3445} 3445}
3446 3446
3447void CalendarView::calendarModified( bool modified, Calendar * ) 3447void CalendarView::calendarModified( bool modified, Calendar * )
3448{ 3448{
3449 setModified( modified ); 3449 setModified( modified );
3450} 3450}
3451 3451
3452Todo *CalendarView::selectedTodo() 3452Todo *CalendarView::selectedTodo()
3453{ 3453{
3454 Incidence *incidence = currentSelection(); 3454 Incidence *incidence = currentSelection();
3455 if ( incidence && incidence->type() == "Todo" ) { 3455 if ( incidence && incidence->type() == "Todo" ) {
3456 return static_cast<Todo *>( incidence ); 3456 return static_cast<Todo *>( incidence );
3457 } 3457 }
3458 3458
3459 incidence = mTodoList->selectedIncidences().first(); 3459 incidence = mTodoList->selectedIncidences().first();
3460 if ( incidence && incidence->type() == "Todo" ) { 3460 if ( incidence && incidence->type() == "Todo" ) {
3461 return static_cast<Todo *>( incidence ); 3461 return static_cast<Todo *>( incidence );
3462 } 3462 }
3463 3463
3464 return 0; 3464 return 0;
3465} 3465}
3466 3466
3467void CalendarView::dialogClosing(Incidence *in) 3467void CalendarView::dialogClosing(Incidence *in)
3468{ 3468{
3469 // mDialogList.remove(in); 3469 // mDialogList.remove(in);
3470} 3470}
3471 3471
3472void CalendarView::showIncidence() 3472void CalendarView::showIncidence()
3473{ 3473{
3474 Incidence *incidence = currentSelection(); 3474 Incidence *incidence = currentSelection();
3475 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3475 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3476 if ( incidence ) { 3476 if ( incidence ) {
3477 ShowIncidenceVisitor v; 3477 ShowIncidenceVisitor v;
3478 v.act( incidence, this ); 3478 v.act( incidence, this );
3479 } 3479 }
3480} 3480}
3481void CalendarView::editIncidenceDescription() 3481void CalendarView::editIncidenceDescription()
3482{ 3482{
3483 mFlagEditDescription = true; 3483 mFlagEditDescription = true;
3484 editIncidence(); 3484 editIncidence();
3485 mFlagEditDescription = false; 3485 mFlagEditDescription = false;
3486} 3486}
3487void CalendarView::editIncidence() 3487void CalendarView::editIncidence()
3488{ 3488{
3489 // qDebug("editIncidence() "); 3489 // qDebug("editIncidence() ");
3490 Incidence *incidence = currentSelection(); 3490 Incidence *incidence = currentSelection();
3491 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3491 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3492 if ( incidence ) { 3492 if ( incidence ) {
3493 EditIncidenceVisitor v; 3493 EditIncidenceVisitor v;
3494 v.act( incidence, this ); 3494 v.act( incidence, this );
3495 } 3495 }
3496} 3496}
3497 3497
3498void CalendarView::deleteIncidence() 3498void CalendarView::deleteIncidence()
3499{ 3499{
3500 Incidence *incidence = currentSelection(); 3500 Incidence *incidence = currentSelection();
3501 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3501 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3502 if ( incidence ) { 3502 if ( incidence ) {
3503 deleteIncidence(incidence); 3503 deleteIncidence(incidence);
3504 } 3504 }
3505} 3505}
3506 3506
3507void CalendarView::showIncidence(Incidence *incidence) 3507void CalendarView::showIncidence(Incidence *incidence)
3508{ 3508{
3509 if ( incidence ) { 3509 if ( incidence ) {
3510 ShowIncidenceVisitor v; 3510 ShowIncidenceVisitor v;
3511 v.act( incidence, this ); 3511 v.act( incidence, this );
3512 } 3512 }
3513} 3513}
3514 3514
3515void CalendarView::editIncidence(Incidence *incidence) 3515void CalendarView::editIncidence(Incidence *incidence)
3516{ 3516{
3517 if ( incidence ) { 3517 if ( incidence ) {
3518 3518
3519 EditIncidenceVisitor v; 3519 EditIncidenceVisitor v;
3520 v.act( incidence, this ); 3520 v.act( incidence, this );
3521 3521
3522 } 3522 }
3523} 3523}
3524 3524
3525void CalendarView::deleteIncidence(Incidence *incidence) 3525void CalendarView::deleteIncidence(Incidence *incidence)
3526{ 3526{
3527 //qDebug(" CalendarView::deleteIncidence "); 3527 //qDebug(" CalendarView::deleteIncidence ");
3528 if ( incidence ) { 3528 if ( incidence ) {
3529 DeleteIncidenceVisitor v; 3529 DeleteIncidenceVisitor v;
3530 v.act( incidence, this ); 3530 v.act( incidence, this );
3531 } 3531 }
3532} 3532}
3533 3533
3534 3534
3535void CalendarView::lookForOutgoingMessages() 3535void CalendarView::lookForOutgoingMessages()
3536{ 3536{
3537 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3537 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3538 ogd->loadMessages(); 3538 ogd->loadMessages();
3539} 3539}
3540 3540
3541void CalendarView::lookForIncomingMessages() 3541void CalendarView::lookForIncomingMessages()
3542{ 3542{
3543 IncomingDialog *icd = mDialogManager->incomingDialog(); 3543 IncomingDialog *icd = mDialogManager->incomingDialog();
3544 icd->retrieve(); 3544 icd->retrieve();
3545} 3545}
3546 3546
3547bool CalendarView::removeCompletedSubTodos( Todo* t ) 3547bool CalendarView::removeCompletedSubTodos( Todo* t )
3548{ 3548{
3549 bool deleteTodo = true; 3549 bool deleteTodo = true;
3550 QPtrList<Incidence> subTodos; 3550 QPtrList<Incidence> subTodos;
3551 Incidence *aTodo; 3551 Incidence *aTodo;
3552 subTodos = t->relations(); 3552 subTodos = t->relations();
3553 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3553 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3554 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3554 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3555 deleteTodo = false; 3555 deleteTodo = false;
3556 } 3556 }
3557 if ( deleteTodo ) { 3557 if ( deleteTodo ) {
3558 if ( t->isCompleted() ) { 3558 if ( t->isCompleted() ) {
3559 checkExternalId( t ); 3559 checkExternalId( t );
3560 mCalendar->deleteTodo( t ); 3560 mCalendar->deleteTodo( t );
3561 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3561 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3562 } 3562 }
3563 else 3563 else
3564 deleteTodo = false; 3564 deleteTodo = false;
3565 } 3565 }
3566 return deleteTodo; 3566 return deleteTodo;
3567 3567
3568} 3568}
3569void CalendarView::purgeCompleted() 3569void CalendarView::purgeCompleted()
3570{ 3570{
3571 int result = KMessageBox::warningContinueCancel(this, 3571 int result = KMessageBox::warningContinueCancel(this,
3572 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3572 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3573 3573
3574 if (result == KMessageBox::Continue) { 3574 if (result == KMessageBox::Continue) {
3575 3575
3576 QPtrList<Todo> todoCal; 3576 QPtrList<Todo> todoCal;
3577 QPtrList<Todo> rootTodos; 3577 QPtrList<Todo> rootTodos;
3578 //QPtrList<Incidence> rel; 3578 //QPtrList<Incidence> rel;
3579 Todo *aTodo;//, *rTodo; 3579 Todo *aTodo;//, *rTodo;
3580 Incidence *rIncidence; 3580 Incidence *rIncidence;
3581 bool childDelete = false; 3581 bool childDelete = false;
3582 bool deletedOne = true; 3582 bool deletedOne = true;
3583 todoCal = calendar()->todos(); 3583 todoCal = calendar()->todos();
3584 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3584 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3585 if ( !aTodo->relatedTo() ) 3585 if ( !aTodo->relatedTo() )
3586 rootTodos.append( aTodo ); 3586 rootTodos.append( aTodo );
3587 } 3587 }
3588 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3588 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3589 removeCompletedSubTodos( aTodo ); 3589 removeCompletedSubTodos( aTodo );
3590 } 3590 }
3591 3591
3592 updateView(); 3592 updateView();
3593 } 3593 }
3594} 3594}
3595 3595
3596void CalendarView::slotCalendarChanged() 3596void CalendarView::slotCalendarChanged()
3597{ 3597{
3598 ; 3598 ;
3599} 3599}
3600 3600
3601NavigatorBar *CalendarView::navigatorBar() 3601NavigatorBar *CalendarView::navigatorBar()
3602{ 3602{
3603 return mNavigatorBar; 3603 return mNavigatorBar;
3604} 3604}
3605 3605
3606 3606
3607 3607
3608void CalendarView::keyPressEvent ( QKeyEvent *e) 3608void CalendarView::keyPressEvent ( QKeyEvent *e)
3609{ 3609{
3610 //qDebug(" alendarView::keyPressEvent "); 3610 //qDebug(" alendarView::keyPressEvent ");
3611 e->ignore(); 3611 e->ignore();
3612} 3612}
3613 3613
3614//#include "calendarview.moc" 3614//#include "calendarview.moc"
3615 3615
3616//#include "calendarviewbase.moc" 3616//#include "calendarviewbase.moc"