summaryrefslogtreecommitdiffabout
path: root/korganizer
authorzautrix <zautrix>2005-05-25 09:43:34 (UTC)
committer zautrix <zautrix>2005-05-25 09:43:34 (UTC)
commitce9b826d7c0d9249751f8fb7b791c3757aff3c39 (patch) (unidiff)
tree719bc7dea987d15c1ee38de58c5b2902c8e0a5ab /korganizer
parent75c935404e0a803b7d39dd0cf4d83d4d6cd07da2 (diff)
downloadkdepimpi-ce9b826d7c0d9249751f8fb7b791c3757aff3c39.zip
kdepimpi-ce9b826d7c0d9249751f8fb7b791c3757aff3c39.tar.gz
kdepimpi-ce9b826d7c0d9249751f8fb7b791c3757aff3c39.tar.bz2
fix
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index a8ad467..503ef12 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,200 +1,200 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preston.brown@yale.edu) 8 Preston Brown (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 "kodialogmanager.h" 107#include "kodialogmanager.h"
108#include "outgoingdialog.h" 108#include "outgoingdialog.h"
109#include "incomingdialog.h" 109#include "incomingdialog.h"
110#include "datenavigatorcontainer.h" 110#include "datenavigatorcontainer.h"
111#include "statusdialog.h" 111#include "statusdialog.h"
112#include "kdatenavigator.h" 112#include "kdatenavigator.h"
113#include "kotodoview.h" 113#include "kotodoview.h"
114#include "datenavigator.h" 114#include "datenavigator.h"
115#include "resourceview.h" 115#include "resourceview.h"
116#include "navigatorbar.h" 116#include "navigatorbar.h"
117#include "searchdialog.h" 117#include "searchdialog.h"
118#include "mainwindow.h" 118#include "mainwindow.h"
119 119
120#include "calendarview.h" 120#include "calendarview.h"
121#ifndef DESKTOP_VERSION 121#ifndef DESKTOP_VERSION
122#include <qtopia/alarmserver.h> 122#include <qtopia/alarmserver.h>
123#endif 123#endif
124#ifndef _WIN32_ 124#ifndef _WIN32_
125#include <stdlib.h> 125#include <stdlib.h>
126#include <stdio.h> 126#include <stdio.h>
127#include <unistd.h> 127#include <unistd.h>
128#else 128#else
129#include <qprocess.h> 129#include <qprocess.h>
130#endif 130#endif
131 131
132#ifdef DESKTOP_VERSION 132#ifdef DESKTOP_VERSION
133#include <kabc/stdaddressbook.h> 133#include <kabc/stdaddressbook.h>
134#endif 134#endif
135using namespace KOrg; 135using namespace KOrg;
136using namespace KCal; 136using namespace KCal;
137extern int globalFlagBlockAgenda; 137extern int globalFlagBlockAgenda;
138extern int globalFlagBlockStartup; 138extern int globalFlagBlockStartup;
139 139
140 140
141 141
142class KOBeamPrefs : public QDialog 142class KOBeamPrefs : public QDialog
143{ 143{
144 public: 144 public:
145 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 145 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
146 QDialog( parent, name, true ) 146 QDialog( parent, name, true )
147 { 147 {
148 setCaption( i18n("Beam Options") ); 148 setCaption( i18n("Beam Options") );
149 QVBoxLayout* lay = new QVBoxLayout( this ); 149 QVBoxLayout* lay = new QVBoxLayout( this );
150 lay->setSpacing( 3 ); 150 lay->setSpacing( 3 );
151 lay->setMargin( 3 ); 151 lay->setMargin( 3 );
152 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 152 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
153 lay->addWidget( format ); 153 lay->addWidget( format );
154 format->setExclusive ( true ) ; 154 format->setExclusive ( true ) ;
155 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 155 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
156 lay->addWidget( time ); time->setExclusive ( true ) ; 156 lay->addWidget( time ); time->setExclusive ( true ) ;
157 vcal = new QRadioButton(" vCalendar ", format ); 157 vcal = new QRadioButton(" vCalendar ", format );
158 ical = new QRadioButton(" iCalendar ", format ); 158 ical = new QRadioButton(" iCalendar ", format );
159 vcal->setChecked( true ); 159 vcal->setChecked( true );
160 tz = new QRadioButton(i18n(" With timezone "), time ); 160 tz = new QRadioButton(i18n(" With timezone "), time );
161 local = new QRadioButton(i18n(" Local time "), time ); 161 local = new QRadioButton(i18n(" Local time "), time );
162 tz->setChecked( true ); 162 tz->setChecked( true );
163 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 163 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
164 lay->addWidget( ok ); 164 lay->addWidget( ok );
165 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 165 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
166 lay->addWidget( cancel ); 166 lay->addWidget( cancel );
167 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 167 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
168 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 168 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
169 resize( 200, 200 ); 169 resize( 200, 200 );
170 } 170 }
171 171
172 bool beamVcal() { return vcal->isChecked(); } 172 bool beamVcal() { return vcal->isChecked(); }
173 bool beamLocal() { return local->isChecked(); } 173 bool beamLocal() { return local->isChecked(); }
174private: 174private:
175 QRadioButton* vcal, *ical, *local, *tz; 175 QRadioButton* vcal, *ical, *local, *tz;
176}; 176};
177class KOCatPrefs : public QDialog 177class KOCatPrefs : public QDialog
178{ 178{
179 public: 179 public:
180 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 180 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
181 QDialog( parent, name, true ) 181 QDialog( parent, name, true )
182 { 182 {
183 setCaption( i18n("Manage new Categories") ); 183 setCaption( i18n("Manage new Categories") );
184 QVBoxLayout* lay = new QVBoxLayout( this ); 184 QVBoxLayout* lay = new QVBoxLayout( this );
185 lay->setSpacing( 3 ); 185 lay->setSpacing( 3 );
186 lay->setMargin( 3 ); 186 lay->setMargin( 3 );
187 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 187 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
188 lay->addWidget( lab ); 188 lay->addWidget( lab );
189 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 189 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
190 lay->addWidget( format ); 190 lay->addWidget( format );
191 format->setExclusive ( true ) ; 191 format->setExclusive ( true ) ;
192 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 192 addCatBut = new QRadioButton(i18n("Add to category list"), format );
193 new QRadioButton(i18n("Remove from Events/Todos"), format ); 193 new QRadioButton(i18n("Remove from Events/Todos"), format );
194 addCatBut->setChecked( true ); 194 addCatBut->setChecked( true );
195 QPushButton * ok = new QPushButton( i18n("OK"), this ); 195 QPushButton * ok = new QPushButton( i18n("OK"), this );
196 lay->addWidget( ok ); 196 lay->addWidget( ok );
197 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 197 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
198 lay->addWidget( cancel ); 198 lay->addWidget( cancel );
199 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 199 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
200 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 200 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
@@ -1470,386 +1470,387 @@ void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthd
1470 const QStringList& uidList) 1470 const QStringList& uidList)
1471{ 1471{
1472 //qDebug("KO::CalendarView::insertBirthdays"); 1472 //qDebug("KO::CalendarView::insertBirthdays");
1473 if (uid == this->name()) 1473 if (uid == this->name())
1474 { 1474 {
1475 int count = birthdayList.count(); 1475 int count = birthdayList.count();
1476 int addCount = 0; 1476 int addCount = 0;
1477 KCal::Attendee* a = 0; 1477 KCal::Attendee* a = 0;
1478 1478
1479 //qDebug("CalView 1 %i", count); 1479 //qDebug("CalView 1 %i", count);
1480 1480
1481 QProgressBar bar(count,0 ); 1481 QProgressBar bar(count,0 );
1482 int w = 300; 1482 int w = 300;
1483 if ( QApplication::desktop()->width() < 320 ) 1483 if ( QApplication::desktop()->width() < 320 )
1484 w = 220; 1484 w = 220;
1485 int h = bar.sizeHint().height() ; 1485 int h = bar.sizeHint().height() ;
1486 int dw = QApplication::desktop()->width(); 1486 int dw = QApplication::desktop()->width();
1487 int dh = QApplication::desktop()->height(); 1487 int dh = QApplication::desktop()->height();
1488 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1488 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1489 bar.show(); 1489 bar.show();
1490 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 1490 bar.setCaption (i18n("inserting birthdays - close to abort!") );
1491 qApp->processEvents(); 1491 qApp->processEvents();
1492 1492
1493 QDate birthday; 1493 QDate birthday;
1494 QDate anniversary; 1494 QDate anniversary;
1495 QString realName; 1495 QString realName;
1496 QString email; 1496 QString email;
1497 QString assembledName; 1497 QString assembledName;
1498 QString uid; 1498 QString uid;
1499 bool ok = true; 1499 bool ok = true;
1500 for ( int i = 0; i < count; i++) 1500 for ( int i = 0; i < count; i++)
1501 { 1501 {
1502 if ( ! bar.isVisible() ) 1502 if ( ! bar.isVisible() )
1503 return; 1503 return;
1504 bar.setProgress( i ); 1504 bar.setProgress( i );
1505 qApp->processEvents(); 1505 qApp->processEvents();
1506 1506
1507 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 1507 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
1508 if (!ok) { 1508 if (!ok) {
1509 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 1509 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
1510 } 1510 }
1511 1511
1512 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 1512 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
1513 if (!ok) { 1513 if (!ok) {
1514 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 1514 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
1515 } 1515 }
1516 realName = realNameList[i]; 1516 realName = realNameList[i];
1517 email = emailList[i]; 1517 email = emailList[i];
1518 assembledName = assembledNameList[i]; 1518 assembledName = assembledNameList[i];
1519 uid = uidList[i]; 1519 uid = uidList[i];
1520 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 1520 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
1521 1521
1522 if ( birthday.isValid() ){ 1522 if ( birthday.isValid() ){
1523 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1523 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1524 KCal::Attendee::ReqParticipant,uid) ; 1524 KCal::Attendee::ReqParticipant,uid) ;
1525 if ( addAnniversary( birthday, assembledName, a, true ) ) 1525 if ( addAnniversary( birthday, assembledName, a, true ) )
1526 ++addCount; 1526 ++addCount;
1527 } 1527 }
1528 1528
1529 if ( anniversary.isValid() ){ 1529 if ( anniversary.isValid() ){
1530 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1530 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1531 KCal::Attendee::ReqParticipant,uid) ; 1531 KCal::Attendee::ReqParticipant,uid) ;
1532 if ( addAnniversary( anniversary, assembledName, a, false ) ) 1532 if ( addAnniversary( anniversary, assembledName, a, false ) )
1533 ++addCount; 1533 ++addCount;
1534 } 1534 }
1535 } 1535 }
1536 1536
1537 updateView(); 1537 updateView();
1538 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1538 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1539 1539
1540 } 1540 }
1541 1541
1542} 1542}
1543 1543
1544 1544
1545 1545
1546bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1546bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1547{ 1547{
1548 //qDebug("addAnni "); 1548 //qDebug("addAnni ");
1549 Event * ev = new Event(); 1549 Event * ev = new Event();
1550 ev->setOrganizer(KOPrefs::instance()->email()); 1550 ev->setOrganizer(KOPrefs::instance()->email());
1551 if ( a ) { 1551 if ( a ) {
1552 ev->addAttendee( a ); 1552 ev->addAttendee( a );
1553 } 1553 }
1554 QString kind; 1554 QString kind;
1555 if ( birthday ) { 1555 if ( birthday ) {
1556 kind = i18n( "Birthday" ); 1556 kind = i18n( "Birthday" );
1557 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 1557 ev->setSummary( name + " (" + QString::number(date.year()) +")");
1558 } 1558 }
1559 else { 1559 else {
1560 kind = i18n( "Anniversary" ); 1560 kind = i18n( "Anniversary" );
1561 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 1561 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
1562 } 1562 }
1563 ev->setCategories( kind ); 1563 ev->setCategories( kind );
1564 ev->setDtStart( QDateTime(date) ); 1564 ev->setDtStart( QDateTime(date) );
1565 ev->setDtEnd( QDateTime(date) ); 1565 ev->setDtEnd( QDateTime(date) );
1566 ev->setFloats( true ); 1566 ev->setFloats( true );
1567 Recurrence * rec = ev->recurrence(); 1567 Recurrence * rec = ev->recurrence();
1568 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1568 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1569 rec->addYearlyNum( date.month() ); 1569 rec->addYearlyNum( date.month() );
1570 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1570 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1571 delete ev; 1571 delete ev;
1572 return false; 1572 return false;
1573 } 1573 }
1574 return true; 1574 return true;
1575 1575
1576} 1576}
1577bool CalendarView::importQtopia( const QString &categories, 1577bool CalendarView::importQtopia( const QString &categories,
1578 const QString &datebook, 1578 const QString &datebook,
1579 const QString &todolist ) 1579 const QString &todolist )
1580{ 1580{
1581 1581
1582 QtopiaFormat qtopiaFormat; 1582 QtopiaFormat qtopiaFormat;
1583 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1583 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1584 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1584 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1585 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1585 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1586 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1586 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1587 1587
1588 updateView(); 1588 updateView();
1589 return true; 1589 return true;
1590 1590
1591#if 0 1591#if 0
1592 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1592 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1593 mCurrentSyncDevice = "qtopia-XML"; 1593 mCurrentSyncDevice = "qtopia-XML";
1594 if ( mSyncManager->mAskForPreferences ) 1594 if ( mSyncManager->mAskForPreferences )
1595 edit_sync_options(); 1595 edit_sync_options();
1596 qApp->processEvents(); 1596 qApp->processEvents();
1597 CalendarLocal* calendar = new CalendarLocal(); 1597 CalendarLocal* calendar = new CalendarLocal();
1598 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1598 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1599 bool syncOK = false; 1599 bool syncOK = false;
1600 QtopiaFormat qtopiaFormat; 1600 QtopiaFormat qtopiaFormat;
1601 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1601 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1602 bool loadOk = true; 1602 bool loadOk = true;
1603 if ( !categories.isEmpty() ) 1603 if ( !categories.isEmpty() )
1604 loadOk = qtopiaFormat.load( calendar, categories ); 1604 loadOk = qtopiaFormat.load( calendar, categories );
1605 if ( loadOk && !datebook.isEmpty() ) 1605 if ( loadOk && !datebook.isEmpty() )
1606 loadOk = qtopiaFormat.load( calendar, datebook ); 1606 loadOk = qtopiaFormat.load( calendar, datebook );
1607 if ( loadOk && !todolist.isEmpty() ) 1607 if ( loadOk && !todolist.isEmpty() )
1608 loadOk = qtopiaFormat.load( calendar, todolist ); 1608 loadOk = qtopiaFormat.load( calendar, todolist );
1609 1609
1610 if ( loadOk ) { 1610 if ( loadOk ) {
1611 getEventViewerDialog()->setSyncMode( true ); 1611 getEventViewerDialog()->setSyncMode( true );
1612 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1612 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1613 getEventViewerDialog()->setSyncMode( false ); 1613 getEventViewerDialog()->setSyncMode( false );
1614 qApp->processEvents(); 1614 qApp->processEvents();
1615 if ( syncOK ) { 1615 if ( syncOK ) {
1616 if ( mSyncManager->mWriteBackFile ) 1616 if ( mSyncManager->mWriteBackFile )
1617 { 1617 {
1618 // write back XML file 1618 // write back XML file
1619 1619
1620 } 1620 }
1621 setModified( true ); 1621 setModified( true );
1622 } 1622 }
1623 } else { 1623 } else {
1624 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1624 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1625 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1625 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1626 question, i18n("Ok")) ; 1626 question, i18n("Ok")) ;
1627 } 1627 }
1628 delete calendar; 1628 delete calendar;
1629 updateView(); 1629 updateView();
1630 return syncOK; 1630 return syncOK;
1631 1631
1632 1632
1633#endif 1633#endif
1634 1634
1635} 1635}
1636 1636
1637void CalendarView::setSyncEventsReadOnly() 1637void CalendarView::setSyncEventsReadOnly()
1638{ 1638{
1639 Event * ev; 1639 Event * ev;
1640 QPtrList<Event> eL = mCalendar->rawEvents(); 1640 QPtrList<Event> eL = mCalendar->rawEvents();
1641 ev = eL.first(); 1641 ev = eL.first();
1642 while ( ev ) { 1642 while ( ev ) {
1643 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1643 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1644 ev->setReadOnly( true ); 1644 ev->setReadOnly( true );
1645 ev = eL.next(); 1645 ev = eL.next();
1646 } 1646 }
1647} 1647}
1648bool CalendarView::openCalendar(QString filename, bool merge) 1648bool CalendarView::openCalendar(QString filename, bool merge)
1649{ 1649{
1650 1650
1651 if (filename.isEmpty()) { 1651 if (filename.isEmpty()) {
1652 return false; 1652 return false;
1653 } 1653 }
1654 1654
1655 if (!QFile::exists(filename)) { 1655 if (!QFile::exists(filename)) {
1656 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1656 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1657 return false; 1657 return false;
1658 } 1658 }
1659 1659
1660 globalFlagBlockAgenda = 1; 1660 globalFlagBlockAgenda = 1;
1661 if (!merge) { 1661 if (!merge) {
1662 mCalendar->close();
1663 mTodoList->clearList(); 1662 mTodoList->clearList();
1663 mViewManager->setDocumentId( filename );
1664 mCalendar->close();
1664 } 1665 }
1665 mStorage->setFileName( filename ); 1666 mStorage->setFileName( filename );
1666 1667
1667 if ( mStorage->load() ) { 1668 if ( mStorage->load() ) {
1668 if ( merge ) ;//setModified( true ); 1669 if ( merge ) ;//setModified( true );
1669 else { 1670 else {
1670 //setModified( true ); 1671 //setModified( true );
1671 mViewManager->setDocumentId( filename ); 1672 mViewManager->setDocumentId( filename );
1672 mDialogManager->setDocumentId( filename ); 1673 mDialogManager->setDocumentId( filename );
1673 mTodoList->setDocumentId( filename ); 1674 mTodoList->setDocumentId( filename );
1674 } 1675 }
1675 globalFlagBlockAgenda = 2; 1676 globalFlagBlockAgenda = 2;
1676 // if ( getLastSyncEvent() ) 1677 // if ( getLastSyncEvent() )
1677 // getLastSyncEvent()->setReadOnly( true ); 1678 // getLastSyncEvent()->setReadOnly( true );
1678 mCalendar->reInitAlarmSettings(); 1679 mCalendar->reInitAlarmSettings();
1679 setSyncEventsReadOnly(); 1680 setSyncEventsReadOnly();
1680 updateUnmanagedViews(); 1681 updateUnmanagedViews();
1681 updateView(); 1682 updateView();
1682 if ( filename != MainWindow::defaultFileName() ) { 1683 if ( filename != MainWindow::defaultFileName() ) {
1683 saveCalendar( MainWindow::defaultFileName() ); 1684 saveCalendar( MainWindow::defaultFileName() );
1684 } else { 1685 } else {
1685 QFileInfo finf ( MainWindow::defaultFileName()); 1686 QFileInfo finf ( MainWindow::defaultFileName());
1686 if ( finf.exists() ) { 1687 if ( finf.exists() ) {
1687 setLoadedFileVersion( finf.lastModified () ); 1688 setLoadedFileVersion( finf.lastModified () );
1688 } 1689 }
1689 } 1690 }
1690 return true; 1691 return true;
1691 } else { 1692 } else {
1692 // while failing to load, the calendar object could 1693 // while failing to load, the calendar object could
1693 // have become partially populated. Clear it out. 1694 // have become partially populated. Clear it out.
1694 if ( !merge ) { 1695 if ( !merge ) {
1695 mCalendar->close(); 1696 mCalendar->close();
1696 mViewManager->setDocumentId( filename ); 1697 mViewManager->setDocumentId( filename );
1697 mDialogManager->setDocumentId( filename ); 1698 mDialogManager->setDocumentId( filename );
1698 mTodoList->setDocumentId( filename ); 1699 mTodoList->setDocumentId( filename );
1699 } 1700 }
1700 1701
1701 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1702 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1702 1703
1703 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 1704 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
1704 globalFlagBlockAgenda = 2; 1705 globalFlagBlockAgenda = 2;
1705 mCalendar->reInitAlarmSettings(); 1706 mCalendar->reInitAlarmSettings();
1706 setSyncEventsReadOnly(); 1707 setSyncEventsReadOnly();
1707 updateUnmanagedViews(); 1708 updateUnmanagedViews();
1708 updateView(); 1709 updateView();
1709 } 1710 }
1710 return false; 1711 return false;
1711} 1712}
1712void CalendarView::showOpenError() 1713void CalendarView::showOpenError()
1713{ 1714{
1714 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 1715 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
1715} 1716}
1716void CalendarView::setLoadedFileVersion(QDateTime dt) 1717void CalendarView::setLoadedFileVersion(QDateTime dt)
1717{ 1718{
1718 loadedFileVersion = dt; 1719 loadedFileVersion = dt;
1719} 1720}
1720bool CalendarView::checkFileChanged(QString fn) 1721bool CalendarView::checkFileChanged(QString fn)
1721{ 1722{
1722 QFileInfo finf ( fn ); 1723 QFileInfo finf ( fn );
1723 if ( !finf.exists() ) 1724 if ( !finf.exists() )
1724 return true; 1725 return true;
1725 QDateTime dt = finf.lastModified (); 1726 QDateTime dt = finf.lastModified ();
1726 if ( dt <= loadedFileVersion ) 1727 if ( dt <= loadedFileVersion )
1727 return false; 1728 return false;
1728 return true; 1729 return true;
1729 1730
1730} 1731}
1731void CalendarView::watchSavedFile() 1732void CalendarView::watchSavedFile()
1732{ 1733{
1733 QFileInfo finf ( MainWindow::defaultFileName()); 1734 QFileInfo finf ( MainWindow::defaultFileName());
1734 if ( !finf.exists() ) 1735 if ( !finf.exists() )
1735 return; 1736 return;
1736 QDateTime dt = finf.lastModified (); 1737 QDateTime dt = finf.lastModified ();
1737 if ( dt < loadedFileVersion ) { 1738 if ( dt < loadedFileVersion ) {
1738 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 1739 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
1739 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 1740 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
1740 return; 1741 return;
1741 } 1742 }
1742 loadedFileVersion = dt; 1743 loadedFileVersion = dt;
1743} 1744}
1744 1745
1745bool CalendarView::checkFileVersion(QString fn) 1746bool CalendarView::checkFileVersion(QString fn)
1746{ 1747{
1747 QFileInfo finf ( fn ); 1748 QFileInfo finf ( fn );
1748 if ( !finf.exists() ) 1749 if ( !finf.exists() )
1749 return true; 1750 return true;
1750 QDateTime dt = finf.lastModified (); 1751 QDateTime dt = finf.lastModified ();
1751 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1752 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1752 //qDebug("file on disk version %s",dt.toString().latin1()); 1753 //qDebug("file on disk version %s",dt.toString().latin1());
1753 if ( dt <= loadedFileVersion ) 1754 if ( dt <= loadedFileVersion )
1754 return true; 1755 return true;
1755 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 1756 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
1756 i18n("KO/Pi Warning"),i18n("Overwrite"), 1757 i18n("KO/Pi Warning"),i18n("Overwrite"),
1757 i18n("Sync+save")); 1758 i18n("Sync+save"));
1758 1759
1759 if ( km == KMessageBox::Cancel ) 1760 if ( km == KMessageBox::Cancel )
1760 return false; 1761 return false;
1761 if ( km == KMessageBox::Yes ) 1762 if ( km == KMessageBox::Yes )
1762 return true; 1763 return true;
1763 1764
1764 setSyncDevice("deleteaftersync" ); 1765 setSyncDevice("deleteaftersync" );
1765 mSyncManager->mAskForPreferences = true; 1766 mSyncManager->mAskForPreferences = true;
1766 mSyncManager->mSyncAlgoPrefs = 3; 1767 mSyncManager->mSyncAlgoPrefs = 3;
1767 mSyncManager->mWriteBackFile = false; 1768 mSyncManager->mWriteBackFile = false;
1768 mSyncManager->mWriteBackExistingOnly = false; 1769 mSyncManager->mWriteBackExistingOnly = false;
1769 mSyncManager->mShowSyncSummary = false; 1770 mSyncManager->mShowSyncSummary = false;
1770 syncCalendar( fn, 3 ); 1771 syncCalendar( fn, 3 );
1771 Event * e = getLastSyncEvent(); 1772 Event * e = getLastSyncEvent();
1772 mCalendar->deleteEvent ( e ); 1773 mCalendar->deleteEvent ( e );
1773 updateView(); 1774 updateView();
1774 return true; 1775 return true;
1775} 1776}
1776 1777
1777bool CalendarView::saveCalendar( QString filename ) 1778bool CalendarView::saveCalendar( QString filename )
1778{ 1779{
1779 1780
1780 // Store back all unsaved data into calendar object 1781 // Store back all unsaved data into calendar object
1781 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1782 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1782 if ( mViewManager->currentView() ) 1783 if ( mViewManager->currentView() )
1783 mViewManager->currentView()->flushView(); 1784 mViewManager->currentView()->flushView();
1784 1785
1785 1786
1786 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 1787 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
1787 mStorage->setSaveFormat( new ICalFormat() ); 1788 mStorage->setSaveFormat( new ICalFormat() );
1788 mStorage->setFileName( filename ); 1789 mStorage->setFileName( filename );
1789 bool success; 1790 bool success;
1790 success = mStorage->save(); 1791 success = mStorage->save();
1791 if ( !success ) { 1792 if ( !success ) {
1792 return false; 1793 return false;
1793 } 1794 }
1794 if ( filename == MainWindow::defaultFileName() ) { 1795 if ( filename == MainWindow::defaultFileName() ) {
1795 setLoadedFileVersion( lfv ); 1796 setLoadedFileVersion( lfv );
1796 watchSavedFile(); 1797 watchSavedFile();
1797 } 1798 }
1798 return true; 1799 return true;
1799} 1800}
1800 1801
1801void CalendarView::closeCalendar() 1802void CalendarView::closeCalendar()
1802{ 1803{
1803 1804
1804 // child windows no longer valid 1805 // child windows no longer valid
1805 emit closingDown(); 1806 emit closingDown();
1806 1807
1807 mCalendar->close(); 1808 mCalendar->close();
1808 setModified(false); 1809 setModified(false);
1809 updateView(); 1810 updateView();
1810} 1811}
1811 1812
1812void CalendarView::archiveCalendar() 1813void CalendarView::archiveCalendar()
1813{ 1814{
1814 mDialogManager->showArchiveDialog(); 1815 mDialogManager->showArchiveDialog();
1815} 1816}
1816 1817
1817 1818
1818void CalendarView::readSettings() 1819void CalendarView::readSettings()
1819{ 1820{
1820 1821
1821 1822
1822 // mViewManager->showAgendaView(); 1823 // mViewManager->showAgendaView();
1823 QString str; 1824 QString str;
1824 //qDebug("CalendarView::readSettings() "); 1825 //qDebug("CalendarView::readSettings() ");
1825 // read settings from the KConfig, supplying reasonable 1826 // read settings from the KConfig, supplying reasonable
1826 // defaults where none are to be found 1827 // defaults where none are to be found
1827 KConfig *config = KOGlobals::config(); 1828 KConfig *config = KOGlobals::config();
1828#ifndef KORG_NOSPLITTER 1829#ifndef KORG_NOSPLITTER
1829 config->setGroup("KOrganizer Geometry"); 1830 config->setGroup("KOrganizer Geometry");
1830 1831
1831 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1832 QValueList<int> sizes = config->readIntListEntry("Separator1");
1832 if (sizes.count() != 2) { 1833 if (sizes.count() != 2) {
1833 sizes << mDateNavigator->minimumSizeHint().width(); 1834 sizes << mDateNavigator->minimumSizeHint().width();
1834 sizes << 300; 1835 sizes << 300;
1835 } 1836 }
1836 mPanner->setSizes(sizes); 1837 mPanner->setSizes(sizes);
1837 1838
1838 sizes = config->readIntListEntry("Separator2"); 1839 sizes = config->readIntListEntry("Separator2");
1839 if ( ( mResourceView && sizes.count() == 4 ) || 1840 if ( ( mResourceView && sizes.count() == 4 ) ||
1840 ( !mResourceView && sizes.count() == 3 ) ) { 1841 ( !mResourceView && sizes.count() == 3 ) ) {
1841 mLeftSplitter->setSizes(sizes); 1842 mLeftSplitter->setSizes(sizes);
1842 } 1843 }
1843#endif 1844#endif
1844 globalFlagBlockAgenda = 1; 1845 globalFlagBlockAgenda = 1;
1845 mViewManager->showAgendaView(); 1846 mViewManager->showAgendaView();
1846 //mViewManager->readSettings( config ); 1847 //mViewManager->readSettings( config );
1847 mTodoList->restoreLayout(config,QString("Todo Layout")); 1848 mTodoList->restoreLayout(config,QString("Todo Layout"));
1848 readFilterSettings(config); 1849 readFilterSettings(config);
1849 1850
1850#ifdef DESKTOP_VERSION 1851#ifdef DESKTOP_VERSION
1851 config->setGroup("WidgetLayout"); 1852 config->setGroup("WidgetLayout");
1852 QStringList list; 1853 QStringList list;
1853 list = config->readListEntry("MainLayout"); 1854 list = config->readListEntry("MainLayout");
1854 int x,y,w,h; 1855 int x,y,w,h;
1855 if ( ! list.isEmpty() ) { 1856 if ( ! list.isEmpty() ) {