summaryrefslogtreecommitdiffabout
path: root/korganizer
authorzautrix <zautrix>2004-10-16 13:36:11 (UTC)
committer zautrix <zautrix>2004-10-16 13:36:11 (UTC)
commitc3325ebbb92a2814fcb622caaf71316cfa0c2908 (patch) (unidiff)
treeb53545c39f84fc6ce694f371509b4a9fe2ddd743 /korganizer
parent023b3c542a6dd4d1c4b53dba6bb2c68f605a7917 (diff)
downloadkdepimpi-c3325ebbb92a2814fcb622caaf71316cfa0c2908.zip
kdepimpi-c3325ebbb92a2814fcb622caaf71316cfa0c2908.tar.gz
kdepimpi-c3325ebbb92a2814fcb622caaf71316cfa0c2908.tar.bz2
made todos reparentable
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp16
-rw-r--r--korganizer/calendarview.h1
-rw-r--r--korganizer/kotodoview.cpp88
-rw-r--r--korganizer/kotodoview.h3
-rw-r--r--korganizer/koviewmanager.cpp2
-rw-r--r--korganizer/mainwindow.cpp3
6 files changed, 109 insertions, 4 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index e4a11f5..1f8ad5b 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -38,768 +38,770 @@
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "kodialogmanager.h" 107#include "kodialogmanager.h"
108#include "outgoingdialog.h" 108#include "outgoingdialog.h"
109#include "incomingdialog.h" 109#include "incomingdialog.h"
110#include "statusdialog.h" 110#include "statusdialog.h"
111#include "kdatenavigator.h" 111#include "kdatenavigator.h"
112#include "kotodoview.h" 112#include "kotodoview.h"
113#include "datenavigator.h" 113#include "datenavigator.h"
114#include "resourceview.h" 114#include "resourceview.h"
115#include "navigatorbar.h" 115#include "navigatorbar.h"
116#include "searchdialog.h" 116#include "searchdialog.h"
117#include "mainwindow.h" 117#include "mainwindow.h"
118 118
119#include "calendarview.h" 119#include "calendarview.h"
120#ifndef DESKTOP_VERSION 120#ifndef DESKTOP_VERSION
121#include <qtopia/alarmserver.h> 121#include <qtopia/alarmserver.h>
122#endif 122#endif
123#ifndef _WIN32_ 123#ifndef _WIN32_
124#include <stdlib.h> 124#include <stdlib.h>
125#include <stdio.h> 125#include <stdio.h>
126#include <unistd.h> 126#include <unistd.h>
127#else 127#else
128#include <qprocess.h> 128#include <qprocess.h>
129#endif 129#endif
130 130
131#ifdef DESKTOP_VERSION 131#ifdef DESKTOP_VERSION
132#include <kabc/stdaddressbook.h> 132#include <kabc/stdaddressbook.h>
133#endif 133#endif
134using namespace KOrg; 134using namespace KOrg;
135using namespace KCal; 135using namespace KCal;
136extern int globalFlagBlockAgenda; 136extern int globalFlagBlockAgenda;
137extern int globalFlagBlockStartup; 137extern int globalFlagBlockStartup;
138 138
139 139
140 140
141class KOBeamPrefs : public QDialog 141class KOBeamPrefs : public QDialog
142{ 142{
143 public: 143 public:
144 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 144 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
145 QDialog( parent, name, true ) 145 QDialog( parent, name, true )
146 { 146 {
147 setCaption( i18n("Beam Options") ); 147 setCaption( i18n("Beam Options") );
148 QVBoxLayout* lay = new QVBoxLayout( this ); 148 QVBoxLayout* lay = new QVBoxLayout( this );
149 lay->setSpacing( 3 ); 149 lay->setSpacing( 3 );
150 lay->setMargin( 3 ); 150 lay->setMargin( 3 );
151 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 151 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
152 lay->addWidget( format ); 152 lay->addWidget( format );
153 format->setExclusive ( true ) ; 153 format->setExclusive ( true ) ;
154 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 154 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
155 lay->addWidget( time ); time->setExclusive ( true ) ; 155 lay->addWidget( time ); time->setExclusive ( true ) ;
156 vcal = new QRadioButton(" vCalendar ", format ); 156 vcal = new QRadioButton(" vCalendar ", format );
157 ical = new QRadioButton(" iCalendar ", format ); 157 ical = new QRadioButton(" iCalendar ", format );
158 vcal->setChecked( true ); 158 vcal->setChecked( true );
159 tz = new QRadioButton(i18n(" With timezone "), time ); 159 tz = new QRadioButton(i18n(" With timezone "), time );
160 local = new QRadioButton(i18n(" Local time "), time ); 160 local = new QRadioButton(i18n(" Local time "), time );
161 tz->setChecked( true ); 161 tz->setChecked( true );
162 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 162 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
163 lay->addWidget( ok ); 163 lay->addWidget( ok );
164 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 164 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
165 lay->addWidget( cancel ); 165 lay->addWidget( cancel );
166 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 166 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
167 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 167 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
168 resize( 200, 200 ); 168 resize( 200, 200 );
169 } 169 }
170 170
171 bool beamVcal() { return vcal->isChecked(); } 171 bool beamVcal() { return vcal->isChecked(); }
172 bool beamLocal() { return local->isChecked(); } 172 bool beamLocal() { return local->isChecked(); }
173private: 173private:
174 QRadioButton* vcal, *ical, *local, *tz; 174 QRadioButton* vcal, *ical, *local, *tz;
175}; 175};
176class KOCatPrefs : public QDialog 176class KOCatPrefs : public QDialog
177{ 177{
178 public: 178 public:
179 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 179 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
180 QDialog( parent, name, true ) 180 QDialog( parent, name, true )
181 { 181 {
182 setCaption( i18n("Manage new Categories") ); 182 setCaption( i18n("Manage new Categories") );
183 QVBoxLayout* lay = new QVBoxLayout( this ); 183 QVBoxLayout* lay = new QVBoxLayout( this );
184 lay->setSpacing( 3 ); 184 lay->setSpacing( 3 );
185 lay->setMargin( 3 ); 185 lay->setMargin( 3 );
186 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 ); 186 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
187 lay->addWidget( lab ); 187 lay->addWidget( lab );
188 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 188 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
189 lay->addWidget( format ); 189 lay->addWidget( format );
190 format->setExclusive ( true ) ; 190 format->setExclusive ( true ) ;
191 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 191 addCatBut = new QRadioButton(i18n("Add to category list"), format );
192 new QRadioButton(i18n("Remove from Events/Todos"), format ); 192 new QRadioButton(i18n("Remove from Events/Todos"), format );
193 addCatBut->setChecked( true ); 193 addCatBut->setChecked( true );
194 QPushButton * ok = new QPushButton( i18n("OK"), this ); 194 QPushButton * ok = new QPushButton( i18n("OK"), this );
195 lay->addWidget( ok ); 195 lay->addWidget( ok );
196 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 196 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
197 lay->addWidget( cancel ); 197 lay->addWidget( cancel );
198 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 198 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
199 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 199 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
200 resize( 200, 200 ); 200 resize( 200, 200 );
201 } 201 }
202 202
203 bool addCat() { return addCatBut->isChecked(); } 203 bool addCat() { return addCatBut->isChecked(); }
204private: 204private:
205 QRadioButton* addCatBut; 205 QRadioButton* addCatBut;
206}; 206};
207 207
208 208
209 209
210CalendarView::CalendarView( CalendarResources *calendar, 210CalendarView::CalendarView( CalendarResources *calendar,
211 QWidget *parent, const char *name ) 211 QWidget *parent, const char *name )
212 : CalendarViewBase( parent, name ), 212 : CalendarViewBase( parent, name ),
213 mCalendar( calendar ), 213 mCalendar( calendar ),
214 mResourceManager( calendar->resourceManager() ) 214 mResourceManager( calendar->resourceManager() )
215{ 215{
216 216
217 mEventEditor = 0; 217 mEventEditor = 0;
218 mTodoEditor = 0; 218 mTodoEditor = 0;
219 219
220 init(); 220 init();
221} 221}
222 222
223CalendarView::CalendarView( Calendar *calendar, 223CalendarView::CalendarView( Calendar *calendar,
224 QWidget *parent, const char *name ) 224 QWidget *parent, const char *name )
225 : CalendarViewBase( parent, name ), 225 : CalendarViewBase( parent, name ),
226 mCalendar( calendar ), 226 mCalendar( calendar ),
227 mResourceManager( 0 ) 227 mResourceManager( 0 )
228{ 228{
229 229
230 mEventEditor = 0; 230 mEventEditor = 0;
231 mTodoEditor = 0; 231 mTodoEditor = 0;
232 init();} 232 init();}
233 233
234void CalendarView::init() 234void CalendarView::init()
235{ 235{
236 beamDialog = new KOBeamPrefs(); 236 beamDialog = new KOBeamPrefs();
237 mDatePickerMode = 0; 237 mDatePickerMode = 0;
238 mCurrentSyncDevice = ""; 238 mCurrentSyncDevice = "";
239 writeLocale(); 239 writeLocale();
240 mViewManager = new KOViewManager( this ); 240 mViewManager = new KOViewManager( this );
241 mDialogManager = new KODialogManager( this ); 241 mDialogManager = new KODialogManager( this );
242 mEventViewerDialog = 0; 242 mEventViewerDialog = 0;
243 mModified = false; 243 mModified = false;
244 mReadOnly = false; 244 mReadOnly = false;
245 mSelectedIncidence = 0; 245 mSelectedIncidence = 0;
246 mCalPrinter = 0; 246 mCalPrinter = 0;
247 mFilters.setAutoDelete(true); 247 mFilters.setAutoDelete(true);
248 248
249 mCalendar->registerObserver( this ); 249 mCalendar->registerObserver( this );
250 // TODO: Make sure that view is updated, when calendar is changed. 250 // TODO: Make sure that view is updated, when calendar is changed.
251 251
252 mStorage = new FileStorage( mCalendar ); 252 mStorage = new FileStorage( mCalendar );
253 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 253 mNavigator = new DateNavigator( this, "datevav", mViewManager );
254 254
255 QBoxLayout *topLayout = (QBoxLayout*)layout(); 255 QBoxLayout *topLayout = (QBoxLayout*)layout();
256#ifndef KORG_NOSPLITTER 256#ifndef KORG_NOSPLITTER
257 // create the main layout frames. 257 // create the main layout frames.
258 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 258 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
259 topLayout->addWidget(mPanner); 259 topLayout->addWidget(mPanner);
260 260
261 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 261 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
262 "CalendarView::LeftFrame"); 262 "CalendarView::LeftFrame");
263 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 263 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
264 264
265 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 265 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
266 "CalendarView::DateNavigator", QDate::currentDate() ); 266 "CalendarView::DateNavigator", QDate::currentDate() );
267 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 267 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
268 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 268 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
269 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 269 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
270 270
271#ifdef KORG_NORESOURCEVIEW 271#ifdef KORG_NORESOURCEVIEW
272 mResourceView = 0; 272 mResourceView = 0;
273#else 273#else
274 if ( mResourceManager ) { 274 if ( mResourceManager ) {
275 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 275 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
276 mResourceView->updateView(); 276 mResourceView->updateView();
277 connect( mResourceView, SIGNAL( resourcesChanged() ), 277 connect( mResourceView, SIGNAL( resourcesChanged() ),
278 SLOT( updateView() ) ); 278 SLOT( updateView() ) );
279 } else { 279 } else {
280 mResourceView = 0; 280 mResourceView = 0;
281 } 281 }
282#endif 282#endif
283 QWidget *rightBox = new QWidget( mPanner ); 283 QWidget *rightBox = new QWidget( mPanner );
284 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 284 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
285 285
286 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 286 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
287 rightLayout->addWidget( mNavigatorBar ); 287 rightLayout->addWidget( mNavigatorBar );
288 288
289 mRightFrame = new QWidgetStack( rightBox ); 289 mRightFrame = new QWidgetStack( rightBox );
290 rightLayout->addWidget( mRightFrame, 1 ); 290 rightLayout->addWidget( mRightFrame, 1 );
291 291
292 mLeftFrame = mLeftSplitter; 292 mLeftFrame = mLeftSplitter;
293#else 293#else
294 QWidget *mainBox = new QWidget( this ); 294 QWidget *mainBox = new QWidget( this );
295 QWidget *leftFrame = new QWidget( mainBox ); 295 QWidget *leftFrame = new QWidget( mainBox );
296 296
297 QBoxLayout * mainBoxLayout; 297 QBoxLayout * mainBoxLayout;
298 QBoxLayout * leftFrameLayout; 298 QBoxLayout * leftFrameLayout;
299 if ( KOPrefs::instance()->mVerticalScreen ) { 299 if ( KOPrefs::instance()->mVerticalScreen ) {
300 mainBoxLayout = new QVBoxLayout(mainBox); 300 mainBoxLayout = new QVBoxLayout(mainBox);
301 leftFrameLayout = new QHBoxLayout(leftFrame ); 301 leftFrameLayout = new QHBoxLayout(leftFrame );
302 } else { 302 } else {
303 mainBoxLayout = new QHBoxLayout(mainBox); 303 mainBoxLayout = new QHBoxLayout(mainBox);
304 leftFrameLayout = new QVBoxLayout(leftFrame ); 304 leftFrameLayout = new QVBoxLayout(leftFrame );
305 } 305 }
306 topLayout->addWidget( mainBox ); 306 topLayout->addWidget( mainBox );
307 mainBoxLayout->addWidget (leftFrame); 307 mainBoxLayout->addWidget (leftFrame);
308 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 308 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
309 "CalendarView::DateNavigator", QDate::currentDate()); 309 "CalendarView::DateNavigator", QDate::currentDate());
310 // mDateNavigator->blockSignals( true ); 310 // mDateNavigator->blockSignals( true );
311 leftFrameLayout->addWidget( mDateNavigator ); 311 leftFrameLayout->addWidget( mDateNavigator );
312 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 312 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
313 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolistsmall"); 313 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolistsmall");
314 314
315 if ( QApplication::desktop()->width() < 480 ) { 315 if ( QApplication::desktop()->width() < 480 ) {
316 leftFrameLayout->addWidget(mFilterView); 316 leftFrameLayout->addWidget(mFilterView);
317 leftFrameLayout->addWidget(mTodoList, 2 ); 317 leftFrameLayout->addWidget(mTodoList, 2 );
318 318
319 } else { 319 } else {
320 leftFrameLayout->addWidget(mTodoList,2 ); 320 leftFrameLayout->addWidget(mTodoList,2 );
321 leftFrameLayout->addWidget(mFilterView ); 321 leftFrameLayout->addWidget(mFilterView );
322 } 322 }
323 mFilterView->hide(); 323 mFilterView->hide();
324 QWidget *rightBox = new QWidget( mainBox ); 324 QWidget *rightBox = new QWidget( mainBox );
325 mainBoxLayout->addWidget ( rightBox, 10 ); 325 mainBoxLayout->addWidget ( rightBox, 10 );
326 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 326 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
327 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 327 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
328 mRightFrame = new QWidgetStack( rightBox ); 328 mRightFrame = new QWidgetStack( rightBox );
329 rightLayout->addWidget( mNavigatorBar ); 329 rightLayout->addWidget( mNavigatorBar );
330 rightLayout->addWidget( mRightFrame, 10 ); 330 rightLayout->addWidget( mRightFrame, 10 );
331 331
332 mLeftFrame = leftFrame; 332 mLeftFrame = leftFrame;
333 if ( KOPrefs::instance()->mVerticalScreen ) { 333 if ( KOPrefs::instance()->mVerticalScreen ) {
334 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 334 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
335 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 335 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
336 } else { 336 } else {
337 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 337 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
338 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 338 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
339 } 339 }
340 340
341 //qDebug("Calendarview Size %d %d ", width(), height()); 341 //qDebug("Calendarview Size %d %d ", width(), height());
342#endif 342#endif
343 343
344 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 344 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
345 SLOT( showDates( const KCal::DateList & ) ) ); 345 SLOT( showDates( const KCal::DateList & ) ) );
346 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 346 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
347 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 347 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
348 348
349 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 349 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
350 mNavigator, SLOT( selectPreviousYear() ) ); 350 mNavigator, SLOT( selectPreviousYear() ) );
351 connect( mNavigatorBar, SIGNAL( goNextYear() ), 351 connect( mNavigatorBar, SIGNAL( goNextYear() ),
352 mNavigator, SLOT( selectNextYear() ) ); 352 mNavigator, SLOT( selectNextYear() ) );
353 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 353 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
354 mNavigator, SLOT( selectPreviousMonth() ) ); 354 mNavigator, SLOT( selectPreviousMonth() ) );
355 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 355 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
356 mNavigator, SLOT( selectNextMonth() ) ); 356 mNavigator, SLOT( selectNextMonth() ) );
357 357
358 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 358 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
359 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 359 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
360 360
361 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 361 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
362 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 362 mNavigator, SLOT( selectWeek( const QDate & ) ) );
363 363
364 connect( mDateNavigator, SIGNAL( goPrevYear() ), 364 connect( mDateNavigator, SIGNAL( goPrevYear() ),
365 mNavigator, SLOT( selectPreviousYear() ) ); 365 mNavigator, SLOT( selectPreviousYear() ) );
366 connect( mDateNavigator, SIGNAL( goNextYear() ), 366 connect( mDateNavigator, SIGNAL( goNextYear() ),
367 mNavigator, SLOT( selectNextYear() ) ); 367 mNavigator, SLOT( selectNextYear() ) );
368 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 368 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
369 mNavigator, SLOT( selectPreviousMonth() ) ); 369 mNavigator, SLOT( selectPreviousMonth() ) );
370 connect( mDateNavigator, SIGNAL( goNextMonth() ), 370 connect( mDateNavigator, SIGNAL( goNextMonth() ),
371 mNavigator, SLOT( selectNextMonth() ) ); 371 mNavigator, SLOT( selectNextMonth() ) );
372 372
373 connect( mDateNavigator, SIGNAL( goPrevious() ), 373 connect( mDateNavigator, SIGNAL( goPrevious() ),
374 mNavigator, SLOT( selectPrevious() ) ); 374 mNavigator, SLOT( selectPrevious() ) );
375 connect( mDateNavigator, SIGNAL( goNext() ), 375 connect( mDateNavigator, SIGNAL( goNext() ),
376 mNavigator, SLOT( selectNext() ) ); 376 mNavigator, SLOT( selectNext() ) );
377 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 377 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
378 mNavigator, SLOT( slotMonthSelect( int ) ) ); 378 mNavigator, SLOT( slotMonthSelect( int ) ) );
379 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 379 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
380 mNavigator, SLOT( slotMonthSelect( int ) ) ); 380 mNavigator, SLOT( slotMonthSelect( int ) ) );
381 381
382 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 382 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
383 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 383 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
384 384
385 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 385 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
386 SLOT( eventAdded( Event *) ) ); 386 SLOT( eventAdded( Event *) ) );
387 387
388 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 388 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
389 389
390 connect( this, SIGNAL( configChanged() ), 390 connect( this, SIGNAL( configChanged() ),
391 mDateNavigator, SLOT( updateConfig() ) ); 391 mDateNavigator, SLOT( updateConfig() ) );
392 392
393 connect( mTodoList, SIGNAL( newTodoSignal() ), 393 connect( mTodoList, SIGNAL( newTodoSignal() ),
394 SLOT( newTodo() ) ); 394 SLOT( newTodo() ) );
395 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 395 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
396 SLOT( newSubTodo( Todo * ) ) ); 396 SLOT( newSubTodo( Todo * ) ) );
397 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 397 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
398 SLOT( editTodo( Todo * ) ) ); 398 SLOT( editTodo( Todo * ) ) );
399 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 399 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
400 SLOT( showTodo( Todo *) ) ); 400 SLOT( showTodo( Todo *) ) );
401 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 401 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
402 SLOT( deleteTodo( Todo *) ) ); 402 SLOT( deleteTodo( Todo *) ) );
403 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 403 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
404 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 404 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
405 SLOT( purgeCompleted() ) ); 405 SLOT( purgeCompleted() ) );
406 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 406 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
407 SIGNAL( todoModified( Todo *, int ) ) ); 407 SIGNAL( todoModified( Todo *, int ) ) );
408 408
409 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 409 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
410 this, SLOT ( cloneIncidence( Incidence * ) ) ); 410 this, SLOT ( cloneIncidence( Incidence * ) ) );
411 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 411 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
412 this, SLOT (cancelIncidence( Incidence * ) ) ); 412 this, SLOT (cancelIncidence( Incidence * ) ) );
413 413
414 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 414 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
415 this, SLOT ( moveIncidence( Incidence * ) ) ); 415 this, SLOT ( moveIncidence( Incidence * ) ) );
416 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 416 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
417 this, SLOT ( beamIncidence( Incidence * ) ) ); 417 this, SLOT ( beamIncidence( Incidence * ) ) );
418 418
419 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 419 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
420 this, SLOT ( todo_unsub( Todo * ) ) ); 420 this, SLOT ( todo_unsub( Todo * ) ) );
421 421
422 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
423 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
422 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 424 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
423 SLOT( updateTodo( Todo *, int ) ) ); 425 SLOT( updateTodo( Todo *, int ) ) );
424 connect( this, SIGNAL( todoModified( Todo *, int )), this, 426 connect( this, SIGNAL( todoModified( Todo *, int )), this,
425 SLOT( changeTodoDisplay( Todo *, int ) ) ); 427 SLOT( changeTodoDisplay( Todo *, int ) ) );
426 428
427 429
428 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 430 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
429 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 431 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
430 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 432 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
431 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 433 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
432 434
433 435
434 436
435 437
436 438
437 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 439 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
438 SLOT(checkClipboard())); 440 SLOT(checkClipboard()));
439 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 441 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
440 SLOT( processTodoListSelection( Incidence * ) ) ); 442 SLOT( processTodoListSelection( Incidence * ) ) );
441 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 443 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
442 444
443 // kdDebug() << "CalendarView::CalendarView() done" << endl; 445 // kdDebug() << "CalendarView::CalendarView() done" << endl;
444 446
445 mDateFrame = new QVBox(0,0,WType_Popup); 447 mDateFrame = new QVBox(0,0,WType_Popup);
446 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 448 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
447 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 449 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
448 mDateFrame->setLineWidth(3); 450 mDateFrame->setLineWidth(3);
449 mDateFrame->hide(); 451 mDateFrame->hide();
450 mDateFrame->setCaption( i18n( "Pick a date to display")); 452 mDateFrame->setCaption( i18n( "Pick a date to display"));
451 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 453 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
452 454
453 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 455 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
454 456
455 mEventEditor = mDialogManager->getEventEditor(); 457 mEventEditor = mDialogManager->getEventEditor();
456 mTodoEditor = mDialogManager->getTodoEditor(); 458 mTodoEditor = mDialogManager->getTodoEditor();
457 459
458 mFlagEditDescription = false; 460 mFlagEditDescription = false;
459 461
460 mSuspendTimer = new QTimer( this ); 462 mSuspendTimer = new QTimer( this );
461 mAlarmTimer = new QTimer( this ); 463 mAlarmTimer = new QTimer( this );
462 mRecheckAlarmTimer = new QTimer( this ); 464 mRecheckAlarmTimer = new QTimer( this );
463 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 465 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
464 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 466 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
465 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 467 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
466 mAlarmDialog = new AlarmDialog( this ); 468 mAlarmDialog = new AlarmDialog( this );
467 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 469 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
468 mAlarmDialog->setServerNotification( false ); 470 mAlarmDialog->setServerNotification( false );
469 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 471 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
470 472
471 473
472#ifndef DESKTOP_VERSION 474#ifndef DESKTOP_VERSION
473//US listen for arriving address resultsets 475//US listen for arriving address resultsets
474 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 476 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
475 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 477 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
476#endif 478#endif
477 479
478} 480}
479 481
480 482
481CalendarView::~CalendarView() 483CalendarView::~CalendarView()
482{ 484{
483 // kdDebug() << "~CalendarView()" << endl; 485 // kdDebug() << "~CalendarView()" << endl;
484 //qDebug("CalendarView::~CalendarView() "); 486 //qDebug("CalendarView::~CalendarView() ");
485 delete mDialogManager; 487 delete mDialogManager;
486 delete mViewManager; 488 delete mViewManager;
487 delete mStorage; 489 delete mStorage;
488 delete mDateFrame ; 490 delete mDateFrame ;
489 delete beamDialog; 491 delete beamDialog;
490 //kdDebug() << "~CalendarView() done" << endl; 492 //kdDebug() << "~CalendarView() done" << endl;
491} 493}
492void CalendarView::timerAlarm() 494void CalendarView::timerAlarm()
493{ 495{
494 //qDebug("CalendarView::timerAlarm() "); 496 //qDebug("CalendarView::timerAlarm() ");
495 computeAlarm(mAlarmNotification ); 497 computeAlarm(mAlarmNotification );
496} 498}
497 499
498void CalendarView::suspendAlarm() 500void CalendarView::suspendAlarm()
499{ 501{
500 //qDebug(" CalendarView::suspendAlarm() "); 502 //qDebug(" CalendarView::suspendAlarm() ");
501 computeAlarm(mSuspendAlarmNotification ); 503 computeAlarm(mSuspendAlarmNotification );
502 504
503} 505}
504 506
505void CalendarView::startAlarm( QString mess , QString filename) 507void CalendarView::startAlarm( QString mess , QString filename)
506{ 508{
507 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 509 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
508 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 510 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
509 511
510} 512}
511 513
512void CalendarView::checkNextTimerAlarm() 514void CalendarView::checkNextTimerAlarm()
513{ 515{
514 mCalendar->checkAlarmForIncidence( 0, true ); 516 mCalendar->checkAlarmForIncidence( 0, true );
515} 517}
516 518
517void CalendarView::computeAlarm( QString msg ) 519void CalendarView::computeAlarm( QString msg )
518{ 520{
519 521
520 QString mess = msg; 522 QString mess = msg;
521 QString mAlarmMessage = mess.mid( 9 ); 523 QString mAlarmMessage = mess.mid( 9 );
522 QString filename = MainWindow::resourcePath(); 524 QString filename = MainWindow::resourcePath();
523 filename += "koalarm.wav"; 525 filename += "koalarm.wav";
524 QString tempfilename; 526 QString tempfilename;
525 if ( mess.left( 13 ) == "suspend_alarm") { 527 if ( mess.left( 13 ) == "suspend_alarm") {
526 bool error = false; 528 bool error = false;
527 int len = mess.mid( 13 ).find("+++"); 529 int len = mess.mid( 13 ).find("+++");
528 if ( len < 2 ) 530 if ( len < 2 )
529 error = true; 531 error = true;
530 else { 532 else {
531 tempfilename = mess.mid( 13, len ); 533 tempfilename = mess.mid( 13, len );
532 if ( !QFile::exists( tempfilename ) ) 534 if ( !QFile::exists( tempfilename ) )
533 error = true; 535 error = true;
534 } 536 }
535 if ( ! error ) { 537 if ( ! error ) {
536 filename = tempfilename; 538 filename = tempfilename;
537 } 539 }
538 mAlarmMessage = mess.mid( 13+len+3 ); 540 mAlarmMessage = mess.mid( 13+len+3 );
539 //qDebug("suspend file %s ",tempfilename.latin1() ); 541 //qDebug("suspend file %s ",tempfilename.latin1() );
540 startAlarm( mAlarmMessage, filename); 542 startAlarm( mAlarmMessage, filename);
541 return; 543 return;
542 } 544 }
543 if ( mess.left( 11 ) == "timer_alarm") { 545 if ( mess.left( 11 ) == "timer_alarm") {
544 //mTimerTime = 0; 546 //mTimerTime = 0;
545 startAlarm( mess.mid( 11 ), filename ); 547 startAlarm( mess.mid( 11 ), filename );
546 return; 548 return;
547 } 549 }
548 if ( mess.left( 10 ) == "proc_alarm") { 550 if ( mess.left( 10 ) == "proc_alarm") {
549 bool error = false; 551 bool error = false;
550 int len = mess.mid( 10 ).find("+++"); 552 int len = mess.mid( 10 ).find("+++");
551 if ( len < 2 ) 553 if ( len < 2 )
552 error = true; 554 error = true;
553 else { 555 else {
554 tempfilename = mess.mid( 10, len ); 556 tempfilename = mess.mid( 10, len );
555 if ( !QFile::exists( tempfilename ) ) 557 if ( !QFile::exists( tempfilename ) )
556 error = true; 558 error = true;
557 } 559 }
558 if ( error ) { 560 if ( error ) {
559 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 561 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
560 mAlarmMessage += mess.mid( 10+len+3+9 ); 562 mAlarmMessage += mess.mid( 10+len+3+9 );
561 } else { 563 } else {
562 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 564 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
563 //qDebug("-----system command %s ",tempfilename.latin1() ); 565 //qDebug("-----system command %s ",tempfilename.latin1() );
564#ifndef _WIN32_ 566#ifndef _WIN32_
565 if ( vfork () == 0 ) { 567 if ( vfork () == 0 ) {
566 execl ( tempfilename.latin1(), 0 ); 568 execl ( tempfilename.latin1(), 0 );
567 return; 569 return;
568 } 570 }
569#else 571#else
570 QProcess* p = new QProcess(); 572 QProcess* p = new QProcess();
571 p->addArgument( tempfilename.latin1() ); 573 p->addArgument( tempfilename.latin1() );
572 p->start(); 574 p->start();
573 return; 575 return;
574#endif 576#endif
575 577
576 return; 578 return;
577 } 579 }
578 580
579 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 581 //qDebug("+++++++system command %s ",tempfilename.latin1() );
580 } 582 }
581 if ( mess.left( 11 ) == "audio_alarm") { 583 if ( mess.left( 11 ) == "audio_alarm") {
582 bool error = false; 584 bool error = false;
583 int len = mess.mid( 11 ).find("+++"); 585 int len = mess.mid( 11 ).find("+++");
584 if ( len < 2 ) 586 if ( len < 2 )
585 error = true; 587 error = true;
586 else { 588 else {
587 tempfilename = mess.mid( 11, len ); 589 tempfilename = mess.mid( 11, len );
588 if ( !QFile::exists( tempfilename ) ) 590 if ( !QFile::exists( tempfilename ) )
589 error = true; 591 error = true;
590 } 592 }
591 if ( ! error ) { 593 if ( ! error ) {
592 filename = tempfilename; 594 filename = tempfilename;
593 } 595 }
594 mAlarmMessage = mess.mid( 11+len+3+9 ); 596 mAlarmMessage = mess.mid( 11+len+3+9 );
595 //qDebug("audio file command %s ",tempfilename.latin1() ); 597 //qDebug("audio file command %s ",tempfilename.latin1() );
596 } 598 }
597 if ( mess.left( 9 ) == "cal_alarm") { 599 if ( mess.left( 9 ) == "cal_alarm") {
598 mAlarmMessage = mess.mid( 9 ) ; 600 mAlarmMessage = mess.mid( 9 ) ;
599 } 601 }
600 602
601 startAlarm( mAlarmMessage, filename ); 603 startAlarm( mAlarmMessage, filename );
602 604
603 605
604} 606}
605 607
606void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 608void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
607{ 609{
608 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 610 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
609 611
610 mSuspendAlarmNotification = noti; 612 mSuspendAlarmNotification = noti;
611 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 613 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
612 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 614 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
613 mSuspendTimer->start( ms , true ); 615 mSuspendTimer->start( ms , true );
614 616
615} 617}
616 618
617void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 619void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
618{ 620{
619 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 621 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
620 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 622 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
621#ifndef DESKTOP_VERSION 623#ifndef DESKTOP_VERSION
622 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 624 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
623#endif 625#endif
624 return; 626 return;
625 } 627 }
626 int maxSec; 628 int maxSec;
627 //maxSec = 5; //testing only 629 //maxSec = 5; //testing only
628 maxSec = 86400+3600; // one day+1hour 630 maxSec = 86400+3600; // one day+1hour
629 mAlarmNotification = noti; 631 mAlarmNotification = noti;
630 int sec = QDateTime::currentDateTime().secsTo( qdt ); 632 int sec = QDateTime::currentDateTime().secsTo( qdt );
631 if ( sec > maxSec ) { 633 if ( sec > maxSec ) {
632 mRecheckAlarmTimer->start( maxSec * 1000 ); 634 mRecheckAlarmTimer->start( maxSec * 1000 );
633 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 635 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
634 return; 636 return;
635 } else { 637 } else {
636 mRecheckAlarmTimer->stop(); 638 mRecheckAlarmTimer->stop();
637 } 639 }
638 //qDebug("Alarm timer started with secs: %d ", sec); 640 //qDebug("Alarm timer started with secs: %d ", sec);
639 mAlarmTimer->start( sec *1000 , true ); 641 mAlarmTimer->start( sec *1000 , true );
640 642
641} 643}
642// called by mRecheckAlarmTimer to get next alarm 644// called by mRecheckAlarmTimer to get next alarm
643// we need this, because a QTimer has only a max range of 25 days 645// we need this, because a QTimer has only a max range of 25 days
644void CalendarView::recheckTimerAlarm() 646void CalendarView::recheckTimerAlarm()
645{ 647{
646 mAlarmTimer->stop(); 648 mAlarmTimer->stop();
647 mRecheckAlarmTimer->stop(); 649 mRecheckAlarmTimer->stop();
648 mCalendar->checkAlarmForIncidence( 0, true ); 650 mCalendar->checkAlarmForIncidence( 0, true );
649} 651}
650void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 652void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
651{ 653{
652 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 654 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
653 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 655 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
654#ifndef DESKTOP_VERSION 656#ifndef DESKTOP_VERSION
655 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 657 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
656#endif 658#endif
657 return; 659 return;
658 } 660 }
659 mAlarmTimer->stop(); 661 mAlarmTimer->stop();
660} 662}
661void CalendarView::selectWeekNum ( int num ) 663void CalendarView::selectWeekNum ( int num )
662{ 664{
663 dateNavigator()->selectWeek( num ); 665 dateNavigator()->selectWeek( num );
664 mViewManager->showWeekView(); 666 mViewManager->showWeekView();
665} 667}
666KOViewManager *CalendarView::viewManager() 668KOViewManager *CalendarView::viewManager()
667{ 669{
668 return mViewManager; 670 return mViewManager;
669} 671}
670 672
671KODialogManager *CalendarView::dialogManager() 673KODialogManager *CalendarView::dialogManager()
672{ 674{
673 return mDialogManager; 675 return mDialogManager;
674} 676}
675 677
676QDate CalendarView::startDate() 678QDate CalendarView::startDate()
677{ 679{
678 DateList dates = mNavigator->selectedDates(); 680 DateList dates = mNavigator->selectedDates();
679 681
680 return dates.first(); 682 return dates.first();
681} 683}
682 684
683QDate CalendarView::endDate() 685QDate CalendarView::endDate()
684{ 686{
685 DateList dates = mNavigator->selectedDates(); 687 DateList dates = mNavigator->selectedDates();
686 688
687 return dates.last(); 689 return dates.last();
688} 690}
689 691
690 692
691void CalendarView::createPrinter() 693void CalendarView::createPrinter()
692{ 694{
693#ifndef KORG_NOPRINTER 695#ifndef KORG_NOPRINTER
694 if (!mCalPrinter) { 696 if (!mCalPrinter) {
695 mCalPrinter = new CalPrinter(this, mCalendar); 697 mCalPrinter = new CalPrinter(this, mCalendar);
696 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 698 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
697 } 699 }
698#endif 700#endif
699} 701}
700 702
701 703
702//KOPrefs::instance()->mWriteBackFile 704//KOPrefs::instance()->mWriteBackFile
703//KOPrefs::instance()->mWriteBackExistingOnly 705//KOPrefs::instance()->mWriteBackExistingOnly
704 706
705// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 707// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
706// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 708// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
707// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 709// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
708// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 710// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
709// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 711// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
710// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 712// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
711 713
712int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 714int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
713{ 715{
714 716
715 //void setZaurusId(int id); 717 //void setZaurusId(int id);
716 // int zaurusId() const; 718 // int zaurusId() const;
717 // void setZaurusUid(int id); 719 // void setZaurusUid(int id);
718 // int zaurusUid() const; 720 // int zaurusUid() const;
719 // void setZaurusStat(int id); 721 // void setZaurusStat(int id);
720 // int zaurusStat() const; 722 // int zaurusStat() const;
721 // 0 equal 723 // 0 equal
722 // 1 take local 724 // 1 take local
723 // 2 take remote 725 // 2 take remote
724 // 3 cancel 726 // 3 cancel
725 QDateTime lastSync = mLastCalendarSync; 727 QDateTime lastSync = mLastCalendarSync;
726 QDateTime localMod = local->lastModified(); 728 QDateTime localMod = local->lastModified();
727 QDateTime remoteMod = remote->lastModified(); 729 QDateTime remoteMod = remote->lastModified();
728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 730 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
729 bool remCh, locCh; 731 bool remCh, locCh;
730 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 732 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
731 //if ( remCh ) 733 //if ( remCh )
732 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 734 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
733 locCh = ( localMod > mLastCalendarSync ); 735 locCh = ( localMod > mLastCalendarSync );
734 if ( !remCh && ! locCh ) { 736 if ( !remCh && ! locCh ) {
735 //qDebug("both not changed "); 737 //qDebug("both not changed ");
736 lastSync = localMod.addDays(1); 738 lastSync = localMod.addDays(1);
737 if ( mode <= SYNC_PREF_ASK ) 739 if ( mode <= SYNC_PREF_ASK )
738 return 0; 740 return 0;
739 } else { 741 } else {
740 if ( locCh ) { 742 if ( locCh ) {
741 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 743 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
742 lastSync = localMod.addDays( -1 ); 744 lastSync = localMod.addDays( -1 );
743 if ( !remCh ) 745 if ( !remCh )
744 remoteMod = ( lastSync.addDays( -1 ) ); 746 remoteMod = ( lastSync.addDays( -1 ) );
745 } else { 747 } else {
746 //qDebug(" not loc changed "); 748 //qDebug(" not loc changed ");
747 lastSync = localMod.addDays( 1 ); 749 lastSync = localMod.addDays( 1 );
748 if ( remCh ) 750 if ( remCh )
749 remoteMod =( lastSync.addDays( 1 ) ); 751 remoteMod =( lastSync.addDays( 1 ) );
750 752
751 } 753 }
752 } 754 }
753 full = true; 755 full = true;
754 if ( mode < SYNC_PREF_ASK ) 756 if ( mode < SYNC_PREF_ASK )
755 mode = SYNC_PREF_ASK; 757 mode = SYNC_PREF_ASK;
756 } else { 758 } else {
757 if ( localMod == remoteMod ) 759 if ( localMod == remoteMod )
758 if ( local->revision() == remote->revision() ) 760 if ( local->revision() == remote->revision() )
759 return 0; 761 return 0;
760 762
761 } 763 }
762 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 764 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
763 765
764 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 766 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
765 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 767 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
766 //full = true; //debug only 768 //full = true; //debug only
767 if ( full ) { 769 if ( full ) {
768 bool equ = false; 770 bool equ = false;
769 if ( local->type() == "Event" ) { 771 if ( local->type() == "Event" ) {
770 equ = (*((Event*) local) == *((Event*) remote)); 772 equ = (*((Event*) local) == *((Event*) remote));
771 } 773 }
772 else if ( local->type() =="Todo" ) 774 else if ( local->type() =="Todo" )
773 equ = (*((Todo*) local) == (*(Todo*) remote)); 775 equ = (*((Todo*) local) == (*(Todo*) remote));
774 else if ( local->type() =="Journal" ) 776 else if ( local->type() =="Journal" )
775 equ = (*((Journal*) local) == *((Journal*) remote)); 777 equ = (*((Journal*) local) == *((Journal*) remote));
776 if ( equ ) { 778 if ( equ ) {
777 //qDebug("equal "); 779 //qDebug("equal ");
778 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 780 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
779 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 781 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
780 } 782 }
781 if ( mode < SYNC_PREF_FORCE_LOCAL ) 783 if ( mode < SYNC_PREF_FORCE_LOCAL )
782 return 0; 784 return 0;
783 785
784 }//else //debug only 786 }//else //debug only
785 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 787 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
786 } 788 }
787 int result; 789 int result;
788 bool localIsNew; 790 bool localIsNew;
789 //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() ); 791 //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() );
790 792
791 if ( full && mode < SYNC_PREF_NEWEST ) 793 if ( full && mode < SYNC_PREF_NEWEST )
792 mode = SYNC_PREF_ASK; 794 mode = SYNC_PREF_ASK;
793 795
794 switch( mode ) { 796 switch( mode ) {
795 case SYNC_PREF_LOCAL: 797 case SYNC_PREF_LOCAL:
796 if ( lastSync > remoteMod ) 798 if ( lastSync > remoteMod )
797 return 1; 799 return 1;
798 if ( lastSync > localMod ) 800 if ( lastSync > localMod )
799 return 2; 801 return 2;
800 return 1; 802 return 1;
801 break; 803 break;
802 case SYNC_PREF_REMOTE: 804 case SYNC_PREF_REMOTE:
803 if ( lastSync > remoteMod ) 805 if ( lastSync > remoteMod )
804 return 1; 806 return 1;
805 if ( lastSync > localMod ) 807 if ( lastSync > localMod )
@@ -2365,768 +2367,782 @@ void CalendarView::beamDone( Ir *ir )
2365 topLevelWidget()->raise(); 2367 topLevelWidget()->raise();
2366} 2368}
2367 2369
2368void CalendarView::moveIncidence(Incidence * inc ) 2370void CalendarView::moveIncidence(Incidence * inc )
2369{ 2371{
2370 if ( !inc ) return; 2372 if ( !inc ) return;
2371 // qDebug("showDatePickerForIncidence( ) "); 2373 // qDebug("showDatePickerForIncidence( ) ");
2372 if ( mDateFrame->isVisible() ) 2374 if ( mDateFrame->isVisible() )
2373 mDateFrame->hide(); 2375 mDateFrame->hide();
2374 else { 2376 else {
2375 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2377 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2376 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2378 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2377 int dw = QApplication::desktop()->width(); 2379 int dw = QApplication::desktop()->width();
2378 int dh = QApplication::desktop()->height(); 2380 int dh = QApplication::desktop()->height();
2379 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2381 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2380 mDateFrame->show(); 2382 mDateFrame->show();
2381 } 2383 }
2382 mDatePickerMode = 2; 2384 mDatePickerMode = 2;
2383 mMoveIncidence = inc ; 2385 mMoveIncidence = inc ;
2384 QDate da; 2386 QDate da;
2385 if ( mMoveIncidence->type() == "Todo" ) { 2387 if ( mMoveIncidence->type() == "Todo" ) {
2386 Todo * to = (Todo *) mMoveIncidence; 2388 Todo * to = (Todo *) mMoveIncidence;
2387 if ( to->hasDueDate() ) 2389 if ( to->hasDueDate() )
2388 da = to->dtDue().date(); 2390 da = to->dtDue().date();
2389 else 2391 else
2390 da = QDate::currentDate(); 2392 da = QDate::currentDate();
2391 } else { 2393 } else {
2392 da = mMoveIncidence->dtStart().date(); 2394 da = mMoveIncidence->dtStart().date();
2393 } 2395 }
2394 mDatePicker->setDate( da ); 2396 mDatePicker->setDate( da );
2395} 2397}
2396void CalendarView::showDatePicker( ) 2398void CalendarView::showDatePicker( )
2397{ 2399{
2398 //qDebug("CalendarView::showDatePicker( ) "); 2400 //qDebug("CalendarView::showDatePicker( ) ");
2399 if ( mDateFrame->isVisible() ) 2401 if ( mDateFrame->isVisible() )
2400 mDateFrame->hide(); 2402 mDateFrame->hide();
2401 else { 2403 else {
2402 int w =mDatePicker->sizeHint().width() ; 2404 int w =mDatePicker->sizeHint().width() ;
2403 int h = mDatePicker->sizeHint().height() ; 2405 int h = mDatePicker->sizeHint().height() ;
2404 int dw = QApplication::desktop()->width(); 2406 int dw = QApplication::desktop()->width();
2405 int dh = QApplication::desktop()->height(); 2407 int dh = QApplication::desktop()->height();
2406 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2408 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2407 mDateFrame->show(); 2409 mDateFrame->show();
2408 } 2410 }
2409 mDatePickerMode = 1; 2411 mDatePickerMode = 1;
2410 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2412 mDatePicker->setDate( mNavigator->selectedDates().first() );
2411} 2413}
2412 2414
2413void CalendarView::showEventEditor() 2415void CalendarView::showEventEditor()
2414{ 2416{
2415#ifdef DESKTOP_VERSION 2417#ifdef DESKTOP_VERSION
2416 mEventEditor->show(); 2418 mEventEditor->show();
2417#else 2419#else
2418 mEventEditor->showMaximized(); 2420 mEventEditor->showMaximized();
2419#endif 2421#endif
2420} 2422}
2421void CalendarView::showTodoEditor() 2423void CalendarView::showTodoEditor()
2422{ 2424{
2423#ifdef DESKTOP_VERSION 2425#ifdef DESKTOP_VERSION
2424 mTodoEditor->show(); 2426 mTodoEditor->show();
2425#else 2427#else
2426 mTodoEditor->showMaximized(); 2428 mTodoEditor->showMaximized();
2427#endif 2429#endif
2428} 2430}
2429 2431
2430void CalendarView::cloneIncidence() 2432void CalendarView::cloneIncidence()
2431{ 2433{
2432 Incidence *incidence = currentSelection(); 2434 Incidence *incidence = currentSelection();
2433 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2435 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2434 if ( incidence ) { 2436 if ( incidence ) {
2435 cloneIncidence(incidence); 2437 cloneIncidence(incidence);
2436 } 2438 }
2437} 2439}
2438void CalendarView::moveIncidence() 2440void CalendarView::moveIncidence()
2439{ 2441{
2440 Incidence *incidence = currentSelection(); 2442 Incidence *incidence = currentSelection();
2441 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2443 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2442 if ( incidence ) { 2444 if ( incidence ) {
2443 moveIncidence(incidence); 2445 moveIncidence(incidence);
2444 } 2446 }
2445} 2447}
2446void CalendarView::beamIncidence() 2448void CalendarView::beamIncidence()
2447{ 2449{
2448 Incidence *incidence = currentSelection(); 2450 Incidence *incidence = currentSelection();
2449 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2451 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2450 if ( incidence ) { 2452 if ( incidence ) {
2451 beamIncidence(incidence); 2453 beamIncidence(incidence);
2452 } 2454 }
2453} 2455}
2454void CalendarView::toggleCancelIncidence() 2456void CalendarView::toggleCancelIncidence()
2455{ 2457{
2456 Incidence *incidence = currentSelection(); 2458 Incidence *incidence = currentSelection();
2457 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2459 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2458 if ( incidence ) { 2460 if ( incidence ) {
2459 cancelIncidence(incidence); 2461 cancelIncidence(incidence);
2460 } 2462 }
2461} 2463}
2462 2464
2463 2465
2464void CalendarView::cancelIncidence(Incidence * inc ) 2466void CalendarView::cancelIncidence(Incidence * inc )
2465{ 2467{
2466 inc->setCancelled( ! inc->cancelled() ); 2468 inc->setCancelled( ! inc->cancelled() );
2467 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2469 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2468 updateView(); 2470 updateView();
2469} 2471}
2470void CalendarView::cloneIncidence(Incidence * orgInc ) 2472void CalendarView::cloneIncidence(Incidence * orgInc )
2471{ 2473{
2472 Incidence * newInc = orgInc->clone(); 2474 Incidence * newInc = orgInc->clone();
2473 newInc->recreate(); 2475 newInc->recreate();
2474 2476
2475 if ( newInc->type() == "Todo" ) { 2477 if ( newInc->type() == "Todo" ) {
2476 Todo* t = (Todo*) newInc; 2478 Todo* t = (Todo*) newInc;
2477 mTodoEditor->editTodo( t ); 2479 mTodoEditor->editTodo( t );
2478 showTodoEditor(); 2480 showTodoEditor();
2479 if ( mTodoEditor->exec() ) { 2481 if ( mTodoEditor->exec() ) {
2480 mCalendar->addTodo( t ); 2482 mCalendar->addTodo( t );
2481 updateView(); 2483 updateView();
2482 } else { 2484 } else {
2483 delete t; 2485 delete t;
2484 } 2486 }
2485 } 2487 }
2486 else { 2488 else {
2487 Event* e = (Event*) newInc; 2489 Event* e = (Event*) newInc;
2488 mEventEditor->editEvent( e ); 2490 mEventEditor->editEvent( e );
2489 showEventEditor(); 2491 showEventEditor();
2490 if ( mEventEditor->exec() ) { 2492 if ( mEventEditor->exec() ) {
2491 mCalendar->addEvent( e ); 2493 mCalendar->addEvent( e );
2492 updateView(); 2494 updateView();
2493 } else { 2495 } else {
2494 delete e; 2496 delete e;
2495 } 2497 }
2496 } 2498 }
2497} 2499}
2498 2500
2499void CalendarView::newEvent() 2501void CalendarView::newEvent()
2500{ 2502{
2501 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2503 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2502 KOAgendaView *aView = mViewManager->agendaView(); 2504 KOAgendaView *aView = mViewManager->agendaView();
2503 if (aView) { 2505 if (aView) {
2504 if (aView->selectionStart().isValid()) { 2506 if (aView->selectionStart().isValid()) {
2505 if (aView->selectedIsAllDay()) { 2507 if (aView->selectedIsAllDay()) {
2506 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2508 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2507 } else { 2509 } else {
2508 newEvent(aView->selectionStart(),aView->selectionEnd()); 2510 newEvent(aView->selectionStart(),aView->selectionEnd());
2509 } 2511 }
2510 return; 2512 return;
2511 } 2513 }
2512 } 2514 }
2513 2515
2514 QDate date = mNavigator->selectedDates().first(); 2516 QDate date = mNavigator->selectedDates().first();
2515 QDateTime current = QDateTime::currentDateTime(); 2517 QDateTime current = QDateTime::currentDateTime();
2516 if ( date <= current.date() ) { 2518 if ( date <= current.date() ) {
2517 int hour = current.time().hour() +1; 2519 int hour = current.time().hour() +1;
2518 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2520 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2519 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2521 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2520 } else 2522 } else
2521 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2523 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2522 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2524 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2523 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2525 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2524} 2526}
2525 2527
2526void CalendarView::newEvent(QDateTime fh) 2528void CalendarView::newEvent(QDateTime fh)
2527{ 2529{
2528 newEvent(fh, 2530 newEvent(fh,
2529 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2531 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2530} 2532}
2531 2533
2532void CalendarView::newEvent(QDate dt) 2534void CalendarView::newEvent(QDate dt)
2533{ 2535{
2534 newEvent(QDateTime(dt, QTime(0,0,0)), 2536 newEvent(QDateTime(dt, QTime(0,0,0)),
2535 QDateTime(dt, QTime(0,0,0)), true); 2537 QDateTime(dt, QTime(0,0,0)), true);
2536} 2538}
2537 2539
2538void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2540void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2539{ 2541{
2540 2542
2541 mEventEditor->newEvent(fromHint,toHint,allDay); 2543 mEventEditor->newEvent(fromHint,toHint,allDay);
2542 if ( mFilterView->filtersEnabled() ) { 2544 if ( mFilterView->filtersEnabled() ) {
2543 CalFilter *filter = mFilterView->selectedFilter(); 2545 CalFilter *filter = mFilterView->selectedFilter();
2544 if (filter && filter->showCategories()) { 2546 if (filter && filter->showCategories()) {
2545 mEventEditor->setCategories(filter->categoryList().join(",") ); 2547 mEventEditor->setCategories(filter->categoryList().join(",") );
2546 } 2548 }
2547 if ( filter ) 2549 if ( filter )
2548 mEventEditor->setSecrecy( filter->getSecrecy() ); 2550 mEventEditor->setSecrecy( filter->getSecrecy() );
2549 } 2551 }
2550 showEventEditor(); 2552 showEventEditor();
2551} 2553}
2552void CalendarView::todoAdded(Todo * t) 2554void CalendarView::todoAdded(Todo * t)
2553{ 2555{
2554 2556
2555 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2557 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2556 updateTodoViews(); 2558 updateTodoViews();
2557} 2559}
2558void CalendarView::todoChanged(Todo * t) 2560void CalendarView::todoChanged(Todo * t)
2559{ 2561{
2560 emit todoModified( t, 4 ); 2562 emit todoModified( t, 4 );
2561 // updateTodoViews(); 2563 // updateTodoViews();
2562} 2564}
2563void CalendarView::todoToBeDeleted(Todo *) 2565void CalendarView::todoToBeDeleted(Todo *)
2564{ 2566{
2565 //qDebug("todoToBeDeleted(Todo *) "); 2567 //qDebug("todoToBeDeleted(Todo *) ");
2566 updateTodoViews(); 2568 updateTodoViews();
2567} 2569}
2568void CalendarView::todoDeleted() 2570void CalendarView::todoDeleted()
2569{ 2571{
2570 //qDebug(" todoDeleted()"); 2572 //qDebug(" todoDeleted()");
2571 updateTodoViews(); 2573 updateTodoViews();
2572} 2574}
2573 2575
2574 2576
2575 2577
2576void CalendarView::newTodo() 2578void CalendarView::newTodo()
2577{ 2579{
2578 2580
2579 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2581 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2580 if ( mFilterView->filtersEnabled() ) { 2582 if ( mFilterView->filtersEnabled() ) {
2581 CalFilter *filter = mFilterView->selectedFilter(); 2583 CalFilter *filter = mFilterView->selectedFilter();
2582 if (filter && filter->showCategories()) { 2584 if (filter && filter->showCategories()) {
2583 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2585 mTodoEditor->setCategories(filter->categoryList().join(",") );
2584 } 2586 }
2585 if ( filter ) 2587 if ( filter )
2586 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2588 mTodoEditor->setSecrecy( filter->getSecrecy() );
2587 } 2589 }
2588 showTodoEditor(); 2590 showTodoEditor();
2589} 2591}
2590 2592
2591void CalendarView::newSubTodo() 2593void CalendarView::newSubTodo()
2592{ 2594{
2593 Todo *todo = selectedTodo(); 2595 Todo *todo = selectedTodo();
2594 if ( todo ) newSubTodo( todo ); 2596 if ( todo ) newSubTodo( todo );
2595} 2597}
2596 2598
2597void CalendarView::newSubTodo(Todo *parentEvent) 2599void CalendarView::newSubTodo(Todo *parentEvent)
2598{ 2600{
2599 2601
2600 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2602 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2601 showTodoEditor(); 2603 showTodoEditor();
2602} 2604}
2603 2605
2604void CalendarView::newFloatingEvent() 2606void CalendarView::newFloatingEvent()
2605{ 2607{
2606 DateList tmpList = mNavigator->selectedDates(); 2608 DateList tmpList = mNavigator->selectedDates();
2607 QDate date = tmpList.first(); 2609 QDate date = tmpList.first();
2608 2610
2609 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2611 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2610 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2612 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2611} 2613}
2612 2614
2613 2615
2614void CalendarView::editEvent( Event *event ) 2616void CalendarView::editEvent( Event *event )
2615{ 2617{
2616 2618
2617 if ( !event ) return; 2619 if ( !event ) return;
2618 if ( event->isReadOnly() ) { 2620 if ( event->isReadOnly() ) {
2619 showEvent( event ); 2621 showEvent( event );
2620 return; 2622 return;
2621 } 2623 }
2622 mEventEditor->editEvent( event , mFlagEditDescription); 2624 mEventEditor->editEvent( event , mFlagEditDescription);
2623 showEventEditor(); 2625 showEventEditor();
2624} 2626}
2625void CalendarView::editJournal( Journal *jour ) 2627void CalendarView::editJournal( Journal *jour )
2626{ 2628{
2627 if ( !jour ) return; 2629 if ( !jour ) return;
2628 mDialogManager->hideSearchDialog(); 2630 mDialogManager->hideSearchDialog();
2629 mViewManager->showJournalView(); 2631 mViewManager->showJournalView();
2630 mNavigator->slotDaySelect( jour->dtStart().date() ); 2632 mNavigator->slotDaySelect( jour->dtStart().date() );
2631} 2633}
2632void CalendarView::editTodo( Todo *todo ) 2634void CalendarView::editTodo( Todo *todo )
2633{ 2635{
2634 if ( !todo ) return; 2636 if ( !todo ) return;
2635 2637
2636 if ( todo->isReadOnly() ) { 2638 if ( todo->isReadOnly() ) {
2637 showTodo( todo ); 2639 showTodo( todo );
2638 return; 2640 return;
2639 } 2641 }
2640 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2642 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2641 showTodoEditor(); 2643 showTodoEditor();
2642 2644
2643} 2645}
2644 2646
2645KOEventViewerDialog* CalendarView::getEventViewerDialog() 2647KOEventViewerDialog* CalendarView::getEventViewerDialog()
2646{ 2648{
2647 if ( !mEventViewerDialog ) { 2649 if ( !mEventViewerDialog ) {
2648 mEventViewerDialog = new KOEventViewerDialog(this); 2650 mEventViewerDialog = new KOEventViewerDialog(this);
2649 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2651 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2650 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2652 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2651 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2653 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2652 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2654 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2653 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2655 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2654 viewManager(), SLOT( showAgendaView( bool ) ) ); 2656 viewManager(), SLOT( showAgendaView( bool ) ) );
2655 mEventViewerDialog->resize( 640, 480 ); 2657 mEventViewerDialog->resize( 640, 480 );
2656 2658
2657 } 2659 }
2658 return mEventViewerDialog; 2660 return mEventViewerDialog;
2659} 2661}
2660void CalendarView::showEvent(Event *event) 2662void CalendarView::showEvent(Event *event)
2661{ 2663{
2662 getEventViewerDialog()->setEvent(event); 2664 getEventViewerDialog()->setEvent(event);
2663 getEventViewerDialog()->showMe(); 2665 getEventViewerDialog()->showMe();
2664} 2666}
2665 2667
2666void CalendarView::showTodo(Todo *event) 2668void CalendarView::showTodo(Todo *event)
2667{ 2669{
2668 getEventViewerDialog()->setTodo(event); 2670 getEventViewerDialog()->setTodo(event);
2669 getEventViewerDialog()->showMe(); 2671 getEventViewerDialog()->showMe();
2670} 2672}
2671void CalendarView::showJournal( Journal *jour ) 2673void CalendarView::showJournal( Journal *jour )
2672{ 2674{
2673 getEventViewerDialog()->setJournal(jour); 2675 getEventViewerDialog()->setJournal(jour);
2674 getEventViewerDialog()->showMe(); 2676 getEventViewerDialog()->showMe();
2675 2677
2676} 2678}
2677// void CalendarView::todoModified (Todo *event, int changed) 2679// void CalendarView::todoModified (Todo *event, int changed)
2678// { 2680// {
2679// // if (mDialogList.find (event) != mDialogList.end ()) { 2681// // if (mDialogList.find (event) != mDialogList.end ()) {
2680// // kdDebug() << "Todo modified and open" << endl; 2682// // kdDebug() << "Todo modified and open" << endl;
2681// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2683// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2682// // temp->modified (changed); 2684// // temp->modified (changed);
2683 2685
2684// // } 2686// // }
2685 2687
2686// mViewManager->updateView(); 2688// mViewManager->updateView();
2687// } 2689// }
2688 2690
2689void CalendarView::appointment_show() 2691void CalendarView::appointment_show()
2690{ 2692{
2691 Event *anEvent = 0; 2693 Event *anEvent = 0;
2692 2694
2693 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2695 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2694 2696
2695 if (mViewManager->currentView()->isEventView()) { 2697 if (mViewManager->currentView()->isEventView()) {
2696 if ( incidence && incidence->type() == "Event" ) { 2698 if ( incidence && incidence->type() == "Event" ) {
2697 anEvent = static_cast<Event *>(incidence); 2699 anEvent = static_cast<Event *>(incidence);
2698 } 2700 }
2699 } 2701 }
2700 2702
2701 if (!anEvent) { 2703 if (!anEvent) {
2702 KNotifyClient::beep(); 2704 KNotifyClient::beep();
2703 return; 2705 return;
2704 } 2706 }
2705 2707
2706 showEvent(anEvent); 2708 showEvent(anEvent);
2707} 2709}
2708 2710
2709void CalendarView::appointment_edit() 2711void CalendarView::appointment_edit()
2710{ 2712{
2711 Event *anEvent = 0; 2713 Event *anEvent = 0;
2712 2714
2713 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2715 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2714 2716
2715 if (mViewManager->currentView()->isEventView()) { 2717 if (mViewManager->currentView()->isEventView()) {
2716 if ( incidence && incidence->type() == "Event" ) { 2718 if ( incidence && incidence->type() == "Event" ) {
2717 anEvent = static_cast<Event *>(incidence); 2719 anEvent = static_cast<Event *>(incidence);
2718 } 2720 }
2719 } 2721 }
2720 2722
2721 if (!anEvent) { 2723 if (!anEvent) {
2722 KNotifyClient::beep(); 2724 KNotifyClient::beep();
2723 return; 2725 return;
2724 } 2726 }
2725 2727
2726 editEvent(anEvent); 2728 editEvent(anEvent);
2727} 2729}
2728 2730
2729void CalendarView::appointment_delete() 2731void CalendarView::appointment_delete()
2730{ 2732{
2731 Event *anEvent = 0; 2733 Event *anEvent = 0;
2732 2734
2733 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2735 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2734 2736
2735 if (mViewManager->currentView()->isEventView()) { 2737 if (mViewManager->currentView()->isEventView()) {
2736 if ( incidence && incidence->type() == "Event" ) { 2738 if ( incidence && incidence->type() == "Event" ) {
2737 anEvent = static_cast<Event *>(incidence); 2739 anEvent = static_cast<Event *>(incidence);
2738 } 2740 }
2739 } 2741 }
2740 2742
2741 if (!anEvent) { 2743 if (!anEvent) {
2742 KNotifyClient::beep(); 2744 KNotifyClient::beep();
2743 return; 2745 return;
2744 } 2746 }
2745 2747
2746 deleteEvent(anEvent); 2748 deleteEvent(anEvent);
2747} 2749}
2748 2750
2751void CalendarView::todo_resub( Todo * parent, Todo * sub )
2752{
2753 if (!sub) return;
2754 if (!parent) return;
2755 if ( sub->relatedTo() )
2756 sub->relatedTo()->removeRelation(sub);
2757 sub->setRelatedTo(parent);
2758 sub->setRelatedToUid(parent->uid());
2759 parent->addRelation(sub);
2760 sub->updated();
2761 parent->updated();
2762 setModified(true);
2763 updateView();
2764}
2749void CalendarView::todo_unsub(Todo *anTodo ) 2765void CalendarView::todo_unsub(Todo *anTodo )
2750{ 2766{
2751 // Todo *anTodo = selectedTodo(); 2767 // Todo *anTodo = selectedTodo();
2752 if (!anTodo) return; 2768 if (!anTodo) return;
2753 if (!anTodo->relatedTo()) return; 2769 if (!anTodo->relatedTo()) return;
2754 anTodo->relatedTo()->removeRelation(anTodo); 2770 anTodo->relatedTo()->removeRelation(anTodo);
2755 anTodo->setRelatedTo(0); 2771 anTodo->setRelatedTo(0);
2756 anTodo->updated(); 2772 anTodo->updated();
2757 anTodo->setRelatedToUid(""); 2773 anTodo->setRelatedToUid("");
2758 setModified(true); 2774 setModified(true);
2759 updateView(); 2775 updateView();
2760} 2776}
2761 2777
2762void CalendarView::deleteTodo(Todo *todo) 2778void CalendarView::deleteTodo(Todo *todo)
2763{ 2779{
2764 if (!todo) { 2780 if (!todo) {
2765 KNotifyClient::beep(); 2781 KNotifyClient::beep();
2766 return; 2782 return;
2767 } 2783 }
2768 if (KOPrefs::instance()->mConfirm) { 2784 if (KOPrefs::instance()->mConfirm) {
2769 switch (msgItemDelete()) { 2785 switch (msgItemDelete()) {
2770 case KMessageBox::Continue: // OK 2786 case KMessageBox::Continue: // OK
2771 if (!todo->relations().isEmpty()) { 2787 if (!todo->relations().isEmpty()) {
2772 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2788 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2773 i18n("Delete To-Do")); 2789 i18n("Delete To-Do"));
2774 } else { 2790 } else {
2775 checkExternalId( todo ); 2791 checkExternalId( todo );
2776 calendar()->deleteTodo(todo); 2792 calendar()->deleteTodo(todo);
2777 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2793 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2778 updateView(); 2794 updateView();
2779 } 2795 }
2780 break; 2796 break;
2781 } // switch 2797 } // switch
2782 } else { 2798 } else {
2783 if (!todo->relations().isEmpty()) { 2799 if (!todo->relations().isEmpty()) {
2784 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2800 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2785 i18n("Delete To-Do")); 2801 i18n("Delete To-Do"));
2786 } else { 2802 } else {
2787 checkExternalId( todo ); 2803 checkExternalId( todo );
2788 mCalendar->deleteTodo(todo); 2804 mCalendar->deleteTodo(todo);
2789 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2805 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2790 updateView(); 2806 updateView();
2791 } 2807 }
2792 } 2808 }
2793 emit updateSearchDialog(); 2809 emit updateSearchDialog();
2794} 2810}
2795void CalendarView::deleteJournal(Journal *jour) 2811void CalendarView::deleteJournal(Journal *jour)
2796{ 2812{
2797 if (!jour) { 2813 if (!jour) {
2798 KNotifyClient::beep(); 2814 KNotifyClient::beep();
2799 return; 2815 return;
2800 } 2816 }
2801 if (KOPrefs::instance()->mConfirm) { 2817 if (KOPrefs::instance()->mConfirm) {
2802 switch (msgItemDelete()) { 2818 switch (msgItemDelete()) {
2803 case KMessageBox::Continue: // OK 2819 case KMessageBox::Continue: // OK
2804 calendar()->deleteJournal(jour); 2820 calendar()->deleteJournal(jour);
2805 updateView(); 2821 updateView();
2806 break; 2822 break;
2807 } // switch 2823 } // switch
2808 } else { 2824 } else {
2809 calendar()->deleteJournal(jour);; 2825 calendar()->deleteJournal(jour);;
2810 updateView(); 2826 updateView();
2811 } 2827 }
2812 emit updateSearchDialog(); 2828 emit updateSearchDialog();
2813} 2829}
2814 2830
2815void CalendarView::deleteEvent(Event *anEvent) 2831void CalendarView::deleteEvent(Event *anEvent)
2816{ 2832{
2817 if (!anEvent) { 2833 if (!anEvent) {
2818 KNotifyClient::beep(); 2834 KNotifyClient::beep();
2819 return; 2835 return;
2820 } 2836 }
2821 2837
2822 if (anEvent->recurrence()->doesRecur()) { 2838 if (anEvent->recurrence()->doesRecur()) {
2823 QDate itemDate = mViewManager->currentSelectionDate(); 2839 QDate itemDate = mViewManager->currentSelectionDate();
2824 int km; 2840 int km;
2825 if (!itemDate.isValid()) { 2841 if (!itemDate.isValid()) {
2826 //kdDebug() << "Date Not Valid" << endl; 2842 //kdDebug() << "Date Not Valid" << endl;
2827 if (KOPrefs::instance()->mConfirm) { 2843 if (KOPrefs::instance()->mConfirm) {
2828 km = KMessageBox::warningContinueCancel(this,anEvent->summary() + 2844 km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
2829 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2845 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2830 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2846 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2831 if ( km == KMessageBox::Continue ) 2847 if ( km == KMessageBox::Continue )
2832 km = KMessageBox::No; // No = all below 2848 km = KMessageBox::No; // No = all below
2833 } else 2849 } else
2834 km = KMessageBox::No; 2850 km = KMessageBox::No;
2835 } else { 2851 } else {
2836 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() + 2852 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
2837 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2853 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2838 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2854 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2839 i18n("KO/Pi Confirmation"),i18n("Current"), 2855 i18n("KO/Pi Confirmation"),i18n("Current"),
2840 i18n("All")); 2856 i18n("All"));
2841 } 2857 }
2842 switch(km) { 2858 switch(km) {
2843 2859
2844 case KMessageBox::No: // Continue // all 2860 case KMessageBox::No: // Continue // all
2845 //qDebug("KMessageBox::No "); 2861 //qDebug("KMessageBox::No ");
2846 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2862 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2847 schedule(Scheduler::Cancel,anEvent); 2863 schedule(Scheduler::Cancel,anEvent);
2848 2864
2849 checkExternalId( anEvent); 2865 checkExternalId( anEvent);
2850 mCalendar->deleteEvent(anEvent); 2866 mCalendar->deleteEvent(anEvent);
2851 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2867 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2852 break; 2868 break;
2853 2869
2854 // Disabled because it does not work 2870 // Disabled because it does not work
2855 //#if 0 2871 //#if 0
2856 case KMessageBox::Yes: // just this one 2872 case KMessageBox::Yes: // just this one
2857 //QDate qd = mNavigator->selectedDates().first(); 2873 //QDate qd = mNavigator->selectedDates().first();
2858 //if (!qd.isValid()) { 2874 //if (!qd.isValid()) {
2859 // kdDebug() << "no date selected, or invalid date" << endl; 2875 // kdDebug() << "no date selected, or invalid date" << endl;
2860 // KNotifyClient::beep(); 2876 // KNotifyClient::beep();
2861 // return; 2877 // return;
2862 //} 2878 //}
2863 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2879 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2864 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2880 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2865 anEvent->addExDate(itemDate); 2881 anEvent->addExDate(itemDate);
2866 int duration = anEvent->recurrence()->duration(); 2882 int duration = anEvent->recurrence()->duration();
2867 if ( duration > 0 ) { 2883 if ( duration > 0 ) {
2868 anEvent->recurrence()->setDuration( duration - 1 ); 2884 anEvent->recurrence()->setDuration( duration - 1 );
2869 } 2885 }
2870 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2886 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2871 } 2887 }
2872 break; 2888 break;
2873 //#endif 2889 //#endif
2874 } // switch 2890 } // switch
2875 } else { 2891 } else {
2876 if (KOPrefs::instance()->mConfirm) { 2892 if (KOPrefs::instance()->mConfirm) {
2877 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() + 2893 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
2878 i18n("\nAre you sure you want\nto delete this event?"), 2894 i18n("\nAre you sure you want\nto delete this event?"),
2879 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 2895 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
2880 case KMessageBox::Continue: // OK 2896 case KMessageBox::Continue: // OK
2881 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2897 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2882 schedule(Scheduler::Cancel,anEvent); 2898 schedule(Scheduler::Cancel,anEvent);
2883 checkExternalId( anEvent); 2899 checkExternalId( anEvent);
2884 mCalendar->deleteEvent(anEvent); 2900 mCalendar->deleteEvent(anEvent);
2885 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2901 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2886 break; 2902 break;
2887 } // switch 2903 } // switch
2888 } else { 2904 } else {
2889 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2905 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2890 schedule(Scheduler::Cancel,anEvent); 2906 schedule(Scheduler::Cancel,anEvent);
2891 checkExternalId( anEvent); 2907 checkExternalId( anEvent);
2892 mCalendar->deleteEvent(anEvent); 2908 mCalendar->deleteEvent(anEvent);
2893 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2909 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2894 } 2910 }
2895 } // if-else 2911 } // if-else
2896 emit updateSearchDialog(); 2912 emit updateSearchDialog();
2897} 2913}
2898 2914
2899bool CalendarView::deleteEvent(const QString &uid) 2915bool CalendarView::deleteEvent(const QString &uid)
2900{ 2916{
2901 Event *ev = mCalendar->event(uid); 2917 Event *ev = mCalendar->event(uid);
2902 if (ev) { 2918 if (ev) {
2903 deleteEvent(ev); 2919 deleteEvent(ev);
2904 return true; 2920 return true;
2905 } else { 2921 } else {
2906 return false; 2922 return false;
2907 } 2923 }
2908} 2924}
2909 2925
2910/*****************************************************************************/ 2926/*****************************************************************************/
2911 2927
2912void CalendarView::action_mail() 2928void CalendarView::action_mail()
2913{ 2929{
2914#ifndef KORG_NOMAIL 2930#ifndef KORG_NOMAIL
2915 KOMailClient mailClient; 2931 KOMailClient mailClient;
2916 2932
2917 Incidence *incidence = currentSelection(); 2933 Incidence *incidence = currentSelection();
2918 2934
2919 if (!incidence) { 2935 if (!incidence) {
2920 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2936 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2921 return; 2937 return;
2922 } 2938 }
2923 if(incidence->attendeeCount() == 0 ) { 2939 if(incidence->attendeeCount() == 0 ) {
2924 KMessageBox::sorry(this, 2940 KMessageBox::sorry(this,
2925 i18n("Can't generate mail:\nNo attendees defined.\n")); 2941 i18n("Can't generate mail:\nNo attendees defined.\n"));
2926 return; 2942 return;
2927 } 2943 }
2928 2944
2929 CalendarLocal cal_tmp; 2945 CalendarLocal cal_tmp;
2930 Event *event = 0; 2946 Event *event = 0;
2931 Event *ev = 0; 2947 Event *ev = 0;
2932 if ( incidence && incidence->type() == "Event" ) { 2948 if ( incidence && incidence->type() == "Event" ) {
2933 event = static_cast<Event *>(incidence); 2949 event = static_cast<Event *>(incidence);
2934 ev = new Event(*event); 2950 ev = new Event(*event);
2935 cal_tmp.addEvent(ev); 2951 cal_tmp.addEvent(ev);
2936 } 2952 }
2937 ICalFormat mForm(); 2953 ICalFormat mForm();
2938 QString attachment = mForm.toString( &cal_tmp ); 2954 QString attachment = mForm.toString( &cal_tmp );
2939 if (ev) delete(ev); 2955 if (ev) delete(ev);
2940 2956
2941 mailClient.mailAttendees(currentSelection(), attachment); 2957 mailClient.mailAttendees(currentSelection(), attachment);
2942 2958
2943#endif 2959#endif
2944 2960
2945#if 0 2961#if 0
2946 Event *anEvent = 0; 2962 Event *anEvent = 0;
2947 if (mViewManager->currentView()->isEventView()) { 2963 if (mViewManager->currentView()->isEventView()) {
2948 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 2964 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
2949 } 2965 }
2950 2966
2951 if (!anEvent) { 2967 if (!anEvent) {
2952 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2968 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2953 return; 2969 return;
2954 } 2970 }
2955 if(anEvent->attendeeCount() == 0 ) { 2971 if(anEvent->attendeeCount() == 0 ) {
2956 KMessageBox::sorry(this, 2972 KMessageBox::sorry(this,
2957 i18n("Can't generate mail:\nNo attendees defined.\n")); 2973 i18n("Can't generate mail:\nNo attendees defined.\n"));
2958 return; 2974 return;
2959 } 2975 }
2960 2976
2961 mailobject.emailEvent(anEvent); 2977 mailobject.emailEvent(anEvent);
2962#endif 2978#endif
2963} 2979}
2964 2980
2965 2981
2966void CalendarView::schedule_publish(Incidence *incidence) 2982void CalendarView::schedule_publish(Incidence *incidence)
2967{ 2983{
2968 Event *event = 0; 2984 Event *event = 0;
2969 Todo *todo = 0; 2985 Todo *todo = 0;
2970 2986
2971 if (incidence == 0) { 2987 if (incidence == 0) {
2972 incidence = mViewManager->currentView()->selectedIncidences().first(); 2988 incidence = mViewManager->currentView()->selectedIncidences().first();
2973 if (incidence == 0) { 2989 if (incidence == 0) {
2974 incidence = mTodoList->selectedIncidences().first(); 2990 incidence = mTodoList->selectedIncidences().first();
2975 } 2991 }
2976 } 2992 }
2977 if ( incidence && incidence->type() == "Event" ) { 2993 if ( incidence && incidence->type() == "Event" ) {
2978 event = static_cast<Event *>(incidence); 2994 event = static_cast<Event *>(incidence);
2979 } else { 2995 } else {
2980 if ( incidence && incidence->type() == "Todo" ) { 2996 if ( incidence && incidence->type() == "Todo" ) {
2981 todo = static_cast<Todo *>(incidence); 2997 todo = static_cast<Todo *>(incidence);
2982 } 2998 }
2983 } 2999 }
2984 3000
2985 if (!event && !todo) { 3001 if (!event && !todo) {
2986 KMessageBox::sorry(this,i18n("No event selected.")); 3002 KMessageBox::sorry(this,i18n("No event selected."));
2987 return; 3003 return;
2988 } 3004 }
2989 3005
2990 PublishDialog *publishdlg = new PublishDialog(); 3006 PublishDialog *publishdlg = new PublishDialog();
2991 if (incidence->attendeeCount()>0) { 3007 if (incidence->attendeeCount()>0) {
2992 QPtrList<Attendee> attendees = incidence->attendees(); 3008 QPtrList<Attendee> attendees = incidence->attendees();
2993 attendees.first(); 3009 attendees.first();
2994 while ( attendees.current()!=0 ) { 3010 while ( attendees.current()!=0 ) {
2995 publishdlg->addAttendee(attendees.current()); 3011 publishdlg->addAttendee(attendees.current());
2996 attendees.next(); 3012 attendees.next();
2997 } 3013 }
2998 } 3014 }
2999 bool send = true; 3015 bool send = true;
3000 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 3016 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
3001 if ( publishdlg->exec() != QDialog::Accepted ) 3017 if ( publishdlg->exec() != QDialog::Accepted )
3002 send = false; 3018 send = false;
3003 } 3019 }
3004 if ( send ) { 3020 if ( send ) {
3005 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3021 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3006 if ( event ) { 3022 if ( event ) {
3007 Event *ev = new Event(*event); 3023 Event *ev = new Event(*event);
3008 ev->registerObserver(0); 3024 ev->registerObserver(0);
3009 ev->clearAttendees(); 3025 ev->clearAttendees();
3010 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3026 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3011 delete(ev); 3027 delete(ev);
3012 } 3028 }
3013 } else { 3029 } else {
3014 if ( todo ) { 3030 if ( todo ) {
3015 Todo *ev = new Todo(*todo); 3031 Todo *ev = new Todo(*todo);
3016 ev->registerObserver(0); 3032 ev->registerObserver(0);
3017 ev->clearAttendees(); 3033 ev->clearAttendees();
3018 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3034 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3019 delete(ev); 3035 delete(ev);
3020 } 3036 }
3021 } 3037 }
3022 } 3038 }
3023 } 3039 }
3024 delete publishdlg; 3040 delete publishdlg;
3025} 3041}
3026 3042
3027void CalendarView::schedule_request(Incidence *incidence) 3043void CalendarView::schedule_request(Incidence *incidence)
3028{ 3044{
3029 schedule(Scheduler::Request,incidence); 3045 schedule(Scheduler::Request,incidence);
3030} 3046}
3031 3047
3032void CalendarView::schedule_refresh(Incidence *incidence) 3048void CalendarView::schedule_refresh(Incidence *incidence)
3033{ 3049{
3034 schedule(Scheduler::Refresh,incidence); 3050 schedule(Scheduler::Refresh,incidence);
3035} 3051}
3036 3052
3037void CalendarView::schedule_cancel(Incidence *incidence) 3053void CalendarView::schedule_cancel(Incidence *incidence)
3038{ 3054{
3039 schedule(Scheduler::Cancel,incidence); 3055 schedule(Scheduler::Cancel,incidence);
3040} 3056}
3041 3057
3042void CalendarView::schedule_add(Incidence *incidence) 3058void CalendarView::schedule_add(Incidence *incidence)
3043{ 3059{
3044 schedule(Scheduler::Add,incidence); 3060 schedule(Scheduler::Add,incidence);
3045} 3061}
3046 3062
3047void CalendarView::schedule_reply(Incidence *incidence) 3063void CalendarView::schedule_reply(Incidence *incidence)
3048{ 3064{
3049 schedule(Scheduler::Reply,incidence); 3065 schedule(Scheduler::Reply,incidence);
3050} 3066}
3051 3067
3052void CalendarView::schedule_counter(Incidence *incidence) 3068void CalendarView::schedule_counter(Incidence *incidence)
3053{ 3069{
3054 schedule(Scheduler::Counter,incidence); 3070 schedule(Scheduler::Counter,incidence);
3055} 3071}
3056 3072
3057void CalendarView::schedule_declinecounter(Incidence *incidence) 3073void CalendarView::schedule_declinecounter(Incidence *incidence)
3058{ 3074{
3059 schedule(Scheduler::Declinecounter,incidence); 3075 schedule(Scheduler::Declinecounter,incidence);
3060} 3076}
3061 3077
3062void CalendarView::schedule_publish_freebusy(int daysToPublish) 3078void CalendarView::schedule_publish_freebusy(int daysToPublish)
3063{ 3079{
3064 QDateTime start = QDateTime::currentDateTime(); 3080 QDateTime start = QDateTime::currentDateTime();
3065 QDateTime end = start.addDays(daysToPublish); 3081 QDateTime end = start.addDays(daysToPublish);
3066 3082
3067 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 3083 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
3068 freebusy->setOrganizer(KOPrefs::instance()->email()); 3084 freebusy->setOrganizer(KOPrefs::instance()->email());
3069 3085
3070 3086
3071 PublishDialog *publishdlg = new PublishDialog(); 3087 PublishDialog *publishdlg = new PublishDialog();
3072 if ( publishdlg->exec() == QDialog::Accepted ) { 3088 if ( publishdlg->exec() == QDialog::Accepted ) {
3073 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3089 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3074 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 3090 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
3075 delete(freebusy); 3091 delete(freebusy);
3076 } 3092 }
3077 } 3093 }
3078 delete publishdlg; 3094 delete publishdlg;
3079} 3095}
3080 3096
3081void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 3097void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
3082{ 3098{
3083 Event *event = 0; 3099 Event *event = 0;
3084 Todo *todo = 0; 3100 Todo *todo = 0;
3085 3101
3086 if (incidence == 0) { 3102 if (incidence == 0) {
3087 incidence = mViewManager->currentView()->selectedIncidences().first(); 3103 incidence = mViewManager->currentView()->selectedIncidences().first();
3088 if (incidence == 0) { 3104 if (incidence == 0) {
3089 incidence = mTodoList->selectedIncidences().first(); 3105 incidence = mTodoList->selectedIncidences().first();
3090 } 3106 }
3091 } 3107 }
3092 if ( incidence && incidence->type() == "Event" ) { 3108 if ( incidence && incidence->type() == "Event" ) {
3093 event = static_cast<Event *>(incidence); 3109 event = static_cast<Event *>(incidence);
3094 } 3110 }
3095 if ( incidence && incidence->type() == "Todo" ) { 3111 if ( incidence && incidence->type() == "Todo" ) {
3096 todo = static_cast<Todo *>(incidence); 3112 todo = static_cast<Todo *>(incidence);
3097 } 3113 }
3098 3114
3099 if (!event && !todo) { 3115 if (!event && !todo) {
3100 KMessageBox::sorry(this,i18n("No event selected.")); 3116 KMessageBox::sorry(this,i18n("No event selected."));
3101 return; 3117 return;
3102 } 3118 }
3103 3119
3104 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3120 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3105 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3121 KMessageBox::sorry(this,i18n("The event has no attendees."));
3106 return; 3122 return;
3107 } 3123 }
3108 3124
3109 Event *ev = 0; 3125 Event *ev = 0;
3110 if (event) ev = new Event(*event); 3126 if (event) ev = new Event(*event);
3111 Todo *to = 0; 3127 Todo *to = 0;
3112 if (todo) to = new Todo(*todo); 3128 if (todo) to = new Todo(*todo);
3113 3129
3114 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3130 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3115 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3131 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3116 if (!me) { 3132 if (!me) {
3117 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3133 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3118 return; 3134 return;
3119 } 3135 }
3120 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3136 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3121 StatusDialog *statdlg = new StatusDialog(this); 3137 StatusDialog *statdlg = new StatusDialog(this);
3122 if (!statdlg->exec()==QDialog::Accepted) return; 3138 if (!statdlg->exec()==QDialog::Accepted) return;
3123 me->setStatus( statdlg->status() ); 3139 me->setStatus( statdlg->status() );
3124 delete(statdlg); 3140 delete(statdlg);
3125 } 3141 }
3126 Attendee *menew = new Attendee(*me); 3142 Attendee *menew = new Attendee(*me);
3127 if (ev) { 3143 if (ev) {
3128 ev->clearAttendees(); 3144 ev->clearAttendees();
3129 ev->addAttendee(menew,false); 3145 ev->addAttendee(menew,false);
3130 } else { 3146 } else {
3131 if (to) { 3147 if (to) {
3132 todo->clearAttendees(); 3148 todo->clearAttendees();
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 660cce7..9f56cc8 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,602 +1,603 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#ifndef DESKTOP_VERSION 33#ifndef DESKTOP_VERSION
34#include <qtopia/ir.h> 34#include <qtopia/ir.h>
35#else 35#else
36#define Ir char 36#define Ir char
37#endif 37#endif
38#include <libkcal/calendar.h> 38#include <libkcal/calendar.h>
39#include <libkcal/scheduler.h> 39#include <libkcal/scheduler.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42 42
43#include <korganizer/calendarviewbase.h> 43#include <korganizer/calendarviewbase.h>
44 44
45#include <ksyncmanager.h> 45#include <ksyncmanager.h>
46 46
47class QWidgetStack; 47class QWidgetStack;
48class QSplitter; 48class QSplitter;
49 49
50class CalPrinter; 50class CalPrinter;
51class KOFilterView; 51class KOFilterView;
52class KOViewManager; 52class KOViewManager;
53class KODialogManager; 53class KODialogManager;
54class KOTodoView; 54class KOTodoView;
55class KDateNavigator; 55class KDateNavigator;
56class DateNavigator; 56class DateNavigator;
57class KOIncidenceEditor; 57class KOIncidenceEditor;
58class KDatePicker; 58class KDatePicker;
59class ResourceView; 59class ResourceView;
60class NavigatorBar; 60class NavigatorBar;
61class KOEventEditor; 61class KOEventEditor;
62class KOTodoEditor ; 62class KOTodoEditor ;
63class KOEventViewerDialog; 63class KOEventViewerDialog;
64class KOBeamPrefs; 64class KOBeamPrefs;
65class KSyncProfile; 65class KSyncProfile;
66class AlarmDialog; 66class AlarmDialog;
67class KCal::Attendee; 67class KCal::Attendee;
68 68
69namespace KCal { class FileStorage; } 69namespace KCal { class FileStorage; }
70 70
71using namespace KCal; 71using namespace KCal;
72 72
73/** 73/**
74 This is the main calendar widget. It provides the different vies on t he 74 This is the main calendar widget. It provides the different vies on t he
75 calendar data as well as the date navigator. It also handles synchronisation 75 calendar data as well as the date navigator. It also handles synchronisation
76 of the different views and controls the different dialogs like preferences, 76 of the different views and controls the different dialogs like preferences,
77 event editor, search dialog etc. 77 event editor, search dialog etc.
78 78
79 @short main calendar view widget 79 @short main calendar view widget
80 @author Cornelius Schumacher 80 @author Cornelius Schumacher
81*/ 81*/
82class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 82class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
83{ 83{
84 Q_OBJECT 84 Q_OBJECT
85 public: 85 public:
86 /** 86 /**
87 Constructs a new calendar view widget. 87 Constructs a new calendar view widget.
88 88
89 @param calendar calendar document 89 @param calendar calendar document
90 @param parent parent window 90 @param parent parent window
91 @param name Qt internal widget object name 91 @param name Qt internal widget object name
92 */ 92 */
93 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 93 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
94 const char *name = 0 ); 94 const char *name = 0 );
95 CalendarView( Calendar *calendar, QWidget *parent = 0, 95 CalendarView( Calendar *calendar, QWidget *parent = 0,
96 const char *name = 0 ); 96 const char *name = 0 );
97 virtual ~CalendarView(); 97 virtual ~CalendarView();
98 98
99 Calendar *calendar() { return mCalendar; } 99 Calendar *calendar() { return mCalendar; }
100 100
101 KOViewManager *viewManager(); 101 KOViewManager *viewManager();
102 KODialogManager *dialogManager(); 102 KODialogManager *dialogManager();
103 103
104 QDate startDate(); 104 QDate startDate();
105 QDate endDate(); 105 QDate endDate();
106 106
107 QWidgetStack *viewStack(); 107 QWidgetStack *viewStack();
108 QWidget *leftFrame(); 108 QWidget *leftFrame();
109 NavigatorBar *navigatorBar(); 109 NavigatorBar *navigatorBar();
110 110
111 DateNavigator *dateNavigator(); 111 DateNavigator *dateNavigator();
112 KDateNavigator *dateNavigatorWidget(); 112 KDateNavigator *dateNavigatorWidget();
113 113
114 void addView(KOrg::BaseView *); 114 void addView(KOrg::BaseView *);
115 void showView(KOrg::BaseView *); 115 void showView(KOrg::BaseView *);
116 KOEventViewerDialog* getEventViewerDialog(); 116 KOEventViewerDialog* getEventViewerDialog();
117 Incidence *currentSelection(); 117 Incidence *currentSelection();
118 118
119 signals: 119 signals:
120 /** This todo has been modified */ 120 /** This todo has been modified */
121 void todoModified(Todo *, int); 121 void todoModified(Todo *, int);
122 122
123 /** when change is made to options dialog, the topwidget will catch this 123 /** when change is made to options dialog, the topwidget will catch this
124 * and emit this signal which notifies all widgets which have registered 124 * and emit this signal which notifies all widgets which have registered
125 * for notification to update their settings. */ 125 * for notification to update their settings. */
126 void configChanged(); 126 void configChanged();
127 /** emitted when the topwidget is closing down, so that any attached 127 /** emitted when the topwidget is closing down, so that any attached
128 child windows can also close. */ 128 child windows can also close. */
129 void closingDown(); 129 void closingDown();
130 /** emitted right before we die */ 130 /** emitted right before we die */
131 void closed(QWidget *); 131 void closed(QWidget *);
132 132
133 /** Emitted when state of modified flag changes */ 133 /** Emitted when state of modified flag changes */
134 void modifiedChanged(bool); 134 void modifiedChanged(bool);
135 void signalmodified(); 135 void signalmodified();
136 136
137 /** Emitted when state of read-only flag changes */ 137 /** Emitted when state of read-only flag changes */
138 void readOnlyChanged(bool); 138 void readOnlyChanged(bool);
139 139
140 /** Emitted when the unit of navigation changes */ 140 /** Emitted when the unit of navigation changes */
141 void changeNavStringPrev(const QString &); 141 void changeNavStringPrev(const QString &);
142 void changeNavStringNext(const QString &); 142 void changeNavStringNext(const QString &);
143 143
144 /** Emitted when state of events selection has changed and user is organizer*/ 144 /** Emitted when state of events selection has changed and user is organizer*/
145 void organizerEventsSelected(bool); 145 void organizerEventsSelected(bool);
146 /** Emitted when state of events selection has changed and user is attendee*/ 146 /** Emitted when state of events selection has changed and user is attendee*/
147 void groupEventsSelected(bool); 147 void groupEventsSelected(bool);
148 /** 148 /**
149 Emitted when an incidence gets selected. If the selection is cleared the 149 Emitted when an incidence gets selected. If the selection is cleared the
150 signal is emitted with 0 as argument. 150 signal is emitted with 0 as argument.
151 */ 151 */
152 void incidenceSelected( Incidence * ); 152 void incidenceSelected( Incidence * );
153 /** Emitted, when a todoitem is selected or deselected. */ 153 /** Emitted, when a todoitem is selected or deselected. */
154 void todoSelected( bool ); 154 void todoSelected( bool );
155 155
156 /** 156 /**
157 Emitted, when clipboard content changes. Parameter indicates if paste 157 Emitted, when clipboard content changes. Parameter indicates if paste
158 is possible or not. 158 is possible or not.
159 */ 159 */
160 void pasteEnabled(bool); 160 void pasteEnabled(bool);
161 161
162 /** Emitted, when the number of incoming messages has changed. */ 162 /** Emitted, when the number of incoming messages has changed. */
163 void numIncomingChanged(int); 163 void numIncomingChanged(int);
164 164
165 /** Emitted, when the number of outgoing messages has changed. */ 165 /** Emitted, when the number of outgoing messages has changed. */
166 void numOutgoingChanged(int); 166 void numOutgoingChanged(int);
167 167
168 /** Send status message, which can e.g. be displayed in the status bar. */ 168 /** Send status message, which can e.g. be displayed in the status bar. */
169 void statusMessage(const QString &); 169 void statusMessage(const QString &);
170 170
171 void calendarViewExpanded( bool ); 171 void calendarViewExpanded( bool );
172 void updateSearchDialog(); 172 void updateSearchDialog();
173 173
174 174
175 public slots: 175 public slots:
176 void showOpenError(); 176 void showOpenError();
177 void watchSavedFile(); 177 void watchSavedFile();
178 void recheckTimerAlarm(); 178 void recheckTimerAlarm();
179 void checkNextTimerAlarm(); 179 void checkNextTimerAlarm();
180 void addAlarm(const QDateTime &qdt, const QString &noti ); 180 void addAlarm(const QDateTime &qdt, const QString &noti );
181 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 181 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
182 void removeAlarm(const QDateTime &qdt, const QString &noti ); 182 void removeAlarm(const QDateTime &qdt, const QString &noti );
183 183
184 /** options dialog made a changed to the configuration. we catch this 184 /** options dialog made a changed to the configuration. we catch this
185 * and notify all widgets which need to update their configuration. */ 185 * and notify all widgets which need to update their configuration. */
186 void updateConfig(); 186 void updateConfig();
187 187
188 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 188 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
189 const QStringList& anniversaryList, const QStringList& realNameList, 189 const QStringList& anniversaryList, const QStringList& realNameList,
190 const QStringList& emailList, const QStringList& assembledNameList, 190 const QStringList& emailList, const QStringList& assembledNameList,
191 const QStringList& uidList); 191 const QStringList& uidList);
192 192
193 /** 193 /**
194 Load calendar from file \a filename. If \a merge is true, load 194 Load calendar from file \a filename. If \a merge is true, load
195 calendar into existing one, if it is false, clear calendar, before 195 calendar into existing one, if it is false, clear calendar, before
196 loading. Return true, if calendar could be successfully loaded. 196 loading. Return true, if calendar could be successfully loaded.
197 */ 197 */
198 bool openCalendar(QString filename, bool merge=false); 198 bool openCalendar(QString filename, bool merge=false);
199 bool syncCalendar(QString filename,int mode = 0 ); 199 bool syncCalendar(QString filename,int mode = 0 );
200 200
201 /** 201 /**
202 Save calendar data to file. Return true if calendar could be 202 Save calendar data to file. Return true if calendar could be
203 successfully saved. 203 successfully saved.
204 */ 204 */
205 bool saveCalendar(QString filename); 205 bool saveCalendar(QString filename);
206 206
207 /** 207 /**
208 Close calendar. Clear calendar data and reset views to display an empty 208 Close calendar. Clear calendar data and reset views to display an empty
209 calendar. 209 calendar.
210 */ 210 */
211 void closeCalendar(); 211 void closeCalendar();
212 212
213 /** Archive old events of calendar */ 213 /** Archive old events of calendar */
214 void archiveCalendar(); 214 void archiveCalendar();
215 215
216 void showIncidence(); 216 void showIncidence();
217 void editIncidence(); 217 void editIncidence();
218 void editIncidenceDescription(); 218 void editIncidenceDescription();
219 void deleteIncidence(); 219 void deleteIncidence();
220 void cloneIncidence(); 220 void cloneIncidence();
221 void moveIncidence(); 221 void moveIncidence();
222 void beamIncidence(); 222 void beamIncidence();
223 void toggleCancelIncidence(); 223 void toggleCancelIncidence();
224 224
225 /** create an editeventwin with supplied date/time, and if bool is true, 225 /** create an editeventwin with supplied date/time, and if bool is true,
226 * make the event take all day. */ 226 * make the event take all day. */
227 void newEvent(QDateTime, QDateTime, bool allDay = false); 227 void newEvent(QDateTime, QDateTime, bool allDay = false);
228 void newEvent(QDateTime fh); 228 void newEvent(QDateTime fh);
229 void newEvent(QDate dt); 229 void newEvent(QDate dt);
230 /** create new event without having a date hint. Takes current date as 230 /** create new event without having a date hint. Takes current date as
231 default hint. */ 231 default hint. */
232 void newEvent(); 232 void newEvent();
233 void newFloatingEvent(); 233 void newFloatingEvent();
234 234
235 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 235 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
236 void showIncidence(Incidence *); 236 void showIncidence(Incidence *);
237 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 237 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
238 void editIncidence(Incidence *); 238 void editIncidence(Incidence *);
239 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 239 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
240 void deleteIncidence(Incidence *); 240 void deleteIncidence(Incidence *);
241 void cloneIncidence(Incidence *); 241 void cloneIncidence(Incidence *);
242 void cancelIncidence(Incidence *); 242 void cancelIncidence(Incidence *);
243 /** Create an editor for the supplied event. */ 243 /** Create an editor for the supplied event. */
244 void editEvent(Event *); 244 void editEvent(Event *);
245 /** Delete the supplied event. */ 245 /** Delete the supplied event. */
246 void deleteEvent(Event *); 246 void deleteEvent(Event *);
247 /** Delete the event with the given unique ID. Returns false, if event wasn't 247 /** Delete the event with the given unique ID. Returns false, if event wasn't
248 found. */ 248 found. */
249 bool deleteEvent(const QString &uid); 249 bool deleteEvent(const QString &uid);
250 /** Create a read-only viewer dialog for the supplied event. */ 250 /** Create a read-only viewer dialog for the supplied event. */
251 void showEvent(Event *); 251 void showEvent(Event *);
252 252
253 void editJournal(Journal *); 253 void editJournal(Journal *);
254 void showJournal(Journal *); 254 void showJournal(Journal *);
255 void deleteJournal(Journal *); 255 void deleteJournal(Journal *);
256 /** Create an editor dialog for a todo */ 256 /** Create an editor dialog for a todo */
257 void editTodo(Todo *); 257 void editTodo(Todo *);
258 /** Create a read-only viewer dialog for the supplied todo */ 258 /** Create a read-only viewer dialog for the supplied todo */
259 void showTodo(Todo *); 259 void showTodo(Todo *);
260 /** create new todo */ 260 /** create new todo */
261 void newTodo(); 261 void newTodo();
262 /** create new todo with a parent todo */ 262 /** create new todo with a parent todo */
263 void newSubTodo(); 263 void newSubTodo();
264 /** create new todo with a parent todo */ 264 /** create new todo with a parent todo */
265 void newSubTodo(Todo *); 265 void newSubTodo(Todo *);
266 /** Delete todo */ 266 /** Delete todo */
267 void deleteTodo(Todo *); 267 void deleteTodo(Todo *);
268 268
269 269
270 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 270 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
271 * emitted as result. */ 271 * emitted as result. */
272 void checkClipboard(); 272 void checkClipboard();
273 273
274 /** using the KConfig associated with the kapp variable, read in the 274 /** using the KConfig associated with the kapp variable, read in the
275 * settings from the config file. 275 * settings from the config file.
276 */ 276 */
277 void readSettings(); 277 void readSettings();
278 278
279 /** write current state to config file. */ 279 /** write current state to config file. */
280 void writeSettings(); 280 void writeSettings();
281 281
282 /** read settings for calendar filters */ 282 /** read settings for calendar filters */
283 void readFilterSettings(KConfig *config); 283 void readFilterSettings(KConfig *config);
284 284
285 /** write settings for calendar filters */ 285 /** write settings for calendar filters */
286 void writeFilterSettings(KConfig *config); 286 void writeFilterSettings(KConfig *config);
287 287
288 /** passes on the message that an event has changed to the currently 288 /** passes on the message that an event has changed to the currently
289 * activated view so that it can make appropriate display changes. */ 289 * activated view so that it can make appropriate display changes. */
290 void changeEventDisplay(Event *, int); 290 void changeEventDisplay(Event *, int);
291 void changeIncidenceDisplay(Incidence *, int); 291 void changeIncidenceDisplay(Incidence *, int);
292 void changeTodoDisplay(Todo *, int); 292 void changeTodoDisplay(Todo *, int);
293 293
294 void eventAdded(Event *); 294 void eventAdded(Event *);
295 void eventChanged(Event *); 295 void eventChanged(Event *);
296 void eventToBeDeleted(Event *); 296 void eventToBeDeleted(Event *);
297 void eventDeleted(); 297 void eventDeleted();
298 298
299 void todoAdded(Todo *); 299 void todoAdded(Todo *);
300 void todoChanged(Todo *); 300 void todoChanged(Todo *);
301 void todoToBeDeleted(Todo *); 301 void todoToBeDeleted(Todo *);
302 void todoDeleted(); 302 void todoDeleted();
303 303
304 void updateView(const QDate &start, const QDate &end); 304 void updateView(const QDate &start, const QDate &end);
305 void updateView(); 305 void updateView();
306 306
307 /** Full update of visible todo views */ 307 /** Full update of visible todo views */
308 void updateTodoViews(); 308 void updateTodoViews();
309 309
310 void updateUnmanagedViews(); 310 void updateUnmanagedViews();
311 311
312 /** cut the current appointment to the clipboard */ 312 /** cut the current appointment to the clipboard */
313 void edit_cut(); 313 void edit_cut();
314 314
315 /** copy the current appointment(s) to the clipboard */ 315 /** copy the current appointment(s) to the clipboard */
316 void edit_copy(); 316 void edit_copy();
317 317
318 /** paste the current vobject(s) in the clipboard buffer into calendar */ 318 /** paste the current vobject(s) in the clipboard buffer into calendar */
319 void edit_paste(); 319 void edit_paste();
320 320
321 /** edit viewing and configuration options. */ 321 /** edit viewing and configuration options. */
322 void edit_options(); 322 void edit_options();
323 /** 323 /**
324 Functions for printing, previewing a print, and setting up printing 324 Functions for printing, previewing a print, and setting up printing
325 parameters. 325 parameters.
326 */ 326 */
327 void print(); 327 void print();
328 void printSetup(); 328 void printSetup();
329 void printPreview(); 329 void printPreview();
330 330
331 /** Export as iCalendar file */ 331 /** Export as iCalendar file */
332 void exportICalendar(); 332 void exportICalendar();
333 333
334 /** Export as vCalendar file */ 334 /** Export as vCalendar file */
335 bool exportVCalendar( QString fn); 335 bool exportVCalendar( QString fn);
336 336
337 /** pop up a dialog to show an existing appointment. */ 337 /** pop up a dialog to show an existing appointment. */
338 void appointment_show(); 338 void appointment_show();
339 /** 339 /**
340 * pop up an Appointment Dialog to edit an existing appointment.Get 340 * pop up an Appointment Dialog to edit an existing appointment.Get
341 * information on the appointment from the list of unique IDs that is 341 * information on the appointment from the list of unique IDs that is
342 * currently in the View, called currIds. 342 * currently in the View, called currIds.
343 */ 343 */
344 void appointment_edit(); 344 void appointment_edit();
345 /** 345 /**
346 * pop up dialog confirming deletion of currently selected event in the 346 * pop up dialog confirming deletion of currently selected event in the
347 * View. 347 * View.
348 */ 348 */
349 void appointment_delete(); 349 void appointment_delete();
350 350
351 /** mails the currently selected event to a particular user as a vCalendar 351 /** mails the currently selected event to a particular user as a vCalendar
352 attachment. */ 352 attachment. */
353 void action_mail(); 353 void action_mail();
354 354
355 /* frees a subtodo from it's relation */ 355 /* frees a subtodo from it's relation */
356 void todo_unsub( Todo * ); 356 void todo_unsub( Todo * );
357 void todo_resub( Todo * parent, Todo * sub );
357 358
358 /** Take ownership of selected event. */ 359 /** Take ownership of selected event. */
359 void takeOverEvent(); 360 void takeOverEvent();
360 361
361 /** Take ownership of all events in calendar. */ 362 /** Take ownership of all events in calendar. */
362 void takeOverCalendar(); 363 void takeOverCalendar();
363 364
364 /** query whether or not the calendar is "dirty". */ 365 /** query whether or not the calendar is "dirty". */
365 bool isModified(); 366 bool isModified();
366 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 367 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
367 void setModified(bool modified=true); 368 void setModified(bool modified=true);
368 369
369 /** query if the calendar is read-only. */ 370 /** query if the calendar is read-only. */
370 bool isReadOnly(); 371 bool isReadOnly();
371 /** set state of calendar to read-only */ 372 /** set state of calendar to read-only */
372 void setReadOnly(bool readOnly=true); 373 void setReadOnly(bool readOnly=true);
373 374
374 void eventUpdated(Incidence *); 375 void eventUpdated(Incidence *);
375 376
376 /* iTIP scheduling actions */ 377 /* iTIP scheduling actions */
377 void schedule_publish(Incidence *incidence = 0); 378 void schedule_publish(Incidence *incidence = 0);
378 void schedule_request(Incidence *incidence = 0); 379 void schedule_request(Incidence *incidence = 0);
379 void schedule_refresh(Incidence *incidence = 0); 380 void schedule_refresh(Incidence *incidence = 0);
380 void schedule_cancel(Incidence *incidence = 0); 381 void schedule_cancel(Incidence *incidence = 0);
381 void schedule_add(Incidence *incidence = 0); 382 void schedule_add(Incidence *incidence = 0);
382 void schedule_reply(Incidence *incidence = 0); 383 void schedule_reply(Incidence *incidence = 0);
383 void schedule_counter(Incidence *incidence = 0); 384 void schedule_counter(Incidence *incidence = 0);
384 void schedule_declinecounter(Incidence *incidence = 0); 385 void schedule_declinecounter(Incidence *incidence = 0);
385 void schedule_publish_freebusy(int daysToPublish = 30); 386 void schedule_publish_freebusy(int daysToPublish = 30);
386 387
387 void openAddressbook(); 388 void openAddressbook();
388 389
389 void editFilters(); 390 void editFilters();
390 void toggleFilerEnabled(); 391 void toggleFilerEnabled();
391 QPtrList<CalFilter> filters(); 392 QPtrList<CalFilter> filters();
392 void toggleFilter(); 393 void toggleFilter();
393 void showFilter(bool visible); 394 void showFilter(bool visible);
394 void updateFilter(); 395 void updateFilter();
395 void filterEdited(); 396 void filterEdited();
396 void selectFilter( int ); 397 void selectFilter( int );
397 KOFilterView *filterView(); 398 KOFilterView *filterView();
398 399
399 void showIntro(); 400 void showIntro();
400 401
401 /** Move the curdatepient view date to today */ 402 /** Move the curdatepient view date to today */
402 void goToday(); 403 void goToday();
403 404
404 /** Move to the next date(s) in the current view */ 405 /** Move to the next date(s) in the current view */
405 void goNext(); 406 void goNext();
406 407
407 /** Move to the previous date(s) in the current view */ 408 /** Move to the previous date(s) in the current view */
408 void goPrevious(); 409 void goPrevious();
409 /** Move to the next date(s) in the current view */ 410 /** Move to the next date(s) in the current view */
410 void goNextMonth(); 411 void goNextMonth();
411 412
412 /** Move to the previous date(s) in the current view */ 413 /** Move to the previous date(s) in the current view */
413 void goPreviousMonth(); 414 void goPreviousMonth();
414 415
415 void toggleExpand(); 416 void toggleExpand();
416 void toggleDateNavigatorWidget(); 417 void toggleDateNavigatorWidget();
417 void toggleAllDaySize(); 418 void toggleAllDaySize();
418 void dialogClosing(Incidence *); 419 void dialogClosing(Incidence *);
419 420
420 /** Look for new messages in the inbox */ 421 /** Look for new messages in the inbox */
421 void lookForIncomingMessages(); 422 void lookForIncomingMessages();
422 /** Look for new messages in the outbox */ 423 /** Look for new messages in the outbox */
423 void lookForOutgoingMessages(); 424 void lookForOutgoingMessages();
424 425
425 void processMainViewSelection( Incidence * ); 426 void processMainViewSelection( Incidence * );
426 void processTodoListSelection( Incidence * ); 427 void processTodoListSelection( Incidence * );
427 428
428 void processIncidenceSelection( Incidence * ); 429 void processIncidenceSelection( Incidence * );
429 430
430 void purgeCompleted(); 431 void purgeCompleted();
431 bool removeCompletedSubTodos( Todo* ); 432 bool removeCompletedSubTodos( Todo* );
432 void slotCalendarChanged(); 433 void slotCalendarChanged();
433 bool importBday(); 434 bool importBday();
434 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 435 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
435 bool importQtopia( const QString &categoriesFile, 436 bool importQtopia( const QString &categoriesFile,
436 const QString &datebookFile, 437 const QString &datebookFile,
437 const QString &tasklistFile ); 438 const QString &tasklistFile );
438 void syncExternal( int mode ); 439 void syncExternal( int mode );
439 void slotSelectPickerDate( QDate ) ; 440 void slotSelectPickerDate( QDate ) ;
440 void showDatePicker( ) ; 441 void showDatePicker( ) ;
441 void moveIncidence(Incidence *) ; 442 void moveIncidence(Incidence *) ;
442 void beamIncidence(Incidence *) ; 443 void beamIncidence(Incidence *) ;
443 void beamCalendar() ; 444 void beamCalendar() ;
444 void beamFilteredCalendar() ; 445 void beamFilteredCalendar() ;
445 void beamIncidenceList(QPtrList<Incidence>) ; 446 void beamIncidenceList(QPtrList<Incidence>) ;
446 void manageCategories(); 447 void manageCategories();
447 int addCategories(); 448 int addCategories();
448 void removeCategories(); 449 void removeCategories();
449 void setSyncDevice( QString ); 450 void setSyncDevice( QString );
450 void setSyncName( QString ); 451 void setSyncName( QString );
451 protected slots: 452 protected slots:
452 void timerAlarm(); 453 void timerAlarm();
453 void suspendAlarm(); 454 void suspendAlarm();
454 void beamDone( Ir *ir ); 455 void beamDone( Ir *ir );
455 /** Select a view or adapt the current view to display the specified dates. */ 456 /** Select a view or adapt the current view to display the specified dates. */
456 void showDates( const KCal::DateList & ); 457 void showDates( const KCal::DateList & );
457 void selectWeekNum ( int ); 458 void selectWeekNum ( int );
458 459
459 public: 460 public:
460 // show a standard warning 461 // show a standard warning
461 // returns KMsgBox::yesNoCancel() 462 // returns KMsgBox::yesNoCancel()
462 int msgCalModified(); 463 int msgCalModified();
463 virtual bool sync(KSyncManager* manager, QString filename, int mode); 464 virtual bool sync(KSyncManager* manager, QString filename, int mode);
464 465
465 virtual bool syncExternal(KSyncManager* manager, QString resource); 466 virtual bool syncExternal(KSyncManager* manager, QString resource);
466 void setSyncManager(KSyncManager* manager); 467 void setSyncManager(KSyncManager* manager);
467 void setLoadedFileVersion(QDateTime); 468 void setLoadedFileVersion(QDateTime);
468 bool checkFileVersion(QString fn); 469 bool checkFileVersion(QString fn);
469 bool checkFileChanged(QString fn); 470 bool checkFileChanged(QString fn);
470 Event* getLastSyncEvent(); 471 Event* getLastSyncEvent();
471 /** Adapt navigation units correpsonding to step size of navigation of the 472 /** Adapt navigation units correpsonding to step size of navigation of the
472 * current view. 473 * current view.
473 */ 474 */
474 void adaptNavigationUnits(); 475 void adaptNavigationUnits();
475 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 476 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
476 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 477 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
477 //Attendee* getYourAttendee(Event *event); 478 //Attendee* getYourAttendee(Event *event);
478 protected: 479 protected:
479 void schedule(Scheduler::Method, Incidence *incidence = 0); 480 void schedule(Scheduler::Method, Incidence *incidence = 0);
480 481
481 // returns KMsgBox::OKCandel() 482 // returns KMsgBox::OKCandel()
482 int msgItemDelete(); 483 int msgItemDelete();
483 void showEventEditor(); 484 void showEventEditor();
484 void showTodoEditor(); 485 void showTodoEditor();
485 void writeLocale(); 486 void writeLocale();
486 Todo *selectedTodo(); 487 Todo *selectedTodo();
487 488
488 private: 489 private:
489 KSyncManager* mSyncManager; 490 KSyncManager* mSyncManager;
490 AlarmDialog * mAlarmDialog; 491 AlarmDialog * mAlarmDialog;
491 QString mAlarmNotification; 492 QString mAlarmNotification;
492 QString mSuspendAlarmNotification; 493 QString mSuspendAlarmNotification;
493 QTimer* mSuspendTimer; 494 QTimer* mSuspendTimer;
494 QTimer* mAlarmTimer; 495 QTimer* mAlarmTimer;
495 QTimer* mRecheckAlarmTimer; 496 QTimer* mRecheckAlarmTimer;
496 void computeAlarm( QString ); 497 void computeAlarm( QString );
497 void startAlarm( QString, QString ); 498 void startAlarm( QString, QString );
498 void setSyncEventsReadOnly(); 499 void setSyncEventsReadOnly();
499 500
500 QDateTime loadedFileVersion; 501 QDateTime loadedFileVersion;
501 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 502 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
502 void checkExternalId( Incidence * inc ); 503 void checkExternalId( Incidence * inc );
503 int mGlobalSyncMode; 504 int mGlobalSyncMode;
504 QString mCurrentSyncDevice; 505 QString mCurrentSyncDevice;
505 QString mCurrentSyncName; 506 QString mCurrentSyncName;
506 KOBeamPrefs* beamDialog; 507 KOBeamPrefs* beamDialog;
507 void init(); 508 void init();
508 int mDatePickerMode; 509 int mDatePickerMode;
509 bool mFlagEditDescription; 510 bool mFlagEditDescription;
510 QDateTime mLastCalendarSync; 511 QDateTime mLastCalendarSync;
511 void createPrinter(); 512 void createPrinter();
512 513
513 void calendarModified( bool, Calendar * ); 514 void calendarModified( bool, Calendar * );
514 515
515 CalPrinter *mCalPrinter; 516 CalPrinter *mCalPrinter;
516 517
517 QSplitter *mPanner; 518 QSplitter *mPanner;
518 QSplitter *mLeftSplitter; 519 QSplitter *mLeftSplitter;
519 QWidget *mLeftFrame; 520 QWidget *mLeftFrame;
520 QWidgetStack *mRightFrame; 521 QWidgetStack *mRightFrame;
521 522
522 KDatePicker* mDatePicker; 523 KDatePicker* mDatePicker;
523 QVBox* mDateFrame; 524 QVBox* mDateFrame;
524 NavigatorBar *mNavigatorBar; 525 NavigatorBar *mNavigatorBar;
525 526
526 KDateNavigator *mDateNavigator; // widget showing small month view. 527 KDateNavigator *mDateNavigator; // widget showing small month view.
527 528
528 KOFilterView *mFilterView; 529 KOFilterView *mFilterView;
529 530
530 ResourceView *mResourceView; 531 ResourceView *mResourceView;
531 532
532 // calendar object for this viewing instance 533 // calendar object for this viewing instance
533 Calendar *mCalendar; 534 Calendar *mCalendar;
534 535
535 CalendarResourceManager *mResourceManager; 536 CalendarResourceManager *mResourceManager;
536 537
537 FileStorage *mStorage; 538 FileStorage *mStorage;
538 539
539 DateNavigator *mNavigator; 540 DateNavigator *mNavigator;
540 541
541 KOViewManager *mViewManager; 542 KOViewManager *mViewManager;
542 KODialogManager *mDialogManager; 543 KODialogManager *mDialogManager;
543 544
544 // Calendar filters 545 // Calendar filters
545 QPtrList<CalFilter> mFilters; 546 QPtrList<CalFilter> mFilters;
546 547
547 // various housekeeping variables. 548 // various housekeeping variables.
548 bool mModified; // flag indicating if calendar is modified 549 bool mModified; // flag indicating if calendar is modified
549 bool mReadOnly; // flag indicating if calendar is read-only 550 bool mReadOnly; // flag indicating if calendar is read-only
550 QDate mSaveSingleDate; 551 QDate mSaveSingleDate;
551 552
552 Incidence *mSelectedIncidence; 553 Incidence *mSelectedIncidence;
553 Incidence *mMoveIncidence; 554 Incidence *mMoveIncidence;
554 KOTodoView *mTodoList; 555 KOTodoView *mTodoList;
555 KOEventEditor * mEventEditor; 556 KOEventEditor * mEventEditor;
556 KOTodoEditor * mTodoEditor; 557 KOTodoEditor * mTodoEditor;
557 KOEventViewerDialog * mEventViewerDialog; 558 KOEventViewerDialog * mEventViewerDialog;
558 void keyPressEvent ( QKeyEvent *e) ; 559 void keyPressEvent ( QKeyEvent *e) ;
559 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 560 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
560}; 561};
561 562
562 563
563class CalendarViewVisitor : public Incidence::Visitor 564class CalendarViewVisitor : public Incidence::Visitor
564{ 565{
565 public: 566 public:
566 CalendarViewVisitor() : mView( 0 ) {} 567 CalendarViewVisitor() : mView( 0 ) {}
567 568
568 bool act( Incidence *incidence, CalendarView *view ) 569 bool act( Incidence *incidence, CalendarView *view )
569 { 570 {
570 mView = view; 571 mView = view;
571 return incidence->accept( *this ); 572 return incidence->accept( *this );
572 } 573 }
573 574
574 protected: 575 protected:
575 CalendarView *mView; 576 CalendarView *mView;
576}; 577};
577 578
578class ShowIncidenceVisitor : public CalendarViewVisitor 579class ShowIncidenceVisitor : public CalendarViewVisitor
579{ 580{
580 protected: 581 protected:
581 bool visit( Event *event ) { mView->showEvent( event ); return true; } 582 bool visit( Event *event ) { mView->showEvent( event ); return true; }
582 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 583 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
583 bool visit( Journal * j ) { mView->showJournal( j );return true; } 584 bool visit( Journal * j ) { mView->showJournal( j );return true; }
584}; 585};
585 586
586class EditIncidenceVisitor : public CalendarViewVisitor 587class EditIncidenceVisitor : public CalendarViewVisitor
587{ 588{
588 protected: 589 protected:
589 bool visit( Event *event ) { mView->editEvent( event ); return true; } 590 bool visit( Event *event ) { mView->editEvent( event ); return true; }
590 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 591 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
591 bool visit( Journal *j ) { mView->editJournal( j); return true; } 592 bool visit( Journal *j ) { mView->editJournal( j); return true; }
592}; 593};
593 594
594class DeleteIncidenceVisitor : public CalendarViewVisitor 595class DeleteIncidenceVisitor : public CalendarViewVisitor
595{ 596{
596 protected: 597 protected:
597 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 598 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
598 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 599 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
599 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 600 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
600}; 601};
601 602
602#endif 603#endif
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index ca5eadd..a8143a0 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1,1036 +1,1116 @@
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 mName = QString ( name ); 60 mName = QString ( name );
61 mCalendar = calendar; 61 mCalendar = calendar;
62#ifndef DESKTOP_VERSION 62#ifndef DESKTOP_VERSION
63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
64#endif 64#endif
65 mOldCurrent = 0; 65 mOldCurrent = 0;
66 mMousePressed = false; 66 mMousePressed = false;
67 67
68 setAcceptDrops(true); 68 setAcceptDrops(true);
69 viewport()->setAcceptDrops(true); 69 viewport()->setAcceptDrops(true);
70 int size = 16; 70 int size = 16;
71 if (qApp->desktop()->width() < 300 ) 71 if (qApp->desktop()->width() < 300 )
72 size = 12; 72 size = 12;
73 setTreeStepSize( size + 6 ); 73 setTreeStepSize( size + 6 );
74 74
75} 75}
76 76
77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
78{ 78{
79#ifndef KORG_NODND 79#ifndef KORG_NODND
80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
82 !QTextDrag::canDecode( e ) ) { 82 !QTextDrag::canDecode( e ) ) {
83 e->ignore(); 83 e->ignore();
84 return; 84 return;
85 } 85 }
86 86
87 mOldCurrent = currentItem(); 87 mOldCurrent = currentItem();
88#endif 88#endif
89} 89}
90 90
91 91
92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
93{ 93{
94#ifndef KORG_NODND 94#ifndef KORG_NODND
95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
96 96
97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
98 !QTextDrag::canDecode( e ) ) { 98 !QTextDrag::canDecode( e ) ) {
99 e->ignore(); 99 e->ignore();
100 return; 100 return;
101 } 101 }
102 102
103 e->accept(); 103 e->accept();
104#endif 104#endif
105} 105}
106 106
107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
108{ 108{
109#ifndef KORG_NODND 109#ifndef KORG_NODND
110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
111 111
112 setCurrentItem(mOldCurrent); 112 setCurrentItem(mOldCurrent);
113 setSelected(mOldCurrent,true); 113 setSelected(mOldCurrent,true);
114#endif 114#endif
115} 115}
116 116
117void KOTodoListView::contentsDropEvent(QDropEvent *e) 117void KOTodoListView::contentsDropEvent(QDropEvent *e)
118{ 118{
119#ifndef KORG_NODND 119#ifndef KORG_NODND
120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
121 121
122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
123 !QTextDrag::canDecode( e ) ) { 123 !QTextDrag::canDecode( e ) ) {
124 e->ignore(); 124 e->ignore();
125 return; 125 return;
126 } 126 }
127 127
128 DndFactory factory( mCalendar ); 128 DndFactory factory( mCalendar );
129 Todo *todo = factory.createDropTodo(e); 129 Todo *todo = factory.createDropTodo(e);
130 130
131 if (todo) { 131 if (todo) {
132 e->acceptAction(); 132 e->acceptAction();
133 133
134 KOTodoViewItem *destination = 134 KOTodoViewItem *destination =
135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
136 Todo *destinationEvent = 0; 136 Todo *destinationEvent = 0;
137 if (destination) destinationEvent = destination->todo(); 137 if (destination) destinationEvent = destination->todo();
138 138
139 Todo *existingTodo = mCalendar->todo(todo->uid()); 139 Todo *existingTodo = mCalendar->todo(todo->uid());
140 140
141 if(existingTodo) { 141 if(existingTodo) {
142// kdDebug() << "Drop existing Todo" << endl; 142// kdDebug() << "Drop existing Todo" << endl;
143 Incidence *to = destinationEvent; 143 Incidence *to = destinationEvent;
144 while(to) { 144 while(to) {
145 if (to->uid() == todo->uid()) { 145 if (to->uid() == todo->uid()) {
146 KMessageBox::sorry(this, 146 KMessageBox::sorry(this,
147 i18n("Cannot move To-Do to itself or a child of itself"), 147 i18n("Cannot move To-Do to itself or a child of itself"),
148 i18n("Drop To-Do")); 148 i18n("Drop To-Do"));
149 delete todo; 149 delete todo;
150 return; 150 return;
151 } 151 }
152 to = to->relatedTo(); 152 to = to->relatedTo();
153 } 153 }
154 existingTodo->setRelatedTo(destinationEvent); 154 existingTodo->setRelatedTo(destinationEvent);
155 emit todoDropped(todo); 155 emit todoDropped(todo);
156 delete todo; 156 delete todo;
157 } else { 157 } else {
158// kdDebug() << "Drop new Todo" << endl; 158// kdDebug() << "Drop new Todo" << endl;
159 todo->setRelatedTo(destinationEvent); 159 todo->setRelatedTo(destinationEvent);
160 mCalendar->addTodo(todo); 160 mCalendar->addTodo(todo);
161 161
162 emit todoDropped(todo); 162 emit todoDropped(todo);
163 } 163 }
164 } 164 }
165 else { 165 else {
166 QString text; 166 QString text;
167 if (QTextDrag::decode(e,text)) { 167 if (QTextDrag::decode(e,text)) {
168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
170 kdDebug() << "Dropped : " << text << endl; 170 kdDebug() << "Dropped : " << text << endl;
171 QStringList emails = QStringList::split(",",text); 171 QStringList emails = QStringList::split(",",text);
172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
173 kdDebug() << " Email: " << (*it) << endl; 173 kdDebug() << " Email: " << (*it) << endl;
174 int pos = (*it).find("<"); 174 int pos = (*it).find("<");
175 QString name = (*it).left(pos); 175 QString name = (*it).left(pos);
176 QString email = (*it).mid(pos); 176 QString email = (*it).mid(pos);
177 if (!email.isEmpty() && todoi) { 177 if (!email.isEmpty() && todoi) {
178 todoi->todo()->addAttendee(new Attendee(name,email)); 178 todoi->todo()->addAttendee(new Attendee(name,email));
179 } 179 }
180 } 180 }
181 } 181 }
182 else { 182 else {
183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl; 183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl;
184 e->ignore(); 184 e->ignore();
185 } 185 }
186 } 186 }
187#endif 187#endif
188} 188}
189 189
190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
191{ 191{
192 QListView::contentsMousePressEvent(e); 192 QListView::contentsMousePressEvent(e);
193#ifndef KORG_NODND 193#ifndef KORG_NODND
194 QPoint p(contentsToViewport(e->pos())); 194 QPoint p(contentsToViewport(e->pos()));
195 QListViewItem *i = itemAt(p); 195 QListViewItem *i = itemAt(p);
196 if (i) { 196 if (i) {
197 // if the user clicked into the root decoration of the item, don't 197 // if the user clicked into the root decoration of the item, don't
198 // try to start a drag! 198 // try to start a drag!
199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) + 199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) +
200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
201 itemMargin() || 201 itemMargin() ||
202 p.x() < header()->sectionPos(header()->mapToIndex(0))) { 202 p.x() < header()->sectionPos(header()->mapToIndex(0))) {
203 if (e->button()==Qt::LeftButton) { 203 if (e->button()==Qt::LeftButton) {
204 mPressPos = e->pos(); 204 mPressPos = e->pos();
205 mMousePressed = true; 205 mMousePressed = true;
206 } 206 }
207 } 207 }
208 } 208 }
209#endif 209#endif
210} 210}
211 211
212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
213{ 213{
214
214#ifndef KORG_NODND 215#ifndef KORG_NODND
215// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl; 216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl;
216 QListView::contentsMouseMoveEvent(e); 217 QListView::contentsMouseMoveEvent(e);
217 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
218 QApplication::startDragDistance()) { 219 QApplication::startDragDistance()) {
219 mMousePressed = false; 220 mMousePressed = false;
220 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 221 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
221 if (item) { 222 if (item) {
222// kdDebug() << "Start Drag for item " << item->text(0) << endl; 223// kdDebug() << "Start Drag for item " << item->text(0) << endl;
223 DndFactory factory( mCalendar ); 224 DndFactory factory( mCalendar );
224 ICalDrag *vd = factory.createDragTodo( 225 ICalDrag *vd = factory.createDragTodo(
225 ((KOTodoViewItem *)item)->todo(),viewport()); 226 ((KOTodoViewItem *)item)->todo(),viewport());
226 if (vd->drag()) { 227 if (vd->drag()) {
227 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl; 228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl;
228 } 229 }
229/* 230/*
230 QString source = fullPath(item); 231 QString source = fullPath(item);
231 if ( QFile::exists(source) ) { 232 if ( QFile::exists(source) ) {
232 QUriDrag* ud = new QUriDrag(viewport()); 233 QUriDrag* ud = new QUriDrag(viewport());
233 ud->setFilenames( source ); 234 ud->setFilenames( source );
234 if ( ud->drag() ) 235 if ( ud->drag() )
235 QMessageBox::information( this, "Drag source", 236 QMessageBox::information( this, "Drag source",
236 QString("Delete ")+source, "Not implemented" ); 237 QString("Delete ")+source, "Not implemented" );
237*/ 238*/
238 } 239 }
239 } 240 }
240#endif 241#endif
241} 242}
242void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 243void KOTodoListView::keyPressEvent ( QKeyEvent * e )
243{ 244{
244 245
245 QListViewItem* cn; 246 QListViewItem* cn;
246 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
247 cn = currentItem(); 248 cn = currentItem();
248 if ( cn ) { 249 if ( cn ) {
249 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
250 if ( ci ){ 251 if ( ci ){
251 if ( e->state() == ShiftButton ) 252 if ( e->state() == ShiftButton )
252 ci->setOn( false ); 253 ci->setOn( false );
253 else 254 else
254 ci->setOn( true ); 255 ci->setOn( true );
255 cn = cn->nextSibling(); 256 cn = cn->nextSibling();
256 if ( cn ) { 257 if ( cn ) {
257 setCurrentItem ( cn ); 258 setCurrentItem ( cn );
258 ensureItemVisible ( cn ); 259 ensureItemVisible ( cn );
259 } 260 }
260 261
261 } 262 }
262 } 263 }
263 264
264 return; 265 return;
265 } 266 }
266 267
267 // qDebug("KOTodoListView::keyPressEvent "); 268 // qDebug("KOTodoListView::keyPressEvent ");
268 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
269 switch ( e->key() ) { 270 switch ( e->key() ) {
270 case Qt::Key_Down: 271 case Qt::Key_Down:
271 case Qt::Key_Up: 272 case Qt::Key_Up:
272 QListView::keyPressEvent ( e ); 273 QListView::keyPressEvent ( e );
273 break; 274 break;
274 case Qt::Key_Left: 275 case Qt::Key_Left:
275 case Qt::Key_Right: 276 case Qt::Key_Right:
276 QListView::keyPressEvent ( e ); 277 QListView::keyPressEvent ( e );
278 e->accept();
279 return;
277 break; 280 break;
278 default: 281 default:
279 e->ignore(); 282 e->ignore();
280 break; 283 break;
281 } 284 }
282 return; 285 return;
283 } 286 }
284 e->ignore(); 287 e->ignore();
285} 288}
286void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
287{ 290{
288 QListView::contentsMouseReleaseEvent(e); 291 QListView::contentsMouseReleaseEvent(e);
289 mMousePressed = false; 292 mMousePressed = false;
290} 293}
291 294
292void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
293{ 296{
294 if (!e) return; 297 if (!e) return;
295 298
296 QPoint vp = contentsToViewport(e->pos()); 299 QPoint vp = contentsToViewport(e->pos());
297 300
298 QListViewItem *item = itemAt(vp); 301 QListViewItem *item = itemAt(vp);
299 302
300 emit double_Clicked(item); 303 emit double_Clicked(item);
301 if (!item) return; 304 if (!item) return;
302 305
303 emit doubleClicked(item,vp,0); 306 emit doubleClicked(item,vp,0);
304} 307}
305 308
306///////////////////////////////////////////////////////////////////////////// 309/////////////////////////////////////////////////////////////////////////////
307 310
308KOQuickTodo::KOQuickTodo(QWidget *parent) : 311KOQuickTodo::KOQuickTodo(QWidget *parent) :
309 QLineEdit(parent) 312 QLineEdit(parent)
310{ 313{
311 setText(i18n("Click to add a new Todo")); 314 setText(i18n("Click to add a new Todo"));
312} 315}
313 316
314void KOQuickTodo::focusInEvent(QFocusEvent *ev) 317void KOQuickTodo::focusInEvent(QFocusEvent *ev)
315{ 318{
316 if ( text()==i18n("Click to add a new Todo") ) 319 if ( text()==i18n("Click to add a new Todo") )
317 setText(""); 320 setText("");
318 QLineEdit::focusInEvent(ev); 321 QLineEdit::focusInEvent(ev);
319} 322}
320 323
321void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 324void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
322{ 325{
323 setText(i18n("Click to add a new Todo")); 326 setText(i18n("Click to add a new Todo"));
324 QLineEdit::focusOutEvent(ev); 327 QLineEdit::focusOutEvent(ev);
325} 328}
326 329
327///////////////////////////////////////////////////////////////////////////// 330/////////////////////////////////////////////////////////////////////////////
328 331
329KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
330 KOrg::BaseView(calendar,parent,name) 333 KOrg::BaseView(calendar,parent,name)
331{ 334{
332 QBoxLayout *topLayout = new QVBoxLayout(this); 335 QBoxLayout *topLayout = new QVBoxLayout(this);
333 mName = QString ( name ); 336 mName = QString ( name );
334 mBlockUpdate = false; 337 mBlockUpdate = false;
335 mQuickAdd = new KOQuickTodo(this); 338 mQuickAdd = new KOQuickTodo(this);
336 topLayout->addWidget(mQuickAdd); 339 topLayout->addWidget(mQuickAdd);
337 340
338 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 341 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
339 342
340 mTodoListView = new KOTodoListView(calendar,this, name ); 343 mTodoListView = new KOTodoListView(calendar,this, name );
341 topLayout->addWidget(mTodoListView); 344 topLayout->addWidget(mTodoListView);
342 //mTodoListView->header()->setMaximumHeight(30); 345 //mTodoListView->header()->setMaximumHeight(30);
343 mTodoListView->setRootIsDecorated(true); 346 mTodoListView->setRootIsDecorated(true);
344 mTodoListView->setAllColumnsShowFocus(true); 347 mTodoListView->setAllColumnsShowFocus(true);
345 348
346 mTodoListView->setShowSortIndicator(true); 349 mTodoListView->setShowSortIndicator(true);
347 350
348 mTodoListView->addColumn(i18n("Todo")); 351 mTodoListView->addColumn(i18n("Todo"));
349 mTodoListView->addColumn(i18n("Prio")); 352 mTodoListView->addColumn(i18n("Prio"));
350 mTodoListView->setColumnAlignment(1,AlignHCenter); 353 mTodoListView->setColumnAlignment(1,AlignHCenter);
351 mTodoListView->addColumn(i18n("Complete")); 354 mTodoListView->addColumn(i18n("Complete"));
352 mTodoListView->setColumnAlignment(2,AlignHCenter); 355 mTodoListView->setColumnAlignment(2,AlignHCenter);
353 mTodoListView->addColumn(i18n("Due Date")); 356 mTodoListView->addColumn(i18n("Due Date"));
354 mTodoListView->setColumnAlignment(3,AlignLeft); 357 mTodoListView->setColumnAlignment(3,AlignLeft);
355 mTodoListView->addColumn(i18n("Due Time")); 358 mTodoListView->addColumn(i18n("Due Time"));
356 mTodoListView->setColumnAlignment(4,AlignHCenter); 359 mTodoListView->setColumnAlignment(4,AlignHCenter);
357 mTodoListView->addColumn(i18n("Cancelled")); 360 mTodoListView->addColumn(i18n("Cancelled"));
358 mTodoListView->addColumn(i18n("Categories")); 361 mTodoListView->addColumn(i18n("Categories"));
359#if 0 362#if 0
360 mTodoListView->addColumn(i18n("Sort Id")); 363 mTodoListView->addColumn(i18n("Sort Id"));
361 mTodoListView->setColumnAlignment(4,AlignHCenter); 364 mTodoListView->setColumnAlignment(4,AlignHCenter);
362#endif 365#endif
363 366
364 mTodoListView->setMinimumHeight( 60 ); 367 mTodoListView->setMinimumHeight( 60 );
365 mTodoListView->setItemsRenameable( true ); 368 mTodoListView->setItemsRenameable( true );
366 mTodoListView->setRenameable( 0 ); 369 mTodoListView->setRenameable( 0 );
367 mTodoListView->setColumnWidth( 0, 120 ); 370 mTodoListView->setColumnWidth( 0, 120 );
368 mTodoListView->setColumnWidthMode(0, QListView::Manual); 371 mTodoListView->setColumnWidthMode(0, QListView::Manual);
369 mTodoListView->setColumnWidthMode(1, QListView::Manual); 372 mTodoListView->setColumnWidthMode(1, QListView::Manual);
370 mTodoListView->setColumnWidthMode(2, QListView::Manual); 373 mTodoListView->setColumnWidthMode(2, QListView::Manual);
371 mTodoListView->setColumnWidthMode(3, QListView::Manual); 374 mTodoListView->setColumnWidthMode(3, QListView::Manual);
372 mTodoListView->setColumnWidthMode(4, QListView::Manual); 375 mTodoListView->setColumnWidthMode(4, QListView::Manual);
373 mTodoListView->setColumnWidthMode(5, QListView::Manual); 376 mTodoListView->setColumnWidthMode(5, QListView::Manual);
374 mTodoListView->setColumnAlignment( 2, AlignCenter ); 377 mTodoListView->setColumnAlignment( 2, AlignCenter );
375#if 0 378#if 0
376 mTodoListView->setColumnWidthMode(6, QListView::Manual); 379 mTodoListView->setColumnWidthMode(6, QListView::Manual);
377#endif 380#endif
378 381
379 mPriorityPopupMenu = new QPopupMenu(this); 382 mPriorityPopupMenu = new QPopupMenu(this);
380 for (int i = 1; i <= 5; i++) { 383 for (int i = 1; i <= 5; i++) {
381 QString label = QString ("%1").arg (i); 384 QString label = QString ("%1").arg (i);
382 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 385 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
383 } 386 }
384 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 387 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
385 388
386 mPercentageCompletedPopupMenu = new QPopupMenu(this); 389 mPercentageCompletedPopupMenu = new QPopupMenu(this);
387 for (int i = 0; i <= 100; i+=20) { 390 for (int i = 0; i <= 100; i+=20) {
388 QString label = QString ("%1 %").arg (i); 391 QString label = QString ("%1 %").arg (i);
389 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 392 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
390 } 393 }
391 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 394 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
392 395
393 396
394 397
395 mItemPopupMenu = new QPopupMenu(this); 398 mItemPopupMenu = new QPopupMenu(this);
396 mItemPopupMenu->insertItem(i18n("Show..."), this, 399 mItemPopupMenu->insertItem(i18n("Show..."), this,
397 SLOT (showTodo())); 400 SLOT (showTodo()));
398 mItemPopupMenu->insertItem(i18n("Edit..."), this, 401 mItemPopupMenu->insertItem(i18n("Edit..."), this,
399 SLOT (editTodo())); 402 SLOT (editTodo()));
400 mItemPopupMenu->insertItem( i18n("Delete"), this, 403 mItemPopupMenu->insertItem( i18n("Delete"), this,
401 SLOT (deleteTodo())); 404 SLOT (deleteTodo()));
402 mItemPopupMenu->insertItem( i18n("Clone..."), this, 405 mItemPopupMenu->insertItem( i18n("Clone..."), this,
403 SLOT (cloneTodo())); 406 SLOT (cloneTodo()));
404 mItemPopupMenu->insertItem( i18n("Move..."), this, 407 mItemPopupMenu->insertItem( i18n("Move..."), this,
405 SLOT (moveTodo())); 408 SLOT (moveTodo()));
406 mItemPopupMenu->insertItem( i18n("Beam..."), this, 409 mItemPopupMenu->insertItem( i18n("Beam..."), this,
407 SLOT (beamTodo())); 410 SLOT (beamTodo()));
408 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 411 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
409 SLOT (cancelTodo())); 412 SLOT (cancelTodo()));
410 mItemPopupMenu->insertSeparator(); 413 mItemPopupMenu->insertSeparator();
411 414
412 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 415 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
413 SLOT (newTodo())); 416 SLOT (newTodo()));
414 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 417 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
415 SLOT (newSubTodo())); 418 SLOT (newSubTodo()));
416 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 419 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
417 SLOT (unparentTodo())); 420 SLOT (unparentTodo()),0,21);
421 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
422 SLOT (reparentTodo()),0,22);
418 mItemPopupMenu->insertSeparator(); 423 mItemPopupMenu->insertSeparator();
419 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 424 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
420 this, SLOT( purgeCompleted() ) ); 425 this, SLOT( purgeCompleted() ) );
421 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 426 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
422 this, SLOT( toggleCompleted() ),0, 33 ); 427 this, SLOT( toggleCompleted() ),0, 33 );
423 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 428 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
424 this, SLOT( toggleQuickTodo() ),0, 34 ); 429 this, SLOT( toggleQuickTodo() ),0, 34 );
425 430
426 mPopupMenu = new QPopupMenu(this); 431 mPopupMenu = new QPopupMenu(this);
427 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 432 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
428 SLOT (newTodo()),0,1); 433 SLOT (newTodo()),0,1);
429 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 434 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
430 this, SLOT(purgeCompleted()),0,2); 435 this, SLOT(purgeCompleted()),0,2);
431 mPopupMenu->insertItem(i18n("Show Completed"), 436 mPopupMenu->insertItem(i18n("Show Completed"),
432 this, SLOT( toggleCompleted() ),0,3 ); 437 this, SLOT( toggleCompleted() ),0,3 );
433 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 438 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
434 this, SLOT( toggleQuickTodo() ),0,4 ); 439 this, SLOT( toggleQuickTodo() ),0,4 );
435 mDocPrefs = new DocPrefs( name ); 440 mDocPrefs = new DocPrefs( name );
436 441
437 mPopupMenu->setCheckable( true ); 442 mPopupMenu->setCheckable( true );
438 mItemPopupMenu->setCheckable( true ); 443 mItemPopupMenu->setCheckable( true );
439 // Double clicking conflicts with opening/closing the subtree 444 // Double clicking conflicts with opening/closing the subtree
440 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 445 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
441 SLOT( editItem( QListViewItem *) ) ); 446 SLOT( editItem( QListViewItem *) ) );
447 /*
442 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 448 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
443 const QPoint &,int ) ), 449 const QPoint &,int ) ),
444 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 450 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
451 */
452 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
453 const QPoint &,int ) ),
454 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
445 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 455 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
446 SLOT( itemClicked( QListViewItem * ) ) ); 456 SLOT( itemClicked( QListViewItem * ) ) );
447 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 457 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
448 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 458 SLOT( itemDoubleClicked( QListViewItem * ) ) );
449 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ), 459 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ),
450 SLOT( updateView() ) ); 460 SLOT( updateView() ) );
451 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 461 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
452 SLOT( itemStateChanged( QListViewItem * ) ) ); 462 SLOT( itemStateChanged( QListViewItem * ) ) );
453 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 463 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
454 SLOT( itemStateChanged( QListViewItem * ) ) ); 464 SLOT( itemStateChanged( QListViewItem * ) ) );
455 465
456#if 0 466#if 0
457 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 467 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
458 SLOT(selectionChanged(QListViewItem *))); 468 SLOT(selectionChanged(QListViewItem *)));
459 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 469 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
460 SLOT(selectionChanged(QListViewItem *))); 470 SLOT(selectionChanged(QListViewItem *)));
461 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 471 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
462 SLOT(selectionChanged(QListViewItem *))); 472 SLOT(selectionChanged(QListViewItem *)));
463#endif 473#endif
464 connect( mTodoListView, SIGNAL(selectionChanged() ), 474 connect( mTodoListView, SIGNAL(selectionChanged() ),
465 SLOT( processSelectionChange() ) ); 475 SLOT( processSelectionChange() ) );
466 connect( mQuickAdd, SIGNAL( returnPressed () ), 476 connect( mQuickAdd, SIGNAL( returnPressed () ),
467 SLOT( addQuickTodo() ) ); 477 SLOT( addQuickTodo() ) );
468// if ( QApplication::desktop()->width() < 480 ) { 478// if ( QApplication::desktop()->width() < 480 ) {
469// setNarrow(); 479// setNarrow();
470 // mTodoListView->setColumnWidth( 0, 100 ); 480 // mTodoListView->setColumnWidth( 0, 100 );
471 481
472 // } 482 // }
473 483
474} 484}
475 485
476KOTodoView::~KOTodoView() 486KOTodoView::~KOTodoView()
477{ 487{
478 delete mDocPrefs; 488 delete mDocPrefs;
479} 489}
480 490
481void KOTodoView::jumpToDate () 491void KOTodoView::jumpToDate ()
482{ 492{
483 // if (mActiveItem) { 493 // if (mActiveItem) {
484// mActiveItem->todo()); 494// mActiveItem->todo());
485// if ( mActiveItem->todo()->hasDueDate() ) 495// if ( mActiveItem->todo()->hasDueDate() )
486// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 496// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
487} 497}
488 498
489void KOTodoView::setNarrow() 499void KOTodoView::setNarrow()
490{ 500{
491 //mTodoListView->setColumnWidth( 0, 120 ); 501 //mTodoListView->setColumnWidth( 0, 120 );
492 mTodoListView->setColumnWidth( 1, 35 ); 502 mTodoListView->setColumnWidth( 1, 35 );
493 mTodoListView->setColumnWidth( 2, 40 ); 503 mTodoListView->setColumnWidth( 2, 40 );
494 mTodoListView->setColumnWidth( 3, 80 ); 504 mTodoListView->setColumnWidth( 3, 80 );
495 mTodoListView->setColumnWidth( 4, 40 ); 505 mTodoListView->setColumnWidth( 4, 40 );
496 mTodoListView->setColumnWidth( 5, 90 ); 506 mTodoListView->setColumnWidth( 5, 90 );
497 507
498} 508}
499void KOTodoView::updateView() 509void KOTodoView::updateView()
500{ 510{
501 511
502 if ( mBlockUpdate ) { 512 if ( mBlockUpdate ) {
503 //qDebug("blocked "); 513 //qDebug("blocked ");
504 return; 514 return;
505 } 515 }
506 //qDebug("update "); 516 //qDebug("update ");
507// kdDebug() << "KOTodoView::updateView()" << endl; 517// kdDebug() << "KOTodoView::updateView()" << endl;
508 QFont fo = KOPrefs::instance()->mTodoViewFont; 518 QFont fo = KOPrefs::instance()->mTodoViewFont;
509 mTodoListView->clear(); 519 mTodoListView->clear();
510 if ( mName == "todolistsmall" ) { 520 if ( mName == "todolistsmall" ) {
511 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 521 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
512 int ps = fo.pointSize() -2; 522 int ps = fo.pointSize() -2;
513 if ( ps > 12 ) 523 if ( ps > 12 )
514 ps -= 2; 524 ps -= 2;
515 fo.setPointSize( ps ); 525 fo.setPointSize( ps );
516 } 526 }
517 } 527 }
518 528
519 mTodoListView->setFont( fo ); 529 mTodoListView->setFont( fo );
520 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 530 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
521 //mTodoListView->header()->setMaximumHeight(fm.height()); 531 //mTodoListView->header()->setMaximumHeight(fm.height());
522 QPtrList<Todo> todoList = calendar()->todos(); 532 QPtrList<Todo> todoList = calendar()->todos();
523 533
524/* 534/*
525 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 535 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
526 Event *t; 536 Event *t;
527 for(t = todoList.first(); t; t = todoList.next()) { 537 for(t = todoList.first(); t; t = todoList.next()) {
528 kdDebug() << " " << t->getSummary() << endl; 538 kdDebug() << " " << t->getSummary() << endl;
529 539
530 if (t->getRelatedTo()) { 540 if (t->getRelatedTo()) {
531 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 541 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
532 } 542 }
533 543
534 QPtrList<Event> l = t->getRelations(); 544 QPtrList<Event> l = t->getRelations();
535 Event *c; 545 Event *c;
536 for(c=l.first();c;c=l.next()) { 546 for(c=l.first();c;c=l.next()) {
537 kdDebug() << " - relation: " << c->getSummary() << endl; 547 kdDebug() << " - relation: " << c->getSummary() << endl;
538 } 548 }
539 } 549 }
540*/ 550*/
541 551
542 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 552 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
543 // specific order of events. That means that we have to generate parent items 553 // specific order of events. That means that we have to generate parent items
544 // recursively for proper hierarchical display of Todos. 554 // recursively for proper hierarchical display of Todos.
545 mTodoMap.clear(); 555 mTodoMap.clear();
546 Todo *todo; 556 Todo *todo;
547 todo = todoList.first();// todo; todo = todoList.next()) { 557 todo = todoList.first();// todo; todo = todoList.next()) {
548 while ( todo ) { 558 while ( todo ) {
549 bool next = true; 559 bool next = true;
550 // qDebug("todo %s ", todo->summary().latin1()); 560 // qDebug("todo %s ", todo->summary().latin1());
551 Incidence *incidence = todo->relatedTo(); 561 Incidence *incidence = todo->relatedTo();
552 while ( incidence ) { 562 while ( incidence ) {
553 if ( incidence->type() == "Todo") { 563 if ( incidence->type() == "Todo") {
554 //qDebug("related %s ",incidence->summary().latin1() ); 564 //qDebug("related %s ",incidence->summary().latin1() );
555 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { 565 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) {
556 //qDebug("related not found "); 566 //qDebug("related not found ");
557 todoList.remove( ); 567 todoList.remove( );
558 todo = todoList.current(); 568 todo = todoList.current();
559 next = false; 569 next = false;
560 incidence = 0; 570 incidence = 0;
561 571
562 } else { 572 } else {
563 //qDebug("related found "); 573 //qDebug("related found ");
564 incidence = incidence->relatedTo(); 574 incidence = incidence->relatedTo();
565 } 575 }
566 } else 576 } else
567 incidence = 0; 577 incidence = 0;
568 } 578 }
569 if ( next ) 579 if ( next )
570 todo = todoList.next(); 580 todo = todoList.next();
571 } 581 }
572// qDebug("again .... "); 582// qDebug("again .... ");
573// for(todo = todoList.first(); todo; todo = todoList.next()) { 583// for(todo = todoList.first(); todo; todo = todoList.next()) {
574 584
575// qDebug("yytodo %s ", todo->summary().latin1()); 585// qDebug("yytodo %s ", todo->summary().latin1());
576// } 586// }
577 //qDebug("for "); 587 //qDebug("for ");
578 for(todo = todoList.first(); todo; todo = todoList.next()) { 588 for(todo = todoList.first(); todo; todo = todoList.next()) {
579 if (!mTodoMap.contains(todo) && ( KOPrefs::instance()->mShowCompletedTodo || !todo->isCompleted() ) ) 589 if (!mTodoMap.contains(todo) && ( KOPrefs::instance()->mShowCompletedTodo || !todo->isCompleted() ) )
580 { 590 {
581 insertTodoItem(todo); 591 insertTodoItem(todo);
582 } 592 }
583 } 593 }
584 //qDebug("for end "); 594 //qDebug("for end ");
585 // Restore opened/closed state 595 // Restore opened/closed state
586 mTodoListView->blockSignals( true ); 596 mTodoListView->blockSignals( true );
587 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 597 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
588 mTodoListView->blockSignals( false ); 598 mTodoListView->blockSignals( false );
589 mTodoListView->setFocus(); 599 mTodoListView->setFocus();
590 processSelectionChange(); 600 processSelectionChange();
591} 601}
592 602
593void KOTodoView::restoreItemState( QListViewItem *item ) 603void KOTodoView::restoreItemState( QListViewItem *item )
594{ 604{
595 while( item ) { 605 while( item ) {
596 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 606 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
597 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 607 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
598 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 608 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
599 item = item->nextSibling(); 609 item = item->nextSibling();
600 } 610 }
601} 611}
602 612
603 613
604QMap<Todo *,KOTodoViewItem *>::ConstIterator 614QMap<Todo *,KOTodoViewItem *>::ConstIterator
605 KOTodoView::insertTodoItem(Todo *todo) 615 KOTodoView::insertTodoItem(Todo *todo)
606{ 616{
607// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 617// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
608 // TODO: Check, if dynmaic cast is necessary 618 // TODO: Check, if dynmaic cast is necessary
609 619
610 620
611 Incidence *incidence = todo->relatedTo(); 621 Incidence *incidence = todo->relatedTo();
612 if (incidence && incidence->type() == "Todo") { 622 if (incidence && incidence->type() == "Todo") {
613 Todo *relatedTodo = static_cast<Todo *>(incidence); 623 Todo *relatedTodo = static_cast<Todo *>(incidence);
614 624
615// kdDebug() << " has Related" << endl; 625// kdDebug() << " has Related" << endl;
616 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 626 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
617 itemIterator = mTodoMap.find(relatedTodo); 627 itemIterator = mTodoMap.find(relatedTodo);
618 if (itemIterator == mTodoMap.end()) { 628 if (itemIterator == mTodoMap.end()) {
619// kdDebug() << " related not yet in list" << endl; 629// kdDebug() << " related not yet in list" << endl;
620 itemIterator = insertTodoItem (relatedTodo); 630 itemIterator = insertTodoItem (relatedTodo);
621 } 631 }
622 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 632 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
623 // and one into the map. Sure finding is more easy but why? -zecke 633 // and one into the map. Sure finding is more easy but why? -zecke
624 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 634 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
625 return mTodoMap.insert(todo,todoItem); 635 return mTodoMap.insert(todo,todoItem);
626 } else { 636 } else {
627// kdDebug() << " no Related" << endl; 637// kdDebug() << " no Related" << endl;
628 // see above -zecke 638 // see above -zecke
629 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 639 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
630 return mTodoMap.insert(todo,todoItem); 640 return mTodoMap.insert(todo,todoItem);
631 } 641 }
632} 642}
633 643
634 644
635void KOTodoView::updateConfig() 645void KOTodoView::updateConfig()
636{ 646{
637 updateView(); 647 updateView();
638 mTodoListView->repaintContents(); 648 mTodoListView->repaintContents();
639} 649}
640 650
641QPtrList<Incidence> KOTodoView::selectedIncidences() 651QPtrList<Incidence> KOTodoView::selectedIncidences()
642{ 652{
643 QPtrList<Incidence> selected; 653 QPtrList<Incidence> selected;
644 654
645 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 655 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
646// if (!item) item = mActiveItem; 656// if (!item) item = mActiveItem;
647 if (item) selected.append(item->todo()); 657 if (item) selected.append(item->todo());
648 658
649 return selected; 659 return selected;
650} 660}
651 661
652QPtrList<Todo> KOTodoView::selectedTodos() 662QPtrList<Todo> KOTodoView::selectedTodos()
653{ 663{
654 QPtrList<Todo> selected; 664 QPtrList<Todo> selected;
655 665
656 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 666 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
657// if (!item) item = mActiveItem; 667// if (!item) item = mActiveItem;
658 if (item) selected.append(item->todo()); 668 if (item) selected.append(item->todo());
659 669
660 return selected; 670 return selected;
661} 671}
662 672
663void KOTodoView::changeEventDisplay(Event *, int) 673void KOTodoView::changeEventDisplay(Event *, int)
664{ 674{
665 updateView(); 675 updateView();
666} 676}
667 677
668void KOTodoView::showDates(const QDate &, const QDate &) 678void KOTodoView::showDates(const QDate &, const QDate &)
669{ 679{
670} 680}
671 681
672void KOTodoView::showEvents(QPtrList<Event>) 682void KOTodoView::showEvents(QPtrList<Event>)
673{ 683{
674 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 684 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
675} 685}
676 686
677void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 687void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
678 const QDate &td) 688 const QDate &td)
679{ 689{
680#ifndef KORG_NOPRINTER 690#ifndef KORG_NOPRINTER
681 calPrinter->preview(CalPrinter::Todolist, fd, td); 691 calPrinter->preview(CalPrinter::Todolist, fd, td);
682#endif 692#endif
683} 693}
684 694
685void KOTodoView::editItem(QListViewItem *item ) 695void KOTodoView::editItem(QListViewItem *item )
686{ 696{
687 // qDebug("editItem(QListViewItem *item ) "); 697 // qDebug("editItem(QListViewItem *item ) ");
688 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 698 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
689} 699}
690 700
691void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 701void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
692{ 702{
693 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 703 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
694} 704}
695 705
696void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 706void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column)
697{ 707{
698
699 mActiveItem = (KOTodoViewItem *)item; 708 mActiveItem = (KOTodoViewItem *)item;
700 if (item) { 709 if (item) {
701 switch (column){ 710 switch (column){
702 case 1: 711 case 1:
703 mPriorityPopupMenu->popup(QCursor::pos ()); break; 712 mPriorityPopupMenu->popup(QCursor::pos ()); break;
704 case 2: 713 case 2:
705 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 714 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
706 case 3: 715 case 3:
707 moveTodo(); 716 moveTodo();
708 break; 717 break;
709 case 6: 718 case 6:
710 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 719 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
711 default: 720 default:
712 mItemPopupMenu->popup(QCursor::pos()); 721 mItemPopupMenu->popup(QCursor::pos());
713 } 722 }
714 } else mPopupMenu->popup(QCursor::pos()); 723 } else mPopupMenu->popup(QCursor::pos());
715} 724}
716void KOTodoView::newTodo() 725void KOTodoView::newTodo()
717{ 726{
718 emit newTodoSignal(); 727 emit newTodoSignal();
719} 728}
720 729
721void KOTodoView::newSubTodo() 730void KOTodoView::newSubTodo()
722{ 731{
723 if (mActiveItem) { 732 if (mActiveItem) {
724 emit newSubTodoSignal(mActiveItem->todo()); 733 emit newSubTodoSignal(mActiveItem->todo());
725 } 734 }
726} 735}
727void KOTodoView::unparentTodo() 736void KOTodoView::unparentTodo()
728{ 737{
729 if (mActiveItem) { 738 if (mActiveItem) {
730 emit unparentTodoSignal(mActiveItem->todo()); 739 emit unparentTodoSignal(mActiveItem->todo());
731 } 740 }
732} 741}
742
743void KOTodoView::reparentTodo()
744{
745 if (mActiveItem) {
746 qDebug("KOTodoView::reparentTodo() ");
747 topLevelWidget()->setCaption(i18n("Click on new parent item"));
748 pendingSubtodo = mActiveItem;
749 }
750}
733void KOTodoView::editTodo() 751void KOTodoView::editTodo()
734{ 752{
735 if (mActiveItem) { 753 if (mActiveItem) {
736 emit editTodoSignal(mActiveItem->todo()); 754 emit editTodoSignal(mActiveItem->todo());
737 } 755 }
738} 756}
739void KOTodoView::cloneTodo() 757void KOTodoView::cloneTodo()
740{ 758{
741 if (mActiveItem) { 759 if (mActiveItem) {
742 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 760 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
743 } 761 }
744} 762}
745void KOTodoView::cancelTodo() 763void KOTodoView::cancelTodo()
746{ 764{
747 if (mActiveItem) { 765 if (mActiveItem) {
748 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 766 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
749 } 767 }
750} 768}
751void KOTodoView::moveTodo() 769void KOTodoView::moveTodo()
752{ 770{
753 if (mActiveItem) { 771 if (mActiveItem) {
754 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 772 emit moveTodoSignal((Incidence*)mActiveItem->todo());
755 } 773 }
756} 774}
757void KOTodoView::beamTodo() 775void KOTodoView::beamTodo()
758{ 776{
759 if (mActiveItem) { 777 if (mActiveItem) {
760 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 778 emit beamTodoSignal((Incidence*)mActiveItem->todo());
761 } 779 }
762} 780}
763 781
764 782
765void KOTodoView::showTodo() 783void KOTodoView::showTodo()
766{ 784{
767 if (mActiveItem) { 785 if (mActiveItem) {
768 emit showTodoSignal(mActiveItem->todo()); 786 emit showTodoSignal(mActiveItem->todo());
769 } 787 }
770} 788}
771 789
772void KOTodoView::deleteTodo() 790void KOTodoView::deleteTodo()
773{ 791{
774 if (mActiveItem) { 792 if (mActiveItem) {
775 if (mActiveItem->childCount()) { 793 if (mActiveItem->childCount()) {
776 KMessageBox::sorry(this,i18n("Cannot delete To-Do which has children."), 794 KMessageBox::sorry(this,i18n("Cannot delete To-Do which has children."),
777 i18n("Delete To-Do")); 795 i18n("Delete To-Do"));
778 } else { 796 } else {
779 emit deleteTodoSignal(mActiveItem->todo()); 797 emit deleteTodoSignal(mActiveItem->todo());
780 } 798 }
781 } 799 }
782} 800}
783 801
784void KOTodoView::setNewPriority(int index) 802void KOTodoView::setNewPriority(int index)
785{ 803{
786 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 804 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
787 mActiveItem->todo()->setPriority(mPriority[index]); 805 mActiveItem->todo()->setPriority(mPriority[index]);
788 mActiveItem->construct(); 806 mActiveItem->construct();
789 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 807 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
790 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 808 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
791 } 809 }
792} 810}
793 811
794void KOTodoView::setNewPercentage(int index) 812void KOTodoView::setNewPercentage(int index)
795{ 813{
796 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 814 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
797 if (mPercentage[index] == 100) { 815 if (mPercentage[index] == 100) {
798 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 816 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
799 } else { 817 } else {
800 mActiveItem->todo()->setCompleted(false); 818 mActiveItem->todo()->setCompleted(false);
801 } 819 }
802 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 820 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
803 mActiveItem->construct(); 821 mActiveItem->construct();
804 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 822 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
805 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 823 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
806 } 824 }
807} 825}
808 826
809 827
810QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 828QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
811{ 829{
812 QPopupMenu* tempMenu = new QPopupMenu (this); 830 QPopupMenu* tempMenu = new QPopupMenu (this);
813 QStringList checkedCategories = todoItem->todo()->categories (); 831 QStringList checkedCategories = todoItem->todo()->categories ();
814 832
815 tempMenu->setCheckable (true); 833 tempMenu->setCheckable (true);
816 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 834 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
817 it != KOPrefs::instance()->mCustomCategories.end (); 835 it != KOPrefs::instance()->mCustomCategories.end ();
818 ++it) { 836 ++it) {
819 int index = tempMenu->insertItem (*it); 837 int index = tempMenu->insertItem (*it);
820 mCategory[index] = *it; 838 mCategory[index] = *it;
821 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 839 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
822 } 840 }
823 841
824 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 842 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
825 return tempMenu; 843 return tempMenu;
826 844
827 845
828} 846}
829void KOTodoView::changedCategories(int index) 847void KOTodoView::changedCategories(int index)
830{ 848{
831 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 849 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
832 QStringList categories = mActiveItem->todo()->categories (); 850 QStringList categories = mActiveItem->todo()->categories ();
833 if (categories.find (mCategory[index]) != categories.end ()) 851 if (categories.find (mCategory[index]) != categories.end ())
834 categories.remove (mCategory[index]); 852 categories.remove (mCategory[index]);
835 else 853 else
836 categories.insert (categories.end(), mCategory[index]); 854 categories.insert (categories.end(), mCategory[index]);
837 categories.sort (); 855 categories.sort ();
838 mActiveItem->todo()->setCategories (categories); 856 mActiveItem->todo()->setCategories (categories);
839 mActiveItem->construct(); 857 mActiveItem->construct();
840 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 858 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
841 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 859 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
842 } 860 }
843} 861}
844void KOTodoView::itemDoubleClicked(QListViewItem *item) 862void KOTodoView::itemDoubleClicked(QListViewItem *item)
845{ 863{
864 if ( pendingSubtodo != 0 ) {
865 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
866 }
867 pendingSubtodo = 0;
846 if (!item) { 868 if (!item) {
847 newTodo(); 869 newTodo();
848 return; 870 return;
849 } 871 }
850 if ( KOPrefs::instance()->mEditOnDoubleClick ) 872 if ( KOPrefs::instance()->mEditOnDoubleClick )
851 editItem( item ); 873 editItem( item );
852 else 874 else
853 showItem( item , QPoint(), 0 ); 875 showItem( item , QPoint(), 0 );
854} 876}
855void KOTodoView::itemClicked(QListViewItem *item) 877void KOTodoView::itemClicked(QListViewItem *item)
856{ 878{
879
857 if (!item) { 880 if (!item) {
881 if ( pendingSubtodo != 0 ) {
882 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
883 }
884 pendingSubtodo = 0;
858 return; 885 return;
859 } 886 }
860
861 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 887 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
888 if ( pendingSubtodo != 0 ) {
889 bool allowReparent = true;
890 QListViewItem *par = item;
891 while ( par ) {
892 if ( par == pendingSubtodo ) {
893 allowReparent = false;
894 break;
895 }
896 par = par->parent();
897 }
898 if ( !allowReparent ) {
899 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
900 qDebug("Recursive reparenting not possible ");
901 pendingSubtodo = 0;
902 } else {
903 Todo* newParent = todoItem->todo();
904 Todo* newSub = pendingSubtodo->todo();
905 pendingSubtodo = 0;
906 emit reparentTodoSignal( newParent,newSub );
907 return;
908 }
909 }
862 int completed = todoItem->todo()->isCompleted(); // Completed or not? 910 int completed = todoItem->todo()->isCompleted(); // Completed or not?
863 911
864 if (todoItem->isOn()) { 912 if (todoItem->isOn()) {
865 if (!completed) { 913 if (!completed) {
866 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 914 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
867 } 915 }
868 } else { 916 } else {
869 if (completed) { 917 if (completed) {
870 todoItem->todo()->setCompleted(false); 918 todoItem->todo()->setCompleted(false);
871 } 919 }
872 } 920 }
873} 921}
874 922
875void KOTodoView::setDocumentId( const QString &id ) 923void KOTodoView::setDocumentId( const QString &id )
876{ 924{
877 kdDebug() << "KOTodoView::setDocumentId()" << endl; 925 kdDebug() << "KOTodoView::setDocumentId()" << endl;
878 926
879 mDocPrefs->setDoc( id ); 927 mDocPrefs->setDoc( id );
880} 928}
881 929
882void KOTodoView::itemStateChanged( QListViewItem *item ) 930void KOTodoView::itemStateChanged( QListViewItem *item )
883{ 931{
884 if (!item) return; 932 if (!item) return;
885 933
886 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 934 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
887 935
888// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 936// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
889 937
890 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 938 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
891} 939}
892 940
893void KOTodoView::saveLayout(KConfig *config, const QString &group) const 941void KOTodoView::saveLayout(KConfig *config, const QString &group) const
894{ 942{
895 mTodoListView->saveLayout(config,group); 943 mTodoListView->saveLayout(config,group);
896} 944}
897 945
898void KOTodoView::restoreLayout(KConfig *config, const QString &group) 946void KOTodoView::restoreLayout(KConfig *config, const QString &group)
899{ 947{
900 mTodoListView->restoreLayout(config,group); 948 mTodoListView->restoreLayout(config,group);
901} 949}
902 950
903void KOTodoView::processSelectionChange() 951void KOTodoView::processSelectionChange()
904{ 952{
905// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 953// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
906 954
907 KOTodoViewItem *item = 955 KOTodoViewItem *item =
908 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 956 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
909 957
910 if ( !item ) { 958 if ( !item ) {
911 emit incidenceSelected( 0 ); 959 emit incidenceSelected( 0 );
912 } else { 960 } else {
913 emit incidenceSelected( item->todo() ); 961 emit incidenceSelected( item->todo() );
914 } 962 }
915} 963}
916 964
917void KOTodoView::modified(bool b) 965void KOTodoView::modified(bool b)
918{ 966{
919 emit isModified(b); 967 emit isModified(b);
920} 968}
921void KOTodoView::setTodoModified( Todo* todo ) 969void KOTodoView::setTodoModified( Todo* todo )
922{ 970{
923 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 971 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
924} 972}
925void KOTodoView::clearSelection() 973void KOTodoView::clearSelection()
926{ 974{
927 mTodoListView->selectAll( false ); 975 mTodoListView->selectAll( false );
928} 976}
929 977
930void KOTodoView::purgeCompleted() 978void KOTodoView::purgeCompleted()
931{ 979{
932 emit purgeCompletedSignal(); 980 emit purgeCompletedSignal();
933} 981}
934void KOTodoView::toggleQuickTodo() 982void KOTodoView::toggleQuickTodo()
935{ 983{
936 if ( mQuickAdd->isVisible() ) { 984 if ( mQuickAdd->isVisible() ) {
937 mQuickAdd->hide(); 985 mQuickAdd->hide();
938 KOPrefs::instance()->mEnableQuickTodo = false; 986 KOPrefs::instance()->mEnableQuickTodo = false;
939 } 987 }
940 else { 988 else {
941 mQuickAdd->show(); 989 mQuickAdd->show();
942 KOPrefs::instance()->mEnableQuickTodo = true; 990 KOPrefs::instance()->mEnableQuickTodo = true;
943 } 991 }
944 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 992 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
945 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 993 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
946} 994}
947void KOTodoView::toggleCompleted() 995void KOTodoView::toggleCompleted()
948{ 996{
949 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 997 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
950 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 998 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
951 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 999 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
952 updateView(); 1000 updateView();
953} 1001}
954 1002
955void KOTodoView::addQuickTodo() 1003void KOTodoView::addQuickTodo()
956{ 1004{
957 Todo *todo = new Todo(); 1005 Todo *todo = new Todo();
958 todo->setSummary(mQuickAdd->text()); 1006 todo->setSummary(mQuickAdd->text());
959 todo->setOrganizer(KOPrefs::instance()->email()); 1007 todo->setOrganizer(KOPrefs::instance()->email());
960 CalFilter * cf = mCalendar->filter(); 1008 CalFilter * cf = mCalendar->filter();
961 if ( cf ) { 1009 if ( cf ) {
962 if ( cf->isEnabled()&& cf->showCategories()) { 1010 if ( cf->isEnabled()&& cf->showCategories()) {
963 todo->setCategories(cf->categoryList()); 1011 todo->setCategories(cf->categoryList());
964 } 1012 }
965 if ( cf->isEnabled() ) 1013 if ( cf->isEnabled() )
966 todo->setSecrecy( cf->getSecrecy()); 1014 todo->setSecrecy( cf->getSecrecy());
967 } 1015 }
968 mCalendar->addTodo(todo); 1016 mCalendar->addTodo(todo);
969 mQuickAdd->setText(""); 1017 mQuickAdd->setText("");
970 todoModified (todo, KOGlobals::EVENTADDED ); 1018 todoModified (todo, KOGlobals::EVENTADDED );
971 updateView(); 1019 updateView();
972} 1020}
973void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1021void KOTodoView::keyPressEvent ( QKeyEvent * e )
974{ 1022{
975 // e->ignore(); 1023 // e->ignore();
976 //return; 1024 //return;
1025 //qDebug("KOTodoView::keyPressEvent ");
977 switch ( e->key() ) { 1026 switch ( e->key() ) {
978 case Qt::Key_Down: 1027 case Qt::Key_Down:
979 case Qt::Key_Up: 1028 case Qt::Key_Up:
980 QWidget::keyPressEvent ( e ); 1029 QWidget::keyPressEvent ( e );
981 break; 1030 break;
982 1031
983 case Qt::Key_Q: 1032 case Qt::Key_Q:
984 toggleQuickTodo(); 1033 toggleQuickTodo();
985 break; 1034 break;
986 1035 case Qt::Key_U:
1036 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1037 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1038 unparentTodo();
1039 e->accept();
1040 } else
1041 e->ignore();
1042 break;
1043 case Qt::Key_S:
1044 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1045 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1046 reparentTodo();
1047 e->accept();
1048 } else
1049 e->ignore();
1050 break;
1051 case Qt::Key_P:
1052 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1053 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1054 if ( pendingSubtodo )
1055 itemClicked(mActiveItem);
1056 e->accept();
1057 } else
1058 e->ignore();
1059 break;
1060 case Qt::Key_Escape:
1061 if ( pendingSubtodo ) {
1062 itemClicked(0);
1063 e->accept();
1064 } else
1065 e->ignore();
1066 break;
987 default: 1067 default:
988 e->ignore(); 1068 e->ignore();
989 } 1069 }
990 1070
991 if ( true ) { 1071 if ( true ) {
992 if ( e->key() == Qt::Key_I ) { 1072 if ( e->key() == Qt::Key_I ) {
993 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1073 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
994 if ( cn ) { 1074 if ( cn ) {
995 mActiveItem = cn; 1075 mActiveItem = cn;
996 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1076 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
997 if ( ci ){ 1077 if ( ci ){
998 showTodo(); 1078 showTodo();
999 cn = (KOTodoViewItem*)cn->itemBelow(); 1079 cn = (KOTodoViewItem*)cn->itemBelow();
1000 if ( cn ) { 1080 if ( cn ) {
1001 mTodoListView->setCurrentItem ( cn ); 1081 mTodoListView->setCurrentItem ( cn );
1002 mTodoListView->ensureItemVisible ( cn ); 1082 mTodoListView->ensureItemVisible ( cn );
1003 } 1083 }
1004 1084
1005 } 1085 }
1006 } 1086 }
1007 e->accept(); 1087 e->accept();
1008 1088
1009 } 1089 }
1010 1090
1011 } 1091 }
1012 1092
1013} 1093}
1014void KOTodoView::updateTodo( Todo * t, int type ) 1094void KOTodoView::updateTodo( Todo * t, int type )
1015{ 1095{
1016 if ( mBlockUpdate) 1096 if ( mBlockUpdate)
1017 return; 1097 return;
1018 1098
1019 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1099 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1020 itemIterator = mTodoMap.find(t); 1100 itemIterator = mTodoMap.find(t);
1021 if (itemIterator != mTodoMap.end()) { 1101 if (itemIterator != mTodoMap.end()) {
1022 (*itemIterator)->construct(); 1102 (*itemIterator)->construct();
1023 } else { 1103 } else {
1024 if ( type == KOGlobals::EVENTADDED ) { 1104 if ( type == KOGlobals::EVENTADDED ) {
1025 insertTodoItem( t ); 1105 insertTodoItem( t );
1026 } 1106 }
1027 } 1107 }
1028 1108
1029} 1109}
1030 1110
1031void KOTodoView::todoModified(Todo * t , int p ) 1111void KOTodoView::todoModified(Todo * t , int p )
1032{ 1112{
1033 mBlockUpdate = true; 1113 mBlockUpdate = true;
1034 emit todoModifiedSignal ( t, p ); 1114 emit todoModifiedSignal ( t, p );
1035 mBlockUpdate = false; 1115 mBlockUpdate = false;
1036} 1116}
diff --git a/korganizer/kotodoview.h b/korganizer/kotodoview.h
index 6bf0203..0c08677 100644
--- a/korganizer/kotodoview.h
+++ b/korganizer/kotodoview.h
@@ -1,231 +1,234 @@
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#ifndef KOTODOVIEW_H 23#ifndef KOTODOVIEW_H
24#define KOTODOVIEW_H 24#define KOTODOVIEW_H
25 25
26#include <qfont.h> 26#include <qfont.h>
27#include <qfontmetrics.h> 27#include <qfontmetrics.h>
28#include <qlineedit.h> 28#include <qlineedit.h>
29#include <qptrlist.h> 29#include <qptrlist.h>
30#include <qstrlist.h> 30#include <qstrlist.h>
31#include <qlistbox.h> 31#include <qlistbox.h>
32#include <qpopupmenu.h> 32#include <qpopupmenu.h>
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qmap.h> 34#include <qmap.h>
35#include <qlistview.h> 35#include <qlistview.h>
36#include <klistview.h> 36#include <klistview.h>
37 37
38#include <libkcal/calendar.h> 38#include <libkcal/calendar.h>
39#include <libkcal/todo.h> 39#include <libkcal/todo.h>
40 40
41#include <korganizer/baseview.h> 41#include <korganizer/baseview.h>
42 42
43#include "kotodoviewitem.h" 43#include "kotodoviewitem.h"
44#include "koprefs.h" 44#include "koprefs.h"
45#include "koglobals.h" 45#include "koglobals.h"
46 46
47class QDragEnterEvent; 47class QDragEnterEvent;
48class QDragMoveEvent; 48class QDragMoveEvent;
49class QDragLeaveEvent; 49class QDragLeaveEvent;
50class QDropEvent; 50class QDropEvent;
51 51
52class DocPrefs; 52class DocPrefs;
53 53
54class KOTodoListView : public KListView 54class KOTodoListView : public KListView
55{ 55{
56 Q_OBJECT 56 Q_OBJECT
57 public: 57 public:
58 KOTodoListView(Calendar *,QWidget *parent=0,const char *name=0); 58 KOTodoListView(Calendar *,QWidget *parent=0,const char *name=0);
59 virtual ~KOTodoListView() {} 59 virtual ~KOTodoListView() {}
60 60
61 signals: 61 signals:
62 void todoDropped(Todo *); 62 void todoDropped(Todo *);
63 void double_Clicked(QListViewItem *item); 63 void double_Clicked(QListViewItem *item);
64 64
65 protected: 65 protected:
66 void contentsDragEnterEvent(QDragEnterEvent *); 66 void contentsDragEnterEvent(QDragEnterEvent *);
67 void contentsDragMoveEvent(QDragMoveEvent *); 67 void contentsDragMoveEvent(QDragMoveEvent *);
68 void contentsDragLeaveEvent(QDragLeaveEvent *); 68 void contentsDragLeaveEvent(QDragLeaveEvent *);
69 void contentsDropEvent(QDropEvent *); 69 void contentsDropEvent(QDropEvent *);
70 70
71 void contentsMousePressEvent(QMouseEvent *); 71 void contentsMousePressEvent(QMouseEvent *);
72 void contentsMouseMoveEvent(QMouseEvent *); 72 void contentsMouseMoveEvent(QMouseEvent *);
73 void contentsMouseReleaseEvent(QMouseEvent *); 73 void contentsMouseReleaseEvent(QMouseEvent *);
74 void contentsMouseDoubleClickEvent(QMouseEvent *); 74 void contentsMouseDoubleClickEvent(QMouseEvent *);
75 75
76 private: 76 private:
77 QString mName; 77 QString mName;
78 Calendar *mCalendar; 78 Calendar *mCalendar;
79 QPoint mPressPos; 79 QPoint mPressPos;
80 bool mMousePressed; 80 bool mMousePressed;
81 QListViewItem *mOldCurrent; 81 QListViewItem *mOldCurrent;
82 void keyPressEvent ( QKeyEvent * ) ; 82 void keyPressEvent ( QKeyEvent * ) ;
83}; 83};
84 84
85 85
86/** 86/**
87 This is the line-edit on top of the todoview for fast addition of new todos 87 This is the line-edit on top of the todoview for fast addition of new todos
88*/ 88*/
89class KOQuickTodo : public QLineEdit 89class KOQuickTodo : public QLineEdit
90{ 90{
91 public: 91 public:
92 KOQuickTodo(QWidget *parent=0); 92 KOQuickTodo(QWidget *parent=0);
93 protected: 93 protected:
94 void focusInEvent(QFocusEvent *ev); 94 void focusInEvent(QFocusEvent *ev);
95 void focusOutEvent(QFocusEvent *ev); 95 void focusOutEvent(QFocusEvent *ev);
96}; 96};
97 97
98 98
99/** 99/**
100 This class provides a multi-column list view of todo events. 100 This class provides a multi-column list view of todo events.
101 101
102 @short multi-column list view of todo events. 102 @short multi-column list view of todo events.
103 @author Cornelius Schumacher <schumacher@kde.org> 103 @author Cornelius Schumacher <schumacher@kde.org>
104*/ 104*/
105class KOTodoView : public KOrg::BaseView 105class KOTodoView : public KOrg::BaseView
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 KOTodoView(Calendar *, QWidget* parent=0, const char* name=0 ); 109 KOTodoView(Calendar *, QWidget* parent=0, const char* name=0 );
110 ~KOTodoView(); 110 ~KOTodoView();
111 111
112 QPtrList<Incidence> selectedIncidences(); 112 QPtrList<Incidence> selectedIncidences();
113 QPtrList<Todo> selectedTodos(); 113 QPtrList<Todo> selectedTodos();
114 114
115 DateList selectedDates() 115 DateList selectedDates()
116 {DateList q; 116 {DateList q;
117 return q;} 117 return q;}
118 118
119 /** Return number of shown dates. TodoView does not show dates, */ 119 /** Return number of shown dates. TodoView does not show dates, */
120 int currentDateCount() { return 0; } 120 int currentDateCount() { return 0; }
121 void setNarrow(); 121 void setNarrow();
122 122
123 void printPreview(CalPrinter *calPrinter, const QDate &fd, const QDate &td); 123 void printPreview(CalPrinter *calPrinter, const QDate &fd, const QDate &td);
124 124
125 void setDocumentId( const QString & ); 125 void setDocumentId( const QString & );
126 126
127 void saveLayout(KConfig *config, const QString &group) const; 127 void saveLayout(KConfig *config, const QString &group) const;
128 void restoreLayout(KConfig *config, const QString &group); 128 void restoreLayout(KConfig *config, const QString &group);
129 /** Create a popup menu to set categories */ 129 /** Create a popup menu to set categories */
130 QPopupMenu *getCategoryPopupMenu (KOTodoViewItem *todoItem); 130 QPopupMenu *getCategoryPopupMenu (KOTodoViewItem *todoItem);
131 131
132 public slots: 132 public slots:
133 void updateView(); 133 void updateView();
134 void updateConfig(); 134 void updateConfig();
135 135
136 void changeEventDisplay(Event *, int); 136 void changeEventDisplay(Event *, int);
137 137
138 void showDates(const QDate &start, const QDate &end); 138 void showDates(const QDate &start, const QDate &end);
139 void showEvents(QPtrList<Event> eventList); 139 void showEvents(QPtrList<Event> eventList);
140 140
141 void clearSelection(); 141 void clearSelection();
142 void jumpToDate (); 142 void jumpToDate ();
143 143
144 void editItem(QListViewItem *item); 144 void editItem(QListViewItem *item);
145 void showItem(QListViewItem *item,const QPoint &,int); 145 void showItem(QListViewItem *item,const QPoint &,int);
146 void popupMenu(QListViewItem *item,const QPoint &,int); 146 void popupMenu(QListViewItem *item,const QPoint &,int);
147 void newTodo(); 147 void newTodo();
148 void newSubTodo(); 148 void newSubTodo();
149 void unparentTodo(); 149 void unparentTodo();
150 void reparentTodo();
150 void showTodo(); 151 void showTodo();
151 void editTodo(); 152 void editTodo();
152 void cloneTodo(); 153 void cloneTodo();
153 void cancelTodo(); 154 void cancelTodo();
154 void moveTodo(); 155 void moveTodo();
155 void beamTodo(); 156 void beamTodo();
156 void deleteTodo(); 157 void deleteTodo();
157 158
158 void setNewPriority(int); 159 void setNewPriority(int);
159 void setNewPercentage(int); 160 void setNewPercentage(int);
160 void changedCategories(int); 161 void changedCategories(int);
161 162
162 void purgeCompleted(); 163 void purgeCompleted();
163 void toggleCompleted(); 164 void toggleCompleted();
164 void toggleQuickTodo(); 165 void toggleQuickTodo();
165 void updateTodo( Todo *, int ); 166 void updateTodo( Todo *, int );
166 167
167 void itemClicked(QListViewItem *); 168 void itemClicked(QListViewItem *);
168 void itemStateChanged(QListViewItem *); 169 void itemStateChanged(QListViewItem *);
169 void modified(bool); 170 void modified(bool);
170 void itemDoubleClicked(QListViewItem *item); 171 void itemDoubleClicked(QListViewItem *item);
171 172
172 signals: 173 signals:
173 void newTodoSignal(); 174 void newTodoSignal();
174 void newSubTodoSignal(Todo *); 175 void newSubTodoSignal(Todo *);
175 void unparentTodoSignal(Todo *); 176 void unparentTodoSignal(Todo *);
177 void reparentTodoSignal( Todo *,Todo * );
176 void showTodoSignal(Todo *); 178 void showTodoSignal(Todo *);
177 179
178 void editTodoSignal(Todo *); 180 void editTodoSignal(Todo *);
179 void deleteTodoSignal(Todo *); 181 void deleteTodoSignal(Todo *);
180 void todoModifiedSignal (Todo *, int); 182 void todoModifiedSignal (Todo *, int);
181 183
182 void isModified(bool); 184 void isModified(bool);
183 void cloneTodoSignal( Incidence * ); 185 void cloneTodoSignal( Incidence * );
184 void cancelTodoSignal( Incidence * ); 186 void cancelTodoSignal( Incidence * );
185 void moveTodoSignal( Incidence * ); 187 void moveTodoSignal( Incidence * );
186 void beamTodoSignal( Incidence * ); 188 void beamTodoSignal( Incidence * );
187 void purgeCompletedSignal(); 189 void purgeCompletedSignal();
188 190
189 protected slots: 191 protected slots:
190 void processSelectionChange(); 192 void processSelectionChange();
191 void addQuickTodo(); 193 void addQuickTodo();
192 194
193 private: 195 private:
194 /* 196 /*
195 * the TodoEditor approach is rather unscaling in the long 197 * the TodoEditor approach is rather unscaling in the long
196 * run. 198 * run.
197 * Korganizer keeps it in memory and we need to update 199 * Korganizer keeps it in memory and we need to update
198 * 1. make KOTodoViewItem a QObject again? 200 * 1. make KOTodoViewItem a QObject again?
199 * 2. add a public method for setting one todo modified? 201 * 2. add a public method for setting one todo modified?
200 * 3. add a private method for setting a todo modified + friend here? 202 * 3. add a private method for setting a todo modified + friend here?
201 * -- zecke 2002-07-08 203 * -- zecke 2002-07-08
202 */ 204 */
203 friend class KOTodoViewItem; 205 friend class KOTodoViewItem;
204 void setTodoModified( Todo* ); 206 void setTodoModified( Todo* );
205 QMap<Todo *,KOTodoViewItem *>::ConstIterator insertTodoItem(Todo *todo); 207 QMap<Todo *,KOTodoViewItem *>::ConstIterator insertTodoItem(Todo *todo);
206 void restoreItemState( QListViewItem * ); 208 void restoreItemState( QListViewItem * );
207 209
208 KOTodoListView *mTodoListView; 210 KOTodoListView *mTodoListView;
209 QPopupMenu *mItemPopupMenu; 211 QPopupMenu *mItemPopupMenu;
210 QPopupMenu *mPopupMenu; 212 QPopupMenu *mPopupMenu;
211 QPopupMenu *mPriorityPopupMenu; 213 QPopupMenu *mPriorityPopupMenu;
212 QPopupMenu *mPercentageCompletedPopupMenu; 214 QPopupMenu *mPercentageCompletedPopupMenu;
213 QPopupMenu *mCategoryPopupMenu; 215 QPopupMenu *mCategoryPopupMenu;
214 216
215 QMap<int, int> mPercentage; 217 QMap<int, int> mPercentage;
216 QMap<int, int> mPriority; 218 QMap<int, int> mPriority;
217 QMap<int, QString> mCategory; 219 QMap<int, QString> mCategory;
218 KOTodoViewItem *mActiveItem; 220 KOTodoViewItem *mActiveItem;
219 221
220 QMap<Todo *,KOTodoViewItem *> mTodoMap; 222 QMap<Todo *,KOTodoViewItem *> mTodoMap;
221 QString mName; 223 QString mName;
222 224
223 DocPrefs *mDocPrefs; 225 DocPrefs *mDocPrefs;
224 QString mCurrentDoc; 226 QString mCurrentDoc;
225 KOQuickTodo *mQuickAdd; 227 KOQuickTodo *mQuickAdd;
226 bool mBlockUpdate; 228 bool mBlockUpdate;
227 void todoModified(Todo *, int ); 229 void todoModified(Todo *, int );
228 void keyPressEvent ( QKeyEvent * ) ; 230 void keyPressEvent ( QKeyEvent * ) ;
231 KOTodoViewItem * pendingSubtodo;
229}; 232};
230 233
231#endif 234#endif
diff --git a/korganizer/koviewmanager.cpp b/korganizer/koviewmanager.cpp
index 8e6cc53..391f98c 100644
--- a/korganizer/koviewmanager.cpp
+++ b/korganizer/koviewmanager.cpp
@@ -117,459 +117,461 @@ void KOViewManager::writeSettings(KConfig *config)
117 if (mTimeSpanView) { 117 if (mTimeSpanView) {
118 mTimeSpanView->writeSettings(config); 118 mTimeSpanView->writeSettings(config);
119 } 119 }
120 if (mListView) { 120 if (mListView) {
121 mListView->writeSettings(config); 121 mListView->writeSettings(config);
122 } 122 }
123 if (mTodoView) { 123 if (mTodoView) {
124 mTodoView->saveLayout(config,"Todo View"); 124 mTodoView->saveLayout(config,"Todo View");
125 } 125 }
126} 126}
127 127
128void KOViewManager::showView(KOrg::BaseView *view, bool fullScreen ) 128void KOViewManager::showView(KOrg::BaseView *view, bool fullScreen )
129{ 129{
130 130
131 //mFlagShowNextxDays = false; 131 //mFlagShowNextxDays = false;
132 //if(view == mCurrentView) return; 132 //if(view == mCurrentView) return;
133 if ( view == 0 ) { 133 if ( view == 0 ) {
134 view = mCurrentView; 134 view = mCurrentView;
135 if ( view == 0 ) 135 if ( view == 0 )
136 return; 136 return;
137 } 137 }
138 bool full = fullScreen; 138 bool full = fullScreen;
139 if(view == mCurrentView && view != mWhatsNextView ) { 139 if(view == mCurrentView && view != mWhatsNextView ) {
140 if ( mCurrentAgendaView < 0 ) 140 if ( mCurrentAgendaView < 0 )
141 return; 141 return;
142 full = mMainView->leftFrame()->isVisible(); 142 full = mMainView->leftFrame()->isVisible();
143 } else { 143 } else {
144 mCurrentView = view; 144 mCurrentView = view;
145 145
146 // bool full = fullScreen; 146 // bool full = fullScreen;
147 bool isFull = !mMainView->leftFrame()->isVisible(); 147 bool isFull = !mMainView->leftFrame()->isVisible();
148 if ( isFull && KOPrefs::instance()->mViewChangeHoldFullscreen ) 148 if ( isFull && KOPrefs::instance()->mViewChangeHoldFullscreen )
149 full = true; 149 full = true;
150 if ( !isFull && KOPrefs::instance()->mViewChangeHoldNonFullscreen ) 150 if ( !isFull && KOPrefs::instance()->mViewChangeHoldNonFullscreen )
151 full = false; 151 full = false;
152 } 152 }
153 if ( mAgendaView ) mAgendaView->deleteSelectedDateTime(); 153 if ( mAgendaView ) mAgendaView->deleteSelectedDateTime();
154 raiseCurrentView( full ); 154 raiseCurrentView( full );
155 mMainView->processIncidenceSelection( 0 ); 155 mMainView->processIncidenceSelection( 0 );
156 mMainView->updateView(); 156 mMainView->updateView();
157 mMainView->adaptNavigationUnits(); 157 mMainView->adaptNavigationUnits();
158} 158}
159 159
160void KOViewManager::raiseCurrentView( bool fullScreen ) 160void KOViewManager::raiseCurrentView( bool fullScreen )
161{ 161{
162 //qDebug("raiseCurrentView "); 162 //qDebug("raiseCurrentView ");
163 mCurrentAgendaView = 0; 163 mCurrentAgendaView = 0;
164 int wid = mMainView->width() ; 164 int wid = mMainView->width() ;
165 int hei = mMainView->height(); 165 int hei = mMainView->height();
166 if ( mCurrentView == mMonthView ) { 166 if ( mCurrentView == mMonthView ) {
167 mMainView->navigatorBar()->show(); 167 mMainView->navigatorBar()->show();
168 hei -= mMainView->navigatorBar()->sizeHint().height(); 168 hei -= mMainView->navigatorBar()->sizeHint().height();
169 //mMainView->navigatorBar()->hide(); 169 //mMainView->navigatorBar()->hide();
170 } else { 170 } else {
171 mMainView->navigatorBar()->hide(); 171 mMainView->navigatorBar()->hide();
172 } 172 }
173 if ( fullScreen ) { 173 if ( fullScreen ) {
174 mMainView->leftFrame()->hide(); 174 mMainView->leftFrame()->hide();
175 } else { 175 } else {
176 mMainView->leftFrame()->show(); 176 mMainView->leftFrame()->show();
177 if ( KOPrefs::instance()->mVerticalScreen ) 177 if ( KOPrefs::instance()->mVerticalScreen )
178 hei -= mMainView->leftFrame()->height(); 178 hei -= mMainView->leftFrame()->height();
179 else 179 else
180 wid -= mMainView->leftFrame()->width(); 180 wid -= mMainView->leftFrame()->width();
181 } 181 }
182 182
183 if ( globalFlagBlockAgenda == 5 ) { 183 if ( globalFlagBlockAgenda == 5 ) {
184 globalFlagBlockAgenda = 4; 184 globalFlagBlockAgenda = 4;
185 globalFlagBlockAgendaItemPaint = 1; 185 globalFlagBlockAgendaItemPaint = 1;
186 } 186 }
187 mMainView->viewStack()->raiseWidget(mCurrentView); 187 mMainView->viewStack()->raiseWidget(mCurrentView);
188 if ( globalFlagBlockAgenda == 4 ) { 188 if ( globalFlagBlockAgenda == 4 ) {
189 if ( mCurrentView == mAgendaView ) { 189 if ( mCurrentView == mAgendaView ) {
190 //globalFlagBlockAgenda =1 ; 190 //globalFlagBlockAgenda =1 ;
191 if ( KOPrefs::instance()->mSetTimeToDayStartAt ) 191 if ( KOPrefs::instance()->mSetTimeToDayStartAt )
192 mAgendaView->setStartHour( KOPrefs::instance()->mDayBegins ); 192 mAgendaView->setStartHour( KOPrefs::instance()->mDayBegins );
193 else if ( KOPrefs::instance()->mCenterOnCurrentTime ) 193 else if ( KOPrefs::instance()->mCenterOnCurrentTime )
194 mAgendaView->setStartHour( QTime::currentTime ().hour() ); 194 mAgendaView->setStartHour( QTime::currentTime ().hour() );
195 qApp->processEvents(); 195 qApp->processEvents();
196 //qDebug("qApp->processEvents() "); 196 //qDebug("qApp->processEvents() ");
197 globalFlagBlockAgenda = 0; 197 globalFlagBlockAgenda = 0;
198 mAgendaView->repaintAgenda(); 198 mAgendaView->repaintAgenda();
199 199
200 } 200 }
201 globalFlagBlockAgenda = 0; 201 globalFlagBlockAgenda = 0;
202 } 202 }
203 //qDebug("raiseCurrentView ende "); 203 //qDebug("raiseCurrentView ende ");
204} 204}
205 205
206void KOViewManager::updateView() 206void KOViewManager::updateView()
207{ 207{
208 // qDebug("KOViewManager::updateView() "); 208 // qDebug("KOViewManager::updateView() ");
209 // if we are updating mTodoView, we get endless recursion 209 // if we are updating mTodoView, we get endless recursion
210 if ( mTodoView == mCurrentView ) 210 if ( mTodoView == mCurrentView )
211 return; 211 return;
212 if ( mCurrentView ) mCurrentView->updateView(); 212 if ( mCurrentView ) mCurrentView->updateView();
213 213
214} 214}
215 215
216void KOViewManager::updateView(const QDate &start, const QDate &end) 216void KOViewManager::updateView(const QDate &start, const QDate &end)
217{ 217{
218 // kdDebug() << "KOViewManager::updateView()" << endl; 218 // kdDebug() << "KOViewManager::updateView()" << endl;
219 219
220 if (mCurrentView) mCurrentView->showDates(start, end); 220 if (mCurrentView) mCurrentView->showDates(start, end);
221 221
222 if (mTodoView) mTodoView->updateView(); 222 if (mTodoView) mTodoView->updateView();
223} 223}
224 224
225 225
226void KOViewManager::updateWNview() 226void KOViewManager::updateWNview()
227{ 227{
228 if ( mCurrentView == mWhatsNextView && mWhatsNextView ) 228 if ( mCurrentView == mWhatsNextView && mWhatsNextView )
229 mWhatsNextView->updateView(); 229 mWhatsNextView->updateView();
230 230
231} 231}
232void KOViewManager::showWhatsNextView() 232void KOViewManager::showWhatsNextView()
233{ 233{
234 if (!mWhatsNextView) { 234 if (!mWhatsNextView) {
235 mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(), 235 mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(),
236 "KOViewManager::WhatsNextView"); 236 "KOViewManager::WhatsNextView");
237 mWhatsNextView->setEventViewer( mMainView->getEventViewerDialog()); 237 mWhatsNextView->setEventViewer( mMainView->getEventViewerDialog());
238 connect(mMainView, SIGNAL(configChanged()), mWhatsNextView, SLOT(updateConfig())); 238 connect(mMainView, SIGNAL(configChanged()), mWhatsNextView, SLOT(updateConfig()));
239 addView(mWhatsNextView); 239 addView(mWhatsNextView);
240 } 240 }
241 globalFlagBlockAgenda = 1; 241 globalFlagBlockAgenda = 1;
242 showView(mWhatsNextView, true ); 242 showView(mWhatsNextView, true );
243 //mWhatsNextView->updateView(); 243 //mWhatsNextView->updateView();
244 244
245} 245}
246 246
247void KOViewManager::showListView() 247void KOViewManager::showListView()
248{ 248{
249 if (!mListView) { 249 if (!mListView) {
250 mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView"); 250 mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView");
251 addView(mListView); 251 addView(mListView);
252 252
253 connect(mListView, SIGNAL(showIncidenceSignal(Incidence *)), 253 connect(mListView, SIGNAL(showIncidenceSignal(Incidence *)),
254 mMainView, SLOT(showIncidence(Incidence *))); 254 mMainView, SLOT(showIncidence(Incidence *)));
255 connect(mListView, SIGNAL(editIncidenceSignal(Incidence *)), 255 connect(mListView, SIGNAL(editIncidenceSignal(Incidence *)),
256 mMainView, SLOT(editIncidence(Incidence *))); 256 mMainView, SLOT(editIncidence(Incidence *)));
257 connect(mListView, SIGNAL(deleteIncidenceSignal(Incidence *)), 257 connect(mListView, SIGNAL(deleteIncidenceSignal(Incidence *)),
258 mMainView, SLOT(deleteIncidence(Incidence *))); 258 mMainView, SLOT(deleteIncidence(Incidence *)));
259 connect( mListView, SIGNAL( incidenceSelected( Incidence * ) ), 259 connect( mListView, SIGNAL( incidenceSelected( Incidence * ) ),
260 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 260 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
261 connect( mListView, SIGNAL( signalNewEvent() ), 261 connect( mListView, SIGNAL( signalNewEvent() ),
262 mMainView, SLOT( newEvent() ) ); 262 mMainView, SLOT( newEvent() ) );
263 connect(mMainView, SIGNAL(configChanged()), mListView, SLOT(updateConfig())); 263 connect(mMainView, SIGNAL(configChanged()), mListView, SLOT(updateConfig()));
264 connect( mListView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), 264 connect( mListView, SIGNAL( cloneIncidenceSignal( Incidence * ) ),
265 mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); 265 mMainView, SLOT ( cloneIncidence( Incidence * ) ) );
266 connect( mListView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), 266 connect( mListView, SIGNAL( cancelIncidenceSignal( Incidence * ) ),
267 mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); 267 mMainView, SLOT ( cancelIncidence( Incidence * ) ) );
268 connect( mListView, SIGNAL( moveIncidenceSignal( Incidence * ) ), 268 connect( mListView, SIGNAL( moveIncidenceSignal( Incidence * ) ),
269 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 269 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
270 connect( mListView, SIGNAL( beamIncidenceSignal( Incidence * ) ), 270 connect( mListView, SIGNAL( beamIncidenceSignal( Incidence * ) ),
271 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 271 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
272 } 272 }
273 // bool temp = mFlagShowNextxDays; 273 // bool temp = mFlagShowNextxDays;
274 //globalFlagBlockPainting = true; 274 //globalFlagBlockPainting = true;
275 globalFlagBlockAgenda = 1; 275 globalFlagBlockAgenda = 1;
276 if ( KOPrefs::instance()->mListViewMonthTimespan ) 276 if ( KOPrefs::instance()->mListViewMonthTimespan )
277 mMainView->dateNavigator()->selectMonth(); 277 mMainView->dateNavigator()->selectMonth();
278 showView(mListView, KOPrefs::instance()->mFullViewTodo); 278 showView(mListView, KOPrefs::instance()->mFullViewTodo);
279 //mFlagShowNextxDays = temp; 279 //mFlagShowNextxDays = temp;
280} 280}
281 281
282void KOViewManager::showAgendaView( bool fullScreen ) 282void KOViewManager::showAgendaView( bool fullScreen )
283{ 283{
284 284
285 mMainView->dialogManager()->hideSearchDialog(); 285 mMainView->dialogManager()->hideSearchDialog();
286 // qDebug("KOViewManager::showAgendaView "); 286 // qDebug("KOViewManager::showAgendaView ");
287 bool full; 287 bool full;
288 full = fullScreen; 288 full = fullScreen;
289 if (!mAgendaView) { 289 if (!mAgendaView) {
290 full = false; 290 full = false;
291 mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView"); 291 mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView");
292 addView(mAgendaView); 292 addView(mAgendaView);
293#ifndef DESKTOP_VERSION 293#ifndef DESKTOP_VERSION
294 QPEApplication::setStylusOperation( mAgendaView, QPEApplication::RightOnHold ); 294 QPEApplication::setStylusOperation( mAgendaView, QPEApplication::RightOnHold );
295#endif 295#endif
296 connect( mAgendaView, SIGNAL( incidenceChanged(Incidence *, int )), 296 connect( mAgendaView, SIGNAL( incidenceChanged(Incidence *, int )),
297 mMainView, SLOT( changeIncidenceDisplay( Incidence *, int ) )); 297 mMainView, SLOT( changeIncidenceDisplay( Incidence *, int ) ));
298 298
299 // SIGNALS/SLOTS FOR DAY/WEEK VIEW 299 // SIGNALS/SLOTS FOR DAY/WEEK VIEW
300 connect(mAgendaView,SIGNAL(newEventSignal(QDateTime)), 300 connect(mAgendaView,SIGNAL(newEventSignal(QDateTime)),
301 mMainView, SLOT(newEvent(QDateTime))); 301 mMainView, SLOT(newEvent(QDateTime)));
302 // connect(mAgendaView,SIGNAL(newEventSignal(QDateTime,QDateTime)), 302 // connect(mAgendaView,SIGNAL(newEventSignal(QDateTime,QDateTime)),
303 // mMainView, SLOT(newEvent(QDateTime,QDateTime))); 303 // mMainView, SLOT(newEvent(QDateTime,QDateTime)));
304 connect(mAgendaView,SIGNAL(newEventSignal(QDate)), 304 connect(mAgendaView,SIGNAL(newEventSignal(QDate)),
305 mMainView, SLOT(newEvent(QDate))); 305 mMainView, SLOT(newEvent(QDate)));
306 306
307 connect(mAgendaView, SIGNAL(editIncidenceSignal(Incidence *)), 307 connect(mAgendaView, SIGNAL(editIncidenceSignal(Incidence *)),
308 mMainView, SLOT(editIncidence(Incidence *))); 308 mMainView, SLOT(editIncidence(Incidence *)));
309 connect(mAgendaView, SIGNAL(showIncidenceSignal(Incidence *)), 309 connect(mAgendaView, SIGNAL(showIncidenceSignal(Incidence *)),
310 mMainView, SLOT(showIncidence(Incidence *))); 310 mMainView, SLOT(showIncidence(Incidence *)));
311 connect(mAgendaView, SIGNAL(deleteIncidenceSignal(Incidence *)), 311 connect(mAgendaView, SIGNAL(deleteIncidenceSignal(Incidence *)),
312 mMainView, SLOT(deleteIncidence(Incidence *))); 312 mMainView, SLOT(deleteIncidence(Incidence *)));
313 313
314 connect( mAgendaView, SIGNAL( incidenceSelected( Incidence * ) ), 314 connect( mAgendaView, SIGNAL( incidenceSelected( Incidence * ) ),
315 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 315 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
316 316
317 connect(mAgendaView, SIGNAL( toggleExpand() ), 317 connect(mAgendaView, SIGNAL( toggleExpand() ),
318 mMainView, SLOT( toggleExpand() ) ); 318 mMainView, SLOT( toggleExpand() ) );
319 319
320 connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ), 320 connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ),
321 mAgendaView, SLOT( setExpandedButton( bool ) ) ); 321 mAgendaView, SLOT( setExpandedButton( bool ) ) );
322 connect( mAgendaView, SIGNAL( cloneIncidenceSignal(Incidence *) ), 322 connect( mAgendaView, SIGNAL( cloneIncidenceSignal(Incidence *) ),
323 mMainView, SLOT(cloneIncidence(Incidence *) ) ) ; 323 mMainView, SLOT(cloneIncidence(Incidence *) ) ) ;
324 connect( mAgendaView, SIGNAL( cancelIncidenceSignal(Incidence *) ), 324 connect( mAgendaView, SIGNAL( cancelIncidenceSignal(Incidence *) ),
325 mMainView, SLOT(cancelIncidence(Incidence *) ) ) ; 325 mMainView, SLOT(cancelIncidence(Incidence *) ) ) ;
326 connect(mMainView, SIGNAL(configChanged()), mAgendaView, SLOT(updateConfig())); 326 connect(mMainView, SIGNAL(configChanged()), mAgendaView, SLOT(updateConfig()));
327 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mAgendaView, 327 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mAgendaView,
328 SLOT( updateTodo( Todo *, int ) ) ); 328 SLOT( updateTodo( Todo *, int ) ) );
329 connect( mAgendaView,SIGNAL( todoMoved( Todo *, int )), 329 connect( mAgendaView,SIGNAL( todoMoved( Todo *, int )),
330 mMainView, SIGNAL( todoModified( Todo *, int ))); 330 mMainView, SIGNAL( todoModified( Todo *, int )));
331 connect( mAgendaView, SIGNAL( moveIncidenceSignal( Incidence * ) ), 331 connect( mAgendaView, SIGNAL( moveIncidenceSignal( Incidence * ) ),
332 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 332 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
333 connect( mAgendaView, SIGNAL( beamIncidenceSignal( Incidence * ) ), 333 connect( mAgendaView, SIGNAL( beamIncidenceSignal( Incidence * ) ),
334 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 334 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
335 mAgendaView->readSettings(); 335 mAgendaView->readSettings();
336 mAgendaView->updateConfig(); 336 mAgendaView->updateConfig();
337 } 337 }
338 338
339 showView( mAgendaView, full); 339 showView( mAgendaView, full);
340 340
341} 341}
342 342
343void KOViewManager::showDayView() 343void KOViewManager::showDayView()
344{ 344{
345 mFlagShowNextxDays = false; 345 mFlagShowNextxDays = false;
346 globalFlagBlockLabel = 1; 346 globalFlagBlockLabel = 1;
347 globalFlagBlockAgenda = 1; 347 globalFlagBlockAgenda = 1;
348 if ( mCurrentAgendaView != 1 ) 348 if ( mCurrentAgendaView != 1 )
349 mCurrentAgendaView = -1; 349 mCurrentAgendaView = -1;
350 showAgendaView(); 350 showAgendaView();
351 qApp->processEvents(); 351 qApp->processEvents();
352 globalFlagBlockAgenda = 2; 352 globalFlagBlockAgenda = 2;
353 globalFlagBlockLabel = 0; 353 globalFlagBlockLabel = 0;
354 mMainView->dateNavigator()->selectDates( 1 ); 354 mMainView->dateNavigator()->selectDates( 1 );
355 mCurrentAgendaView = 1 ; 355 mCurrentAgendaView = 1 ;
356 356
357} 357}
358 358
359void KOViewManager::showWorkWeekView() 359void KOViewManager::showWorkWeekView()
360{ 360{
361 mFlagShowNextxDays = false; 361 mFlagShowNextxDays = false;
362 globalFlagBlockAgenda = 1; 362 globalFlagBlockAgenda = 1;
363 globalFlagBlockLabel = 1; 363 globalFlagBlockLabel = 1;
364 if ( mCurrentAgendaView != 5 ) 364 if ( mCurrentAgendaView != 5 )
365 mCurrentAgendaView = -1; 365 mCurrentAgendaView = -1;
366 showAgendaView(); 366 showAgendaView();
367 qApp->processEvents(); 367 qApp->processEvents();
368 globalFlagBlockAgenda = 2; 368 globalFlagBlockAgenda = 2;
369 globalFlagBlockLabel = 0; 369 globalFlagBlockLabel = 0;
370 mMainView->dateNavigator()->selectWorkWeek(); 370 mMainView->dateNavigator()->selectWorkWeek();
371 mCurrentAgendaView = 5 ; 371 mCurrentAgendaView = 5 ;
372 372
373} 373}
374 374
375void KOViewManager::showWeekView() 375void KOViewManager::showWeekView()
376{ 376{
377 /* 377 /*
378 globalFlagBlockAgenda = 2; 378 globalFlagBlockAgenda = 2;
379 qDebug("4globalFlagBlockAgenda = 2; "); 379 qDebug("4globalFlagBlockAgenda = 2; ");
380 //globalFlagBlockPainting = true; 380 //globalFlagBlockPainting = true;
381 mMainView->dateNavigator()->selectWeek(); 381 mMainView->dateNavigator()->selectWeek();
382 showAgendaView(); 382 showAgendaView();
383 */ 383 */
384 384
385 385
386 mFlagShowNextxDays = false; 386 mFlagShowNextxDays = false;
387 globalFlagBlockAgenda = 1; 387 globalFlagBlockAgenda = 1;
388 globalFlagBlockLabel = 1; 388 globalFlagBlockLabel = 1;
389 if ( mCurrentAgendaView != 7 ) 389 if ( mCurrentAgendaView != 7 )
390 mCurrentAgendaView = -1; 390 mCurrentAgendaView = -1;
391 showAgendaView(); 391 showAgendaView();
392 qApp->processEvents(); 392 qApp->processEvents();
393 globalFlagBlockAgenda = 2; 393 globalFlagBlockAgenda = 2;
394 globalFlagBlockLabel = 0; 394 globalFlagBlockLabel = 0;
395 mMainView->dateNavigator()->selectWeek(); 395 mMainView->dateNavigator()->selectWeek();
396 mCurrentAgendaView = 7 ; 396 mCurrentAgendaView = 7 ;
397} 397}
398 398
399void KOViewManager::showNextXView() 399void KOViewManager::showNextXView()
400{ 400{
401 401
402 globalFlagBlockAgenda = 1; 402 globalFlagBlockAgenda = 1;
403 if ( mCurrentAgendaView != 3 ) 403 if ( mCurrentAgendaView != 3 )
404 mCurrentAgendaView = -1; 404 mCurrentAgendaView = -1;
405 showAgendaView(KOPrefs::instance()->mFullViewMonth); 405 showAgendaView(KOPrefs::instance()->mFullViewMonth);
406 globalFlagBlockAgenda = 2; 406 globalFlagBlockAgenda = 2;
407 mMainView->dateNavigator()->selectDates( QDate::currentDate(), 407 mMainView->dateNavigator()->selectDates( QDate::currentDate(),
408 KOPrefs::instance()->mNextXDays ); 408 KOPrefs::instance()->mNextXDays );
409 mFlagShowNextxDays = true; 409 mFlagShowNextxDays = true;
410 mCurrentAgendaView = 3 ; 410 mCurrentAgendaView = 3 ;
411} 411}
412bool KOViewManager::showsNextDays() 412bool KOViewManager::showsNextDays()
413{ 413{
414 return mFlagShowNextxDays; 414 return mFlagShowNextxDays;
415} 415}
416void KOViewManager::showMonthView() 416void KOViewManager::showMonthView()
417{ 417{
418 if (!mMonthView) { 418 if (!mMonthView) {
419 mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView"); 419 mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView");
420 420
421 addView(mMonthView); 421 addView(mMonthView);
422 // mMonthView->show(); 422 // mMonthView->show();
423 // SIGNALS/SLOTS FOR MONTH VIEW 423 // SIGNALS/SLOTS FOR MONTH VIEW
424 connect(mMonthView, SIGNAL(newEventSignal(QDateTime)), 424 connect(mMonthView, SIGNAL(newEventSignal(QDateTime)),
425 mMainView, SLOT(newEvent(QDateTime))); 425 mMainView, SLOT(newEvent(QDateTime)));
426 426
427 connect(mMonthView, SIGNAL(showIncidenceSignal(Incidence *)), 427 connect(mMonthView, SIGNAL(showIncidenceSignal(Incidence *)),
428 mMainView, SLOT(showIncidence(Incidence *))); 428 mMainView, SLOT(showIncidence(Incidence *)));
429 connect(mMonthView, SIGNAL(editIncidenceSignal(Incidence *)), 429 connect(mMonthView, SIGNAL(editIncidenceSignal(Incidence *)),
430 mMainView, SLOT(editIncidence(Incidence *))); 430 mMainView, SLOT(editIncidence(Incidence *)));
431 connect(mMonthView, SIGNAL(deleteIncidenceSignal(Incidence *)), 431 connect(mMonthView, SIGNAL(deleteIncidenceSignal(Incidence *)),
432 mMainView, SLOT(deleteIncidence(Incidence *))); 432 mMainView, SLOT(deleteIncidence(Incidence *)));
433 433
434 connect( mMonthView, SIGNAL( incidenceSelected( Incidence * ) ), 434 connect( mMonthView, SIGNAL( incidenceSelected( Incidence * ) ),
435 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 435 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
436 connect( mMonthView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), 436 connect( mMonthView, SIGNAL( cloneIncidenceSignal( Incidence * ) ),
437 mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); 437 mMainView, SLOT ( cloneIncidence( Incidence * ) ) );
438 connect( mMonthView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), 438 connect( mMonthView, SIGNAL( cancelIncidenceSignal( Incidence * ) ),
439 mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); 439 mMainView, SLOT ( cancelIncidence( Incidence * ) ) );
440 440
441 connect( mMonthView, SIGNAL( moveIncidenceSignal( Incidence * ) ), 441 connect( mMonthView, SIGNAL( moveIncidenceSignal( Incidence * ) ),
442 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 442 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
443 connect( mMonthView, SIGNAL( beamIncidenceSignal( Incidence * ) ), 443 connect( mMonthView, SIGNAL( beamIncidenceSignal( Incidence * ) ),
444 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 444 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
445 connect( mMonthView, SIGNAL( selectWeekNum( int ) ), 445 connect( mMonthView, SIGNAL( selectWeekNum( int ) ),
446 mMainView, SLOT ( selectWeekNum( int ) ) ); 446 mMainView, SLOT ( selectWeekNum( int ) ) );
447 connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig())); 447 connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig()));
448 mMonthView->updateConfig(); 448 mMonthView->updateConfig();
449 } 449 }
450 450
451 globalFlagBlockAgenda = 1; 451 globalFlagBlockAgenda = 1;
452 //mFlagShowNextxDays = false; 452 //mFlagShowNextxDays = false;
453 // if(mMonthView == mCurrentView) return; 453 // if(mMonthView == mCurrentView) return;
454 mMainView->dateNavigator()->selectMonth(); 454 mMainView->dateNavigator()->selectMonth();
455 // DateList tmpList = mMainView->dateNavigator()->selectedDates( ); 455 // DateList tmpList = mMainView->dateNavigator()->selectedDates( );
456 //mMonthView->showDates(tmpList.first(), tmpList.last()); 456 //mMonthView->showDates(tmpList.first(), tmpList.last());
457 457
458 showView(mMonthView, true ); 458 showView(mMonthView, true );
459 459
460} 460}
461 461
462void KOViewManager::showTodoView() 462void KOViewManager::showTodoView()
463{ 463{
464 //mFlagShowNextxDays = false; 464 //mFlagShowNextxDays = false;
465 if ( !mTodoView ) { 465 if ( !mTodoView ) {
466 mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(), 466 mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(),
467 "KOViewManager::TodoView" ); 467 "KOViewManager::TodoView" );
468 468
469 addView( mTodoView ); 469 addView( mTodoView );
470 // QPEApplication::setStylusOperation( mTodoView, QPEApplication::RightOnHold ); 470 // QPEApplication::setStylusOperation( mTodoView, QPEApplication::RightOnHold );
471 471
472 // SIGNALS/SLOTS FOR TODO VIEW 472 // SIGNALS/SLOTS FOR TODO VIEW
473 connect( mTodoView, SIGNAL( newTodoSignal() ), 473 connect( mTodoView, SIGNAL( newTodoSignal() ),
474 mMainView, SLOT( newTodo() ) ); 474 mMainView, SLOT( newTodo() ) );
475 connect( mTodoView, SIGNAL( newSubTodoSignal( Todo * ) ), 475 connect( mTodoView, SIGNAL( newSubTodoSignal( Todo * ) ),
476 mMainView, SLOT( newSubTodo( Todo *) ) ); 476 mMainView, SLOT( newSubTodo( Todo *) ) );
477 connect( mTodoView, SIGNAL( showTodoSignal( Todo *) ), 477 connect( mTodoView, SIGNAL( showTodoSignal( Todo *) ),
478 mMainView, SLOT( showTodo( Todo * ) ) ); 478 mMainView, SLOT( showTodo( Todo * ) ) );
479 connect( mTodoView, SIGNAL( editTodoSignal( Todo * ) ), 479 connect( mTodoView, SIGNAL( editTodoSignal( Todo * ) ),
480 mMainView, SLOT( editTodo( Todo * ) ) ); 480 mMainView, SLOT( editTodo( Todo * ) ) );
481 connect( mTodoView, SIGNAL( deleteTodoSignal( Todo * ) ), 481 connect( mTodoView, SIGNAL( deleteTodoSignal( Todo * ) ),
482 mMainView, SLOT( deleteTodo( Todo * ) ) ); 482 mMainView, SLOT( deleteTodo( Todo * ) ) );
483 connect( mTodoView, SIGNAL( purgeCompletedSignal() ), 483 connect( mTodoView, SIGNAL( purgeCompletedSignal() ),
484 mMainView, SLOT( purgeCompleted() ) ); 484 mMainView, SLOT( purgeCompleted() ) );
485 485
486 connect( mTodoView, SIGNAL( incidenceSelected( Incidence * ) ), 486 connect( mTodoView, SIGNAL( incidenceSelected( Incidence * ) ),
487 mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); 487 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
488 488
489 connect( mMainView, SIGNAL( configChanged() ), mTodoView, 489 connect( mMainView, SIGNAL( configChanged() ), mTodoView,
490 SLOT( updateConfig() ) ); 490 SLOT( updateConfig() ) );
491 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mTodoView, 491 connect( mMainView, SIGNAL( todoModified( Todo *, int )), mTodoView,
492 SLOT( updateTodo( Todo *, int ) ) ); 492 SLOT( updateTodo( Todo *, int ) ) );
493 connect( mTodoView, SIGNAL( todoModifiedSignal( Todo *, int ) ), 493 connect( mTodoView, SIGNAL( todoModifiedSignal( Todo *, int ) ),
494 mMainView, SIGNAL ( todoModified( Todo *, int ) ) ); 494 mMainView, SIGNAL ( todoModified( Todo *, int ) ) );
495 connect( mTodoView, SIGNAL( cloneTodoSignal( Incidence * ) ), 495 connect( mTodoView, SIGNAL( cloneTodoSignal( Incidence * ) ),
496 mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); 496 mMainView, SLOT ( cloneIncidence( Incidence * ) ) );
497 connect( mTodoView, SIGNAL( cancelTodoSignal( Incidence * ) ), 497 connect( mTodoView, SIGNAL( cancelTodoSignal( Incidence * ) ),
498 mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); 498 mMainView, SLOT ( cancelIncidence( Incidence * ) ) );
499 connect( mTodoView, SIGNAL( unparentTodoSignal( Todo * ) ), 499 connect( mTodoView, SIGNAL( unparentTodoSignal( Todo * ) ),
500 mMainView, SLOT ( todo_unsub( Todo * ) ) ); 500 mMainView, SLOT ( todo_unsub( Todo * ) ) );
501 connect( mTodoView, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
502 mMainView, SLOT ( todo_resub( Todo *, Todo *) ) );
501 connect( mTodoView, SIGNAL( moveTodoSignal( Incidence * ) ), 503 connect( mTodoView, SIGNAL( moveTodoSignal( Incidence * ) ),
502 mMainView, SLOT ( moveIncidence( Incidence * ) ) ); 504 mMainView, SLOT ( moveIncidence( Incidence * ) ) );
503 connect( mTodoView, SIGNAL( beamTodoSignal( Incidence * ) ), 505 connect( mTodoView, SIGNAL( beamTodoSignal( Incidence * ) ),
504 mMainView, SLOT ( beamIncidence( Incidence * ) ) ); 506 mMainView, SLOT ( beamIncidence( Incidence * ) ) );
505 KConfig *config = KOGlobals::config(); 507 KConfig *config = KOGlobals::config();
506 mTodoView->restoreLayout(config,"Todo View"); 508 mTodoView->restoreLayout(config,"Todo View");
507 } 509 }
508 510
509 globalFlagBlockAgenda = 1; 511 globalFlagBlockAgenda = 1;
510 showView( mTodoView, true ); 512 showView( mTodoView, true );
511 513
512} 514}
513 515
514void KOViewManager::showJournalView() 516void KOViewManager::showJournalView()
515{ 517{
516 //mFlagShowNextxDays = false; 518 //mFlagShowNextxDays = false;
517 if (!mJournalView) { 519 if (!mJournalView) {
518 mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(), 520 mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(),
519 "KOViewManager::JournalView"); 521 "KOViewManager::JournalView");
520 connect( mMainView, SIGNAL( configChanged() ), mJournalView, 522 connect( mMainView, SIGNAL( configChanged() ), mJournalView,
521 SLOT( updateConfig() ) ); 523 SLOT( updateConfig() ) );
522 connect(mJournalView, SIGNAL(deleteJournal(Journal *) ), mMainView,SLOT(deleteJournal(Journal *)) ); 524 connect(mJournalView, SIGNAL(deleteJournal(Journal *) ), mMainView,SLOT(deleteJournal(Journal *)) );
523 addView(mJournalView); 525 addView(mJournalView);
524 } 526 }
525 527
526 showView(mJournalView); 528 showView(mJournalView);
527} 529}
528 530
529void KOViewManager::showTimeSpanView() 531void KOViewManager::showTimeSpanView()
530{ 532{
531 //mFlagShowNextxDays = false; 533 //mFlagShowNextxDays = false;
532 if (!mTimeSpanView) { 534 if (!mTimeSpanView) {
533 mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(), 535 mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(),
534 "KOViewManager::TimeSpanView"); 536 "KOViewManager::TimeSpanView");
535 addView(mTimeSpanView); 537 addView(mTimeSpanView);
536 538
537 mTimeSpanView->readSettings(); 539 mTimeSpanView->readSettings();
538 } 540 }
539 541
540 showView(mTimeSpanView); 542 showView(mTimeSpanView);
541} 543}
542 544
543Incidence *KOViewManager::currentSelection() 545Incidence *KOViewManager::currentSelection()
544{ 546{
545 if (!mCurrentView) return 0; 547 if (!mCurrentView) return 0;
546 if ( mCurrentView == mListView ) { 548 if ( mCurrentView == mListView ) {
547 if ( mListView->currentItem() ) 549 if ( mListView->currentItem() )
548 return mListView->currentItem(); 550 return mListView->currentItem();
549 } 551 }
550 return mCurrentView->selectedIncidences().first(); 552 return mCurrentView->selectedIncidences().first();
551} 553}
552 554
553QDate KOViewManager::currentSelectionDate() 555QDate KOViewManager::currentSelectionDate()
554{ 556{
555 QDate qd; 557 QDate qd;
556 if (mCurrentView) { 558 if (mCurrentView) {
557 DateList qvl = mCurrentView->selectedDates(); 559 DateList qvl = mCurrentView->selectedDates();
558 if (!qvl.isEmpty()) qd = qvl.first(); 560 if (!qvl.isEmpty()) qd = qvl.first();
559 } 561 }
560 return qd; 562 return qd;
561} 563}
562 564
563void KOViewManager::addView(KOrg::BaseView *view) 565void KOViewManager::addView(KOrg::BaseView *view)
564{ 566{
565#if QT_VERSION >= 300 567#if QT_VERSION >= 300
566 mMainView->viewStack()->addWidget( view ); 568 mMainView->viewStack()->addWidget( view );
567#else 569#else
568 mMainView->viewStack()->addWidget( view, 1 ); 570 mMainView->viewStack()->addWidget( view, 1 );
569#endif 571#endif
570} 572}
571 573
572void KOViewManager::setDocumentId( const QString &id ) 574void KOViewManager::setDocumentId( const QString &id )
573{ 575{
574 if (mTodoView) mTodoView->setDocumentId( id ); 576 if (mTodoView) mTodoView->setDocumentId( id );
575} 577}
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 8daacc7..06470b8 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -766,768 +766,771 @@ void MainWindow::initActions()
766 action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this ); 766 action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this );
767 action->addTo( importMenu ); 767 action->addTo( importMenu );
768 connect( action, SIGNAL( activated() ), 768 connect( action, SIGNAL( activated() ),
769 this, SLOT( printCal() ) ); 769 this, SLOT( printCal() ) );
770 770
771 icon = loadPixmap( pathString + "print" ); 771 icon = loadPixmap( pathString + "print" );
772 action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this ); 772 action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this );
773 action->addTo( importMenu ); 773 action->addTo( importMenu );
774 connect( action, SIGNAL( activated() ), 774 connect( action, SIGNAL( activated() ),
775 this, SLOT( printSel() ) ); 775 this, SLOT( printSel() ) );
776#endif 776#endif
777 importMenu->insertSeparator(); 777 importMenu->insertSeparator();
778 action = new QAction( "beam all", i18n("Save"), 0, 778 action = new QAction( "beam all", i18n("Save"), 0,
779 this ); 779 this );
780 action->addTo( importMenu ); 780 action->addTo( importMenu );
781 connect( action, SIGNAL( activated() ), this, SLOT( save() ) ); 781 connect( action, SIGNAL( activated() ), this, SLOT( save() ) );
782 action = new QAction( "beam all", i18n("Exit (+save)"), 0, 782 action = new QAction( "beam all", i18n("Exit (+save)"), 0,
783 this ); 783 this );
784 action->addTo( importMenu ); 784 action->addTo( importMenu );
785 connect( action, SIGNAL( activated() ), this, SLOT( close() ) ); 785 connect( action, SIGNAL( activated() ), this, SLOT( close() ) );
786 786
787 //menuBar->insertItem( "Configure",configureMenu ); 787 //menuBar->insertItem( "Configure",configureMenu );
788 //configureMenu->insertItem( "Toolbar",configureToolBarMenu ); 788 //configureMenu->insertItem( "Toolbar",configureToolBarMenu );
789 icon = loadPixmap( "korganizer/korganizer" ); 789 icon = loadPixmap( "korganizer/korganizer" );
790 action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this ); 790 action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this );
791 action->addTo( helpMenu ); 791 action->addTo( helpMenu );
792 connect( action, SIGNAL( activated() ), 792 connect( action, SIGNAL( activated() ),
793 SLOT( keyBindings() ) ); 793 SLOT( keyBindings() ) );
794 action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this ); 794 action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this );
795 action->addTo( helpMenu ); 795 action->addTo( helpMenu );
796 connect( action, SIGNAL( activated() ), 796 connect( action, SIGNAL( activated() ),
797 SLOT( features() ) ); 797 SLOT( features() ) );
798 action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this ); 798 action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this );
799 action->addTo( helpMenu ); 799 action->addTo( helpMenu );
800 connect( action, SIGNAL( activated() ), 800 connect( action, SIGNAL( activated() ),
801 SLOT( aboutAutoSaving() ) ); 801 SLOT( aboutAutoSaving() ) );
802 action = new QAction( "Problemd", i18n("Known Problems..."), 0,this ); 802 action = new QAction( "Problemd", i18n("Known Problems..."), 0,this );
803 action->addTo( helpMenu ); 803 action->addTo( helpMenu );
804 connect( action, SIGNAL( activated() ), 804 connect( action, SIGNAL( activated() ),
805 SLOT( aboutKnownBugs() ) ); 805 SLOT( aboutKnownBugs() ) );
806 action = new QAction( "Translate Howto", i18n("User translation..."), 0,this ); 806 action = new QAction( "Translate Howto", i18n("User translation..."), 0,this );
807 action->addTo( helpMenu ); 807 action->addTo( helpMenu );
808 connect( action, SIGNAL( activated() ), 808 connect( action, SIGNAL( activated() ),
809 SLOT( usertrans() ) ); 809 SLOT( usertrans() ) );
810 action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this ); 810 action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this );
811 action->addTo( helpMenu ); 811 action->addTo( helpMenu );
812 connect( action, SIGNAL( activated() ), 812 connect( action, SIGNAL( activated() ),
813 SLOT( synchowto() ) ); 813 SLOT( synchowto() ) );
814 action = new QAction( "Whats New", i18n("What's new?"), 0,this ); 814 action = new QAction( "Whats New", i18n("What's new?"), 0,this );
815 action->addTo( helpMenu ); 815 action->addTo( helpMenu );
816 connect( action, SIGNAL( activated() ), 816 connect( action, SIGNAL( activated() ),
817 SLOT( whatsNew() ) ); 817 SLOT( whatsNew() ) );
818 action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this ); 818 action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this );
819 action->addTo( helpMenu ); 819 action->addTo( helpMenu );
820 connect( action, SIGNAL( activated() ), 820 connect( action, SIGNAL( activated() ),
821 SLOT( faq() ) ); 821 SLOT( faq() ) );
822 822
823 823
824 action = new QAction( "about", i18n("About..."), 0, this ); 824 action = new QAction( "about", i18n("About..."), 0, this );
825 action->addTo( helpMenu ); 825 action->addTo( helpMenu );
826 connect( action, SIGNAL( activated() ), 826 connect( action, SIGNAL( activated() ),
827 SLOT( about() ) ); 827 SLOT( about() ) );
828 action = new QAction( "licence", i18n("Licence..."), 0, this ); 828 action = new QAction( "licence", i18n("Licence..."), 0, this );
829 action->addTo( helpMenu ); 829 action->addTo( helpMenu );
830 connect( action, SIGNAL( activated() ), 830 connect( action, SIGNAL( activated() ),
831 SLOT( licence() ) ); 831 SLOT( licence() ) );
832 //menuBar->insertSeparator(); 832 //menuBar->insertSeparator();
833 833
834 // ****************************************************** 834 // ******************************************************
835 // menubar icons 835 // menubar icons
836 836
837 837
838 iconToolBar->setHorizontalStretchable (true ); 838 iconToolBar->setHorizontalStretchable (true );
839 //menuBar->insertItem( iconToolBar ); 839 //menuBar->insertItem( iconToolBar );
840 //xdays_action 840 //xdays_action
841 if (p-> mShowIconNewEvent) 841 if (p-> mShowIconNewEvent)
842 ne_action->addTo( iconToolBar ); 842 ne_action->addTo( iconToolBar );
843 if (p->mShowIconNewTodo ) 843 if (p->mShowIconNewTodo )
844 nt_action->addTo( iconToolBar ); 844 nt_action->addTo( iconToolBar );
845 if (p-> mShowIconSearch) 845 if (p-> mShowIconSearch)
846 search_action->addTo( iconToolBar ); 846 search_action->addTo( iconToolBar );
847 if (p-> mShowIconNext) 847 if (p-> mShowIconNext)
848 whatsnext_action->addTo( iconToolBar ); 848 whatsnext_action->addTo( iconToolBar );
849 if (p-> mShowIconNextDays) 849 if (p-> mShowIconNextDays)
850 xdays_action->addTo( iconToolBar ); 850 xdays_action->addTo( iconToolBar );
851 if (p-> mShowIconList) 851 if (p-> mShowIconList)
852 showlist_action->addTo( iconToolBar ); 852 showlist_action->addTo( iconToolBar );
853 if (p-> mShowIconDay1) 853 if (p-> mShowIconDay1)
854 day1_action->addTo( iconToolBar ); 854 day1_action->addTo( iconToolBar );
855 if (p-> mShowIconDay5) 855 if (p-> mShowIconDay5)
856 day5_action->addTo( iconToolBar ); 856 day5_action->addTo( iconToolBar );
857 if (p-> mShowIconDay7) 857 if (p-> mShowIconDay7)
858 day7_action->addTo( iconToolBar ); 858 day7_action->addTo( iconToolBar );
859 if (p-> mShowIconMonth) 859 if (p-> mShowIconMonth)
860 month_action->addTo( iconToolBar ); 860 month_action->addTo( iconToolBar );
861 if (p-> mShowIconTodoview) 861 if (p-> mShowIconTodoview)
862 todoview_action->addTo( iconToolBar ); 862 todoview_action->addTo( iconToolBar );
863 if (p-> mShowIconJournal) 863 if (p-> mShowIconJournal)
864 viewjournal_action->addTo( iconToolBar ); 864 viewjournal_action->addTo( iconToolBar );
865 icon = loadPixmap( pathString + "2leftarrowB" ); 865 icon = loadPixmap( pathString + "2leftarrowB" );
866 configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200, 14); 866 configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200, 14);
867 if (p-> mShowIconBackFast) { 867 if (p-> mShowIconBackFast) {
868 action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this ); 868 action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this );
869 connect( action, SIGNAL( activated() ), 869 connect( action, SIGNAL( activated() ),
870 mView, SLOT( goPreviousMonth() ) ); 870 mView, SLOT( goPreviousMonth() ) );
871 action->addTo( iconToolBar ); 871 action->addTo( iconToolBar );
872 } 872 }
873 icon = loadPixmap( pathString + "1leftarrowB" ); 873 icon = loadPixmap( pathString + "1leftarrowB" );
874 configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210,15); 874 configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210,15);
875 if (p-> mShowIconBack) { 875 if (p-> mShowIconBack) {
876 action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this ); 876 action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this );
877 connect( action, SIGNAL( activated() ), 877 connect( action, SIGNAL( activated() ),
878 mView, SLOT( goPrevious() ) ); 878 mView, SLOT( goPrevious() ) );
879 action->addTo( iconToolBar ); 879 action->addTo( iconToolBar );
880 } 880 }
881 if (p-> mShowIconToday) 881 if (p-> mShowIconToday)
882 today_action->addTo( iconToolBar ); 882 today_action->addTo( iconToolBar );
883 icon = loadPixmap( pathString + "1rightarrowB" ); 883 icon = loadPixmap( pathString + "1rightarrowB" );
884 configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220); 884 configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220);
885 if (p-> mShowIconForward) { 885 if (p-> mShowIconForward) {
886 action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this ); 886 action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this );
887 connect( action, SIGNAL( activated() ), 887 connect( action, SIGNAL( activated() ),
888 mView, SLOT( goNext() ) ); 888 mView, SLOT( goNext() ) );
889 action->addTo( iconToolBar ); 889 action->addTo( iconToolBar );
890 } 890 }
891 icon = loadPixmap( pathString + "2rightarrowB" ); 891 icon = loadPixmap( pathString + "2rightarrowB" );
892 configureToolBarMenu->insertItem(icon, i18n("Next month"), 230); 892 configureToolBarMenu->insertItem(icon, i18n("Next month"), 230);
893 if (p-> mShowIconForwardFast) { 893 if (p-> mShowIconForwardFast) {
894 action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this ); 894 action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this );
895 connect( action, SIGNAL( activated() ), 895 connect( action, SIGNAL( activated() ),
896 mView, SLOT( goNextMonth() ) ); 896 mView, SLOT( goNextMonth() ) );
897 action->addTo( iconToolBar ); 897 action->addTo( iconToolBar );
898 } 898 }
899 899
900 900
901 configureToolBarMenu->insertItem(i18n("What's This?"), 300); 901 configureToolBarMenu->insertItem(i18n("What's This?"), 300);
902 902
903 if (p-> mShowIconNewEvent) 903 if (p-> mShowIconNewEvent)
904 configureToolBarMenu->setItemChecked( 10, true ); 904 configureToolBarMenu->setItemChecked( 10, true );
905 if (p->mShowIconNewTodo ) 905 if (p->mShowIconNewTodo )
906 configureToolBarMenu->setItemChecked( 20, true ); 906 configureToolBarMenu->setItemChecked( 20, true );
907 if (p-> mShowIconSearch) 907 if (p-> mShowIconSearch)
908 configureToolBarMenu->setItemChecked( 120, true ); 908 configureToolBarMenu->setItemChecked( 120, true );
909 if (p-> mShowIconList) 909 if (p-> mShowIconList)
910 configureToolBarMenu->setItemChecked( 30, true ); 910 configureToolBarMenu->setItemChecked( 30, true );
911 if (p-> mShowIconDay1) 911 if (p-> mShowIconDay1)
912 configureToolBarMenu->setItemChecked( 40, true ); 912 configureToolBarMenu->setItemChecked( 40, true );
913 if (p-> mShowIconDay5) 913 if (p-> mShowIconDay5)
914 configureToolBarMenu->setItemChecked( 50, true ); 914 configureToolBarMenu->setItemChecked( 50, true );
915 if (p-> mShowIconDay7) 915 if (p-> mShowIconDay7)
916 configureToolBarMenu->setItemChecked( 60, true ); 916 configureToolBarMenu->setItemChecked( 60, true );
917 if (p-> mShowIconMonth) 917 if (p-> mShowIconMonth)
918 configureToolBarMenu->setItemChecked( 70, true ); 918 configureToolBarMenu->setItemChecked( 70, true );
919 if (p-> mShowIconTodoview) 919 if (p-> mShowIconTodoview)
920 configureToolBarMenu->setItemChecked( 80, true ); 920 configureToolBarMenu->setItemChecked( 80, true );
921 if (p-> mShowIconBackFast) 921 if (p-> mShowIconBackFast)
922 configureToolBarMenu->setItemChecked( 200, true ); 922 configureToolBarMenu->setItemChecked( 200, true );
923 if (p-> mShowIconBack) 923 if (p-> mShowIconBack)
924 configureToolBarMenu->setItemChecked( 210, true ); 924 configureToolBarMenu->setItemChecked( 210, true );
925 if (p-> mShowIconToday) 925 if (p-> mShowIconToday)
926 configureToolBarMenu->setItemChecked( 130, true ); 926 configureToolBarMenu->setItemChecked( 130, true );
927 if (p-> mShowIconForward) 927 if (p-> mShowIconForward)
928 configureToolBarMenu->setItemChecked( 220, true ); 928 configureToolBarMenu->setItemChecked( 220, true );
929 if (p-> mShowIconForwardFast) 929 if (p-> mShowIconForwardFast)
930 configureToolBarMenu->setItemChecked( 230, true ); 930 configureToolBarMenu->setItemChecked( 230, true );
931 if (p-> mShowIconNextDays) 931 if (p-> mShowIconNextDays)
932 configureToolBarMenu->setItemChecked( 100, true ); 932 configureToolBarMenu->setItemChecked( 100, true );
933 if (p-> mShowIconNext) 933 if (p-> mShowIconNext)
934 configureToolBarMenu->setItemChecked( 110, true ); 934 configureToolBarMenu->setItemChecked( 110, true );
935 if (p-> mShowIconJournal) 935 if (p-> mShowIconJournal)
936 configureToolBarMenu->setItemChecked( 90, true ); 936 configureToolBarMenu->setItemChecked( 90, true );
937 if (p-> mShowIconWhatsThis) 937 if (p-> mShowIconWhatsThis)
938 configureToolBarMenu->setItemChecked( 300, true ); 938 configureToolBarMenu->setItemChecked( 300, true );
939 939
940 QLabel* dummy = new QLabel( iconToolBar ); 940 QLabel* dummy = new QLabel( iconToolBar );
941 dummy->setBackgroundColor( iconToolBar->backgroundColor() ); 941 dummy->setBackgroundColor( iconToolBar->backgroundColor() );
942 if (!p-> mShowIconStretch) 942 if (!p-> mShowIconStretch)
943 iconToolBar->setStretchableWidget ( dummy ) ; 943 iconToolBar->setStretchableWidget ( dummy ) ;
944 else 944 else
945 configureToolBarMenu->setItemChecked( 5, true ); 945 configureToolBarMenu->setItemChecked( 5, true );
946 if (p-> mShowIconWhatsThis) 946 if (p-> mShowIconWhatsThis)
947 QWhatsThis::whatsThisButton ( iconToolBar ); 947 QWhatsThis::whatsThisButton ( iconToolBar );
948 connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) ); 948 connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) );
949 configureAgenda( p->mHourSize ); 949 configureAgenda( p->mHourSize );
950 connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) ); 950 connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) );
951} 951}
952 952
953void MainWindow::exportToPhone( int mode ) 953void MainWindow::exportToPhone( int mode )
954{ 954{
955 955
956 //ex2phone->insertItem(i18n("Complete calendar..."), 1 ); 956 //ex2phone->insertItem(i18n("Complete calendar..."), 1 );
957 //ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); 957 //ex2phone->insertItem(i18n("Filtered calendar..."), 2 );
958 KOex2phonePrefs ex2phone; 958 KOex2phonePrefs ex2phone;
959 959
960 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 960 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
961 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 961 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
962 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 962 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
963 if ( mode == 1 ) 963 if ( mode == 1 )
964 ex2phone.setCaption(i18n("Export complete calendar")); 964 ex2phone.setCaption(i18n("Export complete calendar"));
965 if ( mode == 2 ) 965 if ( mode == 2 )
966 ex2phone.setCaption(i18n("Export filtered calendar")); 966 ex2phone.setCaption(i18n("Export filtered calendar"));
967 967
968 if ( !ex2phone.exec() ) { 968 if ( !ex2phone.exec() ) {
969 return; 969 return;
970 } 970 }
971 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 971 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
972 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 972 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
973 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 973 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
974 974
975 int inFuture = 0; 975 int inFuture = 0;
976 if ( ex2phone.mWriteBackFuture->isChecked() ) 976 if ( ex2phone.mWriteBackFuture->isChecked() )
977 inFuture = ex2phone.mWriteBackFutureWeeks->value(); 977 inFuture = ex2phone.mWriteBackFutureWeeks->value();
978 QPtrList<Incidence> delSel; 978 QPtrList<Incidence> delSel;
979 if ( mode == 1 ) 979 if ( mode == 1 )
980 delSel = mCalendar->rawIncidences(); 980 delSel = mCalendar->rawIncidences();
981 if ( mode == 2 ) 981 if ( mode == 2 )
982 delSel = mCalendar->incidences(); 982 delSel = mCalendar->incidences();
983 CalendarLocal* cal = new CalendarLocal(); 983 CalendarLocal* cal = new CalendarLocal();
984 cal->setLocalTime(); 984 cal->setLocalTime();
985 Incidence *incidence = delSel.first(); 985 Incidence *incidence = delSel.first();
986 QDateTime cur = QDateTime::currentDateTime().addDays( -7 ); 986 QDateTime cur = QDateTime::currentDateTime().addDays( -7 );
987 QDateTime end = cur.addDays( ( inFuture +1 ) *7 ); 987 QDateTime end = cur.addDays( ( inFuture +1 ) *7 );
988 while ( incidence ) { 988 while ( incidence ) {
989 if ( incidence->type() != "Journal" ) { 989 if ( incidence->type() != "Journal" ) {
990 bool add = true; 990 bool add = true;
991 if ( inFuture ) { 991 if ( inFuture ) {
992 QDateTime dt; 992 QDateTime dt;
993 if ( incidence->type() == "Todo" ) { 993 if ( incidence->type() == "Todo" ) {
994 Todo * t = (Todo*)incidence; 994 Todo * t = (Todo*)incidence;
995 if ( t->hasDueDate() ) 995 if ( t->hasDueDate() )
996 dt = t->dtDue(); 996 dt = t->dtDue();
997 else 997 else
998 dt = cur.addSecs( 62 ); 998 dt = cur.addSecs( 62 );
999 } 999 }
1000 else { 1000 else {
1001 bool ok; 1001 bool ok;
1002 dt = incidence->getNextOccurence( cur, &ok ); 1002 dt = incidence->getNextOccurence( cur, &ok );
1003 if ( !ok ) 1003 if ( !ok )
1004 dt = cur.addSecs( -62 ); 1004 dt = cur.addSecs( -62 );
1005 } 1005 }
1006 if ( dt < cur || dt > end ) { 1006 if ( dt < cur || dt > end ) {
1007 add = false; 1007 add = false;
1008 } 1008 }
1009 } 1009 }
1010 if ( add ) { 1010 if ( add ) {
1011 Incidence *in = incidence->clone(); 1011 Incidence *in = incidence->clone();
1012 cal->addIncidence( in ); 1012 cal->addIncidence( in );
1013 } 1013 }
1014 } 1014 }
1015 incidence = delSel.next(); 1015 incidence = delSel.next();
1016 } 1016 }
1017 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 1017 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
1018 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 1018 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
1019 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 1019 KPimGlobalPrefs::instance()->mEx2PhoneModel );
1020 1020
1021 setCaption( i18n("Writing to phone...")); 1021 setCaption( i18n("Writing to phone..."));
1022 if ( PhoneFormat::writeToPhone( cal ) ) 1022 if ( PhoneFormat::writeToPhone( cal ) )
1023 setCaption( i18n("Export to phone successful!")); 1023 setCaption( i18n("Export to phone successful!"));
1024 else 1024 else
1025 setCaption( i18n("Error exporting to phone!")); 1025 setCaption( i18n("Error exporting to phone!"));
1026 delete cal; 1026 delete cal;
1027} 1027}
1028 1028
1029 1029
1030void MainWindow::setDefaultPreferences() 1030void MainWindow::setDefaultPreferences()
1031{ 1031{
1032 KOPrefs *p = KOPrefs::instance(); 1032 KOPrefs *p = KOPrefs::instance();
1033 1033
1034 p->mCompactDialogs = true; 1034 p->mCompactDialogs = true;
1035 p->mConfirm = true; 1035 p->mConfirm = true;
1036 // p->mEnableQuickTodo = false; 1036 // p->mEnableQuickTodo = false;
1037 1037
1038} 1038}
1039 1039
1040QString MainWindow::resourcePath() 1040QString MainWindow::resourcePath()
1041{ 1041{
1042 return KGlobal::iconLoader()->iconPath(); 1042 return KGlobal::iconLoader()->iconPath();
1043} 1043}
1044 1044
1045void MainWindow::displayText( QString text ,QString cap ) 1045void MainWindow::displayText( QString text ,QString cap )
1046{ 1046{
1047 QDialog dia( this, "name", true ); ; 1047 QDialog dia( this, "name", true ); ;
1048 dia.setCaption( cap ); 1048 dia.setCaption( cap );
1049 QVBoxLayout* lay = new QVBoxLayout( &dia ); 1049 QVBoxLayout* lay = new QVBoxLayout( &dia );
1050 lay->setSpacing( 3 ); 1050 lay->setSpacing( 3 );
1051 lay->setMargin( 3 ); 1051 lay->setMargin( 3 );
1052 QTextBrowser tb ( &dia ); 1052 QTextBrowser tb ( &dia );
1053 lay->addWidget( &tb ); 1053 lay->addWidget( &tb );
1054 tb.setText( text ); 1054 tb.setText( text );
1055#ifdef DESKTOP_VERSION 1055#ifdef DESKTOP_VERSION
1056 dia.resize( 640, 480); 1056 dia.resize( 640, 480);
1057#else 1057#else
1058 dia.showMaximized(); 1058 dia.showMaximized();
1059#endif 1059#endif
1060 dia.exec(); 1060 dia.exec();
1061} 1061}
1062void MainWindow::displayFile( QString fn, QString cap ) 1062void MainWindow::displayFile( QString fn, QString cap )
1063{ 1063{
1064 QString fileName = resourcePath() + fn; 1064 QString fileName = resourcePath() + fn;
1065 QString text; 1065 QString text;
1066 QFile file( fileName ); 1066 QFile file( fileName );
1067 if (!file.open( IO_ReadOnly ) ) { 1067 if (!file.open( IO_ReadOnly ) ) {
1068 return ; 1068 return ;
1069 1069
1070 } 1070 }
1071 QTextStream ts( &file ); 1071 QTextStream ts( &file );
1072 text = ts.read(); 1072 text = ts.read();
1073 file.close(); 1073 file.close();
1074 displayText( text, cap); 1074 displayText( text, cap);
1075} 1075}
1076void MainWindow::features() 1076void MainWindow::features()
1077{ 1077{
1078 1078
1079 displayFile( "featuresKOPI.txt",i18n("KO/Pi Features and hints") ); 1079 displayFile( "featuresKOPI.txt",i18n("KO/Pi Features and hints") );
1080} 1080}
1081 1081
1082void MainWindow::usertrans() 1082void MainWindow::usertrans()
1083{ 1083{
1084 1084
1085 displayFile( "usertranslationHOWTO.txt",i18n("KO/Pi User translation HowTo") ); 1085 displayFile( "usertranslationHOWTO.txt",i18n("KO/Pi User translation HowTo") );
1086} 1086}
1087 1087
1088void MainWindow::synchowto() 1088void MainWindow::synchowto()
1089{ 1089{
1090 1090
1091 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); 1091 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" );
1092} 1092}
1093void MainWindow::faq() 1093void MainWindow::faq()
1094{ 1094{
1095 displayFile( "kopiFAQ.txt",i18n("KO/Pi FAQ") ); 1095 displayFile( "kopiFAQ.txt",i18n("KO/Pi FAQ") );
1096 1096
1097} 1097}
1098void MainWindow::whatsNew() 1098void MainWindow::whatsNew()
1099{ 1099{
1100 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); 1100 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" );
1101 1101
1102} 1102}
1103void MainWindow::licence() 1103void MainWindow::licence()
1104{ 1104{
1105 KApplication::showLicence(); 1105 KApplication::showLicence();
1106 1106
1107} 1107}
1108void MainWindow::about() 1108void MainWindow::about()
1109{ 1109{
1110 QString version; 1110 QString version;
1111#include <../version> 1111#include <../version>
1112 QMessageBox::about( this, i18n("About KOrganizer/Pi"), 1112 QMessageBox::about( this, i18n("About KOrganizer/Pi"),
1113 i18n("KOrganizer/Platform-independent\n") + 1113 i18n("KOrganizer/Platform-independent\n") +
1114 "(KO/Pi) " + version + " - " + 1114 "(KO/Pi) " + version + " - " +
1115 1115
1116#ifdef DESKTOP_VERSION 1116#ifdef DESKTOP_VERSION
1117 i18n("Desktop Edition\n") + 1117 i18n("Desktop Edition\n") +
1118#else 1118#else
1119 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") + 1119 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") +
1120#endif 1120#endif
1121 i18n("(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n") ); 1121 i18n("(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n") );
1122} 1122}
1123void MainWindow::keyBindings() 1123void MainWindow::keyBindings()
1124{ 1124{
1125 QString cap = i18n("Key bindings KOrganizer/Pi"); 1125 QString cap = i18n("Key bindings KOrganizer/Pi");
1126 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + 1126 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") +
1127 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ 1127 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+
1128 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + 1128 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") +
1129 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ 1129 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+
1130 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+ 1130 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+
1131 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ 1131 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+
1132 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ 1132 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+
1133 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+ 1133 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+
1134 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ 1134 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+
1135 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ 1135 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+
1136 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ 1136 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+
1137 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ 1137 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+
1138 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ 1138 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+
1139 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+ 1139 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+
1140 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ 1140 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+
1141 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ 1141 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+
1142 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ 1142 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+
1143 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ 1143 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+
1144 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ 1144 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+
1145 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ 1145 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+
1146 i18n("<p><h3>In agenda view:</h3></p>\n") + 1146 i18n("<p><h3>In agenda view:</h3></p>\n") +
1147 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ 1147 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+
1148 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ 1148 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+
1149 i18n("<p><h3>In todo view:</h3></p>\n") + 1149 i18n("<p><h3>In todo view:</h3></p>\n") +
1150 i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+
1151 i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+
1152 i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+
1150 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ 1153 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+
1151 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1154 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1152 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ 1155 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+
1153 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ 1156 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+
1154 i18n("<p><h3>In list view:</h3></p>\n") + 1157 i18n("<p><h3>In list view:</h3></p>\n") +
1155 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1158 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1156 i18n("<p><b>return</b>: Select item+one step down</p>\n")+ 1159 i18n("<p><b>return</b>: Select item+one step down</p>\n")+
1157 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ 1160 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+
1158 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ 1161 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+
1159 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ 1162 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+
1160 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ 1163 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+
1161 i18n("<p><h3>In event/todo viewer:</h3></p>\n") + 1164 i18n("<p><h3>In event/todo viewer:</h3></p>\n") +
1162 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+ 1165 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+
1163 i18n("<p><b>A</b>: Show agenda view.</p>\n")+ 1166 i18n("<p><b>A</b>: Show agenda view.</p>\n")+
1164 i18n("<p><b>E</b>: Edit item</p>\n") + 1167 i18n("<p><b>E</b>: Edit item</p>\n") +
1165 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") + 1168 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") +
1166 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") + 1169 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") +
1167 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+ 1170 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+
1168 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+ 1171 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+
1169 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+ 1172 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+
1170 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+ 1173 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+
1171 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+ 1174 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+
1172 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + 1175 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") +
1173 i18n("<p><b>White</b>: Item readonly</p>\n"); 1176 i18n("<p><b>White</b>: Item readonly</p>\n");
1174 displayText( text, cap); 1177 displayText( text, cap);
1175 1178
1176} 1179}
1177void MainWindow::aboutAutoSaving() 1180void MainWindow::aboutAutoSaving()
1178{ 1181{
1179 QMessageBox* msg; 1182 QMessageBox* msg;
1180 msg = new QMessageBox( i18n("Auto Saving in KOrganizer/Pi"), 1183 msg = new QMessageBox( i18n("Auto Saving in KOrganizer/Pi"),
1181 i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configureable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"), QMessageBox::NoIcon, 1184 i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configureable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"), QMessageBox::NoIcon,
1182 QMessageBox::Ok, 1185 QMessageBox::Ok,
1183 QMessageBox::NoButton, 1186 QMessageBox::NoButton,
1184 QMessageBox::NoButton); 1187 QMessageBox::NoButton);
1185 msg->exec(); 1188 msg->exec();
1186 delete msg; 1189 delete msg;
1187 1190
1188 1191
1189} 1192}
1190void MainWindow::aboutKnownBugs() 1193void MainWindow::aboutKnownBugs()
1191{ 1194{
1192 QMessageBox* msg; 1195 QMessageBox* msg;
1193 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), 1196 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"),
1194 i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ 1197 i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+
1195 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ 1198 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+
1196 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") + 1199 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") +
1197 i18n("\nor report them in the bugtracker on\n") + 1200 i18n("\nor report them in the bugtracker on\n") +
1198 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), 1201 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"),
1199 QMessageBox::NoIcon, 1202 QMessageBox::NoIcon,
1200 QMessageBox::Ok, 1203 QMessageBox::Ok,
1201 QMessageBox::NoButton, 1204 QMessageBox::NoButton,
1202 QMessageBox::NoButton); 1205 QMessageBox::NoButton);
1203 msg->exec(); 1206 msg->exec();
1204 delete msg; 1207 delete msg;
1205 1208
1206} 1209}
1207 1210
1208QString MainWindow::defaultFileName() 1211QString MainWindow::defaultFileName()
1209{ 1212{
1210 return locateLocal( "data", "korganizer/mycalendar.ics" ); 1213 return locateLocal( "data", "korganizer/mycalendar.ics" );
1211} 1214}
1212QString MainWindow::syncFileName() 1215QString MainWindow::syncFileName()
1213{ 1216{
1214#ifdef _WIN32_ 1217#ifdef _WIN32_
1215 return locateLocal( "tmp", "synccalendar.ics" ); 1218 return locateLocal( "tmp", "synccalendar.ics" );
1216#else 1219#else
1217 return QString( "/tmp/kopitempfile.ics" ); 1220 return QString( "/tmp/kopitempfile.ics" );
1218#endif 1221#endif
1219} 1222}
1220 1223
1221void MainWindow::processIncidenceSelection( Incidence *incidence ) 1224void MainWindow::processIncidenceSelection( Incidence *incidence )
1222{ 1225{
1223 if ( !incidence ) { 1226 if ( !incidence ) {
1224 enableIncidenceActions( false ); 1227 enableIncidenceActions( false );
1225 1228
1226 mNewSubTodoAction->setEnabled( false ); 1229 mNewSubTodoAction->setEnabled( false );
1227 setCaptionToDates(); 1230 setCaptionToDates();
1228 return; 1231 return;
1229 1232
1230 } 1233 }
1231 1234
1232 //KGlobal::locale()->formatDateTime(nextA, true); 1235 //KGlobal::locale()->formatDateTime(nextA, true);
1233 QString startString = ""; 1236 QString startString = "";
1234 if ( incidence->type() != "Todo" ) { 1237 if ( incidence->type() != "Todo" ) {
1235 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { 1238 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) {
1236 if ( incidence->doesFloat() ) { 1239 if ( incidence->doesFloat() ) {
1237 startString += ": "+incidence->dtStartDateStr( true ); 1240 startString += ": "+incidence->dtStartDateStr( true );
1238 startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); 1241 startString += " --- "+((Event*)incidence)->dtEndDateStr( true );
1239 1242
1240 } else { 1243 } else {
1241 startString = ": "+incidence->dtStartStr(true); 1244 startString = ": "+incidence->dtStartStr(true);
1242 startString += " --- "+((Event*)incidence)->dtEndStr(true); 1245 startString += " --- "+((Event*)incidence)->dtEndStr(true);
1243 1246
1244 } 1247 }
1245 1248
1246 } else { 1249 } else {
1247 if ( incidence->dtStart().time() != incidence->dtEnd().time() ) 1250 if ( incidence->dtStart().time() != incidence->dtEnd().time() )
1248 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ 1251 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+
1249 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); 1252 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time());
1250 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); 1253 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true);
1251 } 1254 }
1252 1255
1253 } 1256 }
1254 else 1257 else
1255 startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); 1258 startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed");
1256 if ( !incidence->location().isEmpty() ) 1259 if ( !incidence->location().isEmpty() )
1257 startString += " (" +incidence->location()+")"; 1260 startString += " (" +incidence->location()+")";
1258 setCaption( incidence->summary()+startString); 1261 setCaption( incidence->summary()+startString);
1259 1262
1260 enableIncidenceActions( true ); 1263 enableIncidenceActions( true );
1261 1264
1262 if ( incidence->type() == "Event" ) { 1265 if ( incidence->type() == "Event" ) {
1263 mShowAction->setText( i18n("Show Event...") ); 1266 mShowAction->setText( i18n("Show Event...") );
1264 mEditAction->setText( i18n("Edit Event...") ); 1267 mEditAction->setText( i18n("Edit Event...") );
1265 mDeleteAction->setText( i18n("Delete Event...") ); 1268 mDeleteAction->setText( i18n("Delete Event...") );
1266 1269
1267 mNewSubTodoAction->setEnabled( false ); 1270 mNewSubTodoAction->setEnabled( false );
1268 } else if ( incidence->type() == "Todo" ) { 1271 } else if ( incidence->type() == "Todo" ) {
1269 mShowAction->setText( i18n("Show Todo...") ); 1272 mShowAction->setText( i18n("Show Todo...") );
1270 mEditAction->setText( i18n("Edit Todo...") ); 1273 mEditAction->setText( i18n("Edit Todo...") );
1271 mDeleteAction->setText( i18n("Delete Todo...") ); 1274 mDeleteAction->setText( i18n("Delete Todo...") );
1272 1275
1273 mNewSubTodoAction->setEnabled( true ); 1276 mNewSubTodoAction->setEnabled( true );
1274 } else { 1277 } else {
1275 mShowAction->setText( i18n("Show...") ); 1278 mShowAction->setText( i18n("Show...") );
1276 mShowAction->setText( i18n("Edit...") ); 1279 mShowAction->setText( i18n("Edit...") );
1277 mShowAction->setText( i18n("Delete...") ); 1280 mShowAction->setText( i18n("Delete...") );
1278 1281
1279 mNewSubTodoAction->setEnabled( false ); 1282 mNewSubTodoAction->setEnabled( false );
1280 } 1283 }
1281} 1284}
1282 1285
1283void MainWindow::enableIncidenceActions( bool enabled ) 1286void MainWindow::enableIncidenceActions( bool enabled )
1284{ 1287{
1285 mShowAction->setEnabled( enabled ); 1288 mShowAction->setEnabled( enabled );
1286 mEditAction->setEnabled( enabled ); 1289 mEditAction->setEnabled( enabled );
1287 mDeleteAction->setEnabled( enabled ); 1290 mDeleteAction->setEnabled( enabled );
1288 1291
1289 mCloneAction->setEnabled( enabled ); 1292 mCloneAction->setEnabled( enabled );
1290 mMoveAction->setEnabled( enabled ); 1293 mMoveAction->setEnabled( enabled );
1291 mBeamAction->setEnabled( enabled ); 1294 mBeamAction->setEnabled( enabled );
1292 mCancelAction->setEnabled( enabled ); 1295 mCancelAction->setEnabled( enabled );
1293} 1296}
1294 1297
1295void MainWindow::importOL() 1298void MainWindow::importOL()
1296{ 1299{
1297#ifdef _WIN32_ 1300#ifdef _WIN32_
1298 KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); 1301 KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this );
1299 id->exec(); 1302 id->exec();
1300 delete id; 1303 delete id;
1301 mView->updateView(); 1304 mView->updateView();
1302#endif 1305#endif
1303} 1306}
1304void MainWindow::importBday() 1307void MainWindow::importBday()
1305{ 1308{
1306 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1309 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1307 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), 1310 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"),
1308 i18n("Import!"), i18n("Cancel"), 0, 1311 i18n("Import!"), i18n("Cancel"), 0,
1309 0, 1 ); 1312 0, 1 );
1310 if ( result == 0 ) { 1313 if ( result == 0 ) {
1311 mView->importBday(); 1314 mView->importBday();
1312 1315
1313 } 1316 }
1314 1317
1315 1318
1316} 1319}
1317void MainWindow::importQtopia() 1320void MainWindow::importQtopia()
1318{ 1321{
1319#ifndef DESKTOP_VERSION 1322#ifndef DESKTOP_VERSION
1320 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1323 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1321 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"), 1324 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"),
1322 i18n("Import!"), i18n("Cancel"), 0, 1325 i18n("Import!"), i18n("Cancel"), 0,
1323 0, 1 ); 1326 0, 1 );
1324 if ( result == 0 ) { 1327 if ( result == 0 ) {
1325 QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); 1328 QString datebook = Global::applicationFileName( "datebook", "datebook.xml");
1326 QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); 1329 QString todolist = Global::applicationFileName( "todolist", "todolist.xml");
1327 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; 1330 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml";
1328 mView->importQtopia( categories, datebook, todolist ); 1331 mView->importQtopia( categories, datebook, todolist );
1329 } 1332 }
1330#else 1333#else
1331 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1334 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1332 i18n("Not supported \non desktop!\n"), 1335 i18n("Not supported \non desktop!\n"),
1333 i18n("Ok"), i18n("Cancel"), 0, 1336 i18n("Ok"), i18n("Cancel"), 0,
1334 0, 1 ); 1337 0, 1 );
1335 1338
1336#endif 1339#endif
1337} 1340}
1338 1341
1339void MainWindow::saveOnClose() 1342void MainWindow::saveOnClose()
1340{ 1343{
1341 KOPrefs *p = KOPrefs::instance(); 1344 KOPrefs *p = KOPrefs::instance();
1342 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); 1345 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal );
1343 p->mToolBarUp = iconToolBar->x() > width()/2 || 1346 p->mToolBarUp = iconToolBar->x() > width()/2 ||
1344 iconToolBar->y() > height()/2; 1347 iconToolBar->y() > height()/2;
1345 mView->writeSettings(); 1348 mView->writeSettings();
1346 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) 1349 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName()))
1347 save(); 1350 save();
1348} 1351}
1349void MainWindow::slotModifiedChanged( bool changed ) 1352void MainWindow::slotModifiedChanged( bool changed )
1350{ 1353{
1351 if ( mBlockAtStartup ) 1354 if ( mBlockAtStartup )
1352 return; 1355 return;
1353 int msec; 1356 int msec;
1354 // we store the changes after 1 minute, 1357 // we store the changes after 1 minute,
1355 // and for safety reasons after 10 minutes again 1358 // and for safety reasons after 10 minutes again
1356 if ( !mSyncManager->blockSave() ) 1359 if ( !mSyncManager->blockSave() )
1357 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; 1360 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000;
1358 else 1361 else
1359 msec = 1000 * 600; 1362 msec = 1000 * 600;
1360 mSaveTimer.start( msec, true ); // 1 minute 1363 mSaveTimer.start( msec, true ); // 1 minute
1361 qDebug("KO: Saving File in %d secs!", msec/1000); 1364 qDebug("KO: Saving File in %d secs!", msec/1000);
1362 mCalendarModifiedFlag = true; 1365 mCalendarModifiedFlag = true;
1363} 1366}
1364void MainWindow::save() 1367void MainWindow::save()
1365{ 1368{
1366 if ( mSyncManager->blockSave() ) 1369 if ( mSyncManager->blockSave() )
1367 return; 1370 return;
1368 mSyncManager->setBlockSave(true); 1371 mSyncManager->setBlockSave(true);
1369 if ( mView->checkFileVersion( defaultFileName()) ) { 1372 if ( mView->checkFileVersion( defaultFileName()) ) {
1370 1373
1371 QTime neededSaveTime = QDateTime::currentDateTime().time(); 1374 QTime neededSaveTime = QDateTime::currentDateTime().time();
1372 setCaption(i18n("KO/Pi:Saving Data to File ..." )); 1375 setCaption(i18n("KO/Pi:Saving Data to File ..." ));
1373 qDebug("KO: Start saving data to file!"); 1376 qDebug("KO: Start saving data to file!");
1374 mView->saveCalendar( defaultFileName() ); 1377 mView->saveCalendar( defaultFileName() );
1375 1378
1376 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 1379 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
1377 qDebug("KO: Needed %d ms for saving.",msNeeded ); 1380 qDebug("KO: Needed %d ms for saving.",msNeeded );
1378 QString savemes; 1381 QString savemes;
1379 savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); 1382 savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 );
1380 setCaption(savemes); 1383 setCaption(savemes);
1381 } else 1384 } else
1382 setCaption(i18n("Saving cancelled!")); 1385 setCaption(i18n("Saving cancelled!"));
1383 mCalendarModifiedFlag = false; 1386 mCalendarModifiedFlag = false;
1384 mSyncManager->setBlockSave( false ); 1387 mSyncManager->setBlockSave( false );
1385} 1388}
1386 1389
1387void MainWindow::keyReleaseEvent ( QKeyEvent * e) 1390void MainWindow::keyReleaseEvent ( QKeyEvent * e)
1388{ 1391{
1389 if ( !e->isAutoRepeat() ) { 1392 if ( !e->isAutoRepeat() ) {
1390 mFlagKeyPressed = false; 1393 mFlagKeyPressed = false;
1391 } 1394 }
1392} 1395}
1393void MainWindow::keyPressEvent ( QKeyEvent * e ) 1396void MainWindow::keyPressEvent ( QKeyEvent * e )
1394{ 1397{
1395 qApp->processEvents(); 1398 qApp->processEvents();
1396 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 1399 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
1397 e->ignore(); 1400 e->ignore();
1398 // qDebug(" ignore %d",e->isAutoRepeat() ); 1401 // qDebug(" ignore %d",e->isAutoRepeat() );
1399 return; 1402 return;
1400 } 1403 }
1401 if (! e->isAutoRepeat() ) 1404 if (! e->isAutoRepeat() )
1402 mFlagKeyPressed = true; 1405 mFlagKeyPressed = true;
1403 KOPrefs *p = KOPrefs::instance(); 1406 KOPrefs *p = KOPrefs::instance();
1404 bool showSelectedDates = false; 1407 bool showSelectedDates = false;
1405 int size; 1408 int size;
1406 int pro = 0; 1409 int pro = 0;
1407 //qDebug("MainWindow::keyPressEvent "); 1410 //qDebug("MainWindow::keyPressEvent ");
1408 switch ( e->key() ) { 1411 switch ( e->key() ) {
1409 case Qt::Key_Right: 1412 case Qt::Key_Right:
1410 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) 1413 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton)
1411 mView->goNextMonth(); 1414 mView->goNextMonth();
1412 else 1415 else
1413 mView->goNext(); 1416 mView->goNext();
1414 showSelectedDates = true; 1417 showSelectedDates = true;
1415 break; 1418 break;
1416 case Qt::Key_Left: 1419 case Qt::Key_Left:
1417 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1420 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1418 mView->goPreviousMonth(); 1421 mView->goPreviousMonth();
1419 else 1422 else
1420 mView->goPrevious(); 1423 mView->goPrevious();
1421 showSelectedDates = true; 1424 showSelectedDates = true;
1422 break; 1425 break;
1423 case Qt::Key_Down: 1426 case Qt::Key_Down:
1424 mView->viewManager()->agendaView()->scrollOneHourDown(); 1427 mView->viewManager()->agendaView()->scrollOneHourDown();
1425 break; 1428 break;
1426 case Qt::Key_Up: 1429 case Qt::Key_Up:
1427 mView->viewManager()->agendaView()->scrollOneHourUp(); 1430 mView->viewManager()->agendaView()->scrollOneHourUp();
1428 break; 1431 break;
1429 case Qt::Key_I: 1432 case Qt::Key_I:
1430 mView->showIncidence(); 1433 mView->showIncidence();
1431 break; 1434 break;
1432 case Qt::Key_Delete: 1435 case Qt::Key_Delete:
1433 case Qt::Key_Backspace: 1436 case Qt::Key_Backspace:
1434 mView->deleteIncidence(); 1437 mView->deleteIncidence();
1435 break; 1438 break;
1436 case Qt::Key_D: 1439 case Qt::Key_D:
1437 mView->viewManager()->showDayView(); 1440 mView->viewManager()->showDayView();
1438 showSelectedDates = true; 1441 showSelectedDates = true;
1439 break; 1442 break;
1440 case Qt::Key_O: 1443 case Qt::Key_O:
1441 mView->toggleFilerEnabled( ); 1444 mView->toggleFilerEnabled( );
1442 break; 1445 break;
1443 case Qt::Key_0: 1446 case Qt::Key_0:
1444 case Qt::Key_1: 1447 case Qt::Key_1:
1445 case Qt::Key_2: 1448 case Qt::Key_2:
1446 case Qt::Key_3: 1449 case Qt::Key_3:
1447 case Qt::Key_4: 1450 case Qt::Key_4:
1448 case Qt::Key_5: 1451 case Qt::Key_5:
1449 case Qt::Key_6: 1452 case Qt::Key_6:
1450 case Qt::Key_7: 1453 case Qt::Key_7:
1451 case Qt::Key_8: 1454 case Qt::Key_8:
1452 case Qt::Key_9: 1455 case Qt::Key_9:
1453 pro = e->key()-48; 1456 pro = e->key()-48;
1454 if ( pro == 0 ) 1457 if ( pro == 0 )
1455 pro = 10; 1458 pro = 10;
1456 if ( e->state() == Qt::ControlButton) 1459 if ( e->state() == Qt::ControlButton)
1457 pro += 10; 1460 pro += 10;
1458 break; 1461 break;
1459 case Qt::Key_M: 1462 case Qt::Key_M:
1460 mView->viewManager()->showMonthView(); 1463 mView->viewManager()->showMonthView();
1461 showSelectedDates = true; 1464 showSelectedDates = true;
1462 break; 1465 break;
1463 case Qt::Key_Insert: 1466 case Qt::Key_Insert:
1464 mView->newEvent(); 1467 mView->newEvent();
1465 break; 1468 break;
1466 case Qt::Key_S : 1469 case Qt::Key_S :
1467 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) 1470 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton)
1468 mView->newSubTodo(); 1471 mView->newSubTodo();
1469 else 1472 else
1470 mView->dialogManager()->showSearchDialog(); 1473 mView->dialogManager()->showSearchDialog();
1471 break; 1474 break;
1472 case Qt::Key_Y : 1475 case Qt::Key_Y :
1473 case Qt::Key_Z : 1476 case Qt::Key_Z :
1474 mView->viewManager()->showWorkWeekView(); 1477 mView->viewManager()->showWorkWeekView();
1475 showSelectedDates = true; 1478 showSelectedDates = true;
1476 break; 1479 break;
1477 case Qt::Key_U : 1480 case Qt::Key_U :
1478 mView->viewManager()->showWeekView(); 1481 mView->viewManager()->showWeekView();
1479 showSelectedDates = true; 1482 showSelectedDates = true;
1480 break; 1483 break;
1481 case Qt::Key_H : 1484 case Qt::Key_H :
1482 keyBindings(); 1485 keyBindings();
1483 break; 1486 break;
1484 case Qt::Key_W: 1487 case Qt::Key_W:
1485 mView->viewManager()->showWhatsNextView(); 1488 mView->viewManager()->showWhatsNextView();
1486 break; 1489 break;
1487 case Qt::Key_L: 1490 case Qt::Key_L:
1488 mView->viewManager()->showListView(); 1491 mView->viewManager()->showListView();
1489 break; 1492 break;
1490 case Qt::Key_N: 1493 case Qt::Key_N:
1491 mView->viewManager()->showNextXView(); 1494 mView->viewManager()->showNextXView();
1492 showSelectedDates = true; 1495 showSelectedDates = true;
1493 break; 1496 break;
1494 case Qt::Key_V: 1497 case Qt::Key_V:
1495 mView->viewManager()->showTodoView(); 1498 mView->viewManager()->showTodoView();
1496 break; 1499 break;
1497 case Qt::Key_C: 1500 case Qt::Key_C:
1498 mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); 1501 mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() );
1499 break; 1502 break;
1500 case Qt::Key_P: 1503 case Qt::Key_P:
1501 mView->showDatePicker( ); 1504 mView->showDatePicker( );
1502 break; 1505 break;
1503 case Qt::Key_F: 1506 case Qt::Key_F:
1504 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1507 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1505 mView->editFilters(); 1508 mView->editFilters();
1506 else 1509 else
1507 mView->toggleFilter(); 1510 mView->toggleFilter();
1508 break; 1511 break;
1509 case Qt::Key_X: 1512 case Qt::Key_X:
1510 mView->toggleDateNavigatorWidget(); 1513 mView->toggleDateNavigatorWidget();
1511 break; 1514 break;
1512 case Qt::Key_Space: 1515 case Qt::Key_Space:
1513 mView->toggleExpand(); 1516 mView->toggleExpand();
1514 break; 1517 break;
1515 case Qt::Key_A: 1518 case Qt::Key_A:
1516 mView->toggleAllDaySize(); 1519 mView->toggleAllDaySize();
1517 break; 1520 break;
1518 case Qt::Key_T: 1521 case Qt::Key_T:
1519 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1522 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1520 mView->newTodo(); 1523 mView->newTodo();
1521 else { 1524 else {
1522 mView->goToday(); 1525 mView->goToday();
1523 showSelectedDates = true; 1526 showSelectedDates = true;
1524 } 1527 }
1525 break; 1528 break;
1526 case Qt::Key_J: 1529 case Qt::Key_J:
1527 mView->viewManager()->showJournalView(); 1530 mView->viewManager()->showJournalView();
1528 break; 1531 break;
1529 case Qt::Key_B: 1532 case Qt::Key_B:
1530 mView->editIncidenceDescription();; 1533 mView->editIncidenceDescription();;
1531 break; 1534 break;
1532 // case Qt::Key_Return: 1535 // case Qt::Key_Return:
1533 case Qt::Key_E: 1536 case Qt::Key_E: