summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp32
-rw-r--r--korganizer/mainwindow.cpp5
-rw-r--r--libkcal/libkcal.pro2
-rw-r--r--libkcal/libkcalE.pro2
-rw-r--r--libkcal/phoneformat.cpp117
-rw-r--r--libkcal/phoneformat.h1
6 files changed, 22 insertions, 137 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 185cf46..7bec90a 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,233 +1,234 @@
1/* 1/*
2 This file is part of KAddressbook. 2 This file is part of KAddressbook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2003 Tobias Koenig <tokoe@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/* 24/*s
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include "kabcore.h" 31#include "kabcore.h"
32 32
33#include <stdaddressbook.h> 33#include <stdaddressbook.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kfiledialog.h> 35#include <kfiledialog.h>
36#include <qtimer.h> 36#include <qtimer.h>
37#include <qlabel.h> 37#include <qlabel.h>
38#include <qlineedit.h> 38#include <qlineedit.h>
39#include <qcheckbox.h> 39#include <qcheckbox.h>
40#include <qpushbutton.h> 40#include <qpushbutton.h>
41#include <qprogressbar.h> 41#include <qprogressbar.h>
42#include <libkdepim/phoneaccess.h>
42 43
43#ifndef KAB_EMBEDDED 44#ifndef KAB_EMBEDDED
44#include <qclipboard.h> 45#include <qclipboard.h>
45#include <qdir.h> 46#include <qdir.h>
46#include <qfile.h> 47#include <qfile.h>
47#include <qapplicaton.h> 48#include <qapplicaton.h>
48#include <qprogressbar.h> 49#include <qprogressbar.h>
49#include <qlayout.h> 50#include <qlayout.h>
50#include <qregexp.h> 51#include <qregexp.h>
51#include <qvbox.h> 52#include <qvbox.h>
52#include <kabc/addresseelist.h> 53#include <kabc/addresseelist.h>
53#include <kabc/errorhandler.h> 54#include <kabc/errorhandler.h>
54#include <kabc/resource.h> 55#include <kabc/resource.h>
55#include <kabc/vcardconverter.h> 56#include <kabc/vcardconverter.h>
56#include <kapplication.h> 57#include <kapplication.h>
57#include <kactionclasses.h> 58#include <kactionclasses.h>
58#include <kcmultidialog.h> 59#include <kcmultidialog.h>
59#include <kdebug.h> 60#include <kdebug.h>
60#include <kdeversion.h> 61#include <kdeversion.h>
61#include <kkeydialog.h> 62#include <kkeydialog.h>
62#include <kmessagebox.h> 63#include <kmessagebox.h>
63#include <kprinter.h> 64#include <kprinter.h>
64#include <kprotocolinfo.h> 65#include <kprotocolinfo.h>
65#include <kresources/selectdialog.h> 66#include <kresources/selectdialog.h>
66#include <kstandarddirs.h> 67#include <kstandarddirs.h>
67#include <ktempfile.h> 68#include <ktempfile.h>
68#include <kxmlguiclient.h> 69#include <kxmlguiclient.h>
69#include <kaboutdata.h> 70#include <kaboutdata.h>
70#include <libkdepim/categoryselectdialog.h> 71#include <libkdepim/categoryselectdialog.h>
71 72
72#include "addresseeutil.h" 73#include "addresseeutil.h"
73#include "addresseeeditordialog.h" 74#include "addresseeeditordialog.h"
74#include "extensionmanager.h" 75#include "extensionmanager.h"
75#include "kstdaction.h" 76#include "kstdaction.h"
76#include "kaddressbookservice.h" 77#include "kaddressbookservice.h"
77#include "ldapsearchdialog.h" 78#include "ldapsearchdialog.h"
78#include "printing/printingwizard.h" 79#include "printing/printingwizard.h"
79#else // KAB_EMBEDDED 80#else // KAB_EMBEDDED
80 81
81#include <kapplication.h> 82#include <kapplication.h>
82#include "KDGanttMinimizeSplitter.h" 83#include "KDGanttMinimizeSplitter.h"
83#include "kaddressbookmain.h" 84#include "kaddressbookmain.h"
84#include "kactioncollection.h" 85#include "kactioncollection.h"
85#include "addresseedialog.h" 86#include "addresseedialog.h"
86//US 87//US
87#include <addresseeview.h> 88#include <addresseeview.h>
88 89
89#include <qapp.h> 90#include <qapp.h>
90#include <qmenubar.h> 91#include <qmenubar.h>
91//#include <qtoolbar.h> 92//#include <qtoolbar.h>
92#include <qmessagebox.h> 93#include <qmessagebox.h>
93#include <kdebug.h> 94#include <kdebug.h>
94#include <kiconloader.h> // needed for SmallIcon 95#include <kiconloader.h> // needed for SmallIcon
95#include <kresources/kcmkresources.h> 96#include <kresources/kcmkresources.h>
96#include <ktoolbar.h> 97#include <ktoolbar.h>
97 98
98 99
99//#include <qlabel.h> 100//#include <qlabel.h>
100 101
101 102
102#ifndef DESKTOP_VERSION 103#ifndef DESKTOP_VERSION
103#include <qpe/ir.h> 104#include <qpe/ir.h>
104#include <qpe/qpemenubar.h> 105#include <qpe/qpemenubar.h>
105#include <qtopia/qcopenvelope_qws.h> 106#include <qtopia/qcopenvelope_qws.h>
106#else 107#else
107 108
108#include <qmenubar.h> 109#include <qmenubar.h>
109#endif 110#endif
110 111
111#endif // KAB_EMBEDDED 112#endif // KAB_EMBEDDED
112#include "kcmconfigs/kcmkabconfig.h" 113#include "kcmconfigs/kcmkabconfig.h"
113#include "kcmconfigs/kcmkdepimconfig.h" 114#include "kcmconfigs/kcmkdepimconfig.h"
114#include "kpimglobalprefs.h" 115#include "kpimglobalprefs.h"
115#include "externalapphandler.h" 116#include "externalapphandler.h"
116 117
117 118
118#include <kresources/selectdialog.h> 119#include <kresources/selectdialog.h>
119#include <kmessagebox.h> 120#include <kmessagebox.h>
120 121
121#include <picture.h> 122#include <picture.h>
122#include <resource.h> 123#include <resource.h>
123 124
124//US#include <qsplitter.h> 125//US#include <qsplitter.h>
125#include <qmap.h> 126#include <qmap.h>
126#include <qdir.h> 127#include <qdir.h>
127#include <qfile.h> 128#include <qfile.h>
128#include <qvbox.h> 129#include <qvbox.h>
129#include <qlayout.h> 130#include <qlayout.h>
130#include <qclipboard.h> 131#include <qclipboard.h>
131#include <qtextstream.h> 132#include <qtextstream.h>
132 133
133#include <libkdepim/categoryselectdialog.h> 134#include <libkdepim/categoryselectdialog.h>
134#include <kabc/vcardconverter.h> 135#include <kabc/vcardconverter.h>
135 136
136 137
137#include "addresseeutil.h" 138#include "addresseeutil.h"
138#include "undocmds.h" 139#include "undocmds.h"
139#include "addresseeeditordialog.h" 140#include "addresseeeditordialog.h"
140#include "viewmanager.h" 141#include "viewmanager.h"
141#include "details/detailsviewcontainer.h" 142#include "details/detailsviewcontainer.h"
142#include "kabprefs.h" 143#include "kabprefs.h"
143#include "xxportmanager.h" 144#include "xxportmanager.h"
144#include "incsearchwidget.h" 145#include "incsearchwidget.h"
145#include "jumpbuttonbar.h" 146#include "jumpbuttonbar.h"
146#include "extensionmanager.h" 147#include "extensionmanager.h"
147#include "addresseeconfig.h" 148#include "addresseeconfig.h"
148#include <kcmultidialog.h> 149#include <kcmultidialog.h>
149 150
150#ifdef _WIN32_ 151#ifdef _WIN32_
151 152
152#include "kaimportoldialog.h" 153#include "kaimportoldialog.h"
153#else 154#else
154#include <unistd.h> 155#include <unistd.h>
155#endif 156#endif
156// sync includes 157// sync includes
157#include <libkdepim/ksyncprofile.h> 158#include <libkdepim/ksyncprofile.h>
158#include <libkdepim/ksyncprefsdialog.h> 159#include <libkdepim/ksyncprefsdialog.h>
159 160
160class KAex2phonePrefs : public QDialog 161class KAex2phonePrefs : public QDialog
161{ 162{
162 public: 163 public:
163 KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) : 164 KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) :
164 QDialog( parent, name, true ) 165 QDialog( parent, name, true )
165 { 166 {
166 setCaption( i18n("Export to phone options") ); 167 setCaption( i18n("Export to phone options") );
167 QVBoxLayout* lay = new QVBoxLayout( this ); 168 QVBoxLayout* lay = new QVBoxLayout( this );
168 lay->setSpacing( 3 ); 169 lay->setSpacing( 3 );
169 lay->setMargin( 3 ); 170 lay->setMargin( 3 );
170 QLabel *lab; 171 QLabel *lab;
171 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); 172 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) );
172 lab->setAlignment (AlignHCenter ); 173 lab->setAlignment (AlignHCenter );
173 QHBox* temphb; 174 QHBox* temphb;
174 temphb = new QHBox( this ); 175 temphb = new QHBox( this );
175 new QLabel( i18n("I/O device: "), temphb ); 176 new QLabel( i18n("I/O device: "), temphb );
176 mPhoneDevice = new QLineEdit( temphb); 177 mPhoneDevice = new QLineEdit( temphb);
177 lay->addWidget( temphb ); 178 lay->addWidget( temphb );
178 temphb = new QHBox( this ); 179 temphb = new QHBox( this );
179 new QLabel( i18n("Connection: "), temphb ); 180 new QLabel( i18n("Connection: "), temphb );
180 mPhoneConnection = new QLineEdit( temphb); 181 mPhoneConnection = new QLineEdit( temphb);
181 lay->addWidget( temphb ); 182 lay->addWidget( temphb );
182 temphb = new QHBox( this ); 183 temphb = new QHBox( this );
183 new QLabel( i18n("Model(opt.): "), temphb ); 184 new QLabel( i18n("Model(opt.): "), temphb );
184 mPhoneModel = new QLineEdit( temphb); 185 mPhoneModel = new QLineEdit( temphb);
185 lay->addWidget( temphb ); 186 lay->addWidget( temphb );
186 mWriteToSim= new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this ); 187 mWriteToSim= new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this );
187 lay->addWidget( mWriteToSim ); 188 lay->addWidget( mWriteToSim );
188 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) ); 189 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) );
189 lab->setAlignment (AlignHCenter ); 190 lab->setAlignment (AlignHCenter );
190 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); 191 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this );
191 lay->addWidget( ok ); 192 lay->addWidget( ok );
192 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 193 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
193 lay->addWidget( cancel ); 194 lay->addWidget( cancel );
194 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 195 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
195 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 196 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
196 resize( 220, 240 ); 197 resize( 220, 240 );
197 198
198 } 199 }
199 200
200public: 201public:
201 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; 202 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel;
202 QCheckBox* mWriteToSim; 203 QCheckBox* mWriteToSim;
203}; 204};
204 205
205bool pasteWithNewUid = true; 206bool pasteWithNewUid = true;
206 207
207#ifdef KAB_EMBEDDED 208#ifdef KAB_EMBEDDED
208KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 209KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
209 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), 210 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
210 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 211 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
211 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 212 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
212#else //KAB_EMBEDDED 213#else //KAB_EMBEDDED
213KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 214KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
214 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), 215 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
215 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 216 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
216 mReadWrite( readWrite ), mModified( false ) 217 mReadWrite( readWrite ), mModified( false )
217#endif //KAB_EMBEDDED 218#endif //KAB_EMBEDDED
218{ 219{
219 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); 220 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
220 // syncManager->setBlockSave(false); 221 // syncManager->setBlockSave(false);
221 mExtensionBarSplitter = 0; 222 mExtensionBarSplitter = 0;
222 mIsPart = !parent->inherits( "KAddressBookMain" ); 223 mIsPart = !parent->inherits( "KAddressBookMain" );
223 224
224 mAddressBook = KABC::StdAddressBook::self(); 225 mAddressBook = KABC::StdAddressBook::self();
225 KABC::StdAddressBook::setAutomaticSave( false ); 226 KABC::StdAddressBook::setAutomaticSave( false );
226 227
227#ifndef KAB_EMBEDDED 228#ifndef KAB_EMBEDDED
228 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 229 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
229#endif //KAB_EMBEDDED 230#endif //KAB_EMBEDDED
230 231
231 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 232 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
232 SLOT( addressBookChanged() ) ); 233 SLOT( addressBookChanged() ) );
233 234
@@ -484,448 +485,443 @@ void KABCore::createAboutData()
484 485
485 return about; 486 return about;
486#endif //KAB_EMBEDDED 487#endif //KAB_EMBEDDED
487 488
488 QString version; 489 QString version;
489#include <../version> 490#include <../version>
490 QMessageBox::about( this, "About KAddressbook/Pi", 491 QMessageBox::about( this, "About KAddressbook/Pi",
491 "KAddressbook/Platform-independent\n" 492 "KAddressbook/Platform-independent\n"
492 "(KA/Pi) " +version + " - " + 493 "(KA/Pi) " +version + " - " +
493#ifdef DESKTOP_VERSION 494#ifdef DESKTOP_VERSION
494 "Desktop Edition\n" 495 "Desktop Edition\n"
495#else 496#else
496 "PDA-Edition\n" 497 "PDA-Edition\n"
497 "for: Zaurus 5500 / 7x0 / 8x0\n" 498 "for: Zaurus 5500 / 7x0 / 8x0\n"
498#endif 499#endif
499 500
500 "(c) 2004 Ulf Schenk\n" 501 "(c) 2004 Ulf Schenk\n"
501 "(c) 2004 Lutz Rogowski\n" 502 "(c) 2004 Lutz Rogowski\n"
502 "(c) 1997-2003, The KDE PIM Team\n" 503 "(c) 1997-2003, The KDE PIM Team\n"
503 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 504 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
504 "Don Sanders Original author\n" 505 "Don Sanders Original author\n"
505 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 506 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
506 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 507 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
507 "Greg Stern DCOP interface\n" 508 "Greg Stern DCOP interface\n"
508 "Mark Westcot Contact pinning\n" 509 "Mark Westcot Contact pinning\n"
509 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 510 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
510 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 511 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
511#ifdef _WIN32_ 512#ifdef _WIN32_
512 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 513 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
513#endif 514#endif
514 ); 515 );
515} 516}
516 517
517void KABCore::setContactSelected( const QString &uid ) 518void KABCore::setContactSelected( const QString &uid )
518{ 519{
519 KABC::Addressee addr = mAddressBook->findByUid( uid ); 520 KABC::Addressee addr = mAddressBook->findByUid( uid );
520 if ( !mDetails->isHidden() ) 521 if ( !mDetails->isHidden() )
521 mDetails->setAddressee( addr ); 522 mDetails->setAddressee( addr );
522 523
523 if ( !addr.isEmpty() ) { 524 if ( !addr.isEmpty() ) {
524 emit contactSelected( addr.formattedName() ); 525 emit contactSelected( addr.formattedName() );
525 KABC::Picture pic = addr.photo(); 526 KABC::Picture pic = addr.photo();
526 if ( pic.isIntern() ) { 527 if ( pic.isIntern() ) {
527//US emit contactSelected( pic.data() ); 528//US emit contactSelected( pic.data() );
528//US instead use: 529//US instead use:
529 QPixmap px; 530 QPixmap px;
530 if (pic.data().isNull() != true) 531 if (pic.data().isNull() != true)
531 { 532 {
532 px.convertFromImage(pic.data()); 533 px.convertFromImage(pic.data());
533 } 534 }
534 535
535 emit contactSelected( px ); 536 emit contactSelected( px );
536 } 537 }
537 } 538 }
538 539
539 540
540 mExtensionManager->setSelectionChanged(); 541 mExtensionManager->setSelectionChanged();
541 542
542 // update the actions 543 // update the actions
543 bool selected = !uid.isEmpty(); 544 bool selected = !uid.isEmpty();
544 545
545 if ( mReadWrite ) { 546 if ( mReadWrite ) {
546 mActionCut->setEnabled( selected ); 547 mActionCut->setEnabled( selected );
547 mActionPaste->setEnabled( selected ); 548 mActionPaste->setEnabled( selected );
548 } 549 }
549 550
550 mActionCopy->setEnabled( selected ); 551 mActionCopy->setEnabled( selected );
551 mActionDelete->setEnabled( selected ); 552 mActionDelete->setEnabled( selected );
552 mActionEditAddressee->setEnabled( selected ); 553 mActionEditAddressee->setEnabled( selected );
553 mActionMail->setEnabled( selected ); 554 mActionMail->setEnabled( selected );
554 mActionMailVCard->setEnabled( selected ); 555 mActionMailVCard->setEnabled( selected );
555 //if (mActionBeam) 556 //if (mActionBeam)
556 //mActionBeam->setEnabled( selected ); 557 //mActionBeam->setEnabled( selected );
557 558
558 if (mActionBeamVCard) 559 if (mActionBeamVCard)
559 mActionBeamVCard->setEnabled( selected ); 560 mActionBeamVCard->setEnabled( selected );
560 561
561 mActionExport2phone->setEnabled( selected ); 562 mActionExport2phone->setEnabled( selected );
562 mActionWhoAmI->setEnabled( selected ); 563 mActionWhoAmI->setEnabled( selected );
563 mActionCategories->setEnabled( selected ); 564 mActionCategories->setEnabled( selected );
564} 565}
565 566
566void KABCore::sendMail() 567void KABCore::sendMail()
567{ 568{
568 sendMail( mViewManager->selectedEmails().join( ", " ) ); 569 sendMail( mViewManager->selectedEmails().join( ", " ) );
569} 570}
570 571
571void KABCore::sendMail( const QString& emaillist ) 572void KABCore::sendMail( const QString& emaillist )
572{ 573{
573 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 574 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
574 if (emaillist.contains(",") > 0) 575 if (emaillist.contains(",") > 0)
575 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 576 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
576 else 577 else
577 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 578 ExternalAppHandler::instance()->mailToOneContact( emaillist );
578} 579}
579 580
580 581
581 582
582void KABCore::mailVCard() 583void KABCore::mailVCard()
583{ 584{
584 QStringList uids = mViewManager->selectedUids(); 585 QStringList uids = mViewManager->selectedUids();
585 if ( !uids.isEmpty() ) 586 if ( !uids.isEmpty() )
586 mailVCard( uids ); 587 mailVCard( uids );
587} 588}
588 589
589void KABCore::mailVCard( const QStringList& uids ) 590void KABCore::mailVCard( const QStringList& uids )
590{ 591{
591 QStringList urls; 592 QStringList urls;
592 593
593// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 594// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
594 595
595 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 596 QString dirName = "/tmp/" + KApplication::randomString( 8 );
596 597
597 598
598 599
599 QDir().mkdir( dirName, true ); 600 QDir().mkdir( dirName, true );
600 601
601 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 602 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
602 KABC::Addressee a = mAddressBook->findByUid( *it ); 603 KABC::Addressee a = mAddressBook->findByUid( *it );
603 604
604 if ( a.isEmpty() ) 605 if ( a.isEmpty() )
605 continue; 606 continue;
606 607
607 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 608 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
608 609
609 QString fileName = dirName + "/" + name; 610 QString fileName = dirName + "/" + name;
610 611
611 QFile outFile(fileName); 612 QFile outFile(fileName);
612 613
613 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 614 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
614 KABC::VCardConverter converter; 615 KABC::VCardConverter converter;
615 QString vcard; 616 QString vcard;
616 617
617 converter.addresseeToVCard( a, vcard ); 618 converter.addresseeToVCard( a, vcard );
618 619
619 QTextStream t( &outFile ); // use a text stream 620 QTextStream t( &outFile ); // use a text stream
620 t.setEncoding( QTextStream::UnicodeUTF8 ); 621 t.setEncoding( QTextStream::UnicodeUTF8 );
621 t << vcard; 622 t << vcard;
622 623
623 outFile.close(); 624 outFile.close();
624 625
625 urls.append( fileName ); 626 urls.append( fileName );
626 } 627 }
627 } 628 }
628 629
629 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 630 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
630 631
631 632
632/*US 633/*US
633 kapp->invokeMailer( QString::null, QString::null, QString::null, 634 kapp->invokeMailer( QString::null, QString::null, QString::null,
634 QString::null, // subject 635 QString::null, // subject
635 QString::null, // body 636 QString::null, // body
636 QString::null, 637 QString::null,
637 urls ); // attachments 638 urls ); // attachments
638*/ 639*/
639 640
640} 641}
641 642
642/** 643/**
643 Beams the "WhoAmI contact. 644 Beams the "WhoAmI contact.
644*/ 645*/
645void KABCore::beamMySelf() 646void KABCore::beamMySelf()
646{ 647{
647 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 648 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
648 if (!a.isEmpty()) 649 if (!a.isEmpty())
649 { 650 {
650 QStringList uids; 651 QStringList uids;
651 uids << a.uid(); 652 uids << a.uid();
652 653
653 beamVCard(uids); 654 beamVCard(uids);
654 } else { 655 } else {
655 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 656 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
656 657
657 658
658 } 659 }
659} 660}
660 661
661void KABCore::export2phone() 662void KABCore::export2phone()
662{ 663{
663 664
664 KAex2phonePrefs ex2phone; 665 KAex2phonePrefs ex2phone;
665 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 666 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
666 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 667 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
667 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 668 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
668 669
669 if ( !ex2phone.exec() ) { 670 if ( !ex2phone.exec() ) {
670 return; 671 return;
671 } 672 }
672 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 673 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
673 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 674 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
674 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 675 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
675 676
676#if 0 677
677 PhoneFormat::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 678 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
678 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 679 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
679 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 680 KPimGlobalPrefs::instance()->mEx2PhoneModel );
680 681
682 QStringList uids = mViewManager->selectedUids();
683 if ( uids.isEmpty() )
684 return;
681 685
686#ifdef _WIN32_
687 QString fileName = locateLocal("tmp", "tempfile.vcf");
688#else
689 QString fileName = "/tmp/kdepimtemp.vcf";
690#endif
682 691
683
684
685 QString fileName = "/tmp/kapibeamfile.vcf";
686
687
688 //QDir().mkdir( dirName, true );
689
690
691 KABC::VCardConverter converter; 692 KABC::VCardConverter converter;
692 QString description; 693 QString description;
693 QString datastream; 694 QString datastream;
694 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 695 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
695 KABC::Addressee a = mAddressBook->findByUid( *it ); 696 KABC::Addressee a = mAddressBook->findByUid( *it );
696 697
697 if ( a.isEmpty() ) 698 if ( a.isEmpty() )
698 continue; 699 continue;
699 700
700 if (description.isEmpty()) 701 if (description.isEmpty())
701 description = a.formattedName(); 702 description = a.formattedName();
702 703
703 QString vcard; 704 QString vcard;
704 converter.addresseeToVCard( a, vcard ); 705 converter.addresseeToVCard( a, vcard );
705 int start = 0; 706 int start = 0;
706 int next; 707 int next;
707 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 708 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
708 int semi = vcard.find(";", next); 709 int semi = vcard.find(";", next);
709 int dopp = vcard.find(":", next); 710 int dopp = vcard.find(":", next);
710 int sep; 711 int sep;
711 if ( semi < dopp && semi >= 0 ) 712 if ( semi < dopp && semi >= 0 )
712 sep = semi ; 713 sep = semi ;
713 else 714 else
714 sep = dopp; 715 sep = dopp;
715 datastream +=vcard.mid( start, next - start); 716 datastream +=vcard.mid( start, next - start);
716 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 717 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
717 start = sep; 718 start = sep;
718 } 719 }
719 datastream += vcard.mid( start,vcard.length() ); 720 datastream += vcard.mid( start,vcard.length() );
720 } 721 }
721#ifndef DESKTOP_VERSION
722 QFile outFile(fileName); 722 QFile outFile(fileName);
723 if ( outFile.open(IO_WriteOnly) ) { 723 if ( outFile.open(IO_WriteOnly) ) {
724 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 724 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
725 QTextStream t( &outFile ); // use a text stream 725 QTextStream t( &outFile ); // use a text stream
726 t.setEncoding( QTextStream::UnicodeUTF8 ); 726 t.setEncoding( QTextStream::UnicodeUTF8 );
727 t <<datastream; 727 t <<datastream;
728 outFile.close(); 728 outFile.close();
729 Ir *ir = new Ir( this );
730 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
731 ir->send( fileName, description, "text/x-vCard" );
732 } else { 729 } else {
733 qDebug("Error open temp beam file "); 730 qDebug("Error open temp file ");
734 return; 731 return;
735 } 732 }
736#endif
737
738 733
739 734
735#if 0
740 736
741 setCaption( i18n("Writing to phone...")); 737 setCaption( i18n("Writing to phone..."));
742 if ( PhoneFormat::writeToPhone( cal ) ) 738 if ( PhoneFormat::writeToPhone( cal ) )
743 setCaption( i18n("Export to phone successful!")); 739 setCaption( i18n("Export to phone successful!"));
744 else 740 else
745 setCaption( i18n("Error exporting to phone!")); 741 setCaption( i18n("Error exporting to phone!"));
746#endif 742#endif
747 743
748 744
749} 745}
750void KABCore::beamVCard() 746void KABCore::beamVCard()
751{ 747{
752 QStringList uids = mViewManager->selectedUids(); 748 QStringList uids = mViewManager->selectedUids();
753 if ( !uids.isEmpty() ) 749 if ( !uids.isEmpty() )
754 beamVCard( uids ); 750 beamVCard( uids );
755} 751}
756 752
757 753
758void KABCore::beamVCard(const QStringList& uids) 754void KABCore::beamVCard(const QStringList& uids)
759{ 755{
760/*US 756/*US
761 QString beamFilename; 757 QString beamFilename;
762 Opie::OPimContact c; 758 Opie::OPimContact c;
763 if ( actionPersonal->isOn() ) { 759 if ( actionPersonal->isOn() ) {
764 beamFilename = addressbookPersonalVCardName(); 760 beamFilename = addressbookPersonalVCardName();
765 if ( !QFile::exists( beamFilename ) ) 761 if ( !QFile::exists( beamFilename ) )
766 return; // can't beam a non-existent file 762 return; // can't beam a non-existent file
767 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 763 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
768 beamFilename ); 764 beamFilename );
769 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 765 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
770 Opie::OPimContactAccess::List allList = access->allRecords(); 766 Opie::OPimContactAccess::List allList = access->allRecords();
771 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 767 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
772 c = *it; 768 c = *it;
773 769
774 delete access; 770 delete access;
775 } else { 771 } else {
776 unlink( beamfile ); // delete if exists 772 unlink( beamfile ); // delete if exists
777 mkdir("/tmp/obex/", 0755); 773 mkdir("/tmp/obex/", 0755);
778 c = m_abView -> currentEntry(); 774 c = m_abView -> currentEntry();
779 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 775 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
780 beamfile ); 776 beamfile );
781 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 777 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
782 access->add( c ); 778 access->add( c );
783 access->save(); 779 access->save();
784 delete access; 780 delete access;
785 781
786 beamFilename = beamfile; 782 beamFilename = beamfile;
787 } 783 }
788 784
789 owarn << "Beaming: " << beamFilename << oendl; 785 owarn << "Beaming: " << beamFilename << oendl;
790*/ 786*/
791 787
792#if 0 788#if 0
793 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 789 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
794 790
795 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 791 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
796 792
797 QString name = "contact.vcf"; 793 QString name = "contact.vcf";
798 794
799 QString fileName = dirName + "/" + name; 795 QString fileName = dirName + "/" + name;
800#endif 796#endif
801 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 797 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
802 // 798 //
803 QString fileName = "/tmp/kapibeamfile.vcf"; 799 QString fileName = "/tmp/kapibeamfile.vcf";
804 800
805 801
806 //QDir().mkdir( dirName, true ); 802 //QDir().mkdir( dirName, true );
807 803
808 804
809 KABC::VCardConverter converter; 805 KABC::VCardConverter converter;
810 QString description; 806 QString description;
811 QString datastream; 807 QString datastream;
812 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 808 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
813 KABC::Addressee a = mAddressBook->findByUid( *it ); 809 KABC::Addressee a = mAddressBook->findByUid( *it );
814 810
815 if ( a.isEmpty() ) 811 if ( a.isEmpty() )
816 continue; 812 continue;
817 813
818 if (description.isEmpty()) 814 if (description.isEmpty())
819 description = a.formattedName(); 815 description = a.formattedName();
820 816
821 QString vcard; 817 QString vcard;
822 converter.addresseeToVCard( a, vcard ); 818 converter.addresseeToVCard( a, vcard );
823 int start = 0; 819 int start = 0;
824 int next; 820 int next;
825 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 821 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
826 int semi = vcard.find(";", next); 822 int semi = vcard.find(";", next);
827 int dopp = vcard.find(":", next); 823 int dopp = vcard.find(":", next);
828 int sep; 824 int sep;
829 if ( semi < dopp && semi >= 0 ) 825 if ( semi < dopp && semi >= 0 )
830 sep = semi ; 826 sep = semi ;
831 else 827 else
832 sep = dopp; 828 sep = dopp;
833 datastream +=vcard.mid( start, next - start); 829 datastream +=vcard.mid( start, next - start);
834 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 830 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
835 start = sep; 831 start = sep;
836 } 832 }
837 datastream += vcard.mid( start,vcard.length() ); 833 datastream += vcard.mid( start,vcard.length() );
838 } 834 }
839#ifndef DESKTOP_VERSION 835#ifndef DESKTOP_VERSION
840 QFile outFile(fileName); 836 QFile outFile(fileName);
841 if ( outFile.open(IO_WriteOnly) ) { 837 if ( outFile.open(IO_WriteOnly) ) {
842 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 838 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
843 QTextStream t( &outFile ); // use a text stream 839 QTextStream t( &outFile ); // use a text stream
844 t.setEncoding( QTextStream::UnicodeUTF8 ); 840 t.setEncoding( QTextStream::UnicodeUTF8 );
845 t <<datastream; 841 t <<datastream;
846 outFile.close(); 842 outFile.close();
847 Ir *ir = new Ir( this ); 843 Ir *ir = new Ir( this );
848 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 844 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
849 ir->send( fileName, description, "text/x-vCard" ); 845 ir->send( fileName, description, "text/x-vCard" );
850 } else { 846 } else {
851 qDebug("Error open temp beam file "); 847 qDebug("Error open temp beam file ");
852 return; 848 return;
853 } 849 }
854#endif 850#endif
855 851
856} 852}
857 853
858void KABCore::beamDone( Ir *ir ) 854void KABCore::beamDone( Ir *ir )
859{ 855{
860#ifndef DESKTOP_VERSION 856#ifndef DESKTOP_VERSION
861 delete ir; 857 delete ir;
862#endif 858#endif
863} 859}
864 860
865 861
866void KABCore::browse( const QString& url ) 862void KABCore::browse( const QString& url )
867{ 863{
868#ifndef KAB_EMBEDDED 864#ifndef KAB_EMBEDDED
869 kapp->invokeBrowser( url ); 865 kapp->invokeBrowser( url );
870#else //KAB_EMBEDDED 866#else //KAB_EMBEDDED
871 qDebug("KABCore::browse must be fixed"); 867 qDebug("KABCore::browse must be fixed");
872#endif //KAB_EMBEDDED 868#endif //KAB_EMBEDDED
873} 869}
874 870
875void KABCore::selectAllContacts() 871void KABCore::selectAllContacts()
876{ 872{
877 mViewManager->setSelected( QString::null, true ); 873 mViewManager->setSelected( QString::null, true );
878} 874}
879 875
880void KABCore::deleteContacts() 876void KABCore::deleteContacts()
881{ 877{
882 QStringList uidList = mViewManager->selectedUids(); 878 QStringList uidList = mViewManager->selectedUids();
883 deleteContacts( uidList ); 879 deleteContacts( uidList );
884} 880}
885 881
886void KABCore::deleteContacts( const QStringList &uids ) 882void KABCore::deleteContacts( const QStringList &uids )
887{ 883{
888 if ( uids.count() > 0 ) { 884 if ( uids.count() > 0 ) {
889 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 885 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
890 UndoStack::instance()->push( command ); 886 UndoStack::instance()->push( command );
891 RedoStack::instance()->clear(); 887 RedoStack::instance()->clear();
892 888
893 // now if we deleted anything, refresh 889 // now if we deleted anything, refresh
894 setContactSelected( QString::null ); 890 setContactSelected( QString::null );
895 setModified( true ); 891 setModified( true );
896 } 892 }
897} 893}
898 894
899void KABCore::copyContacts() 895void KABCore::copyContacts()
900{ 896{
901 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 897 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
902 898
903 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 899 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
904 900
905 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 901 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
906 902
907 QClipboard *cb = QApplication::clipboard(); 903 QClipboard *cb = QApplication::clipboard();
908 cb->setText( clipText ); 904 cb->setText( clipText );
909} 905}
910 906
911void KABCore::cutContacts() 907void KABCore::cutContacts()
912{ 908{
913 QStringList uidList = mViewManager->selectedUids(); 909 QStringList uidList = mViewManager->selectedUids();
914 910
915//US if ( uidList.size() > 0 ) { 911//US if ( uidList.size() > 0 ) {
916 if ( uidList.count() > 0 ) { 912 if ( uidList.count() > 0 ) {
917 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 913 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
918 UndoStack::instance()->push( command ); 914 UndoStack::instance()->push( command );
919 RedoStack::instance()->clear(); 915 RedoStack::instance()->clear();
920 916
921 setModified( true ); 917 setModified( true );
922 } 918 }
923} 919}
924 920
925void KABCore::pasteContacts() 921void KABCore::pasteContacts()
926{ 922{
927 QClipboard *cb = QApplication::clipboard(); 923 QClipboard *cb = QApplication::clipboard();
928 924
929 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 925 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
930 926
931 pasteContacts( list ); 927 pasteContacts( list );
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 2f286e0..ec69b11 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -1,233 +1,234 @@
1#include <stdlib.h> 1#include <stdlib.h>
2 2
3#include <qaction.h> 3#include <qaction.h>
4#include <qpopupmenu.h> 4#include <qpopupmenu.h>
5#include <qpainter.h> 5#include <qpainter.h>
6#include <qwhatsthis.h> 6#include <qwhatsthis.h>
7#include <qpushbutton.h> 7#include <qpushbutton.h>
8#include <qmessagebox.h> 8#include <qmessagebox.h>
9#include <qlineedit.h> 9#include <qlineedit.h>
10#include <qtextcodec.h> 10#include <qtextcodec.h>
11#include <qfile.h> 11#include <qfile.h>
12#include <qdir.h> 12#include <qdir.h>
13#include <qapp.h> 13#include <qapp.h>
14#include <qfileinfo.h> 14#include <qfileinfo.h>
15#include <qlabel.h> 15#include <qlabel.h>
16#include <qspinbox.h> 16#include <qspinbox.h>
17#include <qcheckbox.h> 17#include <qcheckbox.h>
18#include <qmap.h> 18#include <qmap.h>
19#include <qwmatrix.h> 19#include <qwmatrix.h>
20#include <qtextbrowser.h> 20#include <qtextbrowser.h>
21#include <qtextstream.h> 21#include <qtextstream.h>
22#ifndef DESKTOP_VERSION 22#ifndef DESKTOP_VERSION
23#include <qpe/global.h> 23#include <qpe/global.h>
24#include <qpe/qpemenubar.h> 24#include <qpe/qpemenubar.h>
25#include <qpe/qpetoolbar.h> 25#include <qpe/qpetoolbar.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/qpeapplication.h> 27#include <qpe/qpeapplication.h>
28#include <qtopia/alarmserver.h> 28#include <qtopia/alarmserver.h>
29#include <qtopia/qcopenvelope_qws.h> 29#include <qtopia/qcopenvelope_qws.h>
30#include <unistd.h> // for sleep 30#include <unistd.h> // for sleep
31#else 31#else
32#include <qmenubar.h> 32#include <qmenubar.h>
33#include <qtoolbar.h> 33#include <qtoolbar.h>
34#include <qapplication.h> 34#include <qapplication.h>
35//#include <resource.h> 35//#include <resource.h>
36 36
37#endif 37#endif
38#include <libkcal/calendarlocal.h> 38#include <libkcal/calendarlocal.h>
39#include <libkcal/todo.h> 39#include <libkcal/todo.h>
40#include <libkcal/phoneformat.h> 40#include <libkcal/phoneformat.h>
41#include <libkdepim/ksyncprofile.h> 41#include <libkdepim/ksyncprofile.h>
42#include <libkdepim/phoneaccess.h>
42#include <libkcal/kincidenceformatter.h> 43#include <libkcal/kincidenceformatter.h>
43#include <libkdepim/kpimglobalprefs.h> 44#include <libkdepim/kpimglobalprefs.h>
44 45
45#include "calendarview.h" 46#include "calendarview.h"
46#include "koviewmanager.h" 47#include "koviewmanager.h"
47#include "datenavigator.h" 48#include "datenavigator.h"
48#include "koagendaview.h" 49#include "koagendaview.h"
49#include "koagenda.h" 50#include "koagenda.h"
50#include "kodialogmanager.h" 51#include "kodialogmanager.h"
51#include "kdialogbase.h" 52#include "kdialogbase.h"
52#include "kapplication.h" 53#include "kapplication.h"
53#include "kofilterview.h" 54#include "kofilterview.h"
54#include "kstandarddirs.h" 55#include "kstandarddirs.h"
55#include "koprefs.h" 56#include "koprefs.h"
56#include "kfiledialog.h" 57#include "kfiledialog.h"
57#include "koglobals.h" 58#include "koglobals.h"
58#include "kglobal.h" 59#include "kglobal.h"
59#include "klocale.h" 60#include "klocale.h"
60#include "kconfig.h" 61#include "kconfig.h"
61#include "simplealarmclient.h" 62#include "simplealarmclient.h"
62#include "externalapphandler.h" 63#include "externalapphandler.h"
63 64
64using namespace KCal; 65using namespace KCal;
65#ifndef _WIN32_ 66#ifndef _WIN32_
66#include <unistd.h> 67#include <unistd.h>
67#else 68#else
68#include "koimportoldialog.h" 69#include "koimportoldialog.h"
69#endif 70#endif
70#include "mainwindow.h" 71#include "mainwindow.h"
71 72
72class KOex2phonePrefs : public QDialog 73class KOex2phonePrefs : public QDialog
73{ 74{
74 public: 75 public:
75 KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) : 76 KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) :
76 QDialog( parent, name, true ) 77 QDialog( parent, name, true )
77 { 78 {
78 setCaption( i18n("Export to phone options") ); 79 setCaption( i18n("Export to phone options") );
79 QVBoxLayout* lay = new QVBoxLayout( this ); 80 QVBoxLayout* lay = new QVBoxLayout( this );
80 lay->setSpacing( 3 ); 81 lay->setSpacing( 3 );
81 lay->setMargin( 3 ); 82 lay->setMargin( 3 );
82 QLabel *lab; 83 QLabel *lab;
83 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); 84 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) );
84 lab->setAlignment (AlignHCenter ); 85 lab->setAlignment (AlignHCenter );
85 QHBox* temphb; 86 QHBox* temphb;
86 temphb = new QHBox( this ); 87 temphb = new QHBox( this );
87 new QLabel( i18n("I/O device: "), temphb ); 88 new QLabel( i18n("I/O device: "), temphb );
88 mPhoneDevice = new QLineEdit( temphb); 89 mPhoneDevice = new QLineEdit( temphb);
89 lay->addWidget( temphb ); 90 lay->addWidget( temphb );
90 temphb = new QHBox( this ); 91 temphb = new QHBox( this );
91 new QLabel( i18n("Connection: "), temphb ); 92 new QLabel( i18n("Connection: "), temphb );
92 mPhoneConnection = new QLineEdit( temphb); 93 mPhoneConnection = new QLineEdit( temphb);
93 lay->addWidget( temphb ); 94 lay->addWidget( temphb );
94 temphb = new QHBox( this ); 95 temphb = new QHBox( this );
95 new QLabel( i18n("Model(opt.): "), temphb ); 96 new QLabel( i18n("Model(opt.): "), temphb );
96 mPhoneModel = new QLineEdit( temphb); 97 mPhoneModel = new QLineEdit( temphb);
97 lay->addWidget( temphb ); 98 lay->addWidget( temphb );
98 mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this ); 99 mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this );
99 mWriteBackFuture->setChecked( true ); 100 mWriteBackFuture->setChecked( true );
100 lay->addWidget( mWriteBackFuture ); 101 lay->addWidget( mWriteBackFuture );
101 temphb = new QHBox( this ); 102 temphb = new QHBox( this );
102 new QLabel( i18n("Max. weeks in future: ") , temphb ); 103 new QLabel( i18n("Max. weeks in future: ") , temphb );
103 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb); 104 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb);
104 mWriteBackFutureWeeks->setValue( 8 ); 105 mWriteBackFutureWeeks->setValue( 8 );
105 lay->addWidget( temphb ); 106 lay->addWidget( temphb );
106 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) ); 107 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) );
107 lab->setAlignment (AlignHCenter ); 108 lab->setAlignment (AlignHCenter );
108 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); 109 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this );
109 lay->addWidget( ok ); 110 lay->addWidget( ok );
110 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 111 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
111 lay->addWidget( cancel ); 112 lay->addWidget( cancel );
112 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 113 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
113 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 114 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
114 resize( 220, 240 ); 115 resize( 220, 240 );
115 116
116 } 117 }
117 118
118public: 119public:
119 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; 120 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel;
120 QCheckBox* mWriteBackFuture; 121 QCheckBox* mWriteBackFuture;
121 QSpinBox* mWriteBackFutureWeeks; 122 QSpinBox* mWriteBackFutureWeeks;
122}; 123};
123 124
124int globalFlagBlockStartup; 125int globalFlagBlockStartup;
125MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : 126MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
126 QMainWindow( parent, name ) 127 QMainWindow( parent, name )
127{ 128{
128 mPassWordPiSync = "abc"; 129 mPassWordPiSync = "abc";
129#ifdef DESKTOP_VERSION 130#ifdef DESKTOP_VERSION
130 setFont( QFont("Arial"), 14 ); 131 setFont( QFont("Arial"), 14 );
131#endif 132#endif
132 mSyncActionDialog = 0; 133 mSyncActionDialog = 0;
133 mServerSocket = 0; 134 mServerSocket = 0;
134 mClosed = false; 135 mClosed = false;
135 //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; 136 //QString confFile = KStandardDirs::appDir() + "config/korganizerrc";
136 QString confFile = locateLocal("config","korganizerrc"); 137 QString confFile = locateLocal("config","korganizerrc");
137 QFileInfo finf ( confFile ); 138 QFileInfo finf ( confFile );
138 bool showWarning = !finf.exists(); 139 bool showWarning = !finf.exists();
139 setIcon(SmallIcon( "ko24" ) ); 140 setIcon(SmallIcon( "ko24" ) );
140 mBlockAtStartup = true; 141 mBlockAtStartup = true;
141 mFlagKeyPressed = false; 142 mFlagKeyPressed = false;
142 setCaption("KOrganizer/Pi"); 143 setCaption("KOrganizer/Pi");
143 KOPrefs *p = KOPrefs::instance(); 144 KOPrefs *p = KOPrefs::instance();
144 KPimGlobalPrefs::instance()->setGlobalConfig(); 145 KPimGlobalPrefs::instance()->setGlobalConfig();
145 // if ( QApplication::desktop()->height() > 480 ) { 146 // if ( QApplication::desktop()->height() > 480 ) {
146// if ( p->mHourSize == 4 ) 147// if ( p->mHourSize == 4 )
147// p->mHourSize = 6; 148// p->mHourSize = 6;
148// } 149// }
149 if ( p->mHourSize > 18 ) 150 if ( p->mHourSize > 18 )
150 p->mHourSize = 18; 151 p->mHourSize = 18;
151 QMainWindow::ToolBarDock tbd; 152 QMainWindow::ToolBarDock tbd;
152 if ( p->mToolBarHor ) { 153 if ( p->mToolBarHor ) {
153 if ( p->mToolBarUp ) 154 if ( p->mToolBarUp )
154 tbd = Bottom; 155 tbd = Bottom;
155 else 156 else
156 tbd = Top; 157 tbd = Top;
157 } 158 }
158 else { 159 else {
159 if ( p->mToolBarUp ) 160 if ( p->mToolBarUp )
160 tbd = Right; 161 tbd = Right;
161 else 162 else
162 tbd = Left; 163 tbd = Left;
163 } 164 }
164 if ( KOPrefs::instance()->mUseAppColors ) 165 if ( KOPrefs::instance()->mUseAppColors )
165 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 166 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
166 globalFlagBlockStartup = 1; 167 globalFlagBlockStartup = 1;
167 iconToolBar = new QPEToolBar( this ); 168 iconToolBar = new QPEToolBar( this );
168 addToolBar (iconToolBar , tbd ); 169 addToolBar (iconToolBar , tbd );
169 mBlockSaveFlag = false; 170 mBlockSaveFlag = false;
170 mCalendarModifiedFlag = false; 171 mCalendarModifiedFlag = false;
171 172
172 QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); 173 QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this );
173 splash->setAlignment ( AlignCenter ); 174 splash->setAlignment ( AlignCenter );
174 setCentralWidget( splash ); 175 setCentralWidget( splash );
175#ifndef DESKTOP_VERSION 176#ifndef DESKTOP_VERSION
176 showMaximized(); 177 showMaximized();
177#endif 178#endif
178 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); 179 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ());
179 setDefaultPreferences(); 180 setDefaultPreferences();
180 mCalendar = new CalendarLocal(); 181 mCalendar = new CalendarLocal();
181 mView = new CalendarView( mCalendar, this,"mCalendar " ); 182 mView = new CalendarView( mCalendar, this,"mCalendar " );
182 mView->hide(); 183 mView->hide();
183 //mView->resize(splash->size() ); 184 //mView->resize(splash->size() );
184 initActions(); 185 initActions();
185#ifndef DESKTOP_VERSION 186#ifndef DESKTOP_VERSION
186 iconToolBar->show(); 187 iconToolBar->show();
187 qApp->processEvents(); 188 qApp->processEvents();
188#endif 189#endif
189 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); 190 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ());
190 int vh = height() ; 191 int vh = height() ;
191 int vw = width(); 192 int vw = width();
192 //qDebug("Toolbar hei %d ",iconToolBar->height() ); 193 //qDebug("Toolbar hei %d ",iconToolBar->height() );
193 if ( iconToolBar->orientation () == Qt:: Horizontal ) { 194 if ( iconToolBar->orientation () == Qt:: Horizontal ) {
194 vh -= iconToolBar->height(); 195 vh -= iconToolBar->height();
195 } else { 196 } else {
196 vw -= iconToolBar->height(); 197 vw -= iconToolBar->height();
197 } 198 }
198 //mView->setMaximumSize( splash->size() ); 199 //mView->setMaximumSize( splash->size() );
199 //mView->resize( splash->size() ); 200 //mView->resize( splash->size() );
200 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 201 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
201 mView->readSettings(); 202 mView->readSettings();
202 bool newFile = false; 203 bool newFile = false;
203 if( !QFile::exists( defaultFileName() ) ) { 204 if( !QFile::exists( defaultFileName() ) ) {
204 QFileInfo finfo ( defaultFileName() ); 205 QFileInfo finfo ( defaultFileName() );
205 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics"); 206 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics");
206 qDebug("oldfile %s ", oldFile.latin1()); 207 qDebug("oldfile %s ", oldFile.latin1());
207 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n"; 208 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n";
208 finfo.setFile( oldFile ); 209 finfo.setFile( oldFile );
209 if (finfo.exists() ) { 210 if (finfo.exists() ) {
210 KMessageBox::information( this, message); 211 KMessageBox::information( this, message);
211 mView->openCalendar( oldFile ); 212 mView->openCalendar( oldFile );
212 qApp->processEvents(); 213 qApp->processEvents();
213 } else { 214 } else {
214 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); 215 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics");
215 finfo.setFile( oldFile ); 216 finfo.setFile( oldFile );
216 if (finfo.exists() ) { 217 if (finfo.exists() ) {
217 KMessageBox::information( this, message); 218 KMessageBox::information( this, message);
218 mView->openCalendar( oldFile ); 219 mView->openCalendar( oldFile );
219 qApp->processEvents(); 220 qApp->processEvents();
220 } 221 }
221 } 222 }
222 mView->saveCalendar( defaultFileName() ); 223 mView->saveCalendar( defaultFileName() );
223 newFile = true; 224 newFile = true;
224 } 225 }
225 226
226 QTime neededSaveTime = QDateTime::currentDateTime().time(); 227 QTime neededSaveTime = QDateTime::currentDateTime().time();
227 mView->openCalendar( defaultFileName() ); 228 mView->openCalendar( defaultFileName() );
228 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 229 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
229 qDebug("KO: Calendar loading time: %d ms",msNeeded ); 230 qDebug("KO: Calendar loading time: %d ms",msNeeded );
230 231
231 if ( KOPrefs::instance()->mLanguageChanged ) { 232 if ( KOPrefs::instance()->mLanguageChanged ) {
232 KOPrefs::instance()->setCategoryDefaults(); 233 KOPrefs::instance()->setCategoryDefaults();
233 int count = mView->addCategories(); 234 int count = mView->addCategories();
@@ -1043,386 +1044,386 @@ int MainWindow::ringSync()
1043 setCaption(i18n("Multiple sync in progress ... please wait!") ); 1044 setCaption(i18n("Multiple sync in progress ... please wait!") );
1044 while ( timer.elapsed () < 2000 ) { 1045 while ( timer.elapsed () < 2000 ) {
1045 qApp->processEvents(); 1046 qApp->processEvents();
1046#ifndef _WIN32_ 1047#ifndef _WIN32_
1047 sleep (1); 1048 sleep (1);
1048#endif 1049#endif
1049 } 1050 }
1050 1051
1051 } 1052 }
1052 1053
1053 } 1054 }
1054 delete temp; 1055 delete temp;
1055 return syncedProfiles; 1056 return syncedProfiles;
1056} 1057}
1057 1058
1058void MainWindow::multiSync( bool askforPrefs ) 1059void MainWindow::multiSync( bool askforPrefs )
1059{ 1060{
1060 if (mBlockSaveFlag) 1061 if (mBlockSaveFlag)
1061 return; 1062 return;
1062 mBlockSaveFlag = true; 1063 mBlockSaveFlag = true;
1063 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 1064 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
1064 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 1065 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
1065 question, 1066 question,
1066 i18n("Yes"), i18n("No"), 1067 i18n("Yes"), i18n("No"),
1067 0, 0 ) != 0 ) { 1068 0, 0 ) != 0 ) {
1068 mBlockSaveFlag = false; 1069 mBlockSaveFlag = false;
1069 setCaption(i18n("Aborted! Nothing synced!")); 1070 setCaption(i18n("Aborted! Nothing synced!"));
1070 return; 1071 return;
1071 } 1072 }
1072 mView->setSyncDevice(i18n("Multiple profiles") ); 1073 mView->setSyncDevice(i18n("Multiple profiles") );
1073 KOPrefs::instance()->mSyncAlgoPrefs = KOPrefs::instance()->mRingSyncAlgoPrefs; 1074 KOPrefs::instance()->mSyncAlgoPrefs = KOPrefs::instance()->mRingSyncAlgoPrefs;
1074 if ( askforPrefs ) { 1075 if ( askforPrefs ) {
1075 mView->edit_sync_options(); 1076 mView->edit_sync_options();
1076 KOPrefs::instance()->mRingSyncAlgoPrefs = KOPrefs::instance()->mSyncAlgoPrefs; 1077 KOPrefs::instance()->mRingSyncAlgoPrefs = KOPrefs::instance()->mSyncAlgoPrefs;
1077 } 1078 }
1078 setCaption(i18n("Multiple sync started.") ); 1079 setCaption(i18n("Multiple sync started.") );
1079 qApp->processEvents(); 1080 qApp->processEvents();
1080 int num = ringSync() ; 1081 int num = ringSync() ;
1081 if ( num > 1 ) 1082 if ( num > 1 )
1082 ringSync(); 1083 ringSync();
1083 mBlockSaveFlag = false; 1084 mBlockSaveFlag = false;
1084 if ( num ) 1085 if ( num )
1085 save(); 1086 save();
1086 if ( num ) 1087 if ( num )
1087 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 1088 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
1088 else 1089 else
1089 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 1090 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
1090 return; 1091 return;
1091} 1092}
1092void MainWindow::slotSyncMenu( int action ) 1093void MainWindow::slotSyncMenu( int action )
1093{ 1094{
1094 qDebug("syncaction %d ", action); 1095 qDebug("syncaction %d ", action);
1095 if ( action == 0 ) { 1096 if ( action == 0 ) {
1096 1097
1097 // seems to be a Qt2 event handling bug 1098 // seems to be a Qt2 event handling bug
1098 // syncmenu.clear causes a segfault at first time 1099 // syncmenu.clear causes a segfault at first time
1099 // when we call it after the main event loop, it is ok 1100 // when we call it after the main event loop, it is ok
1100 // same behaviour when calling OM/Pi via QCOP for the first time 1101 // same behaviour when calling OM/Pi via QCOP for the first time
1101 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 1102 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
1102 //confSync(); 1103 //confSync();
1103 1104
1104 return; 1105 return;
1105 } 1106 }
1106 if ( action == 1 ) { 1107 if ( action == 1 ) {
1107 multiSync( true ); 1108 multiSync( true );
1108 return; 1109 return;
1109 } 1110 }
1110 if ( action == 2 ) { 1111 if ( action == 2 ) {
1111 enableQuick(); 1112 enableQuick();
1112 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 1113 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
1113 return; 1114 return;
1114 } 1115 }
1115 if ( action == 3 ) { 1116 if ( action == 3 ) {
1116 delete mServerSocket; 1117 delete mServerSocket;
1117 mServerSocket = 0; 1118 mServerSocket = 0;
1118 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 1119 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
1119 return; 1120 return;
1120 } 1121 }
1121 1122
1122 if (mBlockSaveFlag) 1123 if (mBlockSaveFlag)
1123 return; 1124 return;
1124 mBlockSaveFlag = true; 1125 mBlockSaveFlag = true;
1125 mCurrentSyncProfile = action - 1000 ; 1126 mCurrentSyncProfile = action - 1000 ;
1126 mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ); 1127 mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] );
1127 mView->setSyncName( KOPrefs::instance()->mLocalMachineName ); 1128 mView->setSyncName( KOPrefs::instance()->mLocalMachineName );
1128 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 1129 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
1129 KSyncProfile* temp = new KSyncProfile (); 1130 KSyncProfile* temp = new KSyncProfile ();
1130 temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 1131 temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
1131 temp->readConfig(&config); 1132 temp->readConfig(&config);
1132 KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 1133 KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
1133 KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 1134 KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
1134 KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 1135 KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
1135 KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 1136 KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
1136 KOPrefs::instance()->mWriteBackInFuture = 0; 1137 KOPrefs::instance()->mWriteBackInFuture = 0;
1137 if ( temp->getWriteBackFuture() ) 1138 if ( temp->getWriteBackFuture() )
1138 KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 1139 KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
1139 KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 1140 KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
1140 if ( action == 1000 ) { 1141 if ( action == 1000 ) {
1141 syncSharp(); 1142 syncSharp();
1142 1143
1143 } else if ( action == 1001 ) { 1144 } else if ( action == 1001 ) {
1144 syncLocalFile(); 1145 syncLocalFile();
1145 1146
1146 } else if ( action == 1002 ) { 1147 } else if ( action == 1002 ) {
1147 quickSyncLocalFile(); 1148 quickSyncLocalFile();
1148 1149
1149 } else if ( action >= 1003 ) { 1150 } else if ( action >= 1003 ) {
1150 if ( temp->getIsLocalFileSync() ) { 1151 if ( temp->getIsLocalFileSync() ) {
1151 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 1152 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
1152 KOPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileName(); 1153 KOPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileName();
1153 } else { 1154 } else {
1154 if ( temp->getIsPhoneSync() ) { 1155 if ( temp->getIsPhoneSync() ) {
1155 KOPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 1156 KOPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
1156 KOPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 1157 KOPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
1157 KOPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 1158 KOPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
1158 syncPhone(); 1159 syncPhone();
1159 } else if ( temp->getIsPiSync() ) { 1160 } else if ( temp->getIsPiSync() ) {
1160 mPassWordPiSync = temp->getRemotePw(); 1161 mPassWordPiSync = temp->getRemotePw();
1161 KOPrefs::instance()->mActiveSyncPort = temp->getRemotePort(); 1162 KOPrefs::instance()->mActiveSyncPort = temp->getRemotePort();
1162 KOPrefs::instance()->mActiveSyncIP = temp->getRemoteIP(); 1163 KOPrefs::instance()->mActiveSyncIP = temp->getRemoteIP();
1163 syncPi(); 1164 syncPi();
1164 } else 1165 } else
1165 syncRemote( temp ); 1166 syncRemote( temp );
1166 1167
1167 } 1168 }
1168 } 1169 }
1169 delete temp; 1170 delete temp;
1170 mBlockSaveFlag = false; 1171 mBlockSaveFlag = false;
1171} 1172}
1172void MainWindow::exportToPhone( int mode ) 1173void MainWindow::exportToPhone( int mode )
1173{ 1174{
1174 1175
1175 //ex2phone->insertItem(i18n("Complete calendar..."), 1 ); 1176 //ex2phone->insertItem(i18n("Complete calendar..."), 1 );
1176 //ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); 1177 //ex2phone->insertItem(i18n("Filtered calendar..."), 2 );
1177 KOex2phonePrefs ex2phone; 1178 KOex2phonePrefs ex2phone;
1178 1179
1179 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 1180 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
1180 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 1181 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
1181 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 1182 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
1182 if ( mode == 1 ) 1183 if ( mode == 1 )
1183 ex2phone.setCaption(i18n("Export complete calendar")); 1184 ex2phone.setCaption(i18n("Export complete calendar"));
1184 if ( mode == 2 ) 1185 if ( mode == 2 )
1185 ex2phone.setCaption(i18n("Export filtered calendar")); 1186 ex2phone.setCaption(i18n("Export filtered calendar"));
1186 1187
1187 if ( !ex2phone.exec() ) { 1188 if ( !ex2phone.exec() ) {
1188 return; 1189 return;
1189 } 1190 }
1190 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 1191 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
1191 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 1192 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
1192 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 1193 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
1193 1194
1194 int inFuture = 0; 1195 int inFuture = 0;
1195 if ( ex2phone.mWriteBackFuture->isChecked() ) 1196 if ( ex2phone.mWriteBackFuture->isChecked() )
1196 inFuture = ex2phone.mWriteBackFutureWeeks->value(); 1197 inFuture = ex2phone.mWriteBackFutureWeeks->value();
1197 QPtrList<Incidence> delSel; 1198 QPtrList<Incidence> delSel;
1198 if ( mode == 1 ) 1199 if ( mode == 1 )
1199 delSel = mCalendar->rawIncidences(); 1200 delSel = mCalendar->rawIncidences();
1200 if ( mode == 2 ) 1201 if ( mode == 2 )
1201 delSel = mCalendar->incidences(); 1202 delSel = mCalendar->incidences();
1202 CalendarLocal* cal = new CalendarLocal(); 1203 CalendarLocal* cal = new CalendarLocal();
1203 cal->setLocalTime(); 1204 cal->setLocalTime();
1204 Incidence *incidence = delSel.first(); 1205 Incidence *incidence = delSel.first();
1205 QDateTime cur = QDateTime::currentDateTime().addDays( -7 ); 1206 QDateTime cur = QDateTime::currentDateTime().addDays( -7 );
1206 QDateTime end = cur.addDays( ( inFuture +1 ) *7 ); 1207 QDateTime end = cur.addDays( ( inFuture +1 ) *7 );
1207 while ( incidence ) { 1208 while ( incidence ) {
1208 if ( incidence->type() != "Journal" ) { 1209 if ( incidence->type() != "Journal" ) {
1209 bool add = true; 1210 bool add = true;
1210 if ( inFuture ) { 1211 if ( inFuture ) {
1211 QDateTime dt; 1212 QDateTime dt;
1212 if ( incidence->type() == "Todo" ) { 1213 if ( incidence->type() == "Todo" ) {
1213 Todo * t = (Todo*)incidence; 1214 Todo * t = (Todo*)incidence;
1214 if ( t->hasDueDate() ) 1215 if ( t->hasDueDate() )
1215 dt = t->dtDue(); 1216 dt = t->dtDue();
1216 else 1217 else
1217 dt = cur.addSecs( 62 ); 1218 dt = cur.addSecs( 62 );
1218 } 1219 }
1219 else { 1220 else {
1220 bool ok; 1221 bool ok;
1221 dt = incidence->getNextOccurence( cur, &ok ); 1222 dt = incidence->getNextOccurence( cur, &ok );
1222 if ( !ok ) 1223 if ( !ok )
1223 dt = cur.addSecs( -62 ); 1224 dt = cur.addSecs( -62 );
1224 } 1225 }
1225 if ( dt < cur || dt > end ) { 1226 if ( dt < cur || dt > end ) {
1226 add = false; 1227 add = false;
1227 } 1228 }
1228 } 1229 }
1229 if ( add ) { 1230 if ( add ) {
1230 Incidence *in = incidence->clone(); 1231 Incidence *in = incidence->clone();
1231 cal->addIncidence( in ); 1232 cal->addIncidence( in );
1232 } 1233 }
1233 } 1234 }
1234 incidence = delSel.next(); 1235 incidence = delSel.next();
1235 } 1236 }
1236 PhoneFormat::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 1237 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
1237 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 1238 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
1238 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 1239 KPimGlobalPrefs::instance()->mEx2PhoneModel );
1239 1240
1240 setCaption( i18n("Writing to phone...")); 1241 setCaption( i18n("Writing to phone..."));
1241 if ( PhoneFormat::writeToPhone( cal ) ) 1242 if ( PhoneFormat::writeToPhone( cal ) )
1242 setCaption( i18n("Export to phone successful!")); 1243 setCaption( i18n("Export to phone successful!"));
1243 else 1244 else
1244 setCaption( i18n("Error exporting to phone!")); 1245 setCaption( i18n("Error exporting to phone!"));
1245 delete cal; 1246 delete cal;
1246} 1247}
1247 1248
1248 1249
1249void MainWindow::setDefaultPreferences() 1250void MainWindow::setDefaultPreferences()
1250{ 1251{
1251 KOPrefs *p = KOPrefs::instance(); 1252 KOPrefs *p = KOPrefs::instance();
1252 1253
1253 p->mCompactDialogs = true; 1254 p->mCompactDialogs = true;
1254 p->mConfirm = true; 1255 p->mConfirm = true;
1255 // p->mEnableQuickTodo = false; 1256 // p->mEnableQuickTodo = false;
1256 1257
1257} 1258}
1258 1259
1259QString MainWindow::resourcePath() 1260QString MainWindow::resourcePath()
1260{ 1261{
1261 return KGlobal::iconLoader()->iconPath(); 1262 return KGlobal::iconLoader()->iconPath();
1262} 1263}
1263 1264
1264void MainWindow::displayText( QString text ,QString cap ) 1265void MainWindow::displayText( QString text ,QString cap )
1265{ 1266{
1266 QDialog dia( this, "name", true ); ; 1267 QDialog dia( this, "name", true ); ;
1267 dia.setCaption( cap ); 1268 dia.setCaption( cap );
1268 QVBoxLayout* lay = new QVBoxLayout( &dia ); 1269 QVBoxLayout* lay = new QVBoxLayout( &dia );
1269 lay->setSpacing( 3 ); 1270 lay->setSpacing( 3 );
1270 lay->setMargin( 3 ); 1271 lay->setMargin( 3 );
1271 QTextBrowser tb ( &dia ); 1272 QTextBrowser tb ( &dia );
1272 lay->addWidget( &tb ); 1273 lay->addWidget( &tb );
1273 tb.setText( text ); 1274 tb.setText( text );
1274#ifdef DESKTOP_VERSION 1275#ifdef DESKTOP_VERSION
1275 dia.resize( 640, 480); 1276 dia.resize( 640, 480);
1276#else 1277#else
1277 dia.showMaximized(); 1278 dia.showMaximized();
1278#endif 1279#endif
1279 dia.exec(); 1280 dia.exec();
1280} 1281}
1281void MainWindow::displayFile( QString fn, QString cap ) 1282void MainWindow::displayFile( QString fn, QString cap )
1282{ 1283{
1283 QString fileName = resourcePath() + fn; 1284 QString fileName = resourcePath() + fn;
1284 QString text; 1285 QString text;
1285 QFile file( fileName ); 1286 QFile file( fileName );
1286 if (!file.open( IO_ReadOnly ) ) { 1287 if (!file.open( IO_ReadOnly ) ) {
1287 return ; 1288 return ;
1288 1289
1289 } 1290 }
1290 QTextStream ts( &file ); 1291 QTextStream ts( &file );
1291 text = ts.read(); 1292 text = ts.read();
1292 file.close(); 1293 file.close();
1293 displayText( text, cap); 1294 displayText( text, cap);
1294} 1295}
1295void MainWindow::features() 1296void MainWindow::features()
1296{ 1297{
1297 1298
1298 displayFile( "featuresKOPI.txt",i18n("KO/Pi Features and hints") ); 1299 displayFile( "featuresKOPI.txt",i18n("KO/Pi Features and hints") );
1299} 1300}
1300 1301
1301void MainWindow::usertrans() 1302void MainWindow::usertrans()
1302{ 1303{
1303 1304
1304 displayFile( "usertranslationHOWTO.txt",i18n("KO/Pi User translation HowTo") ); 1305 displayFile( "usertranslationHOWTO.txt",i18n("KO/Pi User translation HowTo") );
1305} 1306}
1306 1307
1307void MainWindow::synchowto() 1308void MainWindow::synchowto()
1308{ 1309{
1309#if 0 1310#if 0
1310 QPtrList<Incidence> er = mCalendar->rawIncidences(); 1311 QPtrList<Incidence> er = mCalendar->rawIncidences();
1311 Incidence* inR = er.first(); 1312 Incidence* inR = er.first();
1312 VCalFormat vf; 1313 VCalFormat vf;
1313 QString strout; 1314 QString strout;
1314 while ( inR ) { 1315 while ( inR ) {
1315 if ( inR->type() == "Todo" ) 1316 if ( inR->type() == "Todo" )
1316 strout = vf.todoToString( (Todo *) inR ); 1317 strout = vf.todoToString( (Todo *) inR );
1317 if ( inR->type() == "Event" ) 1318 if ( inR->type() == "Event" )
1318 strout = vf.eventToString( (Event *) inR ); 1319 strout = vf.eventToString( (Event *) inR );
1319 qDebug("incidence: \n%s\n ente\n\n",strout.latin1() ); 1320 qDebug("incidence: \n%s\n ente\n\n",strout.latin1() );
1320 inR = er.next(); 1321 inR = er.next();
1321 } 1322 }
1322#endif 1323#endif
1323 displayFile( "howtoSYNC.txt",i18n("KO/Pi Synchronization HowTo") ); 1324 displayFile( "howtoSYNC.txt",i18n("KO/Pi Synchronization HowTo") );
1324} 1325}
1325void MainWindow::faq() 1326void MainWindow::faq()
1326{ 1327{
1327 displayFile( "kopiFAQ.txt",i18n("KO/Pi FAQ") ); 1328 displayFile( "kopiFAQ.txt",i18n("KO/Pi FAQ") );
1328 1329
1329} 1330}
1330void MainWindow::whatsNew() 1331void MainWindow::whatsNew()
1331{ 1332{
1332 displayFile( "kopiWhatsNew.txt",i18n("KO/Pi Version Info") ); 1333 displayFile( "kopiWhatsNew.txt",i18n("KO/Pi Version Info") );
1333 1334
1334} 1335}
1335void MainWindow::licence() 1336void MainWindow::licence()
1336{ 1337{
1337 KApplication::showLicence(); 1338 KApplication::showLicence();
1338 1339
1339} 1340}
1340void MainWindow::about() 1341void MainWindow::about()
1341{ 1342{
1342 QString version; 1343 QString version;
1343#include <../version> 1344#include <../version>
1344 QMessageBox::about( this, i18n("About KOrganizer/Pi"), 1345 QMessageBox::about( this, i18n("About KOrganizer/Pi"),
1345 i18n("KOrganizer/Platform-independent\n") + 1346 i18n("KOrganizer/Platform-independent\n") +
1346 "(KO/Pi) " + version + " - " + 1347 "(KO/Pi) " + version + " - " +
1347 1348
1348#ifdef DESKTOP_VERSION 1349#ifdef DESKTOP_VERSION
1349 i18n("Desktop Edition\n") + 1350 i18n("Desktop Edition\n") +
1350#else 1351#else
1351 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") + 1352 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") +
1352#endif 1353#endif
1353 i18n("(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n") ); 1354 i18n("(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n") );
1354} 1355}
1355void MainWindow::keyBindings() 1356void MainWindow::keyBindings()
1356{ 1357{
1357 QString cap = i18n("Key bindings KOrganizer/Pi"); 1358 QString cap = i18n("Key bindings KOrganizer/Pi");
1358 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + 1359 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") +
1359 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ 1360 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+
1360 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + 1361 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") +
1361 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ 1362 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+
1362 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+ 1363 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+
1363 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ 1364 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+
1364 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ 1365 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+
1365 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+ 1366 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+
1366 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ 1367 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+
1367 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ 1368 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+
1368 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ 1369 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+
1369 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ 1370 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+
1370 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ 1371 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+
1371 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+ 1372 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+
1372 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ 1373 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+
1373 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ 1374 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+
1374 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ 1375 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+
1375 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ 1376 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+
1376 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ 1377 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+
1377 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ 1378 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+
1378 i18n("<p><h3>In agenda view:</h3></p>\n") + 1379 i18n("<p><h3>In agenda view:</h3></p>\n") +
1379 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ 1380 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+
1380 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ 1381 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+
1381 i18n("<p><h3>In todo view:</h3></p>\n") + 1382 i18n("<p><h3>In todo view:</h3></p>\n") +
1382 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ 1383 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+
1383 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1384 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1384 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ 1385 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+
1385 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ 1386 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+
1386 i18n("<p><h3>In list view:</h3></p>\n") + 1387 i18n("<p><h3>In list view:</h3></p>\n") +
1387 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1388 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1388 i18n("<p><b>return</b>: Select item+one step down</p>\n")+ 1389 i18n("<p><b>return</b>: Select item+one step down</p>\n")+
1389 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ 1390 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+
1390 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ 1391 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+
1391 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ 1392 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+
1392 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ 1393 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+
1393 i18n("<p><h3>In event/todo viewer:</h3></p>\n") + 1394 i18n("<p><h3>In event/todo viewer:</h3></p>\n") +
1394 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+ 1395 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+
1395 i18n("<p><b>A</b>: Show agenda view.</p>\n")+ 1396 i18n("<p><b>A</b>: Show agenda view.</p>\n")+
1396 i18n("<p><b>E</b>: Edit item</p>\n") + 1397 i18n("<p><b>E</b>: Edit item</p>\n") +
1397 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") + 1398 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") +
1398 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") + 1399 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") +
1399 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+ 1400 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+
1400 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+ 1401 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+
1401 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+ 1402 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+
1402 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+ 1403 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+
1403 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+ 1404 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+
1404 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + 1405 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") +
1405 i18n("<p><b>White</b>: Item readonly</p>\n"); 1406 i18n("<p><b>White</b>: Item readonly</p>\n");
1406 displayText( text, cap); 1407 displayText( text, cap);
1407 1408
1408} 1409}
1409void MainWindow::aboutAutoSaving() 1410void MainWindow::aboutAutoSaving()
1410{ 1411{
1411 QMessageBox* msg; 1412 QMessageBox* msg;
1412 msg = new QMessageBox( i18n("Auto Saving in KOrganizer/Pi"), 1413 msg = new QMessageBox( i18n("Auto Saving in KOrganizer/Pi"),
1413 i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configureable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"), QMessageBox::NoIcon, 1414 i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configureable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"), QMessageBox::NoIcon,
1414 QMessageBox::Ok, 1415 QMessageBox::Ok,
1415 QMessageBox::NoButton, 1416 QMessageBox::NoButton,
1416 QMessageBox::NoButton); 1417 QMessageBox::NoButton);
1417 msg->exec(); 1418 msg->exec();
1418 delete msg; 1419 delete msg;
1419 1420
1420 1421
1421} 1422}
1422void MainWindow::aboutKnownBugs() 1423void MainWindow::aboutKnownBugs()
1423{ 1424{
1424 QMessageBox* msg; 1425 QMessageBox* msg;
1425 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), 1426 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"),
1426 i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ 1427 i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+
1427 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ 1428 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+
1428 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") + 1429 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") +
diff --git a/libkcal/libkcal.pro b/libkcal/libkcal.pro
index 7a0bd22..171c726 100644
--- a/libkcal/libkcal.pro
+++ b/libkcal/libkcal.pro
@@ -1,106 +1,106 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2 CONFIG += qt warn_on 2 CONFIG += qt warn_on
3 TARGET = microkcal 3 TARGET = microkcal
4 4
5include( ../variables.pri ) 5include( ../variables.pri )
6 6
7INCLUDEPATH += ../microkde versit ../microkde/kdecore 7INCLUDEPATH += ../libkdepim ../microkde versit ../microkde/kdecore
8#../qtcompat 8#../qtcompat
9INCLUDEPATH += ../libical/src/libical 9INCLUDEPATH += ../libical/src/libical
10INCLUDEPATH += ../libical/src/libicalss 10INCLUDEPATH += ../libical/src/libicalss
11DESTDIR = ../bin 11DESTDIR = ../bin
12DEFINES += DESKTOP_VERSION 12DEFINES += DESKTOP_VERSION
13unix: { 13unix: {
14LIBS += ../libical/lib/libical.a 14LIBS += ../libical/lib/libical.a
15LIBS += ../libical/lib/libicalss.a 15LIBS += ../libical/lib/libicalss.a
16OBJECTS_DIR = obj/unix 16OBJECTS_DIR = obj/unix
17MOC_DIR = moc/unix 17MOC_DIR = moc/unix
18} 18}
19win32: { 19win32: {
20DEFINES += _WIN32_ 20DEFINES += _WIN32_
21 21
22LIBS += ../libical/lib/ical.lib 22LIBS += ../libical/lib/ical.lib
23LIBS += ../libical/lib/icalss.lib 23LIBS += ../libical/lib/icalss.lib
24OBJECTS_DIR = obj/win 24OBJECTS_DIR = obj/win
25MOC_DIR = moc/win 25MOC_DIR = moc/win
26 26
27} 27}
28 28
29INTERFACES = \ 29INTERFACES = \
30 30
31HEADERS = \ 31HEADERS = \
32 alarm.h \ 32 alarm.h \
33 attachment.h \ 33 attachment.h \
34 attendee.h \ 34 attendee.h \
35 calendar.h \ 35 calendar.h \
36 calendarlocal.h \ 36 calendarlocal.h \
37 calfilter.h \ 37 calfilter.h \
38 calformat.h \ 38 calformat.h \
39 calstorage.h \ 39 calstorage.h \
40 compat.h \ 40 compat.h \
41 customproperties.h \ 41 customproperties.h \
42 dummyscheduler.h \ 42 dummyscheduler.h \
43kincidenceformatter.h \ 43kincidenceformatter.h \
44 duration.h \ 44 duration.h \
45 event.h \ 45 event.h \
46 exceptions.h \ 46 exceptions.h \
47 filestorage.h \ 47 filestorage.h \
48 freebusy.h \ 48 freebusy.h \
49 icaldrag.h \ 49 icaldrag.h \
50 icalformat.h \ 50 icalformat.h \
51 icalformatimpl.h \ 51 icalformatimpl.h \
52 imipscheduler.h \ 52 imipscheduler.h \
53 incidence.h \ 53 incidence.h \
54 incidencebase.h \ 54 incidencebase.h \
55 journal.h \ 55 journal.h \
56 period.h \ 56 period.h \
57 person.h \ 57 person.h \
58 qtopiaformat.h \ 58 qtopiaformat.h \
59 recurrence.h \ 59 recurrence.h \
60 scheduler.h \ 60 scheduler.h \
61 todo.h \ 61 todo.h \
62 vcaldrag.h \ 62 vcaldrag.h \
63 vcalformat.h \ 63 vcalformat.h \
64 versit/port.h \ 64 versit/port.h \
65 versit/vcc.h \ 65 versit/vcc.h \
66 versit/vobject.h \ 66 versit/vobject.h \
67 phoneformat.h \ 67 phoneformat.h \
68 68
69 69
70 70
71SOURCES = \ 71SOURCES = \
72 alarm.cpp \ 72 alarm.cpp \
73 attachment.cpp \ 73 attachment.cpp \
74 attendee.cpp \ 74 attendee.cpp \
75 calendar.cpp \ 75 calendar.cpp \
76 calendarlocal.cpp \ 76 calendarlocal.cpp \
77 calfilter.cpp \ 77 calfilter.cpp \
78 calformat.cpp \ 78 calformat.cpp \
79 compat.cpp \ 79 compat.cpp \
80 customproperties.cpp \ 80 customproperties.cpp \
81 dummyscheduler.cpp \ 81 dummyscheduler.cpp \
82 kincidenceformatter.cpp \ 82 kincidenceformatter.cpp \
83 duration.cpp \ 83 duration.cpp \
84 event.cpp \ 84 event.cpp \
85 exceptions.cpp \ 85 exceptions.cpp \
86 filestorage.cpp \ 86 filestorage.cpp \
87 freebusy.cpp \ 87 freebusy.cpp \
88 icaldrag.cpp \ 88 icaldrag.cpp \
89 icalformat.cpp \ 89 icalformat.cpp \
90 icalformatimpl.cpp \ 90 icalformatimpl.cpp \
91 imipscheduler.cpp \ 91 imipscheduler.cpp \
92 incidence.cpp \ 92 incidence.cpp \
93 incidencebase.cpp \ 93 incidencebase.cpp \
94 journal.cpp \ 94 journal.cpp \
95 period.cpp \ 95 period.cpp \
96 person.cpp \ 96 person.cpp \
97 qtopiaformat.cpp \ 97 qtopiaformat.cpp \
98 recurrence.cpp \ 98 recurrence.cpp \
99 scheduler.cpp \ 99 scheduler.cpp \
100 todo.cpp \ 100 todo.cpp \
101 vcaldrag.cpp \ 101 vcaldrag.cpp \
102 vcalformat.cpp \ 102 vcalformat.cpp \
103 versit/vcc.c \ 103 versit/vcc.c \
104 versit/vobject.c \ 104 versit/vobject.c \
105 phoneformat.cpp \ 105 phoneformat.cpp \
106 106
diff --git a/libkcal/libkcalE.pro b/libkcal/libkcalE.pro
index e379b95..e42dc9c 100644
--- a/libkcal/libkcalE.pro
+++ b/libkcal/libkcalE.pro
@@ -1,91 +1,91 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2 CONFIG += qt warn_on 2 CONFIG += qt warn_on
3 TARGET = komicrokcal 3 TARGET = komicrokcal
4 4
5INCLUDEPATH += ../microkde ../qtcompat versit ../microkde/kdecore $(QPEDIR)/include 5INCLUDEPATH += ../libkdepim ../microkde ../qtcompat versit ../microkde/kdecore $(QPEDIR)/include
6INCLUDEPATH += ../libical/src/libical 6INCLUDEPATH += ../libical/src/libical
7INCLUDEPATH += ../libical/src/libicalss 7INCLUDEPATH += ../libical/src/libicalss
8OBJECTS_DIR = obj/$(PLATFORM) 8OBJECTS_DIR = obj/$(PLATFORM)
9MOC_DIR = moc/$(PLATFORM) 9MOC_DIR = moc/$(PLATFORM)
10DESTDIR = $(QPEDIR)/lib 10DESTDIR = $(QPEDIR)/lib
11LIBS += ../libical/lib/$(PLATFORM)/libical.a 11LIBS += ../libical/lib/$(PLATFORM)/libical.a
12LIBS += ../libical/lib/$(PLATFORM)/libicalss.a 12LIBS += ../libical/lib/$(PLATFORM)/libicalss.a
13 13
14INTERFACES = \ 14INTERFACES = \
15 15
16HEADERS = \ 16HEADERS = \
17 alarm.h \ 17 alarm.h \
18 attachment.h \ 18 attachment.h \
19 attendee.h \ 19 attendee.h \
20 calendar.h \ 20 calendar.h \
21 calendarlocal.h \ 21 calendarlocal.h \
22 calfilter.h \ 22 calfilter.h \
23 calformat.h \ 23 calformat.h \
24 calstorage.h \ 24 calstorage.h \
25 compat.h \ 25 compat.h \
26 customproperties.h \ 26 customproperties.h \
27 dummyscheduler.h \ 27 dummyscheduler.h \
28 duration.h \ 28 duration.h \
29 event.h \ 29 event.h \
30 exceptions.h \ 30 exceptions.h \
31 filestorage.h \ 31 filestorage.h \
32 freebusy.h \ 32 freebusy.h \
33 icaldrag.h \ 33 icaldrag.h \
34 icalformat.h \ 34 icalformat.h \
35 icalformatimpl.h \ 35 icalformatimpl.h \
36 imipscheduler.h \ 36 imipscheduler.h \
37 incidence.h \ 37 incidence.h \
38 incidencebase.h \ 38 incidencebase.h \
39kincidenceformatter.h \ 39kincidenceformatter.h \
40 journal.h \ 40 journal.h \
41 period.h \ 41 period.h \
42 person.h \ 42 person.h \
43 qtopiaformat.h \ 43 qtopiaformat.h \
44 sharpformat.h \ 44 sharpformat.h \
45 phoneformat.h \ 45 phoneformat.h \
46 recurrence.h \ 46 recurrence.h \
47 scheduler.h \ 47 scheduler.h \
48 todo.h \ 48 todo.h \
49 vcaldrag.h \ 49 vcaldrag.h \
50 vcalformat.h \ 50 vcalformat.h \
51 versit/port.h \ 51 versit/port.h \
52 versit/vcc.h \ 52 versit/vcc.h \
53 versit/vobject.h \ 53 versit/vobject.h \
54 54
55SOURCES = \ 55SOURCES = \
56 alarm.cpp \ 56 alarm.cpp \
57 attachment.cpp \ 57 attachment.cpp \
58 attendee.cpp \ 58 attendee.cpp \
59 calendar.cpp \ 59 calendar.cpp \
60 calendarlocal.cpp \ 60 calendarlocal.cpp \
61 calfilter.cpp \ 61 calfilter.cpp \
62 calformat.cpp \ 62 calformat.cpp \
63 compat.cpp \ 63 compat.cpp \
64 customproperties.cpp \ 64 customproperties.cpp \
65 dummyscheduler.cpp \ 65 dummyscheduler.cpp \
66 duration.cpp \ 66 duration.cpp \
67 event.cpp \ 67 event.cpp \
68 exceptions.cpp \ 68 exceptions.cpp \
69 filestorage.cpp \ 69 filestorage.cpp \
70 freebusy.cpp \ 70 freebusy.cpp \
71 icaldrag.cpp \ 71 icaldrag.cpp \
72 icalformat.cpp \ 72 icalformat.cpp \
73 icalformatimpl.cpp \ 73 icalformatimpl.cpp \
74 imipscheduler.cpp \ 74 imipscheduler.cpp \
75 incidence.cpp \ 75 incidence.cpp \
76 incidencebase.cpp \ 76 incidencebase.cpp \
77 kincidenceformatter.cpp \ 77 kincidenceformatter.cpp \
78 journal.cpp \ 78 journal.cpp \
79 period.cpp \ 79 period.cpp \
80 person.cpp \ 80 person.cpp \
81 qtopiaformat.cpp \ 81 qtopiaformat.cpp \
82 sharpformat.cpp \ 82 sharpformat.cpp \
83 phoneformat.cpp \ 83 phoneformat.cpp \
84 recurrence.cpp \ 84 recurrence.cpp \
85 scheduler.cpp \ 85 scheduler.cpp \
86 todo.cpp \ 86 todo.cpp \
87 vcaldrag.cpp \ 87 vcaldrag.cpp \
88 vcalformat.cpp \ 88 vcalformat.cpp \
89 versit/vcc.c \ 89 versit/vcc.c \
90 versit/vobject.c \ 90 versit/vobject.c \
91 91
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index b2a62b1..c39413e 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -1,383 +1,286 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> 4 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library 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 GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qclipboard.h> 28#include <qclipboard.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qdir.h> 32#include <qdir.h>
33#include <qlabel.h> 33#include <qlabel.h>
34 34
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kglobal.h> 37#include <kglobal.h>
38#include <kmessagebox.h> 38#include <kmessagebox.h>
39#include <phoneaccess.h>
39 40
40#include "calendar.h" 41#include "calendar.h"
41#include "alarm.h" 42#include "alarm.h"
42#include "recurrence.h" 43#include "recurrence.h"
43#include "calendarlocal.h" 44#include "calendarlocal.h"
44 45
45#include "phoneformat.h" 46#include "phoneformat.h"
46#include "syncdefines.h" 47#include "syncdefines.h"
47 48
48using namespace KCal; 49using namespace KCal;
49class PhoneParser : public QObject 50class PhoneParser : public QObject
50{ 51{
51public: 52public:
52 PhoneParser( ) { 53 PhoneParser( ) {
53 ; 54 ;
54 } 55 }
55 56
56 static QString dtToString( const QDateTime& dti, bool useTZ = false ) 57 static QString dtToString( const QDateTime& dti, bool useTZ = false )
57 { 58 {
58 QString datestr; 59 QString datestr;
59 QString timestr; 60 QString timestr;
60 int offset = KGlobal::locale()->localTimeOffset( dti ); 61 int offset = KGlobal::locale()->localTimeOffset( dti );
61 QDateTime dt; 62 QDateTime dt;
62 if (useTZ) 63 if (useTZ)
63 dt = dti.addSecs ( -(offset*60)); 64 dt = dti.addSecs ( -(offset*60));
64 else 65 else
65 dt = dti; 66 dt = dti;
66 if(dt.date().isValid()){ 67 if(dt.date().isValid()){
67 const QDate& date = dt.date(); 68 const QDate& date = dt.date();
68 datestr.sprintf("%04d%02d%02d", 69 datestr.sprintf("%04d%02d%02d",
69 date.year(), date.month(), date.day()); 70 date.year(), date.month(), date.day());
70 } 71 }
71 if(dt.time().isValid()){ 72 if(dt.time().isValid()){
72 const QTime& time = dt.time(); 73 const QTime& time = dt.time();
73 timestr.sprintf("T%02d%02d%02d", 74 timestr.sprintf("T%02d%02d%02d",
74 time.hour(), time.minute(), time.second()); 75 time.hour(), time.minute(), time.second());
75 } 76 }
76 return datestr + timestr; 77 return datestr + timestr;
77 } 78 }
78 79
79 80
80}; 81};
81 82
82 83
83 84
84PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model ) 85PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model )
85{ 86{
86 mProfileName = profileName; 87 mProfileName = profileName;
87 writeConfig( device, connection, model ); 88 PhoneAccess::writeConfig( device, connection, model );
88} 89}
89 90
90PhoneFormat::~PhoneFormat() 91PhoneFormat::~PhoneFormat()
91{ 92{
92} 93}
93void PhoneFormat::writeConfig( QString device, QString connection, QString model )
94{
95#ifdef _WIN32_
96 QString fileName = qApp->applicationDirPath () +"\\gammurc";
97#else
98 QString fileName = QDir::homeDirPath() +"/.gammurc";
99#endif
100 //qDebug("save %d ", load );
101 QString content;
102 bool write = false;
103 bool addPort = true, addConnection = true, addModel = true;
104 QFile file( fileName );
105 if ( QFile::exists( fileName) ) {
106 if (!file.open( IO_ReadOnly ) ) {
107 qDebug("Error: cannot open %s ", fileName.latin1() );
108 return;
109 }
110 QString line;
111 while ( file.readLine( line, 1024 ) > 0 ) {
112 //qDebug("*%s* ", line.latin1() );
113 if ( line.left(7 ) == "[gammu]" ) {
114 ;
115 } else
116 if ( line.left(4 ) == "port" ) {
117 if ( line == "port = " + device+"\n" ) {
118 content += line ;
119 addPort = false;
120 //qDebug("port found" );
121 }
122
123 } else if ( line.left(5 ) == "model" ) {
124 if ( line == "model = " + model +"\n") {
125 content += line ;
126 addModel = false;
127 //qDebug("model found" );
128 }
129
130 } else if ( line.left( 10 ) == "connection" ) {
131 if ( line == "connection = " + connection +"\n") {
132 addConnection = false;
133 content += line ;
134 //qDebug("con found" );
135 }
136
137 } else {
138 content += line ;
139 }
140 }
141 file.close();
142 } else {
143 if ( ! connection.isEmpty() ) {
144 addConnection = true;
145 }
146 if ( ! device.isEmpty() ) {
147 addPort = true;
148 94
149 }
150 if ( ! model.isEmpty() ) {
151 addModel = true;
152 }
153 }
154
155 if ( addConnection ) {
156 if ( ! write )
157 content += "[gammu]\n";
158 write = true;
159 content += "connection = ";
160 content += connection;
161 content += "\n";
162 }
163 if ( addPort ) {
164 if ( ! write )
165 content += "[gammu]\n";
166 write = true;
167 content += "port = ";
168 content += device;
169 content += "\n";
170
171 }
172 if ( addModel ) {
173 if ( ! write )
174 content += "[gammu]\n";
175 write = true;
176 content += "model = ";
177 content += model;
178 content += "\n";
179 }
180 if ( write ) {
181 if (!file.open( IO_WriteOnly ) ) {
182 qDebug("Error: cannot write file %s ", fileName.latin1() );
183 return;
184 }
185 qDebug("Writing file %s ", fileName.latin1() );
186 QTextStream ts( &file );
187 ts << content ;
188 file.close();
189 }
190
191}
192#if 0 95#if 0
193int PhoneFormat::initDevice(GSM_StateMachine *s) 96int PhoneFormat::initDevice(GSM_StateMachine *s)
194{ 97{
195 GSM_ReadConfig(NULL, &s->Config[0], 0); 98 GSM_ReadConfig(NULL, &s->Config[0], 0);
196 s->ConfigNum = 1; 99 s->ConfigNum = 1;
197 GSM_Config *cfg = &s->Config[0]; 100 GSM_Config *cfg = &s->Config[0];
198 if ( ! mConnection.isEmpty() ) { 101 if ( ! mConnection.isEmpty() ) {
199 cfg->Connection = strdup(mConnection.latin1()); 102 cfg->Connection = strdup(mConnection.latin1());
200 cfg->DefaultConnection = false; 103 cfg->DefaultConnection = false;
201 qDebug("Connection set %s ", cfg->Connection ); 104 qDebug("Connection set %s ", cfg->Connection );
202 105
203 } 106 }
204 if ( ! mDevice.isEmpty() ) { 107 if ( ! mDevice.isEmpty() ) {
205 cfg->Device = strdup(mDevice.latin1()); 108 cfg->Device = strdup(mDevice.latin1());
206 cfg->DefaultDevice = false; 109 cfg->DefaultDevice = false;
207 qDebug("Device set %s ", cfg->Device); 110 qDebug("Device set %s ", cfg->Device);
208 111
209 } 112 }
210 if ( ! mModel.isEmpty() ) { 113 if ( ! mModel.isEmpty() ) {
211 strcpy(cfg->Model,mModel.latin1() ); 114 strcpy(cfg->Model,mModel.latin1() );
212 cfg->DefaultModel = false; 115 cfg->DefaultModel = false;
213 qDebug("Model set %s ",cfg->Model ); 116 qDebug("Model set %s ",cfg->Model );
214 } 117 }
215 int error=GSM_InitConnection(s,3); 118 int error=GSM_InitConnection(s,3);
216 return error; 119 return error;
217} 120}
218#endif 121#endif
219ulong PhoneFormat::getCsumTodo( Todo* todo ) 122ulong PhoneFormat::getCsumTodo( Todo* todo )
220{ 123{
221 QStringList attList; 124 QStringList attList;
222 if ( todo->hasDueDate() ) 125 if ( todo->hasDueDate() )
223 attList << PhoneParser::dtToString ( todo->dtDue() ); 126 attList << PhoneParser::dtToString ( todo->dtDue() );
224 attList << todo->summary(); 127 attList << todo->summary();
225 QString completedString = "no"; 128 QString completedString = "no";
226 if ( todo->isCompleted() ) 129 if ( todo->isCompleted() )
227 completedString = "yes"; 130 completedString = "yes";
228 attList << completedString; 131 attList << completedString;
229 int prio = todo->priority(); 132 int prio = todo->priority();
230 if( prio == 2 ) prio = 1; 133 if( prio == 2 ) prio = 1;
231 if (prio == 4 ) prio = 5 ; 134 if (prio == 4 ) prio = 5 ;
232 attList << QString::number( prio ); 135 attList << QString::number( prio );
233 QString alarmString = "na"; 136 QString alarmString = "na";
234 Alarm *alarm; 137 Alarm *alarm;
235 if ( todo->alarms().count() > 0 ) { 138 if ( todo->alarms().count() > 0 ) {
236 alarm = todo->alarms().first(); 139 alarm = todo->alarms().first();
237 if ( alarm->enabled() ) { 140 if ( alarm->enabled() ) {
238 alarmString = QString::number(alarm->offset() ); 141 alarmString = QString::number(alarm->offset() );
239 } 142 }
240 } 143 }
241 attList << alarmString; 144 attList << alarmString;
242 attList << todo->categoriesStr(); 145 attList << todo->categoriesStr();
243 attList << todo->secrecyStr(); 146 attList << todo->secrecyStr();
244 return PhoneFormat::getCsum(attList ); 147 return PhoneFormat::getCsum(attList );
245 148
246} 149}
247ulong PhoneFormat::getCsumEvent( Event* event ) 150ulong PhoneFormat::getCsumEvent( Event* event )
248{ 151{
249 QStringList attList; 152 QStringList attList;
250 attList << PhoneParser::dtToString ( event->dtStart() ); 153 attList << PhoneParser::dtToString ( event->dtStart() );
251 attList << PhoneParser::dtToString ( event->dtEnd() ); 154 attList << PhoneParser::dtToString ( event->dtEnd() );
252 attList << event->summary(); 155 attList << event->summary();
253 attList << event->location(); 156 attList << event->location();
254 QString alarmString = "na"; 157 QString alarmString = "na";
255 Alarm *alarm; 158 Alarm *alarm;
256 if ( event->alarms().count() > 0 ) { 159 if ( event->alarms().count() > 0 ) {
257 alarm = event->alarms().first(); 160 alarm = event->alarms().first();
258 if ( alarm->enabled() ) { 161 if ( alarm->enabled() ) {
259 alarmString = QString::number( alarm->offset() ); 162 alarmString = QString::number( alarm->offset() );
260 } 163 }
261 } 164 }
262 attList << alarmString; 165 attList << alarmString;
263 Recurrence* rec = event->recurrence(); 166 Recurrence* rec = event->recurrence();
264 QStringList list; 167 QStringList list;
265 bool writeEndDate = false; 168 bool writeEndDate = false;
266 switch ( rec->doesRecur() ) 169 switch ( rec->doesRecur() )
267 { 170 {
268 case Recurrence::rDaily: // 0 171 case Recurrence::rDaily: // 0
269 list.append( "0" ); 172 list.append( "0" );
270 list.append( QString::number( rec->frequency() ));//12 173 list.append( QString::number( rec->frequency() ));//12
271 list.append( "0" ); 174 list.append( "0" );
272 list.append( "0" ); 175 list.append( "0" );
273 writeEndDate = true; 176 writeEndDate = true;
274 break; 177 break;
275 case Recurrence::rWeekly:// 1 178 case Recurrence::rWeekly:// 1
276 list.append( "1" ); 179 list.append( "1" );
277 list.append( QString::number( rec->frequency()) );//12 180 list.append( QString::number( rec->frequency()) );//12
278 list.append( "0" ); 181 list.append( "0" );
279 { 182 {
280 int days = 0; 183 int days = 0;
281 QBitArray weekDays = rec->days(); 184 QBitArray weekDays = rec->days();
282 int i; 185 int i;
283 for( i = 1; i <= 7; ++i ) { 186 for( i = 1; i <= 7; ++i ) {
284 if ( weekDays[i-1] ) { 187 if ( weekDays[i-1] ) {
285 days += 1 << (i-1); 188 days += 1 << (i-1);
286 } 189 }
287 } 190 }
288 list.append( QString::number( days ) ); 191 list.append( QString::number( days ) );
289 } 192 }
290 //pending weekdays 193 //pending weekdays
291 writeEndDate = true; 194 writeEndDate = true;
292 195
293 break; 196 break;
294 case Recurrence::rMonthlyPos:// 2 197 case Recurrence::rMonthlyPos:// 2
295 list.append( "2" ); 198 list.append( "2" );
296 list.append( QString::number( rec->frequency()) );//12 199 list.append( QString::number( rec->frequency()) );//12
297 200
298 writeEndDate = true; 201 writeEndDate = true;
299 { 202 {
300 int count = 1; 203 int count = 1;
301 QPtrList<Recurrence::rMonthPos> rmp; 204 QPtrList<Recurrence::rMonthPos> rmp;
302 rmp = rec->monthPositions(); 205 rmp = rec->monthPositions();
303 if ( rmp.first()->negative ) 206 if ( rmp.first()->negative )
304 count = 5 - rmp.first()->rPos - 1; 207 count = 5 - rmp.first()->rPos - 1;
305 else 208 else
306 count = rmp.first()->rPos - 1; 209 count = rmp.first()->rPos - 1;
307 list.append( QString::number( count ) ); 210 list.append( QString::number( count ) );
308 211
309 } 212 }
310 213
311 list.append( "0" ); 214 list.append( "0" );
312 break; 215 break;
313 case Recurrence::rMonthlyDay:// 3 216 case Recurrence::rMonthlyDay:// 3
314 list.append( "3" ); 217 list.append( "3" );
315 list.append( QString::number( rec->frequency()) );//12 218 list.append( QString::number( rec->frequency()) );//12
316 list.append( "0" ); 219 list.append( "0" );
317 list.append( "0" ); 220 list.append( "0" );
318 writeEndDate = true; 221 writeEndDate = true;
319 break; 222 break;
320 case Recurrence::rYearlyMonth://4 223 case Recurrence::rYearlyMonth://4
321 list.append( "4" ); 224 list.append( "4" );
322 list.append( QString::number( rec->frequency()) );//12 225 list.append( QString::number( rec->frequency()) );//12
323 list.append( "0" ); 226 list.append( "0" );
324 list.append( "0" ); 227 list.append( "0" );
325 writeEndDate = true; 228 writeEndDate = true;
326 break; 229 break;
327 230
328 default: 231 default:
329 list.append( "255" ); 232 list.append( "255" );
330 list.append( QString() ); 233 list.append( QString() );
331 list.append( "0" ); 234 list.append( "0" );
332 list.append( QString() ); 235 list.append( QString() );
333 list.append( "0" ); 236 list.append( "0" );
334 list.append( "20991231T000000" ); 237 list.append( "20991231T000000" );
335 break; 238 break;
336 } 239 }
337 if ( writeEndDate ) { 240 if ( writeEndDate ) {
338 241
339 if ( rec->endDate().isValid() ) { // 15 + 16 242 if ( rec->endDate().isValid() ) { // 15 + 16
340 list.append( "1" ); 243 list.append( "1" );
341 list.append( PhoneParser::dtToString( rec->endDate()) ); 244 list.append( PhoneParser::dtToString( rec->endDate()) );
342 } else { 245 } else {
343 list.append( "0" ); 246 list.append( "0" );
344 list.append( "20991231T000000" ); 247 list.append( "20991231T000000" );
345 } 248 }
346 249
347 } 250 }
348 attList << list.join(""); 251 attList << list.join("");
349 attList << event->categoriesStr(); 252 attList << event->categoriesStr();
350 //qDebug("csum cat %s", event->categoriesStr().latin1()); 253 //qDebug("csum cat %s", event->categoriesStr().latin1());
351 254
352 attList << event->secrecyStr(); 255 attList << event->secrecyStr();
353 return PhoneFormat::getCsum(attList ); 256 return PhoneFormat::getCsum(attList );
354} 257}
355ulong PhoneFormat::getCsum( const QStringList & attList) 258ulong PhoneFormat::getCsum( const QStringList & attList)
356{ 259{
357 int max = attList.count(); 260 int max = attList.count();
358 ulong cSum = 0; 261 ulong cSum = 0;
359 int j,k,i; 262 int j,k,i;
360 int add; 263 int add;
361 for ( i = 0; i < max ; ++i ) { 264 for ( i = 0; i < max ; ++i ) {
362 QString s = attList[i]; 265 QString s = attList[i];
363 if ( ! s.isEmpty() ){ 266 if ( ! s.isEmpty() ){
364 j = s.length(); 267 j = s.length();
365 for ( k = 0; k < j; ++k ) { 268 for ( k = 0; k < j; ++k ) {
366 int mul = k +1; 269 int mul = k +1;
367 add = s[k].unicode (); 270 add = s[k].unicode ();
368 if ( k < 16 ) 271 if ( k < 16 )
369 mul = mul * mul; 272 mul = mul * mul;
370 int ii = i+1; 273 int ii = i+1;
371 add = add * mul *ii*ii*ii; 274 add = add * mul *ii*ii*ii;
372 cSum += add; 275 cSum += add;
373 } 276 }
374 } 277 }
375 278
376 } 279 }
377 //QString dump = attList.join(","); 280 //QString dump = attList.join(",");
378 //qDebug("csum: %d %s", cSum,dump.latin1()); 281 //qDebug("csum: %d %s", cSum,dump.latin1());
379 282
380 return cSum; 283 return cSum;
381 284
382} 285}
383//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 286//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
@@ -401,348 +304,334 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
401 if ( ret != 0 ) { 304 if ( ret != 0 ) {
402 qDebug("Error::command returned %d", ret); 305 qDebug("Error::command returned %d", ret);
403 return false; 306 return false;
404 } 307 }
405 VCalFormat vfload; 308 VCalFormat vfload;
406 vfload.setLocalTime ( true ); 309 vfload.setLocalTime ( true );
407 qDebug("loading file ..."); 310 qDebug("loading file ...");
408 311
409 if ( ! vfload.load( calendar, fileName ) ) 312 if ( ! vfload.load( calendar, fileName ) )
410 return false; 313 return false;
411 QPtrList<Event> er = calendar->rawEvents(); 314 QPtrList<Event> er = calendar->rawEvents();
412 Event* ev = er.first(); 315 Event* ev = er.first();
413 qDebug("reading events... "); 316 qDebug("reading events... ");
414 while ( ev ) { 317 while ( ev ) {
415 QStringList cat = ev->categories(); 318 QStringList cat = ev->categories();
416 if ( cat.contains( "MeetingDEF" )) { 319 if ( cat.contains( "MeetingDEF" )) {
417 ev->setCategories( QStringList() ); 320 ev->setCategories( QStringList() );
418 } 321 }
419 int id = ev->pilotId(); 322 int id = ev->pilotId();
420 Event *event; 323 Event *event;
421 event = existingCal->event( mProfileName ,QString::number( id ) ); 324 event = existingCal->event( mProfileName ,QString::number( id ) );
422 if ( event ) { 325 if ( event ) {
423 event = (Event*)event->clone(); 326 event = (Event*)event->clone();
424 copyEvent( event, ev ); 327 copyEvent( event, ev );
425 calendar->deleteEvent( ev ); 328 calendar->deleteEvent( ev );
426 calendar->addEvent( event); 329 calendar->addEvent( event);
427 } 330 }
428 else 331 else
429 event = ev; 332 event = ev;
430 uint cSum; 333 uint cSum;
431 cSum = PhoneFormat::getCsumEvent( event ); 334 cSum = PhoneFormat::getCsumEvent( event );
432 event->setCsum( mProfileName, QString::number( cSum )); 335 event->setCsum( mProfileName, QString::number( cSum ));
433 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 336 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
434 event->setID( mProfileName,QString::number( id ) ); 337 event->setID( mProfileName,QString::number( id ) );
435 ev = er.next(); 338 ev = er.next();
436 } 339 }
437 { 340 {
438 qDebug("reading todos... "); 341 qDebug("reading todos... ");
439 QPtrList<Todo> tr = calendar->rawTodos(); 342 QPtrList<Todo> tr = calendar->rawTodos();
440 Todo* ev = tr.first(); 343 Todo* ev = tr.first();
441 while ( ev ) { 344 while ( ev ) {
442 345
443 QStringList cat = ev->categories(); 346 QStringList cat = ev->categories();
444 if ( cat.contains( "MeetingDEF" )) { 347 if ( cat.contains( "MeetingDEF" )) {
445 ev->setCategories( QStringList() ); 348 ev->setCategories( QStringList() );
446 } 349 }
447 int id = ev->pilotId(); 350 int id = ev->pilotId();
448 Todo *event; 351 Todo *event;
449 event = existingCal->todo( mProfileName ,QString::number( id ) ); 352 event = existingCal->todo( mProfileName ,QString::number( id ) );
450 if ( event ) { 353 if ( event ) {
451 //qDebug("copy todo %s ", event->summary().latin1()); 354 //qDebug("copy todo %s ", event->summary().latin1());
452 355
453 event = (Todo*)event->clone(); 356 event = (Todo*)event->clone();
454 copyTodo( event, ev ); 357 copyTodo( event, ev );
455 calendar->deleteTodo( ev ); 358 calendar->deleteTodo( ev );
456 calendar->addTodo( event); 359 calendar->addTodo( event);
457 } 360 }
458 else 361 else
459 event = ev; 362 event = ev;
460 uint cSum; 363 uint cSum;
461 cSum = PhoneFormat::getCsumTodo( event ); 364 cSum = PhoneFormat::getCsumTodo( event );
462 event->setCsum( mProfileName, QString::number( cSum )); 365 event->setCsum( mProfileName, QString::number( cSum ));
463 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 366 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
464 event->setID( mProfileName,QString::number( id ) ); 367 event->setID( mProfileName,QString::number( id ) );
465 ev = tr.next(); 368 ev = tr.next();
466 } 369 }
467 } 370 }
468 return true; 371 return true;
469} 372}
470void PhoneFormat::copyEvent( Event* to, Event* from ) 373void PhoneFormat::copyEvent( Event* to, Event* from )
471{ 374{
472 if ( from->dtStart().isValid() ) 375 if ( from->dtStart().isValid() )
473 to->setDtStart( from->dtStart() ); 376 to->setDtStart( from->dtStart() );
474 if ( from->dtEnd().isValid() ) 377 if ( from->dtEnd().isValid() )
475 to->setDtEnd( from->dtEnd() ); 378 to->setDtEnd( from->dtEnd() );
476 if ( !from->location().isEmpty() ) 379 if ( !from->location().isEmpty() )
477 to->setLocation( from->location() ); 380 to->setLocation( from->location() );
478 if ( !from->description().isEmpty() ) 381 if ( !from->description().isEmpty() )
479 to->setDescription( from->description() ); 382 to->setDescription( from->description() );
480 if ( !from->summary().isEmpty() ) 383 if ( !from->summary().isEmpty() )
481 to->setSummary( from->summary() ); 384 to->setSummary( from->summary() );
482 385
483 if ( from->alarms().count() ) { 386 if ( from->alarms().count() ) {
484 to->clearAlarms(); 387 to->clearAlarms();
485 Alarm *a = from->alarms().first(); 388 Alarm *a = from->alarms().first();
486 Alarm *b = to->newAlarm( ); 389 Alarm *b = to->newAlarm( );
487 b->setEnabled( a->enabled() ); 390 b->setEnabled( a->enabled() );
488 if ( a->hasStartOffset() ) { 391 if ( a->hasStartOffset() ) {
489 b->setStartOffset( a->startOffset() ); 392 b->setStartOffset( a->startOffset() );
490 } 393 }
491 if ( a->hasTime() ) 394 if ( a->hasTime() )
492 b->setTime( a->time() ); 395 b->setTime( a->time() );
493 396
494 } 397 }
495 QStringList cat = to->categories(); 398 QStringList cat = to->categories();
496 QStringList catFrom = from->categories(); 399 QStringList catFrom = from->categories();
497 QString nCat; 400 QString nCat;
498 int iii; 401 int iii;
499 for ( iii = 0; iii < catFrom.count();++iii ) { 402 for ( iii = 0; iii < catFrom.count();++iii ) {
500 nCat = catFrom[iii]; 403 nCat = catFrom[iii];
501 if ( !nCat.isEmpty() ) 404 if ( !nCat.isEmpty() )
502 if ( !cat.contains( nCat )) { 405 if ( !cat.contains( nCat )) {
503 cat << nCat; 406 cat << nCat;
504 } 407 }
505 } 408 }
506 to->setCategories( cat ); 409 to->setCategories( cat );
507 Recurrence * r = new Recurrence( *from->recurrence(),to); 410 Recurrence * r = new Recurrence( *from->recurrence(),to);
508 to->setRecurrence( r ) ; 411 to->setRecurrence( r ) ;
509 412
510 413
511} 414}
512void PhoneFormat::copyTodo( Todo* to, Todo* from ) 415void PhoneFormat::copyTodo( Todo* to, Todo* from )
513{ 416{
514 if ( from->dtStart().isValid() ) 417 if ( from->dtStart().isValid() )
515 to->setDtStart( from->dtStart() ); 418 to->setDtStart( from->dtStart() );
516 if ( from->dtDue().isValid() ) 419 if ( from->dtDue().isValid() )
517 to->setDtDue( from->dtDue() ); 420 to->setDtDue( from->dtDue() );
518 if ( !from->location().isEmpty() ) 421 if ( !from->location().isEmpty() )
519 to->setLocation( from->location() ); 422 to->setLocation( from->location() );
520 if ( !from->description().isEmpty() ) 423 if ( !from->description().isEmpty() )
521 to->setDescription( from->description() ); 424 to->setDescription( from->description() );
522 if ( !from->summary().isEmpty() ) 425 if ( !from->summary().isEmpty() )
523 to->setSummary( from->summary() ); 426 to->setSummary( from->summary() );
524 427
525 if ( from->alarms().count() ) { 428 if ( from->alarms().count() ) {
526 to->clearAlarms(); 429 to->clearAlarms();
527 Alarm *a = from->alarms().first(); 430 Alarm *a = from->alarms().first();
528 Alarm *b = to->newAlarm( ); 431 Alarm *b = to->newAlarm( );
529 b->setEnabled( a->enabled() ); 432 b->setEnabled( a->enabled() );
530 if ( a->hasStartOffset() ) 433 if ( a->hasStartOffset() )
531 b->setStartOffset( a->startOffset() ); 434 b->setStartOffset( a->startOffset() );
532 if ( a->hasTime() ) 435 if ( a->hasTime() )
533 b->setTime( a->time() ); 436 b->setTime( a->time() );
534 } 437 }
535 438
536 QStringList cat = to->categories(); 439 QStringList cat = to->categories();
537 QStringList catFrom = from->categories(); 440 QStringList catFrom = from->categories();
538 QString nCat; 441 QString nCat;
539 int iii; 442 int iii;
540 for ( iii = 0; iii < catFrom.count();++iii ) { 443 for ( iii = 0; iii < catFrom.count();++iii ) {
541 nCat = catFrom[iii]; 444 nCat = catFrom[iii];
542 if ( !nCat.isEmpty() ) 445 if ( !nCat.isEmpty() )
543 if ( !cat.contains( nCat )) { 446 if ( !cat.contains( nCat )) {
544 cat << nCat; 447 cat << nCat;
545 } 448 }
546 } 449 }
547 to->setCategories( cat ); 450 to->setCategories( cat );
548 if ( from->isCompleted() ) { 451 if ( from->isCompleted() ) {
549 to->setCompleted( true ); 452 to->setCompleted( true );
550 if( from->completed().isValid() ) 453 if( from->completed().isValid() )
551 to->setCompleted( from->completed() ); 454 to->setCompleted( from->completed() );
552 } else { 455 } else {
553 // set percentcomplete only, if to->isCompleted() 456 // set percentcomplete only, if to->isCompleted()
554 if ( to->isCompleted() ) 457 if ( to->isCompleted() )
555 to->setPercentComplete(from->percentComplete()); 458 to->setPercentComplete(from->percentComplete());
556 } 459 }
557 if( to->priority() == 2 && from->priority() == 1 ) 460 if( to->priority() == 2 && from->priority() == 1 )
558 ; //skip 461 ; //skip
559 else if (to->priority() == 4 && from->priority() == 5 ) 462 else if (to->priority() == 4 && from->priority() == 5 )
560 ; 463 ;
561 else 464 else
562 to->setPriority(from->priority()); 465 to->setPriority(from->priority());
563 466
564} 467}
565#include <qcstring.h> 468#include <qcstring.h>
566 469
567void PhoneFormat::afterSave( Incidence* inc) 470void PhoneFormat::afterSave( Incidence* inc)
568{ 471{
569 uint csum; 472 uint csum;
570 inc->removeID( mProfileName ); 473 inc->removeID( mProfileName );
571 if ( inc->type() == "Event") 474 if ( inc->type() == "Event")
572 csum = PhoneFormat::getCsumEvent( (Event*) inc ); 475 csum = PhoneFormat::getCsumEvent( (Event*) inc );
573 else 476 else
574 csum = PhoneFormat::getCsumTodo( (Todo*) inc ); 477 csum = PhoneFormat::getCsumTodo( (Todo*) inc );
575 inc->setCsum( mProfileName, QString::number( csum )); 478 inc->setCsum( mProfileName, QString::number( csum ));
576 479
577 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 480 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
578 481
579} 482}
580 483
581bool PhoneFormat::writeToPhone( Calendar * calendar) 484bool PhoneFormat::writeToPhone( Calendar * calendar)
582{ 485{
583#ifdef _WIN32_ 486#ifdef _WIN32_
584 QString fileName = locateLocal("tmp", "tempfile.vcs"); 487 QString fileName = locateLocal("tmp", "tempfile.vcs");
585#else 488#else
586 QString fileName = "/tmp/kdepimtemp.vcs"; 489 QString fileName = "/tmp/kdepimtemp.vcs";
587#endif 490#endif
588 491
589 VCalFormat vfsave; 492 VCalFormat vfsave;
590 vfsave.setLocalTime ( true ); 493 vfsave.setLocalTime ( true );
591 if ( ! vfsave.save( calendar, fileName ) ) 494 if ( ! vfsave.save( calendar, fileName ) )
592 return false; 495 return false;
593 // 4 call kammu 496 return PhoneAccess::writeToPhone( fileName );
594#ifdef DESKTOP_VERSION
595 QString command ="./kammu --restore " + fileName ;
596#else
597 QString command ="kammu --restore " + fileName ;
598#endif
599 int ret;
600 while ( (ret = system ( command.latin1())) != 0 ) {
601 qDebug("Error S::command returned %d. asking users", ret);
602 int retval = KMessageBox::warningContinueCancel(0,
603 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone access"),i18n("Retry"),i18n("Cancel"));
604 if ( retval != KMessageBox::Continue )
605 return false;
606 }
607 return true;
608} 497}
609bool PhoneFormat::save( Calendar *calendar) 498bool PhoneFormat::save( Calendar *calendar)
610{ 499{
611 QLabel status ( i18n(" Opening device ..."), 0 ); 500 QLabel status ( i18n(" Opening device ..."), 0 );
612 int w = status.sizeHint().width()+20 ; 501 int w = status.sizeHint().width()+20 ;
613 if ( w < 200 ) w = 230; 502 if ( w < 200 ) w = 230;
614 int h = status.sizeHint().height()+20 ; 503 int h = status.sizeHint().height()+20 ;
615 int dw = QApplication::desktop()->width(); 504 int dw = QApplication::desktop()->width();
616 int dh = QApplication::desktop()->height(); 505 int dh = QApplication::desktop()->height();
617 status.setCaption(i18n("Writing to phone...") ); 506 status.setCaption(i18n("Writing to phone...") );
618 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 507 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
619 status.show(); 508 status.show();
620 status.raise(); 509 status.raise();
621 qApp->processEvents(); 510 qApp->processEvents();
622 QString message; 511 QString message;
623 512
624 // 1 remove events which should be deleted 513 // 1 remove events which should be deleted
625 QPtrList<Event> er = calendar->rawEvents(); 514 QPtrList<Event> er = calendar->rawEvents();
626 Event* ev = er.first(); 515 Event* ev = er.first();
627 while ( ev ) { 516 while ( ev ) {
628 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 517 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
629 calendar->deleteEvent( ev ); 518 calendar->deleteEvent( ev );
630 } else { 519 } else {
631 520
632 } 521 }
633 ev = er.next(); 522 ev = er.next();
634 } 523 }
635 // 2 remove todos which should be deleted 524 // 2 remove todos which should be deleted
636 QPtrList<Todo> tl = calendar->rawTodos(); 525 QPtrList<Todo> tl = calendar->rawTodos();
637 Todo* to = tl.first(); 526 Todo* to = tl.first();
638 while ( to ) { 527 while ( to ) {
639 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 528 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
640 calendar->deleteTodo( to ); 529 calendar->deleteTodo( to );
641 } else { 530 } else {
642 if ( to->isCompleted()) { 531 if ( to->isCompleted()) {
643 calendar->deleteTodo( to ); 532 calendar->deleteTodo( to );
644 } 533 }
645 } 534 }
646 to = tl.next(); 535 to = tl.next();
647 } 536 }
648 // 3 save file 537 // 3 save file
649 if ( !writeToPhone( calendar ) ) 538 if ( !writeToPhone( calendar ) )
650 return false; 539 return false;
651 540
652 // 5 reread data 541 // 5 reread data
653 message = i18n(" Rereading all data ... "); 542 message = i18n(" Rereading all data ... ");
654 status.setText ( message ); 543 status.setText ( message );
655 qApp->processEvents(); 544 qApp->processEvents();
656 CalendarLocal* calendarTemp = new CalendarLocal(); 545 CalendarLocal* calendarTemp = new CalendarLocal();
657 calendarTemp->setTimeZoneId( calendar->timeZoneId()); 546 calendarTemp->setTimeZoneId( calendar->timeZoneId());
658 if ( ! load( calendarTemp,calendar) ){ 547 if ( ! load( calendarTemp,calendar) ){
659 qDebug("error reloading calendar "); 548 qDebug("error reloading calendar ");
660 delete calendarTemp; 549 delete calendarTemp;
661 return false; 550 return false;
662 } 551 }
663 // 6 compare data 552 // 6 compare data
664 553
665//algo 6 compare event 554//algo 6 compare event
666 er = calendar->rawEvents(); 555 er = calendar->rawEvents();
667 ev = er.first(); 556 ev = er.first();
668 message = i18n(" Comparing event # "); 557 message = i18n(" Comparing event # ");
669 QPtrList<Event> er1 = calendarTemp->rawEvents(); 558 QPtrList<Event> er1 = calendarTemp->rawEvents();
670 Event* ev1; 559 Event* ev1;
671 int procCount = 0; 560 int procCount = 0;
672 while ( ev ) { 561 while ( ev ) {
673 //qDebug("event new ID %s",ev->summary().latin1()); 562 //qDebug("event new ID %s",ev->summary().latin1());
674 status.setText ( message + QString::number ( ++procCount ) ); 563 status.setText ( message + QString::number ( ++procCount ) );
675 qApp->processEvents(); 564 qApp->processEvents();
676 uint csum; 565 uint csum;
677 csum = PhoneFormat::getCsumEvent( ev ); 566 csum = PhoneFormat::getCsumEvent( ev );
678 QString cSum = QString::number( csum ); 567 QString cSum = QString::number( csum );
679 //ev->setCsum( mProfileName, cSum ); 568 //ev->setCsum( mProfileName, cSum );
680 //qDebug("Event cSum %s ", cSum.latin1()); 569 //qDebug("Event cSum %s ", cSum.latin1());
681 ev1 = er1.first(); 570 ev1 = er1.first();
682 while ( ev1 ) { 571 while ( ev1 ) {
683 if ( ev1->getCsum( mProfileName ) == cSum ) { 572 if ( ev1->getCsum( mProfileName ) == cSum ) {
684 er1.remove( ev1 ); 573 er1.remove( ev1 );
685 afterSave( ev ); 574 afterSave( ev );
686 ev->setID(mProfileName, ev1->getID(mProfileName) ); 575 ev->setID(mProfileName, ev1->getID(mProfileName) );
687 //qDebug("Event found on phone for %s ", ev->summary().latin1()); 576 //qDebug("Event found on phone for %s ", ev->summary().latin1());
688 577
689 break; 578 break;
690 } 579 }
691 ev1 = er1.next(); 580 ev1 = er1.next();
692 } 581 }
693 if ( ! ev1 ) { 582 if ( ! ev1 ) {
694 // ev->removeID(mProfileName); 583 // ev->removeID(mProfileName);
695 qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1()); 584 qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1());
696 } 585 }
697 586
698 587
699 ev = er.next(); 588 ev = er.next();
700 } 589 }
701 //algo 6 compare todo 590 //algo 6 compare todo
702 tl = calendar->rawTodos(); 591 tl = calendar->rawTodos();
703 to = tl.first(); 592 to = tl.first();
704 procCount = 0; 593 procCount = 0;
705 QPtrList<Todo> tl1 = calendarTemp->rawTodos(); 594 QPtrList<Todo> tl1 = calendarTemp->rawTodos();
706 Todo* to1 ; 595 Todo* to1 ;
707 message = i18n(" Comparing todo # "); 596 message = i18n(" Comparing todo # ");
708 while ( to ) { 597 while ( to ) {
709 status.setText ( message + QString::number ( ++procCount ) ); 598 status.setText ( message + QString::number ( ++procCount ) );
710 qApp->processEvents(); 599 qApp->processEvents();
711 uint csum; 600 uint csum;
712 csum = PhoneFormat::getCsumTodo( to ); 601 csum = PhoneFormat::getCsumTodo( to );
713 QString cSum = QString::number( csum ); 602 QString cSum = QString::number( csum );
714 //to->setCsum( mProfileName, cSum ); 603 //to->setCsum( mProfileName, cSum );
715 //qDebug("Todo cSum %s ", cSum.latin1()); 604 //qDebug("Todo cSum %s ", cSum.latin1());
716 Todo* to1 = tl1.first(); 605 Todo* to1 = tl1.first();
717 while ( to1 ) { 606 while ( to1 ) {
718 if ( to1->getCsum( mProfileName ) == cSum ) { 607 if ( to1->getCsum( mProfileName ) == cSum ) {
719 tl1.remove( to1 ); 608 tl1.remove( to1 );
720 afterSave( to ); 609 afterSave( to );
721 to->setID(mProfileName, to1->getID(mProfileName) ); 610 to->setID(mProfileName, to1->getID(mProfileName) );
722 break; 611 break;
723 } 612 }
724 to1 = tl1.next(); 613 to1 = tl1.next();
725 } 614 }
726 if ( ! to1 ) { 615 if ( ! to1 ) {
727 //to->removeID(mProfileName); 616 //to->removeID(mProfileName);
728 qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1()); 617 qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1());
729 } 618 }
730 619
731 to = tl.next(); 620 to = tl.next();
732 } 621 }
733 delete calendarTemp; 622 delete calendarTemp;
734 return true; 623 return true;
735 624
736 625
737 626
738} 627}
739 628
740 629
741QString PhoneFormat::toString( Calendar * ) 630QString PhoneFormat::toString( Calendar * )
742{ 631{
743 return QString::null; 632 return QString::null;
744} 633}
745bool PhoneFormat::fromString( Calendar *calendar, const QString & text) 634bool PhoneFormat::fromString( Calendar *calendar, const QString & text)
746{ 635{
747 return false; 636 return false;
748} 637}
diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h
index 61e8160..001fd81 100644
--- a/libkcal/phoneformat.h
+++ b/libkcal/phoneformat.h
@@ -1,63 +1,62 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library 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 GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21#ifndef PHONEFORMAT_H 21#ifndef PHONEFORMAT_H
22#define PHONEFORMAT_H 22#define PHONEFORMAT_H
23 23
24#include <qstring.h> 24#include <qstring.h>
25 25
26#include "scheduler.h" 26#include "scheduler.h"
27 27
28#include "vcalformat.h" 28#include "vcalformat.h"
29#include "calformat.h" 29#include "calformat.h"
30 30
31namespace KCal { 31namespace KCal {
32 32
33/** 33/**
34 This class implements the calendar format used by Phone. 34 This class implements the calendar format used by Phone.
35*/ 35*/
36 class Event; 36 class Event;
37 class Todo; 37 class Todo;
38class PhoneFormat : public QObject { 38class PhoneFormat : public QObject {
39 public: 39 public:
40 /** Create new iCalendar format. */ 40 /** Create new iCalendar format. */
41 PhoneFormat(QString profileName, QString device,QString connection, QString model); 41 PhoneFormat(QString profileName, QString device,QString connection, QString model);
42 virtual ~PhoneFormat(); 42 virtual ~PhoneFormat();
43 43
44 bool load( Calendar * ,Calendar * ); 44 bool load( Calendar * ,Calendar * );
45 bool save( Calendar * ); 45 bool save( Calendar * );
46 bool fromString( Calendar *, const QString & ); 46 bool fromString( Calendar *, const QString & );
47 QString toString( Calendar * ); 47 QString toString( Calendar * );
48 static ulong getCsum( const QStringList & ); 48 static ulong getCsum( const QStringList & );
49 static ulong getCsumTodo( Todo* to ); 49 static ulong getCsumTodo( Todo* to );
50 static ulong getCsumEvent( Event* ev ); 50 static ulong getCsumEvent( Event* ev );
51 static void writeConfig( QString device,QString connection, QString model );
52 static bool writeToPhone( Calendar * ); 51 static bool writeToPhone( Calendar * );
53 private: 52 private:
54 void copyEvent( Event* to, Event* from ); 53 void copyEvent( Event* to, Event* from );
55 void copyTodo( Todo* to, Todo* from ); 54 void copyTodo( Todo* to, Todo* from );
56 //int initDevice(GSM_StateMachine *s); 55 //int initDevice(GSM_StateMachine *s);
57 QString mProfileName; 56 QString mProfileName;
58 void afterSave( Incidence* ); 57 void afterSave( Incidence* );
59}; 58};
60 59
61} 60}
62 61
63#endif 62#endif