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