summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp2
-rw-r--r--korganizer/koviewmanager.cpp6
-rw-r--r--korganizer/koviewmanager.h2
-rw-r--r--korganizer/kowhatsnextview.cpp159
-rw-r--r--libkcal/incidence.cpp8
-rw-r--r--libkcal/incidencebase.cpp4
6 files changed, 104 insertions, 77 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index ba0e6c6..bbed05b 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3612 +1,3612 @@
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 local->addIncidence( inL ); 1052 local->addIncidence( inL );
1053 ++changedLocal; 1053 ++changedLocal;
1054 } 1054 }
1055 } 1055 }
1056 } else { // no conflict 1056 } else { // no conflict
1057 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1057 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1058 QString des = eventLSync->description(); 1058 QString des = eventLSync->description();
1059 QString pref = "e"; 1059 QString pref = "e";
1060 if ( inR->type() == "Todo" ) 1060 if ( inR->type() == "Todo" )
1061 pref = "t"; 1061 pref = "t";
1062 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1062 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1063 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1063 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1064 //remote->deleteIncidence( inR ); 1064 //remote->deleteIncidence( inR );
1065 ++deletedEventR; 1065 ++deletedEventR;
1066 } else { 1066 } else {
1067 inR->setLastModified( modifiedCalendar ); 1067 inR->setLastModified( modifiedCalendar );
1068 inL = inR->clone(); 1068 inL = inR->clone();
1069 local->addIncidence( inL ); 1069 local->addIncidence( inL );
1070 ++addedEvent; 1070 ++addedEvent;
1071 } 1071 }
1072 } else { 1072 } else {
1073 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1073 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1074 inR->setLastModified( modifiedCalendar ); 1074 inR->setLastModified( modifiedCalendar );
1075 local->addIncidence( inR->clone() ); 1075 local->addIncidence( inR->clone() );
1076 ++addedEvent; 1076 ++addedEvent;
1077 } else { 1077 } else {
1078 checkExternSyncEvent(eventRSyncSharp, inR); 1078 checkExternSyncEvent(eventRSyncSharp, inR);
1079 remote->deleteIncidence( inR ); 1079 remote->deleteIncidence( inR );
1080 ++deletedEventR; 1080 ++deletedEventR;
1081 } 1081 }
1082 } 1082 }
1083 } 1083 }
1084 } 1084 }
1085 inR = er.next(); 1085 inR = er.next();
1086 } 1086 }
1087 QPtrList<Incidence> el = local->rawIncidences(); 1087 QPtrList<Incidence> el = local->rawIncidences();
1088 inL = el.first(); 1088 inL = el.first();
1089 modulo = (el.count()/10)+1; 1089 modulo = (el.count()/10)+1;
1090 bar.setCaption (i18n("Add / remove events") ); 1090 bar.setCaption (i18n("Add / remove events") );
1091 bar.setTotalSteps ( el.count() ) ; 1091 bar.setTotalSteps ( el.count() ) ;
1092 bar.show(); 1092 bar.show();
1093 incCounter = 0; 1093 incCounter = 0;
1094 1094
1095 while ( inL ) { 1095 while ( inL ) {
1096 1096
1097 qApp->processEvents(); 1097 qApp->processEvents();
1098 if ( ! bar.isVisible() ) 1098 if ( ! bar.isVisible() )
1099 return false; 1099 return false;
1100 if ( incCounter % modulo == 0 ) 1100 if ( incCounter % modulo == 0 )
1101 bar.setProgress( incCounter ); 1101 bar.setProgress( incCounter );
1102 ++incCounter; 1102 ++incCounter;
1103 uid = inL->uid(); 1103 uid = inL->uid();
1104 bool skipIncidence = false; 1104 bool skipIncidence = false;
1105 if ( uid.left(15) == QString("last-syncEvent-") ) 1105 if ( uid.left(15) == QString("last-syncEvent-") )
1106 skipIncidence = true; 1106 skipIncidence = true;
1107 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1107 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1108 skipIncidence = true; 1108 skipIncidence = true;
1109 if ( !skipIncidence ) { 1109 if ( !skipIncidence ) {
1110 inR = remote->incidence( uid ); 1110 inR = remote->incidence( uid );
1111 if ( ! inR ) { 1111 if ( ! inR ) {
1112 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1112 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1113 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1113 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1114 checkExternSyncEvent(eventLSyncSharp, inL); 1114 checkExternSyncEvent(eventLSyncSharp, inL);
1115 local->deleteIncidence( inL ); 1115 local->deleteIncidence( inL );
1116 ++deletedEventL; 1116 ++deletedEventL;
1117 } else { 1117 } else {
1118 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1118 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1119 inL->removeID(mCurrentSyncDevice ); 1119 inL->removeID(mCurrentSyncDevice );
1120 ++addedEventR; 1120 ++addedEventR;
1121 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1121 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1122 inL->setLastModified( modifiedCalendar ); 1122 inL->setLastModified( modifiedCalendar );
1123 inR = inL->clone(); 1123 inR = inL->clone();
1124 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1124 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1125 remote->addIncidence( inR ); 1125 remote->addIncidence( inR );
1126 } 1126 }
1127 } 1127 }
1128 } else { 1128 } else {
1129 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1129 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1130 checkExternSyncEvent(eventLSyncSharp, inL); 1130 checkExternSyncEvent(eventLSyncSharp, inL);
1131 local->deleteIncidence( inL ); 1131 local->deleteIncidence( inL );
1132 ++deletedEventL; 1132 ++deletedEventL;
1133 } else { 1133 } else {
1134 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1134 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1135 ++addedEventR; 1135 ++addedEventR;
1136 inL->setLastModified( modifiedCalendar ); 1136 inL->setLastModified( modifiedCalendar );
1137 remote->addIncidence( inL->clone() ); 1137 remote->addIncidence( inL->clone() );
1138 } 1138 }
1139 } 1139 }
1140 } 1140 }
1141 } 1141 }
1142 } 1142 }
1143 inL = el.next(); 1143 inL = el.next();
1144 } 1144 }
1145 int delFut = 0; 1145 int delFut = 0;
1146 if ( KOPrefs::instance()->mWriteBackInFuture ) { 1146 if ( KOPrefs::instance()->mWriteBackInFuture ) {
1147 er = remote->rawIncidences(); 1147 er = remote->rawIncidences();
1148 inR = er.first(); 1148 inR = er.first();
1149 QDateTime dt; 1149 QDateTime dt;
1150 QDateTime cur = QDateTime::currentDateTime(); 1150 QDateTime cur = QDateTime::currentDateTime();
1151 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); 1151 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 );
1152 while ( inR ) { 1152 while ( inR ) {
1153 if ( inR->type() == "Todo" ) { 1153 if ( inR->type() == "Todo" ) {
1154 Todo * t = (Todo*)inR; 1154 Todo * t = (Todo*)inR;
1155 if ( t->hasDueDate() ) 1155 if ( t->hasDueDate() )
1156 dt = t->dtDue(); 1156 dt = t->dtDue();
1157 else 1157 else
1158 dt = cur.addSecs( 62 ); 1158 dt = cur.addSecs( 62 );
1159 } 1159 }
1160 else if (inR->type() == "Event" ) { 1160 else if (inR->type() == "Event" ) {
1161 bool ok; 1161 bool ok;
1162 dt = inR->getNextOccurence( cur, &ok ); 1162 dt = inR->getNextOccurence( cur, &ok );
1163 if ( !ok ) 1163 if ( !ok )
1164 dt = cur.addSecs( -62 ); 1164 dt = cur.addSecs( -62 );
1165 } 1165 }
1166 else 1166 else
1167 dt = inR->dtStart(); 1167 dt = inR->dtStart();
1168 if ( dt < cur || dt > end ) { 1168 if ( dt < cur || dt > end ) {
1169 remote->deleteIncidence( inR ); 1169 remote->deleteIncidence( inR );
1170 ++delFut; 1170 ++delFut;
1171 } 1171 }
1172 inR = er.next(); 1172 inR = er.next();
1173 } 1173 }
1174 } 1174 }
1175 bar.hide(); 1175 bar.hide();
1176 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1176 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1177 eventLSync->setReadOnly( false ); 1177 eventLSync->setReadOnly( false );
1178 eventLSync->setDtStart( mLastCalendarSync ); 1178 eventLSync->setDtStart( mLastCalendarSync );
1179 eventRSync->setDtStart( mLastCalendarSync ); 1179 eventRSync->setDtStart( mLastCalendarSync );
1180 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1180 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1181 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1181 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1182 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1182 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1183 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1183 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1184 eventLSync->setReadOnly( true ); 1184 eventLSync->setReadOnly( true );
1185 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1185 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1186 remote->addEvent( eventRSync ); 1186 remote->addEvent( eventRSync );
1187 QString mes; 1187 QString mes;
1188 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 ); 1188 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 );
1189 QString delmess; 1189 QString delmess;
1190 if ( delFut ) { 1190 if ( delFut ) {
1191 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 ); 1191 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 );
1192 mes += delmess; 1192 mes += delmess;
1193 } 1193 }
1194 if ( KOPrefs::instance()->mShowSyncSummary ) { 1194 if ( KOPrefs::instance()->mShowSyncSummary ) {
1195 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1195 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1196 } 1196 }
1197 qDebug( mes ); 1197 qDebug( mes );
1198 mCalendar->checkAlarmForIncidence( 0, true ); 1198 mCalendar->checkAlarmForIncidence( 0, true );
1199 return syncOK; 1199 return syncOK;
1200} 1200}
1201 1201
1202void CalendarView::setSyncDevice( QString s ) 1202void CalendarView::setSyncDevice( QString s )
1203{ 1203{
1204 mCurrentSyncDevice= s; 1204 mCurrentSyncDevice= s;
1205} 1205}
1206void CalendarView::setSyncName( QString s ) 1206void CalendarView::setSyncName( QString s )
1207{ 1207{
1208 mCurrentSyncName= s; 1208 mCurrentSyncName= s;
1209} 1209}
1210bool CalendarView::syncCalendar(QString filename, int mode) 1210bool CalendarView::syncCalendar(QString filename, int mode)
1211{ 1211{
1212 mGlobalSyncMode = SYNC_MODE_NORMAL; 1212 mGlobalSyncMode = SYNC_MODE_NORMAL;
1213 CalendarLocal* calendar = new CalendarLocal(); 1213 CalendarLocal* calendar = new CalendarLocal();
1214 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1214 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1215 FileStorage* storage = new FileStorage( calendar ); 1215 FileStorage* storage = new FileStorage( calendar );
1216 bool syncOK = false; 1216 bool syncOK = false;
1217 storage->setFileName( filename ); 1217 storage->setFileName( filename );
1218 // qDebug("loading ... "); 1218 // qDebug("loading ... ");
1219 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1219 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1220 getEventViewerDialog()->setSyncMode( true ); 1220 getEventViewerDialog()->setSyncMode( true );
1221 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1221 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1222 getEventViewerDialog()->setSyncMode( false ); 1222 getEventViewerDialog()->setSyncMode( false );
1223 if ( syncOK ) { 1223 if ( syncOK ) {
1224 if ( KOPrefs::instance()->mWriteBackFile ) 1224 if ( KOPrefs::instance()->mWriteBackFile )
1225 { 1225 {
1226 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1226 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1227 storage->save(); 1227 storage->save();
1228 } 1228 }
1229 } 1229 }
1230 setModified( true ); 1230 setModified( true );
1231 } 1231 }
1232 delete storage; 1232 delete storage;
1233 delete calendar; 1233 delete calendar;
1234 if ( syncOK ) 1234 if ( syncOK )
1235 updateView(); 1235 updateView();
1236 return syncOK; 1236 return syncOK;
1237} 1237}
1238void CalendarView::syncPhone() 1238void CalendarView::syncPhone()
1239{ 1239{
1240 syncExternal( 1 ); 1240 syncExternal( 1 );
1241} 1241}
1242void CalendarView::syncExternal( int mode ) 1242void CalendarView::syncExternal( int mode )
1243{ 1243{
1244 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1244 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1245 //mCurrentSyncDevice = "sharp-DTM"; 1245 //mCurrentSyncDevice = "sharp-DTM";
1246 if ( KOPrefs::instance()->mAskForPreferences ) 1246 if ( KOPrefs::instance()->mAskForPreferences )
1247 edit_sync_options(); 1247 edit_sync_options();
1248 qApp->processEvents(); 1248 qApp->processEvents();
1249 CalendarLocal* calendar = new CalendarLocal(); 1249 CalendarLocal* calendar = new CalendarLocal();
1250 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1250 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1251 bool syncOK = false; 1251 bool syncOK = false;
1252 bool loadSuccess = false; 1252 bool loadSuccess = false;
1253 PhoneFormat* phoneFormat = 0; 1253 PhoneFormat* phoneFormat = 0;
1254#ifndef DESKTOP_VERSION 1254#ifndef DESKTOP_VERSION
1255 SharpFormat* sharpFormat = 0; 1255 SharpFormat* sharpFormat = 0;
1256 if ( mode == 0 ) { // sharp 1256 if ( mode == 0 ) { // sharp
1257 sharpFormat = new SharpFormat () ; 1257 sharpFormat = new SharpFormat () ;
1258 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1258 loadSuccess = sharpFormat->load( calendar, mCalendar );
1259 1259
1260 } else 1260 } else
1261#endif 1261#endif
1262 if ( mode == 1 ) { // phone 1262 if ( mode == 1 ) { // phone
1263 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1263 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1264 KOPrefs::instance()->mPhoneDevice, 1264 KOPrefs::instance()->mPhoneDevice,
1265 KOPrefs::instance()->mPhoneConnection, 1265 KOPrefs::instance()->mPhoneConnection,
1266 KOPrefs::instance()->mPhoneModel); 1266 KOPrefs::instance()->mPhoneModel);
1267 loadSuccess = phoneFormat->load( calendar,mCalendar); 1267 loadSuccess = phoneFormat->load( calendar,mCalendar);
1268 1268
1269 } else 1269 } else
1270 return; 1270 return;
1271 if ( loadSuccess ) { 1271 if ( loadSuccess ) {
1272 getEventViewerDialog()->setSyncMode( true ); 1272 getEventViewerDialog()->setSyncMode( true );
1273 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1273 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1274 getEventViewerDialog()->setSyncMode( false ); 1274 getEventViewerDialog()->setSyncMode( false );
1275 qApp->processEvents(); 1275 qApp->processEvents();
1276 if ( syncOK ) { 1276 if ( syncOK ) {
1277 if ( KOPrefs::instance()->mWriteBackFile ) 1277 if ( KOPrefs::instance()->mWriteBackFile )
1278 { 1278 {
1279 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1279 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1280 Incidence* inc = iL.first(); 1280 Incidence* inc = iL.first();
1281 if ( phoneFormat ) { 1281 if ( phoneFormat ) {
1282 while ( inc ) { 1282 while ( inc ) {
1283 inc->removeID(mCurrentSyncDevice); 1283 inc->removeID(mCurrentSyncDevice);
1284 inc = iL.next(); 1284 inc = iL.next();
1285 } 1285 }
1286 } 1286 }
1287#ifndef DESKTOP_VERSION 1287#ifndef DESKTOP_VERSION
1288 if ( sharpFormat ) 1288 if ( sharpFormat )
1289 sharpFormat->save(calendar); 1289 sharpFormat->save(calendar);
1290#endif 1290#endif
1291 if ( phoneFormat ) 1291 if ( phoneFormat )
1292 phoneFormat->save(calendar); 1292 phoneFormat->save(calendar);
1293 iL = calendar->rawIncidences(); 1293 iL = calendar->rawIncidences();
1294 inc = iL.first(); 1294 inc = iL.first();
1295 Incidence* loc; 1295 Incidence* loc;
1296 while ( inc ) { 1296 while ( inc ) {
1297 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1297 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1298 loc = mCalendar->incidence(inc->uid() ); 1298 loc = mCalendar->incidence(inc->uid() );
1299 if ( loc ) { 1299 if ( loc ) {
1300 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1300 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1301 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1301 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1302 } 1302 }
1303 } 1303 }
1304 inc = iL.next(); 1304 inc = iL.next();
1305 } 1305 }
1306 Incidence* lse = getLastSyncEvent(); 1306 Incidence* lse = getLastSyncEvent();
1307 if ( lse ) { 1307 if ( lse ) {
1308 lse->setReadOnly( false ); 1308 lse->setReadOnly( false );
1309 lse->setDescription( "" ); 1309 lse->setDescription( "" );
1310 lse->setReadOnly( true ); 1310 lse->setReadOnly( true );
1311 } 1311 }
1312 } 1312 }
1313 } 1313 }
1314 setModified( true ); 1314 setModified( true );
1315 } else { 1315 } else {
1316 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1316 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1317 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1317 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1318 question, i18n("Ok")) ; 1318 question, i18n("Ok")) ;
1319 1319
1320 } 1320 }
1321 delete calendar; 1321 delete calendar;
1322 updateView(); 1322 updateView();
1323 return ;//syncOK; 1323 return ;//syncOK;
1324 1324
1325} 1325}
1326void CalendarView::syncSharp() 1326void CalendarView::syncSharp()
1327{ 1327{
1328 syncExternal( 0 ); 1328 syncExternal( 0 );
1329 1329
1330} 1330}
1331 1331
1332 1332
1333//#include <kabc/stdaddressbook.h> 1333//#include <kabc/stdaddressbook.h>
1334bool CalendarView::importBday() 1334bool CalendarView::importBday()
1335{ 1335{
1336#if 0 1336#if 0
1337 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1337 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1338 KABC::AddressBook::Iterator it; 1338 KABC::AddressBook::Iterator it;
1339 int count = 0; 1339 int count = 0;
1340 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1340 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1341 ++count; 1341 ++count;
1342 } 1342 }
1343 QProgressBar bar(count,0 ); 1343 QProgressBar bar(count,0 );
1344 int w = 300; 1344 int w = 300;
1345 if ( QApplication::desktop()->width() < 320 ) 1345 if ( QApplication::desktop()->width() < 320 )
1346 w = 220; 1346 w = 220;
1347 int h = bar.sizeHint().height() ; 1347 int h = bar.sizeHint().height() ;
1348 int dw = QApplication::desktop()->width(); 1348 int dw = QApplication::desktop()->width();
1349 int dh = QApplication::desktop()->height(); 1349 int dh = QApplication::desktop()->height();
1350 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1350 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1351 bar.show(); 1351 bar.show();
1352 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1352 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1353 qApp->processEvents(); 1353 qApp->processEvents();
1354 count = 0; 1354 count = 0;
1355 int addCount = 0; 1355 int addCount = 0;
1356 KCal::Attendee* a = 0; 1356 KCal::Attendee* a = 0;
1357 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1357 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1358 if ( ! bar.isVisible() ) 1358 if ( ! bar.isVisible() )
1359 return false; 1359 return false;
1360 bar.setProgress( count++ ); 1360 bar.setProgress( count++ );
1361 qApp->processEvents(); 1361 qApp->processEvents();
1362 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1362 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1363 if ( (*it).birthday().date().isValid() ){ 1363 if ( (*it).birthday().date().isValid() ){
1364 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1364 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1365 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1365 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1366 ++addCount; 1366 ++addCount;
1367 } 1367 }
1368 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1368 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1369 if ( anni.isValid() ){ 1369 if ( anni.isValid() ){
1370 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1370 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1371 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1371 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1372 ++addCount; 1372 ++addCount;
1373 } 1373 }
1374 } 1374 }
1375 updateView(); 1375 updateView();
1376 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1376 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1377#endif 1377#endif
1378 return true; 1378 return true;
1379} 1379}
1380 1380
1381bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1381bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1382{ 1382{
1383 //qDebug("addAnni "); 1383 //qDebug("addAnni ");
1384 Event * ev = new Event(); 1384 Event * ev = new Event();
1385 if ( a ) { 1385 if ( a ) {
1386 ev->addAttendee( a ); 1386 ev->addAttendee( a );
1387 } 1387 }
1388 QString kind; 1388 QString kind;
1389 if ( birthday ) 1389 if ( birthday )
1390 kind = i18n( "Birthday" ); 1390 kind = i18n( "Birthday" );
1391 else 1391 else
1392 kind = i18n( "Anniversary" ); 1392 kind = i18n( "Anniversary" );
1393 ev->setSummary( name + " - " + kind ); 1393 ev->setSummary( name + " - " + kind );
1394 ev->setOrganizer( "nobody@nowhere" ); 1394 ev->setOrganizer( "nobody@nowhere" );
1395 ev->setCategories( kind ); 1395 ev->setCategories( kind );
1396 ev->setDtStart( QDateTime(date) ); 1396 ev->setDtStart( QDateTime(date) );
1397 ev->setDtEnd( QDateTime(date) ); 1397 ev->setDtEnd( QDateTime(date) );
1398 ev->setFloats( true ); 1398 ev->setFloats( true );
1399 Recurrence * rec = ev->recurrence(); 1399 Recurrence * rec = ev->recurrence();
1400 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1400 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1401 rec->addYearlyNum( date.month() ); 1401 rec->addYearlyNum( date.month() );
1402 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1402 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1403 delete ev; 1403 delete ev;
1404 return false; 1404 return false;
1405 } 1405 }
1406 return true; 1406 return true;
1407 1407
1408} 1408}
1409bool CalendarView::importQtopia( const QString &categories, 1409bool CalendarView::importQtopia( const QString &categories,
1410 const QString &datebook, 1410 const QString &datebook,
1411 const QString &todolist ) 1411 const QString &todolist )
1412{ 1412{
1413 1413
1414 QtopiaFormat qtopiaFormat; 1414 QtopiaFormat qtopiaFormat;
1415 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1415 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1416 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1416 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1417 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1417 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1418 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1418 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1419 1419
1420 updateView(); 1420 updateView();
1421 return true; 1421 return true;
1422 1422
1423#if 0 1423#if 0
1424 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1424 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1425 mCurrentSyncDevice = "qtopia-XML"; 1425 mCurrentSyncDevice = "qtopia-XML";
1426 if ( KOPrefs::instance()->mAskForPreferences ) 1426 if ( KOPrefs::instance()->mAskForPreferences )
1427 edit_sync_options(); 1427 edit_sync_options();
1428 qApp->processEvents(); 1428 qApp->processEvents();
1429 CalendarLocal* calendar = new CalendarLocal(); 1429 CalendarLocal* calendar = new CalendarLocal();
1430 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1430 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1431 bool syncOK = false; 1431 bool syncOK = false;
1432 QtopiaFormat qtopiaFormat; 1432 QtopiaFormat qtopiaFormat;
1433 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1433 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1434 bool loadOk = true; 1434 bool loadOk = true;
1435 if ( !categories.isEmpty() ) 1435 if ( !categories.isEmpty() )
1436 loadOk = qtopiaFormat.load( calendar, categories ); 1436 loadOk = qtopiaFormat.load( calendar, categories );
1437 if ( loadOk && !datebook.isEmpty() ) 1437 if ( loadOk && !datebook.isEmpty() )
1438 loadOk = qtopiaFormat.load( calendar, datebook ); 1438 loadOk = qtopiaFormat.load( calendar, datebook );
1439 if ( loadOk && !todolist.isEmpty() ) 1439 if ( loadOk && !todolist.isEmpty() )
1440 loadOk = qtopiaFormat.load( calendar, todolist ); 1440 loadOk = qtopiaFormat.load( calendar, todolist );
1441 1441
1442 if ( loadOk ) { 1442 if ( loadOk ) {
1443 getEventViewerDialog()->setSyncMode( true ); 1443 getEventViewerDialog()->setSyncMode( true );
1444 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1444 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1445 getEventViewerDialog()->setSyncMode( false ); 1445 getEventViewerDialog()->setSyncMode( false );
1446 qApp->processEvents(); 1446 qApp->processEvents();
1447 if ( syncOK ) { 1447 if ( syncOK ) {
1448 if ( KOPrefs::instance()->mWriteBackFile ) 1448 if ( KOPrefs::instance()->mWriteBackFile )
1449 { 1449 {
1450 // write back XML file 1450 // write back XML file
1451 1451
1452 } 1452 }
1453 setModified( true ); 1453 setModified( true );
1454 } 1454 }
1455 } else { 1455 } else {
1456 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1456 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1457 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1457 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1458 question, i18n("Ok")) ; 1458 question, i18n("Ok")) ;
1459 } 1459 }
1460 delete calendar; 1460 delete calendar;
1461 updateView(); 1461 updateView();
1462 return syncOK; 1462 return syncOK;
1463 1463
1464 1464
1465#endif 1465#endif
1466 1466
1467} 1467}
1468 1468
1469void CalendarView::setSyncEventsReadOnly() 1469void CalendarView::setSyncEventsReadOnly()
1470{ 1470{
1471 Event * ev; 1471 Event * ev;
1472 QPtrList<Event> eL = mCalendar->rawEvents(); 1472 QPtrList<Event> eL = mCalendar->rawEvents();
1473 ev = eL.first(); 1473 ev = eL.first();
1474 while ( ev ) { 1474 while ( ev ) {
1475 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1475 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1476 ev->setReadOnly( true ); 1476 ev->setReadOnly( true );
1477 ev = eL.next(); 1477 ev = eL.next();
1478 } 1478 }
1479} 1479}
1480bool CalendarView::openCalendar(QString filename, bool merge) 1480bool CalendarView::openCalendar(QString filename, bool merge)
1481{ 1481{
1482 1482
1483 if (filename.isEmpty()) { 1483 if (filename.isEmpty()) {
1484 return false; 1484 return false;
1485 } 1485 }
1486 1486
1487 if (!QFile::exists(filename)) { 1487 if (!QFile::exists(filename)) {
1488 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1488 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1489 return false; 1489 return false;
1490 } 1490 }
1491 1491
1492 globalFlagBlockAgenda = 1; 1492 globalFlagBlockAgenda = 1;
1493 if (!merge) mCalendar->close(); 1493 if (!merge) mCalendar->close();
1494 1494
1495 mStorage->setFileName( filename ); 1495 mStorage->setFileName( filename );
1496 1496
1497 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1497 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1498 if ( merge ) ;//setModified( true ); 1498 if ( merge ) ;//setModified( true );
1499 else { 1499 else {
1500 //setModified( true ); 1500 //setModified( true );
1501 mViewManager->setDocumentId( filename ); 1501 mViewManager->setDocumentId( filename );
1502 mDialogManager->setDocumentId( filename ); 1502 mDialogManager->setDocumentId( filename );
1503 mTodoList->setDocumentId( filename ); 1503 mTodoList->setDocumentId( filename );
1504 } 1504 }
1505 globalFlagBlockAgenda = 2; 1505 globalFlagBlockAgenda = 2;
1506 // if ( getLastSyncEvent() ) 1506 // if ( getLastSyncEvent() )
1507 // getLastSyncEvent()->setReadOnly( true ); 1507 // getLastSyncEvent()->setReadOnly( true );
1508 mCalendar->reInitAlarmSettings(); 1508 mCalendar->reInitAlarmSettings();
1509 setSyncEventsReadOnly(); 1509 setSyncEventsReadOnly();
1510 updateUnmanagedViews(); 1510 updateUnmanagedViews();
1511 updateView(); 1511 updateView();
1512 if ( filename != MainWindow::defaultFileName() ) 1512 if ( filename != MainWindow::defaultFileName() )
1513 saveCalendar( MainWindow::defaultFileName() ); 1513 saveCalendar( MainWindow::defaultFileName() );
1514 loadedFileVersion = QDateTime::currentDateTime(); 1514 loadedFileVersion = QDateTime::currentDateTime();
1515 return true; 1515 return true;
1516 } else { 1516 } else {
1517 // while failing to load, the calendar object could 1517 // while failing to load, the calendar object could
1518 // have become partially populated. Clear it out. 1518 // have become partially populated. Clear it out.
1519 if ( !merge ) mCalendar->close(); 1519 if ( !merge ) mCalendar->close();
1520 1520
1521 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1521 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1522 1522
1523 globalFlagBlockAgenda = 2; 1523 globalFlagBlockAgenda = 2;
1524 updateView(); 1524 updateView();
1525 } 1525 }
1526 return false; 1526 return false;
1527} 1527}
1528void CalendarView::setLoadedFileVersion(QDateTime dt) 1528void CalendarView::setLoadedFileVersion(QDateTime dt)
1529{ 1529{
1530 loadedFileVersion = dt; 1530 loadedFileVersion = dt;
1531} 1531}
1532bool CalendarView::checkFileChanged(QString fn) 1532bool CalendarView::checkFileChanged(QString fn)
1533{ 1533{
1534 QFileInfo finf ( fn ); 1534 QFileInfo finf ( fn );
1535 if ( !finf.exists() ) 1535 if ( !finf.exists() )
1536 return true; 1536 return true;
1537 QDateTime dt = finf.lastModified (); 1537 QDateTime dt = finf.lastModified ();
1538 if ( dt <= loadedFileVersion ) 1538 if ( dt <= loadedFileVersion )
1539 return false; 1539 return false;
1540 return true; 1540 return true;
1541 1541
1542} 1542}
1543bool CalendarView::checkFileVersion(QString fn) 1543bool CalendarView::checkFileVersion(QString fn)
1544{ 1544{
1545 QFileInfo finf ( fn ); 1545 QFileInfo finf ( fn );
1546 if ( !finf.exists() ) 1546 if ( !finf.exists() )
1547 return true; 1547 return true;
1548 QDateTime dt = finf.lastModified (); 1548 QDateTime dt = finf.lastModified ();
1549 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1549 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1550 //qDebug("file on disk version %s",dt.toString().latin1()); 1550 //qDebug("file on disk version %s",dt.toString().latin1());
1551 if ( dt <= loadedFileVersion ) 1551 if ( dt <= loadedFileVersion )
1552 return true; 1552 return true;
1553 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)) , 1553 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)) ,
1554 i18n("KO/Pi Warning"),i18n("Overwrite"), 1554 i18n("KO/Pi Warning"),i18n("Overwrite"),
1555 i18n("Sync+save")); 1555 i18n("Sync+save"));
1556 1556
1557 if ( km == KMessageBox::Cancel ) 1557 if ( km == KMessageBox::Cancel )
1558 return false; 1558 return false;
1559 if ( km == KMessageBox::Yes ) 1559 if ( km == KMessageBox::Yes )
1560 return true; 1560 return true;
1561 1561
1562 setSyncDevice("deleteaftersync" ); 1562 setSyncDevice("deleteaftersync" );
1563 KOPrefs::instance()->mAskForPreferences = true; 1563 KOPrefs::instance()->mAskForPreferences = true;
1564 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1564 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1565 KOPrefs::instance()->mWriteBackFile = false; 1565 KOPrefs::instance()->mWriteBackFile = false;
1566 KOPrefs::instance()->mWriteBackExistingOnly = false; 1566 KOPrefs::instance()->mWriteBackExistingOnly = false;
1567 KOPrefs::instance()->mShowSyncSummary = false; 1567 KOPrefs::instance()->mShowSyncSummary = false;
1568 syncCalendar( fn, 3 ); 1568 syncCalendar( fn, 3 );
1569 Event * e = getLastSyncEvent(); 1569 Event * e = getLastSyncEvent();
1570 mCalendar->deleteEvent ( e ); 1570 mCalendar->deleteEvent ( e );
1571 updateView(); 1571 updateView();
1572 return true; 1572 return true;
1573} 1573}
1574 1574
1575bool CalendarView::saveCalendar( QString filename ) 1575bool CalendarView::saveCalendar( QString filename )
1576{ 1576{
1577 1577
1578 // Store back all unsaved data into calendar object 1578 // Store back all unsaved data into calendar object
1579 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1579 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1580 if ( mViewManager->currentView() ) 1580 if ( mViewManager->currentView() )
1581 mViewManager->currentView()->flushView(); 1581 mViewManager->currentView()->flushView();
1582 1582
1583 //mStorage->setFileName( filename ); 1583 //mStorage->setFileName( filename );
1584 1584
1585 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1585 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1586 mStorage->setFileName( filename ); 1586 mStorage->setFileName( filename );
1587 bool success; 1587 bool success;
1588 success = mStorage->save(); 1588 success = mStorage->save();
1589 if ( !success ) { 1589 if ( !success ) {
1590 return false; 1590 return false;
1591 } 1591 }
1592 1592
1593 return true; 1593 return true;
1594} 1594}
1595 1595
1596void CalendarView::closeCalendar() 1596void CalendarView::closeCalendar()
1597{ 1597{
1598 1598
1599 // child windows no longer valid 1599 // child windows no longer valid
1600 emit closingDown(); 1600 emit closingDown();
1601 1601
1602 mCalendar->close(); 1602 mCalendar->close();
1603 setModified(false); 1603 setModified(false);
1604 updateView(); 1604 updateView();
1605} 1605}
1606 1606
1607void CalendarView::archiveCalendar() 1607void CalendarView::archiveCalendar()
1608{ 1608{
1609 mDialogManager->showArchiveDialog(); 1609 mDialogManager->showArchiveDialog();
1610} 1610}
1611 1611
1612 1612
1613void CalendarView::readSettings() 1613void CalendarView::readSettings()
1614{ 1614{
1615 1615
1616 1616
1617 // mViewManager->showAgendaView(); 1617 // mViewManager->showAgendaView();
1618 QString str; 1618 QString str;
1619 //qDebug("CalendarView::readSettings() "); 1619 //qDebug("CalendarView::readSettings() ");
1620 // read settings from the KConfig, supplying reasonable 1620 // read settings from the KConfig, supplying reasonable
1621 // defaults where none are to be found 1621 // defaults where none are to be found
1622 KConfig *config = KOGlobals::config(); 1622 KConfig *config = KOGlobals::config();
1623#ifndef KORG_NOSPLITTER 1623#ifndef KORG_NOSPLITTER
1624 config->setGroup("KOrganizer Geometry"); 1624 config->setGroup("KOrganizer Geometry");
1625 1625
1626 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1626 QValueList<int> sizes = config->readIntListEntry("Separator1");
1627 if (sizes.count() != 2) { 1627 if (sizes.count() != 2) {
1628 sizes << mDateNavigator->minimumSizeHint().width(); 1628 sizes << mDateNavigator->minimumSizeHint().width();
1629 sizes << 300; 1629 sizes << 300;
1630 } 1630 }
1631 mPanner->setSizes(sizes); 1631 mPanner->setSizes(sizes);
1632 1632
1633 sizes = config->readIntListEntry("Separator2"); 1633 sizes = config->readIntListEntry("Separator2");
1634 if ( ( mResourceView && sizes.count() == 4 ) || 1634 if ( ( mResourceView && sizes.count() == 4 ) ||
1635 ( !mResourceView && sizes.count() == 3 ) ) { 1635 ( !mResourceView && sizes.count() == 3 ) ) {
1636 mLeftSplitter->setSizes(sizes); 1636 mLeftSplitter->setSizes(sizes);
1637 } 1637 }
1638#endif 1638#endif
1639 globalFlagBlockAgenda = 1; 1639 globalFlagBlockAgenda = 1;
1640 mViewManager->showAgendaView(); 1640 mViewManager->showAgendaView();
1641 //mViewManager->readSettings( config ); 1641 //mViewManager->readSettings( config );
1642 mTodoList->restoreLayout(config,QString("Todo Layout")); 1642 mTodoList->restoreLayout(config,QString("Todo Layout"));
1643 readFilterSettings(config); 1643 readFilterSettings(config);
1644 config->setGroup( "Views" ); 1644 config->setGroup( "Views" );
1645 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1645 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1646 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1646 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1647 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1647 else if ( dateCount == 7 ) mNavigator->selectWeek();
1648 else mNavigator->selectDates( dateCount ); 1648 else mNavigator->selectDates( dateCount );
1649 // mViewManager->readSettings( config ); 1649 // mViewManager->readSettings( config );
1650 updateConfig(); 1650 updateConfig();
1651 globalFlagBlockAgenda = 2; 1651 globalFlagBlockAgenda = 2;
1652 mViewManager->readSettings( config ); 1652 mViewManager->readSettings( config );
1653#ifdef DESKTOP_VERSION 1653#ifdef DESKTOP_VERSION
1654 config->setGroup("WidgetLayout"); 1654 config->setGroup("WidgetLayout");
1655 QStringList list; 1655 QStringList list;
1656 list = config->readListEntry("MainLayout"); 1656 list = config->readListEntry("MainLayout");
1657 int x,y,w,h; 1657 int x,y,w,h;
1658 if ( ! list.isEmpty() ) { 1658 if ( ! list.isEmpty() ) {
1659 x = list[0].toInt(); 1659 x = list[0].toInt();
1660 y = list[1].toInt(); 1660 y = list[1].toInt();
1661 w = list[2].toInt(); 1661 w = list[2].toInt();
1662 h = list[3].toInt(); 1662 h = list[3].toInt();
1663 topLevelWidget()->setGeometry(x,y,w,h); 1663 topLevelWidget()->setGeometry(x,y,w,h);
1664 1664
1665 } else { 1665 } else {
1666 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1666 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1667 } 1667 }
1668 list = config->readListEntry("EditEventLayout"); 1668 list = config->readListEntry("EditEventLayout");
1669 if ( ! list.isEmpty() ) { 1669 if ( ! list.isEmpty() ) {
1670 x = list[0].toInt(); 1670 x = list[0].toInt();
1671 y = list[1].toInt(); 1671 y = list[1].toInt();
1672 w = list[2].toInt(); 1672 w = list[2].toInt();
1673 h = list[3].toInt(); 1673 h = list[3].toInt();
1674 mEventEditor->setGeometry(x,y,w,h); 1674 mEventEditor->setGeometry(x,y,w,h);
1675 1675
1676 } 1676 }
1677 list = config->readListEntry("EditTodoLayout"); 1677 list = config->readListEntry("EditTodoLayout");
1678 if ( ! list.isEmpty() ) { 1678 if ( ! list.isEmpty() ) {
1679 x = list[0].toInt(); 1679 x = list[0].toInt();
1680 y = list[1].toInt(); 1680 y = list[1].toInt();
1681 w = list[2].toInt(); 1681 w = list[2].toInt();
1682 h = list[3].toInt(); 1682 h = list[3].toInt();
1683 mTodoEditor->setGeometry(x,y,w,h); 1683 mTodoEditor->setGeometry(x,y,w,h);
1684 1684
1685 } 1685 }
1686 list = config->readListEntry("ViewerLayout"); 1686 list = config->readListEntry("ViewerLayout");
1687 if ( ! list.isEmpty() ) { 1687 if ( ! list.isEmpty() ) {
1688 x = list[0].toInt(); 1688 x = list[0].toInt();
1689 y = list[1].toInt(); 1689 y = list[1].toInt();
1690 w = list[2].toInt(); 1690 w = list[2].toInt();
1691 h = list[3].toInt(); 1691 h = list[3].toInt();
1692 getEventViewerDialog()->setGeometry(x,y,w,h); 1692 getEventViewerDialog()->setGeometry(x,y,w,h);
1693 } 1693 }
1694#endif 1694#endif
1695 1695
1696} 1696}
1697 1697
1698 1698
1699void CalendarView::writeSettings() 1699void CalendarView::writeSettings()
1700{ 1700{
1701 // kdDebug() << "CalendarView::writeSettings" << endl; 1701 // kdDebug() << "CalendarView::writeSettings" << endl;
1702 1702
1703 KConfig *config = KOGlobals::config(); 1703 KConfig *config = KOGlobals::config();
1704 1704
1705#ifndef KORG_NOSPLITTER 1705#ifndef KORG_NOSPLITTER
1706 config->setGroup("KOrganizer Geometry"); 1706 config->setGroup("KOrganizer Geometry");
1707 1707
1708 QValueList<int> list = mPanner->sizes(); 1708 QValueList<int> list = mPanner->sizes();
1709 config->writeEntry("Separator1",list); 1709 config->writeEntry("Separator1",list);
1710 1710
1711 list = mLeftSplitter->sizes(); 1711 list = mLeftSplitter->sizes();
1712 config->writeEntry("Separator2",list); 1712 config->writeEntry("Separator2",list);
1713#endif 1713#endif
1714 1714
1715 mViewManager->writeSettings( config ); 1715 mViewManager->writeSettings( config );
1716 mTodoList->saveLayout(config,QString("Todo Layout")); 1716 mTodoList->saveLayout(config,QString("Todo Layout"));
1717 mDialogManager->writeSettings( config ); 1717 mDialogManager->writeSettings( config );
1718 //KOPrefs::instance()->usrWriteConfig(); 1718 //KOPrefs::instance()->usrWriteConfig();
1719 KOPrefs::instance()->writeConfig(); 1719 KOPrefs::instance()->writeConfig();
1720 1720
1721 writeFilterSettings(config); 1721 writeFilterSettings(config);
1722 1722
1723 config->setGroup( "Views" ); 1723 config->setGroup( "Views" );
1724 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1724 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1725 1725
1726#ifdef DESKTOP_VERSION 1726#ifdef DESKTOP_VERSION
1727 config->setGroup("WidgetLayout"); 1727 config->setGroup("WidgetLayout");
1728 QStringList list ;//= config->readListEntry("MainLayout"); 1728 QStringList list ;//= config->readListEntry("MainLayout");
1729 int x,y,w,h; 1729 int x,y,w,h;
1730 QWidget* wid; 1730 QWidget* wid;
1731 wid = topLevelWidget(); 1731 wid = topLevelWidget();
1732 x = wid->geometry().x(); 1732 x = wid->geometry().x();
1733 y = wid->geometry().y(); 1733 y = wid->geometry().y();
1734 w = wid->width(); 1734 w = wid->width();
1735 h = wid->height(); 1735 h = wid->height();
1736 list.clear(); 1736 list.clear();
1737 list << QString::number( x ); 1737 list << QString::number( x );
1738 list << QString::number( y ); 1738 list << QString::number( y );
1739 list << QString::number( w ); 1739 list << QString::number( w );
1740 list << QString::number( h ); 1740 list << QString::number( h );
1741 config->writeEntry("MainLayout",list ); 1741 config->writeEntry("MainLayout",list );
1742 1742
1743 wid = mEventEditor; 1743 wid = mEventEditor;
1744 x = wid->geometry().x(); 1744 x = wid->geometry().x();
1745 y = wid->geometry().y(); 1745 y = wid->geometry().y();
1746 w = wid->width(); 1746 w = wid->width();
1747 h = wid->height(); 1747 h = wid->height();
1748 list.clear(); 1748 list.clear();
1749 list << QString::number( x ); 1749 list << QString::number( x );
1750 list << QString::number( y ); 1750 list << QString::number( y );
1751 list << QString::number( w ); 1751 list << QString::number( w );
1752 list << QString::number( h ); 1752 list << QString::number( h );
1753 config->writeEntry("EditEventLayout",list ); 1753 config->writeEntry("EditEventLayout",list );
1754 1754
1755 wid = mTodoEditor; 1755 wid = mTodoEditor;
1756 x = wid->geometry().x(); 1756 x = wid->geometry().x();
1757 y = wid->geometry().y(); 1757 y = wid->geometry().y();
1758 w = wid->width(); 1758 w = wid->width();
1759 h = wid->height(); 1759 h = wid->height();
1760 list.clear(); 1760 list.clear();
1761 list << QString::number( x ); 1761 list << QString::number( x );
1762 list << QString::number( y ); 1762 list << QString::number( y );
1763 list << QString::number( w ); 1763 list << QString::number( w );
1764 list << QString::number( h ); 1764 list << QString::number( h );
1765 config->writeEntry("EditTodoLayout",list ); 1765 config->writeEntry("EditTodoLayout",list );
1766 wid = getEventViewerDialog(); 1766 wid = getEventViewerDialog();
1767 x = wid->geometry().x(); 1767 x = wid->geometry().x();
1768 y = wid->geometry().y(); 1768 y = wid->geometry().y();
1769 w = wid->width(); 1769 w = wid->width();
1770 h = wid->height(); 1770 h = wid->height();
1771 list.clear(); 1771 list.clear();
1772 list << QString::number( x ); 1772 list << QString::number( x );
1773 list << QString::number( y ); 1773 list << QString::number( y );
1774 list << QString::number( w ); 1774 list << QString::number( w );
1775 list << QString::number( h ); 1775 list << QString::number( h );
1776 config->writeEntry("ViewerLayout",list ); 1776 config->writeEntry("ViewerLayout",list );
1777 wid = mDialogManager->getSearchDialog(); 1777 wid = mDialogManager->getSearchDialog();
1778 if ( wid ) { 1778 if ( wid ) {
1779 x = wid->geometry().x(); 1779 x = wid->geometry().x();
1780 y = wid->geometry().y(); 1780 y = wid->geometry().y();
1781 w = wid->width(); 1781 w = wid->width();
1782 h = wid->height(); 1782 h = wid->height();
1783 list.clear(); 1783 list.clear();
1784 list << QString::number( x ); 1784 list << QString::number( x );
1785 list << QString::number( y ); 1785 list << QString::number( y );
1786 list << QString::number( w ); 1786 list << QString::number( w );
1787 list << QString::number( h ); 1787 list << QString::number( h );
1788 config->writeEntry("SearchLayout",list ); 1788 config->writeEntry("SearchLayout",list );
1789 } 1789 }
1790#endif 1790#endif
1791 1791
1792 1792
1793 config->sync(); 1793 config->sync();
1794} 1794}
1795 1795
1796void CalendarView::readFilterSettings(KConfig *config) 1796void CalendarView::readFilterSettings(KConfig *config)
1797{ 1797{
1798 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1798 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1799 1799
1800 mFilters.clear(); 1800 mFilters.clear();
1801 1801
1802 config->setGroup("General"); 1802 config->setGroup("General");
1803 QStringList filterList = config->readListEntry("CalendarFilters"); 1803 QStringList filterList = config->readListEntry("CalendarFilters");
1804 1804
1805 QStringList::ConstIterator it = filterList.begin(); 1805 QStringList::ConstIterator it = filterList.begin();
1806 QStringList::ConstIterator end = filterList.end(); 1806 QStringList::ConstIterator end = filterList.end();
1807 while(it != end) { 1807 while(it != end) {
1808 // kdDebug() << " filter: " << (*it) << endl; 1808 // kdDebug() << " filter: " << (*it) << endl;
1809 1809
1810 CalFilter *filter; 1810 CalFilter *filter;
1811 filter = new CalFilter(*it); 1811 filter = new CalFilter(*it);
1812 config->setGroup("Filter_" + (*it)); 1812 config->setGroup("Filter_" + (*it));
1813 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1813 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1814 filter->setCriteria(config->readNumEntry("Criteria",0)); 1814 filter->setCriteria(config->readNumEntry("Criteria",0));
1815 filter->setCategoryList(config->readListEntry("CategoryList")); 1815 filter->setCategoryList(config->readListEntry("CategoryList"));
1816 mFilters.append(filter); 1816 mFilters.append(filter);
1817 1817
1818 ++it; 1818 ++it;
1819 } 1819 }
1820 1820
1821 if (mFilters.count() == 0) { 1821 if (mFilters.count() == 0) {
1822 CalFilter *filter = new CalFilter(i18n("Default")); 1822 CalFilter *filter = new CalFilter(i18n("Default"));
1823 mFilters.append(filter); 1823 mFilters.append(filter);
1824 } 1824 }
1825 mFilterView->updateFilters(); 1825 mFilterView->updateFilters();
1826 config->setGroup("FilterView"); 1826 config->setGroup("FilterView");
1827 1827
1828 mFilterView->blockSignals(true); 1828 mFilterView->blockSignals(true);
1829 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 1829 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
1830 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 1830 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
1831 mFilterView->blockSignals(false); 1831 mFilterView->blockSignals(false);
1832 // We do it manually to avoid it being done twice by the above calls 1832 // We do it manually to avoid it being done twice by the above calls
1833 updateFilter(); 1833 updateFilter();
1834} 1834}
1835 1835
1836void CalendarView::writeFilterSettings(KConfig *config) 1836void CalendarView::writeFilterSettings(KConfig *config)
1837{ 1837{
1838 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 1838 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
1839 1839
1840 QStringList filterList; 1840 QStringList filterList;
1841 1841
1842 CalFilter *filter = mFilters.first(); 1842 CalFilter *filter = mFilters.first();
1843 while(filter) { 1843 while(filter) {
1844 // kdDebug() << " fn: " << filter->name() << endl; 1844 // kdDebug() << " fn: " << filter->name() << endl;
1845 filterList << filter->name(); 1845 filterList << filter->name();
1846 config->setGroup("Filter_" + filter->name()); 1846 config->setGroup("Filter_" + filter->name());
1847 config->writeEntry("Criteria",filter->criteria()); 1847 config->writeEntry("Criteria",filter->criteria());
1848 config->writeEntry("CategoryList",filter->categoryList()); 1848 config->writeEntry("CategoryList",filter->categoryList());
1849 filter = mFilters.next(); 1849 filter = mFilters.next();
1850 } 1850 }
1851 config->setGroup("General"); 1851 config->setGroup("General");
1852 config->writeEntry("CalendarFilters",filterList); 1852 config->writeEntry("CalendarFilters",filterList);
1853 1853
1854 config->setGroup("FilterView"); 1854 config->setGroup("FilterView");
1855 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 1855 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
1856 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 1856 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
1857} 1857}
1858 1858
1859 1859
1860void CalendarView::goToday() 1860void CalendarView::goToday()
1861{ 1861{
1862 mNavigator->selectToday(); 1862 mNavigator->selectToday();
1863} 1863}
1864 1864
1865void CalendarView::goNext() 1865void CalendarView::goNext()
1866{ 1866{
1867 mNavigator->selectNext(); 1867 mNavigator->selectNext();
1868} 1868}
1869 1869
1870void CalendarView::goPrevious() 1870void CalendarView::goPrevious()
1871{ 1871{
1872 mNavigator->selectPrevious(); 1872 mNavigator->selectPrevious();
1873} 1873}
1874void CalendarView::goNextMonth() 1874void CalendarView::goNextMonth()
1875{ 1875{
1876 mNavigator->selectNextMonth(); 1876 mNavigator->selectNextMonth();
1877} 1877}
1878 1878
1879void CalendarView::goPreviousMonth() 1879void CalendarView::goPreviousMonth()
1880{ 1880{
1881 mNavigator->selectPreviousMonth(); 1881 mNavigator->selectPreviousMonth();
1882} 1882}
1883void CalendarView::writeLocale() 1883void CalendarView::writeLocale()
1884{ 1884{
1885 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 1885 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
1886 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 1886 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
1887 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 1887 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
1888 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 1888 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
1889 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 1889 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
1890 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 1890 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
1891 dummy = KOPrefs::instance()->mUserDateFormatShort; 1891 dummy = KOPrefs::instance()->mUserDateFormatShort;
1892 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 1892 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
1893 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 1893 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
1894 KOPrefs::instance()->mDaylightsavingStart, 1894 KOPrefs::instance()->mDaylightsavingStart,
1895 KOPrefs::instance()->mDaylightsavingEnd ); 1895 KOPrefs::instance()->mDaylightsavingEnd );
1896 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId ); 1896 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId );
1897} 1897}
1898void CalendarView::updateConfig() 1898void CalendarView::updateConfig()
1899{ 1899{
1900 writeLocale(); 1900 writeLocale();
1901 if ( KOPrefs::instance()->mUseAppColors ) 1901 if ( KOPrefs::instance()->mUseAppColors )
1902 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 1902 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
1903 emit configChanged(); 1903 emit configChanged();
1904 mTodoList->updateConfig(); 1904 mTodoList->updateConfig();
1905 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 1905 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
1906 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1906 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1907 // To make the "fill window" configurations work 1907 // To make the "fill window" configurations work
1908 //mViewManager->raiseCurrentView(); 1908 //mViewManager->raiseCurrentView();
1909} 1909}
1910 1910
1911 1911
1912void CalendarView::eventChanged(Event *event) 1912void CalendarView::eventChanged(Event *event)
1913{ 1913{
1914 changeEventDisplay(event,KOGlobals::EVENTEDITED); 1914 changeEventDisplay(event,KOGlobals::EVENTEDITED);
1915 //updateUnmanagedViews(); 1915 //updateUnmanagedViews();
1916} 1916}
1917 1917
1918void CalendarView::eventAdded(Event *event) 1918void CalendarView::eventAdded(Event *event)
1919{ 1919{
1920 changeEventDisplay(event,KOGlobals::EVENTADDED); 1920 changeEventDisplay(event,KOGlobals::EVENTADDED);
1921} 1921}
1922 1922
1923void CalendarView::eventToBeDeleted(Event *) 1923void CalendarView::eventToBeDeleted(Event *)
1924{ 1924{
1925 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 1925 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
1926} 1926}
1927 1927
1928void CalendarView::eventDeleted() 1928void CalendarView::eventDeleted()
1929{ 1929{
1930 changeEventDisplay(0,KOGlobals::EVENTDELETED); 1930 changeEventDisplay(0,KOGlobals::EVENTDELETED);
1931} 1931}
1932void CalendarView::changeTodoDisplay(Todo *which, int action) 1932void CalendarView::changeTodoDisplay(Todo *which, int action)
1933{ 1933{
1934 changeIncidenceDisplay((Incidence *)which, action); 1934 changeIncidenceDisplay((Incidence *)which, action);
1935 mDateNavigator->updateView(); //LR 1935 mDateNavigator->updateView(); //LR
1936 //mDialogManager->updateSearchDialog(); 1936 //mDialogManager->updateSearchDialog();
1937 1937
1938 if (which) { 1938 if (which) {
1939 //mViewManager->currentView()->updateView();//LR 1939 mViewManager->updateWNview();
1940 //mTodoList->updateView(); 1940 //mTodoList->updateView();
1941 } 1941 }
1942 1942
1943} 1943}
1944 1944
1945void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 1945void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
1946{ 1946{
1947 updateUnmanagedViews(); 1947 updateUnmanagedViews();
1948 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 1948 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
1949 if ( action == KOGlobals::EVENTDELETED ) { //delete 1949 if ( action == KOGlobals::EVENTDELETED ) { //delete
1950 mCalendar->checkAlarmForIncidence( 0, true ); 1950 mCalendar->checkAlarmForIncidence( 0, true );
1951 if ( mEventViewerDialog ) 1951 if ( mEventViewerDialog )
1952 mEventViewerDialog->hide(); 1952 mEventViewerDialog->hide();
1953 } 1953 }
1954 else 1954 else
1955 mCalendar->checkAlarmForIncidence( which , false ); 1955 mCalendar->checkAlarmForIncidence( which , false );
1956} 1956}
1957 1957
1958// most of the changeEventDisplays() right now just call the view's 1958// most of the changeEventDisplays() right now just call the view's
1959// total update mode, but they SHOULD be recoded to be more refresh-efficient. 1959// total update mode, but they SHOULD be recoded to be more refresh-efficient.
1960void CalendarView::changeEventDisplay(Event *which, int action) 1960void CalendarView::changeEventDisplay(Event *which, int action)
1961{ 1961{
1962 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 1962 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
1963 changeIncidenceDisplay((Incidence *)which, action); 1963 changeIncidenceDisplay((Incidence *)which, action);
1964 mDateNavigator->updateView(); 1964 mDateNavigator->updateView();
1965 //mDialogManager->updateSearchDialog(); 1965 //mDialogManager->updateSearchDialog();
1966 1966
1967 if (which) { 1967 if (which) {
1968 // If there is an event view visible update the display 1968 // If there is an event view visible update the display
1969 mViewManager->currentView()->changeEventDisplay(which,action); 1969 mViewManager->currentView()->changeEventDisplay(which,action);
1970 // TODO: check, if update needed 1970 // TODO: check, if update needed
1971 // if (which->getTodoStatus()) { 1971 // if (which->getTodoStatus()) {
1972 mTodoList->updateView(); 1972 mTodoList->updateView();
1973 // } 1973 // }
1974 } else { 1974 } else {
1975 mViewManager->currentView()->updateView(); 1975 mViewManager->currentView()->updateView();
1976 } 1976 }
1977} 1977}
1978 1978
1979 1979
1980void CalendarView::updateTodoViews() 1980void CalendarView::updateTodoViews()
1981{ 1981{
1982 1982
1983 mTodoList->updateView(); 1983 mTodoList->updateView();
1984 mViewManager->currentView()->updateView(); 1984 mViewManager->currentView()->updateView();
1985 1985
1986} 1986}
1987 1987
1988 1988
1989void CalendarView::updateView(const QDate &start, const QDate &end) 1989void CalendarView::updateView(const QDate &start, const QDate &end)
1990{ 1990{
1991 mTodoList->updateView(); 1991 mTodoList->updateView();
1992 mViewManager->updateView(start, end); 1992 mViewManager->updateView(start, end);
1993 //mDateNavigator->updateView(); 1993 //mDateNavigator->updateView();
1994} 1994}
1995 1995
1996void CalendarView::updateView() 1996void CalendarView::updateView()
1997{ 1997{
1998 DateList tmpList = mNavigator->selectedDates(); 1998 DateList tmpList = mNavigator->selectedDates();
1999 1999
2000 // We assume that the navigator only selects consecutive days. 2000 // We assume that the navigator only selects consecutive days.
2001 updateView( tmpList.first(), tmpList.last() ); 2001 updateView( tmpList.first(), tmpList.last() );
2002} 2002}
2003 2003
2004void CalendarView::updateUnmanagedViews() 2004void CalendarView::updateUnmanagedViews()
2005{ 2005{
2006 mDateNavigator->updateDayMatrix(); 2006 mDateNavigator->updateDayMatrix();
2007} 2007}
2008 2008
2009int CalendarView::msgItemDelete() 2009int CalendarView::msgItemDelete()
2010{ 2010{
2011 return KMessageBox::warningContinueCancel(this, 2011 return KMessageBox::warningContinueCancel(this,
2012 i18n("This item will be\npermanently deleted."), 2012 i18n("This item will be\npermanently deleted."),
2013 i18n("KO/Pi Confirmation"),i18n("Delete")); 2013 i18n("KO/Pi Confirmation"),i18n("Delete"));
2014} 2014}
2015 2015
2016 2016
2017void CalendarView::edit_cut() 2017void CalendarView::edit_cut()
2018{ 2018{
2019 Event *anEvent=0; 2019 Event *anEvent=0;
2020 2020
2021 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2021 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2022 2022
2023 if (mViewManager->currentView()->isEventView()) { 2023 if (mViewManager->currentView()->isEventView()) {
2024 if ( incidence && incidence->type() == "Event" ) { 2024 if ( incidence && incidence->type() == "Event" ) {
2025 anEvent = static_cast<Event *>(incidence); 2025 anEvent = static_cast<Event *>(incidence);
2026 } 2026 }
2027 } 2027 }
2028 2028
2029 if (!anEvent) { 2029 if (!anEvent) {
2030 KNotifyClient::beep(); 2030 KNotifyClient::beep();
2031 return; 2031 return;
2032 } 2032 }
2033 DndFactory factory( mCalendar ); 2033 DndFactory factory( mCalendar );
2034 factory.cutEvent(anEvent); 2034 factory.cutEvent(anEvent);
2035 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2035 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2036} 2036}
2037 2037
2038void CalendarView::edit_copy() 2038void CalendarView::edit_copy()
2039{ 2039{
2040 Event *anEvent=0; 2040 Event *anEvent=0;
2041 2041
2042 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2042 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2043 2043
2044 if (mViewManager->currentView()->isEventView()) { 2044 if (mViewManager->currentView()->isEventView()) {
2045 if ( incidence && incidence->type() == "Event" ) { 2045 if ( incidence && incidence->type() == "Event" ) {
2046 anEvent = static_cast<Event *>(incidence); 2046 anEvent = static_cast<Event *>(incidence);
2047 } 2047 }
2048 } 2048 }
2049 2049
2050 if (!anEvent) { 2050 if (!anEvent) {
2051 KNotifyClient::beep(); 2051 KNotifyClient::beep();
2052 return; 2052 return;
2053 } 2053 }
2054 DndFactory factory( mCalendar ); 2054 DndFactory factory( mCalendar );
2055 factory.copyEvent(anEvent); 2055 factory.copyEvent(anEvent);
2056} 2056}
2057 2057
2058void CalendarView::edit_paste() 2058void CalendarView::edit_paste()
2059{ 2059{
2060 QDate date = mNavigator->selectedDates().first(); 2060 QDate date = mNavigator->selectedDates().first();
2061 2061
2062 DndFactory factory( mCalendar ); 2062 DndFactory factory( mCalendar );
2063 Event *pastedEvent = factory.pasteEvent( date ); 2063 Event *pastedEvent = factory.pasteEvent( date );
2064 2064
2065 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2065 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2066} 2066}
2067 2067
2068void CalendarView::edit_options() 2068void CalendarView::edit_options()
2069{ 2069{
2070 mDialogManager->showOptionsDialog(); 2070 mDialogManager->showOptionsDialog();
2071 //writeSettings(); 2071 //writeSettings();
2072} 2072}
2073void CalendarView::edit_sync_options() 2073void CalendarView::edit_sync_options()
2074{ 2074{
2075 //mDialogManager->showSyncOptions(); 2075 //mDialogManager->showSyncOptions();
2076 //KOPrefs::instance()->mSyncAlgoPrefs 2076 //KOPrefs::instance()->mSyncAlgoPrefs
2077 QDialog dia( this, "dia", true ); 2077 QDialog dia( this, "dia", true );
2078 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2078 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2079 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2079 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2080 QVBoxLayout lay ( &dia ); 2080 QVBoxLayout lay ( &dia );
2081 lay.setSpacing( 2 ); 2081 lay.setSpacing( 2 );
2082 lay.setMargin( 3 ); 2082 lay.setMargin( 3 );
2083 lay.addWidget(&gr); 2083 lay.addWidget(&gr);
2084 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2084 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2085 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2085 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2086 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2086 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2087 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2087 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2088 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2088 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2089 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2089 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2090 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2090 //QRadioButton both( i18n("Take both on conflict"), &gr );
2091 QPushButton pb ( "OK", &dia); 2091 QPushButton pb ( "OK", &dia);
2092 lay.addWidget( &pb ); 2092 lay.addWidget( &pb );
2093 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2093 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2094 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) { 2094 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) {
2095 case 0: 2095 case 0:
2096 loc.setChecked( true); 2096 loc.setChecked( true);
2097 break; 2097 break;
2098 case 1: 2098 case 1:
2099 rem.setChecked( true ); 2099 rem.setChecked( true );
2100 break; 2100 break;
2101 case 2: 2101 case 2:
2102 newest.setChecked( true); 2102 newest.setChecked( true);
2103 break; 2103 break;
2104 case 3: 2104 case 3:
2105 ask.setChecked( true); 2105 ask.setChecked( true);
2106 break; 2106 break;
2107 case 4: 2107 case 4:
2108 f_loc.setChecked( true); 2108 f_loc.setChecked( true);
2109 break; 2109 break;
2110 case 5: 2110 case 5:
2111 f_rem.setChecked( true); 2111 f_rem.setChecked( true);
2112 break; 2112 break;
2113 case 6: 2113 case 6:
2114 // both.setChecked( true); 2114 // both.setChecked( true);
2115 break; 2115 break;
2116 default: 2116 default:
2117 break; 2117 break;
2118 } 2118 }
2119 if ( dia.exec() ) { 2119 if ( dia.exec() ) {
2120 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2120 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2121 } 2121 }
2122 2122
2123} 2123}
2124 2124
2125void CalendarView::slotSelectPickerDate( QDate d) 2125void CalendarView::slotSelectPickerDate( QDate d)
2126{ 2126{
2127 mDateFrame->hide(); 2127 mDateFrame->hide();
2128 if ( mDatePickerMode == 1 ) { 2128 if ( mDatePickerMode == 1 ) {
2129 mNavigator->slotDaySelect( d ); 2129 mNavigator->slotDaySelect( d );
2130 } else if ( mDatePickerMode == 2 ) { 2130 } else if ( mDatePickerMode == 2 ) {
2131 if ( mMoveIncidence->type() == "Todo" ) { 2131 if ( mMoveIncidence->type() == "Todo" ) {
2132 Todo * to = (Todo *) mMoveIncidence; 2132 Todo * to = (Todo *) mMoveIncidence;
2133 QTime tim; 2133 QTime tim;
2134 if ( to->hasDueDate() ) 2134 if ( to->hasDueDate() )
2135 tim = to->dtDue().time(); 2135 tim = to->dtDue().time();
2136 else { 2136 else {
2137 tim = QTime ( 0,0,0 ); 2137 tim = QTime ( 0,0,0 );
2138 to->setFloats( true ); 2138 to->setFloats( true );
2139 to->setHasDueDate( true ); 2139 to->setHasDueDate( true );
2140 } 2140 }
2141 QDateTime dt ( d,tim ); 2141 QDateTime dt ( d,tim );
2142 to->setDtDue( dt ); 2142 to->setDtDue( dt );
2143 todoChanged( to ); 2143 todoChanged( to );
2144 } else { 2144 } else {
2145 QTime tim = mMoveIncidence->dtStart().time(); 2145 QTime tim = mMoveIncidence->dtStart().time();
2146 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2146 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2147 QDateTime dt ( d,tim ); 2147 QDateTime dt ( d,tim );
2148 mMoveIncidence->setDtStart( dt ); 2148 mMoveIncidence->setDtStart( dt );
2149 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2149 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2150 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2150 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2151 } 2151 }
2152 2152
2153 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2153 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2154 } 2154 }
2155} 2155}
2156 2156
2157void CalendarView::removeCategories() 2157void CalendarView::removeCategories()
2158{ 2158{
2159 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2159 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2160 QStringList catList = KOPrefs::instance()->mCustomCategories; 2160 QStringList catList = KOPrefs::instance()->mCustomCategories;
2161 QStringList catIncList; 2161 QStringList catIncList;
2162 QStringList newCatList; 2162 QStringList newCatList;
2163 Incidence* inc = incList.first(); 2163 Incidence* inc = incList.first();
2164 int i; 2164 int i;
2165 int count = 0; 2165 int count = 0;
2166 while ( inc ) { 2166 while ( inc ) {
2167 newCatList.clear(); 2167 newCatList.clear();
2168 catIncList = inc->categories() ; 2168 catIncList = inc->categories() ;
2169 for( i = 0; i< catIncList.count(); ++i ) { 2169 for( i = 0; i< catIncList.count(); ++i ) {
2170 if ( catList.contains (catIncList[i])) 2170 if ( catList.contains (catIncList[i]))
2171 newCatList.append( catIncList[i] ); 2171 newCatList.append( catIncList[i] );
2172 } 2172 }
2173 newCatList.sort(); 2173 newCatList.sort();
2174 inc->setCategories( newCatList.join(",") ); 2174 inc->setCategories( newCatList.join(",") );
2175 inc = incList.next(); 2175 inc = incList.next();
2176 } 2176 }
2177} 2177}
2178 2178
2179int CalendarView::addCategories() 2179int CalendarView::addCategories()
2180{ 2180{
2181 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2181 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2182 QStringList catList = KOPrefs::instance()->mCustomCategories; 2182 QStringList catList = KOPrefs::instance()->mCustomCategories;
2183 QStringList catIncList; 2183 QStringList catIncList;
2184 Incidence* inc = incList.first(); 2184 Incidence* inc = incList.first();
2185 int i; 2185 int i;
2186 int count = 0; 2186 int count = 0;
2187 while ( inc ) { 2187 while ( inc ) {
2188 catIncList = inc->categories() ; 2188 catIncList = inc->categories() ;
2189 for( i = 0; i< catIncList.count(); ++i ) { 2189 for( i = 0; i< catIncList.count(); ++i ) {
2190 if ( !catList.contains (catIncList[i])) { 2190 if ( !catList.contains (catIncList[i])) {
2191 catList.append( catIncList[i] ); 2191 catList.append( catIncList[i] );
2192 //qDebug("add cat %s ", catIncList[i].latin1()); 2192 //qDebug("add cat %s ", catIncList[i].latin1());
2193 ++count; 2193 ++count;
2194 } 2194 }
2195 } 2195 }
2196 inc = incList.next(); 2196 inc = incList.next();
2197 } 2197 }
2198 catList.sort(); 2198 catList.sort();
2199 KOPrefs::instance()->mCustomCategories = catList; 2199 KOPrefs::instance()->mCustomCategories = catList;
2200 return count; 2200 return count;
2201} 2201}
2202 2202
2203void CalendarView::manageCategories() 2203void CalendarView::manageCategories()
2204{ 2204{
2205 KOCatPrefs* cp = new KOCatPrefs(); 2205 KOCatPrefs* cp = new KOCatPrefs();
2206 cp->show(); 2206 cp->show();
2207 int w =cp->sizeHint().width() ; 2207 int w =cp->sizeHint().width() ;
2208 int h = cp->sizeHint().height() ; 2208 int h = cp->sizeHint().height() ;
2209 int dw = QApplication::desktop()->width(); 2209 int dw = QApplication::desktop()->width();
2210 int dh = QApplication::desktop()->height(); 2210 int dh = QApplication::desktop()->height();
2211 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2211 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2212 if ( !cp->exec() ) { 2212 if ( !cp->exec() ) {
2213 delete cp; 2213 delete cp;
2214 return; 2214 return;
2215 } 2215 }
2216 int count = 0; 2216 int count = 0;
2217 if ( cp->addCat() ) { 2217 if ( cp->addCat() ) {
2218 count = addCategories(); 2218 count = addCategories();
2219 if ( count ) { 2219 if ( count ) {
2220 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2220 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2221 writeSettings(); 2221 writeSettings();
2222 } 2222 }
2223 } else { 2223 } else {
2224 removeCategories(); 2224 removeCategories();
2225 updateView(); 2225 updateView();
2226 } 2226 }
2227 delete cp; 2227 delete cp;
2228} 2228}
2229 2229
2230void CalendarView::beamIncidence(Incidence * Inc) 2230void CalendarView::beamIncidence(Incidence * Inc)
2231{ 2231{
2232 QPtrList<Incidence> delSel ; 2232 QPtrList<Incidence> delSel ;
2233 delSel.append(Inc); 2233 delSel.append(Inc);
2234 beamIncidenceList( delSel ); 2234 beamIncidenceList( delSel );
2235} 2235}
2236void CalendarView::beamCalendar() 2236void CalendarView::beamCalendar()
2237{ 2237{
2238 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2238 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2239 //qDebug("beamCalendar() "); 2239 //qDebug("beamCalendar() ");
2240 beamIncidenceList( delSel ); 2240 beamIncidenceList( delSel );
2241} 2241}
2242void CalendarView::beamFilteredCalendar() 2242void CalendarView::beamFilteredCalendar()
2243{ 2243{
2244 QPtrList<Incidence> delSel = mCalendar->incidences(); 2244 QPtrList<Incidence> delSel = mCalendar->incidences();
2245 //qDebug("beamFilteredCalendar() "); 2245 //qDebug("beamFilteredCalendar() ");
2246 beamIncidenceList( delSel ); 2246 beamIncidenceList( delSel );
2247} 2247}
2248void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2248void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2249{ 2249{
2250 if ( beamDialog->exec () == QDialog::Rejected ) 2250 if ( beamDialog->exec () == QDialog::Rejected )
2251 return; 2251 return;
2252 2252
2253 QString fn = "/tmp/kopibeamfile"; 2253 QString fn = "/tmp/kopibeamfile";
2254 QString mes; 2254 QString mes;
2255 bool createbup = true; 2255 bool createbup = true;
2256 if ( createbup ) { 2256 if ( createbup ) {
2257 QString description = "\n"; 2257 QString description = "\n";
2258 CalendarLocal* cal = new CalendarLocal(); 2258 CalendarLocal* cal = new CalendarLocal();
2259 if ( beamDialog->beamLocal() ) 2259 if ( beamDialog->beamLocal() )
2260 cal->setLocalTime(); 2260 cal->setLocalTime();
2261 else 2261 else
2262 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 2262 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
2263 Incidence *incidence = delSel.first(); 2263 Incidence *incidence = delSel.first();
2264 bool addText = false; 2264 bool addText = false;
2265 if ( delSel.count() < 10 ) 2265 if ( delSel.count() < 10 )
2266 addText = true; 2266 addText = true;
2267 else { 2267 else {
2268 description.sprintf(i18n(" %d items?"),delSel.count() ); 2268 description.sprintf(i18n(" %d items?"),delSel.count() );
2269 } 2269 }
2270 while ( incidence ) { 2270 while ( incidence ) {
2271 Incidence *in = incidence->clone(); 2271 Incidence *in = incidence->clone();
2272 if ( addText ) 2272 if ( addText )
2273 description += in->summary() + "\n"; 2273 description += in->summary() + "\n";
2274 cal->addIncidence( in ); 2274 cal->addIncidence( in );
2275 incidence = delSel.next(); 2275 incidence = delSel.next();
2276 } 2276 }
2277 if ( beamDialog->beamVcal() ) { 2277 if ( beamDialog->beamVcal() ) {
2278 fn += ".vcs"; 2278 fn += ".vcs";
2279 FileStorage storage( cal, fn, new VCalFormat ); 2279 FileStorage storage( cal, fn, new VCalFormat );
2280 storage.save(); 2280 storage.save();
2281 } else { 2281 } else {
2282 fn += ".ics"; 2282 fn += ".ics";
2283 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2283 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2284 storage.save(); 2284 storage.save();
2285 } 2285 }
2286 delete cal; 2286 delete cal;
2287 mes = i18n("KO/Pi: Ready for beaming"); 2287 mes = i18n("KO/Pi: Ready for beaming");
2288 setCaption(mes); 2288 setCaption(mes);
2289 2289
2290#ifndef DESKTOP_VERSION 2290#ifndef DESKTOP_VERSION
2291 Ir *ir = new Ir( this ); 2291 Ir *ir = new Ir( this );
2292 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2292 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2293 ir->send( fn, description, "text/x-vCalendar" ); 2293 ir->send( fn, description, "text/x-vCalendar" );
2294#endif 2294#endif
2295 } 2295 }
2296} 2296}
2297void CalendarView::beamDone( Ir *ir ) 2297void CalendarView::beamDone( Ir *ir )
2298{ 2298{
2299#ifndef DESKTOP_VERSION 2299#ifndef DESKTOP_VERSION
2300 delete ir; 2300 delete ir;
2301#endif 2301#endif
2302} 2302}
2303 2303
2304void CalendarView::moveIncidence(Incidence * inc ) 2304void CalendarView::moveIncidence(Incidence * inc )
2305{ 2305{
2306 if ( !inc ) return; 2306 if ( !inc ) return;
2307 // qDebug("showDatePickerForIncidence( ) "); 2307 // qDebug("showDatePickerForIncidence( ) ");
2308 if ( mDateFrame->isVisible() ) 2308 if ( mDateFrame->isVisible() )
2309 mDateFrame->hide(); 2309 mDateFrame->hide();
2310 else { 2310 else {
2311 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2311 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2312 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2312 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2313 int dw = QApplication::desktop()->width(); 2313 int dw = QApplication::desktop()->width();
2314 int dh = QApplication::desktop()->height(); 2314 int dh = QApplication::desktop()->height();
2315 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2315 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2316 mDateFrame->show(); 2316 mDateFrame->show();
2317 } 2317 }
2318 mDatePickerMode = 2; 2318 mDatePickerMode = 2;
2319 mMoveIncidence = inc ; 2319 mMoveIncidence = inc ;
2320 QDate da; 2320 QDate da;
2321 if ( mMoveIncidence->type() == "Todo" ) { 2321 if ( mMoveIncidence->type() == "Todo" ) {
2322 Todo * to = (Todo *) mMoveIncidence; 2322 Todo * to = (Todo *) mMoveIncidence;
2323 if ( to->hasDueDate() ) 2323 if ( to->hasDueDate() )
2324 da = to->dtDue().date(); 2324 da = to->dtDue().date();
2325 else 2325 else
2326 da = QDate::currentDate(); 2326 da = QDate::currentDate();
2327 } else { 2327 } else {
2328 da = mMoveIncidence->dtStart().date(); 2328 da = mMoveIncidence->dtStart().date();
2329 } 2329 }
2330 mDatePicker->setDate( da ); 2330 mDatePicker->setDate( da );
2331} 2331}
2332void CalendarView::showDatePicker( ) 2332void CalendarView::showDatePicker( )
2333{ 2333{
2334 //qDebug("CalendarView::showDatePicker( ) "); 2334 //qDebug("CalendarView::showDatePicker( ) ");
2335 if ( mDateFrame->isVisible() ) 2335 if ( mDateFrame->isVisible() )
2336 mDateFrame->hide(); 2336 mDateFrame->hide();
2337 else { 2337 else {
2338 int w =mDatePicker->sizeHint().width() ; 2338 int w =mDatePicker->sizeHint().width() ;
2339 int h = mDatePicker->sizeHint().height() ; 2339 int h = mDatePicker->sizeHint().height() ;
2340 int dw = QApplication::desktop()->width(); 2340 int dw = QApplication::desktop()->width();
2341 int dh = QApplication::desktop()->height(); 2341 int dh = QApplication::desktop()->height();
2342 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2342 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2343 mDateFrame->show(); 2343 mDateFrame->show();
2344 } 2344 }
2345 mDatePickerMode = 1; 2345 mDatePickerMode = 1;
2346 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2346 mDatePicker->setDate( mNavigator->selectedDates().first() );
2347} 2347}
2348 2348
2349void CalendarView::showEventEditor() 2349void CalendarView::showEventEditor()
2350{ 2350{
2351#ifdef DESKTOP_VERSION 2351#ifdef DESKTOP_VERSION
2352 mEventEditor->show(); 2352 mEventEditor->show();
2353#else 2353#else
2354 mEventEditor->showMaximized(); 2354 mEventEditor->showMaximized();
2355#endif 2355#endif
2356} 2356}
2357void CalendarView::showTodoEditor() 2357void CalendarView::showTodoEditor()
2358{ 2358{
2359#ifdef DESKTOP_VERSION 2359#ifdef DESKTOP_VERSION
2360 mTodoEditor->show(); 2360 mTodoEditor->show();
2361#else 2361#else
2362 mTodoEditor->showMaximized(); 2362 mTodoEditor->showMaximized();
2363#endif 2363#endif
2364} 2364}
2365void CalendarView::cancelIncidence(Incidence * inc ) 2365void CalendarView::cancelIncidence(Incidence * inc )
2366{ 2366{
2367 inc->setCancelled( ! inc->cancelled() ); 2367 inc->setCancelled( ! inc->cancelled() );
2368 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2368 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2369 updateView(); 2369 updateView();
2370} 2370}
2371void CalendarView::cloneIncidence(Incidence * orgInc ) 2371void CalendarView::cloneIncidence(Incidence * orgInc )
2372{ 2372{
2373 Incidence * newInc = orgInc->clone(); 2373 Incidence * newInc = orgInc->clone();
2374 newInc->recreate(); 2374 newInc->recreate();
2375 2375
2376 if ( newInc->type() == "Todo" ) { 2376 if ( newInc->type() == "Todo" ) {
2377 Todo* t = (Todo*) newInc; 2377 Todo* t = (Todo*) newInc;
2378 mTodoEditor->editTodo( t ); 2378 mTodoEditor->editTodo( t );
2379 showTodoEditor(); 2379 showTodoEditor();
2380 if ( mTodoEditor->exec() ) { 2380 if ( mTodoEditor->exec() ) {
2381 mCalendar->addTodo( t ); 2381 mCalendar->addTodo( t );
2382 updateView(); 2382 updateView();
2383 } else { 2383 } else {
2384 delete t; 2384 delete t;
2385 } 2385 }
2386 } 2386 }
2387 else { 2387 else {
2388 Event* e = (Event*) newInc; 2388 Event* e = (Event*) newInc;
2389 mEventEditor->editEvent( e ); 2389 mEventEditor->editEvent( e );
2390 showEventEditor(); 2390 showEventEditor();
2391 if ( mEventEditor->exec() ) { 2391 if ( mEventEditor->exec() ) {
2392 mCalendar->addEvent( e ); 2392 mCalendar->addEvent( e );
2393 updateView(); 2393 updateView();
2394 } else { 2394 } else {
2395 delete e; 2395 delete e;
2396 } 2396 }
2397 } 2397 }
2398} 2398}
2399 2399
2400void CalendarView::newEvent() 2400void CalendarView::newEvent()
2401{ 2401{
2402 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2402 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2403 KOAgendaView *aView = mViewManager->agendaView(); 2403 KOAgendaView *aView = mViewManager->agendaView();
2404 if (aView) { 2404 if (aView) {
2405 if (aView->selectionStart().isValid()) { 2405 if (aView->selectionStart().isValid()) {
2406 if (aView->selectedIsAllDay()) { 2406 if (aView->selectedIsAllDay()) {
2407 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2407 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2408 } else { 2408 } else {
2409 newEvent(aView->selectionStart(),aView->selectionEnd()); 2409 newEvent(aView->selectionStart(),aView->selectionEnd());
2410 } 2410 }
2411 return; 2411 return;
2412 } 2412 }
2413 } 2413 }
2414 2414
2415 QDate date = mNavigator->selectedDates().first(); 2415 QDate date = mNavigator->selectedDates().first();
2416 QDateTime current = QDateTime::currentDateTime(); 2416 QDateTime current = QDateTime::currentDateTime();
2417 if ( date <= current.date() ) { 2417 if ( date <= current.date() ) {
2418 int hour = current.time().hour() +1; 2418 int hour = current.time().hour() +1;
2419 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2419 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2420 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2420 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2421 } else 2421 } else
2422 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2422 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2423 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2423 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2424 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2424 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2425} 2425}
2426 2426
2427void CalendarView::newEvent(QDateTime fh) 2427void CalendarView::newEvent(QDateTime fh)
2428{ 2428{
2429 newEvent(fh, 2429 newEvent(fh,
2430 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2430 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2431} 2431}
2432 2432
2433void CalendarView::newEvent(QDate dt) 2433void CalendarView::newEvent(QDate dt)
2434{ 2434{
2435 newEvent(QDateTime(dt, QTime(0,0,0)), 2435 newEvent(QDateTime(dt, QTime(0,0,0)),
2436 QDateTime(dt, QTime(0,0,0)), true); 2436 QDateTime(dt, QTime(0,0,0)), true);
2437} 2437}
2438 2438
2439void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2439void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2440{ 2440{
2441 2441
2442 mEventEditor->newEvent(fromHint,toHint,allDay); 2442 mEventEditor->newEvent(fromHint,toHint,allDay);
2443 if ( mFilterView->filtersEnabled() ) { 2443 if ( mFilterView->filtersEnabled() ) {
2444 CalFilter *filter = mFilterView->selectedFilter(); 2444 CalFilter *filter = mFilterView->selectedFilter();
2445 if (filter && filter->showCategories()) { 2445 if (filter && filter->showCategories()) {
2446 mEventEditor->setCategories(filter->categoryList().join(",") ); 2446 mEventEditor->setCategories(filter->categoryList().join(",") );
2447 } 2447 }
2448 if ( filter ) 2448 if ( filter )
2449 mEventEditor->setSecrecy( filter->getSecrecy() ); 2449 mEventEditor->setSecrecy( filter->getSecrecy() );
2450 } 2450 }
2451 showEventEditor(); 2451 showEventEditor();
2452} 2452}
2453void CalendarView::todoAdded(Todo * t) 2453void CalendarView::todoAdded(Todo * t)
2454{ 2454{
2455 2455
2456 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2456 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2457 updateTodoViews(); 2457 updateTodoViews();
2458} 2458}
2459void CalendarView::todoChanged(Todo * t) 2459void CalendarView::todoChanged(Todo * t)
2460{ 2460{
2461 emit todoModified( t, 4 ); 2461 emit todoModified( t, 4 );
2462 // updateTodoViews(); 2462 // updateTodoViews();
2463} 2463}
2464void CalendarView::todoToBeDeleted(Todo *) 2464void CalendarView::todoToBeDeleted(Todo *)
2465{ 2465{
2466 //qDebug("todoToBeDeleted(Todo *) "); 2466 //qDebug("todoToBeDeleted(Todo *) ");
2467 updateTodoViews(); 2467 updateTodoViews();
2468} 2468}
2469void CalendarView::todoDeleted() 2469void CalendarView::todoDeleted()
2470{ 2470{
2471 //qDebug(" todoDeleted()"); 2471 //qDebug(" todoDeleted()");
2472 updateTodoViews(); 2472 updateTodoViews();
2473} 2473}
2474 2474
2475 2475
2476 2476
2477void CalendarView::newTodo() 2477void CalendarView::newTodo()
2478{ 2478{
2479 2479
2480 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2480 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2481 if ( mFilterView->filtersEnabled() ) { 2481 if ( mFilterView->filtersEnabled() ) {
2482 CalFilter *filter = mFilterView->selectedFilter(); 2482 CalFilter *filter = mFilterView->selectedFilter();
2483 if (filter && filter->showCategories()) { 2483 if (filter && filter->showCategories()) {
2484 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2484 mTodoEditor->setCategories(filter->categoryList().join(",") );
2485 } 2485 }
2486 if ( filter ) 2486 if ( filter )
2487 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2487 mTodoEditor->setSecrecy( filter->getSecrecy() );
2488 } 2488 }
2489 showTodoEditor(); 2489 showTodoEditor();
2490} 2490}
2491 2491
2492void CalendarView::newSubTodo() 2492void CalendarView::newSubTodo()
2493{ 2493{
2494 Todo *todo = selectedTodo(); 2494 Todo *todo = selectedTodo();
2495 if ( todo ) newSubTodo( todo ); 2495 if ( todo ) newSubTodo( todo );
2496} 2496}
2497 2497
2498void CalendarView::newSubTodo(Todo *parentEvent) 2498void CalendarView::newSubTodo(Todo *parentEvent)
2499{ 2499{
2500 2500
2501 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2501 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2502 showTodoEditor(); 2502 showTodoEditor();
2503} 2503}
2504 2504
2505void CalendarView::newFloatingEvent() 2505void CalendarView::newFloatingEvent()
2506{ 2506{
2507 DateList tmpList = mNavigator->selectedDates(); 2507 DateList tmpList = mNavigator->selectedDates();
2508 QDate date = tmpList.first(); 2508 QDate date = tmpList.first();
2509 2509
2510 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2510 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2511 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2511 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2512} 2512}
2513 2513
2514 2514
2515void CalendarView::editEvent( Event *event ) 2515void CalendarView::editEvent( Event *event )
2516{ 2516{
2517 2517
2518 if ( !event ) return; 2518 if ( !event ) return;
2519 if ( event->isReadOnly() ) { 2519 if ( event->isReadOnly() ) {
2520 showEvent( event ); 2520 showEvent( event );
2521 return; 2521 return;
2522 } 2522 }
2523 mEventEditor->editEvent( event , mFlagEditDescription); 2523 mEventEditor->editEvent( event , mFlagEditDescription);
2524 showEventEditor(); 2524 showEventEditor();
2525} 2525}
2526void CalendarView::editJournal( Journal *jour ) 2526void CalendarView::editJournal( Journal *jour )
2527{ 2527{
2528 if ( !jour ) return; 2528 if ( !jour ) return;
2529 mDialogManager->hideSearchDialog(); 2529 mDialogManager->hideSearchDialog();
2530 mViewManager->showJournalView(); 2530 mViewManager->showJournalView();
2531 mNavigator->slotDaySelect( jour->dtStart().date() ); 2531 mNavigator->slotDaySelect( jour->dtStart().date() );
2532} 2532}
2533void CalendarView::editTodo( Todo *todo ) 2533void CalendarView::editTodo( Todo *todo )
2534{ 2534{
2535 if ( !todo ) return; 2535 if ( !todo ) return;
2536 2536
2537 if ( todo->isReadOnly() ) { 2537 if ( todo->isReadOnly() ) {
2538 showTodo( todo ); 2538 showTodo( todo );
2539 return; 2539 return;
2540 } 2540 }
2541 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2541 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2542 showTodoEditor(); 2542 showTodoEditor();
2543 2543
2544} 2544}
2545 2545
2546KOEventViewerDialog* CalendarView::getEventViewerDialog() 2546KOEventViewerDialog* CalendarView::getEventViewerDialog()
2547{ 2547{
2548 if ( !mEventViewerDialog ) { 2548 if ( !mEventViewerDialog ) {
2549 mEventViewerDialog = new KOEventViewerDialog(this); 2549 mEventViewerDialog = new KOEventViewerDialog(this);
2550 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2550 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2551 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2551 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2552 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2552 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2553 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2553 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2554 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2554 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2555 viewManager(), SLOT( showAgendaView( bool ) ) ); 2555 viewManager(), SLOT( showAgendaView( bool ) ) );
2556 mEventViewerDialog->resize( 640, 480 ); 2556 mEventViewerDialog->resize( 640, 480 );
2557 2557
2558 } 2558 }
2559 return mEventViewerDialog; 2559 return mEventViewerDialog;
2560} 2560}
2561void CalendarView::showEvent(Event *event) 2561void CalendarView::showEvent(Event *event)
2562{ 2562{
2563 getEventViewerDialog()->setEvent(event); 2563 getEventViewerDialog()->setEvent(event);
2564 getEventViewerDialog()->showMe(); 2564 getEventViewerDialog()->showMe();
2565} 2565}
2566 2566
2567void CalendarView::showTodo(Todo *event) 2567void CalendarView::showTodo(Todo *event)
2568{ 2568{
2569 getEventViewerDialog()->setTodo(event); 2569 getEventViewerDialog()->setTodo(event);
2570 getEventViewerDialog()->showMe(); 2570 getEventViewerDialog()->showMe();
2571} 2571}
2572void CalendarView::showJournal( Journal *jour ) 2572void CalendarView::showJournal( Journal *jour )
2573{ 2573{
2574 getEventViewerDialog()->setJournal(jour); 2574 getEventViewerDialog()->setJournal(jour);
2575 getEventViewerDialog()->showMe(); 2575 getEventViewerDialog()->showMe();
2576 2576
2577} 2577}
2578// void CalendarView::todoModified (Todo *event, int changed) 2578// void CalendarView::todoModified (Todo *event, int changed)
2579// { 2579// {
2580// // if (mDialogList.find (event) != mDialogList.end ()) { 2580// // if (mDialogList.find (event) != mDialogList.end ()) {
2581// // kdDebug() << "Todo modified and open" << endl; 2581// // kdDebug() << "Todo modified and open" << endl;
2582// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2582// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2583// // temp->modified (changed); 2583// // temp->modified (changed);
2584 2584
2585// // } 2585// // }
2586 2586
2587// mViewManager->updateView(); 2587// mViewManager->updateView();
2588// } 2588// }
2589 2589
2590void CalendarView::appointment_show() 2590void CalendarView::appointment_show()
2591{ 2591{
2592 Event *anEvent = 0; 2592 Event *anEvent = 0;
2593 2593
2594 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2594 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2595 2595
2596 if (mViewManager->currentView()->isEventView()) { 2596 if (mViewManager->currentView()->isEventView()) {
2597 if ( incidence && incidence->type() == "Event" ) { 2597 if ( incidence && incidence->type() == "Event" ) {
2598 anEvent = static_cast<Event *>(incidence); 2598 anEvent = static_cast<Event *>(incidence);
2599 } 2599 }
2600 } 2600 }
2601 2601
2602 if (!anEvent) { 2602 if (!anEvent) {
2603 KNotifyClient::beep(); 2603 KNotifyClient::beep();
2604 return; 2604 return;
2605 } 2605 }
2606 2606
2607 showEvent(anEvent); 2607 showEvent(anEvent);
2608} 2608}
2609 2609
2610void CalendarView::appointment_edit() 2610void CalendarView::appointment_edit()
2611{ 2611{
2612 Event *anEvent = 0; 2612 Event *anEvent = 0;
2613 2613
2614 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2614 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2615 2615
2616 if (mViewManager->currentView()->isEventView()) { 2616 if (mViewManager->currentView()->isEventView()) {
2617 if ( incidence && incidence->type() == "Event" ) { 2617 if ( incidence && incidence->type() == "Event" ) {
2618 anEvent = static_cast<Event *>(incidence); 2618 anEvent = static_cast<Event *>(incidence);
2619 } 2619 }
2620 } 2620 }
2621 2621
2622 if (!anEvent) { 2622 if (!anEvent) {
2623 KNotifyClient::beep(); 2623 KNotifyClient::beep();
2624 return; 2624 return;
2625 } 2625 }
2626 2626
2627 editEvent(anEvent); 2627 editEvent(anEvent);
2628} 2628}
2629 2629
2630void CalendarView::appointment_delete() 2630void CalendarView::appointment_delete()
2631{ 2631{
2632 Event *anEvent = 0; 2632 Event *anEvent = 0;
2633 2633
2634 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2634 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2635 2635
2636 if (mViewManager->currentView()->isEventView()) { 2636 if (mViewManager->currentView()->isEventView()) {
2637 if ( incidence && incidence->type() == "Event" ) { 2637 if ( incidence && incidence->type() == "Event" ) {
2638 anEvent = static_cast<Event *>(incidence); 2638 anEvent = static_cast<Event *>(incidence);
2639 } 2639 }
2640 } 2640 }
2641 2641
2642 if (!anEvent) { 2642 if (!anEvent) {
2643 KNotifyClient::beep(); 2643 KNotifyClient::beep();
2644 return; 2644 return;
2645 } 2645 }
2646 2646
2647 deleteEvent(anEvent); 2647 deleteEvent(anEvent);
2648} 2648}
2649 2649
2650void CalendarView::todo_unsub(Todo *anTodo ) 2650void CalendarView::todo_unsub(Todo *anTodo )
2651{ 2651{
2652 // Todo *anTodo = selectedTodo(); 2652 // Todo *anTodo = selectedTodo();
2653 if (!anTodo) return; 2653 if (!anTodo) return;
2654 if (!anTodo->relatedTo()) return; 2654 if (!anTodo->relatedTo()) return;
2655 anTodo->relatedTo()->removeRelation(anTodo); 2655 anTodo->relatedTo()->removeRelation(anTodo);
2656 anTodo->setRelatedTo(0); 2656 anTodo->setRelatedTo(0);
2657 anTodo->updated(); 2657 anTodo->updated();
2658 anTodo->setRelatedToUid(""); 2658 anTodo->setRelatedToUid("");
2659 setModified(true); 2659 setModified(true);
2660 updateView(); 2660 updateView();
2661} 2661}
2662 2662
2663void CalendarView::deleteTodo(Todo *todo) 2663void CalendarView::deleteTodo(Todo *todo)
2664{ 2664{
2665 if (!todo) { 2665 if (!todo) {
2666 KNotifyClient::beep(); 2666 KNotifyClient::beep();
2667 return; 2667 return;
2668 } 2668 }
2669 if (KOPrefs::instance()->mConfirm) { 2669 if (KOPrefs::instance()->mConfirm) {
2670 switch (msgItemDelete()) { 2670 switch (msgItemDelete()) {
2671 case KMessageBox::Continue: // OK 2671 case KMessageBox::Continue: // OK
2672 if (!todo->relations().isEmpty()) { 2672 if (!todo->relations().isEmpty()) {
2673 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2673 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2674 i18n("Delete To-Do")); 2674 i18n("Delete To-Do"));
2675 } else { 2675 } else {
2676 checkExternalId( todo ); 2676 checkExternalId( todo );
2677 calendar()->deleteTodo(todo); 2677 calendar()->deleteTodo(todo);
2678 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2678 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2679 updateView(); 2679 updateView();
2680 } 2680 }
2681 break; 2681 break;
2682 } // switch 2682 } // switch
2683 } else { 2683 } else {
2684 if (!todo->relations().isEmpty()) { 2684 if (!todo->relations().isEmpty()) {
2685 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2685 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2686 i18n("Delete To-Do")); 2686 i18n("Delete To-Do"));
2687 } else { 2687 } else {
2688 checkExternalId( todo ); 2688 checkExternalId( todo );
2689 mCalendar->deleteTodo(todo); 2689 mCalendar->deleteTodo(todo);
2690 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2690 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2691 updateView(); 2691 updateView();
2692 } 2692 }
2693 } 2693 }
2694 emit updateSearchDialog(); 2694 emit updateSearchDialog();
2695} 2695}
2696void CalendarView::deleteJournal(Journal *jour) 2696void CalendarView::deleteJournal(Journal *jour)
2697{ 2697{
2698 if (!jour) { 2698 if (!jour) {
2699 KNotifyClient::beep(); 2699 KNotifyClient::beep();
2700 return; 2700 return;
2701 } 2701 }
2702 if (KOPrefs::instance()->mConfirm) { 2702 if (KOPrefs::instance()->mConfirm) {
2703 switch (msgItemDelete()) { 2703 switch (msgItemDelete()) {
2704 case KMessageBox::Continue: // OK 2704 case KMessageBox::Continue: // OK
2705 calendar()->deleteJournal(jour); 2705 calendar()->deleteJournal(jour);
2706 updateView(); 2706 updateView();
2707 break; 2707 break;
2708 } // switch 2708 } // switch
2709 } else { 2709 } else {
2710 calendar()->deleteJournal(jour);; 2710 calendar()->deleteJournal(jour);;
2711 updateView(); 2711 updateView();
2712 } 2712 }
2713 emit updateSearchDialog(); 2713 emit updateSearchDialog();
2714} 2714}
2715 2715
2716void CalendarView::deleteEvent(Event *anEvent) 2716void CalendarView::deleteEvent(Event *anEvent)
2717{ 2717{
2718 if (!anEvent) { 2718 if (!anEvent) {
2719 KNotifyClient::beep(); 2719 KNotifyClient::beep();
2720 return; 2720 return;
2721 } 2721 }
2722 2722
2723 if (anEvent->recurrence()->doesRecur()) { 2723 if (anEvent->recurrence()->doesRecur()) {
2724 QDate itemDate = mViewManager->currentSelectionDate(); 2724 QDate itemDate = mViewManager->currentSelectionDate();
2725 int km; 2725 int km;
2726 if (!itemDate.isValid()) { 2726 if (!itemDate.isValid()) {
2727 //kdDebug() << "Date Not Valid" << endl; 2727 //kdDebug() << "Date Not Valid" << endl;
2728 if (KOPrefs::instance()->mConfirm) { 2728 if (KOPrefs::instance()->mConfirm) {
2729 km = KMessageBox::warningContinueCancel(this,anEvent->summary() + 2729 km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
2730 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2730 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2731 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2731 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2732 if ( km == KMessageBox::Continue ) 2732 if ( km == KMessageBox::Continue )
2733 km = KMessageBox::No; // No = all below 2733 km = KMessageBox::No; // No = all below
2734 } else 2734 } else
2735 km = KMessageBox::No; 2735 km = KMessageBox::No;
2736 } else { 2736 } else {
2737 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() + 2737 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
2738 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2738 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2739 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2739 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2740 i18n("KO/Pi Confirmation"),i18n("Current"), 2740 i18n("KO/Pi Confirmation"),i18n("Current"),
2741 i18n("All")); 2741 i18n("All"));
2742 } 2742 }
2743 switch(km) { 2743 switch(km) {
2744 2744
2745 case KMessageBox::No: // Continue // all 2745 case KMessageBox::No: // Continue // all
2746 //qDebug("KMessageBox::No "); 2746 //qDebug("KMessageBox::No ");
2747 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2747 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2748 schedule(Scheduler::Cancel,anEvent); 2748 schedule(Scheduler::Cancel,anEvent);
2749 2749
2750 checkExternalId( anEvent); 2750 checkExternalId( anEvent);
2751 mCalendar->deleteEvent(anEvent); 2751 mCalendar->deleteEvent(anEvent);
2752 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2752 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2753 break; 2753 break;
2754 2754
2755 // Disabled because it does not work 2755 // Disabled because it does not work
2756 //#if 0 2756 //#if 0
2757 case KMessageBox::Yes: // just this one 2757 case KMessageBox::Yes: // just this one
2758 //QDate qd = mNavigator->selectedDates().first(); 2758 //QDate qd = mNavigator->selectedDates().first();
2759 //if (!qd.isValid()) { 2759 //if (!qd.isValid()) {
2760 // kdDebug() << "no date selected, or invalid date" << endl; 2760 // kdDebug() << "no date selected, or invalid date" << endl;
2761 // KNotifyClient::beep(); 2761 // KNotifyClient::beep();
2762 // return; 2762 // return;
2763 //} 2763 //}
2764 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2764 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2765 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2765 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2766 anEvent->addExDate(itemDate); 2766 anEvent->addExDate(itemDate);
2767 int duration = anEvent->recurrence()->duration(); 2767 int duration = anEvent->recurrence()->duration();
2768 if ( duration > 0 ) { 2768 if ( duration > 0 ) {
2769 anEvent->recurrence()->setDuration( duration - 1 ); 2769 anEvent->recurrence()->setDuration( duration - 1 );
2770 } 2770 }
2771 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2771 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2772 } 2772 }
2773 break; 2773 break;
2774 //#endif 2774 //#endif
2775 } // switch 2775 } // switch
2776 } else { 2776 } else {
2777 if (KOPrefs::instance()->mConfirm) { 2777 if (KOPrefs::instance()->mConfirm) {
2778 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() + 2778 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
2779 i18n("\nAre you sure you want\nto delete this event?"), 2779 i18n("\nAre you sure you want\nto delete this event?"),
2780 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 2780 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
2781 case KMessageBox::Continue: // OK 2781 case KMessageBox::Continue: // OK
2782 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2782 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2783 schedule(Scheduler::Cancel,anEvent); 2783 schedule(Scheduler::Cancel,anEvent);
2784 checkExternalId( anEvent); 2784 checkExternalId( anEvent);
2785 mCalendar->deleteEvent(anEvent); 2785 mCalendar->deleteEvent(anEvent);
2786 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2786 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2787 break; 2787 break;
2788 } // switch 2788 } // switch
2789 } else { 2789 } else {
2790 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2790 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2791 schedule(Scheduler::Cancel,anEvent); 2791 schedule(Scheduler::Cancel,anEvent);
2792 checkExternalId( anEvent); 2792 checkExternalId( anEvent);
2793 mCalendar->deleteEvent(anEvent); 2793 mCalendar->deleteEvent(anEvent);
2794 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2794 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2795 } 2795 }
2796 } // if-else 2796 } // if-else
2797 emit updateSearchDialog(); 2797 emit updateSearchDialog();
2798} 2798}
2799 2799
2800bool CalendarView::deleteEvent(const QString &uid) 2800bool CalendarView::deleteEvent(const QString &uid)
2801{ 2801{
2802 Event *ev = mCalendar->event(uid); 2802 Event *ev = mCalendar->event(uid);
2803 if (ev) { 2803 if (ev) {
2804 deleteEvent(ev); 2804 deleteEvent(ev);
2805 return true; 2805 return true;
2806 } else { 2806 } else {
2807 return false; 2807 return false;
2808 } 2808 }
2809} 2809}
2810 2810
2811/*****************************************************************************/ 2811/*****************************************************************************/
2812 2812
2813void CalendarView::action_mail() 2813void CalendarView::action_mail()
2814{ 2814{
2815#ifndef KORG_NOMAIL 2815#ifndef KORG_NOMAIL
2816 KOMailClient mailClient; 2816 KOMailClient mailClient;
2817 2817
2818 Incidence *incidence = currentSelection(); 2818 Incidence *incidence = currentSelection();
2819 2819
2820 if (!incidence) { 2820 if (!incidence) {
2821 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2821 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2822 return; 2822 return;
2823 } 2823 }
2824 if(incidence->attendeeCount() == 0 ) { 2824 if(incidence->attendeeCount() == 0 ) {
2825 KMessageBox::sorry(this, 2825 KMessageBox::sorry(this,
2826 i18n("Can't generate mail:\nNo attendees defined.\n")); 2826 i18n("Can't generate mail:\nNo attendees defined.\n"));
2827 return; 2827 return;
2828 } 2828 }
2829 2829
2830 CalendarLocal cal_tmp; 2830 CalendarLocal cal_tmp;
2831 Event *event = 0; 2831 Event *event = 0;
2832 Event *ev = 0; 2832 Event *ev = 0;
2833 if ( incidence && incidence->type() == "Event" ) { 2833 if ( incidence && incidence->type() == "Event" ) {
2834 event = static_cast<Event *>(incidence); 2834 event = static_cast<Event *>(incidence);
2835 ev = new Event(*event); 2835 ev = new Event(*event);
2836 cal_tmp.addEvent(ev); 2836 cal_tmp.addEvent(ev);
2837 } 2837 }
2838 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave); 2838 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave);
2839 QString attachment = mForm.toString( &cal_tmp ); 2839 QString attachment = mForm.toString( &cal_tmp );
2840 if (ev) delete(ev); 2840 if (ev) delete(ev);
2841 2841
2842 mailClient.mailAttendees(currentSelection(), attachment); 2842 mailClient.mailAttendees(currentSelection(), attachment);
2843 2843
2844#endif 2844#endif
2845 2845
2846#if 0 2846#if 0
2847 Event *anEvent = 0; 2847 Event *anEvent = 0;
2848 if (mViewManager->currentView()->isEventView()) { 2848 if (mViewManager->currentView()->isEventView()) {
2849 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 2849 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
2850 } 2850 }
2851 2851
2852 if (!anEvent) { 2852 if (!anEvent) {
2853 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2853 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2854 return; 2854 return;
2855 } 2855 }
2856 if(anEvent->attendeeCount() == 0 ) { 2856 if(anEvent->attendeeCount() == 0 ) {
2857 KMessageBox::sorry(this, 2857 KMessageBox::sorry(this,
2858 i18n("Can't generate mail:\nNo attendees defined.\n")); 2858 i18n("Can't generate mail:\nNo attendees defined.\n"));
2859 return; 2859 return;
2860 } 2860 }
2861 2861
2862 mailobject.emailEvent(anEvent); 2862 mailobject.emailEvent(anEvent);
2863#endif 2863#endif
2864} 2864}
2865 2865
2866 2866
2867void CalendarView::schedule_publish(Incidence *incidence) 2867void CalendarView::schedule_publish(Incidence *incidence)
2868{ 2868{
2869 Event *event = 0; 2869 Event *event = 0;
2870 Todo *todo = 0; 2870 Todo *todo = 0;
2871 2871
2872 if (incidence == 0) { 2872 if (incidence == 0) {
2873 incidence = mViewManager->currentView()->selectedIncidences().first(); 2873 incidence = mViewManager->currentView()->selectedIncidences().first();
2874 if (incidence == 0) { 2874 if (incidence == 0) {
2875 incidence = mTodoList->selectedIncidences().first(); 2875 incidence = mTodoList->selectedIncidences().first();
2876 } 2876 }
2877 } 2877 }
2878 if ( incidence && incidence->type() == "Event" ) { 2878 if ( incidence && incidence->type() == "Event" ) {
2879 event = static_cast<Event *>(incidence); 2879 event = static_cast<Event *>(incidence);
2880 } else { 2880 } else {
2881 if ( incidence && incidence->type() == "Todo" ) { 2881 if ( incidence && incidence->type() == "Todo" ) {
2882 todo = static_cast<Todo *>(incidence); 2882 todo = static_cast<Todo *>(incidence);
2883 } 2883 }
2884 } 2884 }
2885 2885
2886 if (!event && !todo) { 2886 if (!event && !todo) {
2887 KMessageBox::sorry(this,i18n("No event selected.")); 2887 KMessageBox::sorry(this,i18n("No event selected."));
2888 return; 2888 return;
2889 } 2889 }
2890 2890
2891 PublishDialog *publishdlg = new PublishDialog(); 2891 PublishDialog *publishdlg = new PublishDialog();
2892 if (incidence->attendeeCount()>0) { 2892 if (incidence->attendeeCount()>0) {
2893 QPtrList<Attendee> attendees = incidence->attendees(); 2893 QPtrList<Attendee> attendees = incidence->attendees();
2894 attendees.first(); 2894 attendees.first();
2895 while ( attendees.current()!=0 ) { 2895 while ( attendees.current()!=0 ) {
2896 publishdlg->addAttendee(attendees.current()); 2896 publishdlg->addAttendee(attendees.current());
2897 attendees.next(); 2897 attendees.next();
2898 } 2898 }
2899 } 2899 }
2900 bool send = true; 2900 bool send = true;
2901 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 2901 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
2902 if ( publishdlg->exec() != QDialog::Accepted ) 2902 if ( publishdlg->exec() != QDialog::Accepted )
2903 send = false; 2903 send = false;
2904 } 2904 }
2905 if ( send ) { 2905 if ( send ) {
2906 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2906 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2907 if ( event ) { 2907 if ( event ) {
2908 Event *ev = new Event(*event); 2908 Event *ev = new Event(*event);
2909 ev->registerObserver(0); 2909 ev->registerObserver(0);
2910 ev->clearAttendees(); 2910 ev->clearAttendees();
2911 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2911 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2912 delete(ev); 2912 delete(ev);
2913 } 2913 }
2914 } else { 2914 } else {
2915 if ( todo ) { 2915 if ( todo ) {
2916 Todo *ev = new Todo(*todo); 2916 Todo *ev = new Todo(*todo);
2917 ev->registerObserver(0); 2917 ev->registerObserver(0);
2918 ev->clearAttendees(); 2918 ev->clearAttendees();
2919 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2919 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2920 delete(ev); 2920 delete(ev);
2921 } 2921 }
2922 } 2922 }
2923 } 2923 }
2924 } 2924 }
2925 delete publishdlg; 2925 delete publishdlg;
2926} 2926}
2927 2927
2928void CalendarView::schedule_request(Incidence *incidence) 2928void CalendarView::schedule_request(Incidence *incidence)
2929{ 2929{
2930 schedule(Scheduler::Request,incidence); 2930 schedule(Scheduler::Request,incidence);
2931} 2931}
2932 2932
2933void CalendarView::schedule_refresh(Incidence *incidence) 2933void CalendarView::schedule_refresh(Incidence *incidence)
2934{ 2934{
2935 schedule(Scheduler::Refresh,incidence); 2935 schedule(Scheduler::Refresh,incidence);
2936} 2936}
2937 2937
2938void CalendarView::schedule_cancel(Incidence *incidence) 2938void CalendarView::schedule_cancel(Incidence *incidence)
2939{ 2939{
2940 schedule(Scheduler::Cancel,incidence); 2940 schedule(Scheduler::Cancel,incidence);
2941} 2941}
2942 2942
2943void CalendarView::schedule_add(Incidence *incidence) 2943void CalendarView::schedule_add(Incidence *incidence)
2944{ 2944{
2945 schedule(Scheduler::Add,incidence); 2945 schedule(Scheduler::Add,incidence);
2946} 2946}
2947 2947
2948void CalendarView::schedule_reply(Incidence *incidence) 2948void CalendarView::schedule_reply(Incidence *incidence)
2949{ 2949{
2950 schedule(Scheduler::Reply,incidence); 2950 schedule(Scheduler::Reply,incidence);
2951} 2951}
2952 2952
2953void CalendarView::schedule_counter(Incidence *incidence) 2953void CalendarView::schedule_counter(Incidence *incidence)
2954{ 2954{
2955 schedule(Scheduler::Counter,incidence); 2955 schedule(Scheduler::Counter,incidence);
2956} 2956}
2957 2957
2958void CalendarView::schedule_declinecounter(Incidence *incidence) 2958void CalendarView::schedule_declinecounter(Incidence *incidence)
2959{ 2959{
2960 schedule(Scheduler::Declinecounter,incidence); 2960 schedule(Scheduler::Declinecounter,incidence);
2961} 2961}
2962 2962
2963void CalendarView::schedule_publish_freebusy(int daysToPublish) 2963void CalendarView::schedule_publish_freebusy(int daysToPublish)
2964{ 2964{
2965 QDateTime start = QDateTime::currentDateTime(); 2965 QDateTime start = QDateTime::currentDateTime();
2966 QDateTime end = start.addDays(daysToPublish); 2966 QDateTime end = start.addDays(daysToPublish);
2967 2967
2968 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 2968 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
2969 freebusy->setOrganizer(KOPrefs::instance()->email()); 2969 freebusy->setOrganizer(KOPrefs::instance()->email());
2970 2970
2971 2971
2972 PublishDialog *publishdlg = new PublishDialog(); 2972 PublishDialog *publishdlg = new PublishDialog();
2973 if ( publishdlg->exec() == QDialog::Accepted ) { 2973 if ( publishdlg->exec() == QDialog::Accepted ) {
2974 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2974 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2975 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 2975 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
2976 delete(freebusy); 2976 delete(freebusy);
2977 } 2977 }
2978 } 2978 }
2979 delete publishdlg; 2979 delete publishdlg;
2980} 2980}
2981 2981
2982void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 2982void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
2983{ 2983{
2984 Event *event = 0; 2984 Event *event = 0;
2985 Todo *todo = 0; 2985 Todo *todo = 0;
2986 2986
2987 if (incidence == 0) { 2987 if (incidence == 0) {
2988 incidence = mViewManager->currentView()->selectedIncidences().first(); 2988 incidence = mViewManager->currentView()->selectedIncidences().first();
2989 if (incidence == 0) { 2989 if (incidence == 0) {
2990 incidence = mTodoList->selectedIncidences().first(); 2990 incidence = mTodoList->selectedIncidences().first();
2991 } 2991 }
2992 } 2992 }
2993 if ( incidence && incidence->type() == "Event" ) { 2993 if ( incidence && incidence->type() == "Event" ) {
2994 event = static_cast<Event *>(incidence); 2994 event = static_cast<Event *>(incidence);
2995 } 2995 }
2996 if ( incidence && incidence->type() == "Todo" ) { 2996 if ( incidence && incidence->type() == "Todo" ) {
2997 todo = static_cast<Todo *>(incidence); 2997 todo = static_cast<Todo *>(incidence);
2998 } 2998 }
2999 2999
3000 if (!event && !todo) { 3000 if (!event && !todo) {
3001 KMessageBox::sorry(this,i18n("No event selected.")); 3001 KMessageBox::sorry(this,i18n("No event selected."));
3002 return; 3002 return;
3003 } 3003 }
3004 3004
3005 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3005 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3006 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3006 KMessageBox::sorry(this,i18n("The event has no attendees."));
3007 return; 3007 return;
3008 } 3008 }
3009 3009
3010 Event *ev = 0; 3010 Event *ev = 0;
3011 if (event) ev = new Event(*event); 3011 if (event) ev = new Event(*event);
3012 Todo *to = 0; 3012 Todo *to = 0;
3013 if (todo) to = new Todo(*todo); 3013 if (todo) to = new Todo(*todo);
3014 3014
3015 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3015 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3016 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3016 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3017 if (!me) { 3017 if (!me) {
3018 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3018 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3019 return; 3019 return;
3020 } 3020 }
3021 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3021 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3022 StatusDialog *statdlg = new StatusDialog(this); 3022 StatusDialog *statdlg = new StatusDialog(this);
3023 if (!statdlg->exec()==QDialog::Accepted) return; 3023 if (!statdlg->exec()==QDialog::Accepted) return;
3024 me->setStatus( statdlg->status() ); 3024 me->setStatus( statdlg->status() );
3025 delete(statdlg); 3025 delete(statdlg);
3026 } 3026 }
3027 Attendee *menew = new Attendee(*me); 3027 Attendee *menew = new Attendee(*me);
3028 if (ev) { 3028 if (ev) {
3029 ev->clearAttendees(); 3029 ev->clearAttendees();
3030 ev->addAttendee(menew,false); 3030 ev->addAttendee(menew,false);
3031 } else { 3031 } else {
3032 if (to) { 3032 if (to) {
3033 todo->clearAttendees(); 3033 todo->clearAttendees();
3034 todo->addAttendee(menew,false); 3034 todo->addAttendee(menew,false);
3035 } 3035 }
3036 } 3036 }
3037 } 3037 }
3038 3038
3039 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3039 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3040 if (ev) { 3040 if (ev) {
3041 if ( !dlg->addMessage(ev,method) ) delete(ev); 3041 if ( !dlg->addMessage(ev,method) ) delete(ev);
3042 } else { 3042 } else {
3043 if (to) { 3043 if (to) {
3044 if ( !dlg->addMessage(to,method) ) delete(to); 3044 if ( !dlg->addMessage(to,method) ) delete(to);
3045 } 3045 }
3046 } 3046 }
3047} 3047}
3048 3048
3049void CalendarView::openAddressbook() 3049void CalendarView::openAddressbook()
3050{ 3050{
3051 KRun::runCommand("kaddressbook"); 3051 KRun::runCommand("kaddressbook");
3052} 3052}
3053 3053
3054void CalendarView::setModified(bool modified) 3054void CalendarView::setModified(bool modified)
3055{ 3055{
3056 if ( modified ) 3056 if ( modified )
3057 emit signalmodified(); 3057 emit signalmodified();
3058 if (mModified != modified) { 3058 if (mModified != modified) {
3059 mModified = modified; 3059 mModified = modified;
3060 emit modifiedChanged(mModified); 3060 emit modifiedChanged(mModified);
3061 } 3061 }
3062} 3062}
3063 3063
3064bool CalendarView::isReadOnly() 3064bool CalendarView::isReadOnly()
3065{ 3065{
3066 return mReadOnly; 3066 return mReadOnly;
3067} 3067}
3068 3068
3069void CalendarView::setReadOnly(bool readOnly) 3069void CalendarView::setReadOnly(bool readOnly)
3070{ 3070{
3071 if (mReadOnly != readOnly) { 3071 if (mReadOnly != readOnly) {
3072 mReadOnly = readOnly; 3072 mReadOnly = readOnly;
3073 emit readOnlyChanged(mReadOnly); 3073 emit readOnlyChanged(mReadOnly);
3074 } 3074 }
3075} 3075}
3076 3076
3077bool CalendarView::isModified() 3077bool CalendarView::isModified()
3078{ 3078{
3079 return mModified; 3079 return mModified;
3080} 3080}
3081 3081
3082void CalendarView::printSetup() 3082void CalendarView::printSetup()
3083{ 3083{
3084#ifndef KORG_NOPRINTER 3084#ifndef KORG_NOPRINTER
3085 createPrinter(); 3085 createPrinter();
3086 3086
3087 mCalPrinter->setupPrinter(); 3087 mCalPrinter->setupPrinter();
3088#endif 3088#endif
3089} 3089}
3090 3090
3091void CalendarView::print() 3091void CalendarView::print()
3092{ 3092{
3093#ifndef KORG_NOPRINTER 3093#ifndef KORG_NOPRINTER
3094 createPrinter(); 3094 createPrinter();
3095 3095
3096 DateList tmpDateList = mNavigator->selectedDates(); 3096 DateList tmpDateList = mNavigator->selectedDates();
3097 mCalPrinter->print(CalPrinter::Month, 3097 mCalPrinter->print(CalPrinter::Month,
3098 tmpDateList.first(), tmpDateList.last()); 3098 tmpDateList.first(), tmpDateList.last());
3099#endif 3099#endif
3100} 3100}
3101 3101
3102void CalendarView::printPreview() 3102void CalendarView::printPreview()
3103{ 3103{
3104#ifndef KORG_NOPRINTER 3104#ifndef KORG_NOPRINTER
3105 kdDebug() << "CalendarView::printPreview()" << endl; 3105 kdDebug() << "CalendarView::printPreview()" << endl;
3106 3106
3107 createPrinter(); 3107 createPrinter();
3108 3108
3109 DateList tmpDateList = mNavigator->selectedDates(); 3109 DateList tmpDateList = mNavigator->selectedDates();
3110 3110
3111 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3111 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3112 tmpDateList.last()); 3112 tmpDateList.last());
3113#endif 3113#endif
3114} 3114}
3115 3115
3116void CalendarView::exportICalendar() 3116void CalendarView::exportICalendar()
3117{ 3117{
3118 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3118 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3119 3119
3120 // Force correct extension 3120 // Force correct extension
3121 if (filename.right(4) != ".ics") filename += ".ics"; 3121 if (filename.right(4) != ".ics") filename += ".ics";
3122 3122
3123 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3123 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3124 storage.save(); 3124 storage.save();
3125} 3125}
3126 3126
3127bool CalendarView::exportVCalendar( QString filename ) 3127bool CalendarView::exportVCalendar( QString filename )
3128{ 3128{
3129 if (mCalendar->journals().count() > 0) { 3129 if (mCalendar->journals().count() > 0) {
3130 int result = KMessageBox::warningContinueCancel(this, 3130 int result = KMessageBox::warningContinueCancel(this,
3131 i18n("The journal entries can not be\nexported to a vCalendar file."), 3131 i18n("The journal entries can not be\nexported to a vCalendar file."),
3132 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3132 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3133 true); 3133 true);
3134 if (result != KMessageBox::Continue) return false; 3134 if (result != KMessageBox::Continue) return false;
3135 } 3135 }
3136 3136
3137 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3137 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3138 3138
3139 // Force correct extension 3139 // Force correct extension
3140 if (filename.right(4) != ".vcs") filename += ".vcs"; 3140 if (filename.right(4) != ".vcs") filename += ".vcs";
3141 3141
3142 FileStorage storage( mCalendar, filename, new VCalFormat ); 3142 FileStorage storage( mCalendar, filename, new VCalFormat );
3143 return storage.save(); 3143 return storage.save();
3144 3144
3145} 3145}
3146 3146
3147void CalendarView::eventUpdated(Incidence *) 3147void CalendarView::eventUpdated(Incidence *)
3148{ 3148{
3149 setModified(); 3149 setModified();
3150 // Don't call updateView here. The code, which has caused the update of the 3150 // Don't call updateView here. The code, which has caused the update of the
3151 // event is responsible for updating the view. 3151 // event is responsible for updating the view.
3152 // updateView(); 3152 // updateView();
3153} 3153}
3154 3154
3155void CalendarView::adaptNavigationUnits() 3155void CalendarView::adaptNavigationUnits()
3156{ 3156{
3157 if (mViewManager->currentView()->isEventView()) { 3157 if (mViewManager->currentView()->isEventView()) {
3158 int days = mViewManager->currentView()->currentDateCount(); 3158 int days = mViewManager->currentView()->currentDateCount();
3159 if (days == 1) { 3159 if (days == 1) {
3160 emit changeNavStringPrev(i18n("&Previous Day")); 3160 emit changeNavStringPrev(i18n("&Previous Day"));
3161 emit changeNavStringNext(i18n("&Next Day")); 3161 emit changeNavStringNext(i18n("&Next Day"));
3162 } else { 3162 } else {
3163 emit changeNavStringPrev(i18n("&Previous Week")); 3163 emit changeNavStringPrev(i18n("&Previous Week"));
3164 emit changeNavStringNext(i18n("&Next Week")); 3164 emit changeNavStringNext(i18n("&Next Week"));
3165 } 3165 }
3166 } 3166 }
3167} 3167}
3168 3168
3169void CalendarView::processMainViewSelection( Incidence *incidence ) 3169void CalendarView::processMainViewSelection( Incidence *incidence )
3170{ 3170{
3171 if ( incidence ) mTodoList->clearSelection(); 3171 if ( incidence ) mTodoList->clearSelection();
3172 processIncidenceSelection( incidence ); 3172 processIncidenceSelection( incidence );
3173} 3173}
3174 3174
3175void CalendarView::processTodoListSelection( Incidence *incidence ) 3175void CalendarView::processTodoListSelection( Incidence *incidence )
3176{ 3176{
3177 if ( incidence && mViewManager->currentView() ) { 3177 if ( incidence && mViewManager->currentView() ) {
3178 mViewManager->currentView()->clearSelection(); 3178 mViewManager->currentView()->clearSelection();
3179 } 3179 }
3180 processIncidenceSelection( incidence ); 3180 processIncidenceSelection( incidence );
3181} 3181}
3182 3182
3183void CalendarView::processIncidenceSelection( Incidence *incidence ) 3183void CalendarView::processIncidenceSelection( Incidence *incidence )
3184{ 3184{
3185 if ( incidence == mSelectedIncidence ) return; 3185 if ( incidence == mSelectedIncidence ) return;
3186 3186
3187 mSelectedIncidence = incidence; 3187 mSelectedIncidence = incidence;
3188 3188
3189 emit incidenceSelected( mSelectedIncidence ); 3189 emit incidenceSelected( mSelectedIncidence );
3190 3190
3191 if ( incidence && incidence->type() == "Event" ) { 3191 if ( incidence && incidence->type() == "Event" ) {
3192 Event *event = static_cast<Event *>( incidence ); 3192 Event *event = static_cast<Event *>( incidence );
3193 if ( event->organizer() == KOPrefs::instance()->email() ) { 3193 if ( event->organizer() == KOPrefs::instance()->email() ) {
3194 emit organizerEventsSelected( true ); 3194 emit organizerEventsSelected( true );
3195 } else { 3195 } else {
3196 emit organizerEventsSelected(false); 3196 emit organizerEventsSelected(false);
3197 } 3197 }
3198 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3198 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3199 KOPrefs::instance()->email() ) ) { 3199 KOPrefs::instance()->email() ) ) {
3200 emit groupEventsSelected( true ); 3200 emit groupEventsSelected( true );
3201 } else { 3201 } else {
3202 emit groupEventsSelected(false); 3202 emit groupEventsSelected(false);
3203 } 3203 }
3204 return; 3204 return;
3205 } else { 3205 } else {
3206 if ( incidence && incidence->type() == "Todo" ) { 3206 if ( incidence && incidence->type() == "Todo" ) {
3207 emit todoSelected( true ); 3207 emit todoSelected( true );
3208 Todo *event = static_cast<Todo *>( incidence ); 3208 Todo *event = static_cast<Todo *>( incidence );
3209 if ( event->organizer() == KOPrefs::instance()->email() ) { 3209 if ( event->organizer() == KOPrefs::instance()->email() ) {
3210 emit organizerEventsSelected( true ); 3210 emit organizerEventsSelected( true );
3211 } else { 3211 } else {
3212 emit organizerEventsSelected(false); 3212 emit organizerEventsSelected(false);
3213 } 3213 }
3214 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3214 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3215 KOPrefs::instance()->email() ) ) { 3215 KOPrefs::instance()->email() ) ) {
3216 emit groupEventsSelected( true ); 3216 emit groupEventsSelected( true );
3217 } else { 3217 } else {
3218 emit groupEventsSelected(false); 3218 emit groupEventsSelected(false);
3219 } 3219 }
3220 return; 3220 return;
3221 } else { 3221 } else {
3222 emit todoSelected( false ); 3222 emit todoSelected( false );
3223 emit organizerEventsSelected(false); 3223 emit organizerEventsSelected(false);
3224 emit groupEventsSelected(false); 3224 emit groupEventsSelected(false);
3225 } 3225 }
3226 return; 3226 return;
3227 } 3227 }
3228 3228
3229 /* if ( incidence && incidence->type() == "Todo" ) { 3229 /* if ( incidence && incidence->type() == "Todo" ) {
3230 emit todoSelected( true ); 3230 emit todoSelected( true );
3231 } else { 3231 } else {
3232 emit todoSelected( false ); 3232 emit todoSelected( false );
3233 }*/ 3233 }*/
3234} 3234}
3235 3235
3236 3236
3237void CalendarView::checkClipboard() 3237void CalendarView::checkClipboard()
3238{ 3238{
3239#ifndef KORG_NODND 3239#ifndef KORG_NODND
3240 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3240 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3241 emit pasteEnabled(true); 3241 emit pasteEnabled(true);
3242 } else { 3242 } else {
3243 emit pasteEnabled(false); 3243 emit pasteEnabled(false);
3244 } 3244 }
3245#endif 3245#endif
3246} 3246}
3247 3247
3248void CalendarView::showDates(const DateList &selectedDates) 3248void CalendarView::showDates(const DateList &selectedDates)
3249{ 3249{
3250 // kdDebug() << "CalendarView::selectDates()" << endl; 3250 // kdDebug() << "CalendarView::selectDates()" << endl;
3251 3251
3252 if ( mViewManager->currentView() ) { 3252 if ( mViewManager->currentView() ) {
3253 updateView( selectedDates.first(), selectedDates.last() ); 3253 updateView( selectedDates.first(), selectedDates.last() );
3254 } else { 3254 } else {
3255 mViewManager->showAgendaView(); 3255 mViewManager->showAgendaView();
3256 } 3256 }
3257 3257
3258 QString selDates; 3258 QString selDates;
3259 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3259 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3260 if (selectedDates.first() < selectedDates.last() ) 3260 if (selectedDates.first() < selectedDates.last() )
3261 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3261 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3262 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3262 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3263 3263
3264} 3264}
3265 3265
3266QPtrList<CalFilter> CalendarView::filters() 3266QPtrList<CalFilter> CalendarView::filters()
3267{ 3267{
3268 return mFilters; 3268 return mFilters;
3269 3269
3270} 3270}
3271void CalendarView::editFilters() 3271void CalendarView::editFilters()
3272{ 3272{
3273 // kdDebug() << "CalendarView::editFilters()" << endl; 3273 // kdDebug() << "CalendarView::editFilters()" << endl;
3274 3274
3275 CalFilter *filter = mFilters.first(); 3275 CalFilter *filter = mFilters.first();
3276 while(filter) { 3276 while(filter) {
3277 kdDebug() << " Filter: " << filter->name() << endl; 3277 kdDebug() << " Filter: " << filter->name() << endl;
3278 filter = mFilters.next(); 3278 filter = mFilters.next();
3279 } 3279 }
3280 3280
3281 mDialogManager->showFilterEditDialog(&mFilters); 3281 mDialogManager->showFilterEditDialog(&mFilters);
3282} 3282}
3283void CalendarView::toggleFilter() 3283void CalendarView::toggleFilter()
3284{ 3284{
3285 showFilter(! mFilterView->isVisible()); 3285 showFilter(! mFilterView->isVisible());
3286} 3286}
3287 3287
3288KOFilterView *CalendarView::filterView() 3288KOFilterView *CalendarView::filterView()
3289{ 3289{
3290 return mFilterView; 3290 return mFilterView;
3291} 3291}
3292void CalendarView::selectFilter( int fil ) 3292void CalendarView::selectFilter( int fil )
3293{ 3293{
3294 mFilterView->setSelectedFilter( fil ); 3294 mFilterView->setSelectedFilter( fil );
3295} 3295}
3296void CalendarView::showFilter(bool visible) 3296void CalendarView::showFilter(bool visible)
3297{ 3297{
3298 if (visible) mFilterView->show(); 3298 if (visible) mFilterView->show();
3299 else mFilterView->hide(); 3299 else mFilterView->hide();
3300} 3300}
3301void CalendarView::toggleFilerEnabled( ) 3301void CalendarView::toggleFilerEnabled( )
3302{ 3302{
3303 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3303 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3304 if ( !mFilterView->filtersEnabled() ) 3304 if ( !mFilterView->filtersEnabled() )
3305 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3305 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3306 3306
3307} 3307}
3308void CalendarView::updateFilter() 3308void CalendarView::updateFilter()
3309{ 3309{
3310 CalFilter *filter = mFilterView->selectedFilter(); 3310 CalFilter *filter = mFilterView->selectedFilter();
3311 if (filter) { 3311 if (filter) {
3312 if (mFilterView->filtersEnabled()) { 3312 if (mFilterView->filtersEnabled()) {
3313 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3313 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3314 filter->setEnabled(true); 3314 filter->setEnabled(true);
3315 } 3315 }
3316 else filter->setEnabled(false); 3316 else filter->setEnabled(false);
3317 mCalendar->setFilter(filter); 3317 mCalendar->setFilter(filter);
3318 updateView(); 3318 updateView();
3319 } 3319 }
3320} 3320}
3321 3321
3322void CalendarView::filterEdited() 3322void CalendarView::filterEdited()
3323{ 3323{
3324 mFilterView->updateFilters(); 3324 mFilterView->updateFilters();
3325 updateFilter(); 3325 updateFilter();
3326 writeSettings(); 3326 writeSettings();
3327} 3327}
3328 3328
3329 3329
3330void CalendarView::takeOverEvent() 3330void CalendarView::takeOverEvent()
3331{ 3331{
3332 Incidence *incidence = currentSelection(); 3332 Incidence *incidence = currentSelection();
3333 3333
3334 if (!incidence) return; 3334 if (!incidence) return;
3335 3335
3336 incidence->setOrganizer(KOPrefs::instance()->email()); 3336 incidence->setOrganizer(KOPrefs::instance()->email());
3337 incidence->recreate(); 3337 incidence->recreate();
3338 incidence->setReadOnly(false); 3338 incidence->setReadOnly(false);
3339 3339
3340 updateView(); 3340 updateView();
3341} 3341}
3342 3342
3343void CalendarView::takeOverCalendar() 3343void CalendarView::takeOverCalendar()
3344{ 3344{
3345 // TODO: Create Calendar::allIncidences() function and use it here 3345 // TODO: Create Calendar::allIncidences() function and use it here
3346 3346
3347 QPtrList<Event> events = mCalendar->events(); 3347 QPtrList<Event> events = mCalendar->events();
3348 for(uint i=0; i<events.count(); ++i) { 3348 for(uint i=0; i<events.count(); ++i) {
3349 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3349 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3350 events.at(i)->recreate(); 3350 events.at(i)->recreate();
3351 events.at(i)->setReadOnly(false); 3351 events.at(i)->setReadOnly(false);
3352 } 3352 }
3353 3353
3354 QPtrList<Todo> todos = mCalendar->todos(); 3354 QPtrList<Todo> todos = mCalendar->todos();
3355 for(uint i=0; i<todos.count(); ++i) { 3355 for(uint i=0; i<todos.count(); ++i) {
3356 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3356 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3357 todos.at(i)->recreate(); 3357 todos.at(i)->recreate();
3358 todos.at(i)->setReadOnly(false); 3358 todos.at(i)->setReadOnly(false);
3359 } 3359 }
3360 3360
3361 QPtrList<Journal> journals = mCalendar->journals(); 3361 QPtrList<Journal> journals = mCalendar->journals();
3362 for(uint i=0; i<journals.count(); ++i) { 3362 for(uint i=0; i<journals.count(); ++i) {
3363 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3363 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3364 journals.at(i)->recreate(); 3364 journals.at(i)->recreate();
3365 journals.at(i)->setReadOnly(false); 3365 journals.at(i)->setReadOnly(false);
3366 } 3366 }
3367 3367
3368 updateView(); 3368 updateView();
3369} 3369}
3370 3370
3371void CalendarView::showIntro() 3371void CalendarView::showIntro()
3372{ 3372{
3373 kdDebug() << "To be implemented." << endl; 3373 kdDebug() << "To be implemented." << endl;
3374} 3374}
3375 3375
3376QWidgetStack *CalendarView::viewStack() 3376QWidgetStack *CalendarView::viewStack()
3377{ 3377{
3378 return mRightFrame; 3378 return mRightFrame;
3379} 3379}
3380 3380
3381QWidget *CalendarView::leftFrame() 3381QWidget *CalendarView::leftFrame()
3382{ 3382{
3383 return mLeftFrame; 3383 return mLeftFrame;
3384} 3384}
3385 3385
3386DateNavigator *CalendarView::dateNavigator() 3386DateNavigator *CalendarView::dateNavigator()
3387{ 3387{
3388 return mNavigator; 3388 return mNavigator;
3389} 3389}
3390 3390
3391KDateNavigator* CalendarView::dateNavigatorWidget() 3391KDateNavigator* CalendarView::dateNavigatorWidget()
3392{ 3392{
3393 return mDateNavigator; 3393 return mDateNavigator;
3394} 3394}
3395void CalendarView::toggleDateNavigatorWidget() 3395void CalendarView::toggleDateNavigatorWidget()
3396{ 3396{
3397 if (mDateNavigator->isVisible()) 3397 if (mDateNavigator->isVisible())
3398 mDateNavigator->hide(); 3398 mDateNavigator->hide();
3399 else 3399 else
3400 mDateNavigator->show(); 3400 mDateNavigator->show();
3401} 3401}
3402void CalendarView::addView(KOrg::BaseView *view) 3402void CalendarView::addView(KOrg::BaseView *view)
3403{ 3403{
3404 mViewManager->addView(view); 3404 mViewManager->addView(view);
3405} 3405}
3406 3406
3407void CalendarView::showView(KOrg::BaseView *view) 3407void CalendarView::showView(KOrg::BaseView *view)
3408{ 3408{
3409 mViewManager->showView(view, mLeftFrame->isVisible()); 3409 mViewManager->showView(view, mLeftFrame->isVisible());
3410} 3410}
3411 3411
3412Incidence *CalendarView::currentSelection() 3412Incidence *CalendarView::currentSelection()
3413{ 3413{
3414 return mViewManager->currentSelection(); 3414 return mViewManager->currentSelection();
3415} 3415}
3416void CalendarView::toggleAllDaySize() 3416void CalendarView::toggleAllDaySize()
3417{ 3417{
3418 /* 3418 /*
3419 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3419 if ( KOPrefs::instance()->mAllDaySize > 47 )
3420 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3420 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3421 else 3421 else
3422 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3422 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3423 */ 3423 */
3424 viewManager()->agendaView()->toggleAllDay(); 3424 viewManager()->agendaView()->toggleAllDay();
3425} 3425}
3426void CalendarView::toggleExpand() 3426void CalendarView::toggleExpand()
3427{ 3427{
3428 // if ( mLeftFrame->isHidden() ) { 3428 // if ( mLeftFrame->isHidden() ) {
3429 // mLeftFrame->show(); 3429 // mLeftFrame->show();
3430 // emit calendarViewExpanded( false ); 3430 // emit calendarViewExpanded( false );
3431 // } else { 3431 // } else {
3432 // mLeftFrame->hide(); 3432 // mLeftFrame->hide();
3433 // emit calendarViewExpanded( true ); 3433 // emit calendarViewExpanded( true );
3434 // } 3434 // }
3435 3435
3436 globalFlagBlockAgenda = 1; 3436 globalFlagBlockAgenda = 1;
3437 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3437 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3438 globalFlagBlockAgenda = 5; 3438 globalFlagBlockAgenda = 5;
3439 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3439 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3440 //mViewManager->showView( 0, true ); 3440 //mViewManager->showView( 0, true );
3441} 3441}
3442 3442
3443void CalendarView::calendarModified( bool modified, Calendar * ) 3443void CalendarView::calendarModified( bool modified, Calendar * )
3444{ 3444{
3445 setModified( modified ); 3445 setModified( modified );
3446} 3446}
3447 3447
3448Todo *CalendarView::selectedTodo() 3448Todo *CalendarView::selectedTodo()
3449{ 3449{
3450 Incidence *incidence = currentSelection(); 3450 Incidence *incidence = currentSelection();
3451 if ( incidence && incidence->type() == "Todo" ) { 3451 if ( incidence && incidence->type() == "Todo" ) {
3452 return static_cast<Todo *>( incidence ); 3452 return static_cast<Todo *>( incidence );
3453 } 3453 }
3454 3454
3455 incidence = mTodoList->selectedIncidences().first(); 3455 incidence = mTodoList->selectedIncidences().first();
3456 if ( incidence && incidence->type() == "Todo" ) { 3456 if ( incidence && incidence->type() == "Todo" ) {
3457 return static_cast<Todo *>( incidence ); 3457 return static_cast<Todo *>( incidence );
3458 } 3458 }
3459 3459
3460 return 0; 3460 return 0;
3461} 3461}
3462 3462
3463void CalendarView::dialogClosing(Incidence *in) 3463void CalendarView::dialogClosing(Incidence *in)
3464{ 3464{
3465 // mDialogList.remove(in); 3465 // mDialogList.remove(in);
3466} 3466}
3467 3467
3468void CalendarView::showIncidence() 3468void CalendarView::showIncidence()
3469{ 3469{
3470 Incidence *incidence = currentSelection(); 3470 Incidence *incidence = currentSelection();
3471 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3471 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3472 if ( incidence ) { 3472 if ( incidence ) {
3473 ShowIncidenceVisitor v; 3473 ShowIncidenceVisitor v;
3474 v.act( incidence, this ); 3474 v.act( incidence, this );
3475 } 3475 }
3476} 3476}
3477void CalendarView::editIncidenceDescription() 3477void CalendarView::editIncidenceDescription()
3478{ 3478{
3479 mFlagEditDescription = true; 3479 mFlagEditDescription = true;
3480 editIncidence(); 3480 editIncidence();
3481 mFlagEditDescription = false; 3481 mFlagEditDescription = false;
3482} 3482}
3483void CalendarView::editIncidence() 3483void CalendarView::editIncidence()
3484{ 3484{
3485 // qDebug("editIncidence() "); 3485 // qDebug("editIncidence() ");
3486 Incidence *incidence = currentSelection(); 3486 Incidence *incidence = currentSelection();
3487 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3487 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3488 if ( incidence ) { 3488 if ( incidence ) {
3489 EditIncidenceVisitor v; 3489 EditIncidenceVisitor v;
3490 v.act( incidence, this ); 3490 v.act( incidence, this );
3491 } 3491 }
3492} 3492}
3493 3493
3494void CalendarView::deleteIncidence() 3494void CalendarView::deleteIncidence()
3495{ 3495{
3496 Incidence *incidence = currentSelection(); 3496 Incidence *incidence = currentSelection();
3497 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3497 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3498 if ( incidence ) { 3498 if ( incidence ) {
3499 deleteIncidence(incidence); 3499 deleteIncidence(incidence);
3500 } 3500 }
3501} 3501}
3502 3502
3503void CalendarView::showIncidence(Incidence *incidence) 3503void CalendarView::showIncidence(Incidence *incidence)
3504{ 3504{
3505 if ( incidence ) { 3505 if ( incidence ) {
3506 ShowIncidenceVisitor v; 3506 ShowIncidenceVisitor v;
3507 v.act( incidence, this ); 3507 v.act( incidence, this );
3508 } 3508 }
3509} 3509}
3510 3510
3511void CalendarView::editIncidence(Incidence *incidence) 3511void CalendarView::editIncidence(Incidence *incidence)
3512{ 3512{
3513 if ( incidence ) { 3513 if ( incidence ) {
3514 3514
3515 EditIncidenceVisitor v; 3515 EditIncidenceVisitor v;
3516 v.act( incidence, this ); 3516 v.act( incidence, this );
3517 3517
3518 } 3518 }
3519} 3519}
3520 3520
3521void CalendarView::deleteIncidence(Incidence *incidence) 3521void CalendarView::deleteIncidence(Incidence *incidence)
3522{ 3522{
3523 //qDebug(" CalendarView::deleteIncidence "); 3523 //qDebug(" CalendarView::deleteIncidence ");
3524 if ( incidence ) { 3524 if ( incidence ) {
3525 DeleteIncidenceVisitor v; 3525 DeleteIncidenceVisitor v;
3526 v.act( incidence, this ); 3526 v.act( incidence, this );
3527 } 3527 }
3528} 3528}
3529 3529
3530 3530
3531void CalendarView::lookForOutgoingMessages() 3531void CalendarView::lookForOutgoingMessages()
3532{ 3532{
3533 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3533 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3534 ogd->loadMessages(); 3534 ogd->loadMessages();
3535} 3535}
3536 3536
3537void CalendarView::lookForIncomingMessages() 3537void CalendarView::lookForIncomingMessages()
3538{ 3538{
3539 IncomingDialog *icd = mDialogManager->incomingDialog(); 3539 IncomingDialog *icd = mDialogManager->incomingDialog();
3540 icd->retrieve(); 3540 icd->retrieve();
3541} 3541}
3542 3542
3543bool CalendarView::removeCompletedSubTodos( Todo* t ) 3543bool CalendarView::removeCompletedSubTodos( Todo* t )
3544{ 3544{
3545 bool deleteTodo = true; 3545 bool deleteTodo = true;
3546 QPtrList<Incidence> subTodos; 3546 QPtrList<Incidence> subTodos;
3547 Incidence *aTodo; 3547 Incidence *aTodo;
3548 subTodos = t->relations(); 3548 subTodos = t->relations();
3549 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3549 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3550 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3550 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3551 deleteTodo = false; 3551 deleteTodo = false;
3552 } 3552 }
3553 if ( deleteTodo ) { 3553 if ( deleteTodo ) {
3554 if ( t->isCompleted() ) { 3554 if ( t->isCompleted() ) {
3555 checkExternalId( t ); 3555 checkExternalId( t );
3556 mCalendar->deleteTodo( t ); 3556 mCalendar->deleteTodo( t );
3557 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3557 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3558 } 3558 }
3559 else 3559 else
3560 deleteTodo = false; 3560 deleteTodo = false;
3561 } 3561 }
3562 return deleteTodo; 3562 return deleteTodo;
3563 3563
3564} 3564}
3565void CalendarView::purgeCompleted() 3565void CalendarView::purgeCompleted()
3566{ 3566{
3567 int result = KMessageBox::warningContinueCancel(this, 3567 int result = KMessageBox::warningContinueCancel(this,
3568 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3568 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3569 3569
3570 if (result == KMessageBox::Continue) { 3570 if (result == KMessageBox::Continue) {
3571 3571
3572 QPtrList<Todo> todoCal; 3572 QPtrList<Todo> todoCal;
3573 QPtrList<Todo> rootTodos; 3573 QPtrList<Todo> rootTodos;
3574 //QPtrList<Incidence> rel; 3574 //QPtrList<Incidence> rel;
3575 Todo *aTodo;//, *rTodo; 3575 Todo *aTodo;//, *rTodo;
3576 Incidence *rIncidence; 3576 Incidence *rIncidence;
3577 bool childDelete = false; 3577 bool childDelete = false;
3578 bool deletedOne = true; 3578 bool deletedOne = true;
3579 todoCal = calendar()->todos(); 3579 todoCal = calendar()->todos();
3580 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3580 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3581 if ( !aTodo->relatedTo() ) 3581 if ( !aTodo->relatedTo() )
3582 rootTodos.append( aTodo ); 3582 rootTodos.append( aTodo );
3583 } 3583 }
3584 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3584 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3585 removeCompletedSubTodos( aTodo ); 3585 removeCompletedSubTodos( aTodo );
3586 } 3586 }
3587 3587
3588 updateView(); 3588 updateView();
3589 } 3589 }
3590} 3590}
3591 3591
3592void CalendarView::slotCalendarChanged() 3592void CalendarView::slotCalendarChanged()
3593{ 3593{
3594 ; 3594 ;
3595} 3595}
3596 3596
3597NavigatorBar *CalendarView::navigatorBar() 3597NavigatorBar *CalendarView::navigatorBar()
3598{ 3598{
3599 return mNavigatorBar; 3599 return mNavigatorBar;
3600} 3600}
3601 3601
3602 3602
3603 3603
3604void CalendarView::keyPressEvent ( QKeyEvent *e) 3604void CalendarView::keyPressEvent ( QKeyEvent *e)
3605{ 3605{
3606 //qDebug(" alendarView::keyPressEvent "); 3606 //qDebug(" alendarView::keyPressEvent ");
3607 e->ignore(); 3607 e->ignore();
3608} 3608}
3609 3609
3610//#include "calendarview.moc" 3610//#include "calendarview.moc"
3611 3611
3612//#include "calendarviewbase.moc" 3612//#include "calendarviewbase.moc"
diff --git a/korganizer/koviewmanager.cpp b/korganizer/koviewmanager.cpp
index fc2bc77..ba77b45 100644
--- a/korganizer/koviewmanager.cpp
+++ b/korganizer/koviewmanager.cpp
@@ -1,569 +1,575 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Copyright (c) 2001 4 Copyright (c) 2001
5 Cornelius Schumacher <schumacher@kde.org> 5 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 20
21 As a special exception, permission is given to link this program 21 As a special exception, permission is given to link this program
22 with any edition of Qt, and distribute the resulting executable, 22 with any edition of Qt, and distribute the resulting executable,
23 without including the source code for Qt in the source distribution. 23 without including the source code for Qt in the source distribution.
24*/ 24*/
25 25
26#include <qwidgetstack.h> 26#include <qwidgetstack.h>
27 27
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#ifndef DESKTOP_VERSION 30#ifndef DESKTOP_VERSION
31#include <qpe/qpeapplication.h> 31#include <qpe/qpeapplication.h>
32#else 32#else
33#include <qapplication.h> 33#include <qapplication.h>
34#endif 34#endif
35#include "calendarview.h" 35#include "calendarview.h"
36#include "datenavigator.h" 36#include "datenavigator.h"
37#include "kotodoview.h" 37#include "kotodoview.h"
38#include "koagendaview.h" 38#include "koagendaview.h"
39#include "kodialogmanager.h" 39#include "kodialogmanager.h"
40#include "komonthview.h" 40#include "komonthview.h"
41#include "kolistview.h" 41#include "kolistview.h"
42#include "kowhatsnextview.h" 42#include "kowhatsnextview.h"
43#include "kojournalview.h" 43#include "kojournalview.h"
44#include "kotimespanview.h" 44#include "kotimespanview.h"
45#include "koprefs.h" 45#include "koprefs.h"
46#include "navigatorbar.h" 46#include "navigatorbar.h"
47 47
48#include "koviewmanager.h" 48#include "koviewmanager.h"
49//extern bool externFlagMonthviewBlockPainting; 49//extern bool externFlagMonthviewBlockPainting;
50 50
51//bool globalFlagBlockPainting = false; 51//bool globalFlagBlockPainting = false;
52int globalFlagBlockAgenda = 0; 52int globalFlagBlockAgenda = 0;
53int globalFlagBlockLabel = 0; 53int globalFlagBlockLabel = 0;
54int globalFlagBlockAgendaItemPaint = 1; 54int globalFlagBlockAgendaItemPaint = 1;
55int globalFlagBlockAgendaItemUpdate = 1; 55int globalFlagBlockAgendaItemUpdate = 1;
56 56
57 57
58KOViewManager::KOViewManager( CalendarView *mainView ) : 58KOViewManager::KOViewManager( CalendarView *mainView ) :
59 QObject(), mMainView( mainView ) 59 QObject(), mMainView( mainView )
60{ 60{
61 mCurrentView = 0; 61 mCurrentView = 0;
62 62
63 mWhatsNextView = 0; 63 mWhatsNextView = 0;
64 mTodoView = 0; 64 mTodoView = 0;
65 mAgendaView = 0; 65 mAgendaView = 0;
66 mMonthView = 0; 66 mMonthView = 0;
67 mListView = 0; 67 mListView = 0;
68 mJournalView = 0; 68 mJournalView = 0;
69 mTimeSpanView = 0; 69 mTimeSpanView = 0;
70 mCurrentAgendaView = 0 ; 70 mCurrentAgendaView = 0 ;
71 mFlagShowNextxDays = false; 71 mFlagShowNextxDays = false;
72} 72}
73 73
74KOViewManager::~KOViewManager() 74KOViewManager::~KOViewManager()
75{ 75{
76} 76}
77 77
78 78
79KOrg::BaseView *KOViewManager::currentView() 79KOrg::BaseView *KOViewManager::currentView()
80{ 80{
81 return mCurrentView; 81 return mCurrentView;
82} 82}
83 83
84void KOViewManager::readSettings(KConfig *config) 84void KOViewManager::readSettings(KConfig *config)
85{ 85{
86 config->setGroup("General"); 86 config->setGroup("General");
87 QString view = config->readEntry("Current View"); 87 QString view = config->readEntry("Current View");
88 if (view == "WhatsNext") showWhatsNextView(); 88 if (view == "WhatsNext") showWhatsNextView();
89 else if (view == "Month") showMonthView(); 89 else if (view == "Month") showMonthView();
90 else if (view == "List") showListView(); 90 else if (view == "List") showListView();
91 else if (view == "Journal") showJournalView(); 91 else if (view == "Journal") showJournalView();
92 else if (view == "TimeSpan") showTimeSpanView(); 92 else if (view == "TimeSpan") showTimeSpanView();
93 else if (view == "Todo") showTodoView(); 93 else if (view == "Todo") showTodoView();
94 else { 94 else {
95 showAgendaView(); 95 showAgendaView();
96 } 96 }
97} 97}
98 98
99void KOViewManager::writeSettings(KConfig *config) 99void KOViewManager::writeSettings(KConfig *config)
100{ 100{
101 config->setGroup("General"); 101 config->setGroup("General");
102 102
103 QString view; 103 QString view;
104 if (mCurrentView == mWhatsNextView) view = "WhatsNext"; 104 if (mCurrentView == mWhatsNextView) view = "WhatsNext";
105 else if (mCurrentView == mMonthView) view = "Month"; 105 else if (mCurrentView == mMonthView) view = "Month";
106 else if (mCurrentView == mListView) view = "List"; 106 else if (mCurrentView == mListView) view = "List";
107 else if (mCurrentView == mJournalView) view = "Journal"; 107 else if (mCurrentView == mJournalView) view = "Journal";
108 else if (mCurrentView == mTimeSpanView) view = "TimeSpan"; 108 else if (mCurrentView == mTimeSpanView) view = "TimeSpan";
109 else if (mCurrentView == mTodoView) view = "Todo"; 109 else if (mCurrentView == mTodoView) view = "Todo";
110 else view = "Agenda"; 110 else view = "Agenda";
111 111
112 config->writeEntry("Current View",view); 112 config->writeEntry("Current View",view);
113 113
114 if (mAgendaView) { 114 if (mAgendaView) {
115 mAgendaView->writeSettings(config); 115 mAgendaView->writeSettings(config);
116 } 116 }
117 if (mTimeSpanView) { 117 if (mTimeSpanView) {
118 mTimeSpanView->writeSettings(config); 118 mTimeSpanView->writeSettings(config);
119 } 119 }
120 if (mListView) { 120 if (mListView) {
121 mListView->writeSettings(config); 121 mListView->writeSettings(config);
122 } 122 }
123 if (mTodoView) { 123 if (mTodoView) {
124 mTodoView->saveLayout(config,"Todo View"); 124 mTodoView->saveLayout(config,"Todo View");
125 } 125 }
126} 126}
127 127
128void KOViewManager::showView(KOrg::BaseView *view, bool fullScreen ) 128void KOViewManager::showView(KOrg::BaseView *view, bool fullScreen )
129{ 129{
130 130
131 //mFlagShowNextxDays = false; 131 //mFlagShowNextxDays = false;
132 //if(view == mCurrentView) return; 132 //if(view == mCurrentView) return;
133 if ( view == 0 ) { 133 if ( view == 0 ) {
134 view = mCurrentView; 134 view = mCurrentView;
135 if ( view == 0 ) 135 if ( view == 0 )
136 return; 136 return;
137 } 137 }
138 bool full = fullScreen; 138 bool full = fullScreen;
139 if(view == mCurrentView && view != mWhatsNextView ) { 139 if(view == mCurrentView && view != mWhatsNextView ) {
140 if ( mCurrentAgendaView < 0 ) 140 if ( mCurrentAgendaView < 0 )
141 return; 141 return;
142 full = mMainView->leftFrame()->isVisible(); 142 full = mMainView->leftFrame()->isVisible();
143 } else { 143 } else {
144 mCurrentView = view; 144 mCurrentView = view;
145 145
146 // bool full = fullScreen; 146 // bool full = fullScreen;
147 bool isFull = !mMainView->leftFrame()->isVisible(); 147 bool isFull = !mMainView->leftFrame()->isVisible();
148 if ( isFull && KOPrefs::instance()->mViewChangeHoldFullscreen ) 148 if ( isFull && KOPrefs::instance()->mViewChangeHoldFullscreen )
149 full = true; 149 full = true;
150 if ( !isFull && KOPrefs::instance()->mViewChangeHoldNonFullscreen ) 150 if ( !isFull && KOPrefs::instance()->mViewChangeHoldNonFullscreen )
151 full = false; 151 full = false;
152 } 152 }
153 if ( mAgendaView ) mAgendaView->deleteSelectedDateTime(); 153 if ( mAgendaView ) mAgendaView->deleteSelectedDateTime();
154 raiseCurrentView( full ); 154 raiseCurrentView( full );
155 mMainView->processIncidenceSelection( 0 ); 155 mMainView->processIncidenceSelection( 0 );
156 mMainView->updateView(); 156 mMainView->updateView();
157 mMainView->adaptNavigationUnits(); 157 mMainView->adaptNavigationUnits();
158} 158}
159 159
160void KOViewManager::raiseCurrentView( bool fullScreen ) 160void KOViewManager::raiseCurrentView( bool fullScreen )
161{ 161{
162 //qDebug("raiseCurrentView "); 162 //qDebug("raiseCurrentView ");
163 mCurrentAgendaView = 0; 163 mCurrentAgendaView = 0;
164 int wid = mMainView->width() ; 164 int wid = mMainView->width() ;
165 int hei = mMainView->height(); 165 int hei = mMainView->height();
166 if ( mCurrentView == mMonthView ) { 166 if ( mCurrentView == mMonthView ) {
167 mMainView->navigatorBar()->show(); 167 mMainView->navigatorBar()->show();
168 hei -= mMainView->navigatorBar()->sizeHint().height(); 168 hei -= mMainView->navigatorBar()->sizeHint().height();
169 //mMainView->navigatorBar()->hide(); 169 //mMainView->navigatorBar()->hide();
170 } else { 170 } else {
171 mMainView->navigatorBar()->hide(); 171 mMainView->navigatorBar()->hide();
172 } 172 }
173 if ( fullScreen ) { 173 if ( fullScreen ) {
174 mMainView->leftFrame()->hide(); 174 mMainView->leftFrame()->hide();
175 } else { 175 } else {
176 mMainView->leftFrame()->show(); 176 mMainView->leftFrame()->show();
177 if ( KOPrefs::instance()->mVerticalScreen ) 177 if ( KOPrefs::instance()->mVerticalScreen )
178 hei -= mMainView->leftFrame()->height(); 178 hei -= mMainView->leftFrame()->height();
179 else 179 else
180 wid -= mMainView->leftFrame()->width(); 180 wid -= mMainView->leftFrame()->width();
181 } 181 }
182 182
183 if ( globalFlagBlockAgenda == 5 ) { 183 if ( globalFlagBlockAgenda == 5 ) {
184 globalFlagBlockAgenda = 4; 184 globalFlagBlockAgenda = 4;
185 globalFlagBlockAgendaItemPaint = 1; 185 globalFlagBlockAgendaItemPaint = 1;
186 } 186 }
187 mMainView->viewStack()->raiseWidget(mCurrentView); 187 mMainView->viewStack()->raiseWidget(mCurrentView);
188 if ( globalFlagBlockAgenda == 4 ) { 188 if ( globalFlagBlockAgenda == 4 ) {
189 if ( mCurrentView == mAgendaView ) { 189 if ( mCurrentView == mAgendaView ) {
190 //globalFlagBlockAgenda =1 ; 190 //globalFlagBlockAgenda =1 ;
191 if ( KOPrefs::instance()->mSetTimeToDayStartAt ) 191 if ( KOPrefs::instance()->mSetTimeToDayStartAt )
192 mAgendaView->setStartHour( KOPrefs::instance()->mDayBegins ); 192 mAgendaView->setStartHour( KOPrefs::instance()->mDayBegins );
193 else if ( KOPrefs::instance()->mCenterOnCurrentTime ) 193 else if ( KOPrefs::instance()->mCenterOnCurrentTime )
194 mAgendaView->setStartHour( QTime::currentTime ().hour() ); 194 mAgendaView->setStartHour( QTime::currentTime ().hour() );
195 qApp->processEvents(); 195 qApp->processEvents();
196 //qDebug("qApp->processEvents() "); 196 //qDebug("qApp->processEvents() ");
197 globalFlagBlockAgenda = 0; 197 globalFlagBlockAgenda = 0;
198 mAgendaView->repaintAgenda(); 198 mAgendaView->repaintAgenda();
199 199
200 } 200 }
201 globalFlagBlockAgenda = 0; 201 globalFlagBlockAgenda = 0;
202 } 202 }
203 //qDebug("raiseCurrentView ende "); 203 //qDebug("raiseCurrentView ende ");
204} 204}
205 205
206void KOViewManager::updateView() 206void KOViewManager::updateView()
207{ 207{
208 // qDebug("KOViewManager::updateView() "); 208 // qDebug("KOViewManager::updateView() ");
209 // if we are updating mTodoView, we get endless recursion 209 // if we are updating mTodoView, we get endless recursion
210 if ( mTodoView == mCurrentView ) 210 if ( mTodoView == mCurrentView )
211 return; 211 return;
212 if ( mCurrentView ) mCurrentView->updateView(); 212 if ( mCurrentView ) mCurrentView->updateView();
213 213
214} 214}
215 215
216void KOViewManager::updateView(const QDate &start, const QDate &end) 216void KOViewManager::updateView(const QDate &start, const QDate &end)
217{ 217{
218 // kdDebug() << "KOViewManager::updateView()" << endl; 218 // kdDebug() << "KOViewManager::updateView()" << endl;
219 219
220 if (mCurrentView) mCurrentView->showDates(start, end); 220 if (mCurrentView) mCurrentView->showDates(start, end);
221 221
222 if (mTodoView) mTodoView->updateView(); 222 if (mTodoView) mTodoView->updateView();
223} 223}
224 224
225 225
226void KOViewManager::updateWNview()
227{
228 if ( mCurrentView == mWhatsNextView && mWhatsNextView )
229 mWhatsNextView->updateView();
230
231}
226void KOViewManager::showWhatsNextView() 232void KOViewManager::showWhatsNextView()
227{ 233{
228 if (!mWhatsNextView) { 234 if (!mWhatsNextView) {
229 mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(), 235 mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(),
230 "KOViewManager::WhatsNextView"); 236 "KOViewManager::WhatsNextView");
231 mWhatsNextView->setEventViewer( mMainView->getEventViewerDialog()); 237 mWhatsNextView->setEventViewer( mMainView->getEventViewerDialog());
232 connect(mMainView, SIGNAL(configChanged()), mWhatsNextView, SLOT(updateConfig())); 238 connect(mMainView, SIGNAL(configChanged()), mWhatsNextView, SLOT(updateConfig()));
233 addView(mWhatsNextView); 239 addView(mWhatsNextView);
234 } 240 }
235 globalFlagBlockAgenda = 1; 241 globalFlagBlockAgenda = 1;
236 showView(mWhatsNextView, true ); 242 showView(mWhatsNextView, true );
237 mWhatsNextView->updateView(); 243 mWhatsNextView->updateView();
238 244
239} 245}
240 246
241void KOViewManager::showListView() 247void KOViewManager::showListView()
242{ 248{
243 if (!mListView) { 249 if (!mListView) {
244 mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView"); 250 mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView");
245 addView(mListView); 251 addView(mListView);
246 252
247 connect(mListView, SIGNAL(showIncidenceSignal(Incidence *)), 253 connect(mListView, SIGNAL(showIncidenceSignal(Incidence *)),
248 mMainView, SLOT(showIncidence(Incidence *))); 254 mMainView, SLOT(showIncidence(Incidence *)));
249 connect(mListView, SIGNAL(editIncidenceSignal(Incidence *)), 255 connect(mListView, SIGNAL(editIncidenceSignal(Incidence *)),
250 mMainView, SLOT(editIncidence(Incidence *))); 256 mMainView, SLOT(editIncidence(Incidence *)));
251 connect(mListView, SIGNAL(deleteIncidenceSignal(Incidence *)), 257 connect(mListView, SIGNAL(deleteIncidenceSignal(Incidence *)),
252 mMainView, SLOT(deleteIncidence(Incidence *))); 258 mMainView, SLOT(deleteIncidence(Incidence *)));
253 connect( mListView, SIGNAL( incidenceSelected( Incidence * ) ), 259 connect( mListView, SIGNAL( incidenceSelected( Incidence * ) ),
254 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 260 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
255 connect( mListView, SIGNAL( signalNewEvent() ), 261 connect( mListView, SIGNAL( signalNewEvent() ),
256 mMainView, SLOT( newEvent() ) ); 262 mMainView, SLOT( newEvent() ) );
257 connect(mMainView, SIGNAL(configChanged()), mListView, SLOT(updateConfig())); 263 connect(mMainView, SIGNAL(configChanged()), mListView, SLOT(updateConfig()));
258 connect( mListView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), 264 connect( mListView, SIGNAL( cloneIncidenceSignal( Incidence * ) ),
259 mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); 265 mMainView, SLOT ( cloneIncidence( Incidence * ) ) );
260 connect( mListView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), 266 connect( mListView, SIGNAL( cancelIncidenceSignal( Incidence * ) ),
261 mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); 267 mMainView, SLOT ( cancelIncidence( Incidence * ) ) );
262 connect( mListView, SIGNAL( moveIncidenceSignal( Incidence * ) ), 268 connect( mListView, SIGNAL( moveIncidenceSignal( Incidence * ) ),
263 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 269 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
264 connect( mListView, SIGNAL( beamIncidenceSignal( Incidence * ) ), 270 connect( mListView, SIGNAL( beamIncidenceSignal( Incidence * ) ),
265 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 271 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
266 } 272 }
267 // bool temp = mFlagShowNextxDays; 273 // bool temp = mFlagShowNextxDays;
268 //globalFlagBlockPainting = true; 274 //globalFlagBlockPainting = true;
269 globalFlagBlockAgenda = 1; 275 globalFlagBlockAgenda = 1;
270 if ( KOPrefs::instance()->mListViewMonthTimespan ) 276 if ( KOPrefs::instance()->mListViewMonthTimespan )
271 mMainView->dateNavigator()->selectMonth(); 277 mMainView->dateNavigator()->selectMonth();
272 showView(mListView, KOPrefs::instance()->mFullViewTodo); 278 showView(mListView, KOPrefs::instance()->mFullViewTodo);
273 //mFlagShowNextxDays = temp; 279 //mFlagShowNextxDays = temp;
274} 280}
275 281
276void KOViewManager::showAgendaView( bool fullScreen ) 282void KOViewManager::showAgendaView( bool fullScreen )
277{ 283{
278 284
279 mMainView->dialogManager()->hideSearchDialog(); 285 mMainView->dialogManager()->hideSearchDialog();
280 // qDebug("KOViewManager::showAgendaView "); 286 // qDebug("KOViewManager::showAgendaView ");
281 bool full; 287 bool full;
282 full = fullScreen; 288 full = fullScreen;
283 if (!mAgendaView) { 289 if (!mAgendaView) {
284 full = false; 290 full = false;
285 mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView"); 291 mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView");
286 addView(mAgendaView); 292 addView(mAgendaView);
287#ifndef DESKTOP_VERSION 293#ifndef DESKTOP_VERSION
288 QPEApplication::setStylusOperation( mAgendaView, QPEApplication::RightOnHold ); 294 QPEApplication::setStylusOperation( mAgendaView, QPEApplication::RightOnHold );
289#endif 295#endif
290 connect( mAgendaView, SIGNAL( incidenceChanged(Incidence *, int )), 296 connect( mAgendaView, SIGNAL( incidenceChanged(Incidence *, int )),
291 mMainView, SLOT( changeIncidenceDisplay( Incidence *, int ) )); 297 mMainView, SLOT( changeIncidenceDisplay( Incidence *, int ) ));
292 298
293 // SIGNALS/SLOTS FOR DAY/WEEK VIEW 299 // SIGNALS/SLOTS FOR DAY/WEEK VIEW
294 connect(mAgendaView,SIGNAL(newEventSignal(QDateTime)), 300 connect(mAgendaView,SIGNAL(newEventSignal(QDateTime)),
295 mMainView, SLOT(newEvent(QDateTime))); 301 mMainView, SLOT(newEvent(QDateTime)));
296 // connect(mAgendaView,SIGNAL(newEventSignal(QDateTime,QDateTime)), 302 // connect(mAgendaView,SIGNAL(newEventSignal(QDateTime,QDateTime)),
297 // mMainView, SLOT(newEvent(QDateTime,QDateTime))); 303 // mMainView, SLOT(newEvent(QDateTime,QDateTime)));
298 connect(mAgendaView,SIGNAL(newEventSignal(QDate)), 304 connect(mAgendaView,SIGNAL(newEventSignal(QDate)),
299 mMainView, SLOT(newEvent(QDate))); 305 mMainView, SLOT(newEvent(QDate)));
300 306
301 connect(mAgendaView, SIGNAL(editIncidenceSignal(Incidence *)), 307 connect(mAgendaView, SIGNAL(editIncidenceSignal(Incidence *)),
302 mMainView, SLOT(editIncidence(Incidence *))); 308 mMainView, SLOT(editIncidence(Incidence *)));
303 connect(mAgendaView, SIGNAL(showIncidenceSignal(Incidence *)), 309 connect(mAgendaView, SIGNAL(showIncidenceSignal(Incidence *)),
304 mMainView, SLOT(showIncidence(Incidence *))); 310 mMainView, SLOT(showIncidence(Incidence *)));
305 connect(mAgendaView, SIGNAL(deleteIncidenceSignal(Incidence *)), 311 connect(mAgendaView, SIGNAL(deleteIncidenceSignal(Incidence *)),
306 mMainView, SLOT(deleteIncidence(Incidence *))); 312 mMainView, SLOT(deleteIncidence(Incidence *)));
307 313
308 connect( mAgendaView, SIGNAL( incidenceSelected( Incidence * ) ), 314 connect( mAgendaView, SIGNAL( incidenceSelected( Incidence * ) ),
309 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 315 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
310 316
311 connect(mAgendaView, SIGNAL( toggleExpand() ), 317 connect(mAgendaView, SIGNAL( toggleExpand() ),
312 mMainView, SLOT( toggleExpand() ) ); 318 mMainView, SLOT( toggleExpand() ) );
313 319
314 connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ), 320 connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ),
315 mAgendaView, SLOT( setExpandedButton( bool ) ) ); 321 mAgendaView, SLOT( setExpandedButton( bool ) ) );
316 connect( mAgendaView, SIGNAL( cloneIncidenceSignal(Incidence *) ), 322 connect( mAgendaView, SIGNAL( cloneIncidenceSignal(Incidence *) ),
317 mMainView, SLOT(cloneIncidence(Incidence *) ) ) ; 323 mMainView, SLOT(cloneIncidence(Incidence *) ) ) ;
318 connect( mAgendaView, SIGNAL( cancelIncidenceSignal(Incidence *) ), 324 connect( mAgendaView, SIGNAL( cancelIncidenceSignal(Incidence *) ),
319 mMainView, SLOT(cancelIncidence(Incidence *) ) ) ; 325 mMainView, SLOT(cancelIncidence(Incidence *) ) ) ;
320 connect(mMainView, SIGNAL(configChanged()), mAgendaView, SLOT(updateConfig())); 326 connect(mMainView, SIGNAL(configChanged()), mAgendaView, SLOT(updateConfig()));
321 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mAgendaView, 327 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mAgendaView,
322 SLOT( updateTodo( Todo *, int ) ) ); 328 SLOT( updateTodo( Todo *, int ) ) );
323 connect( mAgendaView,SIGNAL( todoMoved( Todo *, int )), 329 connect( mAgendaView,SIGNAL( todoMoved( Todo *, int )),
324 mMainView, SIGNAL( todoModified( Todo *, int ))); 330 mMainView, SIGNAL( todoModified( Todo *, int )));
325 connect( mAgendaView, SIGNAL( moveIncidenceSignal( Incidence * ) ), 331 connect( mAgendaView, SIGNAL( moveIncidenceSignal( Incidence * ) ),
326 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 332 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
327 connect( mAgendaView, SIGNAL( beamIncidenceSignal( Incidence * ) ), 333 connect( mAgendaView, SIGNAL( beamIncidenceSignal( Incidence * ) ),
328 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 334 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
329 mAgendaView->readSettings(); 335 mAgendaView->readSettings();
330 mAgendaView->updateConfig(); 336 mAgendaView->updateConfig();
331 } 337 }
332 338
333 showView( mAgendaView, full); 339 showView( mAgendaView, full);
334 340
335} 341}
336 342
337void KOViewManager::showDayView() 343void KOViewManager::showDayView()
338{ 344{
339 mFlagShowNextxDays = false; 345 mFlagShowNextxDays = false;
340 globalFlagBlockLabel = 1; 346 globalFlagBlockLabel = 1;
341 globalFlagBlockAgenda = 1; 347 globalFlagBlockAgenda = 1;
342 if ( mCurrentAgendaView != 1 ) 348 if ( mCurrentAgendaView != 1 )
343 mCurrentAgendaView = -1; 349 mCurrentAgendaView = -1;
344 showAgendaView(); 350 showAgendaView();
345 qApp->processEvents(); 351 qApp->processEvents();
346 globalFlagBlockAgenda = 2; 352 globalFlagBlockAgenda = 2;
347 globalFlagBlockLabel = 0; 353 globalFlagBlockLabel = 0;
348 mMainView->dateNavigator()->selectDates( 1 ); 354 mMainView->dateNavigator()->selectDates( 1 );
349 mCurrentAgendaView = 1 ; 355 mCurrentAgendaView = 1 ;
350 356
351} 357}
352 358
353void KOViewManager::showWorkWeekView() 359void KOViewManager::showWorkWeekView()
354{ 360{
355 mFlagShowNextxDays = false; 361 mFlagShowNextxDays = false;
356 globalFlagBlockAgenda = 1; 362 globalFlagBlockAgenda = 1;
357 globalFlagBlockLabel = 1; 363 globalFlagBlockLabel = 1;
358 if ( mCurrentAgendaView != 5 ) 364 if ( mCurrentAgendaView != 5 )
359 mCurrentAgendaView = -1; 365 mCurrentAgendaView = -1;
360 showAgendaView(); 366 showAgendaView();
361 qApp->processEvents(); 367 qApp->processEvents();
362 globalFlagBlockAgenda = 2; 368 globalFlagBlockAgenda = 2;
363 globalFlagBlockLabel = 0; 369 globalFlagBlockLabel = 0;
364 mMainView->dateNavigator()->selectWorkWeek(); 370 mMainView->dateNavigator()->selectWorkWeek();
365 mCurrentAgendaView = 5 ; 371 mCurrentAgendaView = 5 ;
366 372
367} 373}
368 374
369void KOViewManager::showWeekView() 375void KOViewManager::showWeekView()
370{ 376{
371 /* 377 /*
372 globalFlagBlockAgenda = 2; 378 globalFlagBlockAgenda = 2;
373 qDebug("4globalFlagBlockAgenda = 2; "); 379 qDebug("4globalFlagBlockAgenda = 2; ");
374 //globalFlagBlockPainting = true; 380 //globalFlagBlockPainting = true;
375 mMainView->dateNavigator()->selectWeek(); 381 mMainView->dateNavigator()->selectWeek();
376 showAgendaView(); 382 showAgendaView();
377 */ 383 */
378 384
379 385
380 mFlagShowNextxDays = false; 386 mFlagShowNextxDays = false;
381 globalFlagBlockAgenda = 1; 387 globalFlagBlockAgenda = 1;
382 globalFlagBlockLabel = 1; 388 globalFlagBlockLabel = 1;
383 if ( mCurrentAgendaView != 7 ) 389 if ( mCurrentAgendaView != 7 )
384 mCurrentAgendaView = -1; 390 mCurrentAgendaView = -1;
385 showAgendaView(); 391 showAgendaView();
386 qApp->processEvents(); 392 qApp->processEvents();
387 globalFlagBlockAgenda = 2; 393 globalFlagBlockAgenda = 2;
388 globalFlagBlockLabel = 0; 394 globalFlagBlockLabel = 0;
389 mMainView->dateNavigator()->selectWeek(); 395 mMainView->dateNavigator()->selectWeek();
390 mCurrentAgendaView = 7 ; 396 mCurrentAgendaView = 7 ;
391} 397}
392 398
393void KOViewManager::showNextXView() 399void KOViewManager::showNextXView()
394{ 400{
395 401
396 globalFlagBlockAgenda = 1; 402 globalFlagBlockAgenda = 1;
397 if ( mCurrentAgendaView != 3 ) 403 if ( mCurrentAgendaView != 3 )
398 mCurrentAgendaView = -1; 404 mCurrentAgendaView = -1;
399 showAgendaView(KOPrefs::instance()->mFullViewMonth); 405 showAgendaView(KOPrefs::instance()->mFullViewMonth);
400 globalFlagBlockAgenda = 2; 406 globalFlagBlockAgenda = 2;
401 mMainView->dateNavigator()->selectDates( QDate::currentDate(), 407 mMainView->dateNavigator()->selectDates( QDate::currentDate(),
402 KOPrefs::instance()->mNextXDays ); 408 KOPrefs::instance()->mNextXDays );
403 mFlagShowNextxDays = true; 409 mFlagShowNextxDays = true;
404 mCurrentAgendaView = 3 ; 410 mCurrentAgendaView = 3 ;
405} 411}
406bool KOViewManager::showsNextDays() 412bool KOViewManager::showsNextDays()
407{ 413{
408 return mFlagShowNextxDays; 414 return mFlagShowNextxDays;
409} 415}
410void KOViewManager::showMonthView() 416void KOViewManager::showMonthView()
411{ 417{
412 if (!mMonthView) { 418 if (!mMonthView) {
413 mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView"); 419 mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView");
414 420
415 addView(mMonthView); 421 addView(mMonthView);
416 // mMonthView->show(); 422 // mMonthView->show();
417 // SIGNALS/SLOTS FOR MONTH VIEW 423 // SIGNALS/SLOTS FOR MONTH VIEW
418 connect(mMonthView, SIGNAL(newEventSignal(QDateTime)), 424 connect(mMonthView, SIGNAL(newEventSignal(QDateTime)),
419 mMainView, SLOT(newEvent(QDateTime))); 425 mMainView, SLOT(newEvent(QDateTime)));
420 426
421 connect(mMonthView, SIGNAL(showIncidenceSignal(Incidence *)), 427 connect(mMonthView, SIGNAL(showIncidenceSignal(Incidence *)),
422 mMainView, SLOT(showIncidence(Incidence *))); 428 mMainView, SLOT(showIncidence(Incidence *)));
423 connect(mMonthView, SIGNAL(editIncidenceSignal(Incidence *)), 429 connect(mMonthView, SIGNAL(editIncidenceSignal(Incidence *)),
424 mMainView, SLOT(editIncidence(Incidence *))); 430 mMainView, SLOT(editIncidence(Incidence *)));
425 connect(mMonthView, SIGNAL(deleteIncidenceSignal(Incidence *)), 431 connect(mMonthView, SIGNAL(deleteIncidenceSignal(Incidence *)),
426 mMainView, SLOT(deleteIncidence(Incidence *))); 432 mMainView, SLOT(deleteIncidence(Incidence *)));
427 433
428 connect( mMonthView, SIGNAL( incidenceSelected( Incidence * ) ), 434 connect( mMonthView, SIGNAL( incidenceSelected( Incidence * ) ),
429 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 435 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
430 connect( mMonthView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), 436 connect( mMonthView, SIGNAL( cloneIncidenceSignal( Incidence * ) ),
431 mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); 437 mMainView, SLOT ( cloneIncidence( Incidence * ) ) );
432 connect( mMonthView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), 438 connect( mMonthView, SIGNAL( cancelIncidenceSignal( Incidence * ) ),
433 mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); 439 mMainView, SLOT ( cancelIncidence( Incidence * ) ) );
434 440
435 connect( mMonthView, SIGNAL( moveIncidenceSignal( Incidence * ) ), 441 connect( mMonthView, SIGNAL( moveIncidenceSignal( Incidence * ) ),
436 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 442 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
437 connect( mMonthView, SIGNAL( beamIncidenceSignal( Incidence * ) ), 443 connect( mMonthView, SIGNAL( beamIncidenceSignal( Incidence * ) ),
438 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 444 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
439 connect( mMonthView, SIGNAL( selectWeekNum( int ) ), 445 connect( mMonthView, SIGNAL( selectWeekNum( int ) ),
440 mMainView, SLOT ( selectWeekNum( int ) ) ); 446 mMainView, SLOT ( selectWeekNum( int ) ) );
441 connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig())); 447 connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig()));
442 mMonthView->updateConfig(); 448 mMonthView->updateConfig();
443 } 449 }
444 450
445 globalFlagBlockAgenda = 1; 451 globalFlagBlockAgenda = 1;
446 //mFlagShowNextxDays = false; 452 //mFlagShowNextxDays = false;
447 // if(mMonthView == mCurrentView) return; 453 // if(mMonthView == mCurrentView) return;
448 mMainView->dateNavigator()->selectMonth(); 454 mMainView->dateNavigator()->selectMonth();
449 // DateList tmpList = mMainView->dateNavigator()->selectedDates( ); 455 // DateList tmpList = mMainView->dateNavigator()->selectedDates( );
450 //mMonthView->showDates(tmpList.first(), tmpList.last()); 456 //mMonthView->showDates(tmpList.first(), tmpList.last());
451 457
452 showView(mMonthView, true ); 458 showView(mMonthView, true );
453 459
454} 460}
455 461
456void KOViewManager::showTodoView() 462void KOViewManager::showTodoView()
457{ 463{
458 //mFlagShowNextxDays = false; 464 //mFlagShowNextxDays = false;
459 if ( !mTodoView ) { 465 if ( !mTodoView ) {
460 mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(), 466 mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(),
461 "KOViewManager::TodoView" ); 467 "KOViewManager::TodoView" );
462 468
463 addView( mTodoView ); 469 addView( mTodoView );
464 // QPEApplication::setStylusOperation( mTodoView, QPEApplication::RightOnHold ); 470 // QPEApplication::setStylusOperation( mTodoView, QPEApplication::RightOnHold );
465 471
466 // SIGNALS/SLOTS FOR TODO VIEW 472 // SIGNALS/SLOTS FOR TODO VIEW
467 connect( mTodoView, SIGNAL( newTodoSignal() ), 473 connect( mTodoView, SIGNAL( newTodoSignal() ),
468 mMainView, SLOT( newTodo() ) ); 474 mMainView, SLOT( newTodo() ) );
469 connect( mTodoView, SIGNAL( newSubTodoSignal( Todo * ) ), 475 connect( mTodoView, SIGNAL( newSubTodoSignal( Todo * ) ),
470 mMainView, SLOT( newSubTodo( Todo *) ) ); 476 mMainView, SLOT( newSubTodo( Todo *) ) );
471 connect( mTodoView, SIGNAL( showTodoSignal( Todo *) ), 477 connect( mTodoView, SIGNAL( showTodoSignal( Todo *) ),
472 mMainView, SLOT( showTodo( Todo * ) ) ); 478 mMainView, SLOT( showTodo( Todo * ) ) );
473 connect( mTodoView, SIGNAL( editTodoSignal( Todo * ) ), 479 connect( mTodoView, SIGNAL( editTodoSignal( Todo * ) ),
474 mMainView, SLOT( editTodo( Todo * ) ) ); 480 mMainView, SLOT( editTodo( Todo * ) ) );
475 connect( mTodoView, SIGNAL( deleteTodoSignal( Todo * ) ), 481 connect( mTodoView, SIGNAL( deleteTodoSignal( Todo * ) ),
476 mMainView, SLOT( deleteTodo( Todo * ) ) ); 482 mMainView, SLOT( deleteTodo( Todo * ) ) );
477 connect( mTodoView, SIGNAL( purgeCompletedSignal() ), 483 connect( mTodoView, SIGNAL( purgeCompletedSignal() ),
478 mMainView, SLOT( purgeCompleted() ) ); 484 mMainView, SLOT( purgeCompleted() ) );
479 485
480 connect( mTodoView, SIGNAL( incidenceSelected( Incidence * ) ), 486 connect( mTodoView, SIGNAL( incidenceSelected( Incidence * ) ),
481 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 487 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
482 488
483 connect( mMainView, SIGNAL( configChanged() ), mTodoView, 489 connect( mMainView, SIGNAL( configChanged() ), mTodoView,
484 SLOT( updateConfig() ) ); 490 SLOT( updateConfig() ) );
485 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mTodoView, 491 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mTodoView,
486 SLOT( updateTodo( Todo *, int ) ) ); 492 SLOT( updateTodo( Todo *, int ) ) );
487 connect( mTodoView, SIGNAL( todoModifiedSignal( Todo *, int ) ), 493 connect( mTodoView, SIGNAL( todoModifiedSignal( Todo *, int ) ),
488 mMainView, SIGNAL ( todoModified( Todo *, int ) ) ); 494 mMainView, SIGNAL ( todoModified( Todo *, int ) ) );
489 connect( mTodoView, SIGNAL( cloneTodoSignal( Incidence * ) ), 495 connect( mTodoView, SIGNAL( cloneTodoSignal( Incidence * ) ),
490 mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); 496 mMainView, SLOT ( cloneIncidence( Incidence * ) ) );
491 connect( mTodoView, SIGNAL( cancelTodoSignal( Incidence * ) ), 497 connect( mTodoView, SIGNAL( cancelTodoSignal( Incidence * ) ),
492 mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); 498 mMainView, SLOT ( cancelIncidence( Incidence * ) ) );
493 connect( mTodoView, SIGNAL( unparentTodoSignal( Todo * ) ), 499 connect( mTodoView, SIGNAL( unparentTodoSignal( Todo * ) ),
494 mMainView, SLOT ( todo_unsub( Todo * ) ) ); 500 mMainView, SLOT ( todo_unsub( Todo * ) ) );
495 connect( mTodoView, SIGNAL( moveTodoSignal( Incidence * ) ), 501 connect( mTodoView, SIGNAL( moveTodoSignal( Incidence * ) ),
496 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 502 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
497 connect( mTodoView, SIGNAL( beamTodoSignal( Incidence * ) ), 503 connect( mTodoView, SIGNAL( beamTodoSignal( Incidence * ) ),
498 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 504 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
499 KConfig *config = KOGlobals::config(); 505 KConfig *config = KOGlobals::config();
500 mTodoView->restoreLayout(config,"Todo View"); 506 mTodoView->restoreLayout(config,"Todo View");
501 } 507 }
502 508
503 globalFlagBlockAgenda = 1; 509 globalFlagBlockAgenda = 1;
504 showView( mTodoView, true ); 510 showView( mTodoView, true );
505 511
506} 512}
507 513
508void KOViewManager::showJournalView() 514void KOViewManager::showJournalView()
509{ 515{
510 //mFlagShowNextxDays = false; 516 //mFlagShowNextxDays = false;
511 if (!mJournalView) { 517 if (!mJournalView) {
512 mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(), 518 mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(),
513 "KOViewManager::JournalView"); 519 "KOViewManager::JournalView");
514 connect( mMainView, SIGNAL( configChanged() ), mJournalView, 520 connect( mMainView, SIGNAL( configChanged() ), mJournalView,
515 SLOT( updateConfig() ) ); 521 SLOT( updateConfig() ) );
516 connect(mJournalView, SIGNAL(deleteJournal(Journal *) ), mMainView,SLOT(deleteJournal(Journal *)) ); 522 connect(mJournalView, SIGNAL(deleteJournal(Journal *) ), mMainView,SLOT(deleteJournal(Journal *)) );
517 addView(mJournalView); 523 addView(mJournalView);
518 } 524 }
519 525
520 showView(mJournalView); 526 showView(mJournalView);
521} 527}
522 528
523void KOViewManager::showTimeSpanView() 529void KOViewManager::showTimeSpanView()
524{ 530{
525 //mFlagShowNextxDays = false; 531 //mFlagShowNextxDays = false;
526 if (!mTimeSpanView) { 532 if (!mTimeSpanView) {
527 mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(), 533 mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(),
528 "KOViewManager::TimeSpanView"); 534 "KOViewManager::TimeSpanView");
529 addView(mTimeSpanView); 535 addView(mTimeSpanView);
530 536
531 mTimeSpanView->readSettings(); 537 mTimeSpanView->readSettings();
532 } 538 }
533 539
534 showView(mTimeSpanView); 540 showView(mTimeSpanView);
535} 541}
536 542
537Incidence *KOViewManager::currentSelection() 543Incidence *KOViewManager::currentSelection()
538{ 544{
539 if (!mCurrentView) return 0; 545 if (!mCurrentView) return 0;
540 if ( mCurrentView == mListView ) { 546 if ( mCurrentView == mListView ) {
541 if ( mListView->currentItem() ) 547 if ( mListView->currentItem() )
542 return mListView->currentItem(); 548 return mListView->currentItem();
543 } 549 }
544 return mCurrentView->selectedIncidences().first(); 550 return mCurrentView->selectedIncidences().first();
545} 551}
546 552
547QDate KOViewManager::currentSelectionDate() 553QDate KOViewManager::currentSelectionDate()
548{ 554{
549 QDate qd; 555 QDate qd;
550 if (mCurrentView) { 556 if (mCurrentView) {
551 DateList qvl = mCurrentView->selectedDates(); 557 DateList qvl = mCurrentView->selectedDates();
552 if (!qvl.isEmpty()) qd = qvl.first(); 558 if (!qvl.isEmpty()) qd = qvl.first();
553 } 559 }
554 return qd; 560 return qd;
555} 561}
556 562
557void KOViewManager::addView(KOrg::BaseView *view) 563void KOViewManager::addView(KOrg::BaseView *view)
558{ 564{
559#if QT_VERSION >= 300 565#if QT_VERSION >= 300
560 mMainView->viewStack()->addWidget( view ); 566 mMainView->viewStack()->addWidget( view );
561#else 567#else
562 mMainView->viewStack()->addWidget( view, 1 ); 568 mMainView->viewStack()->addWidget( view, 1 );
563#endif 569#endif
564} 570}
565 571
566void KOViewManager::setDocumentId( const QString &id ) 572void KOViewManager::setDocumentId( const QString &id )
567{ 573{
568 if (mTodoView) mTodoView->setDocumentId( id ); 574 if (mTodoView) mTodoView->setDocumentId( id );
569} 575}
diff --git a/korganizer/koviewmanager.h b/korganizer/koviewmanager.h
index f814c36..26b22be 100644
--- a/korganizer/koviewmanager.h
+++ b/korganizer/koviewmanager.h
@@ -1,113 +1,113 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 3 Copyright (c) 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef KOVIEWMANAGER_H 24#ifndef KOVIEWMANAGER_H
25#define KOVIEWMANAGER_H 25#define KOVIEWMANAGER_H
26 26
27#include <qobject.h> 27#include <qobject.h>
28 28
29#include <korganizer/baseview.h> 29#include <korganizer/baseview.h>
30 30
31class CalendarView; 31class CalendarView;
32 32
33class KOListView; 33class KOListView;
34class KOAgendaView; 34class KOAgendaView;
35class KOMonthView; 35class KOMonthView;
36class KOTimeSpanView; 36class KOTimeSpanView;
37class KOTodoView; 37class KOTodoView;
38class KOWhatsNextView; 38class KOWhatsNextView;
39class KOJournalView; 39class KOJournalView;
40 40
41using namespace KCal; 41using namespace KCal;
42 42
43/** 43/**
44 This class manages the views of the calendar. It owns the objects and handles 44 This class manages the views of the calendar. It owns the objects and handles
45 creation and selection. 45 creation and selection.
46*/ 46*/
47class KOViewManager : public QObject 47class KOViewManager : public QObject
48{ 48{
49 Q_OBJECT 49 Q_OBJECT
50 public: 50 public:
51 KOViewManager( CalendarView * ); 51 KOViewManager( CalendarView * );
52 virtual ~KOViewManager(); 52 virtual ~KOViewManager();
53 53
54 /** changes the view to be the currently selected view */ 54 /** changes the view to be the currently selected view */
55 void showView(KOrg::BaseView *, bool fullScreen = false ); 55 void showView(KOrg::BaseView *, bool fullScreen = false );
56 56 void updateWNview();
57 void readSettings(KConfig *config); 57 void readSettings(KConfig *config);
58 void writeSettings(KConfig *config); 58 void writeSettings(KConfig *config);
59 bool showsNextDays(); 59 bool showsNextDays();
60 /** Read which view was shown last from config file */ 60 /** Read which view was shown last from config file */
61 void readCurrentView(KConfig *); 61 void readCurrentView(KConfig *);
62 /** Write which view is currently shown to config file */ 62 /** Write which view is currently shown to config file */
63 void writeCurrentView(KConfig *); 63 void writeCurrentView(KConfig *);
64 64
65 KOrg::BaseView *currentView(); 65 KOrg::BaseView *currentView();
66 66
67 void setDocumentId( const QString & ); 67 void setDocumentId( const QString & );
68 68
69 void updateView(); 69 void updateView();
70 void updateView( const QDate &start, const QDate &end ); 70 void updateView( const QDate &start, const QDate &end );
71 71
72 void raiseCurrentView( bool fullScreen = false ); 72 void raiseCurrentView( bool fullScreen = false );
73 73
74 void addView(KOrg::BaseView *); 74 void addView(KOrg::BaseView *);
75 75
76 Incidence *currentSelection(); 76 Incidence *currentSelection();
77 QDate currentSelectionDate(); 77 QDate currentSelectionDate();
78 78
79 KOAgendaView *agendaView() const { return mAgendaView; } 79 KOAgendaView *agendaView() const { return mAgendaView; }
80 80
81 public slots: 81 public slots:
82 void showWhatsNextView(); 82 void showWhatsNextView();
83 void showListView(); 83 void showListView();
84 void showAgendaView( bool fullScreen = false ); 84 void showAgendaView( bool fullScreen = false );
85 void showDayView(); 85 void showDayView();
86 void showWorkWeekView(); 86 void showWorkWeekView();
87 void showWeekView(); 87 void showWeekView();
88 void showNextXView(); 88 void showNextXView();
89 void showMonthView(); 89 void showMonthView();
90 void showTodoView(); 90 void showTodoView();
91 void showJournalView(); 91 void showJournalView();
92 void showTimeSpanView(); 92 void showTimeSpanView();
93 93
94 private: 94 private:
95 CalendarView *mMainView; 95 CalendarView *mMainView;
96 96
97 int mCurrentAgendaView; 97 int mCurrentAgendaView;
98 KOAgendaView *mAgendaView; 98 KOAgendaView *mAgendaView;
99 KOListView *mListView; 99 KOListView *mListView;
100 KOMonthView *mMonthView; 100 KOMonthView *mMonthView;
101 KOTodoView *mTodoView; 101 KOTodoView *mTodoView;
102 KOWhatsNextView *mWhatsNextView; 102 KOWhatsNextView *mWhatsNextView;
103 KOJournalView *mJournalView; 103 KOJournalView *mJournalView;
104 KOTimeSpanView *mTimeSpanView; 104 KOTimeSpanView *mTimeSpanView;
105 105
106 KOrg::BaseView *mCurrentView; // currently active event view 106 KOrg::BaseView *mCurrentView; // currently active event view
107 107
108 int mAgendaViewMode; 108 int mAgendaViewMode;
109 bool mFlagShowNextxDays; 109 bool mFlagShowNextxDays;
110 110
111}; 111};
112 112
113#endif 113#endif
diff --git a/korganizer/kowhatsnextview.cpp b/korganizer/kowhatsnextview.cpp
index b2001ec..2a8a7c1 100644
--- a/korganizer/kowhatsnextview.cpp
+++ b/korganizer/kowhatsnextview.cpp
@@ -1,643 +1,660 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qlayout.h> 20#include <qlayout.h>
21#include <qtextbrowser.h> 21#include <qtextbrowser.h>
22#include <qtextcodec.h> 22#include <qtextcodec.h>
23#include <qfileinfo.h> 23#include <qfileinfo.h>
24#include <qlabel.h> 24#include <qlabel.h>
25 25
26#include <qapplication.h> 26#include <qapplication.h>
27 27
28#include <kglobal.h> 28#include <kglobal.h>
29#include <klocale.h> 29#include <klocale.h>
30#include <kdebug.h> 30#include <kdebug.h>
31#include <kiconloader.h> 31#include <kiconloader.h>
32#include <kmessagebox.h> 32#include <kmessagebox.h>
33 33
34#include <libkcal/calendar.h> 34#include <libkcal/calendar.h>
35 35
36#ifndef KORG_NOPRINTER 36#ifndef KORG_NOPRINTER
37#include "calprinter.h" 37#include "calprinter.h"
38#endif 38#endif
39#include "koglobals.h" 39#include "koglobals.h"
40#include "koprefs.h" 40#include "koprefs.h"
41#include "koeventviewerdialog.h" 41#include "koeventviewerdialog.h"
42 42
43#include "kowhatsnextview.h" 43#include "kowhatsnextview.h"
44using namespace KOrg; 44using namespace KOrg;
45 45
46void WhatsNextTextBrowser::setSource(const QString& n) 46void WhatsNextTextBrowser::setSource(const QString& n)
47{ 47{
48 48
49 if (n.startsWith("event:")) { 49 if (n.startsWith("event:")) {
50 emit showIncidence(n); 50 emit showIncidence(n);
51 return; 51 return;
52 } else if (n.startsWith("todo:")) { 52 } else if (n.startsWith("todo:")) {
53 emit showIncidence(n); 53 emit showIncidence(n);
54 return; 54 return;
55 } else { 55 } else {
56 QTextBrowser::setSource(n); 56 QTextBrowser::setSource(n);
57 } 57 }
58} 58}
59 59
60KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent, 60KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent,
61 const char *name) 61 const char *name)
62 : KOrg::BaseView(calendar, parent, name) 62 : KOrg::BaseView(calendar, parent, name)
63{ 63{
64 // mDateLabel = 64 // mDateLabel =
65 // new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this); 65 // new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this);
66 // mDateLabel->setMargin(2); 66 // mDateLabel->setMargin(2);
67 // mDateLabel->setAlignment(AlignCenter); 67 // mDateLabel->setAlignment(AlignCenter);
68 setFont( KOPrefs::instance()->mWhatsNextFont ); 68 setFont( KOPrefs::instance()->mWhatsNextFont );
69 mView = new WhatsNextTextBrowser(this); 69 mView = new WhatsNextTextBrowser(this);
70 connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &))); 70 connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &)));
71 71
72 mEventViewer = 0; 72 mEventViewer = 0;
73 73
74 QBoxLayout *topLayout = new QVBoxLayout(this); 74 QBoxLayout *topLayout = new QVBoxLayout(this);
75 // topLayout->addWidget(mDateLabel); 75 // topLayout->addWidget(mDateLabel);
76 topLayout->addWidget(mView); 76 topLayout->addWidget(mView);
77} 77}
78 78
79KOWhatsNextView::~KOWhatsNextView() 79KOWhatsNextView::~KOWhatsNextView()
80{ 80{
81} 81}
82 82
83int KOWhatsNextView::maxDatesHint() 83int KOWhatsNextView::maxDatesHint()
84{ 84{
85 return 0; 85 return 0;
86} 86}
87 87
88int KOWhatsNextView::currentDateCount() 88int KOWhatsNextView::currentDateCount()
89{ 89{
90 return 0; 90 return 0;
91} 91}
92 92
93QPtrList<Incidence> KOWhatsNextView::selectedIncidences() 93QPtrList<Incidence> KOWhatsNextView::selectedIncidences()
94{ 94{
95 QPtrList<Incidence> eventList; 95 QPtrList<Incidence> eventList;
96 96
97 return eventList; 97 return eventList;
98} 98}
99 99
100 100
101void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd, 101void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd,
102 const QDate &td) 102 const QDate &td)
103{ 103{
104#ifndef KORG_NOPRINTER 104#ifndef KORG_NOPRINTER
105 calPrinter->preview(CalPrinter::Day, fd, td); 105 calPrinter->preview(CalPrinter::Day, fd, td);
106#endif 106#endif
107} 107}
108void KOWhatsNextView::updateConfig() 108void KOWhatsNextView::updateConfig()
109{ 109{
110 setFont( KOPrefs::instance()->mWhatsNextFont ); 110 setFont( KOPrefs::instance()->mWhatsNextFont );
111 updateView(); 111 updateView();
112 112
113} 113}
114void KOWhatsNextView::updateView() 114void KOWhatsNextView::updateView()
115{ 115{
116 116
117 // mDateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate())); 117 // mDateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate()));
118 KIconLoader kil("korganizer"); 118 KIconLoader kil("korganizer");
119 QString ipath;// = new QString(); 119 QString ipath;// = new QString();
120 // kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,&ipath); 120 // kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,&ipath);
121 //<big><big><strong>" + date + "</strong></big></big>\n"; 121 //<big><big><strong>" + date + "</strong></big></big>\n";
122 mText = "<table width=\"100%\">\n"; 122 mText = "<table width=\"100%\">\n";
123 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 123 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
124#ifdef DESKTOP_VERSION 124#ifdef DESKTOP_VERSION
125 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>"; 125 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>";
126#else 126#else
127 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 127 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
128#endif 128#endif
129 // mText += "<img src=\""; 129 // mText += "<img src=\"";
130 // mText += ipath; 130 // mText += ipath;
131 // mText += "\">"; 131 // mText += "\">";
132 mEventDate = QDate::currentDate(); 132 mEventDate = QDate::currentDate();
133#ifdef DESKTOP_VERSION 133#ifdef DESKTOP_VERSION
134 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h1>"; 134 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h1>";
135#else 135#else
136 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h2>"; 136 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h2>";
137#endif 137#endif
138 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>"; 138 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>";
139 int iii; 139 int iii;
140 mTodos.clear(); 140 mTodos.clear();
141 QPtrList<Event> events; 141 QPtrList<Event> events;
142 QPtrList<Todo> todos = calendar()->todos(); 142 QPtrList<Todo> todos = calendar()->todos();
143 Todo * todo; 143 Todo * todo;
144 //mText += "<h2>" + i18n("Events: ") + "</h2>\n"; 144 //mText += "<h2>" + i18n("Events: ") + "</h2>\n";
145 int daysToShow = KOPrefs::instance()->mWhatsNextDays ; 145 int daysToShow = KOPrefs::instance()->mWhatsNextDays ;
146 bool itemAdded = false; 146 bool itemAdded = false;
147 for ( iii = 0; iii < daysToShow; ++iii ) { 147 for ( iii = 0; iii < daysToShow; ++iii ) {
148 QString date; 148 QString date;
149 itemAdded = false; 149 itemAdded = false;
150 events = calendar()->events( mEventDate, true ); 150 events = calendar()->events( mEventDate, true );
151 151
152 if ( iii == 0 ) { // today !!! 152 if ( iii == 0 ) { // today !!!
153 todo = todos.first(); 153 todo = todos.first();
154 while(todo) { 154 while(todo) {
155 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() < mEventDate ) { 155 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() < mEventDate ) {
156 if ( ! itemAdded ) { 156 if ( ! itemAdded ) {
157 appendDay ( iii, mEventDate ); 157 appendDay ( iii, mEventDate );
158 itemAdded = true; 158 itemAdded = true;
159 159
160 } 160 }
161 appendEvent(todo); 161 appendEvent(todo);
162 } 162 }
163 todo = todos.next(); 163 todo = todos.next();
164 } 164 }
165 } 165 }
166 166
167 167
168 if (events.count() > 0) { 168 if (events.count() > 0) {
169 // mText += "<p></p>"; 169 // mText += "<p></p>";
170 // kil.loadIcon("month",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 170 // kil.loadIcon("month",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
171 // mText += "<h2>"; 171 // mText += "<h2>";
172 //mText += " <img src=\""; 172 //mText += " <img src=\"";
173 //mText += ipath; 173 //mText += ipath;
174 //mText += "\">"; 174 //mText += "\">";
175 if ( ! itemAdded ) { 175 if ( ! itemAdded ) {
176 appendDay ( iii, mEventDate ); 176 appendDay ( iii, mEventDate );
177 itemAdded = true; 177 itemAdded = true;
178 178
179 } 179 }
180 Event *ev = events.first(); 180 Event *ev = events.first();
181 while(ev) { 181 while(ev) {
182 //qDebug("+++++event append %s", ev->summary().latin1()); 182 //qDebug("+++++event append %s", ev->summary().latin1());
183 if ( true /*!ev->recurrence()->doesRecur() || ev->recursOn( mEventDate)*/) { 183 if ( true /*!ev->recurrence()->doesRecur() || ev->recursOn( mEventDate)*/) {
184 appendEvent(ev, false , iii!= 0 ); 184 appendEvent(ev, false , iii!= 0 );
185 } 185 }
186 ev = events.next(); 186 ev = events.next();
187 } 187 }
188 188
189 //mText += "</table>\n"; 189 //mText += "</table>\n";
190 } 190 }
191 191
192 todo = todos.first(); 192 todo = todos.first();
193 while(todo) { 193 while(todo) {
194 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() == mEventDate ) { 194 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() == mEventDate ) {
195 if ( ! itemAdded ) { 195 if ( ! itemAdded ) {
196 appendDay ( iii, mEventDate ); 196 appendDay ( iii, mEventDate );
197 itemAdded = true; 197 itemAdded = true;
198 } 198 }
199 appendEvent(todo); 199 appendEvent(todo);
200 } 200 }
201 todo = todos.next(); 201 todo = todos.next();
202 } 202 }
203 if ( !itemAdded && iii == 0 ) { 203 if ( !itemAdded && iii == 0 ) {
204 // appendDay ( iii, mEventDate ); 204 // appendDay ( iii, mEventDate );
205 //mText += "<table>"; 205 //mText += "<table>";
206 // mText += "<b><font color=\"#000080\"><em>"+i18n("No event, nothing to do.") +"</em></font></b>\n"; 206 // mText += "<b><font color=\"#000080\"><em>"+i18n("No event, nothing to do.") +"</em></font></b>\n";
207 mText += "<h3 align=\"center\"><font color=\"#008000\"><em>"+i18n("No event, nothing to do. ") +"</em></font></h3>\n"; 207 mText += "<h3 align=\"center\"><font color=\"#008000\"><em>"+i18n("No event, nothing to do. ") +"</em></font></h3>\n";
208 //mText +="</table>"; 208 //mText +="</table>";
209 } 209 }
210 if ( itemAdded ) 210 if ( itemAdded )
211 mText += "</table>\n"; 211 mText += "</table>\n";
212 mEventDate = mEventDate.addDays( 1 ); 212 mEventDate = mEventDate.addDays( 1 );
213 } 213 }
214 214
215 int topmostPrios = KOPrefs::instance()->mWhatsNextPrios; 215 int topmostPrios = KOPrefs::instance()->mWhatsNextPrios;
216 if (todos.count() > 0 && topmostPrios > 0 ) { 216 if (todos.count() > 0 && topmostPrios > 0 ) {
217 // kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 217 // kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
218 // mText += "<h2>"; 218 // mText += "<h2>";
219 //<img src=\""; 219 //<img src=\"";
220 // mText += ipath; 220 // mText += ipath;
221 // mText += "\">"; 221 // mText += "\">";
222 // mText += i18n("Overdue To-Do:") + "</h2>\n"; 222 // mText += i18n("Overdue To-Do:") + "</h2>\n";
223 223
224 //mText += "<ul>\n"; 224 //mText += "<ul>\n";
225 bool gotone = false; 225 bool gotone = false;
226 int priority = 1; 226 int priority = 1;
227 int priosFound = 0; 227 int priosFound = 0;
228#ifdef DESKTOP_VERSION 228#ifdef DESKTOP_VERSION
229 mText +="<p></p>"; 229 mText +="<p></p>";
230#endif 230#endif
231 231
232 mText +="<big><big><strong><em><font color=\"#000080\">" + i18n("Incomplete Todo:") + "</font></em></strong></big></big>\n"; 232 mText +="<big><big><strong><em><font color=\"#000080\">" + i18n("Incomplete Todo:") + "</font></em></strong></big></big>\n";
233 mText += "<ul>\n"; 233 mText += "<ul>\n";
234 while (!gotone && priority<6) { 234 while (!gotone && priority<6) {
235 todo = todos.first(); 235 todo = todos.first();
236 while(todo) { 236 while(todo) {
237 if (!todo->isCompleted() && (todo->priority() == priority) ) { 237 if (!todo->isCompleted() && (todo->priority() == priority) ) {
238 if ( appendTodo(todo) ) 238 if ( appendTodo(todo) )
239 gotone = true; 239 gotone = true;
240 } 240 }
241 todo = todos.next(); 241 todo = todos.next();
242 } 242 }
243 if ( gotone ) { 243 if ( gotone ) {
244 gotone = false; 244 gotone = false;
245 ++priosFound; 245 ++priosFound;
246 if ( priosFound == topmostPrios ) 246 if ( priosFound == topmostPrios )
247 break; 247 break;
248 } 248 }
249 priority++; 249 priority++;
250 // kdDebug() << "adding the todos..." << endl; 250 // kdDebug() << "adding the todos..." << endl;
251 } 251 }
252 mText += "</ul>\n"; 252 mText += "</ul>\n";
253 } 253 }
254 254
255 int replys = 0; 255 int replys = 0;
256 events = calendar()->events(QDate::currentDate(), QDate(2975,12,6)); 256 events = calendar()->events(QDate::currentDate(), QDate(2975,12,6));
257 if (events.count() > 0) { 257 if (events.count() > 0) {
258 Event *ev = events.first(); 258 Event *ev = events.first();
259 while(ev) { 259 while(ev) {
260 Attendee *me = ev->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 260 Attendee *me = ev->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
261 if (me!=0) { 261 if (me!=0) {
262 if (me->status()==Attendee::NeedsAction && me->RSVP()) { 262 if (me->status()==Attendee::NeedsAction && me->RSVP()) {
263 if (replys == 0) { 263 if (replys == 0) {
264 mText += "<p></p>"; 264 mText += "<p></p>";
265 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 265 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
266 mText += "<h2>"; 266 //mText += "<h2>";
267 //<img src=\""; 267 //<img src=\"";
268 // mText += ipath; 268 // mText += ipath;
269 // mText += "\">"; 269 // mText += "\">";
270 mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n"; 270 //mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n";
271 mText +="<big><big><strong><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></strong></big></big>\n";
271 mText += "<table>\n"; 272 mText += "<table>\n";
272 } 273 }
273 replys++; 274 replys++;
274 appendEvent(ev,true); 275 appendEvent(ev,true);
275 } 276 }
276 } 277 }
277 ev = events.next(); 278 ev = events.next();
278 } 279 }
279 } 280 }
280 todos = calendar()->todos(); 281 todos = calendar()->todos();
281 if (todos.count() > 0) { 282 if (todos.count() > 0) {
282 Todo *to = todos.first(); 283 Todo *to = todos.first();
283 while(to) { 284 while(to) {
284 Attendee *me = to->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 285 if ( !to->isCompleted() ){
285 if (me!=0) { 286 Attendee *me = to->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
286 if (me->status()==Attendee::NeedsAction && me->RSVP()) { 287 if (me!=0) {
287 if (replys == 0) { 288 if (me->status()==Attendee::NeedsAction && me->RSVP()) {
288 mText += "<p></p>"; 289 if (replys == 0) {
289 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 290 mText +="<big><big><strong><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></strong></big></big>\n";
290 mText += "<h2>"; 291 mText += "<table>\n";
291 //<img src=\""; 292 }
292 // mText += ipath; 293 replys++;
293 // mText += "\">"; 294 appendEvent(to, true);
294 mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n";
295 mText += "<table>\n";
296 } 295 }
297 replys++;
298 appendEvent(to);
299 } 296 }
300 } 297 }
301 kdDebug () << "check for todo-replys..." << endl;
302 to = todos.next(); 298 to = todos.next();
303 } 299 }
304 } 300 }
305 if (replys > 0 ) mText += "</table>\n"; 301 if (replys > 0 ) mText += "</table>\n";
306 302
307 303
308 mText += "</td></tr>\n</table>\n"; 304 mText += "</td></tr>\n</table>\n";
309 305
310 kdDebug() << "KOWhatsNextView::updateView: text: " << mText << endl;
311 mView->setText(mText); 306 mView->setText(mText);
312 mView->setFocus(); 307 mView->setFocus();
313 308
314 // QPixmap bPix = SmallIcon( "back" ); 309 // QPixmap bPix = SmallIcon( "back" );
315 // qDebug("xxxxxxxxxxxxxxxxxxxxx "); 310 // qDebug("xxxxxxxxxxxxxxxxxxxxx ");
316 // QWidget* test = new QWidget(); 311 // QWidget* test = new QWidget();
317 // test->setBackgroundMode(FixedPixmap ); 312 // test->setBackgroundMode(FixedPixmap );
318 // test->setBackgroundPixmap ( bPix ); 313 // test->setBackgroundPixmap ( bPix );
319 // test->resize( 300, 400 ); 314 // test->resize( 300, 400 );
320 // test->show(); 315 // test->show();
321 // mView->setBackgroundMode(FixedPixmap ); 316 // mView->setBackgroundMode(FixedPixmap );
322 // mView->setBackgroundPixmap ( bPix ); 317 // mView->setBackgroundPixmap ( bPix );
323} 318}
324 319
325void KOWhatsNextView::appendDay( int i, QDate eventDate ) 320void KOWhatsNextView::appendDay( int i, QDate eventDate )
326{ 321{
327 QString date; 322 QString date;
328 QString day = KGlobal::locale()->formatDate( eventDate , KOPrefs::instance()->mShortDateInViewer); 323 QString day = KGlobal::locale()->formatDate( eventDate , KOPrefs::instance()->mShortDateInViewer);
329 if ( ! KOPrefs::instance()->mShortDateInViewer && QApplication::desktop()->width() < 320 ) { 324 if ( ! KOPrefs::instance()->mShortDateInViewer && QApplication::desktop()->width() < 320 ) {
330 if ( i == 0 ) { 325 if ( i == 0 ) {
331 mText += "<table>\n"; 326 mText += "<table>\n";
332 return;//date = "<em><font color=\"#008000\"><em>" + day+"</font></em>"; 327 return;//date = "<em><font color=\"#008000\"><em>" + day+"</font></em>";
333 } 328 }
334 else if ( i == 1 ) 329 else if ( i == 1 )
335 date = "<em><font color=\"#000080\">" + day + "</font></em>" ; 330 date = "<em><font color=\"#000080\">" + day + "</font></em>" ;
336 else date = "<em><font color=\"#000080\">" + day + "</font></em>"; 331 else date = "<em><font color=\"#000080\">" + day + "</font></em>";
337 //mText += "<h2>" + date + "</h2>\n"; 332 //mText += "<h2>" + date + "</h2>\n";
338 mText += "<big><big><strong>" + date + "</strong></big></big>\n"; 333 mText += "<big><big><strong>" + date + "</strong></big></big>\n";
339 mText += "<table>\n"; 334 mText += "<table>\n";
340 335
341 336
342 337
343 } else { 338 } else {
344 if ( i == 0 ) { 339 if ( i == 0 ) {
345 mText += "<table>\n"; 340 mText += "<table>\n";
346 return;// date = "<font color=\"#008000\"><em>" +i18n("Today: ") +"</em>" + day+"</font>"; 341 return;// date = "<font color=\"#008000\"><em>" +i18n("Today: ") +"</em>" + day+"</font>";
347 } 342 }
348 343
349#ifdef DESKTOP_VERSION 344#ifdef DESKTOP_VERSION
350 else if ( i == 1 ) { 345 else if ( i == 1 ) {
351 date = "<h2><em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em></h2>" ; 346 date = "<h2><em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em></h2>" ;
352 } 347 }
353 else date = "<h2><em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em></h2>"; 348 else date = "<h2><em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em></h2>";
354#else 349#else
355 else if ( i == 1 ) { 350 else if ( i == 1 ) {
356 date = "<em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em>" ; 351 date = "<em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em>" ;
357 } 352 }
358 else date = "<em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em>"; 353 else date = "<em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em>";
359 354
360#endif 355#endif
361 //mText += "<h2>" + date + "</h2>\n"; 356 //mText += "<h2>" + date + "</h2>\n";
362 mText += "<big><big><strong>" + date + "</strong></big></big>\n"; 357 mText += "<big><big><strong>" + date + "</strong></big></big>\n";
363 mText += "<table>\n"; 358 mText += "<table>\n";
364 } 359 }
365} 360}
366 361
367 362
368void KOWhatsNextView::showDates(const QDate &, const QDate &) 363void KOWhatsNextView::showDates(const QDate &, const QDate &)
369{ 364{
370 updateView(); 365 updateView();
371} 366}
372 367
373void KOWhatsNextView::showEvents(QPtrList<Event>) 368void KOWhatsNextView::showEvents(QPtrList<Event>)
374{ 369{
375} 370}
376 371
377void KOWhatsNextView::changeEventDisplay(Event *, int action) 372void KOWhatsNextView::changeEventDisplay(Event *, int action)
378{ 373{
379 switch(action) { 374 switch(action) {
380 case KOGlobals::EVENTADDED: 375 case KOGlobals::EVENTADDED:
381 updateView(); 376 updateView();
382 break; 377 break;
383 case KOGlobals::EVENTEDITED: 378 case KOGlobals::EVENTEDITED:
384 updateView(); 379 updateView();
385 break; 380 break;
386 case KOGlobals::EVENTDELETED: 381 case KOGlobals::EVENTDELETED:
387 updateView(); 382 updateView();
388 break; 383 break;
389 default: 384 default:
390 updateView(); 385 updateView();
391 kdDebug() << "KOWhatsNextView::changeEventDisplay(): Illegal action " << action << endl; 386 kdDebug() << "KOWhatsNextView::changeEventDisplay(): Illegal action " << action << endl;
392 } 387 }
393} 388}
394 389
395void KOWhatsNextView::appendEvent(Incidence *ev, bool reply, bool notRed ) 390void KOWhatsNextView::appendEvent(Incidence *ev, bool reply, bool notRed )
396{ 391{
397 if ( !KOPrefs::instance()->mShowSyncEvents && ev->uid().left(21) == QString("last-syncEvent-device") ) 392 if ( !KOPrefs::instance()->mShowSyncEvents && ev->uid().left(15) == QString("last-syncEvent-") )
398 return; 393 return;
399 QDateTime cdt = QDateTime::currentDateTime(); 394 QDateTime cdt = QDateTime::currentDateTime();
395 QDateTime noc;
396 bool ok = true;
397 if ( reply ) {
398 noc = ev->getNextOccurence( cdt, &ok );
399 if (! ok && ev->type() == "Event")
400 return;
401 }
400 mText += "<tr><td><b>"; 402 mText += "<tr><td><b>";
401 if (ev->type()=="Event") { 403 if (ev->type()=="Event") {
404 if (reply) {
405 if (!ev->doesFloat())
406 mText += KGlobal::locale()->formatDateTime( noc , KOPrefs::instance()->mShortDateInViewer) +": ";
407 else
408 mText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
409
410 } else {
411 if (!ev->doesFloat()) {
412 Event *event = static_cast<Event *>(ev);
413 QDateTime st,end;
414 if ( event->recurrence()->doesRecur() ) {
415 QDate recDate= mEventDate;
416 int days = event->dtStart().date().daysTo (event->dtEnd().date() );
417 while ( ! event->recursOn( recDate ) ) {
418 recDate = recDate.addDays( -1 );
402 419
403 if (!ev->doesFloat()) { 420 }
404 Event *event = static_cast<Event *>(ev); 421 st = QDateTime ( recDate, event->dtStart().time() );
405 QDateTime st,end; 422 end = QDateTime ( recDate.addDays( days ), event->dtEnd().time() );
406 if ( event->recurrence()->doesRecur() ) { 423 }
407 QDate recDate= mEventDate; 424 else {
408 int days = event->dtStart().date().daysTo (event->dtEnd().date() ); 425 st = event->dtStart();
409 while ( ! event->recursOn( recDate ) ) { 426 end = event->dtEnd();
410 recDate = recDate.addDays( -1 );
411
412 } 427 }
413 st = QDateTime ( recDate, event->dtStart().time() );
414 end = QDateTime ( recDate.addDays( days ), event->dtEnd().time() );
415 }
416 else {
417 st = event->dtStart();
418 end = event->dtEnd();
419 }
420 428
421 if (reply) mText += "on " + event->dtStartDateStr() + ": "; 429
422 QString dateText; 430 QString dateText;
423 // qDebug("%s %s %s %s ", mEventDate.toString().latin1(),event->summary().latin1(), st .toString().latin1(),end.toString().latin1() ); 431 // qDebug("%s %s %s %s ", mEventDate.toString().latin1(),event->summary().latin1(), st .toString().latin1(),end.toString().latin1() );
424 if ( st.date() < mEventDate ) 432 if ( st.date() < mEventDate )
425 dateText = "++:++-"; 433 dateText = "++:++-";
426 else 434 else
427 dateText = event->dtStartTimeStr() + "-"; 435 dateText = event->dtStartTimeStr() + "-";
428 if ( end.date() > mEventDate ) 436 if ( end.date() > mEventDate )
429 dateText += "++:++"; 437 dateText += "++:++";
430 else
431 dateText += event->dtEndTimeStr();
432 if ( notRed )
433 mText += dateText;
434 else {
435 if ( end < cdt )
436 mText += "<font color=\"#F00000\">" + dateText + "</font>";
437 else if ( st < cdt )
438 mText += "<font color=\"#008000\">" + dateText + "</font>";
439 else 438 else
439 dateText += event->dtEndTimeStr();
440 if ( notRed )
440 mText += dateText; 441 mText += dateText;
441 } 442 else {
443 if ( end < cdt )
444 mText += "<font color=\"#F00000\">" + dateText + "</font>";
445 else if ( st < cdt )
446 mText += "<font color=\"#008000\">" + dateText + "</font>";
447 else
448 mText += dateText;
449
450 }
442 451
443 } else { 452 } else {
444 mText += i18n("Allday:"); 453 mText += i18n("Allday:");
445 454
455 }
446 } 456 }
447 } else { 457 } else {
448 mTodos.append( ev ); 458 mTodos.append( ev );
449 mText += i18n("ToDo:"); 459 mText += i18n("ToDo:");
450 if ( ((Todo*)ev)->dtDue().date() < QDate::currentDate() ) { 460 if (reply) {
451 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 461 mText += " ";
452 QString dfs = KGlobal::locale()->dateFormatShort(); 462 if ( noc != cdt ) {
453 KGlobal::locale()->setDateFormatShort("%d.%b"); 463 mText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
454 mText +="<font color=\"#F00000\">" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "</font>"; 464 }
455 KGlobal::locale()->setDateFormatShort(dfs);
456 } else { 465 } else {
457 if (!ev->doesFloat() ) 466 if ( ((Todo*)ev)->dtDue().date() < QDate::currentDate() ) {
458 if( ( (Todo*)ev)->dtDue() < cdt ) { 467 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
459 mText +="<font color=\"#F00000\">" + ((Todo*)ev)->dtDueTimeStr() + "</font>"; 468 QString dfs = KGlobal::locale()->dateFormatShort();
460 469 KGlobal::locale()->setDateFormatShort("%d.%b");
461 470 mText +="<font color=\"#F00000\">" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "</font>";
462 } else 471 KGlobal::locale()->setDateFormatShort(dfs);
463 mText +=((Todo*)ev)->dtDueTimeStr(); 472 } else {
464 mTodos.append( ev ); 473 if (!ev->doesFloat() )
474 if( ( (Todo*)ev)->dtDue() < cdt ) {
475 mText +="<font color=\"#F00000\">" + ((Todo*)ev)->dtDueTimeStr() + "</font>";
476
477
478 } else
479 mText +=((Todo*)ev)->dtDueTimeStr();
480 mTodos.append( ev );
481 }
465 } 482 }
466 } 483 }
467 mText += "</b></td><td>"; 484 mText += "</b></td><td>";
468 bool needClose = false; 485 bool needClose = false;
469 if ( ev->cancelled() ) { 486 if ( ev->cancelled() ) {
470 mText += "<font color=\"#F00000\">[c"; 487 mText += "<font color=\"#F00000\">[c";
471 needClose =true; 488 needClose =true;
472 489
473 } 490 }
474 if ( ev->isAlarmEnabled() ) { 491 if ( ev->isAlarmEnabled() ) {
475 if ( !needClose) 492 if ( !needClose)
476 mText +="["; 493 mText +="[";
477 mText += "a"; 494 mText += "a";
478 needClose =true; 495 needClose =true;
479 496
480 } 497 }
481 if ( ev->description().length() > 0 ) { 498 if ( ev->description().length() > 0 ) {
482 if ( !needClose) 499 if ( !needClose)
483 mText +="["; 500 mText +="[";
484 mText += "i"; 501 mText += "i";
485 needClose =true; 502 needClose =true;
486 } 503 }
487 if ( ev->recurrence()->doesRecur() ) { 504 if ( ev->recurrence()->doesRecur() ) {
488 if ( !needClose) 505 if ( !needClose)
489 mText +="["; 506 mText +="[";
490 mText += "r"; 507 mText += "r";
491 needClose =true; 508 needClose =true;
492 } 509 }
493 if ( needClose ) { 510 if ( needClose ) {
494 mText += "] "; 511 mText += "] ";
495 } 512 }
496 if ( ev->cancelled() ) 513 if ( ev->cancelled() )
497 mText += "</font>"; 514 mText += "</font>";
498 mText += "<a "; 515 mText += "<a ";
499 if (ev->type()=="Event") mText += "href=\"event:"; 516 if (ev->type()=="Event") mText += "href=\"event:";
500 if (ev->type()=="Todo") mText += "href=\"todo:"; 517 if (ev->type()=="Todo") mText += "href=\"todo:";
501 mText += ev->uid() + "\">"; 518 mText += ev->uid() + "\">";
502 if ( ev->summary().length() > 0 ) 519 if ( ev->summary().length() > 0 )
503 mText += ev->summary(); 520 mText += ev->summary();
504 else 521 else
505 mText += i18n("-no summary-"); 522 mText += i18n("-no summary-");
506 mText += "</a>"; 523 mText += "</a>";
507 if ( KOPrefs::instance()->mWNViewShowLocation ) 524 if ( KOPrefs::instance()->mWNViewShowLocation )
508 if ( !ev->location().isEmpty() ) 525 if ( !ev->location().isEmpty() )
509 mText += " ("+ev->location() +")"; 526 mText += " ("+ev->location() +")";
510 if ( ev->relatedTo() && KOPrefs::instance()->mWNViewShowsParents) 527 if ( ev->relatedTo() && KOPrefs::instance()->mWNViewShowsParents)
511 mText += " ["+ev->relatedTo()->summary() +"]"; 528 mText += " ["+ev->relatedTo()->summary() +"]";
512 mText += "</td></tr>\n"; 529 mText += "</td></tr>\n";
513} 530}
514 531
515bool KOWhatsNextView::appendTodo(Incidence *ev, QString ind , bool isSub ) 532bool KOWhatsNextView::appendTodo(Incidence *ev, QString ind , bool isSub )
516{ 533{
517 if ( mTodos.find( ev ) != mTodos.end() ) return false; 534 if ( mTodos.find( ev ) != mTodos.end() ) return false;
518 535
519 mTodos.append( ev ); 536 mTodos.append( ev );
520 if ( !isSub ) 537 if ( !isSub )
521 mText += "<p>"; 538 mText += "<p>";
522 else 539 else
523 mText += "<li>"; 540 mText += "<li>";
524 mText += "[" +QString::number(ev->priority()) + "/" + QString::number(((Todo*)ev)->percentComplete())+"%] "; 541 mText += "[" +QString::number(ev->priority()) + "/" + QString::number(((Todo*)ev)->percentComplete())+"%] ";
525 542
526 543
527 mText += ind; 544 mText += ind;
528 bool needClose = false; 545 bool needClose = false;
529 if ( ev->cancelled() ) { 546 if ( ev->cancelled() ) {
530 mText += "<font color=\"#F00000\">[c"; 547 mText += "<font color=\"#F00000\">[c";
531 needClose =true; 548 needClose =true;
532 549
533 } 550 }
534 if ( ev->isAlarmEnabled() ) { 551 if ( ev->isAlarmEnabled() ) {
535 if ( !needClose) 552 if ( !needClose)
536 mText +="["; 553 mText +="[";
537 mText += "a"; 554 mText += "a";
538 needClose =true; 555 needClose =true;
539 556
540 } 557 }
541 558
542 if ( ev->description().length() > 0 ) { 559 if ( ev->description().length() > 0 ) {
543 if ( !needClose) 560 if ( !needClose)
544 mText +="["; 561 mText +="[";
545 mText += "i"; 562 mText += "i";
546 needClose =true; 563 needClose =true;
547 } 564 }
548 // if ( ev->recurrence()->doesRecur() ) { 565 // if ( ev->recurrence()->doesRecur() ) {
549 // if ( !needClose) 566 // if ( !needClose)
550 // mText +="("; 567 // mText +="(";
551 // mText += "r"; 568 // mText += "r";
552 // needClose =true; 569 // needClose =true;
553 // } 570 // }
554 if ( needClose ) 571 if ( needClose )
555 mText += "] "; 572 mText += "] ";
556 if ( ev->cancelled() ) 573 if ( ev->cancelled() )
557 mText += "</font>"; 574 mText += "</font>";
558 mText += "<a href=\"todo:" + ev->uid() + "\">"; 575 mText += "<a href=\"todo:" + ev->uid() + "\">";
559 mText += ev->summary(); 576 mText += ev->summary();
560 mText += "</a>"; 577 mText += "</a>";
561 if ( ((Todo*)ev)->hasDueDate () ) { 578 if ( ((Todo*)ev)->hasDueDate () ) {
562 QString year = ""; 579 QString year = "";
563 int ye = ((Todo*)ev)->dtDue().date().year(); 580 int ye = ((Todo*)ev)->dtDue().date().year();
564 if ( QDateTime::currentDateTime().date().year() != ye ) 581 if ( QDateTime::currentDateTime().date().year() != ye )
565 year = QString::number( ye ); 582 year = QString::number( ye );
566 QString dfs = KGlobal::locale()->dateFormatShort(); 583 QString dfs = KGlobal::locale()->dateFormatShort();
567 KGlobal::locale()->setDateFormatShort("%d.%b"); 584 KGlobal::locale()->setDateFormatShort("%d.%b");
568 mText +="<font color=\"#00A000\"> [" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "."+ year +"]</font>"; 585 mText +="<font color=\"#00A000\"> [" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "."+ year +"]</font>";
569 KGlobal::locale()->setDateFormatShort(dfs); 586 KGlobal::locale()->setDateFormatShort(dfs);
570 } 587 }
571 if ( KOPrefs::instance()->mWNViewShowLocation ) 588 if ( KOPrefs::instance()->mWNViewShowLocation )
572 if ( !ev->location().isEmpty() ) 589 if ( !ev->location().isEmpty() )
573 mText += " ("+ev->location() +")"; 590 mText += " ("+ev->location() +")";
574 if ( !isSub ) { 591 if ( !isSub ) {
575 if ( ((Todo*)ev)->relatedTo()&& KOPrefs::instance()->mWNViewShowsParents) 592 if ( ((Todo*)ev)->relatedTo()&& KOPrefs::instance()->mWNViewShowsParents)
576 mText += " ["+ev->relatedTo()->summary() +"]"; 593 mText += " ["+ev->relatedTo()->summary() +"]";
577 mText += "</p>\n"; 594 mText += "</p>\n";
578 } 595 }
579 else { 596 else {
580 ind += "-"; 597 ind += "-";
581 mText += "</li>\n"; 598 mText += "</li>\n";
582 } 599 }
583 QPtrList<Incidence> Relations = ev->relations(); 600 QPtrList<Incidence> Relations = ev->relations();
584 Incidence *to; 601 Incidence *to;
585 for (to=Relations.first();to;to=Relations.next()) { 602 for (to=Relations.first();to;to=Relations.next()) {
586 if (!((Todo*)to)->isCompleted()) 603 if (!((Todo*)to)->isCompleted())
587 appendTodo( to, ind , true ); 604 appendTodo( to, ind , true );
588 } 605 }
589 606
590 return true; 607 return true;
591} 608}
592 609
593/* 610/*
594 void KOWhatsNextView::createEventViewer() 611 void KOWhatsNextView::createEventViewer()
595 { 612 {
596 if (!mEventViewer) { 613 if (!mEventViewer) {
597 614
598 mEventViewer = new KOEventViewerDialog(this); 615 mEventViewer = new KOEventViewerDialog(this);
599 } 616 }
600 } 617 }
601*/ 618*/
602void KOWhatsNextView::setEventViewer(KOEventViewerDialog* v ) 619void KOWhatsNextView::setEventViewer(KOEventViewerDialog* v )
603{ 620{
604 if ( mEventViewer ) 621 if ( mEventViewer )
605 delete mEventViewer; 622 delete mEventViewer;
606 mEventViewer = v; 623 mEventViewer = v;
607} 624}
608 625
609// TODO: Create this function in CalendarView and remove it from here 626// TODO: Create this function in CalendarView and remove it from here
610void KOWhatsNextView::showIncidence(const QString &uid) 627void KOWhatsNextView::showIncidence(const QString &uid)
611{ 628{
612 if ( !mEventViewer ) { 629 if ( !mEventViewer ) {
613 qDebug("KOWhatsNextView::showIncidence::sorry, no event viewer set "); 630 qDebug("KOWhatsNextView::showIncidence::sorry, no event viewer set ");
614 return; 631 return;
615 } 632 }
616 //kdDebug() << "KOWhatsNextView::showIncidence(): " << uid << endl; 633 //kdDebug() << "KOWhatsNextView::showIncidence(): " << uid << endl;
617 //qDebug("KOWhatsNextView::showIncidence %s ", uid.latin1()); 634 //qDebug("KOWhatsNextView::showIncidence %s ", uid.latin1());
618 if (uid.startsWith("event:")) { 635 if (uid.startsWith("event:")) {
619#ifdef DESKTOP_VERSION 636#ifdef DESKTOP_VERSION
620 Event *event = calendar()->event(uid.mid(8)); 637 Event *event = calendar()->event(uid.mid(8));
621#else 638#else
622 Event *event = calendar()->event(uid.mid(6)); 639 Event *event = calendar()->event(uid.mid(6));
623#endif 640#endif
624 //qDebug("event %d uid %s ", event, uid.mid(6).latin1()); 641 //qDebug("event %d uid %s ", event, uid.mid(6).latin1());
625 if (!event) return; 642 if (!event) return;
626 //createEventViewer(); 643 //createEventViewer();
627 mEventViewer->setEvent(event); 644 mEventViewer->setEvent(event);
628 } else if (uid.startsWith("todo:")) { 645 } else if (uid.startsWith("todo:")) {
629#ifdef DESKTOP_VERSION 646#ifdef DESKTOP_VERSION
630 Todo *todo = calendar()->todo(uid.mid(7)); 647 Todo *todo = calendar()->todo(uid.mid(7));
631#else 648#else
632 Todo *todo = calendar()->todo(uid.mid(5)); 649 Todo *todo = calendar()->todo(uid.mid(5));
633#endif 650#endif
634 if (!todo) return; 651 if (!todo) return;
635 //createEventViewer(); 652 //createEventViewer();
636 mEventViewer->setTodo(todo); 653 mEventViewer->setTodo(todo);
637 } else { 654 } else {
638 return; 655 return;
639 656
640 } 657 }
641 mEventViewer->showMe(); 658 mEventViewer->showMe();
642 mEventViewer->raise(); 659 mEventViewer->raise();
643} 660}
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 56c9801..55ac6d4 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -1,599 +1,603 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24 24
25#include "calformat.h" 25#include "calformat.h"
26 26
27#include "incidence.h" 27#include "incidence.h"
28#include "todo.h" 28#include "todo.h"
29 29
30using namespace KCal; 30using namespace KCal;
31 31
32Incidence::Incidence() : 32Incidence::Incidence() :
33 IncidenceBase(), 33 IncidenceBase(),
34 mRelatedTo(0), mSecrecy(SecrecyPublic), mPriority(3) 34 mRelatedTo(0), mSecrecy(SecrecyPublic), mPriority(3)
35{ 35{
36 mRecurrence = new Recurrence(this); 36 mRecurrence = new Recurrence(this);
37 mCancelled = false; 37 mCancelled = false;
38 recreate(); 38 recreate();
39 mHasStartDate = true; 39 mHasStartDate = true;
40 mAlarms.setAutoDelete(true); 40 mAlarms.setAutoDelete(true);
41 mAttachments.setAutoDelete(true); 41 mAttachments.setAutoDelete(true);
42} 42}
43 43
44Incidence::Incidence( const Incidence &i ) : IncidenceBase( i ) 44Incidence::Incidence( const Incidence &i ) : IncidenceBase( i )
45{ 45{
46// TODO: reenable attributes currently commented out. 46// TODO: reenable attributes currently commented out.
47 mRevision = i.mRevision; 47 mRevision = i.mRevision;
48 mCreated = i.mCreated; 48 mCreated = i.mCreated;
49 mDescription = i.mDescription; 49 mDescription = i.mDescription;
50 mSummary = i.mSummary; 50 mSummary = i.mSummary;
51 mCategories = i.mCategories; 51 mCategories = i.mCategories;
52// Incidence *mRelatedTo; Incidence *mRelatedTo; 52// Incidence *mRelatedTo; Incidence *mRelatedTo;
53 mRelatedTo = 0; 53 mRelatedTo = 0;
54 mRelatedToUid = i.mRelatedToUid; 54 mRelatedToUid = i.mRelatedToUid;
55// QPtrList<Incidence> mRelations; QPtrList<Incidence> mRelations; 55// QPtrList<Incidence> mRelations; QPtrList<Incidence> mRelations;
56 mExDates = i.mExDates; 56 mExDates = i.mExDates;
57 mAttachments = i.mAttachments; 57 mAttachments = i.mAttachments;
58 mResources = i.mResources; 58 mResources = i.mResources;
59 mSecrecy = i.mSecrecy; 59 mSecrecy = i.mSecrecy;
60 mPriority = i.mPriority; 60 mPriority = i.mPriority;
61 mLocation = i.mLocation; 61 mLocation = i.mLocation;
62 mCancelled = i.mCancelled; 62 mCancelled = i.mCancelled;
63 mHasStartDate = i.mHasStartDate; 63 mHasStartDate = i.mHasStartDate;
64 QPtrListIterator<Alarm> it( i.mAlarms ); 64 QPtrListIterator<Alarm> it( i.mAlarms );
65 const Alarm *a; 65 const Alarm *a;
66 while( (a = it.current()) ) { 66 while( (a = it.current()) ) {
67 Alarm *b = new Alarm( *a ); 67 Alarm *b = new Alarm( *a );
68 b->setParent( this ); 68 b->setParent( this );
69 mAlarms.append( b ); 69 mAlarms.append( b );
70 70
71 ++it; 71 ++it;
72 } 72 }
73 mAlarms.setAutoDelete(true); 73 mAlarms.setAutoDelete(true);
74 74
75 mRecurrence = new Recurrence( *(i.mRecurrence), this ); 75 mRecurrence = new Recurrence( *(i.mRecurrence), this );
76} 76}
77 77
78Incidence::~Incidence() 78Incidence::~Incidence()
79{ 79{
80 80
81 Incidence *ev; 81 Incidence *ev;
82 QPtrList<Incidence> Relations = relations(); 82 QPtrList<Incidence> Relations = relations();
83 for (ev=Relations.first();ev;ev=Relations.next()) { 83 for (ev=Relations.first();ev;ev=Relations.next()) {
84 if (ev->relatedTo() == this) ev->setRelatedTo(0); 84 if (ev->relatedTo() == this) ev->setRelatedTo(0);
85 } 85 }
86 if (relatedTo()) relatedTo()->removeRelation(this); 86 if (relatedTo()) relatedTo()->removeRelation(this);
87 delete mRecurrence; 87 delete mRecurrence;
88 88
89} 89}
90 90
91bool Incidence::cancelled() const 91bool Incidence::cancelled() const
92{ 92{
93 return mCancelled; 93 return mCancelled;
94} 94}
95void Incidence::setCancelled( bool b ) 95void Incidence::setCancelled( bool b )
96{ 96{
97 mCancelled = b; 97 mCancelled = b;
98 updated(); 98 updated();
99} 99}
100bool Incidence::hasStartDate() const 100bool Incidence::hasStartDate() const
101{ 101{
102 return mHasStartDate; 102 return mHasStartDate;
103} 103}
104 104
105void Incidence::setHasStartDate(bool f) 105void Incidence::setHasStartDate(bool f)
106{ 106{
107 if (mReadOnly) return; 107 if (mReadOnly) return;
108 mHasStartDate = f; 108 mHasStartDate = f;
109 updated(); 109 updated();
110} 110}
111 111
112// A string comparison that considers that null and empty are the same 112// A string comparison that considers that null and empty are the same
113static bool stringCompare( const QString& s1, const QString& s2 ) 113static bool stringCompare( const QString& s1, const QString& s2 )
114{ 114{
115 if ( s1.isEmpty() && s2.isEmpty() ) 115 if ( s1.isEmpty() && s2.isEmpty() )
116 return true; 116 return true;
117 return s1 == s2; 117 return s1 == s2;
118} 118}
119 119
120bool KCal::operator==( const Incidence& i1, const Incidence& i2 ) 120bool KCal::operator==( const Incidence& i1, const Incidence& i2 )
121{ 121{
122 122
123 if( i1.alarms().count() != i2.alarms().count() ) { 123 if( i1.alarms().count() != i2.alarms().count() ) {
124 return false; // no need to check further 124 return false; // no need to check further
125 } 125 }
126 if ( i1.alarms().count() > 0 ) { 126 if ( i1.alarms().count() > 0 ) {
127 if ( !( *(i1.alarms().first()) == *(i2.alarms().first())) ) 127 if ( !( *(i1.alarms().first()) == *(i2.alarms().first())) )
128 { 128 {
129 qDebug("alarm not equal "); 129 qDebug("alarm not equal ");
130 return false; 130 return false;
131 } 131 }
132 } 132 }
133#if 0 133#if 0
134 QPtrListIterator<Alarm> a1( i1.alarms() ); 134 QPtrListIterator<Alarm> a1( i1.alarms() );
135 QPtrListIterator<Alarm> a2( i2.alarms() ); 135 QPtrListIterator<Alarm> a2( i2.alarms() );
136 for( ; a1.current() && a2.current(); ++a1, ++a2 ) { 136 for( ; a1.current() && a2.current(); ++a1, ++a2 ) {
137 if( *a1.current() == *a2.current() ) { 137 if( *a1.current() == *a2.current() ) {
138 continue; 138 continue;
139 } 139 }
140 else { 140 else {
141 return false; 141 return false;
142 } 142 }
143 } 143 }
144#endif 144#endif
145 145
146 if ( ! operator==( (const IncidenceBase&)i1, (const IncidenceBase&)i2 ) ) 146 if ( ! operator==( (const IncidenceBase&)i1, (const IncidenceBase&)i2 ) )
147 return false; 147 return false;
148 if ( i1.hasStartDate() == i2.hasStartDate() ) { 148 if ( i1.hasStartDate() == i2.hasStartDate() ) {
149 if ( i1.hasStartDate() ) { 149 if ( i1.hasStartDate() ) {
150 if ( i1.dtStart() != i2.dtStart() ) 150 if ( i1.dtStart() != i2.dtStart() )
151 return false; 151 return false;
152 } 152 }
153 } else { 153 } else {
154 return false; 154 return false;
155 } 155 }
156 if (!( *i1.recurrence() == *i2.recurrence()) ) { 156 if (!( *i1.recurrence() == *i2.recurrence()) ) {
157 qDebug("recurrence is NOT equal "); 157 qDebug("recurrence is NOT equal ");
158 return false; 158 return false;
159 } 159 }
160 return 160 return
161 // i1.created() == i2.created() && 161 // i1.created() == i2.created() &&
162 stringCompare( i1.description(), i2.description() ) && 162 stringCompare( i1.description(), i2.description() ) &&
163 stringCompare( i1.summary(), i2.summary() ) && 163 stringCompare( i1.summary(), i2.summary() ) &&
164 i1.categories() == i2.categories() && 164 i1.categories() == i2.categories() &&
165 // no need to compare mRelatedTo 165 // no need to compare mRelatedTo
166 stringCompare( i1.relatedToUid(), i2.relatedToUid() ) && 166 stringCompare( i1.relatedToUid(), i2.relatedToUid() ) &&
167 // i1.relations() == i2.relations() && 167 // i1.relations() == i2.relations() &&
168 i1.exDates() == i2.exDates() && 168 i1.exDates() == i2.exDates() &&
169 i1.attachments() == i2.attachments() && 169 i1.attachments() == i2.attachments() &&
170 i1.resources() == i2.resources() && 170 i1.resources() == i2.resources() &&
171 i1.secrecy() == i2.secrecy() && 171 i1.secrecy() == i2.secrecy() &&
172 i1.priority() == i2.priority() && 172 i1.priority() == i2.priority() &&
173 stringCompare( i1.location(), i2.location() ); 173 stringCompare( i1.location(), i2.location() );
174} 174}
175 175
176 176
177void Incidence::recreate() 177void Incidence::recreate()
178{ 178{
179 setCreated(QDateTime::currentDateTime()); 179 setCreated(QDateTime::currentDateTime());
180 180
181 setUid(CalFormat::createUniqueId()); 181 setUid(CalFormat::createUniqueId());
182 182
183 setRevision(0); 183 setRevision(0);
184 184
185 setLastModified(QDateTime::currentDateTime()); 185 setLastModified(QDateTime::currentDateTime());
186} 186}
187 187
188void Incidence::setReadOnly( bool readOnly ) 188void Incidence::setReadOnly( bool readOnly )
189{ 189{
190 IncidenceBase::setReadOnly( readOnly ); 190 IncidenceBase::setReadOnly( readOnly );
191 recurrence()->setRecurReadOnly( readOnly); 191 recurrence()->setRecurReadOnly( readOnly);
192} 192}
193 193
194void Incidence::setCreated(QDateTime created) 194void Incidence::setCreated(QDateTime created)
195{ 195{
196 if (mReadOnly) return; 196 if (mReadOnly) return;
197 mCreated = getEvenTime(created); 197 mCreated = getEvenTime(created);
198} 198}
199 199
200QDateTime Incidence::created() const 200QDateTime Incidence::created() const
201{ 201{
202 return mCreated; 202 return mCreated;
203} 203}
204 204
205void Incidence::setRevision(int rev) 205void Incidence::setRevision(int rev)
206{ 206{
207 if (mReadOnly) return; 207 if (mReadOnly) return;
208 mRevision = rev; 208 mRevision = rev;
209 209
210 updated(); 210 updated();
211} 211}
212 212
213int Incidence::revision() const 213int Incidence::revision() const
214{ 214{
215 return mRevision; 215 return mRevision;
216} 216}
217 217
218void Incidence::setDtStart(const QDateTime &dtStart) 218void Incidence::setDtStart(const QDateTime &dtStart)
219{ 219{
220 220
221 QDateTime dt = getEvenTime(dtStart); 221 QDateTime dt = getEvenTime(dtStart);
222 recurrence()->setRecurStart( dt); 222 recurrence()->setRecurStart( dt);
223 IncidenceBase::setDtStart( dt ); 223 IncidenceBase::setDtStart( dt );
224} 224}
225 225
226void Incidence::setDescription(const QString &description) 226void Incidence::setDescription(const QString &description)
227{ 227{
228 if (mReadOnly) return; 228 if (mReadOnly) return;
229 mDescription = description; 229 mDescription = description;
230 updated(); 230 updated();
231} 231}
232 232
233QString Incidence::description() const 233QString Incidence::description() const
234{ 234{
235 return mDescription; 235 return mDescription;
236} 236}
237 237
238 238
239void Incidence::setSummary(const QString &summary) 239void Incidence::setSummary(const QString &summary)
240{ 240{
241 if (mReadOnly) return; 241 if (mReadOnly) return;
242 mSummary = summary; 242 mSummary = summary;
243 updated(); 243 updated();
244} 244}
245 245
246QString Incidence::summary() const 246QString Incidence::summary() const
247{ 247{
248 return mSummary; 248 return mSummary;
249} 249}
250 250
251void Incidence::setCategories(const QStringList &categories) 251void Incidence::setCategories(const QStringList &categories)
252{ 252{
253 if (mReadOnly) return; 253 if (mReadOnly) return;
254 mCategories = categories; 254 mCategories = categories;
255 updated(); 255 updated();
256} 256}
257 257
258// TODO: remove setCategories(QString) function 258// TODO: remove setCategories(QString) function
259void Incidence::setCategories(const QString &catStr) 259void Incidence::setCategories(const QString &catStr)
260{ 260{
261 if (mReadOnly) return; 261 if (mReadOnly) return;
262 mCategories.clear(); 262 mCategories.clear();
263 263
264 if (catStr.isEmpty()) return; 264 if (catStr.isEmpty()) return;
265 265
266 mCategories = QStringList::split(",",catStr); 266 mCategories = QStringList::split(",",catStr);
267 267
268 QStringList::Iterator it; 268 QStringList::Iterator it;
269 for(it = mCategories.begin();it != mCategories.end(); ++it) { 269 for(it = mCategories.begin();it != mCategories.end(); ++it) {
270 *it = (*it).stripWhiteSpace(); 270 *it = (*it).stripWhiteSpace();
271 } 271 }
272 272
273 updated(); 273 updated();
274} 274}
275 275
276QStringList Incidence::categories() const 276QStringList Incidence::categories() const
277{ 277{
278 return mCategories; 278 return mCategories;
279} 279}
280 280
281QString Incidence::categoriesStr() 281QString Incidence::categoriesStr()
282{ 282{
283 return mCategories.join(","); 283 return mCategories.join(",");
284} 284}
285 285
286void Incidence::setRelatedToUid(const QString &relatedToUid) 286void Incidence::setRelatedToUid(const QString &relatedToUid)
287{ 287{
288 if (mReadOnly) return; 288 if (mReadOnly) return;
289 mRelatedToUid = relatedToUid; 289 mRelatedToUid = relatedToUid;
290} 290}
291 291
292QString Incidence::relatedToUid() const 292QString Incidence::relatedToUid() const
293{ 293{
294 return mRelatedToUid; 294 return mRelatedToUid;
295} 295}
296 296
297void Incidence::setRelatedTo(Incidence *relatedTo) 297void Incidence::setRelatedTo(Incidence *relatedTo)
298{ 298{
299 //qDebug("Incidence::setRelatedTo %d ", relatedTo); 299 //qDebug("Incidence::setRelatedTo %d ", relatedTo);
300 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() ); 300 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() );
301 if (mReadOnly || mRelatedTo == relatedTo) return; 301 if (mReadOnly || mRelatedTo == relatedTo) return;
302 if(mRelatedTo) { 302 if(mRelatedTo) {
303 // updated(); 303 // updated();
304 mRelatedTo->removeRelation(this); 304 mRelatedTo->removeRelation(this);
305 } 305 }
306 mRelatedTo = relatedTo; 306 mRelatedTo = relatedTo;
307 if (mRelatedTo) mRelatedTo->addRelation(this); 307 if (mRelatedTo) mRelatedTo->addRelation(this);
308} 308}
309 309
310Incidence *Incidence::relatedTo() const 310Incidence *Incidence::relatedTo() const
311{ 311{
312 return mRelatedTo; 312 return mRelatedTo;
313} 313}
314 314
315QPtrList<Incidence> Incidence::relations() const 315QPtrList<Incidence> Incidence::relations() const
316{ 316{
317 return mRelations; 317 return mRelations;
318} 318}
319 319
320void Incidence::addRelation(Incidence *event) 320void Incidence::addRelation(Incidence *event)
321{ 321{
322 if( mRelations.findRef( event ) == -1 ) { 322 if( mRelations.findRef( event ) == -1 ) {
323 mRelations.append(event); 323 mRelations.append(event);
324 //updated(); 324 //updated();
325 } 325 }
326} 326}
327 327
328void Incidence::removeRelation(Incidence *event) 328void Incidence::removeRelation(Incidence *event)
329{ 329{
330 330
331 mRelations.removeRef(event); 331 mRelations.removeRef(event);
332 332
333// if (event->getRelatedTo() == this) event->setRelatedTo(0); 333// if (event->getRelatedTo() == this) event->setRelatedTo(0);
334} 334}
335 335
336bool Incidence::recursOn(const QDate &qd) const 336bool Incidence::recursOn(const QDate &qd) const
337{ 337{
338 if (recurrence()->recursOnPure(qd) && !isException(qd)) return true; 338 if (recurrence()->recursOnPure(qd) && !isException(qd)) return true;
339 else return false; 339 else return false;
340} 340}
341 341
342void Incidence::setExDates(const DateList &exDates) 342void Incidence::setExDates(const DateList &exDates)
343{ 343{
344 if (mReadOnly) return; 344 if (mReadOnly) return;
345 mExDates = exDates; 345 mExDates = exDates;
346 346
347 recurrence()->setRecurExDatesCount(mExDates.count()); 347 recurrence()->setRecurExDatesCount(mExDates.count());
348 348
349 updated(); 349 updated();
350} 350}
351 351
352void Incidence::addExDate(const QDate &date) 352void Incidence::addExDate(const QDate &date)
353{ 353{
354 if (mReadOnly) return; 354 if (mReadOnly) return;
355 mExDates.append(date); 355 mExDates.append(date);
356 356
357 recurrence()->setRecurExDatesCount(mExDates.count()); 357 recurrence()->setRecurExDatesCount(mExDates.count());
358 358
359 updated(); 359 updated();
360} 360}
361 361
362DateList Incidence::exDates() const 362DateList Incidence::exDates() const
363{ 363{
364 return mExDates; 364 return mExDates;
365} 365}
366 366
367bool Incidence::isException(const QDate &date) const 367bool Incidence::isException(const QDate &date) const
368{ 368{
369 DateList::ConstIterator it; 369 DateList::ConstIterator it;
370 for( it = mExDates.begin(); it != mExDates.end(); ++it ) { 370 for( it = mExDates.begin(); it != mExDates.end(); ++it ) {
371 if ( (*it) == date ) { 371 if ( (*it) == date ) {
372 return true; 372 return true;
373 } 373 }
374 } 374 }
375 375
376 return false; 376 return false;
377} 377}
378 378
379void Incidence::addAttachment(Attachment *attachment) 379void Incidence::addAttachment(Attachment *attachment)
380{ 380{
381 if (mReadOnly || !attachment) return; 381 if (mReadOnly || !attachment) return;
382 mAttachments.append(attachment); 382 mAttachments.append(attachment);
383 updated(); 383 updated();
384} 384}
385 385
386void Incidence::deleteAttachment(Attachment *attachment) 386void Incidence::deleteAttachment(Attachment *attachment)
387{ 387{
388 mAttachments.removeRef(attachment); 388 mAttachments.removeRef(attachment);
389} 389}
390 390
391void Incidence::deleteAttachments(const QString& mime) 391void Incidence::deleteAttachments(const QString& mime)
392{ 392{
393 Attachment *at = mAttachments.first(); 393 Attachment *at = mAttachments.first();
394 while (at) { 394 while (at) {
395 if (at->mimeType() == mime) 395 if (at->mimeType() == mime)
396 mAttachments.remove(); 396 mAttachments.remove();
397 else 397 else
398 at = mAttachments.next(); 398 at = mAttachments.next();
399 } 399 }
400} 400}
401 401
402QPtrList<Attachment> Incidence::attachments() const 402QPtrList<Attachment> Incidence::attachments() const
403{ 403{
404 return mAttachments; 404 return mAttachments;
405} 405}
406 406
407QPtrList<Attachment> Incidence::attachments(const QString& mime) const 407QPtrList<Attachment> Incidence::attachments(const QString& mime) const
408{ 408{
409 QPtrList<Attachment> attachments; 409 QPtrList<Attachment> attachments;
410 QPtrListIterator<Attachment> it( mAttachments ); 410 QPtrListIterator<Attachment> it( mAttachments );
411 Attachment *at; 411 Attachment *at;
412 while ( (at = it.current()) ) { 412 while ( (at = it.current()) ) {
413 if (at->mimeType() == mime) 413 if (at->mimeType() == mime)
414 attachments.append(at); 414 attachments.append(at);
415 ++it; 415 ++it;
416 } 416 }
417 417
418 return attachments; 418 return attachments;
419} 419}
420 420
421void Incidence::setResources(const QStringList &resources) 421void Incidence::setResources(const QStringList &resources)
422{ 422{
423 if (mReadOnly) return; 423 if (mReadOnly) return;
424 mResources = resources; 424 mResources = resources;
425 updated(); 425 updated();
426} 426}
427 427
428QStringList Incidence::resources() const 428QStringList Incidence::resources() const
429{ 429{
430 return mResources; 430 return mResources;
431} 431}
432 432
433 433
434void Incidence::setPriority(int priority) 434void Incidence::setPriority(int priority)
435{ 435{
436 if (mReadOnly) return; 436 if (mReadOnly) return;
437 mPriority = priority; 437 mPriority = priority;
438 updated(); 438 updated();
439} 439}
440 440
441int Incidence::priority() const 441int Incidence::priority() const
442{ 442{
443 return mPriority; 443 return mPriority;
444} 444}
445 445
446void Incidence::setSecrecy(int sec) 446void Incidence::setSecrecy(int sec)
447{ 447{
448 if (mReadOnly) return; 448 if (mReadOnly) return;
449 mSecrecy = sec; 449 mSecrecy = sec;
450 updated(); 450 updated();
451} 451}
452 452
453int Incidence::secrecy() const 453int Incidence::secrecy() const
454{ 454{
455 return mSecrecy; 455 return mSecrecy;
456} 456}
457 457
458QString Incidence::secrecyStr() const 458QString Incidence::secrecyStr() const
459{ 459{
460 return secrecyName(mSecrecy); 460 return secrecyName(mSecrecy);
461} 461}
462 462
463QString Incidence::secrecyName(int secrecy) 463QString Incidence::secrecyName(int secrecy)
464{ 464{
465 switch (secrecy) { 465 switch (secrecy) {
466 case SecrecyPublic: 466 case SecrecyPublic:
467 return i18n("Public"); 467 return i18n("Public");
468 break; 468 break;
469 case SecrecyPrivate: 469 case SecrecyPrivate:
470 return i18n("Private"); 470 return i18n("Private");
471 break; 471 break;
472 case SecrecyConfidential: 472 case SecrecyConfidential:
473 return i18n("Confidential"); 473 return i18n("Confidential");
474 break; 474 break;
475 default: 475 default:
476 return i18n("Undefined"); 476 return i18n("Undefined");
477 break; 477 break;
478 } 478 }
479} 479}
480 480
481QStringList Incidence::secrecyList() 481QStringList Incidence::secrecyList()
482{ 482{
483 QStringList list; 483 QStringList list;
484 list << secrecyName(SecrecyPublic); 484 list << secrecyName(SecrecyPublic);
485 list << secrecyName(SecrecyPrivate); 485 list << secrecyName(SecrecyPrivate);
486 list << secrecyName(SecrecyConfidential); 486 list << secrecyName(SecrecyConfidential);
487 487
488 return list; 488 return list;
489} 489}
490 490
491 491
492QPtrList<Alarm> Incidence::alarms() const 492QPtrList<Alarm> Incidence::alarms() const
493{ 493{
494 return mAlarms; 494 return mAlarms;
495} 495}
496 496
497Alarm* Incidence::newAlarm() 497Alarm* Incidence::newAlarm()
498{ 498{
499 Alarm* alarm = new Alarm(this); 499 Alarm* alarm = new Alarm(this);
500 mAlarms.append(alarm); 500 mAlarms.append(alarm);
501// updated(); 501// updated();
502 return alarm; 502 return alarm;
503} 503}
504 504
505void Incidence::addAlarm(Alarm *alarm) 505void Incidence::addAlarm(Alarm *alarm)
506{ 506{
507 mAlarms.append(alarm); 507 mAlarms.append(alarm);
508 updated(); 508 updated();
509} 509}
510 510
511void Incidence::removeAlarm(Alarm *alarm) 511void Incidence::removeAlarm(Alarm *alarm)
512{ 512{
513 mAlarms.removeRef(alarm); 513 mAlarms.removeRef(alarm);
514 updated(); 514 updated();
515} 515}
516 516
517void Incidence::clearAlarms() 517void Incidence::clearAlarms()
518{ 518{
519 mAlarms.clear(); 519 mAlarms.clear();
520 updated(); 520 updated();
521} 521}
522 522
523bool Incidence::isAlarmEnabled() const 523bool Incidence::isAlarmEnabled() const
524{ 524{
525 Alarm* alarm; 525 Alarm* alarm;
526 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { 526 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) {
527 if (alarm->enabled()) 527 if (alarm->enabled())
528 return true; 528 return true;
529 } 529 }
530 return false; 530 return false;
531} 531}
532 532
533Recurrence *Incidence::recurrence() const 533Recurrence *Incidence::recurrence() const
534{ 534{
535 return mRecurrence; 535 return mRecurrence;
536} 536}
537void Incidence::setRecurrence( Recurrence * r) 537void Incidence::setRecurrence( Recurrence * r)
538{ 538{
539 delete mRecurrence; 539 delete mRecurrence;
540 mRecurrence = r; 540 mRecurrence = r;
541} 541}
542 542
543void Incidence::setLocation(const QString &location) 543void Incidence::setLocation(const QString &location)
544{ 544{
545 if (mReadOnly) return; 545 if (mReadOnly) return;
546 mLocation = location; 546 mLocation = location;
547 updated(); 547 updated();
548} 548}
549 549
550QString Incidence::location() const 550QString Incidence::location() const
551{ 551{
552 return mLocation; 552 return mLocation;
553} 553}
554 554
555ushort Incidence::doesRecur() const 555ushort Incidence::doesRecur() const
556{ 556{
557 if ( mRecurrence ) return mRecurrence->doesRecur(); 557 if ( mRecurrence ) return mRecurrence->doesRecur();
558 else return Recurrence::rNone; 558 else return Recurrence::rNone;
559} 559}
560 560
561QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const 561QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const
562{ 562{
563 QDateTime incidenceStart = dt; 563 QDateTime incidenceStart = dt;
564 *ok = false; 564 *ok = false;
565 if ( doesRecur() ) { 565 if ( doesRecur() ) {
566 bool last; 566 bool last;
567 recurrence()->getPreviousDateTime( incidenceStart , &last ); 567 recurrence()->getPreviousDateTime( incidenceStart , &last );
568 int count = 0; 568 int count = 0;
569 if ( !last ) { 569 if ( !last ) {
570 while ( !last ) { 570 while ( !last ) {
571 ++count; 571 ++count;
572 incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last ); 572 incidenceStart = recurrence()->getNextDateTime( incidenceStart, &last );
573 if ( recursOn( incidenceStart.date() ) ) { 573 if ( recursOn( incidenceStart.date() ) ) {
574 last = true; // exit while llop 574 last = true; // exit while llop
575 } else { 575 } else {
576 if ( last ) { // no alarm on last recurrence 576 if ( last ) { // no alarm on last recurrence
577 return QDateTime (); 577 return QDateTime ();
578 } 578 }
579 int year = incidenceStart.date().year(); 579 int year = incidenceStart.date().year();
580 // workaround for bug in recurrence 580 // workaround for bug in recurrence
581 if ( count == 100 || year < 1980 || year > 5000 ) { 581 if ( count == 100 || year < 1980 || year > 5000 ) {
582 return QDateTime (); 582 return QDateTime ();
583 } 583 }
584 incidenceStart = incidenceStart.addSecs( 1 ); 584 incidenceStart = incidenceStart.addSecs( 1 );
585 } 585 }
586 } 586 }
587 } else { 587 } else {
588 return QDateTime (); 588 return QDateTime ();
589 } 589 }
590 } else { 590 } else {
591 if ( hasStartDate () ) { 591 if ( hasStartDate () ) {
592 incidenceStart = dtStart(); 592 incidenceStart = dtStart();
593 593 }
594 } 594 if ( type() =="Todo" ) {
595 if ( ((Todo*)this)->hasDueDate() )
596 incidenceStart = ((Todo*)this)->dtDue();
597
598 }
595 } 599 }
596 if ( incidenceStart > dt ) 600 if ( incidenceStart > dt )
597 *ok = true; 601 *ok = true;
598 return incidenceStart; 602 return incidenceStart;
599} 603}
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index 64a343c..b36dc1a 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,407 +1,407 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24#include <kidmanager.h> 24#include <kidmanager.h>
25 25
26#include "calformat.h" 26#include "calformat.h"
27#include "syncdefines.h" 27#include "syncdefines.h"
28 28
29#include "incidencebase.h" 29#include "incidencebase.h"
30 30
31using namespace KCal; 31using namespace KCal;
32 32
33IncidenceBase::IncidenceBase() : 33IncidenceBase::IncidenceBase() :
34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
35 mPilotId(0), mSyncStatus(SYNCMOD) 35 mPilotId(0), mSyncStatus(SYNCMOD)
36{ 36{
37 setUid(CalFormat::createUniqueId()); 37 setUid(CalFormat::createUniqueId());
38 mOrganizer = ""; 38 mOrganizer = "";
39 mFloats = false; 39 mFloats = false;
40 mDuration = 0; 40 mDuration = 0;
41 mHasDuration = false; 41 mHasDuration = false;
42 mPilotId = 0; 42 mPilotId = 0;
43 mExternalId = ":"; 43 mExternalId = ":";
44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
45 mSyncStatus = 0; 45 mSyncStatus = 0;
46 mAttendees.setAutoDelete( true ); 46 mAttendees.setAutoDelete( true );
47} 47}
48 48
49IncidenceBase::IncidenceBase(const IncidenceBase &i) : 49IncidenceBase::IncidenceBase(const IncidenceBase &i) :
50 CustomProperties( i ) 50 CustomProperties( i )
51{ 51{
52 mReadOnly = i.mReadOnly; 52 mReadOnly = i.mReadOnly;
53 mDtStart = i.mDtStart; 53 mDtStart = i.mDtStart;
54 mDuration = i.mDuration; 54 mDuration = i.mDuration;
55 mHasDuration = i.mHasDuration; 55 mHasDuration = i.mHasDuration;
56 mOrganizer = i.mOrganizer; 56 mOrganizer = i.mOrganizer;
57 mUid = i.mUid; 57 mUid = i.mUid;
58 QPtrList<Attendee> attendees = i.attendees(); 58 QPtrList<Attendee> attendees = i.attendees();
59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
60 mAttendees.append( new Attendee( *a ) ); 60 mAttendees.append( new Attendee( *a ) );
61 } 61 }
62 mFloats = i.mFloats; 62 mFloats = i.mFloats;
63 mLastModified = i.mLastModified; 63 mLastModified = i.mLastModified;
64 mPilotId = i.mPilotId; 64 mPilotId = i.mPilotId;
65 mTempSyncStat = i.mTempSyncStat; 65 mTempSyncStat = i.mTempSyncStat;
66 mSyncStatus = i.mSyncStatus; 66 mSyncStatus = i.mSyncStatus;
67 mExternalId = i.mExternalId; 67 mExternalId = i.mExternalId;
68 // The copied object is a new one, so it isn't observed by the observer 68 // The copied object is a new one, so it isn't observed by the observer
69 // of the original object. 69 // of the original object.
70 mObservers.clear(); 70 mObservers.clear();
71 71
72 mAttendees.setAutoDelete( true ); 72 mAttendees.setAutoDelete( true );
73} 73}
74 74
75IncidenceBase::~IncidenceBase() 75IncidenceBase::~IncidenceBase()
76{ 76{
77} 77}
78 78
79 79
80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) 80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 )
81{ 81{
82 // do not compare mSyncStatus and mExternalId 82 // do not compare mSyncStatus and mExternalId
83 if( i1.attendees().count() != i2.attendees().count() ) { 83 if( i1.attendees().count() != i2.attendees().count() ) {
84 return false; // no need to check further 84 return false; // no need to check further
85 } 85 }
86 if ( i1.attendees().count() > 0 ) { 86 if ( i1.attendees().count() > 0 ) {
87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; 87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ;
88 while ( a1 ) { 88 while ( a1 ) {
89 if ( !( (*a1) == (*a2)) ) 89 if ( !( (*a1) == (*a2)) )
90 { 90 {
91 //qDebug("Attendee not equal "); 91 //qDebug("Attendee not equal ");
92 return false; 92 return false;
93 } 93 }
94 a1 = i1.attendees().next(); 94 a1 = i1.attendees().next();
95 a2 = i2.attendees().next(); 95 a2 = i2.attendees().next();
96 } 96 }
97 } 97 }
98 //if ( i1.dtStart() != i2.dtStart() ) 98 //if ( i1.dtStart() != i2.dtStart() )
99 // return false; 99 // return false;
100#if 0 100#if 0
101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); 101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() );
102 qDebug("1 %d ",i1.duration() == i2.duration() ); 102 qDebug("1 %d ",i1.duration() == i2.duration() );
103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); 103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() );
104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); 104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() );
105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); 105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() );
106 qDebug("6 %d ",i1.organizer() == i2.organizer() ); 106 qDebug("6 %d ",i1.organizer() == i2.organizer() );
107 107
108#endif 108#endif
109 return ( i1.organizer() == i2.organizer() && 109 return ( i1.organizer() == i2.organizer() &&
110 // i1.uid() == i2.uid() && 110 // i1.uid() == i2.uid() &&
111 // Don't compare lastModified, otherwise the operator is not 111 // Don't compare lastModified, otherwise the operator is not
112 // of much use. We are not comparing for identity, after all. 112 // of much use. We are not comparing for identity, after all.
113 i1.doesFloat() == i2.doesFloat() && 113 i1.doesFloat() == i2.doesFloat() &&
114 i1.duration() == i2.duration() && 114 i1.duration() == i2.duration() &&
115 i1.hasDuration() == i2.hasDuration() && 115 i1.hasDuration() == i2.hasDuration() &&
116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); 116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() );
117 // no need to compare mObserver 117 // no need to compare mObserver
118} 118}
119 119
120 120
121QDateTime IncidenceBase::getEvenTime( QDateTime dt ) 121QDateTime IncidenceBase::getEvenTime( QDateTime dt )
122{ 122{
123 QTime t = dt.time(); 123 QTime t = dt.time();
124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
125 return dt; 125 return dt;
126} 126}
127 127
128 128
129void IncidenceBase::setUid(const QString &uid) 129void IncidenceBase::setUid(const QString &uid)
130{ 130{
131 mUid = uid; 131 mUid = uid;
132 updated(); 132 updated();
133} 133}
134 134
135QString IncidenceBase::uid() const 135QString IncidenceBase::uid() const
136{ 136{
137 return mUid; 137 return mUid;
138} 138}
139 139
140void IncidenceBase::setLastModified(const QDateTime &lm) 140void IncidenceBase::setLastModified(const QDateTime &lm)
141{ 141{
142 // DON'T! updated() because we call this from 142 // DON'T! updated() because we call this from
143 // Calendar::updateEvent(). 143 // Calendar::updateEvent().
144 mLastModified = getEvenTime(lm); 144 mLastModified = getEvenTime(lm);
145 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); 145 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1());
146} 146}
147 147
148QDateTime IncidenceBase::lastModified() const 148QDateTime IncidenceBase::lastModified() const
149{ 149{
150 return mLastModified; 150 return mLastModified;
151} 151}
152 152
153void IncidenceBase::setOrganizer(const QString &o) 153void IncidenceBase::setOrganizer(const QString &o)
154{ 154{
155 // we don't check for readonly here, because it is 155 // we don't check for readonly here, because it is
156 // possible that by setting the organizer we are changing 156 // possible that by setting the organizer we are changing
157 // the event's readonly status... 157 // the event's readonly status...
158 mOrganizer = o; 158 mOrganizer = o;
159 if (mOrganizer.left(7).upper() == "MAILTO:") 159 if (mOrganizer.left(7).upper() == "MAILTO:")
160 mOrganizer = mOrganizer.remove(0,7); 160 mOrganizer = mOrganizer.remove(0,7);
161 161
162 updated(); 162 updated();
163} 163}
164 164
165QString IncidenceBase::organizer() const 165QString IncidenceBase::organizer() const
166{ 166{
167 return mOrganizer; 167 return mOrganizer;
168} 168}
169 169
170void IncidenceBase::setReadOnly( bool readOnly ) 170void IncidenceBase::setReadOnly( bool readOnly )
171{ 171{
172 mReadOnly = readOnly; 172 mReadOnly = readOnly;
173} 173}
174 174
175void IncidenceBase::setDtStart(const QDateTime &dtStart) 175void IncidenceBase::setDtStart(const QDateTime &dtStart)
176{ 176{
177// if (mReadOnly) return; 177// if (mReadOnly) return;
178 mDtStart = getEvenTime(dtStart); 178 mDtStart = getEvenTime(dtStart);
179 updated(); 179 updated();
180} 180}
181 181
182QDateTime IncidenceBase::dtStart() const 182QDateTime IncidenceBase::dtStart() const
183{ 183{
184 return mDtStart; 184 return mDtStart;
185} 185}
186 186
187QString IncidenceBase::dtStartTimeStr() const 187QString IncidenceBase::dtStartTimeStr() const
188{ 188{
189 return KGlobal::locale()->formatTime(dtStart().time()); 189 return KGlobal::locale()->formatTime(dtStart().time());
190} 190}
191 191
192QString IncidenceBase::dtStartDateStr(bool shortfmt) const 192QString IncidenceBase::dtStartDateStr(bool shortfmt) const
193{ 193{
194 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); 194 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt);
195} 195}
196 196
197QString IncidenceBase::dtStartStr(bool shortfmt) const 197QString IncidenceBase::dtStartStr(bool shortfmt) const
198{ 198{
199 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); 199 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt);
200} 200}
201 201
202 202
203bool IncidenceBase::doesFloat() const 203bool IncidenceBase::doesFloat() const
204{ 204{
205 return mFloats; 205 return mFloats;
206} 206}
207 207
208void IncidenceBase::setFloats(bool f) 208void IncidenceBase::setFloats(bool f)
209{ 209{
210 if (mReadOnly) return; 210 if (mReadOnly) return;
211 mFloats = f; 211 mFloats = f;
212 updated(); 212 updated();
213} 213}
214 214
215 215
216void IncidenceBase::addAttendee(Attendee *a, bool doupdate) 216void IncidenceBase::addAttendee(Attendee *a, bool doupdate)
217{ 217{
218 if (mReadOnly) return; 218 if (mReadOnly) return;
219 if (a->name().left(7).upper() == "MAILTO:") 219 if (a->name().left(7).upper() == "MAILTO:")
220 a->setName(a->name().remove(0,7)); 220 a->setName(a->name().remove(0,7));
221 221
222 mAttendees.append(a); 222 mAttendees.append(a);
223 if (doupdate) updated(); 223 if (doupdate) updated();
224} 224}
225 225
226#if 0 226#if 0
227void IncidenceBase::removeAttendee(Attendee *a) 227void IncidenceBase::removeAttendee(Attendee *a)
228{ 228{
229 if (mReadOnly) return; 229 if (mReadOnly) return;
230 mAttendees.removeRef(a); 230 mAttendees.removeRef(a);
231 updated(); 231 updated();
232} 232}
233 233
234void IncidenceBase::removeAttendee(const char *n) 234void IncidenceBase::removeAttendee(const char *n)
235{ 235{
236 Attendee *a; 236 Attendee *a;
237 237
238 if (mReadOnly) return; 238 if (mReadOnly) return;
239 for (a = mAttendees.first(); a; a = mAttendees.next()) 239 for (a = mAttendees.first(); a; a = mAttendees.next())
240 if (a->getName() == n) { 240 if (a->getName() == n) {
241 mAttendees.remove(); 241 mAttendees.remove();
242 break; 242 break;
243 } 243 }
244} 244}
245#endif 245#endif
246 246
247void IncidenceBase::clearAttendees() 247void IncidenceBase::clearAttendees()
248{ 248{
249 if (mReadOnly) return; 249 if (mReadOnly) return;
250 mAttendees.clear(); 250 mAttendees.clear();
251} 251}
252 252
253#if 0 253#if 0
254Attendee *IncidenceBase::getAttendee(const char *n) const 254Attendee *IncidenceBase::getAttendee(const char *n) const
255{ 255{
256 QPtrListIterator<Attendee> qli(mAttendees); 256 QPtrListIterator<Attendee> qli(mAttendees);
257 257
258 qli.toFirst(); 258 qli.toFirst();
259 while (qli) { 259 while (qli) {
260 if (qli.current()->getName() == n) 260 if (qli.current()->getName() == n)
261 return qli.current(); 261 return qli.current();
262 ++qli; 262 ++qli;
263 } 263 }
264 return 0L; 264 return 0L;
265} 265}
266#endif 266#endif
267 267
268Attendee *IncidenceBase::attendeeByMail(const QString &email) 268Attendee *IncidenceBase::attendeeByMail(const QString &email)
269{ 269{
270 QPtrListIterator<Attendee> qli(mAttendees); 270 QPtrListIterator<Attendee> qli(mAttendees);
271 271
272 qli.toFirst(); 272 qli.toFirst();
273 while (qli) { 273 while (qli) {
274 if (qli.current()->email() == email) 274 if (qli.current()->email().lower() == email.lower())
275 return qli.current(); 275 return qli.current();
276 ++qli; 276 ++qli;
277 } 277 }
278 return 0L; 278 return 0L;
279} 279}
280 280
281Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) 281Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email)
282{ 282{
283 QPtrListIterator<Attendee> qli(mAttendees); 283 QPtrListIterator<Attendee> qli(mAttendees);
284 284
285 QStringList mails = emails; 285 QStringList mails = emails;
286 if (!email.isEmpty()) { 286 if (!email.isEmpty()) {
287 mails.append(email); 287 mails.append(email);
288 } 288 }
289 qli.toFirst(); 289 qli.toFirst();
290 while (qli) { 290 while (qli) {
291 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { 291 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
292 if (qli.current()->email() == *it) 292 if (qli.current()->email().lower() == (*it).lower())
293 return qli.current(); 293 return qli.current();
294 } 294 }
295 295
296 ++qli; 296 ++qli;
297 } 297 }
298 return 0L; 298 return 0L;
299} 299}
300 300
301void IncidenceBase::setDuration(int seconds) 301void IncidenceBase::setDuration(int seconds)
302{ 302{
303 mDuration = seconds; 303 mDuration = seconds;
304 setHasDuration(true); 304 setHasDuration(true);
305} 305}
306 306
307int IncidenceBase::duration() const 307int IncidenceBase::duration() const
308{ 308{
309 return mDuration; 309 return mDuration;
310} 310}
311 311
312void IncidenceBase::setHasDuration(bool b) 312void IncidenceBase::setHasDuration(bool b)
313{ 313{
314 mHasDuration = b; 314 mHasDuration = b;
315} 315}
316 316
317bool IncidenceBase::hasDuration() const 317bool IncidenceBase::hasDuration() const
318{ 318{
319 return mHasDuration; 319 return mHasDuration;
320} 320}
321 321
322void IncidenceBase::setSyncStatus(int stat) 322void IncidenceBase::setSyncStatus(int stat)
323{ 323{
324 if (mReadOnly) return; 324 if (mReadOnly) return;
325 mSyncStatus = stat; 325 mSyncStatus = stat;
326} 326}
327 327
328int IncidenceBase::syncStatus() const 328int IncidenceBase::syncStatus() const
329{ 329{
330 return mSyncStatus; 330 return mSyncStatus;
331} 331}
332 332
333void IncidenceBase::setPilotId( int id ) 333void IncidenceBase::setPilotId( int id )
334{ 334{
335 if (mReadOnly) return; 335 if (mReadOnly) return;
336 mPilotId = id; 336 mPilotId = id;
337} 337}
338 338
339int IncidenceBase::pilotId() const 339int IncidenceBase::pilotId() const
340{ 340{
341 return mPilotId; 341 return mPilotId;
342} 342}
343 343
344int IncidenceBase::tempSyncStat() const 344int IncidenceBase::tempSyncStat() const
345{ 345{
346 return mTempSyncStat; 346 return mTempSyncStat;
347} 347}
348void IncidenceBase::setTempSyncStat( int id ) 348void IncidenceBase::setTempSyncStat( int id )
349{ 349{
350 if (mReadOnly) return; 350 if (mReadOnly) return;
351 mTempSyncStat = id; 351 mTempSyncStat = id;
352} 352}
353 353
354void IncidenceBase::removeID(const QString &prof) 354void IncidenceBase::removeID(const QString &prof)
355{ 355{
356 mExternalId = KIdManager::removeId ( mExternalId, prof); 356 mExternalId = KIdManager::removeId ( mExternalId, prof);
357 357
358} 358}
359void IncidenceBase::setID( const QString & prof , const QString & id ) 359void IncidenceBase::setID( const QString & prof , const QString & id )
360{ 360{
361 mExternalId = KIdManager::setId ( mExternalId, prof, id ); 361 mExternalId = KIdManager::setId ( mExternalId, prof, id );
362} 362}
363QString IncidenceBase::getID( const QString & prof) 363QString IncidenceBase::getID( const QString & prof)
364{ 364{
365 return KIdManager::getId ( mExternalId, prof ); 365 return KIdManager::getId ( mExternalId, prof );
366} 366}
367 367
368// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: 368// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0:
369// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 369// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0
370void IncidenceBase::setCsum( const QString & prof , const QString & id ) 370void IncidenceBase::setCsum( const QString & prof , const QString & id )
371{ 371{
372 mExternalId = KIdManager::setCsum ( mExternalId, prof, id ); 372 mExternalId = KIdManager::setCsum ( mExternalId, prof, id );
373} 373}
374QString IncidenceBase::getCsum( const QString & prof) 374QString IncidenceBase::getCsum( const QString & prof)
375{ 375{
376 return KIdManager::getCsum ( mExternalId, prof ); 376 return KIdManager::getCsum ( mExternalId, prof );
377} 377}
378 378
379void IncidenceBase::setIDStr( const QString & s ) 379void IncidenceBase::setIDStr( const QString & s )
380{ 380{
381 if (mReadOnly) return; 381 if (mReadOnly) return;
382 mExternalId = s; 382 mExternalId = s;
383} 383}
384 384
385QString IncidenceBase::IDStr() const 385QString IncidenceBase::IDStr() const
386{ 386{
387 return mExternalId ; 387 return mExternalId ;
388} 388}
389void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) 389void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
390{ 390{
391 if( !mObservers.contains(observer) ) mObservers.append( observer ); 391 if( !mObservers.contains(observer) ) mObservers.append( observer );
392} 392}
393 393
394void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) 394void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
395{ 395{
396 mObservers.remove( observer ); 396 mObservers.remove( observer );
397} 397}
398 398
399void IncidenceBase::updated() 399void IncidenceBase::updated()
400{ 400{
401 QPtrListIterator<Observer> it(mObservers); 401 QPtrListIterator<Observer> it(mObservers);
402 while( it.current() ) { 402 while( it.current() ) {
403 Observer *o = it.current(); 403 Observer *o = it.current();
404 ++it; 404 ++it;
405 o->incidenceUpdated( this ); 405 o->incidenceUpdated( this );
406 } 406 }
407} 407}