summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
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/kofilterview.cpp6
-rw-r--r--korganizer/kofilterview.h1
4 files changed, 22 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index e31a6e1..28b17a5 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,1248 +1,1250 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h" 107#include "koagenda.h"
108#include "kodialogmanager.h" 108#include "kodialogmanager.h"
109#include "outgoingdialog.h" 109#include "outgoingdialog.h"
110#include "incomingdialog.h" 110#include "incomingdialog.h"
111#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
112#include "statusdialog.h" 112#include "statusdialog.h"
113#include "kdatenavigator.h" 113#include "kdatenavigator.h"
114#include "kotodoview.h" 114#include "kotodoview.h"
115#include "datenavigator.h" 115#include "datenavigator.h"
116#include "resourceview.h" 116#include "resourceview.h"
117#include "navigatorbar.h" 117#include "navigatorbar.h"
118#include "searchdialog.h" 118#include "searchdialog.h"
119#include "mainwindow.h" 119#include "mainwindow.h"
120#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
121 121
122#include "calendarview.h" 122#include "calendarview.h"
123#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
124#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
125#endif 125#endif
126#ifndef _WIN32_ 126#ifndef _WIN32_
127#include <stdlib.h> 127#include <stdlib.h>
128#include <stdio.h> 128#include <stdio.h>
129#include <unistd.h> 129#include <unistd.h>
130#else 130#else
131#include <qprocess.h> 131#include <qprocess.h>
132#endif 132#endif
133 133
134#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
135#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
136#endif 136#endif
137using namespace KOrg; 137using namespace KOrg;
138using namespace KCal; 138using namespace KCal;
139extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
140extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
141 141
142 142
143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
144 144
145{ 145{
146 mAlarms = alarms; 146 mAlarms = alarms;
147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
148 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
150#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#else 152#else
153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
154#endif 154#endif
155 // mText += "<img src=\""; 155 // mText += "<img src=\"";
156 // mText += ipath; 156 // mText += ipath;
157 // mText += "\">"; 157 // mText += "\">";
158 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
159#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#else 161#else
162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
163#endif 163#endif
164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
165 165
166 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
167 int time = 0; 167 int time = 0;
168 //mText += "<table>"; 168 //mText += "<table>";
169 while ( inc ) { 169 while ( inc ) {
170 QDateTime dt ; 170 QDateTime dt ;
171 QString tempText = "<a "; 171 QString tempText = "<a ";
172 bool ok; 172 bool ok;
173 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
174 if ( !ok ) continue; 174 if ( !ok ) continue;
175 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
176 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
177 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
178 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
179 } 179 }
180 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
181 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
182 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
183 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
184 tempText += inc->summary(); 184 tempText += inc->summary();
185 else 185 else
186 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
187 QString timestr; 187 QString timestr;
188 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
190 else 190 else
191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
192 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
194 mText += "<table>"; 194 mText += "<table>";
195 time = 1; 195 time = 1;
196 } 196 }
197 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
198 if ( time > 0 ) 198 if ( time > 0 )
199 mText +="</table>"; 199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
201 mText += "<table>"; 201 mText += "<table>";
202 time = 2; 202 time = 2;
203 203
204 } 204 }
205 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
206 if ( time > 0 ) 206 if ( time > 0 )
207 mText +="</table>"; 207 mText +="</table>";
208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
209 mText += "<table>"; 209 mText += "<table>";
210 time = 3; 210 time = 3;
211 } 211 }
212 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
213 mText += timestr; 213 mText += timestr;
214 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
215 mText += tempText; 215 mText += tempText;
216 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
217 inc = getNextInc( start ); 217 inc = getNextInc( start );
218 } 218 }
219 mText +="</table>"; 219 mText +="</table>";
220 setText( mText ); 220 setText( mText );
221} 221}
222 222
223MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
224{ 224{
225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
226} 226}
227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
228{ 228{
229 QDateTime dt ; 229 QDateTime dt ;
230 Incidence * retInc; 230 Incidence * retInc;
231 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
232 if ( inc == 0 ) 232 if ( inc == 0 )
233 return 0; 233 return 0;
234 bool ok; 234 bool ok;
235 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
236 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
237 QDateTime dtn ; 237 QDateTime dtn ;
238 retInc = inc; 238 retInc = inc;
239 inc = mAlarms.next(); 239 inc = mAlarms.next();
240 while ( inc ) { 240 while ( inc ) {
241 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
242 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
243 if ( dtn < dt ) { 243 if ( dtn < dt ) {
244 dt = dtn; 244 dt = dtn;
245 retInc = inc; 245 retInc = inc;
246 } 246 }
247 inc = mAlarms.next(); 247 inc = mAlarms.next();
248 } 248 }
249 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
250 return retInc; 250 return retInc;
251 251
252} 252}
253void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
254{ 254{
255 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
256#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
257 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
258#else 258#else
259 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
260#endif 260#endif
261 return; 261 return;
262 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
263#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
264 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
265#else 265#else
266 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
267#endif 267#endif
268 return; 268 return;
269 } 269 }
270} 270}
271 271
272 272
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy (NoFocus ); 370 setFocusPolicy (NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 mConflictingEvent = 0; 373 mConflictingEvent = 0;
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 connect( mCalEditView, SIGNAL( requestCalendarInfo( int ) ),this, SLOT( displayCalendarInfo( int ) ) );
480 481
482
481 mTodoList->setNavigator( mNavigator ); 483 mTodoList->setNavigator( mNavigator );
482#if 0 484#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 485 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 486 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 487 leftFrameLayout->addWidget(mTodoList, 2 );
486 488
487 } else { 489 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 490 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 491 leftFrameLayout->addWidget(mFilterView );
490 } 492 }
491#endif 493#endif
492 mFilterView->hide(); 494 mFilterView->hide();
493 mCalEditView->hide(); 495 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 496 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 497 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 498 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 499 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 500 rightLayout->addWidget( mRightFrame, 10 );
499 501
500 //mLeftFrame = (QWidget *)leftFrame; 502 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 503 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 505 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 506 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 507 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 508 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 510 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 511 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 512 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 513 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 514 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 515 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 516#endif
515 517
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 518 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 519 SLOT( showDates( const KCal::DateList & ) ) );
518 520
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 521 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 522 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 523
522 524
523 525
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 526 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 527 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 528
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 529 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 530 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 531
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 532 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 533 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 534 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 535 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 536 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 537 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 538 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 539 mNavigator, SLOT( selectNextMonth() ) );
538 540
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 541 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 542 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 543 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 544 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 545 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 546 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 547
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 548 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 549 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 550#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 551 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 552 SLOT( incidenceAdded( Incidence *) ) );
551#endif 553#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 554 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 555
554 connect( this, SIGNAL( configChanged() ), 556 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 557 mDateNavigator, SLOT( updateConfig() ) );
556 558
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 559 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 560 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 561 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 562 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 564 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 565 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 566 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 567 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 568 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 569 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 570 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 571 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 572 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 573 SIGNAL( todoModified( Todo *, int ) ) );
572 574
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 576 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 577 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 578 this, SLOT (cancelIncidence( Incidence * ) ) );
577 579
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 581 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 582 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 583 this, SLOT ( beamIncidence( Incidence * ) ) );
582 584
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 585 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 586 this, SLOT ( todo_unsub( Todo * ) ) );
585 587
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 588 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 589 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 590 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 591 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 592 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 593 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 594
593 595
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 596 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 597 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 598 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 599 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 600
599 601
600 602
601 603
602 604
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 605 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 606 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 607 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 608 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 609 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 610
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 611 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 612
611 mDateFrame = new QVBox(0,0,WType_Popup); 613 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 614 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 615 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 616 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 617 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 618 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 619 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 620
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 621 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 622
621 mEventEditor = mDialogManager->getEventEditor(); 623 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 624 mTodoEditor = mDialogManager->getTodoEditor();
623 625
624 mFlagEditDescription = false; 626 mFlagEditDescription = false;
625 627
626 mSuspendTimer = new QTimer( this ); 628 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 629 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 630 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 631 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 632 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 633 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 634 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 635 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 636 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 637 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 638
637 639
638#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 641//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 642 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 643 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 644#endif
643 mDateNavigator->setCalendar( mCalendar ); 645 mDateNavigator->setCalendar( mCalendar );
644} 646}
645 647
646 648
647CalendarView::~CalendarView() 649CalendarView::~CalendarView()
648{ 650{
649 // kdDebug() << "~CalendarView()" << endl; 651 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 652 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 653 delete mDialogManager;
652 delete mViewManager; 654 delete mViewManager;
653 delete mStorage; 655 delete mStorage;
654 delete mDateFrame ; 656 delete mDateFrame ;
655 delete mEventViewerDialog; 657 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 658 //kdDebug() << "~CalendarView() done" << endl;
657} 659}
658 660
659 661
660void CalendarView::nextConflict( bool all, bool allday ) 662void CalendarView::nextConflict( bool all, bool allday )
661{ 663{
662 static bool block = false; 664 static bool block = false;
663 if ( block ) return; 665 if ( block ) return;
664 block = true; 666 block = true;
665 QPtrList<Event> testlist = mCalendar->events(); 667 QPtrList<Event> testlist = mCalendar->events();
666 Event * test = testlist.first(); 668 Event * test = testlist.first();
667 while ( test ) { 669 while ( test ) {
668 test->setTagged( false ); 670 test->setTagged( false );
669 test = testlist.next(); 671 test = testlist.next();
670 } 672 }
671 QTime st ( 0,0,0); 673 QTime st ( 0,0,0);
672 if ( mViewManager->currentView() == mViewManager->agendaView() ) 674 if ( mViewManager->currentView() == mViewManager->agendaView() )
673 st = mViewManager->agendaView()->agenda()->getEndTime(); 675 st = mViewManager->agendaView()->agenda()->getEndTime();
674 //qDebug("time %s ", st.toString().latin1()); 676 //qDebug("time %s ", st.toString().latin1());
675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 677 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
676 QDateTime conflict; 678 QDateTime conflict;
677 QDateTime retVal; 679 QDateTime retVal;
678 bool found = false; 680 bool found = false;
679 Event * cE = 0; 681 Event * cE = 0;
680 Event * cE2 = 0; 682 Event * cE2 = 0;
681 QPtrList<Event> testlist2 = testlist; 683 QPtrList<Event> testlist2 = testlist;
682 test = testlist.first(); 684 test = testlist.first();
683 bool skip = false; 685 bool skip = false;
684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 686 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm; 687 //QTime tm;
686 //tm.start(); 688 //tm.start();
687 while ( test ) { 689 while ( test ) {
688 qApp->processEvents(); 690 qApp->processEvents();
689 skip = false; 691 skip = false;
690 if ( !all ) skip = ( allday != test->doesFloat() ); 692 if ( !all ) skip = ( allday != test->doesFloat() );
691 if ( !skip ) { 693 if ( !skip ) {
692 if ( found ) 694 if ( found )
693 skip = !test->matchTime( &startDT, &conflict ); 695 skip = !test->matchTime( &startDT, &conflict );
694 else 696 else
695 skip = !test->matchTime( &startDT, 0 ); 697 skip = !test->matchTime( &startDT, 0 );
696 } 698 }
697 if ( !skip ) { 699 if ( !skip ) {
698 Event * test2 = testlist2.first(); 700 Event * test2 = testlist2.first();
699 while ( test2 ) { 701 while ( test2 ) {
700 skip = test2->isTagged(); 702 skip = test2->isTagged();
701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 703 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) { 704 if ( !skip ) {
703 if ( found ) 705 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict ); 706 skip = !test2->matchTime( &startDT, &conflict );
705 else 707 else
706 skip = !test2->matchTime( &startDT, 0 ); 708 skip = !test2->matchTime( &startDT, 0 );
707 } 709 }
708 if ( !skip ) { 710 if ( !skip ) {
709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 711 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
710 //qDebug("overlap "); 712 //qDebug("overlap ");
711 if ( ! found ) { 713 if ( ! found ) {
712 if ( retVal >= startDT ) { 714 if ( retVal >= startDT ) {
713 conflict = retVal; 715 conflict = retVal;
714 cE = test; 716 cE = test;
715 cE2 = test2; 717 cE2 = test2;
716 found = true; 718 found = true;
717 } 719 }
718 } else { 720 } else {
719 if ( retVal >= startDT && retVal < conflict ) { 721 if ( retVal >= startDT && retVal < conflict ) {
720 conflict = retVal; 722 conflict = retVal;
721 cE = test; 723 cE = test;
722 cE2 = test2; 724 cE2 = test2;
723 } 725 }
724 } 726 }
725 } 727 }
726 } 728 }
727 test2 = testlist2.next(); 729 test2 = testlist2.next();
728 } 730 }
729 } 731 }
730 test->setTagged( true ); 732 test->setTagged( true );
731 test = testlist.next(); 733 test = testlist.next();
732 } 734 }
733 //qDebug("Search time : %d", tm.elapsed()); 735 //qDebug("Search time : %d", tm.elapsed());
734 if ( found ) { 736 if ( found ) {
735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 737 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
736 mViewManager->showDayView(); 738 mViewManager->showDayView();
737 mNavigator->slotDaySelect( conflict.date() ); 739 mNavigator->slotDaySelect( conflict.date() );
738 int hour = conflict.time().hour(); 740 int hour = conflict.time().hour();
739 mViewManager->agendaView()->setStartHour( hour ); 741 mViewManager->agendaView()->setStartHour( hour );
740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 742 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
741 block = false; 743 block = false;
742 return; 744 return;
743 } 745 }
744 746
745 topLevelWidget()->setCaption( i18n("No conflict found") ); 747 topLevelWidget()->setCaption( i18n("No conflict found") );
746 //qDebug("No conflict found "); 748 //qDebug("No conflict found ");
747 block = false; 749 block = false;
748 return; 750 return;
749} 751}
750 752
751void CalendarView::conflictAll() 753void CalendarView::conflictAll()
752{ 754{
753 nextConflict ( true, true ); 755 nextConflict ( true, true );
754} 756}
755void CalendarView::conflictAllday() 757void CalendarView::conflictAllday()
756{ 758{
757 nextConflict ( false, true ); 759 nextConflict ( false, true );
758} 760}
759void CalendarView::conflictNotAll() 761void CalendarView::conflictNotAll()
760{ 762{
761 nextConflict ( false, false ); 763 nextConflict ( false, false );
762} 764}
763 765
764void CalendarView::setCalReadOnly( int id, bool readO ) 766void CalendarView::setCalReadOnly( int id, bool readO )
765{ 767{
766 if ( readO ) { 768 if ( readO ) {
767 emit save(); 769 emit save();
768 } 770 }
769 mCalendar->setReadOnly( id, readO ); 771 mCalendar->setReadOnly( id, readO );
770} 772}
771void CalendarView::setScrollBarStep(int val ) 773void CalendarView::setScrollBarStep(int val )
772{ 774{
773#ifdef DESKTOP_VERSION 775#ifdef DESKTOP_VERSION
774 mDateScrollBar->setLineStep ( val ); 776 mDateScrollBar->setLineStep ( val );
775#endif 777#endif
776} 778}
777void CalendarView::scrollBarValue(int val ) 779void CalendarView::scrollBarValue(int val )
778{ 780{
779#ifdef DESKTOP_VERSION 781#ifdef DESKTOP_VERSION
780 if ( QApplication::desktop()->width() < 800 ) return; 782 if ( QApplication::desktop()->width() < 800 ) return;
781 static bool block = false; 783 static bool block = false;
782 if ( block ) return; 784 if ( block ) return;
783 block = true; 785 block = true;
784 int count = mNavigator->selectedDates().count(); 786 int count = mNavigator->selectedDates().count();
785 int day = mNavigator->selectedDates().first().dayOfYear(); 787 int day = mNavigator->selectedDates().first().dayOfYear();
786 int stepdays = val; 788 int stepdays = val;
787 if ( mDateScrollBar->lineStep () <= count ) { 789 if ( mDateScrollBar->lineStep () <= count ) {
788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
789 //qDebug("VAL %d ",val ); 791 //qDebug("VAL %d ",val );
790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 792 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
791 stepdays = day+stepdays; 793 stepdays = day+stepdays;
792 if ( stepdays < 0 ) stepdays = 0; 794 if ( stepdays < 0 ) stepdays = 0;
793 } 795 }
794 if ( stepdays == day ) { 796 if ( stepdays == day ) {
795 block = false; 797 block = false;
796 return; 798 return;
797 } 799 }
798 int year = mNavigator->selectedDates().first().year(); 800 int year = mNavigator->selectedDates().first().year();
799 QDate d ( year,1,1 ); 801 QDate d ( year,1,1 );
800 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 802 mNavigator->selectDates( d.addDays( stepdays-1) , count );
801 block = false; 803 block = false;
802#endif 804#endif
803 805
804} 806}
805void CalendarView::updateView(const QDate &start, const QDate &end) 807void CalendarView::updateView(const QDate &start, const QDate &end)
806{ 808{
807#ifdef DESKTOP_VERSION 809#ifdef DESKTOP_VERSION
808 if ( ! mDateScrollBar->draggingSlider () ) { 810 if ( ! mDateScrollBar->draggingSlider () ) {
809 int dof = start.dayOfYear(); 811 int dof = start.dayOfYear();
810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 812 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
811 if ( dof != mDateScrollBar->value() ) { 813 if ( dof != mDateScrollBar->value() ) {
812 mDateScrollBar->blockSignals( true ); 814 mDateScrollBar->blockSignals( true );
813 mDateScrollBar->setValue( start.dayOfYear()); 815 mDateScrollBar->setValue( start.dayOfYear());
814 mDateScrollBar->blockSignals( false ); 816 mDateScrollBar->blockSignals( false );
815 } 817 }
816 } 818 }
817#endif 819#endif
818 mTodoList->updateView(); 820 mTodoList->updateView();
819 mViewManager->updateView(start, end); 821 mViewManager->updateView(start, end);
820 //mDateNavigator->updateView(); 822 //mDateNavigator->updateView();
821} 823}
822 824
823 825
824 826
825void CalendarView::checkFiles() 827void CalendarView::checkFiles()
826{ 828{
827 QString message; 829 QString message;
828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 830 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
829 KopiCalendarFile * cal = calendars.first(); 831 KopiCalendarFile * cal = calendars.first();
830 while ( cal ) { 832 while ( cal ) {
831 if ( cal->mErrorOnLoad ) { 833 if ( cal->mErrorOnLoad ) {
832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 834 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
833 } 835 }
834 cal = calendars.next(); 836 cal = calendars.next();
835 } 837 }
836 if ( !message.isEmpty() ) { 838 if ( !message.isEmpty() ) {
837 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 839 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
838 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed")); 840 KMessageBox::error(this,message, i18n("Loading of calendar(s) failed"));
839 } 841 }
840 static bool firstTime = true; 842 static bool firstTime = true;
841 if ( firstTime ) { 843 if ( firstTime ) {
842 firstTime = false; 844 firstTime = false;
843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 845 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
844 } 846 }
845} 847}
846void CalendarView::checkAlarms() 848void CalendarView::checkAlarms()
847{ 849{
848 KConfig *config = KOGlobals::config(); 850 KConfig *config = KOGlobals::config();
849 config->setGroup( "AppRun" ); 851 config->setGroup( "AppRun" );
850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 852 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
851 int daysto = dt.daysTo( QDate::currentDate() ); 853 int daysto = dt.daysTo( QDate::currentDate() );
852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 854 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
853 dt = dt.addDays( days ); 855 dt = dt.addDays( days );
854 int secto = dt.secsTo( QDateTime::currentDateTime() ); 856 int secto = dt.secsTo( QDateTime::currentDateTime() );
855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 857 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
856 //qDebug("KO: Reading program stop %d ", secs); 858 //qDebug("KO: Reading program stop %d ", secs);
857 //secs -= ( 3600 * 24*3 ); // debug only 859 //secs -= ( 3600 * 24*3 ); // debug only
858 QDateTime latest = dt.addSecs ( secs ); 860 QDateTime latest = dt.addSecs ( secs );
859 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 861 qDebug("KO: Last termination on %s ", latest.toString().latin1());
860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 862 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
861 QPtrList<Incidence> el = mCalendar->rawIncidences(); 863 QPtrList<Incidence> el = mCalendar->rawIncidences();
862 QPtrList<Incidence> al; 864 QPtrList<Incidence> al;
863 Incidence* inL = el.first(); 865 Incidence* inL = el.first();
864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 866 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 867 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
866 while ( inL ) { 868 while ( inL ) {
867 bool ok = false; 869 bool ok = false;
868 int offset = 0; 870 int offset = 0;
869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 871 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
870 if ( ok ) { 872 if ( ok ) {
871 //qDebug("OK %s",next.toString().latin1()); 873 //qDebug("OK %s",next.toString().latin1());
872 if ( next < cur ) { 874 if ( next < cur ) {
873 al.append( inL ); 875 al.append( inL );
874 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 876 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
875 } 877 }
876 } 878 }
877 inL = el.next(); 879 inL = el.next();
878 } 880 }
879 if ( al.count() ) { 881 if ( al.count() ) {
880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 882 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
881 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 883 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
882 QVBoxLayout* lay = new QVBoxLayout( dia ); 884 QVBoxLayout* lay = new QVBoxLayout( dia );
883 lay->setSpacing( 0 ); 885 lay->setSpacing( 0 );
884 lay->setMargin( 0 ); 886 lay->setMargin( 0 );
885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 887 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 888 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
887 lay->addWidget( matb ); 889 lay->addWidget( matb );
888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 890 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
889 int wid = 210; 891 int wid = 210;
890 int x = QApplication::desktop()->width() - wid - 7; 892 int x = QApplication::desktop()->width() - wid - 7;
891 int y = QApplication::desktop()->height() - wid - 70; 893 int y = QApplication::desktop()->height() - wid - 70;
892 dia->setGeometry ( x,y,wid,wid); 894 dia->setGeometry ( x,y,wid,wid);
893 } else { 895 } else {
894 int si = 220; 896 int si = 220;
895 if ( QApplication::desktop()->width() > 470 ) 897 if ( QApplication::desktop()->width() > 470 )
896 si = 400; 898 si = 400;
897 dia->resize(si,si/2); 899 dia->resize(si,si/2);
898 } 900 }
899 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 901 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
900 dia->show(); 902 dia->show();
901 903
902 } 904 }
903#if 0 905#if 0
904 // for creating timetracker test data 906 // for creating timetracker test data
905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc "); 907 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
906 Todo * nt; 908 Todo * nt;
907 mCalendar->close(); 909 mCalendar->close();
908 { 910 {
909 Todo * root1 = new Todo; 911 Todo * root1 = new Todo;
910 mCalendar->addTodo( root1 ); 912 mCalendar->addTodo( root1 );
911 root1->setSummary( "Project1"); 913 root1->setSummary( "Project1");
912 root1->setPriority( 1 ); 914 root1->setPriority( 1 );
913 root1->setCategories( QString( "Cat_Pro1") ); 915 root1->setCategories( QString( "Cat_Pro1") );
914 root1->setDescription( "This is a test description of a root Project" ); 916 root1->setDescription( "This is a test description of a root Project" );
915 root1->setPercentComplete( 20 ); 917 root1->setPercentComplete( 20 );
916 updateView(); 918 updateView();
917 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 919 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
918 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 920 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
919 921
920 nt = new Todo; 922 nt = new Todo;
921 mCalendar->addTodo( nt ); 923 mCalendar->addTodo( nt );
922 nt->setSummary( "Planning Project1"); 924 nt->setSummary( "Planning Project1");
923 nt->setPriority( 1 ); 925 nt->setPriority( 1 );
924 nt->setDescription( "This is a test description of Planning Project1" ); 926 nt->setDescription( "This is a test description of Planning Project1" );
925 nt->setPercentComplete( 20 ); 927 nt->setPercentComplete( 20 );
926 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") ); 928 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1") );
927 929
928 930
929 Todo * sub1 = nt; 931 Todo * sub1 = nt;
930 sub1->setRelatedTo( root1 ); 932 sub1->setRelatedTo( root1 );
931 933
932 nt = new Todo; 934 nt = new Todo;
933 mCalendar->addTodo( nt ); 935 mCalendar->addTodo( nt );
934 nt->setSummary( "Planning Project1: Lutz"); 936 nt->setSummary( "Planning Project1: Lutz");
935 nt->setPriority( 1 ); 937 nt->setPriority( 1 );
936 nt->setDescription( "This todo counts the actual work of a person on a project" ); 938 nt->setDescription( "This todo counts the actual work of a person on a project" );
937 nt->setPercentComplete( 20 ); 939 nt->setPercentComplete( 20 );
938 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") ); 940 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Lutz") );
939 Todo * workLutz11 = nt; 941 Todo * workLutz11 = nt;
940 workLutz11->setRelatedTo( sub1 ); 942 workLutz11->setRelatedTo( sub1 );
941 943
942 nt = new Todo; 944 nt = new Todo;
943 mCalendar->addTodo( nt ); 945 mCalendar->addTodo( nt );
944 nt->setSummary( "Planning Project1: Norbert"); 946 nt->setSummary( "Planning Project1: Norbert");
945 nt->setPriority( 1 ); 947 nt->setPriority( 1 );
946 nt->setDescription( "This todo counts the actual work of a person on a project" ); 948 nt->setDescription( "This todo counts the actual work of a person on a project" );
947 nt->setPercentComplete( 20 ); 949 nt->setPercentComplete( 20 );
948 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") ); 950 nt->setCategories( QString( "Cat_Pro1,Cat_Plan_Pro1,Cat_Work_Norbert") );
949 Todo * workNorbert11 = nt; 951 Todo * workNorbert11 = nt;
950 workNorbert11->setRelatedTo( sub1 ); 952 workNorbert11->setRelatedTo( sub1 );
951 953
952 nt = new Todo; 954 nt = new Todo;
953 mCalendar->addTodo( nt ); 955 mCalendar->addTodo( nt );
954 nt->setSummary( "Work on 1"); 956 nt->setSummary( "Work on 1");
955 nt->setPriority( 1 ); 957 nt->setPriority( 1 );
956 nt->setDescription( "This is a test description of Work Project_1" ); 958 nt->setDescription( "This is a test description of Work Project_1" );
957 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") ); 959 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1") );
958 nt->setPercentComplete( 20 ); 960 nt->setPercentComplete( 20 );
959 961
960 Todo * sub2 = nt; 962 Todo * sub2 = nt;
961 sub2->setRelatedTo( root1 ); 963 sub2->setRelatedTo( root1 );
962 964
963 965
964 nt = new Todo; 966 nt = new Todo;
965 mCalendar->addTodo( nt ); 967 mCalendar->addTodo( nt );
966 nt->setSummary( "Work on 1: Lutz"); 968 nt->setSummary( "Work on 1: Lutz");
967 nt->setPriority( 1 ); 969 nt->setPriority( 1 );
968 nt->setDescription( "This todo counts the actual work of a person on a project" ); 970 nt->setDescription( "This todo counts the actual work of a person on a project" );
969 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") ); 971 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Lutz") );
970 nt->setPercentComplete( 20 ); 972 nt->setPercentComplete( 20 );
971 Todo * workLutz12 = nt; 973 Todo * workLutz12 = nt;
972 workLutz12->setRelatedTo( sub2 ); 974 workLutz12->setRelatedTo( sub2 );
973 975
974 nt = new Todo; 976 nt = new Todo;
975 mCalendar->addTodo( nt ); 977 mCalendar->addTodo( nt );
976 nt->setSummary( "Work on 1: Norbert"); 978 nt->setSummary( "Work on 1: Norbert");
977 nt->setPriority( 1 ); 979 nt->setPriority( 1 );
978 nt->setDescription( "This todo counts the actual work of a person on a project" ); 980 nt->setDescription( "This todo counts the actual work of a person on a project" );
979 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") ); 981 nt->setCategories( QString( "Cat_Pro1,Cat_Work_Pro1,Cat_Work_Norbert") );
980 nt->setPercentComplete( 20 ); 982 nt->setPercentComplete( 20 );
981 Todo * workNorbert12 = nt; 983 Todo * workNorbert12 = nt;
982 workNorbert12->setRelatedTo( sub2 ); 984 workNorbert12->setRelatedTo( sub2 );
983 985
984 int secLenRunning = 7200; 986 int secLenRunning = 7200;
985 int secLenPausing = 3600 * 3; 987 int secLenPausing = 3600 * 3;
986 int dayInterval = 1; 988 int dayInterval = 1;
987 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval ); 989 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
988 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 ); 990 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
989 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1); 991 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
990 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3); 992 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
991 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0); 993 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
992 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1); 994 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
993 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3); 995 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
994 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0); 996 createRunningDate4Todo( workNorbert12, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
995 997
996 } 998 }
997 999
998 { 1000 {
999 Todo * root1 = new Todo; 1001 Todo * root1 = new Todo;
1000 mCalendar->addTodo( root1 ); 1002 mCalendar->addTodo( root1 );
1001 root1->setSummary( "Project2"); 1003 root1->setSummary( "Project2");
1002 root1->setPriority( 1 ); 1004 root1->setPriority( 1 );
1003 root1->setDescription( "This is a test description of a root Project 2" ); 1005 root1->setDescription( "This is a test description of a root Project 2" );
1004 root1->setPercentComplete( 20 ); 1006 root1->setPercentComplete( 20 );
1005 root1->setCategories( QString( "Cat_Pro2") ); 1007 root1->setCategories( QString( "Cat_Pro2") );
1006 updateView(); 1008 updateView();
1007 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) ); 1009 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1008 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) ); 1010 QDateTime end = QDateTime ( QDate( 2005,8,5), QTime ( 0,0,0) );
1009 int secLenRunning = 7200; 1011 int secLenRunning = 7200;
1010 int secLenPausing = 3600 * 3; 1012 int secLenPausing = 3600 * 3;
1011 int dayInterval = 1; 1013 int dayInterval = 1;
1012 1014
1013 nt = new Todo; 1015 nt = new Todo;
1014 mCalendar->addTodo( nt ); 1016 mCalendar->addTodo( nt );
1015 nt->setSummary( "Planning Project2"); 1017 nt->setSummary( "Planning Project2");
1016 nt->setPriority( 1 ); 1018 nt->setPriority( 1 );
1017 nt->setDescription( "This is a test description of Planning_Project_2" ); 1019 nt->setDescription( "This is a test description of Planning_Project_2" );
1018 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") ); 1020 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1019 nt->setPercentComplete( 20 ); 1021 nt->setPercentComplete( 20 );
1020 1022
1021 1023
1022 Todo * sub1 = nt; 1024 Todo * sub1 = nt;
1023 sub1->setRelatedTo( root1 ); 1025 sub1->setRelatedTo( root1 );
1024 1026
1025 nt = new Todo; 1027 nt = new Todo;
1026 mCalendar->addTodo( nt ); 1028 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning Project2: Lutz"); 1029 nt->setSummary( "Planning Project2: Lutz");
1028 nt->setPriority( 1 ); 1030 nt->setPriority( 1 );
1029 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1031 nt->setDescription( "This todo counts the actual work of a person on a project" );
1030 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") ); 1032 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1031 nt->setPercentComplete( 20 ); 1033 nt->setPercentComplete( 20 );
1032 Todo * workLutz11 = nt; 1034 Todo * workLutz11 = nt;
1033 workLutz11->setRelatedTo( sub1 ); 1035 workLutz11->setRelatedTo( sub1 );
1034 1036
1035 nt = new Todo; 1037 nt = new Todo;
1036 mCalendar->addTodo( nt ); 1038 mCalendar->addTodo( nt );
1037 nt->setSummary( "Planning Project2: Norbert"); 1039 nt->setSummary( "Planning Project2: Norbert");
1038 nt->setPriority( 1 ); 1040 nt->setPriority( 1 );
1039 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1041 nt->setDescription( "This todo counts the actual work of a person on a project" );
1040 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") ); 1042 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1041 nt->setPercentComplete( 20 ); 1043 nt->setPercentComplete( 20 );
1042 Todo * workNorbert11 = nt; 1044 Todo * workNorbert11 = nt;
1043 workNorbert11->setRelatedTo( sub1 ); 1045 workNorbert11->setRelatedTo( sub1 );
1044 1046
1045 nt = new Todo; 1047 nt = new Todo;
1046 mCalendar->addTodo( nt ); 1048 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2"); 1049 nt->setSummary( "Work on 2");
1048 nt->setPriority( 1 ); 1050 nt->setPriority( 1 );
1049 nt->setDescription( "This is a test description of Work Project_2" ); 1051 nt->setDescription( "This is a test description of Work Project_2" );
1050 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") ); 1052 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1051 nt->setPercentComplete( 20 ); 1053 nt->setPercentComplete( 20 );
1052 1054
1053 Todo * sub2 = nt; 1055 Todo * sub2 = nt;
1054 sub2->setRelatedTo( root1 ); 1056 sub2->setRelatedTo( root1 );
1055 1057
1056 1058
1057 nt = new Todo; 1059 nt = new Todo;
1058 mCalendar->addTodo( nt ); 1060 mCalendar->addTodo( nt );
1059 nt->setSummary( "Work on 2: Lutz"); 1061 nt->setSummary( "Work on 2: Lutz");
1060 nt->setPriority( 1 ); 1062 nt->setPriority( 1 );
1061 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1063 nt->setDescription( "This todo counts the actual work of a person on a project" );
1062 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") ); 1064 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1063 nt->setPercentComplete( 20 ); 1065 nt->setPercentComplete( 20 );
1064 Todo * workLutz12 = nt; 1066 Todo * workLutz12 = nt;
1065 workLutz12->setRelatedTo( sub2 ); 1067 workLutz12->setRelatedTo( sub2 );
1066 1068
1067 nt = new Todo; 1069 nt = new Todo;
1068 mCalendar->addTodo( nt ); 1070 mCalendar->addTodo( nt );
1069 nt->setSummary( "Work on 2: Norbert"); 1071 nt->setSummary( "Work on 2: Norbert");
1070 nt->setPriority( 1 ); 1072 nt->setPriority( 1 );
1071 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1073 nt->setDescription( "This todo counts the actual work of a person on a project" );
1072 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") ); 1074 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1073 nt->setPercentComplete( 20 ); 1075 nt->setPercentComplete( 20 );
1074 Todo * workNorbert12 = nt; 1076 Todo * workNorbert12 = nt;
1075 workNorbert12->setRelatedTo( sub2 ); 1077 workNorbert12->setRelatedTo( sub2 );
1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1078 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1077 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1079 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1080 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1081 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1080 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1082 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1083 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1084 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1083 } 1085 }
1084 updateView(); 1086 updateView();
1085#endif 1087#endif
1086 1088
1087} 1089}
1088void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1090void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1089{ 1091{
1090 static int ccc = 0; 1092 static int ccc = 0;
1091 ++ccc; 1093 ++ccc;
1092 QDateTime t_start = start; 1094 QDateTime t_start = start;
1093 runT->setPriority( 5 ); 1095 runT->setPriority( 5 );
1094 runT->setPercentComplete( 0 ); 1096 runT->setPercentComplete( 0 );
1095 int count = 0; 1097 int count = 0;
1096 int prio = 5; 1098 int prio = 5;
1097 int complete = 0; 1099 int complete = 0;
1098 while ( t_start < end ) { 1100 while ( t_start < end ) {
1099 ++count; 1101 ++count;
1100 if ( count > ccc ) { 1102 if ( count > ccc ) {
1101 count = 0; 1103 count = 0;
1102 --prio; 1104 --prio;
1103 if ( prio == 0 ) prio = 5; 1105 if ( prio == 0 ) prio = 5;
1104 complete += 20; 1106 complete += 20;
1105 if ( complete > 100 ) complete = 0; 1107 if ( complete > 100 ) complete = 0;
1106 runT->setPriority( prio ); 1108 runT->setPriority( prio );
1107 runT->setPercentComplete( complete ); 1109 runT->setPercentComplete( complete );
1108 } 1110 }
1109 runT->setRunning( true ); 1111 runT->setRunning( true );
1110 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1112 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1111 if ( dayInterval ) 1113 if ( dayInterval )
1112 t_start = t_start.addDays( dayInterval ); 1114 t_start = t_start.addDays( dayInterval );
1113 else { 1115 else {
1114 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1116 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1115 } 1117 }
1116 } 1118 }
1117} 1119}
1118 1120
1119void CalendarView::showDay( QDate d ) 1121void CalendarView::showDay( QDate d )
1120{ 1122{
1121 dateNavigator()->blockSignals( true ); 1123 dateNavigator()->blockSignals( true );
1122 dateNavigator()->selectDate( d ); 1124 dateNavigator()->selectDate( d );
1123 dateNavigator()->blockSignals( false ); 1125 dateNavigator()->blockSignals( false );
1124 mViewManager->showDayView(); 1126 mViewManager->showDayView();
1125 //dateNavigator()->selectDate( d ); 1127 //dateNavigator()->selectDate( d );
1126} 1128}
1127void CalendarView::timerAlarm() 1129void CalendarView::timerAlarm()
1128{ 1130{
1129 //qDebug("CalendarView::timerAlarm() "); 1131 //qDebug("CalendarView::timerAlarm() ");
1130 computeAlarm(mAlarmNotification ); 1132 computeAlarm(mAlarmNotification );
1131} 1133}
1132 1134
1133void CalendarView::suspendAlarm() 1135void CalendarView::suspendAlarm()
1134{ 1136{
1135 //qDebug(" CalendarView::suspendAlarm() "); 1137 //qDebug(" CalendarView::suspendAlarm() ");
1136 computeAlarm(mSuspendAlarmNotification ); 1138 computeAlarm(mSuspendAlarmNotification );
1137 1139
1138} 1140}
1139 1141
1140void CalendarView::startAlarm( QString mess , QString filename) 1142void CalendarView::startAlarm( QString mess , QString filename)
1141{ 1143{
1142 1144
1143 topLevelWidget()->showNormal(); 1145 topLevelWidget()->showNormal();
1144 topLevelWidget()->setActiveWindow(); 1146 topLevelWidget()->setActiveWindow();
1145 topLevelWidget()->raise(); 1147 topLevelWidget()->raise();
1146 1148
1147 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1149 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1150 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1149 1151
1150} 1152}
1151 1153
1152void CalendarView::checkNextTimerAlarm() 1154void CalendarView::checkNextTimerAlarm()
1153{ 1155{
1154 mCalendar->checkAlarmForIncidence( 0, true ); 1156 mCalendar->checkAlarmForIncidence( 0, true );
1155} 1157}
1156 1158
1157void CalendarView::computeAlarm( QString msg ) 1159void CalendarView::computeAlarm( QString msg )
1158{ 1160{
1159 1161
1160 QString mess = msg; 1162 QString mess = msg;
1161 QString mAlarmMessage = mess.mid( 9 ); 1163 QString mAlarmMessage = mess.mid( 9 );
1162 QString filename = MainWindow::resourcePath(); 1164 QString filename = MainWindow::resourcePath();
1163 filename += "koalarm.wav"; 1165 filename += "koalarm.wav";
1164 QString tempfilename; 1166 QString tempfilename;
1165 if ( mess.left( 13 ) == "suspend_alarm") { 1167 if ( mess.left( 13 ) == "suspend_alarm") {
1166 bool error = false; 1168 bool error = false;
1167 int len = mess.mid( 13 ).find("+++"); 1169 int len = mess.mid( 13 ).find("+++");
1168 if ( len < 2 ) 1170 if ( len < 2 )
1169 error = true; 1171 error = true;
1170 else { 1172 else {
1171 tempfilename = mess.mid( 13, len ); 1173 tempfilename = mess.mid( 13, len );
1172 if ( !QFile::exists( tempfilename ) ) 1174 if ( !QFile::exists( tempfilename ) )
1173 error = true; 1175 error = true;
1174 } 1176 }
1175 if ( ! error ) { 1177 if ( ! error ) {
1176 filename = tempfilename; 1178 filename = tempfilename;
1177 } 1179 }
1178 mAlarmMessage = mess.mid( 13+len+3 ); 1180 mAlarmMessage = mess.mid( 13+len+3 );
1179 //qDebug("suspend file %s ",tempfilename.latin1() ); 1181 //qDebug("suspend file %s ",tempfilename.latin1() );
1180 startAlarm( mAlarmMessage, filename); 1182 startAlarm( mAlarmMessage, filename);
1181 return; 1183 return;
1182 } 1184 }
1183 if ( mess.left( 11 ) == "timer_alarm") { 1185 if ( mess.left( 11 ) == "timer_alarm") {
1184 //mTimerTime = 0; 1186 //mTimerTime = 0;
1185 startAlarm( mess.mid( 11 ), filename ); 1187 startAlarm( mess.mid( 11 ), filename );
1186 return; 1188 return;
1187 } 1189 }
1188 if ( mess.left( 10 ) == "proc_alarm") { 1190 if ( mess.left( 10 ) == "proc_alarm") {
1189 bool error = false; 1191 bool error = false;
1190 int len = mess.mid( 10 ).find("+++"); 1192 int len = mess.mid( 10 ).find("+++");
1191 if ( len < 2 ) 1193 if ( len < 2 )
1192 error = true; 1194 error = true;
1193 else { 1195 else {
1194 tempfilename = mess.mid( 10, len ); 1196 tempfilename = mess.mid( 10, len );
1195 if ( !QFile::exists( tempfilename ) ) 1197 if ( !QFile::exists( tempfilename ) )
1196 error = true; 1198 error = true;
1197 } 1199 }
1198 if ( error ) { 1200 if ( error ) {
1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1201 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1200 mAlarmMessage += mess.mid( 10+len+3+9 ); 1202 mAlarmMessage += mess.mid( 10+len+3+9 );
1201 } else { 1203 } else {
1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1204 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1203 //qDebug("-----system command %s ",tempfilename.latin1() ); 1205 //qDebug("-----system command %s ",tempfilename.latin1() );
1204#ifndef _WIN32_ 1206#ifndef _WIN32_
1205 if ( vfork () == 0 ) { 1207 if ( vfork () == 0 ) {
1206 execl ( tempfilename.latin1(), 0 ); 1208 execl ( tempfilename.latin1(), 0 );
1207 return; 1209 return;
1208 } 1210 }
1209#else 1211#else
1210 QProcess* p = new QProcess(); 1212 QProcess* p = new QProcess();
1211 p->addArgument( tempfilename.latin1() ); 1213 p->addArgument( tempfilename.latin1() );
1212 p->start(); 1214 p->start();
1213 return; 1215 return;
1214#endif 1216#endif
1215 1217
1216 return; 1218 return;
1217 } 1219 }
1218 1220
1219 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1221 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1220 } 1222 }
1221 if ( mess.left( 11 ) == "audio_alarm") { 1223 if ( mess.left( 11 ) == "audio_alarm") {
1222 bool error = false; 1224 bool error = false;
1223 int len = mess.mid( 11 ).find("+++"); 1225 int len = mess.mid( 11 ).find("+++");
1224 if ( len < 2 ) 1226 if ( len < 2 )
1225 error = true; 1227 error = true;
1226 else { 1228 else {
1227 tempfilename = mess.mid( 11, len ); 1229 tempfilename = mess.mid( 11, len );
1228 if ( !QFile::exists( tempfilename ) ) 1230 if ( !QFile::exists( tempfilename ) )
1229 error = true; 1231 error = true;
1230 } 1232 }
1231 if ( ! error ) { 1233 if ( ! error ) {
1232 filename = tempfilename; 1234 filename = tempfilename;
1233 } 1235 }
1234 mAlarmMessage = mess.mid( 11+len+3+9 ); 1236 mAlarmMessage = mess.mid( 11+len+3+9 );
1235 //qDebug("audio file command %s ",tempfilename.latin1() ); 1237 //qDebug("audio file command %s ",tempfilename.latin1() );
1236 } 1238 }
1237 if ( mess.left( 9 ) == "cal_alarm") { 1239 if ( mess.left( 9 ) == "cal_alarm") {
1238 mAlarmMessage = mess.mid( 9 ) ; 1240 mAlarmMessage = mess.mid( 9 ) ;
1239 } 1241 }
1240 1242
1241 startAlarm( mAlarmMessage, filename ); 1243 startAlarm( mAlarmMessage, filename );
1242 1244
1243 1245
1244} 1246}
1245 1247
1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1248void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1247{ 1249{
1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1250 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
@@ -4393,768 +4395,782 @@ void CalendarView::openAddressbook()
4393 KRun::runCommand("kaddressbook"); 4395 KRun::runCommand("kaddressbook");
4394} 4396}
4395 4397
4396void CalendarView::setModified(bool modified) 4398void CalendarView::setModified(bool modified)
4397{ 4399{
4398 //qDebug("CalendarView::setModified %d ", modified); 4400 //qDebug("CalendarView::setModified %d ", modified);
4399 if ( modified ) 4401 if ( modified )
4400 emit signalmodified(); 4402 emit signalmodified();
4401 mModified = modified; 4403 mModified = modified;
4402 if ( mModified ) 4404 if ( mModified )
4403 emit modifiedChanged(mModified); 4405 emit modifiedChanged(mModified);
4404 4406
4405} 4407}
4406 4408
4407bool CalendarView::isReadOnly() 4409bool CalendarView::isReadOnly()
4408{ 4410{
4409 return mReadOnly; 4411 return mReadOnly;
4410} 4412}
4411 4413
4412void CalendarView::setReadOnly(bool readOnly) 4414void CalendarView::setReadOnly(bool readOnly)
4413{ 4415{
4414 if (mReadOnly != readOnly) { 4416 if (mReadOnly != readOnly) {
4415 mReadOnly = readOnly; 4417 mReadOnly = readOnly;
4416 emit readOnlyChanged(mReadOnly); 4418 emit readOnlyChanged(mReadOnly);
4417 } 4419 }
4418} 4420}
4419 4421
4420bool CalendarView::isModified() 4422bool CalendarView::isModified()
4421{ 4423{
4422 return mModified; 4424 return mModified;
4423} 4425}
4424void CalendarView::slotprintSelInc() 4426void CalendarView::slotprintSelInc()
4425{ 4427{
4426 if ( currentSelection() == 0 ) { 4428 if ( currentSelection() == 0 ) {
4427 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4429 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4428 return; 4430 return;
4429 } 4431 }
4430 showIncidence(); 4432 showIncidence();
4431 getEventViewerDialog()->print(); 4433 getEventViewerDialog()->print();
4432 4434
4433} 4435}
4434void CalendarView::printSetup() 4436void CalendarView::printSetup()
4435{ 4437{
4436#ifndef KORG_NOPRINTER 4438#ifndef KORG_NOPRINTER
4437 createPrinter(); 4439 createPrinter();
4438 4440
4439 mCalPrinter->setupPrinter(); 4441 mCalPrinter->setupPrinter();
4440#endif 4442#endif
4441} 4443}
4442 4444
4443void CalendarView::print() 4445void CalendarView::print()
4444{ 4446{
4445#ifndef KORG_NOPRINTER 4447#ifndef KORG_NOPRINTER
4446 createPrinter(); 4448 createPrinter();
4447 4449
4448 DateList tmpDateList = mNavigator->selectedDates(); 4450 DateList tmpDateList = mNavigator->selectedDates();
4449 mCalPrinter->print(CalPrinter::Month, 4451 mCalPrinter->print(CalPrinter::Month,
4450 tmpDateList.first(), tmpDateList.last()); 4452 tmpDateList.first(), tmpDateList.last());
4451#endif 4453#endif
4452} 4454}
4453 4455
4454void CalendarView::printPreview() 4456void CalendarView::printPreview()
4455{ 4457{
4456#ifndef KORG_NOPRINTER 4458#ifndef KORG_NOPRINTER
4457 kdDebug() << "CalendarView::printPreview()" << endl; 4459 kdDebug() << "CalendarView::printPreview()" << endl;
4458 4460
4459 createPrinter(); 4461 createPrinter();
4460 4462
4461 DateList tmpDateList = mNavigator->selectedDates(); 4463 DateList tmpDateList = mNavigator->selectedDates();
4462 4464
4463 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4465 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4464 tmpDateList.last()); 4466 tmpDateList.last());
4465#endif 4467#endif
4466} 4468}
4467bool CalendarView::exportICalendar( QString filename ) 4469bool CalendarView::exportICalendar( QString filename )
4468{ 4470{
4469 // Force correct extension 4471 // Force correct extension
4470 if (filename.right(4) != ".ics") filename += ".ics"; 4472 if (filename.right(4) != ".ics") filename += ".ics";
4471 4473
4472 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4474 FileStorage storage( mCalendar, filename, new ICalFormat() );
4473 return storage.save(); 4475 return storage.save();
4474} 4476}
4475 4477
4476bool CalendarView::exportICalendar() 4478bool CalendarView::exportICalendar()
4477{ 4479{
4478 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) ); 4480 return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) );
4479} 4481}
4480 4482
4481bool CalendarView::exportVCalendar( QString filename ) 4483bool CalendarView::exportVCalendar( QString filename )
4482{ 4484{
4483 if (mCalendar->journals().count() > 0) { 4485 if (mCalendar->journals().count() > 0) {
4484 int result = KMessageBox::warningContinueCancel(this, 4486 int result = KMessageBox::warningContinueCancel(this,
4485 i18n("The journal entries can not be\nexported to a vCalendar file."), 4487 i18n("The journal entries can not be\nexported to a vCalendar file."),
4486 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4488 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4487 true); 4489 true);
4488 if (result != KMessageBox::Continue) return false; 4490 if (result != KMessageBox::Continue) return false;
4489 } 4491 }
4490 4492
4491 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4493 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4492 4494
4493 // Force correct extension 4495 // Force correct extension
4494 if (filename.right(4) != ".vcs") filename += ".vcs"; 4496 if (filename.right(4) != ".vcs") filename += ".vcs";
4495 4497
4496 FileStorage storage( mCalendar, filename, new VCalFormat ); 4498 FileStorage storage( mCalendar, filename, new VCalFormat );
4497 return storage.save(); 4499 return storage.save();
4498 4500
4499} 4501}
4500 4502
4501void CalendarView::eventUpdated(Incidence *) 4503void CalendarView::eventUpdated(Incidence *)
4502{ 4504{
4503 setModified(); 4505 setModified();
4504 // Don't call updateView here. The code, which has caused the update of the 4506 // Don't call updateView here. The code, which has caused the update of the
4505 // event is responsible for updating the view. 4507 // event is responsible for updating the view.
4506 // updateView(); 4508 // updateView();
4507} 4509}
4508 4510
4509void CalendarView::adaptNavigationUnits() 4511void CalendarView::adaptNavigationUnits()
4510{ 4512{
4511 if (mViewManager->currentView()->isEventView()) { 4513 if (mViewManager->currentView()->isEventView()) {
4512 int days = mViewManager->currentView()->currentDateCount(); 4514 int days = mViewManager->currentView()->currentDateCount();
4513 if (days == 1) { 4515 if (days == 1) {
4514 emit changeNavStringPrev(i18n("&Previous Day")); 4516 emit changeNavStringPrev(i18n("&Previous Day"));
4515 emit changeNavStringNext(i18n("&Next Day")); 4517 emit changeNavStringNext(i18n("&Next Day"));
4516 } else { 4518 } else {
4517 emit changeNavStringPrev(i18n("&Previous Week")); 4519 emit changeNavStringPrev(i18n("&Previous Week"));
4518 emit changeNavStringNext(i18n("&Next Week")); 4520 emit changeNavStringNext(i18n("&Next Week"));
4519 } 4521 }
4520 } 4522 }
4521} 4523}
4522 4524
4523void CalendarView::processMainViewSelection( Incidence *incidence ) 4525void CalendarView::processMainViewSelection( Incidence *incidence )
4524{ 4526{
4525 if ( incidence ) mTodoList->clearSelection(); 4527 if ( incidence ) mTodoList->clearSelection();
4526 processIncidenceSelection( incidence ); 4528 processIncidenceSelection( incidence );
4527} 4529}
4528 4530
4529void CalendarView::processTodoListSelection( Incidence *incidence ) 4531void CalendarView::processTodoListSelection( Incidence *incidence )
4530{ 4532{
4531 if ( incidence && mViewManager->currentView() ) { 4533 if ( incidence && mViewManager->currentView() ) {
4532 mViewManager->currentView()->clearSelection(); 4534 mViewManager->currentView()->clearSelection();
4533 } 4535 }
4534 processIncidenceSelection( incidence ); 4536 processIncidenceSelection( incidence );
4535} 4537}
4536 4538
4537void CalendarView::processIncidenceSelection( Incidence *incidence ) 4539void CalendarView::processIncidenceSelection( Incidence *incidence )
4538{ 4540{
4539 emit incidenceSelected( incidence ); 4541 emit incidenceSelected( incidence );
4540 if ( incidence == mSelectedIncidence ) return; 4542 if ( incidence == mSelectedIncidence ) return;
4541 mSelectedIncidence = incidence; 4543 mSelectedIncidence = incidence;
4542 4544
4543 if ( incidence && incidence->typeID() == eventID ) { 4545 if ( incidence && incidence->typeID() == eventID ) {
4544 Event *event = static_cast<Event *>( incidence ); 4546 Event *event = static_cast<Event *>( incidence );
4545 if ( event->organizer() == KOPrefs::instance()->email() ) { 4547 if ( event->organizer() == KOPrefs::instance()->email() ) {
4546 emit organizerEventsSelected( true ); 4548 emit organizerEventsSelected( true );
4547 } else { 4549 } else {
4548 emit organizerEventsSelected(false); 4550 emit organizerEventsSelected(false);
4549 } 4551 }
4550 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4552 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4551 KOPrefs::instance()->email() ) ) { 4553 KOPrefs::instance()->email() ) ) {
4552 emit groupEventsSelected( true ); 4554 emit groupEventsSelected( true );
4553 } else { 4555 } else {
4554 emit groupEventsSelected(false); 4556 emit groupEventsSelected(false);
4555 } 4557 }
4556 return; 4558 return;
4557 } else { 4559 } else {
4558 if ( incidence && incidence->typeID() == todoID ) { 4560 if ( incidence && incidence->typeID() == todoID ) {
4559 emit todoSelected( true ); 4561 emit todoSelected( true );
4560 Todo *event = static_cast<Todo *>( incidence ); 4562 Todo *event = static_cast<Todo *>( incidence );
4561 if ( event->organizer() == KOPrefs::instance()->email() ) { 4563 if ( event->organizer() == KOPrefs::instance()->email() ) {
4562 emit organizerEventsSelected( true ); 4564 emit organizerEventsSelected( true );
4563 } else { 4565 } else {
4564 emit organizerEventsSelected(false); 4566 emit organizerEventsSelected(false);
4565 } 4567 }
4566 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4568 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4567 KOPrefs::instance()->email() ) ) { 4569 KOPrefs::instance()->email() ) ) {
4568 emit groupEventsSelected( true ); 4570 emit groupEventsSelected( true );
4569 } else { 4571 } else {
4570 emit groupEventsSelected(false); 4572 emit groupEventsSelected(false);
4571 } 4573 }
4572 return; 4574 return;
4573 } else { 4575 } else {
4574 emit todoSelected( false ); 4576 emit todoSelected( false );
4575 emit organizerEventsSelected(false); 4577 emit organizerEventsSelected(false);
4576 emit groupEventsSelected(false); 4578 emit groupEventsSelected(false);
4577 } 4579 }
4578 return; 4580 return;
4579 } 4581 }
4580 4582
4581 /* if ( incidence && incidence->typeID() == todoID ) { 4583 /* if ( incidence && incidence->typeID() == todoID ) {
4582 emit todoSelected( true ); 4584 emit todoSelected( true );
4583 } else { 4585 } else {
4584 emit todoSelected( false ); 4586 emit todoSelected( false );
4585 }*/ 4587 }*/
4586} 4588}
4587 4589
4588 4590
4589void CalendarView::checkClipboard() 4591void CalendarView::checkClipboard()
4590{ 4592{
4591#ifndef KORG_NODND 4593#ifndef KORG_NODND
4592 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 4594 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
4593 emit pasteEnabled(true); 4595 emit pasteEnabled(true);
4594 } else { 4596 } else {
4595 emit pasteEnabled(false); 4597 emit pasteEnabled(false);
4596 } 4598 }
4597#endif 4599#endif
4598} 4600}
4599 4601
4600void CalendarView::showDates(const DateList &selectedDates) 4602void CalendarView::showDates(const DateList &selectedDates)
4601{ 4603{
4602 // kdDebug() << "CalendarView::selectDates()" << endl; 4604 // kdDebug() << "CalendarView::selectDates()" << endl;
4603 4605
4604 4606
4605 if ( !mBlockShowDates ) { 4607 if ( !mBlockShowDates ) {
4606 if ( mViewManager->currentView() ) { 4608 if ( mViewManager->currentView() ) {
4607 updateView( selectedDates.first(), selectedDates.last() ); 4609 updateView( selectedDates.first(), selectedDates.last() );
4608 } else { 4610 } else {
4609 mViewManager->showAgendaView(); 4611 mViewManager->showAgendaView();
4610 } 4612 }
4611 } 4613 }
4612 4614
4613 QDate date = selectedDates.first(); 4615 QDate date = selectedDates.first();
4614 if ( ! date.isValid() ) { 4616 if ( ! date.isValid() ) {
4615 topLevelWidget()->setCaption(""); 4617 topLevelWidget()->setCaption("");
4616 return; 4618 return;
4617 } 4619 }
4618 4620
4619 QString selDates; 4621 QString selDates;
4620 selDates = KGlobal::locale()->formatDate( date, true); 4622 selDates = KGlobal::locale()->formatDate( date, true);
4621 if (selectedDates.first() < selectedDates.last() ) 4623 if (selectedDates.first() < selectedDates.last() )
4622 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 4624 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
4623 else { 4625 else {
4624 QString addString; 4626 QString addString;
4625 if ( date == QDateTime::currentDateTime().date() ) 4627 if ( date == QDateTime::currentDateTime().date() )
4626 addString = i18n("Today"); 4628 addString = i18n("Today");
4627 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 4629 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
4628 addString = i18n("Tomorrow"); 4630 addString = i18n("Tomorrow");
4629 else if ( date == QDateTime::currentDateTime().date().addDays(-1) ) 4631 else if ( date == QDateTime::currentDateTime().date().addDays(-1) )
4630 addString = i18n("Yesterday"); 4632 addString = i18n("Yesterday");
4631 else if ( date == QDateTime::currentDateTime().date().addDays(-2) ) 4633 else if ( date == QDateTime::currentDateTime().date().addDays(-2) )
4632 addString = i18n("Day before yesterday"); 4634 addString = i18n("Day before yesterday");
4633 else if ( date == QDateTime::currentDateTime().date().addDays(2) ) 4635 else if ( date == QDateTime::currentDateTime().date().addDays(2) )
4634 addString = i18n("Day after tomorrow"); 4636 addString = i18n("Day after tomorrow");
4635 if ( !addString.isEmpty() ) { 4637 if ( !addString.isEmpty() ) {
4636 topLevelWidget()->setCaption( addString+", " + selDates ); 4638 topLevelWidget()->setCaption( addString+", " + selDates );
4637 return; 4639 return;
4638 } 4640 }
4639 } 4641 }
4640 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 4642 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
4641 4643
4642} 4644}
4643 4645
4644QPtrList<CalFilter> CalendarView::filters() 4646QPtrList<CalFilter> CalendarView::filters()
4645{ 4647{
4646 return mFilters; 4648 return mFilters;
4647 4649
4648} 4650}
4649void CalendarView::editFilters() 4651void CalendarView::editFilters()
4650{ 4652{
4651 // kdDebug() << "CalendarView::editFilters()" << endl; 4653 // kdDebug() << "CalendarView::editFilters()" << endl;
4652 4654
4653 CalFilter *filter = mFilters.first(); 4655 CalFilter *filter = mFilters.first();
4654 while(filter) { 4656 while(filter) {
4655 filter = mFilters.next(); 4657 filter = mFilters.next();
4656 } 4658 }
4657 4659
4658 mDialogManager->showFilterEditDialog(&mFilters); 4660 mDialogManager->showFilterEditDialog(&mFilters);
4659 updateFilter(); 4661 updateFilter();
4660} 4662}
4661void CalendarView::toggleFilter() 4663void CalendarView::toggleFilter()
4662{ 4664{
4663 if ( mLeftFrame->isHidden() ) { 4665 if ( mLeftFrame->isHidden() ) {
4664 toggleExpand(); 4666 toggleExpand();
4665 showFilter( true ); 4667 showFilter( true );
4666 } else 4668 } else
4667 showFilter(! mCalEditView->isVisible()); 4669 showFilter(! mCalEditView->isVisible());
4668} 4670}
4669 4671
4670KOFilterView *CalendarView::filterView() 4672KOFilterView *CalendarView::filterView()
4671{ 4673{
4672 return mFilterView; 4674 return mFilterView;
4673} 4675}
4674void CalendarView::selectFilter( int fil ) 4676void CalendarView::selectFilter( int fil )
4675{ 4677{
4676 mFilterView->setSelectedFilter( fil ); 4678 mFilterView->setSelectedFilter( fil );
4677 updateUnmanagedViews(); 4679 updateUnmanagedViews();
4678} 4680}
4679void CalendarView::showFilter(bool visible) 4681void CalendarView::showFilter(bool visible)
4680{ 4682{
4681#if 1 4683#if 1
4682 if (visible) { 4684 if (visible) {
4683 mCalEditView->readConfig(); 4685 mCalEditView->readConfig();
4684 mCalEditView->show(); 4686 mCalEditView->show();
4685 QValueList<int> sizes; 4687 QValueList<int> sizes;
4686 sizes = mLeftFrame->sizes(); 4688 sizes = mLeftFrame->sizes();
4687 if ( sizes.count() == 4 && sizes[3] < 20 ) { 4689 if ( sizes.count() == 4 && sizes[3] < 20 ) {
4688 sizes.clear(); 4690 sizes.clear();
4689 sizes << 100; 4691 sizes << 100;
4690 sizes << 0; 4692 sizes << 0;
4691 sizes << 0; 4693 sizes << 0;
4692 sizes << 100; 4694 sizes << 100;
4693 mLeftFrame->setSizes(sizes); 4695 mLeftFrame->setSizes(sizes);
4694 } 4696 }
4695#if 0 4697#if 0
4696 sizes = mLeftFrame->sizes(); 4698 sizes = mLeftFrame->sizes();
4697 int ccc = 0; 4699 int ccc = 0;
4698 while ( ccc < sizes.count()) { 4700 while ( ccc < sizes.count()) {
4699 qDebug("size %d %d ", ccc, sizes[ccc]); 4701 qDebug("size %d %d ", ccc, sizes[ccc]);
4700 ++ccc; 4702 ++ccc;
4701 } 4703 }
4702#endif 4704#endif
4703 4705
4704 } 4706 }
4705 else { 4707 else {
4706 mCalEditView->hide(); 4708 mCalEditView->hide();
4707 } 4709 }
4708#else 4710#else
4709 if (visible) mFilterView->show(); 4711 if (visible) mFilterView->show();
4710 else mFilterView->hide(); 4712 else mFilterView->hide();
4711#endif 4713#endif
4712} 4714}
4713void CalendarView::toggleFilerEnabled( ) 4715void CalendarView::toggleFilerEnabled( )
4714{ 4716{
4715 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 4717 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
4716 if ( !mFilterView->filtersEnabled() ) 4718 if ( !mFilterView->filtersEnabled() )
4717 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 4719 topLevelWidget()->setCaption( i18n("Filter disabled ") );
4718 updateUnmanagedViews(); 4720 updateUnmanagedViews();
4719 4721
4720} 4722}
4721void CalendarView::updateFilter() 4723void CalendarView::updateFilter()
4722{ 4724{
4723 CalFilter *filter = mFilterView->selectedFilter(); 4725 CalFilter *filter = mFilterView->selectedFilter();
4724 if (filter) { 4726 if (filter) {
4725 QString mess; 4727 QString mess;
4726 if (mFilterView->filtersEnabled()) { 4728 if (mFilterView->filtersEnabled()) {
4727 mess = i18n("Filter selected: ")+filter->name(); 4729 mess = i18n("Filter selected: ")+filter->name();
4728 filter->setEnabled(true); 4730 filter->setEnabled(true);
4729 } 4731 }
4730 else filter->setEnabled(false); 4732 else filter->setEnabled(false);
4731 mCalendar->setFilter(filter); 4733 mCalendar->setFilter(filter);
4732 updateView(); 4734 updateView();
4733 if ( !mess.isEmpty() ) 4735 if ( !mess.isEmpty() )
4734 topLevelWidget()->setCaption( mess ); 4736 topLevelWidget()->setCaption( mess );
4735 4737
4736 } 4738 }
4737 emit filtersUpdated(); 4739 emit filtersUpdated();
4738} 4740}
4739 4741
4740void CalendarView::filterEdited() 4742void CalendarView::filterEdited()
4741{ 4743{
4742 mFilterView->updateFilters(); 4744 mFilterView->updateFilters();
4743 updateFilter(); 4745 updateFilter();
4744 writeSettings(); 4746 writeSettings();
4745} 4747}
4746 4748
4747 4749
4748void CalendarView::takeOverEvent() 4750void CalendarView::takeOverEvent()
4749{ 4751{
4750 Incidence *incidence = currentSelection(); 4752 Incidence *incidence = currentSelection();
4751 4753
4752 if (!incidence) return; 4754 if (!incidence) return;
4753 4755
4754 incidence->setOrganizer(KOPrefs::instance()->email()); 4756 incidence->setOrganizer(KOPrefs::instance()->email());
4755 incidence->recreate(); 4757 incidence->recreate();
4756 incidence->setReadOnly(false); 4758 incidence->setReadOnly(false);
4757 4759
4758 updateView(); 4760 updateView();
4759} 4761}
4760 4762
4761void CalendarView::takeOverCalendar() 4763void CalendarView::takeOverCalendar()
4762{ 4764{
4763 // TODO: Create Calendar::allIncidences() function and use it here 4765 // TODO: Create Calendar::allIncidences() function and use it here
4764 4766
4765 clearAllViews(); 4767 clearAllViews();
4766 QPtrList<Event> events = mCalendar->events(); 4768 QPtrList<Event> events = mCalendar->events();
4767 for(uint i=0; i<events.count(); ++i) { 4769 for(uint i=0; i<events.count(); ++i) {
4768 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 4770 events.at(i)->setOrganizer(KOPrefs::instance()->email());
4769 events.at(i)->recreate(); 4771 events.at(i)->recreate();
4770 events.at(i)->setReadOnly(false); 4772 events.at(i)->setReadOnly(false);
4771 } 4773 }
4772 4774
4773 QPtrList<Todo> todos = mCalendar->todos(); 4775 QPtrList<Todo> todos = mCalendar->todos();
4774 for(uint i=0; i<todos.count(); ++i) { 4776 for(uint i=0; i<todos.count(); ++i) {
4775 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 4777 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
4776 todos.at(i)->recreate(); 4778 todos.at(i)->recreate();
4777 todos.at(i)->setReadOnly(false); 4779 todos.at(i)->setReadOnly(false);
4778 } 4780 }
4779 4781
4780 QPtrList<Journal> journals = mCalendar->journals(); 4782 QPtrList<Journal> journals = mCalendar->journals();
4781 for(uint i=0; i<journals.count(); ++i) { 4783 for(uint i=0; i<journals.count(); ++i) {
4782 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 4784 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
4783 journals.at(i)->recreate(); 4785 journals.at(i)->recreate();
4784 journals.at(i)->setReadOnly(false); 4786 journals.at(i)->setReadOnly(false);
4785 } 4787 }
4786 4788
4787 updateView(); 4789 updateView();
4788} 4790}
4789 4791
4790void CalendarView::showIntro() 4792void CalendarView::showIntro()
4791{ 4793{
4792 kdDebug() << "To be implemented." << endl; 4794 kdDebug() << "To be implemented." << endl;
4793} 4795}
4794 4796
4795QWidgetStack *CalendarView::viewStack() 4797QWidgetStack *CalendarView::viewStack()
4796{ 4798{
4797 return mRightFrame; 4799 return mRightFrame;
4798} 4800}
4799 4801
4800QWidget *CalendarView::leftFrame() 4802QWidget *CalendarView::leftFrame()
4801{ 4803{
4802 return ( QWidget *)mLeftFrame; 4804 return ( QWidget *)mLeftFrame;
4803} 4805}
4804 4806
4805DateNavigator *CalendarView::dateNavigator() 4807DateNavigator *CalendarView::dateNavigator()
4806{ 4808{
4807 return mNavigator; 4809 return mNavigator;
4808} 4810}
4809 4811
4810KDateNavigator* CalendarView::dateNavigatorWidget() 4812KDateNavigator* CalendarView::dateNavigatorWidget()
4811{ 4813{
4812 return mDateNavigator->navigatorView(); 4814 return mDateNavigator->navigatorView();
4813} 4815}
4814void CalendarView::toggleDateNavigatorWidget() 4816void CalendarView::toggleDateNavigatorWidget()
4815{ 4817{
4816 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 4818 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
4817 4819
4818 if (!KOPrefs::instance()->mShowDateNavigator ) 4820 if (!KOPrefs::instance()->mShowDateNavigator )
4819 mDateNavigator->hide(); 4821 mDateNavigator->hide();
4820 else 4822 else
4821 mDateNavigator->show(); 4823 mDateNavigator->show();
4822} 4824}
4823void CalendarView::addView(KOrg::BaseView *view) 4825void CalendarView::addView(KOrg::BaseView *view)
4824{ 4826{
4825 mViewManager->addView(view); 4827 mViewManager->addView(view);
4826} 4828}
4827 4829
4828void CalendarView::showView(KOrg::BaseView *view) 4830void CalendarView::showView(KOrg::BaseView *view)
4829{ 4831{
4830 mViewManager->showView(view, mLeftFrame->isVisible()); 4832 mViewManager->showView(view, mLeftFrame->isVisible());
4831} 4833}
4832 4834
4833Incidence *CalendarView::currentSelection() 4835Incidence *CalendarView::currentSelection()
4834{ 4836{
4835 return mViewManager->currentSelection(); 4837 return mViewManager->currentSelection();
4836} 4838}
4837void CalendarView::toggleAllDaySize() 4839void CalendarView::toggleAllDaySize()
4838{ 4840{
4839 /* 4841 /*
4840 if ( KOPrefs::instance()->mAllDaySize > 47 ) 4842 if ( KOPrefs::instance()->mAllDaySize > 47 )
4841 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
4842 else 4844 else
4843 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 4845 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
4844 */ 4846 */
4845 viewManager()->agendaView()->toggleAllDay(); 4847 viewManager()->agendaView()->toggleAllDay();
4846} 4848}
4847void CalendarView::toggleExpand() 4849void CalendarView::toggleExpand()
4848{ 4850{
4849 // if ( mLeftFrame->isHidden() ) { 4851 // if ( mLeftFrame->isHidden() ) {
4850 // mLeftFrame->show(); 4852 // mLeftFrame->show();
4851 // emit calendarViewExpanded( false ); 4853 // emit calendarViewExpanded( false );
4852 // } else { 4854 // } else {
4853 // mLeftFrame->hide(); 4855 // mLeftFrame->hide();
4854 // emit calendarViewExpanded( true ); 4856 // emit calendarViewExpanded( true );
4855 // } 4857 // }
4856 //qDebug(" CalendarView::toggleExpand()"); 4858 //qDebug(" CalendarView::toggleExpand()");
4857 globalFlagBlockAgenda = 1; 4859 globalFlagBlockAgenda = 1;
4858 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 4860 emit calendarViewExpanded( !mLeftFrame->isHidden() );
4859 globalFlagBlockAgenda = 5; 4861 globalFlagBlockAgenda = 5;
4860 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 4862 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
4861 //mViewManager->showView( 0, true ); 4863 //mViewManager->showView( 0, true );
4862} 4864}
4863 4865
4864void CalendarView::calendarModified( bool modified, Calendar * ) 4866void CalendarView::calendarModified( bool modified, Calendar * )
4865{ 4867{
4866 setModified( modified ); 4868 setModified( modified );
4867} 4869}
4868 4870
4869Todo *CalendarView::selectedTodo() 4871Todo *CalendarView::selectedTodo()
4870{ 4872{
4871 Incidence *incidence = currentSelection(); 4873 Incidence *incidence = currentSelection();
4872 if ( incidence && incidence->typeID() == todoID ) { 4874 if ( incidence && incidence->typeID() == todoID ) {
4873 return static_cast<Todo *>( incidence ); 4875 return static_cast<Todo *>( incidence );
4874 } 4876 }
4875 4877
4876 incidence = mTodoList->selectedIncidences().first(); 4878 incidence = mTodoList->selectedIncidences().first();
4877 if ( incidence && incidence->typeID() == todoID ) { 4879 if ( incidence && incidence->typeID() == todoID ) {
4878 return static_cast<Todo *>( incidence ); 4880 return static_cast<Todo *>( incidence );
4879 } 4881 }
4880 4882
4881 return 0; 4883 return 0;
4882} 4884}
4883 4885
4884void CalendarView::showIncidence() 4886void CalendarView::showIncidence()
4885{ 4887{
4886 mViewerCallerIsSearchDialog = false; 4888 mViewerCallerIsSearchDialog = false;
4887 Incidence *incidence = currentSelection(); 4889 Incidence *incidence = currentSelection();
4888 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4890 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4889 if ( incidence ) { 4891 if ( incidence ) {
4890 ShowIncidenceVisitor v; 4892 ShowIncidenceVisitor v;
4891 v.act( incidence, this ); 4893 v.act( incidence, this );
4892 } 4894 }
4893} 4895}
4894void CalendarView::editIncidenceDescription() 4896void CalendarView::editIncidenceDescription()
4895{ 4897{
4896 mFlagEditDescription = true; 4898 mFlagEditDescription = true;
4897 editIncidence(); 4899 editIncidence();
4898 mFlagEditDescription = false; 4900 mFlagEditDescription = false;
4899} 4901}
4900void CalendarView::editIncidence() 4902void CalendarView::editIncidence()
4901{ 4903{
4902 // qDebug("editIncidence() "); 4904 // qDebug("editIncidence() ");
4903 Incidence *incidence = currentSelection(); 4905 Incidence *incidence = currentSelection();
4904 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4906 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4905 if ( incidence ) { 4907 if ( incidence ) {
4906 EditIncidenceVisitor v; 4908 EditIncidenceVisitor v;
4907 v.act( incidence, this ); 4909 v.act( incidence, this );
4908 } 4910 }
4909} 4911}
4910 4912
4911void CalendarView::deleteIncidence() 4913void CalendarView::deleteIncidence()
4912{ 4914{
4913 Incidence *incidence = currentSelection(); 4915 Incidence *incidence = currentSelection();
4914 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4916 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
4915 if ( incidence ) { 4917 if ( incidence ) {
4916 deleteIncidence(incidence); 4918 deleteIncidence(incidence);
4917 } 4919 }
4918} 4920}
4919void CalendarView::showIncidence(QString uid) 4921void CalendarView::showIncidence(QString uid)
4920{ 4922{
4921 Incidence *inc = mCalendar->incidence( uid ); 4923 Incidence *inc = mCalendar->incidence( uid );
4922 if ( inc ) 4924 if ( inc )
4923 showIncidence( inc ); 4925 showIncidence( inc );
4924} 4926}
4925void CalendarView::showIncidence(Incidence *incidence) 4927void CalendarView::showIncidence(Incidence *incidence)
4926{ 4928{
4927 mViewerCallerIsSearchDialog = false; 4929 mViewerCallerIsSearchDialog = false;
4928 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4930 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
4929 if ( sender() && mDialogManager->getSearchDialog() ) { 4931 if ( sender() && mDialogManager->getSearchDialog() ) {
4930 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4932 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
4931 mViewerCallerIsSearchDialog = true; 4933 mViewerCallerIsSearchDialog = true;
4932 } 4934 }
4933 } 4935 }
4934 if ( incidence ) { 4936 if ( incidence ) {
4935 ShowIncidenceVisitor v; 4937 ShowIncidenceVisitor v;
4936 v.act( incidence, this ); 4938 v.act( incidence, this );
4937 } 4939 }
4938} 4940}
4939 4941
4940void CalendarView::editIncidence(Incidence *incidence) 4942void CalendarView::editIncidence(Incidence *incidence)
4941{ 4943{
4942 if ( incidence ) { 4944 if ( incidence ) {
4943 4945
4944 EditIncidenceVisitor v; 4946 EditIncidenceVisitor v;
4945 v.act( incidence, this ); 4947 v.act( incidence, this );
4946 4948
4947 } 4949 }
4948} 4950}
4949 4951
4950void CalendarView::deleteIncidence(Incidence *incidence) 4952void CalendarView::deleteIncidence(Incidence *incidence)
4951{ 4953{
4952 //qDebug(" CalendarView::deleteIncidence "); 4954 //qDebug(" CalendarView::deleteIncidence ");
4953 if ( incidence == 0 ) { 4955 if ( incidence == 0 ) {
4954 updateView(); 4956 updateView();
4955 emit updateSearchDialog(); 4957 emit updateSearchDialog();
4956 return; 4958 return;
4957 } 4959 }
4958 if ( incidence ) { 4960 if ( incidence ) {
4959 DeleteIncidenceVisitor v; 4961 DeleteIncidenceVisitor v;
4960 v.act( incidence, this ); 4962 v.act( incidence, this );
4961 } 4963 }
4962} 4964}
4963 4965
4964 4966
4965void CalendarView::lookForOutgoingMessages() 4967void CalendarView::lookForOutgoingMessages()
4966{ 4968{
4967 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 4969 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4968 ogd->loadMessages(); 4970 ogd->loadMessages();
4969} 4971}
4970 4972
4971void CalendarView::lookForIncomingMessages() 4973void CalendarView::lookForIncomingMessages()
4972{ 4974{
4973 IncomingDialog *icd = mDialogManager->incomingDialog(); 4975 IncomingDialog *icd = mDialogManager->incomingDialog();
4974 icd->retrieve(); 4976 icd->retrieve();
4975} 4977}
4976 4978
4977bool CalendarView::removeCompletedSubTodos( Todo* t ) 4979bool CalendarView::removeCompletedSubTodos( Todo* t )
4978{ 4980{
4979 bool deleteTodo = true; 4981 bool deleteTodo = true;
4980 QPtrList<Incidence> subTodos; 4982 QPtrList<Incidence> subTodos;
4981 Incidence *aTodo; 4983 Incidence *aTodo;
4982 subTodos = t->relations(); 4984 subTodos = t->relations();
4983 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 4985 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4984 if (! removeCompletedSubTodos( (Todo*) aTodo )) 4986 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4985 deleteTodo = false; 4987 deleteTodo = false;
4986 } 4988 }
4987 if ( deleteTodo ) { 4989 if ( deleteTodo ) {
4988 if ( t->isCompleted() && !t->doesRecur()) { 4990 if ( t->isCompleted() && !t->doesRecur()) {
4989 checkExternalId( t ); 4991 checkExternalId( t );
4990 mCalendar->deleteTodo( t ); 4992 mCalendar->deleteTodo( t );
4991 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 4993 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4992 } 4994 }
4993 else 4995 else
4994 deleteTodo = false; 4996 deleteTodo = false;
4995 } 4997 }
4996 return deleteTodo; 4998 return deleteTodo;
4997 4999
4998} 5000}
4999void CalendarView::purgeCompleted() 5001void CalendarView::purgeCompleted()
5000{ 5002{
5001 int result = KMessageBox::warningContinueCancel(this, 5003 int result = KMessageBox::warningContinueCancel(this,
5002 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5004 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5003 5005
5004 if (result == KMessageBox::Continue) { 5006 if (result == KMessageBox::Continue) {
5005 5007
5006 QPtrList<Todo> todoCal; 5008 QPtrList<Todo> todoCal;
5007 QPtrList<Todo> rootTodos; 5009 QPtrList<Todo> rootTodos;
5008 //QPtrList<Incidence> rel; 5010 //QPtrList<Incidence> rel;
5009 Todo *aTodo; 5011 Todo *aTodo;
5010 todoCal = calendar()->todos(); 5012 todoCal = calendar()->todos();
5011 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5013 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5012 if ( !aTodo->relatedTo() ) 5014 if ( !aTodo->relatedTo() )
5013 rootTodos.append( aTodo ); 5015 rootTodos.append( aTodo );
5014 } 5016 }
5015 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5017 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5016 removeCompletedSubTodos( aTodo ); 5018 removeCompletedSubTodos( aTodo );
5017 } 5019 }
5018 5020
5019 updateView(); 5021 updateView();
5020 } 5022 }
5021} 5023}
5022 5024
5023void CalendarView::slotCalendarChanged() 5025void CalendarView::slotCalendarChanged()
5024{ 5026{
5025 ; 5027 ;
5026} 5028}
5027 5029
5028void CalendarView::keyPressEvent ( QKeyEvent *e) 5030void CalendarView::keyPressEvent ( QKeyEvent *e)
5029{ 5031{
5030 //qDebug("CalendarView::keyPressEvent "); 5032 //qDebug("CalendarView::keyPressEvent ");
5031 e->ignore(); 5033 e->ignore();
5032} 5034}
5033 5035
5034 5036
5035bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 5037bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
5036{ 5038{
5037 5039
5038 if ( manager != mSyncManager) 5040 if ( manager != mSyncManager)
5039 qDebug("KO: Internal error-1. SyncManager mismatch "); 5041 qDebug("KO: Internal error-1. SyncManager mismatch ");
5040 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5042 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5041 qDebug("KO: SyncKDE request detected!"); 5043 qDebug("KO: SyncKDE request detected!");
5042 } 5044 }
5043 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5045 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5044 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5046 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5045 return syncCalendar( filename, mode ); 5047 return syncCalendar( filename, mode );
5046} 5048}
5047bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5049bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5048{ 5050{
5049 //mSyncManager = manager; 5051 //mSyncManager = manager;
5050 if ( manager != mSyncManager) 5052 if ( manager != mSyncManager)
5051 qDebug("KO: Internal error-2. SyncManager mismatch "); 5053 qDebug("KO: Internal error-2. SyncManager mismatch ");
5052 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5054 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5053 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5055 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5054 if ( resource == "sharp" ) 5056 if ( resource == "sharp" )
5055 syncExternal( 0 ); 5057 syncExternal( 0 );
5056 if ( resource == "phone" ) 5058 if ( resource == "phone" )
5057 syncExternal( 1 ); 5059 syncExternal( 1 );
5058 // pending setmodified 5060 // pending setmodified
5059 return true; 5061 return true;
5060} 5062}
5061void CalendarView::setSyncManager(KSyncManager* manager) 5063void CalendarView::setSyncManager(KSyncManager* manager)
5062{ 5064{
5063 mSyncManager = manager; 5065 mSyncManager = manager;
5064} 5066}
5065 5067
5066void CalendarView::removeSyncInfo( QString syncProfile) 5068void CalendarView::removeSyncInfo( QString syncProfile)
5067{ 5069{
5068 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5070 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5069 mCalendar->removeSyncInfo( syncProfile ); 5071 mCalendar->removeSyncInfo( syncProfile );
5070 5072
5071} 5073}
5072 5074
5073void CalendarView::undo_delete() 5075void CalendarView::undo_delete()
5074{ 5076{
5075 //qDebug("undo_delete() "); 5077 //qDebug("undo_delete() ");
5076 Incidence* undo = mCalendar->undoIncidence(); 5078 Incidence* undo = mCalendar->undoIncidence();
5077 if ( !undo ) { 5079 if ( !undo ) {
5078 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5080 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5079 i18n("KO/Pi")); 5081 i18n("KO/Pi"));
5080 return; 5082 return;
5081 } 5083 }
5082 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5084 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5083 i18n("\nAre you sure you want\nto restore this?"), 5085 i18n("\nAre you sure you want\nto restore this?"),
5084 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5086 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5085 mCalendar->undoDeleteIncidence(); 5087 mCalendar->undoDeleteIncidence();
5086 updateView(); 5088 updateView();
5087 } 5089 }
5088} 5090}
5089 5091
5090void CalendarView::slotViewerClosed() 5092void CalendarView::slotViewerClosed()
5091{ 5093{
5092 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5094 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5093} 5095}
5094 5096
5095void CalendarView::resetFocus() 5097void CalendarView::resetFocus()
5096{ 5098{
5097 if ( mViewerCallerIsSearchDialog ) { 5099 if ( mViewerCallerIsSearchDialog ) {
5098 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5100 if ( mDialogManager->getSearchDialog()->isVisible() ){
5099 mDialogManager->getSearchDialog()->raise(); 5101 mDialogManager->getSearchDialog()->raise();
5100 mDialogManager->getSearchDialog()->setActiveWindow(); 5102 mDialogManager->getSearchDialog()->setActiveWindow();
5101 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5103 mDialogManager->getSearchDialog()->listview()->resetFocus();
5102 } else 5104 } else
5103 mViewerCallerIsSearchDialog = false; 5105 mViewerCallerIsSearchDialog = false;
5104 } 5106 }
5105 if ( !mViewerCallerIsSearchDialog ) { 5107 if ( !mViewerCallerIsSearchDialog ) {
5106 //mViewManager->currentView()->setFocus(); 5108 //mViewManager->currentView()->setFocus();
5107 //qDebug("sssssssssssssssset focus "); 5109 //qDebug("sssssssssssssssset focus ");
5108 topLevelWidget()->raise(); 5110 topLevelWidget()->raise();
5109 setActiveWindow(); 5111 setActiveWindow();
5110 //setFocus(); 5112 //setFocus();
5111 } 5113 }
5112 mViewerCallerIsSearchDialog = false; 5114 mViewerCallerIsSearchDialog = false;
5113} 5115}
5114 5116
5115void CalendarView::showNextAlarms() 5117void CalendarView::showNextAlarms()
5116{ 5118{
5117 QString message; 5119 QString message;
5118 QDateTime nextAl = mCalendar->nextAlarmEventDateTime(); 5120 QDateTime nextAl = mCalendar->nextAlarmEventDateTime();
5119 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) { 5121 if ( nextAl.isValid() && mNextAlarmDateTime > QDateTime::currentDateTime() ) {
5120 QString sum = mCalendar->nextSummary(); 5122 QString sum = mCalendar->nextSummary();
5121 QDateTime nextA = mNextAlarmDateTime; 5123 QDateTime nextA = mNextAlarmDateTime;
5122 QDateTime cur = QDateTime::currentDateTime(); 5124 QDateTime cur = QDateTime::currentDateTime();
5123 int secs = cur.secsTo( nextA ); 5125 int secs = cur.secsTo( nextA );
5124 int min = secs /60; 5126 int min = secs /60;
5125 int hours = min /60; 5127 int hours = min /60;
5126 min = min % 60; 5128 min = min % 60;
5127 int days = hours /24; 5129 int days = hours /24;
5128 hours = hours % 24; 5130 hours = hours % 24;
5129 5131
5130 //message = i18n("The next alarm is in:\n"); 5132 //message = i18n("The next alarm is in:\n");
5131 if ( days > 1 ) 5133 if ( days > 1 )
5132 message += i18n("%1 days\n").arg( days ); 5134 message += i18n("%1 days\n").arg( days );
5133 else if ( days == 1 ) 5135 else if ( days == 1 )
5134 message += i18n("1 day\n"); 5136 message += i18n("1 day\n");
5135 if ( hours > 1 ) 5137 if ( hours > 1 )
5136 message += i18n("%1 hours\n").arg( hours ); 5138 message += i18n("%1 hours\n").arg( hours );
5137 else if ( hours == 1 ) 5139 else if ( hours == 1 )
5138 message += i18n("1 hour\n"); 5140 message += i18n("1 hour\n");
5139 if ( min > 1 ) 5141 if ( min > 1 )
5140 message += i18n("%1 minutes\n").arg( min ); 5142 message += i18n("%1 minutes\n").arg( min );
5141 else if ( min == 1 ) 5143 else if ( min == 1 )
5142 message += i18n("1 minute\n"); 5144 message += i18n("1 minute\n");
5143 if ( message.isEmpty() ) 5145 if ( message.isEmpty() )
5144 message = i18n("The next alarm is in\nless than one minute!"); 5146 message = i18n("The next alarm is in\nless than one minute!");
5145 else 5147 else
5146 message = i18n("The next alarm is in:\n") + message; 5148 message = i18n("The next alarm is in:\n") + message;
5147 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; 5149 message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ;
5148 } else { 5150 } else {
5149 message = i18n("There is no next alarm."); 5151 message = i18n("There is no next alarm.");
5150 5152
5151 } 5153 }
5152#ifdef DESKTOP_VERSION 5154#ifdef DESKTOP_VERSION
5153 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 5155 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
5154 message += i18n("\nThe internal alarm notification is disabled!\n"); 5156 message += i18n("\nThe internal alarm notification is disabled!\n");
5155 message += i18n("Enable it in the settings menu, TAB alarm."); 5157 message += i18n("Enable it in the settings menu, TAB alarm.");
5156 } 5158 }
5157 5159
5158#endif 5160#endif
5159 KMessageBox::information( this, message); 5161 KMessageBox::information( this, message);
5160} 5162}
5163
5164void CalendarView::displayCalendarInfo( int id )
5165{
5166 int e, t,j;
5167 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
5168 QString name = kkf->mName;
5169 mCalendar->getIncidenceCount( id, e, t, j );
5170 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
5171 QString mess = i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file);
5172 mess += i18n("<br>The calendar contains<br><b>%1 events<br>%2 todos<br>%3 journals</b>").arg( e ).arg( t ).arg( j );
5173 KMessageBox::information( this, mess );
5174
5175
5176}
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 8670832..0924f07 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,669 +1,670 @@
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#include <qscrollbar.h> 33#include <qscrollbar.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qtopia/ir.h> 35#include <qtopia/ir.h>
36#else 36#else
37#define Ir char 37#define Ir char
38#endif 38#endif
39#include <libkcal/calendar.h> 39#include <libkcal/calendar.h>
40#include <libkcal/scheduler.h> 40#include <libkcal/scheduler.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <KDGanttMinimizeSplitter.h> 43#include <KDGanttMinimizeSplitter.h>
44 44
45#include <korganizer/calendarviewbase.h> 45#include <korganizer/calendarviewbase.h>
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn ); 141 void mergeFile( QString fn );
142 142
143 signals: 143 signals:
144 void save (); 144 void save ();
145 void saveStopTimer (); 145 void saveStopTimer ();
146 void tempDisableBR(bool); 146 void tempDisableBR(bool);
147 /** This todo has been modified */ 147 /** This todo has been modified */
148 void todoModified(Todo *, int); 148 void todoModified(Todo *, int);
149 149
150 /** when change is made to options dialog, the topwidget will catch this 150 /** when change is made to options dialog, the topwidget will catch this
151 * and emit this signal which notifies all widgets which have registered 151 * and emit this signal which notifies all widgets which have registered
152 * for notification to update their settings. */ 152 * for notification to update their settings. */
153 void configChanged(); 153 void configChanged();
154 /** emitted when the topwidget is closing down, so that any attached 154 /** emitted when the topwidget is closing down, so that any attached
155 child windows can also close. */ 155 child windows can also close. */
156 void closingDown(); 156 void closingDown();
157 /** emitted right before we die */ 157 /** emitted right before we die */
158 void closed(QWidget *); 158 void closed(QWidget *);
159 159
160 /** Emitted when state of modified flag changes */ 160 /** Emitted when state of modified flag changes */
161 void modifiedChanged(bool); 161 void modifiedChanged(bool);
162 void signalmodified(); 162 void signalmodified();
163 163
164 /** Emitted when state of read-only flag changes */ 164 /** Emitted when state of read-only flag changes */
165 void readOnlyChanged(bool); 165 void readOnlyChanged(bool);
166 166
167 /** Emitted when the unit of navigation changes */ 167 /** Emitted when the unit of navigation changes */
168 void changeNavStringPrev(const QString &); 168 void changeNavStringPrev(const QString &);
169 void changeNavStringNext(const QString &); 169 void changeNavStringNext(const QString &);
170 170
171 /** Emitted when state of events selection has changed and user is organizer*/ 171 /** Emitted when state of events selection has changed and user is organizer*/
172 void organizerEventsSelected(bool); 172 void organizerEventsSelected(bool);
173 /** Emitted when state of events selection has changed and user is attendee*/ 173 /** Emitted when state of events selection has changed and user is attendee*/
174 void groupEventsSelected(bool); 174 void groupEventsSelected(bool);
175 /** 175 /**
176 Emitted when an incidence gets selected. If the selection is cleared the 176 Emitted when an incidence gets selected. If the selection is cleared the
177 signal is emitted with 0 as argument. 177 signal is emitted with 0 as argument.
178 */ 178 */
179 void incidenceSelected( Incidence * ); 179 void incidenceSelected( Incidence * );
180 /** Emitted, when a todoitem is selected or deselected. */ 180 /** Emitted, when a todoitem is selected or deselected. */
181 void todoSelected( bool ); 181 void todoSelected( bool );
182 182
183 /** 183 /**
184 Emitted, when clipboard content changes. Parameter indicates if paste 184 Emitted, when clipboard content changes. Parameter indicates if paste
185 is possible or not. 185 is possible or not.
186 */ 186 */
187 void pasteEnabled(bool); 187 void pasteEnabled(bool);
188 188
189 /** Emitted, when the number of incoming messages has changed. */ 189 /** Emitted, when the number of incoming messages has changed. */
190 void numIncomingChanged(int); 190 void numIncomingChanged(int);
191 191
192 /** Emitted, when the number of outgoing messages has changed. */ 192 /** Emitted, when the number of outgoing messages has changed. */
193 void numOutgoingChanged(int); 193 void numOutgoingChanged(int);
194 194
195 /** Send status message, which can e.g. be displayed in the status bar. */ 195 /** Send status message, which can e.g. be displayed in the status bar. */
196 void statusMessage(const QString &); 196 void statusMessage(const QString &);
197 197
198 void calendarViewExpanded( bool ); 198 void calendarViewExpanded( bool );
199 void updateSearchDialog(); 199 void updateSearchDialog();
200 void filtersUpdated(); 200 void filtersUpdated();
201 201
202 202
203 public slots: 203 public slots:
204 void displayCalendarInfo( int id );
204 void nextConflict( bool all, bool allday ); 205 void nextConflict( bool all, bool allday );
205 void conflictAll(); 206 void conflictAll();
206 void conflictAllday(); 207 void conflictAllday();
207 void conflictNotAll(); 208 void conflictNotAll();
208 void setCalReadOnly( int id, bool readO ); 209 void setCalReadOnly( int id, bool readO );
209 void checkAlarms(); 210 void checkAlarms();
210 void checkFiles(); 211 void checkFiles();
211 void slotprintSelInc(); 212 void slotprintSelInc();
212 void showNextAlarms(); 213 void showNextAlarms();
213 void showOpenError(); 214 void showOpenError();
214 void watchSavedFile(); 215 void watchSavedFile();
215 void recheckTimerAlarm(); 216 void recheckTimerAlarm();
216 void checkNextTimerAlarm(); 217 void checkNextTimerAlarm();
217 void addAlarm(const QDateTime &qdt, const QString &noti ); 218 void addAlarm(const QDateTime &qdt, const QString &noti );
218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 219 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
219 void removeAlarm(const QDateTime &qdt, const QString &noti ); 220 void removeAlarm(const QDateTime &qdt, const QString &noti );
220 221
221 /** options dialog made a changed to the configuration. we catch this 222 /** options dialog made a changed to the configuration. we catch this
222 * and notify all widgets which need to update their configuration. */ 223 * and notify all widgets which need to update their configuration. */
223 void updateConfig(); 224 void updateConfig();
224 225
225 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 226 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
226 const QStringList& anniversaryList, const QStringList& realNameList, 227 const QStringList& anniversaryList, const QStringList& realNameList,
227 const QStringList& emailList, const QStringList& assembledNameList, 228 const QStringList& emailList, const QStringList& assembledNameList,
228 const QStringList& uidList); 229 const QStringList& uidList);
229 230
230 /** 231 /**
231 Load calendar from file \a filename. If \a merge is true, load 232 Load calendar from file \a filename. If \a merge is true, load
232 calendar into existing one, if it is false, clear calendar, before 233 calendar into existing one, if it is false, clear calendar, before
233 loading. Return true, if calendar could be successfully loaded. 234 loading. Return true, if calendar could be successfully loaded.
234 */ 235 */
235 bool openCalendar(QString filename, bool merge=false); 236 bool openCalendar(QString filename, bool merge=false);
236 bool loadCalendars(); 237 bool loadCalendars();
237 bool saveCalendars(); 238 bool saveCalendars();
238 bool restoreCalendarSettings(); 239 bool restoreCalendarSettings();
239 bool addCalendar( KopiCalendarFile * ); 240 bool addCalendar( KopiCalendarFile * );
240 void addCalendarId( int id ); 241 void addCalendarId( int id );
241 bool syncCalendar(QString filename,int mode = 0 ); 242 bool syncCalendar(QString filename,int mode = 0 );
242 243
243 /** 244 /**
244 Save calendar data to file. Return true if calendar could be 245 Save calendar data to file. Return true if calendar could be
245 successfully saved. 246 successfully saved.
246 */ 247 */
247 bool saveCalendar(QString filename); 248 bool saveCalendar(QString filename);
248 249
249 /** 250 /**
250 Close calendar. Clear calendar data and reset views to display an empty 251 Close calendar. Clear calendar data and reset views to display an empty
251 calendar. 252 calendar.
252 */ 253 */
253 void closeCalendar(); 254 void closeCalendar();
254 255
255 /** Archive old events of calendar */ 256 /** Archive old events of calendar */
256 void archiveCalendar(); 257 void archiveCalendar();
257 258
258 void showIncidence(); 259 void showIncidence();
259 void editIncidence(); 260 void editIncidence();
260 void editIncidenceDescription(); 261 void editIncidenceDescription();
261 void deleteIncidence(); 262 void deleteIncidence();
262 void cloneIncidence(); 263 void cloneIncidence();
263 void moveIncidence(); 264 void moveIncidence();
264 void beamIncidence(); 265 void beamIncidence();
265 void toggleCancelIncidence(); 266 void toggleCancelIncidence();
266 267
267 /** create an editeventwin with supplied date/time, and if bool is true, 268 /** create an editeventwin with supplied date/time, and if bool is true,
268 * make the event take all day. */ 269 * make the event take all day. */
269 void newEvent(QDateTime, QDateTime, bool allDay ); 270 void newEvent(QDateTime, QDateTime, bool allDay );
270 void newEvent(QDateTime, QDateTime); 271 void newEvent(QDateTime, QDateTime);
271 void newEvent(QDateTime fh); 272 void newEvent(QDateTime fh);
272 void newEvent(QDate dt); 273 void newEvent(QDate dt);
273 /** create new event without having a date hint. Takes current date as 274 /** create new event without having a date hint. Takes current date as
274 default hint. */ 275 default hint. */
275 void newEvent(); 276 void newEvent();
276 void newFloatingEvent(); 277 void newFloatingEvent();
277 278
278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 279 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
279 void showIncidence(Incidence *); 280 void showIncidence(Incidence *);
280 void showIncidence(QString uid); 281 void showIncidence(QString uid);
281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 282 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
282 void editIncidence(Incidence *); 283 void editIncidence(Incidence *);
283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 284 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
284 void deleteIncidence(Incidence *); 285 void deleteIncidence(Incidence *);
285 void cloneIncidence(Incidence *); 286 void cloneIncidence(Incidence *);
286 void cancelIncidence(Incidence *); 287 void cancelIncidence(Incidence *);
287 /** Create an editor for the supplied event. */ 288 /** Create an editor for the supplied event. */
288 void editEvent(Event *); 289 void editEvent(Event *);
289 /** Delete the supplied event. */ 290 /** Delete the supplied event. */
290 void deleteEvent(Event *); 291 void deleteEvent(Event *);
291 /** Delete the event with the given unique ID. Returns false, if event wasn't 292 /** Delete the event with the given unique ID. Returns false, if event wasn't
292 found. */ 293 found. */
293 bool deleteEvent(const QString &uid); 294 bool deleteEvent(const QString &uid);
294 /** Create a read-only viewer dialog for the supplied event. */ 295 /** Create a read-only viewer dialog for the supplied event. */
295 void showEvent(Event *); 296 void showEvent(Event *);
296 297
297 void editJournal(Journal *); 298 void editJournal(Journal *);
298 void showJournal(Journal *); 299 void showJournal(Journal *);
299 void deleteJournal(Journal *); 300 void deleteJournal(Journal *);
300 /** Create an editor dialog for a todo */ 301 /** Create an editor dialog for a todo */
301 void editTodo(Todo *); 302 void editTodo(Todo *);
302 /** Create a read-only viewer dialog for the supplied todo */ 303 /** Create a read-only viewer dialog for the supplied todo */
303 void showTodo(Todo *); 304 void showTodo(Todo *);
304 /** create new todo */ 305 /** create new todo */
305 void newTodo(); 306 void newTodo();
306 void newTodoDateTime(QDateTime, bool allday); 307 void newTodoDateTime(QDateTime, bool allday);
307 /** create new todo with a parent todo */ 308 /** create new todo with a parent todo */
308 void newSubTodo(); 309 void newSubTodo();
309 /** create new todo with a parent todo */ 310 /** create new todo with a parent todo */
310 void newSubTodo(Todo *); 311 void newSubTodo(Todo *);
311 /** Delete todo */ 312 /** Delete todo */
312 void deleteTodo(Todo *); 313 void deleteTodo(Todo *);
313 314
314 315
315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 316 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
316 * emitted as result. */ 317 * emitted as result. */
317 void checkClipboard(); 318 void checkClipboard();
318 319
319 /** using the KConfig associated with the kapp variable, read in the 320 /** using the KConfig associated with the kapp variable, read in the
320 * settings from the config file. 321 * settings from the config file.
321 */ 322 */
322 void readSettings(); 323 void readSettings();
323 324
324 /** write current state to config file. */ 325 /** write current state to config file. */
325 void writeSettings(); 326 void writeSettings();
326 327
327 /** read settings for calendar filters */ 328 /** read settings for calendar filters */
328 void readFilterSettings(KConfig *config); 329 void readFilterSettings(KConfig *config);
329 330
330 /** write settings for calendar filters */ 331 /** write settings for calendar filters */
331 void writeFilterSettings(KConfig *config); 332 void writeFilterSettings(KConfig *config);
332 333
333 /** passes on the message that an event has changed to the currently 334 /** passes on the message that an event has changed to the currently
334 * activated view so that it can make appropriate display changes. */ 335 * activated view so that it can make appropriate display changes. */
335 void changeEventDisplay(Event *, int); 336 void changeEventDisplay(Event *, int);
336 void changeIncidenceDisplay(Incidence *, int); 337 void changeIncidenceDisplay(Incidence *, int);
337 void changeTodoDisplay(Todo *, int); 338 void changeTodoDisplay(Todo *, int);
338 339
339 void eventAdded(Event *); 340 void eventAdded(Event *);
340 void eventChanged(Event *); 341 void eventChanged(Event *);
341 void eventToBeDeleted(Event *); 342 void eventToBeDeleted(Event *);
342 void eventDeleted(); 343 void eventDeleted();
343 344
344 void todoAdded(Todo *); 345 void todoAdded(Todo *);
345 void todoChanged(Todo *); 346 void todoChanged(Todo *);
346 void todoToBeDeleted(Todo *); 347 void todoToBeDeleted(Todo *);
347 void todoDeleted(); 348 void todoDeleted();
348 349
349 void updateView(const QDate &start, const QDate &end); 350 void updateView(const QDate &start, const QDate &end);
350 void updateView(); 351 void updateView();
351 void clearAllViews(); 352 void clearAllViews();
352 353
353 /** Full update of visible todo views */ 354 /** Full update of visible todo views */
354 void updateTodoViews(); 355 void updateTodoViews();
355 356
356 void updateUnmanagedViews(); 357 void updateUnmanagedViews();
357 358
358 /** cut the current appointment to the clipboard */ 359 /** cut the current appointment to the clipboard */
359 void edit_cut(); 360 void edit_cut();
360 361
361 /** copy the current appointment(s) to the clipboard */ 362 /** copy the current appointment(s) to the clipboard */
362 void edit_copy(); 363 void edit_copy();
363 364
364 /** paste the current vobject(s) in the clipboard buffer into calendar */ 365 /** paste the current vobject(s) in the clipboard buffer into calendar */
365 void edit_paste(); 366 void edit_paste();
366 367
367 /** edit viewing and configuration options. */ 368 /** edit viewing and configuration options. */
368 void edit_options(); 369 void edit_options();
369 void edit_global_options(); 370 void edit_global_options();
370 /** 371 /**
371 Functions for printing, previewing a print, and setting up printing 372 Functions for printing, previewing a print, and setting up printing
372 parameters. 373 parameters.
373 */ 374 */
374 void print(); 375 void print();
375 void printSetup(); 376 void printSetup();
376 void printPreview(); 377 void printPreview();
377 378
378 /** Export as iCalendar file */ 379 /** Export as iCalendar file */
379 bool exportICalendar(); 380 bool exportICalendar();
380 bool exportICalendar( QString fn ); 381 bool exportICalendar( QString fn );
381 382
382 /** Export as vCalendar file */ 383 /** Export as vCalendar file */
383 bool exportVCalendar( QString fn); 384 bool exportVCalendar( QString fn);
384 385
385 /** pop up a dialog to show an existing appointment. */ 386 /** pop up a dialog to show an existing appointment. */
386 void appointment_show(); 387 void appointment_show();
387 /** 388 /**
388 * pop up an Appointment Dialog to edit an existing appointment.Get 389 * pop up an Appointment Dialog to edit an existing appointment.Get
389 * information on the appointment from the list of unique IDs that is 390 * information on the appointment from the list of unique IDs that is
390 * currently in the View, called currIds. 391 * currently in the View, called currIds.
391 */ 392 */
392 void appointment_edit(); 393 void appointment_edit();
393 /** 394 /**
394 * pop up dialog confirming deletion of currently selected event in the 395 * pop up dialog confirming deletion of currently selected event in the
395 * View. 396 * View.
396 */ 397 */
397 void appointment_delete(); 398 void appointment_delete();
398 399
399 /** mails the currently selected event to a particular user as a vCalendar 400 /** mails the currently selected event to a particular user as a vCalendar
400 attachment. */ 401 attachment. */
401 void action_mail(); 402 void action_mail();
402 403
403 /* frees a subtodo from it's relation */ 404 /* frees a subtodo from it's relation */
404 void todo_unsub( Todo * ); 405 void todo_unsub( Todo * );
405 void todo_resub( Todo * parent, Todo * sub ); 406 void todo_resub( Todo * parent, Todo * sub );
406 407
407 /** Take ownership of selected event. */ 408 /** Take ownership of selected event. */
408 void takeOverEvent(); 409 void takeOverEvent();
409 410
410 /** Take ownership of all events in calendar. */ 411 /** Take ownership of all events in calendar. */
411 void takeOverCalendar(); 412 void takeOverCalendar();
412 413
413 /** query whether or not the calendar is "dirty". */ 414 /** query whether or not the calendar is "dirty". */
414 bool isModified(); 415 bool isModified();
415 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 416 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
416 void setModified(bool modified=true); 417 void setModified(bool modified=true);
417 418
418 /** query if the calendar is read-only. */ 419 /** query if the calendar is read-only. */
419 bool isReadOnly(); 420 bool isReadOnly();
420 /** set state of calendar to read-only */ 421 /** set state of calendar to read-only */
421 void setReadOnly(bool readOnly=true); 422 void setReadOnly(bool readOnly=true);
422 423
423 void eventUpdated(Incidence *); 424 void eventUpdated(Incidence *);
424 425
425 /* iTIP scheduling actions */ 426 /* iTIP scheduling actions */
426 void schedule_publish(Incidence *incidence = 0); 427 void schedule_publish(Incidence *incidence = 0);
427 void schedule_request(Incidence *incidence = 0); 428 void schedule_request(Incidence *incidence = 0);
428 void schedule_refresh(Incidence *incidence = 0); 429 void schedule_refresh(Incidence *incidence = 0);
429 void schedule_cancel(Incidence *incidence = 0); 430 void schedule_cancel(Incidence *incidence = 0);
430 void schedule_add(Incidence *incidence = 0); 431 void schedule_add(Incidence *incidence = 0);
431 void schedule_reply(Incidence *incidence = 0); 432 void schedule_reply(Incidence *incidence = 0);
432 void schedule_counter(Incidence *incidence = 0); 433 void schedule_counter(Incidence *incidence = 0);
433 void schedule_declinecounter(Incidence *incidence = 0); 434 void schedule_declinecounter(Incidence *incidence = 0);
434 void schedule_publish_freebusy(int daysToPublish = 30); 435 void schedule_publish_freebusy(int daysToPublish = 30);
435 436
436 void openAddressbook(); 437 void openAddressbook();
437 438
438 void editFilters(); 439 void editFilters();
439 void toggleFilerEnabled(); 440 void toggleFilerEnabled();
440 QPtrList<CalFilter> filters(); 441 QPtrList<CalFilter> filters();
441 void toggleFilter(); 442 void toggleFilter();
442 void showFilter(bool visible); 443 void showFilter(bool visible);
443 void updateFilter(); 444 void updateFilter();
444 void filterEdited(); 445 void filterEdited();
445 void selectFilter( int ); 446 void selectFilter( int );
446 KOFilterView *filterView(); 447 KOFilterView *filterView();
447 448
448 void showIntro(); 449 void showIntro();
449 450
450 /** Move the curdatepient view date to today */ 451 /** Move the curdatepient view date to today */
451 void goToday(); 452 void goToday();
452 453
453 /** Move to the next date(s) in the current view */ 454 /** Move to the next date(s) in the current view */
454 void goNext(); 455 void goNext();
455 456
456 /** Move to the previous date(s) in the current view */ 457 /** Move to the previous date(s) in the current view */
457 void goPrevious(); 458 void goPrevious();
458 /** Move to the next date(s) in the current view */ 459 /** Move to the next date(s) in the current view */
459 void goNextMonth(); 460 void goNextMonth();
460 461
461 /** Move to the previous date(s) in the current view */ 462 /** Move to the previous date(s) in the current view */
462 void goPreviousMonth(); 463 void goPreviousMonth();
463 464
464 void toggleExpand(); 465 void toggleExpand();
465 void toggleDateNavigatorWidget(); 466 void toggleDateNavigatorWidget();
466 void toggleAllDaySize(); 467 void toggleAllDaySize();
467 468
468 /** Look for new messages in the inbox */ 469 /** Look for new messages in the inbox */
469 void lookForIncomingMessages(); 470 void lookForIncomingMessages();
470 /** Look for new messages in the outbox */ 471 /** Look for new messages in the outbox */
471 void lookForOutgoingMessages(); 472 void lookForOutgoingMessages();
472 473
473 void processMainViewSelection( Incidence * ); 474 void processMainViewSelection( Incidence * );
474 void processTodoListSelection( Incidence * ); 475 void processTodoListSelection( Incidence * );
475 476
476 void processIncidenceSelection( Incidence * ); 477 void processIncidenceSelection( Incidence * );
477 478
478 void purgeCompleted(); 479 void purgeCompleted();
479 bool removeCompletedSubTodos( Todo* ); 480 bool removeCompletedSubTodos( Todo* );
480 void slotCalendarChanged(); 481 void slotCalendarChanged();
481 bool importBday(); 482 bool importBday();
482 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 483 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
483 bool importQtopia( const QString &categoriesFile, 484 bool importQtopia( const QString &categoriesFile,
484 const QString &datebookFile, 485 const QString &datebookFile,
485 const QString &tasklistFile ); 486 const QString &tasklistFile );
486 void syncExternal( int mode ); 487 void syncExternal( int mode );
487 void slotSelectPickerDate( QDate ) ; 488 void slotSelectPickerDate( QDate ) ;
488 void showDatePicker() ; 489 void showDatePicker() ;
489 void showDatePickerPopup() ; 490 void showDatePickerPopup() ;
490 void moveIncidence(Incidence *) ; 491 void moveIncidence(Incidence *) ;
491 void beamIncidence(Incidence *) ; 492 void beamIncidence(Incidence *) ;
492 void beamCalendar() ; 493 void beamCalendar() ;
493 void beamFilteredCalendar() ; 494 void beamFilteredCalendar() ;
494 void beamIncidenceList(QPtrList<Incidence>) ; 495 void beamIncidenceList(QPtrList<Incidence>) ;
495 void manageCategories(); 496 void manageCategories();
496 void editCategories(); 497 void editCategories();
497 int addCategories(); 498 int addCategories();
498 void removeCategories(); 499 void removeCategories();
499 void setSyncDevice( QString ); 500 void setSyncDevice( QString );
500 void setSyncName( QString ); 501 void setSyncName( QString );
501 void showDay( QDate ); 502 void showDay( QDate );
502 void undo_delete(); 503 void undo_delete();
503 protected slots: 504 protected slots:
504 void resetFocus(); 505 void resetFocus();
505 void scrollBarValue(int); 506 void scrollBarValue(int);
506 void slotViewerClosed(); 507 void slotViewerClosed();
507 void timerAlarm(); 508 void timerAlarm();
508 void suspendAlarm(); 509 void suspendAlarm();
509 void beamDone( Ir *ir ); 510 void beamDone( Ir *ir );
510 /** Select a view or adapt the current view to display the specified dates. */ 511 /** Select a view or adapt the current view to display the specified dates. */
511 void showDates( const KCal::DateList & ); 512 void showDates( const KCal::DateList & );
512 void selectWeekNum ( int ); 513 void selectWeekNum ( int );
513 void checkConflictForEvent(); 514 void checkConflictForEvent();
514 515
515 public: 516 public:
516 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ); 517 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval );
517 // show a standard warning 518 // show a standard warning
518 // returns KMsgBox::yesNoCancel() 519 // returns KMsgBox::yesNoCancel()
519 int msgCalModified(); 520 int msgCalModified();
520 virtual bool sync(KSyncManager* manager, QString filename, int mode); 521 virtual bool sync(KSyncManager* manager, QString filename, int mode);
521 522
522 virtual bool syncExternal(KSyncManager* manager, QString resource); 523 virtual bool syncExternal(KSyncManager* manager, QString resource);
523 virtual void removeSyncInfo( QString syncProfile); 524 virtual void removeSyncInfo( QString syncProfile);
524 void setSyncManager(KSyncManager* manager); 525 void setSyncManager(KSyncManager* manager);
525 void setLoadedFileVersion(QDateTime); 526 void setLoadedFileVersion(QDateTime);
526 bool checkFileVersion(QString fn); 527 bool checkFileVersion(QString fn);
527 bool checkAllFileVersions(); 528 bool checkAllFileVersions();
528 bool checkFileChanged(QString fn); 529 bool checkFileChanged(QString fn);
529 Event* getLastSyncEvent(); 530 Event* getLastSyncEvent();
530 /** Adapt navigation units correpsonding to step size of navigation of the 531 /** Adapt navigation units correpsonding to step size of navigation of the
531 * current view. 532 * current view.
532 */ 533 */
533 void adaptNavigationUnits(); 534 void adaptNavigationUnits();
534 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 535 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
535 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 536 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
536 //Attendee* getYourAttendee(Event *event); 537 //Attendee* getYourAttendee(Event *event);
537 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 538 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
538 void setScrollBarStep(int val ); 539 void setScrollBarStep(int val );
539 540
540 protected: 541 protected:
541 Event *mConflictingEvent; 542 Event *mConflictingEvent;
542 void schedule(Scheduler::Method, Incidence *incidence = 0); 543 void schedule(Scheduler::Method, Incidence *incidence = 0);
543 544
544 // returns KMsgBox::OKCandel() 545 // returns KMsgBox::OKCandel()
545 int msgItemDelete(const QString name); 546 int msgItemDelete(const QString name);
546 void showEventEditor(); 547 void showEventEditor();
547 void showTodoEditor(); 548 void showTodoEditor();
548 Todo *selectedTodo(); 549 Todo *selectedTodo();
549 private: 550 private:
550#ifdef DESKTOP_VERSION 551#ifdef DESKTOP_VERSION
551 QScrollBar * mDateScrollBar; 552 QScrollBar * mDateScrollBar;
552#endif 553#endif
553 QDateTime mNextAlarmDateTime; 554 QDateTime mNextAlarmDateTime;
554 bool mViewerCallerIsSearchDialog; 555 bool mViewerCallerIsSearchDialog;
555 bool mBlockShowDates; 556 bool mBlockShowDates;
556 KSyncManager* mSyncManager; 557 KSyncManager* mSyncManager;
557 AlarmDialog * mAlarmDialog; 558 AlarmDialog * mAlarmDialog;
558 QString mAlarmNotification; 559 QString mAlarmNotification;
559 QString mSuspendAlarmNotification; 560 QString mSuspendAlarmNotification;
560 QTimer* mSuspendTimer; 561 QTimer* mSuspendTimer;
561 QTimer* mAlarmTimer; 562 QTimer* mAlarmTimer;
562 QTimer* mRecheckAlarmTimer; 563 QTimer* mRecheckAlarmTimer;
563 void computeAlarm( QString ); 564 void computeAlarm( QString );
564 void startAlarm( QString, QString ); 565 void startAlarm( QString, QString );
565 void setSyncEventsReadOnly(); 566 void setSyncEventsReadOnly();
566 567
567 QDateTime loadedFileVersion; 568 QDateTime loadedFileVersion;
568 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 569 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
569 void checkExternalId( Incidence * inc ); 570 void checkExternalId( Incidence * inc );
570 int mGlobalSyncMode; 571 int mGlobalSyncMode;
571 QString mCurrentSyncDevice; 572 QString mCurrentSyncDevice;
572 QString mCurrentSyncName; 573 QString mCurrentSyncName;
573 void init(); 574 void init();
574 int mDatePickerMode; 575 int mDatePickerMode;
575 bool mFlagEditDescription; 576 bool mFlagEditDescription;
576 QDateTime mLastCalendarSync; 577 QDateTime mLastCalendarSync;
577 void createPrinter(); 578 void createPrinter();
578 579
579 void calendarModified( bool, Calendar * ); 580 void calendarModified( bool, Calendar * );
580 581
581 CalPrinter *mCalPrinter; 582 CalPrinter *mCalPrinter;
582 583
583 QSplitter *mPanner; 584 QSplitter *mPanner;
584 QSplitter *mLeftSplitter; 585 QSplitter *mLeftSplitter;
585 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame; 586 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame;
586 QWidgetStack *mRightFrame; 587 QWidgetStack *mRightFrame;
587 588
588 KDatePicker* mDatePicker; 589 KDatePicker* mDatePicker;
589 QVBox* mDateFrame; 590 QVBox* mDateFrame;
590 591
591 DateNavigatorContainer *mDateNavigator; // widget showing small month view. 592 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
592 593
593 KOFilterView *mFilterView; 594 KOFilterView *mFilterView;
594 KOCalEditView *mCalEditView; 595 KOCalEditView *mCalEditView;
595 596
596 ResourceView *mResourceView; 597 ResourceView *mResourceView;
597 598
598 // calendar object for this viewing instance 599 // calendar object for this viewing instance
599 Calendar *mCalendar; 600 Calendar *mCalendar;
600 601
601 CalendarResourceManager *mResourceManager; 602 CalendarResourceManager *mResourceManager;
602 603
603 FileStorage *mStorage; 604 FileStorage *mStorage;
604 605
605 DateNavigator *mNavigator; 606 DateNavigator *mNavigator;
606 607
607 KOViewManager *mViewManager; 608 KOViewManager *mViewManager;
608 KODialogManager *mDialogManager; 609 KODialogManager *mDialogManager;
609 610
610 // Calendar filters 611 // Calendar filters
611 QPtrList<CalFilter> mFilters; 612 QPtrList<CalFilter> mFilters;
612 613
613 // various housekeeping variables. 614 // various housekeeping variables.
614 bool mModified; // flag indicating if calendar is modified 615 bool mModified; // flag indicating if calendar is modified
615 bool mReadOnly; // flag indicating if calendar is read-only 616 bool mReadOnly; // flag indicating if calendar is read-only
616 QDate mSaveSingleDate; 617 QDate mSaveSingleDate;
617 618
618 Incidence *mSelectedIncidence; 619 Incidence *mSelectedIncidence;
619 Incidence *mMoveIncidence; 620 Incidence *mMoveIncidence;
620 QDate mMoveIncidenceOldDate; 621 QDate mMoveIncidenceOldDate;
621 KOTodoView *mTodoList; 622 KOTodoView *mTodoList;
622 KOEventEditor * mEventEditor; 623 KOEventEditor * mEventEditor;
623 KOTodoEditor * mTodoEditor; 624 KOTodoEditor * mTodoEditor;
624 KOEventViewerDialog * mEventViewerDialog; 625 KOEventViewerDialog * mEventViewerDialog;
625 void keyPressEvent ( QKeyEvent *e) ; 626 void keyPressEvent ( QKeyEvent *e) ;
626 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 627 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
627}; 628};
628 629
629 630
630class CalendarViewVisitor : public Incidence::Visitor 631class CalendarViewVisitor : public Incidence::Visitor
631{ 632{
632 public: 633 public:
633 CalendarViewVisitor() : mView( 0 ) {} 634 CalendarViewVisitor() : mView( 0 ) {}
634 635
635 bool act( Incidence *incidence, CalendarView *view ) 636 bool act( Incidence *incidence, CalendarView *view )
636 { 637 {
637 mView = view; 638 mView = view;
638 return incidence->accept( *this ); 639 return incidence->accept( *this );
639 } 640 }
640 641
641 protected: 642 protected:
642 CalendarView *mView; 643 CalendarView *mView;
643}; 644};
644 645
645class ShowIncidenceVisitor : public CalendarViewVisitor 646class ShowIncidenceVisitor : public CalendarViewVisitor
646{ 647{
647 protected: 648 protected:
648 bool visit( Event *event ) { mView->showEvent( event ); return true; } 649 bool visit( Event *event ) { mView->showEvent( event ); return true; }
649 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 650 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
650 bool visit( Journal * j ) { mView->showJournal( j );return true; } 651 bool visit( Journal * j ) { mView->showJournal( j );return true; }
651}; 652};
652 653
653class EditIncidenceVisitor : public CalendarViewVisitor 654class EditIncidenceVisitor : public CalendarViewVisitor
654{ 655{
655 protected: 656 protected:
656 bool visit( Event *event ) { mView->editEvent( event ); return true; } 657 bool visit( Event *event ) { mView->editEvent( event ); return true; }
657 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 658 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
658 bool visit( Journal *j ) { mView->editJournal( j); return true; } 659 bool visit( Journal *j ) { mView->editJournal( j); return true; }
659}; 660};
660 661
661class DeleteIncidenceVisitor : public CalendarViewVisitor 662class DeleteIncidenceVisitor : public CalendarViewVisitor
662{ 663{
663 protected: 664 protected:
664 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 665 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
665 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 666 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
666 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 667 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
667}; 668};
668 669
669#endif 670#endif
diff --git a/korganizer/kofilterview.cpp b/korganizer/kofilterview.cpp
index ef25fd0..ee9c9f6 100644
--- a/korganizer/kofilterview.cpp
+++ b/korganizer/kofilterview.cpp
@@ -1,497 +1,499 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 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 <qcheckbox.h> 24#include <qcheckbox.h>
25#include <qcombobox.h> 25#include <qcombobox.h>
26#include <qpushbutton.h> 26#include <qpushbutton.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qdialog.h> 29#include <qdialog.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qwhatsthis.h> 32#include <qwhatsthis.h>
33#include <qdir.h> 33#include <qdir.h>
34 34
35 35
36#include <libkcal/calfilter.h> 36#include <libkcal/calfilter.h>
37 37
38#include "kofilterview.h" 38#include "kofilterview.h"
39#include "koprefs.h" 39#include "koprefs.h"
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42#include <kglobalsettings.h> 42#include <kglobalsettings.h>
43#include <kcolorbutton.h> 43#include <kcolorbutton.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46 46
47 47
48 48
49 49
50KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent, 50KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent,
51 const char* name,WFlags fl ) 51 const char* name,WFlags fl )
52 : KOFilterView_base(parent,name,fl) 52 : KOFilterView_base(parent,name,fl)
53{ 53{
54 mFilters = filterList; 54 mFilters = filterList;
55 55
56 connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged())); 56 connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged()));
57 connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged())); 57 connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged()));
58 connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters())); 58 connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters()));
59} 59}
60 60
61KOFilterView::~KOFilterView() 61KOFilterView::~KOFilterView()
62{ 62{
63 // no need to delete child widgets, Qt does it all for us 63 // no need to delete child widgets, Qt does it all for us
64} 64}
65 65
66bool KOFilterView::filtersEnabled() 66bool KOFilterView::filtersEnabled()
67{ 67{
68 return mEnabledCheck->isChecked(); 68 return mEnabledCheck->isChecked();
69} 69}
70 70
71void KOFilterView::setFiltersEnabled(bool set) 71void KOFilterView::setFiltersEnabled(bool set)
72{ 72{
73 mEnabledCheck->setChecked(set); 73 mEnabledCheck->setChecked(set);
74 emit filterChanged(); 74 emit filterChanged();
75} 75}
76 76
77 77
78void KOFilterView::updateFilters() 78void KOFilterView::updateFilters()
79{ 79{
80 mSelectionCombo->clear(); 80 mSelectionCombo->clear();
81 81
82 CalFilter *filter = mFilters->first(); 82 CalFilter *filter = mFilters->first();
83 while(filter) { 83 while(filter) {
84 mSelectionCombo->insertItem(filter->name()); 84 mSelectionCombo->insertItem(filter->name());
85 filter = mFilters->next(); 85 filter = mFilters->next();
86 } 86 }
87} 87}
88 88
89CalFilter *KOFilterView::selectedFilter() 89CalFilter *KOFilterView::selectedFilter()
90{ 90{
91 CalFilter *f = mFilters->at(mSelectionCombo->currentItem()); 91 CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
92 return f; 92 return f;
93} 93}
94 94
95void KOFilterView::setSelectedFilter(QString filterName) 95void KOFilterView::setSelectedFilter(QString filterName)
96{ 96{
97 int filter_num = mSelectionCombo->count(); 97 int filter_num = mSelectionCombo->count();
98 int i; 98 int i;
99 for (i=0;i<filter_num;i++) { 99 for (i=0;i<filter_num;i++) {
100 if (mSelectionCombo->text(i)==filterName) 100 if (mSelectionCombo->text(i)==filterName)
101 mSelectionCombo->setCurrentItem(i); 101 mSelectionCombo->setCurrentItem(i);
102 } 102 }
103 emit filterChanged(); 103 emit filterChanged();
104} 104}
105void KOFilterView::setSelectedFilter( int fil ) 105void KOFilterView::setSelectedFilter( int fil )
106{ 106{
107 if ( fil >= mSelectionCombo->count() ) 107 if ( fil >= mSelectionCombo->count() )
108 return; 108 return;
109 mSelectionCombo->setCurrentItem( fil ); 109 mSelectionCombo->setCurrentItem( fil );
110 emit filterChanged(); 110 emit filterChanged();
111} 111}
112 112
113 113
114 114
115KOCalEditView::KOCalEditView(QWidget* parent, 115KOCalEditView::KOCalEditView(QWidget* parent,
116 const char* name ) 116 const char* name )
117 : QScrollView(parent,name) 117 : QScrollView(parent,name)
118{ 118{
119 mw = 0; 119 mw = 0;
120 setResizePolicy( AutoOneFit ); 120 setResizePolicy( AutoOneFit );
121 setFrameStyle ( QFrame::Panel | QFrame::Plain ); 121 setFrameStyle ( QFrame::Panel | QFrame::Plain );
122 setLineWidth ( 1 ); 122 setLineWidth ( 1 );
123 setMidLineWidth ( 1 ); 123 setMidLineWidth ( 1 );
124 setFocusPolicy(NoFocus); 124 setFocusPolicy(NoFocus);
125} 125}
126 126
127KOCalEditView::~KOCalEditView() 127KOCalEditView::~KOCalEditView()
128{ 128{
129 // no need to delete child widgets, Qt does it all for us 129 // no need to delete child widgets, Qt does it all for us
130} 130}
131void KOCalEditView::selectCal(int id ,bool b) 131void KOCalEditView::selectCal(int id ,bool b)
132{ 132{
133 KOPrefs::instance()->getCalendar( id )->isEnabled = b; 133 KOPrefs::instance()->getCalendar( id )->isEnabled = b;
134 emit calendarEnabled ( id, b ); 134 emit calendarEnabled ( id, b );
135 emit needsUpdate(); 135 emit needsUpdate();
136 136
137} 137}
138void KOCalEditView::selectStdCal( int id ) 138void KOCalEditView::selectStdCal( int id )
139{ 139{
140 KOCalRadioButton* it = mStdandardB.first(); 140 KOCalRadioButton* it = mStdandardB.first();
141 while ( it ) { 141 while ( it ) {
142 it->blockSignals( true ); 142 it->blockSignals( true );
143 it->setChecked( it->num() == id ); 143 it->setChecked( it->num() == id );
144 it->blockSignals( false ); 144 it->blockSignals( false );
145 it = mStdandardB.next(); 145 it = mStdandardB.next();
146 } 146 }
147 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 147 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
148 while ( kkf ) { 148 while ( kkf ) {
149 kkf->isStandard = (kkf->mCalNumber == id ); 149 kkf->isStandard = (kkf->mCalNumber == id );
150 kkf = KOPrefs::instance()->mCalendars.next(); 150 kkf = KOPrefs::instance()->mCalendars.next();
151 } 151 }
152 emit setCalendarDefault ( id ); 152 emit setCalendarDefault ( id );
153} 153}
154 154
155void KOCalEditView::selectCalAlarm(int id ,bool b ) 155void KOCalEditView::selectCalAlarm(int id ,bool b )
156{ 156{
157 KOPrefs::instance()->getCalendar( id )->isAlarmEnabled = b; 157 KOPrefs::instance()->getCalendar( id )->isAlarmEnabled = b;
158 emit alarmEnabled ( id , b ); 158 emit alarmEnabled ( id , b );
159 emit needsUpdate(); 159 emit needsUpdate();
160} 160}
161void KOCalEditView::selectReadOnly(int id ,bool b ) 161void KOCalEditView::selectReadOnly(int id ,bool b )
162{ 162{
163 163
164 emit calendarReadonly ( id , b ); 164 emit calendarReadonly ( id , b );
165 KOPrefs::instance()->getCalendar( id )->isReadOnly = b; 165 KOPrefs::instance()->getCalendar( id )->isReadOnly = b;
166 if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) { 166 if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) {
167 findNewStandard(); 167 findNewStandard();
168 } 168 }
169 if ( !b ){ 169 if ( !b ){
170 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 170 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
171 while ( kkf ) { 171 while ( kkf ) {
172 if (kkf->isReadOnly && kkf->isStandard ) { 172 if (kkf->isReadOnly && kkf->isStandard ) {
173 selectStdCal( id ); 173 selectStdCal( id );
174 break; 174 break;
175 } 175 }
176 kkf = KOPrefs::instance()->mCalendars.next(); 176 kkf = KOPrefs::instance()->mCalendars.next();
177 } 177 }
178 } 178 }
179 179
180 mStdandardB.at(id-1)->setEnabled( !b ); 180 mStdandardB.at(id-1)->setEnabled( !b );
181 emit needsUpdate(); 181 emit needsUpdate();
182 182
183} 183}
184void KOCalEditView::findNewStandard() 184void KOCalEditView::findNewStandard()
185{ 185{
186 bool found = false; 186 bool found = false;
187 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 187 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
188 while ( kkf ) { 188 while ( kkf ) {
189 if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) { 189 if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) {
190 found = true; 190 found = true;
191 selectStdCal( kkf->mCalNumber ); 191 selectStdCal( kkf->mCalNumber );
192 break; 192 break;
193 } 193 }
194 kkf = KOPrefs::instance()->mCalendars.next(); 194 kkf = KOPrefs::instance()->mCalendars.next();
195 } 195 }
196 if ( !found ) { 196 if ( !found ) {
197 KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"), 197 KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"),
198 i18n("Houston, we have a problem!") ); 198 i18n("Houston, we have a problem!") );
199 199
200 } 200 }
201} 201}
202 202
203void KOCalEditView::setColor( const QColor& c, int id ) 203void KOCalEditView::setColor( const QColor& c, int id )
204{ 204{
205 KOPrefs::instance()->getCalendar( id )->mDefaultColor = c; 205 KOPrefs::instance()->getCalendar( id )->mDefaultColor = c;
206 emit needsUpdate(); 206 emit needsUpdate();
207} 207}
208void KOCalEditView::deleteCal( int id ) 208void KOCalEditView::deleteCal( int id )
209{ 209{
210 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id ); 210 KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id );
211 QString name = kkf->mName; 211 QString name = kkf->mName;
212 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 ); 212 QString file = KGlobal::formatMessage ( kkf->mFileName ,0 );
213 if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return; 213 if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return;
214 bool findnewstd = kkf->isStandard; 214 bool findnewstd = kkf->isStandard;
215 emit removeCalendar ( id ); 215 emit removeCalendar ( id );
216 KOPrefs::instance()->mCalendars.remove ( kkf ); 216 KOPrefs::instance()->mCalendars.remove ( kkf );
217 if ( findnewstd ) findNewStandard(); 217 if ( findnewstd ) findNewStandard();
218 emit needsUpdate(); 218 emit needsUpdate();
219 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 219 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
220} 220}
221void KOCalEditView::infoCal( int id ) 221void KOCalEditView::infoCal( int id )
222{ 222{
223 QString name = KOPrefs::instance()->getCalendar( id )->mName; 223 QString name = KOPrefs::instance()->getCalendar( id )->mName;
224 QString file = KGlobal::formatMessage ( KOPrefs::instance()->getCalendar( id )->mFileName, 0 ); 224 QString file = KGlobal::formatMessage ( KOPrefs::instance()->getCalendar( id )->mFileName, 0 );
225 if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) { 225 if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) {
226 if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) { 226 if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <b>%1</b> is not loaded! Loading of file <b>%2</b> failed! <b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) {
227 emit calendarAdded( id ); 227 emit calendarAdded( id );
228 emit needsUpdate(); 228 emit needsUpdate();
229 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 229 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
230 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) ); 230 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) );
231 } 231 }
232 } 232 }
233 else 233 else {
234 KMessageBox::information( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>").arg(name).arg(file) ); 234 emit requestCalendarInfo( id );
235
236 }
235} 237}
236void KOCalEditView::readConfig() 238void KOCalEditView::readConfig()
237{ 239{
238 240
239 mStdandardB.clear(); 241 mStdandardB.clear();
240 mEnabledB.clear(); 242 mEnabledB.clear();
241 mAlarmB.clear(); 243 mAlarmB.clear();
242 mROB.clear(); 244 mROB.clear();
243 245
244 if ( mw ) delete mw; 246 if ( mw ) delete mw;
245 mw = new QWidget ( viewport() ); 247 mw = new QWidget ( viewport() );
246 addChild(mw); 248 addChild(mw);
247 int ii = 0; 249 int ii = 0;
248 mainLayout = new QGridLayout ( mw , 2, 8 ); 250 mainLayout = new QGridLayout ( mw , 2, 8 );
249 mainLayout->setMargin( 2 ); 251 mainLayout->setMargin( 2 );
250 mainLayout->setSpacing( 2 ); 252 mainLayout->setSpacing( 2 );
251 QPushButton * addButT = new QPushButton ( mw ); 253 QPushButton * addButT = new QPushButton ( mw );
252 addButT->setFocusPolicy(NoFocus); 254 addButT->setFocusPolicy(NoFocus);
253 mainLayout->addWidget( addButT,0,0 ); 255 mainLayout->addWidget( addButT,0,0 );
254 addButT->setText( "D"); 256 addButT->setText( "D");
255 connect(addButT,SIGNAL(clicked()),SLOT(defaultInfo())); 257 connect(addButT,SIGNAL(clicked()),SLOT(defaultInfo()));
256 QWhatsThis::add( addButT, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); 258 QWhatsThis::add( addButT, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") );
257 //addBut->setPixmap ( SmallIcon("greenhook16")); 259 //addBut->setPixmap ( SmallIcon("greenhook16"));
258 QPushButton *addBut = new QPushButton ( mw ); 260 QPushButton *addBut = new QPushButton ( mw );
259 addBut->setFocusPolicy(NoFocus); 261 addBut->setFocusPolicy(NoFocus);
260 mainLayout->addWidget( addBut,0,++ii ); 262 mainLayout->addWidget( addBut,0,++ii );
261 addBut->setPixmap ( SmallIcon("eye")); 263 addBut->setPixmap ( SmallIcon("eye"));
262 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.") ); 264 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar to be visible</b>. If a calendar is not visible its entries are not displayed in the views. You can add items to it and it is loaded/saved as usual.") );
263 connect(addBut,SIGNAL(clicked()),SLOT(enableAll())); 265 connect(addBut,SIGNAL(clicked()),SLOT(enableAll()));
264 int max = addBut->sizeHint().height(); 266 int max = addBut->sizeHint().height();
265 addBut->setMaximumWidth( max ); 267 addBut->setMaximumWidth( max );
266 addButT->setFixedSize( QSize( max, max ) ); 268 addButT->setFixedSize( QSize( max, max ) );
267 QLabel* lab = new QLabel (i18n(" Calendar \n Resource "), mw ); 269 QLabel* lab = new QLabel (i18n(" Calendar \n Resource "), mw );
268 mainLayout->addWidget( lab,0,++ii ); 270 mainLayout->addWidget( lab,0,++ii );
269 QWhatsThis::add( lab, i18n("In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.") ); 271 QWhatsThis::add( lab, i18n("In this column you can see the <b>name of the calendar</b>. If you click on the name button you will get an information box about the loaded calendar file. If the file was not loaded at startup you can try to load it here again.") );
270 //lab = new QLabel ( i18n(" "), mw ); 272 //lab = new QLabel ( i18n(" "), mw );
271 //mainLayout->addWidget( lab,0,++ii ); 273 //mainLayout->addWidget( lab,0,++ii );
272 //lab->setFixedWidth( 1 ); 274 //lab->setFixedWidth( 1 );
273 addBut = new QPushButton ( mw ); 275 addBut = new QPushButton ( mw );
274 addBut->setFocusPolicy(NoFocus); 276 addBut->setFocusPolicy(NoFocus);
275 mainLayout->addWidget( addBut,0,++ii ); 277 mainLayout->addWidget( addBut,0,++ii );
276 addBut->setPixmap ( SmallIcon("bell")); 278 addBut->setPixmap ( SmallIcon("bell"));
277 QWhatsThis::add( addBut, i18n("In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as \"do not use\". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.") ); 279 QWhatsThis::add( addBut, i18n("In this column you can <b>disable the alarms of a calendar all together</b>. The alarm data in the calendar itself is not changed, the alarms are marked internally as \"do not use\". Useful if you load a calendar of another person but do not want to get notified about alarms of that person.") );
278 connect(addBut,SIGNAL(clicked()),SLOT(enableAlarm())); 280 connect(addBut,SIGNAL(clicked()),SLOT(enableAlarm()));
279 addBut->setMaximumWidth( addBut->sizeHint().height() ); 281 addBut->setMaximumWidth( addBut->sizeHint().height() );
280 282
281 addBut = new QPushButton ( mw ); 283 addBut = new QPushButton ( mw );
282 addBut->setFocusPolicy(NoFocus); 284 addBut->setFocusPolicy(NoFocus);
283 mainLayout->addWidget( addBut,0,++ii ); 285 mainLayout->addWidget( addBut,0,++ii );
284 addBut->setPixmap ( SmallIcon("pencil")); 286 addBut->setPixmap ( SmallIcon("pencil"));
285 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.") ); 287 QWhatsThis::add( addBut, i18n("In this column you can <b>set a calendar and all entries of the calendar to read only</b>. If a calendar is readonly the entries cannot be edited and no items can be added to the calendar. If you change a setting of a calendar to readonly in this column all data will be saved because the data of a readonly calendar is not saved later.") );
286 connect(addBut,SIGNAL(clicked()),SLOT(disableRO())); 288 connect(addBut,SIGNAL(clicked()),SLOT(disableRO()));
287 addBut->setMaximumWidth( addBut->sizeHint().height() ); 289 addBut->setMaximumWidth( addBut->sizeHint().height() );
288 lab = new QLabel ( "", mw ); 290 lab = new QLabel ( "", mw );
289 mainLayout->addWidget( lab,0,++ii ); 291 mainLayout->addWidget( lab,0,++ii );
290 292
291 addBut = new QPushButton ( mw ); 293 addBut = new QPushButton ( mw );
292 addBut->setFocusPolicy(NoFocus); 294 addBut->setFocusPolicy(NoFocus);
293 mainLayout->addWidget( addBut,0,++ii ); 295 mainLayout->addWidget( addBut,0,++ii );
294 addBut->setPixmap ( SmallIcon("plus")); 296 addBut->setPixmap ( SmallIcon("plus"));
295 connect(addBut,SIGNAL(clicked()),SLOT(addCal())); 297 connect(addBut,SIGNAL(clicked()),SLOT(addCal()));
296 QWhatsThis::add( addBut, i18n("Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.") ); 298 QWhatsThis::add( addBut, i18n("Click this button to <b>add a calendar</b>. You can add an existing calendar file or you can add a new calendar and KO/Pi creates a new empty calendar file for you.") );
297 lab = new QLabel ( " ", mw ); 299 lab = new QLabel ( " ", mw );
298 mainLayout->addWidget( lab,0,++ii ); 300 mainLayout->addWidget( lab,0,++ii );
299 301
300 302
301 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 303 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
302 int row = 1; 304 int row = 1;
303 bool errorLoadStandard = false; 305 bool errorLoadStandard = false;
304 while ( kkf ) { 306 while ( kkf ) {
305 int iii = 0; 307 int iii = 0;
306 KOCalRadioButton* rb = new KOCalRadioButton( mw ); 308 KOCalRadioButton* rb = new KOCalRadioButton( mw );
307 mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb ); 309 mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb );
308 rb->setChecked( kkf->isStandard ); 310 rb->setChecked( kkf->isStandard );
309 if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) ) 311 if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) )
310 errorLoadStandard = true; 312 errorLoadStandard = true;
311 rb->setNum( kkf->mCalNumber ); 313 rb->setNum( kkf->mCalNumber );
312 connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) ); 314 connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) );
313 if ( kkf->mErrorOnLoad || kkf->isReadOnly ) 315 if ( kkf->mErrorOnLoad || kkf->isReadOnly )
314 rb->setEnabled( false ); 316 rb->setEnabled( false );
315 KOCalCheckButton* cb = new KOCalCheckButton( mw ); 317 KOCalCheckButton* cb = new KOCalCheckButton( mw );
316 mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb ); 318 mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb );
317 cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad ); 319 cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad );
318 cb->setNum( kkf->mCalNumber ); 320 cb->setNum( kkf->mCalNumber );
319 if ( kkf->mErrorOnLoad ) 321 if ( kkf->mErrorOnLoad )
320 cb->setEnabled( false ); 322 cb->setEnabled( false );
321 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) ); 323 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) );
322 KOCalButton* name = new KOCalButton( mw ); 324 KOCalButton* name = new KOCalButton( mw );
323 name->setNum( kkf->mCalNumber ); 325 name->setNum( kkf->mCalNumber );
324 name->setText( kkf->mName ); 326 name->setText( kkf->mName );
325 mainLayout->addWidget( name,row,++iii ); 327 mainLayout->addWidget( name,row,++iii );
326 connect (name, SIGNAL (selectNum(int)), SLOT ( infoCal(int) ) ); 328 connect (name, SIGNAL (selectNum(int)), SLOT ( infoCal(int) ) );
327 //lab = new QLabel (" ", mw ); 329 //lab = new QLabel (" ", mw );
328 //mainLayout->addWidget( lab,row,++iii ); 330 //mainLayout->addWidget( lab,row,++iii );
329 cb = new KOCalCheckButton( mw ); 331 cb = new KOCalCheckButton( mw );
330 mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb ); 332 mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb );
331 cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad); 333 cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad);
332 cb->setNum( kkf->mCalNumber ); 334 cb->setNum( kkf->mCalNumber );
333 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) ); 335 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) );
334 if ( kkf->mErrorOnLoad ) 336 if ( kkf->mErrorOnLoad )
335 cb->setEnabled( false ); 337 cb->setEnabled( false );
336 cb = new KOCalCheckButton( mw ); 338 cb = new KOCalCheckButton( mw );
337 mainLayout->addWidget( cb,row,++iii );mROB.append( cb ); 339 mainLayout->addWidget( cb,row,++iii );mROB.append( cb );
338 cb->setChecked( kkf->isReadOnly ); 340 cb->setChecked( kkf->isReadOnly );
339 cb->setNum( kkf->mCalNumber ); 341 cb->setNum( kkf->mCalNumber );
340 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectReadOnly(int,bool) ) ); 342 connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectReadOnly(int,bool) ) );
341 if ( kkf->mErrorOnLoad ) 343 if ( kkf->mErrorOnLoad )
342 cb->setEnabled( false ); 344 cb->setEnabled( false );
343 if ( row > 1) { 345 if ( row > 1) {
344 KColorButton *colb = new KColorButton( mw ); 346 KColorButton *colb = new KColorButton( mw );
345 mainLayout->addWidget( colb,row,++iii ); 347 mainLayout->addWidget( colb,row,++iii );
346 colb->setID( kkf->mCalNumber ); 348 colb->setID( kkf->mCalNumber );
347 colb->setColor( kkf->mDefaultColor ); 349 colb->setColor( kkf->mDefaultColor );
348 connect (colb, SIGNAL (changedID(const QColor&, int )), SLOT ( setColor(const QColor&,int) ) ); 350 connect (colb, SIGNAL (changedID(const QColor&, int )), SLOT ( setColor(const QColor&,int) ) );
349 KOCalButton* calb = new KOCalButton( mw ); 351 KOCalButton* calb = new KOCalButton( mw );
350 mainLayout->addWidget( calb,row,++iii ); 352 mainLayout->addWidget( calb,row,++iii );
351 calb->setNum( kkf->mCalNumber ); 353 calb->setNum( kkf->mCalNumber );
352 calb->setPixmap ( SmallIcon("minus")); 354 calb->setPixmap ( SmallIcon("minus"));
353 connect (calb, SIGNAL (selectNum(int)), SLOT ( deleteCal(int) ) ); 355 connect (calb, SIGNAL (selectNum(int)), SLOT ( deleteCal(int) ) );
354 int hei = calb->sizeHint().height(); 356 int hei = calb->sizeHint().height();
355 //calb->setMaximumSize( hei*9/10, hei*9/10 ); 357 //calb->setMaximumSize( hei*9/10, hei*9/10 );
356 } 358 }
357 ++row; 359 ++row;
358 kkf = KOPrefs::instance()->mCalendars.next(); 360 kkf = KOPrefs::instance()->mCalendars.next();
359 } 361 }
360 if ( errorLoadStandard ) 362 if ( errorLoadStandard )
361 findNewStandard(); 363 findNewStandard();
362 lab = new QLabel ( "", mw ); 364 lab = new QLabel ( "", mw );
363 mainLayout->addWidget( lab,row,0 ); 365 mainLayout->addWidget( lab,row,0 );
364 mw->show(); 366 mw->show();
365 367
366} 368}
367 369
368void KOCalEditView::defaultInfo() 370void KOCalEditView::defaultInfo()
369{ 371{
370 KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); 372 KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") );
371} 373}
372void KOCalEditView::addCal() 374void KOCalEditView::addCal()
373{ 375{
374 bool tryagain = true; 376 bool tryagain = true;
375 QString name, file = KGlobalSettings::calendarDir()+"newCal.ics"; 377 QString name, file = KGlobalSettings::calendarDir()+"newCal.ics";
376 while ( tryagain ) { 378 while ( tryagain ) {
377 KONewCalPrefs prefs ( this ); 379 KONewCalPrefs prefs ( this );
378 prefs.nameE->setText( name ); 380 prefs.nameE->setText( name );
379 prefs.url->setURL( file ); 381 prefs.url->setURL( file );
380 if ( ! prefs.exec() ) 382 if ( ! prefs.exec() )
381 return; 383 return;
382 name = prefs.calName(); 384 name = prefs.calName();
383 file = prefs.calFileName(); 385 file = prefs.calFileName();
384 tryagain = false; 386 tryagain = false;
385 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 387 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
386 while ( kkf ) { 388 while ( kkf ) {
387 if ( kkf->mName == name ) { 389 if ( kkf->mName == name ) {
388 KMessageBox::information( this, i18n("Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!").arg( name ) ); 390 KMessageBox::information( this, i18n("Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!").arg( name ) );
389 name = ""; 391 name = "";
390 tryagain = true; 392 tryagain = true;
391 break; 393 break;
392 } 394 }
393 if ( kkf->mFileName == file ) { 395 if ( kkf->mFileName == file ) {
394 KMessageBox::information( this, i18n("Sorry, the file \n%1\nis already loaded!\nPlease choose another file!").arg( KGlobal::formatMessage (file, 0 )) ); 396 KMessageBox::information( this, i18n("Sorry, the file \n%1\nis already loaded!\nPlease choose another file!").arg( KGlobal::formatMessage (file, 0 )) );
395 tryagain = true; 397 tryagain = true;
396 file = KGlobalSettings::calendarDir()+"newCal.ics"; 398 file = KGlobalSettings::calendarDir()+"newCal.ics";
397 break; 399 break;
398 } 400 }
399 kkf = KOPrefs::instance()->mCalendars.next(); 401 kkf = KOPrefs::instance()->mCalendars.next();
400 } 402 }
401 QFileInfo fi ( file ); 403 QFileInfo fi ( file );
402 if ( fi.isDir() ) { 404 if ( fi.isDir() ) {
403 tryagain = true; 405 tryagain = true;
404 } 406 }
405 } 407 }
406 addCalendar ( name, file ); 408 addCalendar ( name, file );
407 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) ); 409 QTimer::singleShot( 100, this, SIGNAL ( checkCalendar() ) );
408} 410}
409int KOCalEditView::addCalendar( QString name, QString file, bool ask ) 411int KOCalEditView::addCalendar( QString name, QString file, bool ask )
410{ 412{
411 file = QDir::convertSeparators( file ); 413 file = QDir::convertSeparators( file );
412 QFileInfo fi ( file ); 414 QFileInfo fi ( file );
413 QString absFile = file; 415 QString absFile = file;
414 bool isRelative = false; 416 bool isRelative = false;
415 if ( fi.isRelative() ) { 417 if ( fi.isRelative() ) {
416 isRelative = true; 418 isRelative = true;
417 absFile = QDir::convertSeparators( KGlobalSettings::calendarDir()+file ); 419 absFile = QDir::convertSeparators( KGlobalSettings::calendarDir()+file );
418 fi.setFile( absFile ); 420 fi.setFile( absFile );
419 } else { 421 } else {
420 QString cd = QDir::convertSeparators( KGlobalSettings::calendarDir() ); 422 QString cd = QDir::convertSeparators( KGlobalSettings::calendarDir() );
421 if ( file.left( cd.length() ) == cd ) { 423 if ( file.left( cd.length() ) == cd ) {
422 isRelative = true; 424 isRelative = true;
423 file = fi.fileName (); 425 file = fi.fileName ();
424 fi.setFile( absFile ); 426 fi.setFile( absFile );
425 } 427 }
426 } 428 }
427 if (!fi.exists() ) { 429 if (!fi.exists() ) {
428 if ( ask ) 430 if ( ask )
429 if ( KMessageBox::questionYesNo(this, i18n("The file\n%1\ndoes not exist!\nShall I create it for you?").arg( KGlobal::formatMessage (absFile,0) ) )== KMessageBox::No ) 431 if ( KMessageBox::questionYesNo(this, i18n("The file\n%1\ndoes not exist!\nShall I create it for you?").arg( KGlobal::formatMessage (absFile,0) ) )== KMessageBox::No )
430 return 0; 432 return 0;
431 QFile fileIn( absFile ); 433 QFile fileIn( absFile );
432 if (!fileIn.open( IO_WriteOnly ) ) { 434 if (!fileIn.open( IO_WriteOnly ) ) {
433 KMessageBox::sorry( this, i18n("Sorry, cannot create the file\n%1!\nNo calendar added!").arg( file ) ); 435 KMessageBox::sorry( this, i18n("Sorry, cannot create the file\n%1!\nNo calendar added!").arg( file ) );
434 return 0; 436 return 0;
435 } 437 }
436 QTextStream tsIn( &fileIn ); 438 QTextStream tsIn( &fileIn );
437 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 439 tsIn.setCodec( QTextCodec::codecForName("utf8") );
438 tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n"; 440 tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n";
439 fileIn.close(); 441 fileIn.close();
440 } 442 }
441 KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar(); 443 KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar();
442 kkf->mName = name; 444 kkf->mName = name;
443 kkf->mFileName = absFile; 445 kkf->mFileName = absFile;
444 kkf->mSavedFileName = file; 446 kkf->mSavedFileName = file;
445 kkf->isRelative = isRelative; 447 kkf->isRelative = isRelative;
446 emit calendarAdded( kkf->mCalNumber ); 448 emit calendarAdded( kkf->mCalNumber );
447 if ( ask ) 449 if ( ask )
448 emit needsUpdate(); 450 emit needsUpdate();
449 QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); 451 QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
450 return kkf->mCalNumber; 452 return kkf->mCalNumber;
451} 453}
452int KOCalEditView::getBirtdayID() 454int KOCalEditView::getBirtdayID()
453{ 455{
454 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 456 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
455 while ( kkf ) { 457 while ( kkf ) {
456 if ( kkf->mName == i18n("Birthdays") ) 458 if ( kkf->mName == i18n("Birthdays") )
457 return kkf->mCalNumber; 459 return kkf->mCalNumber;
458 kkf = KOPrefs::instance()->mCalendars.next(); 460 kkf = KOPrefs::instance()->mCalendars.next();
459 } 461 }
460 QString file = locateLocal( "data", "korganizer/birthdays.ics" ); 462 QString file = locateLocal( "data", "korganizer/birthdays.ics" );
461 return addCalendar( i18n("Birthdays"), file, false ); 463 return addCalendar( i18n("Birthdays"), file, false );
462} 464}
463 465
464void KOCalEditView::enableAll() 466void KOCalEditView::enableAll()
465{ 467{
466 toggleList( mEnabledB ); 468 toggleList( mEnabledB );
467} 469}
468void KOCalEditView::enableAlarm() 470void KOCalEditView::enableAlarm()
469{ 471{
470 toggleList( mAlarmB ); 472 toggleList( mAlarmB );
471} 473}
472void KOCalEditView::disableRO() 474void KOCalEditView::disableRO()
473{ 475{
474 toggleList( mROB, false ); 476 toggleList( mROB, false );
475} 477}
476void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable ) 478void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable )
477{ 479{
478 bool dis = !enable; 480 bool dis = !enable;
479 KOCalCheckButton* it = list.first(); 481 KOCalCheckButton* it = list.first();
480 while ( it ) { 482 while ( it ) {
481 if ( !it->isChecked() == enable && it->isEnabled() ) { 483 if ( !it->isChecked() == enable && it->isEnabled() ) {
482 dis = !dis; 484 dis = !dis;
483 break; 485 break;
484 } 486 }
485 it = list.next(); 487 it = list.next();
486 } 488 }
487 it = list.first(); 489 it = list.first();
488 while ( it ) { 490 while ( it ) {
489 if ( it->isEnabled() ) 491 if ( it->isEnabled() )
490 it->setChecked(dis); 492 it->setChecked(dis);
491 it = list.next(); 493 it = list.next();
492 } 494 }
493} 495}
494void KOCalEditView::deleteAll() 496void KOCalEditView::deleteAll()
495{ 497{
496 qDebug("delteAll"); 498 qDebug("delteAll");
497} 499}
diff --git a/korganizer/kofilterview.h b/korganizer/kofilterview.h
index d534dbf..0dd423a 100644
--- a/korganizer/kofilterview.h
+++ b/korganizer/kofilterview.h
@@ -1,256 +1,257 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 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 KOFILTERVIEW_H 23#ifndef KOFILTERVIEW_H
24#define KOFILTERVIEW_H 24#define KOFILTERVIEW_H
25 25
26#include <qstring.h> 26#include <qstring.h>
27#include <qcheckbox.h> 27#include <qcheckbox.h>
28#include <qapplication.h> 28#include <qapplication.h>
29#include <qradiobutton.h> 29#include <qradiobutton.h>
30#include <qlayout.h> 30#include <qlayout.h>
31#include <qlabel.h> 31#include <qlabel.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qscrollview.h> 33#include <qscrollview.h>
34#include <qpushbutton.h> 34#include <qpushbutton.h>
35#include <kconfig.h> 35#include <kconfig.h>
36#include "kofilterview_base.h" 36#include "kofilterview_base.h"
37 37
38#include <libkcal/calfilter.h> 38#include <libkcal/calfilter.h>
39 39
40#include <kurlrequester.h> 40#include <kurlrequester.h>
41#include <klineedit.h> 41#include <klineedit.h>
42#include <kglobal.h> 42#include <kglobal.h>
43#include <kmessagebox.h> 43#include <kmessagebox.h>
44 44
45class QGridLayout; 45class QGridLayout;
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49class KONewCalPrefs : public QDialog 49class KONewCalPrefs : public QDialog
50{ 50{
51 Q_OBJECT 51 Q_OBJECT
52 public: 52 public:
53 KONewCalPrefs( QWidget *parent=0, const char *name=0 ) : 53 KONewCalPrefs( QWidget *parent=0, const char *name=0 ) :
54 QDialog( parent, name, true ) 54 QDialog( parent, name, true )
55 { 55 {
56 setCaption( i18n("Add new Calendar") ); 56 setCaption( i18n("Add new Calendar") );
57 QVBoxLayout* lay = new QVBoxLayout( this ); 57 QVBoxLayout* lay = new QVBoxLayout( this );
58 lay->setSpacing( 3 ); 58 lay->setSpacing( 3 );
59 lay->setMargin( 3 ); 59 lay->setMargin( 3 );
60 QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this ); 60 QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this );
61 lay->addWidget( lab ); 61 lay->addWidget( lab );
62 nameE = new KLineEdit( this ); 62 nameE = new KLineEdit( this );
63 lay->addWidget( nameE ); 63 lay->addWidget( nameE );
64 lab = new QLabel( i18n("<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)"), this ); 64 lab = new QLabel( i18n("<b>iCal (*.ics) file on disk:</b><br>(will be created, if not existing)"), this );
65 lay->addWidget( lab ); 65 lay->addWidget( lab );
66 url = new KURLRequester ( this ); 66 url = new KURLRequester ( this );
67 lay->addWidget( url ); 67 lay->addWidget( url );
68 QPushButton * ok = new QPushButton( i18n("OK"), this ); 68 QPushButton * ok = new QPushButton( i18n("OK"), this );
69 lay->addWidget( ok ); 69 lay->addWidget( ok );
70 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 70 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
71 lay->addWidget( cancel ); 71 lay->addWidget( cancel );
72 connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) ); 72 connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) );
73 connect (cancel, SIGNAL( clicked() ), this, SLOT ( reject()) ); 73 connect (cancel, SIGNAL( clicked() ), this, SLOT ( reject()) );
74 int minwid = 440; 74 int minwid = 440;
75 if ( QApplication::desktop()->width() < 480 ) minwid = 220; 75 if ( QApplication::desktop()->width() < 480 ) minwid = 220;
76 setMinimumWidth( minwid ); 76 setMinimumWidth( minwid );
77 resize(sizeHint() ); 77 resize(sizeHint() );
78 } 78 }
79 79
80 QString calName() { return nameE->text(); } 80 QString calName() { return nameE->text(); }
81 QString calFileName() { return url->url(); } 81 QString calFileName() { return url->url(); }
82 82
83public slots: 83public slots:
84void checkValid() { 84void checkValid() {
85 if ( nameE->text().isEmpty() ) { 85 if ( nameE->text().isEmpty() ) {
86 KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") ); 86 KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") );
87 nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () )); 87 nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () ));
88 return; 88 return;
89 } 89 }
90 if ( url->url().isEmpty() ) { 90 if ( url->url().isEmpty() ) {
91 KMessageBox::information( this, i18n("Sorry, the file name is empty!") ); 91 KMessageBox::information( this, i18n("Sorry, the file name is empty!") );
92 url->setURL( nameE->text() + ".ics" ); 92 url->setURL( nameE->text() + ".ics" );
93 return; 93 return;
94 } 94 }
95 accept(); 95 accept();
96} 96}
97 97
98public: 98public:
99 KLineEdit* nameE; 99 KLineEdit* nameE;
100 KURLRequester *url; 100 KURLRequester *url;
101}; 101};
102 102
103class KOCalButton : public QPushButton 103class KOCalButton : public QPushButton
104{ 104{
105 Q_OBJECT 105 Q_OBJECT
106 public: 106 public:
107 KOCalButton( QWidget *parent=0, const char *name=0 ) : 107 KOCalButton( QWidget *parent=0, const char *name=0 ) :
108 QPushButton( parent, name) 108 QPushButton( parent, name)
109 { 109 {
110 connect( this, SIGNAL( clicked() ), 110 connect( this, SIGNAL( clicked() ),
111 SLOT( bottonClicked() )); 111 SLOT( bottonClicked() ));
112 mNumber = -1; 112 mNumber = -1;
113 setFocusPolicy(NoFocus); 113 setFocusPolicy(NoFocus);
114 } 114 }
115 void setNum ( int num ) {mNumber = num; } 115 void setNum ( int num ) {mNumber = num; }
116 signals: 116 signals:
117 void selectNum ( int ); 117 void selectNum ( int );
118private: 118private:
119 int mNumber; 119 int mNumber;
120 void keyPressEvent ( QKeyEvent * e ) 120 void keyPressEvent ( QKeyEvent * e )
121 { 121 {
122 e->ignore(); 122 e->ignore();
123 } 123 }
124 124
125private slots : 125private slots :
126 void bottonClicked() { if ( mNumber > 0 ) emit selectNum ( mNumber ); } 126 void bottonClicked() { if ( mNumber > 0 ) emit selectNum ( mNumber ); }
127}; 127};
128class KOCalCheckButton : public QCheckBox 128class KOCalCheckButton : public QCheckBox
129{ 129{
130 Q_OBJECT 130 Q_OBJECT
131 public: 131 public:
132 KOCalCheckButton( QWidget *parent=0, const char *name=0 ) : 132 KOCalCheckButton( QWidget *parent=0, const char *name=0 ) :
133 QCheckBox( parent, name) 133 QCheckBox( parent, name)
134 { 134 {
135 connect( this, SIGNAL( toggled ( bool ) ), 135 connect( this, SIGNAL( toggled ( bool ) ),
136 SLOT( bottonClicked( bool ) )); 136 SLOT( bottonClicked( bool ) ));
137 mNumber = -1; 137 mNumber = -1;
138 setFocusPolicy(NoFocus); 138 setFocusPolicy(NoFocus);
139 //setMaximumWidth( 10 ); 139 //setMaximumWidth( 10 );
140 140
141 } 141 }
142 void setNum ( int num ) {mNumber = num; } 142 void setNum ( int num ) {mNumber = num; }
143 signals: 143 signals:
144 void selectNum ( int, bool ); 144 void selectNum ( int, bool );
145private: 145private:
146 int mNumber; 146 int mNumber;
147 void keyPressEvent ( QKeyEvent * e ) 147 void keyPressEvent ( QKeyEvent * e )
148 { 148 {
149 e->ignore(); 149 e->ignore();
150 } 150 }
151 151
152private slots : 152private slots :
153 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); } 153 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); }
154}; 154};
155 155
156class KOCalRadioButton : public QRadioButton 156class KOCalRadioButton : public QRadioButton
157{ 157{
158 Q_OBJECT 158 Q_OBJECT
159 public: 159 public:
160 KOCalRadioButton( QWidget *parent=0, const char *name=0 ) : 160 KOCalRadioButton( QWidget *parent=0, const char *name=0 ) :
161 QRadioButton( parent, name) 161 QRadioButton( parent, name)
162 { 162 {
163 connect( this, SIGNAL( toggled ( bool ) ), 163 connect( this, SIGNAL( toggled ( bool ) ),
164 SLOT( bottonClicked( bool ) )); 164 SLOT( bottonClicked( bool ) ));
165 mNumber = -1; 165 mNumber = -1;
166 setFocusPolicy(NoFocus); 166 setFocusPolicy(NoFocus);
167 //setMaximumWidth( 10 ); 167 //setMaximumWidth( 10 );
168 168
169 } 169 }
170 int num() { return mNumber;} 170 int num() { return mNumber;}
171 void setNum ( int num ) {mNumber = num; } 171 void setNum ( int num ) {mNumber = num; }
172 signals: 172 signals:
173 void selectNum ( int ); 173 void selectNum ( int );
174private: 174private:
175 int mNumber; 175 int mNumber;
176 void keyPressEvent ( QKeyEvent * e ) 176 void keyPressEvent ( QKeyEvent * e )
177 { 177 {
178 e->ignore(); 178 e->ignore();
179 } 179 }
180 180
181private slots : 181private slots :
182 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); } 182 void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); }
183}; 183};
184 184
185 185
186 186
187class KOFilterView : public KOFilterView_base 187class KOFilterView : public KOFilterView_base
188{ 188{
189 Q_OBJECT 189 Q_OBJECT
190 public: 190 public:
191 KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent=0,const char* name=0, WFlags fl=0); 191 KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent=0,const char* name=0, WFlags fl=0);
192 ~KOFilterView(); 192 ~KOFilterView();
193 193
194 void updateFilters(); 194 void updateFilters();
195 195
196 bool filtersEnabled(); 196 bool filtersEnabled();
197 void setFiltersEnabled(bool); 197 void setFiltersEnabled(bool);
198 CalFilter *selectedFilter(); 198 CalFilter *selectedFilter();
199 void setSelectedFilter(QString); 199 void setSelectedFilter(QString);
200 void setSelectedFilter( int ); 200 void setSelectedFilter( int );
201 201
202 signals: 202 signals:
203 void filterChanged(); 203 void filterChanged();
204 void editFilters(); 204 void editFilters();
205 205
206 private: 206 private:
207 QPtrList<CalFilter> *mFilters; 207 QPtrList<CalFilter> *mFilters;
208}; 208};
209 209
210class KOCalEditView : public QScrollView 210class KOCalEditView : public QScrollView
211{ 211{
212 Q_OBJECT 212 Q_OBJECT
213 public: 213 public:
214 KOCalEditView( QWidget* parent=0,const char* name=0); 214 KOCalEditView( QWidget* parent=0,const char* name=0);
215 ~KOCalEditView(); 215 ~KOCalEditView();
216 int addCalendar( QString calName, QString fileName, bool ask = true ); 216 int addCalendar( QString calName, QString fileName, bool ask = true );
217 int getBirtdayID(); 217 int getBirtdayID();
218 public slots: 218 public slots:
219 void addCal(); 219 void addCal();
220 void enableAll(); 220 void enableAll();
221 void enableAlarm(); 221 void enableAlarm();
222 void disableRO(); 222 void disableRO();
223 void deleteAll(); 223 void deleteAll();
224 void selectStdCal(int); 224 void selectStdCal(int);
225 void selectCal(int,bool ); 225 void selectCal(int,bool );
226 void selectCalAlarm(int,bool ); 226 void selectCalAlarm(int,bool );
227 void selectReadOnly(int,bool ); 227 void selectReadOnly(int,bool );
228 void setColor(const QColor &,int) ; 228 void setColor(const QColor &,int) ;
229 void deleteCal(int) ; 229 void deleteCal(int) ;
230 void infoCal(int) ; 230 void infoCal(int) ;
231 void readConfig(); 231 void readConfig();
232 void defaultInfo(); 232 void defaultInfo();
233 void findNewStandard(); 233 void findNewStandard();
234 signals: 234 signals:
235 void alarmEnabled ( int cal, bool enable ); 235 void alarmEnabled ( int cal, bool enable );
236 void calendarEnabled ( int cal, bool enable ); 236 void calendarEnabled ( int cal, bool enable );
237 void calendarReadonly ( int cal, bool readonly ); 237 void calendarReadonly ( int cal, bool readonly );
238 void setCalendarDefault ( int cal ); 238 void setCalendarDefault ( int cal );
239 void removeCalendar ( int cal ); 239 void removeCalendar ( int cal );
240 void calendarAdded( int ); 240 void calendarAdded( int );
241 void needsUpdate(); 241 void needsUpdate();
242 void checkCalendar(); 242 void checkCalendar();
243 void requestCalendarInfo( int id );
243 244
244 private: 245 private:
245 QWidget *mw; 246 QWidget *mw;
246 void toggleList ( QPtrList<KOCalCheckButton> , bool b = true ); 247 void toggleList ( QPtrList<KOCalCheckButton> , bool b = true );
247 QPtrList<KOCalRadioButton> mStdandardB; 248 QPtrList<KOCalRadioButton> mStdandardB;
248 QPtrList<KOCalCheckButton> mEnabledB; 249 QPtrList<KOCalCheckButton> mEnabledB;
249 QPtrList<KOCalCheckButton> mAlarmB; 250 QPtrList<KOCalCheckButton> mAlarmB;
250 QPtrList<KOCalCheckButton> mROB; 251 QPtrList<KOCalCheckButton> mROB;
251 QGridLayout* mainLayout; 252 QGridLayout* mainLayout;
252}; 253};
253 254
254 255
255 256
256#endif // KOFILTERVIEW_H 257#endif // KOFILTERVIEW_H