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