summaryrefslogtreecommitdiffabout
path: root/kaddressbook
Unidiff
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp9
-rw-r--r--kaddressbook/kcmconfigs/kabconfigwidget.cpp32
-rw-r--r--kaddressbook/kcmconfigs/kabconfigwidget.h20
-rw-r--r--kaddressbook/kcmconfigs/kcmkabconfig.cpp16
-rw-r--r--kaddressbook/kcmconfigs/kcmkabconfig.h2
5 files changed, 26 insertions, 53 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 4ebd6a8..1b40d71 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,3072 +1,3067 @@
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/*
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 <qprogressbar.h> 36#include <qprogressbar.h>
37 37
38#ifndef KAB_EMBEDDED 38#ifndef KAB_EMBEDDED
39#include <qclipboard.h> 39#include <qclipboard.h>
40#include <qdir.h> 40#include <qdir.h>
41#include <qfile.h> 41#include <qfile.h>
42#include <qapplicaton.h> 42#include <qapplicaton.h>
43#include <qprogressbar.h> 43#include <qprogressbar.h>
44#include <qlayout.h> 44#include <qlayout.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qvbox.h> 46#include <qvbox.h>
47#include <kabc/addresseelist.h> 47#include <kabc/addresseelist.h>
48#include <kabc/errorhandler.h> 48#include <kabc/errorhandler.h>
49#include <kabc/resource.h> 49#include <kabc/resource.h>
50#include <kabc/vcardconverter.h> 50#include <kabc/vcardconverter.h>
51#include <kapplication.h> 51#include <kapplication.h>
52#include <kactionclasses.h> 52#include <kactionclasses.h>
53#include <kcmultidialog.h> 53#include <kcmultidialog.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kdeversion.h> 55#include <kdeversion.h>
56#include <kkeydialog.h> 56#include <kkeydialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <kprinter.h> 58#include <kprinter.h>
59#include <kprotocolinfo.h> 59#include <kprotocolinfo.h>
60#include <kresources/selectdialog.h> 60#include <kresources/selectdialog.h>
61#include <kstandarddirs.h> 61#include <kstandarddirs.h>
62#include <ktempfile.h> 62#include <ktempfile.h>
63#include <kxmlguiclient.h> 63#include <kxmlguiclient.h>
64#include <kaboutdata.h> 64#include <kaboutdata.h>
65#include <libkdepim/categoryselectdialog.h> 65#include <libkdepim/categoryselectdialog.h>
66 66
67#include "addresseeutil.h" 67#include "addresseeutil.h"
68#include "addresseeeditordialog.h" 68#include "addresseeeditordialog.h"
69#include "extensionmanager.h" 69#include "extensionmanager.h"
70#include "kstdaction.h" 70#include "kstdaction.h"
71#include "kaddressbookservice.h" 71#include "kaddressbookservice.h"
72#include "ldapsearchdialog.h" 72#include "ldapsearchdialog.h"
73#include "printing/printingwizard.h" 73#include "printing/printingwizard.h"
74#else // KAB_EMBEDDED 74#else // KAB_EMBEDDED
75 75
76#include <kapplication.h> 76#include <kapplication.h>
77#include "KDGanttMinimizeSplitter.h" 77#include "KDGanttMinimizeSplitter.h"
78#include "kaddressbookmain.h" 78#include "kaddressbookmain.h"
79#include "kactioncollection.h" 79#include "kactioncollection.h"
80#include "addresseedialog.h" 80#include "addresseedialog.h"
81//US 81//US
82#include <addresseeview.h> 82#include <addresseeview.h>
83 83
84#include <qapp.h> 84#include <qapp.h>
85#include <qmenubar.h> 85#include <qmenubar.h>
86//#include <qtoolbar.h> 86//#include <qtoolbar.h>
87#include <qmessagebox.h> 87#include <qmessagebox.h>
88#include <kdebug.h> 88#include <kdebug.h>
89#include <kiconloader.h> // needed for SmallIcon 89#include <kiconloader.h> // needed for SmallIcon
90#include <kresources/kcmkresources.h> 90#include <kresources/kcmkresources.h>
91#include <ktoolbar.h> 91#include <ktoolbar.h>
92 92
93 93
94//#include <qlabel.h> 94//#include <qlabel.h>
95 95
96 96
97#ifndef DESKTOP_VERSION 97#ifndef DESKTOP_VERSION
98#include <qpe/ir.h> 98#include <qpe/ir.h>
99#include <qpe/qpemenubar.h> 99#include <qpe/qpemenubar.h>
100#include <qtopia/qcopenvelope_qws.h> 100#include <qtopia/qcopenvelope_qws.h>
101#else 101#else
102 102
103#include <qmenubar.h> 103#include <qmenubar.h>
104#endif 104#endif
105 105
106#endif // KAB_EMBEDDED 106#endif // KAB_EMBEDDED
107#include "kcmconfigs/kcmkabconfig.h" 107#include "kcmconfigs/kcmkabconfig.h"
108#include "kcmconfigs/kcmkdepimconfig.h" 108#include "kcmconfigs/kcmkdepimconfig.h"
109#include "kpimglobalprefs.h" 109#include "kpimglobalprefs.h"
110#include "externalapphandler.h" 110#include "externalapphandler.h"
111 111
112 112
113#include <kresources/selectdialog.h> 113#include <kresources/selectdialog.h>
114#include <kmessagebox.h> 114#include <kmessagebox.h>
115 115
116#include <picture.h> 116#include <picture.h>
117#include <resource.h> 117#include <resource.h>
118 118
119//US#include <qsplitter.h> 119//US#include <qsplitter.h>
120#include <qmap.h> 120#include <qmap.h>
121#include <qdir.h> 121#include <qdir.h>
122#include <qfile.h> 122#include <qfile.h>
123#include <qvbox.h> 123#include <qvbox.h>
124#include <qlayout.h> 124#include <qlayout.h>
125#include <qclipboard.h> 125#include <qclipboard.h>
126#include <qtextstream.h> 126#include <qtextstream.h>
127 127
128#include <libkdepim/categoryselectdialog.h> 128#include <libkdepim/categoryselectdialog.h>
129#include <kabc/vcardconverter.h> 129#include <kabc/vcardconverter.h>
130 130
131 131
132#include "addresseeutil.h" 132#include "addresseeutil.h"
133#include "undocmds.h" 133#include "undocmds.h"
134#include "addresseeeditordialog.h" 134#include "addresseeeditordialog.h"
135#include "viewmanager.h" 135#include "viewmanager.h"
136#include "details/detailsviewcontainer.h" 136#include "details/detailsviewcontainer.h"
137#include "kabprefs.h" 137#include "kabprefs.h"
138#include "xxportmanager.h" 138#include "xxportmanager.h"
139#include "incsearchwidget.h" 139#include "incsearchwidget.h"
140#include "jumpbuttonbar.h" 140#include "jumpbuttonbar.h"
141#include "extensionmanager.h" 141#include "extensionmanager.h"
142#include "addresseeconfig.h" 142#include "addresseeconfig.h"
143#include <kcmultidialog.h> 143#include <kcmultidialog.h>
144 144
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 146
147#include "kaimportoldialog.h" 147#include "kaimportoldialog.h"
148#else 148#else
149#include <unistd.h> 149#include <unistd.h>
150#endif 150#endif
151// sync includes 151// sync includes
152#include <libkdepim/ksyncprofile.h> 152#include <libkdepim/ksyncprofile.h>
153#include <libkdepim/ksyncprefsdialog.h> 153#include <libkdepim/ksyncprefsdialog.h>
154 154
155 155
156bool pasteWithNewUid = true; 156bool pasteWithNewUid = true;
157 157
158#ifdef KAB_EMBEDDED 158#ifdef KAB_EMBEDDED
159KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 159KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
160 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 160 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
161 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 161 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
162 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 162 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
163#else //KAB_EMBEDDED 163#else //KAB_EMBEDDED
164KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 164KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
165 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 165 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
166 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 166 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
167 mReadWrite( readWrite ), mModified( false ) 167 mReadWrite( readWrite ), mModified( false )
168#endif //KAB_EMBEDDED 168#endif //KAB_EMBEDDED
169{ 169{
170 170
171 mBlockSaveFlag = false; 171 mBlockSaveFlag = false;
172 mExtensionBarSplitter = 0; 172 mExtensionBarSplitter = 0;
173 mIsPart = !parent->inherits( "KAddressBookMain" ); 173 mIsPart = !parent->inherits( "KAddressBookMain" );
174 174
175 mAddressBook = KABC::StdAddressBook::self(); 175 mAddressBook = KABC::StdAddressBook::self();
176 KABC::StdAddressBook::setAutomaticSave( false ); 176 KABC::StdAddressBook::setAutomaticSave( false );
177 177
178#ifndef KAB_EMBEDDED 178#ifndef KAB_EMBEDDED
179 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 179 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
180#endif //KAB_EMBEDDED 180#endif //KAB_EMBEDDED
181 181
182 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 182 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
183 SLOT( addressBookChanged() ) ); 183 SLOT( addressBookChanged() ) );
184 184
185#if 0 185#if 0
186 // LP moved to addressbook init method 186 // LP moved to addressbook init method
187 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 187 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
188 "X-Department", "KADDRESSBOOK" ); 188 "X-Department", "KADDRESSBOOK" );
189 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 189 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
190 "X-Profession", "KADDRESSBOOK" ); 190 "X-Profession", "KADDRESSBOOK" );
191 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 191 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
192 "X-AssistantsName", "KADDRESSBOOK" ); 192 "X-AssistantsName", "KADDRESSBOOK" );
193 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 193 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
194 "X-ManagersName", "KADDRESSBOOK" ); 194 "X-ManagersName", "KADDRESSBOOK" );
195 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 195 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
196 "X-SpousesName", "KADDRESSBOOK" ); 196 "X-SpousesName", "KADDRESSBOOK" );
197 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 197 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
198 "X-Office", "KADDRESSBOOK" ); 198 "X-Office", "KADDRESSBOOK" );
199 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 199 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
200 "X-IMAddress", "KADDRESSBOOK" ); 200 "X-IMAddress", "KADDRESSBOOK" );
201 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 201 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
202 "X-Anniversary", "KADDRESSBOOK" ); 202 "X-Anniversary", "KADDRESSBOOK" );
203 203
204 //US added this field to become compatible with Opie/qtopia addressbook 204 //US added this field to become compatible with Opie/qtopia addressbook
205 // values can be "female" or "male" or "". An empty field represents undefined. 205 // values can be "female" or "male" or "". An empty field represents undefined.
206 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 206 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
207 "X-Gender", "KADDRESSBOOK" ); 207 "X-Gender", "KADDRESSBOOK" );
208 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 208 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
209 "X-Children", "KADDRESSBOOK" ); 209 "X-Children", "KADDRESSBOOK" );
210 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 210 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
211 "X-FreeBusyUrl", "KADDRESSBOOK" ); 211 "X-FreeBusyUrl", "KADDRESSBOOK" );
212#endif 212#endif
213 initGUI(); 213 initGUI();
214 214
215 mIncSearchWidget->setFocus(); 215 mIncSearchWidget->setFocus();
216 216
217 217
218 connect( mViewManager, SIGNAL( selected( const QString& ) ), 218 connect( mViewManager, SIGNAL( selected( const QString& ) ),
219 SLOT( setContactSelected( const QString& ) ) ); 219 SLOT( setContactSelected( const QString& ) ) );
220 connect( mViewManager, SIGNAL( executed( const QString& ) ), 220 connect( mViewManager, SIGNAL( executed( const QString& ) ),
221 SLOT( executeContact( const QString& ) ) ); 221 SLOT( executeContact( const QString& ) ) );
222 222
223 connect( mViewManager, SIGNAL( deleteRequest( ) ), 223 connect( mViewManager, SIGNAL( deleteRequest( ) ),
224 SLOT( deleteContacts( ) ) ); 224 SLOT( deleteContacts( ) ) );
225 connect( mViewManager, SIGNAL( modified() ), 225 connect( mViewManager, SIGNAL( modified() ),
226 SLOT( setModified() ) ); 226 SLOT( setModified() ) );
227 227
228 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 228 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
229 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 229 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
230 230
231 connect( mXXPortManager, SIGNAL( modified() ), 231 connect( mXXPortManager, SIGNAL( modified() ),
232 SLOT( setModified() ) ); 232 SLOT( setModified() ) );
233 233
234 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 234 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
235 SLOT( incrementalSearch( const QString& ) ) ); 235 SLOT( incrementalSearch( const QString& ) ) );
236 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 236 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
237 mJumpButtonBar, SLOT( recreateButtons() ) ); 237 mJumpButtonBar, SLOT( recreateButtons() ) );
238 238
239 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 239 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
240 SLOT( sendMail( const QString& ) ) ); 240 SLOT( sendMail( const QString& ) ) );
241 241
242 242
243 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 243 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
244 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 244 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
245 245
246 246
247#ifndef KAB_EMBEDDED 247#ifndef KAB_EMBEDDED
248 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 248 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
249 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 249 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
250 250
251 connect( mDetails, SIGNAL( browse( const QString& ) ), 251 connect( mDetails, SIGNAL( browse( const QString& ) ),
252 SLOT( browse( const QString& ) ) ); 252 SLOT( browse( const QString& ) ) );
253 253
254 254
255 mAddressBookService = new KAddressBookService( this ); 255 mAddressBookService = new KAddressBookService( this );
256 256
257#endif //KAB_EMBEDDED 257#endif //KAB_EMBEDDED
258 mEditorDialog = 0; 258 mEditorDialog = 0;
259 createAddresseeEditorDialog( this ); 259 createAddresseeEditorDialog( this );
260 setModified( false ); 260 setModified( false );
261} 261}
262 262
263KABCore::~KABCore() 263KABCore::~KABCore()
264{ 264{
265 // save(); 265 // save();
266 //saveSettings(); 266 //saveSettings();
267 //KABPrefs::instance()->writeConfig(); 267 //KABPrefs::instance()->writeConfig();
268 delete AddresseeConfig::instance(); 268 delete AddresseeConfig::instance();
269 mAddressBook = 0; 269 mAddressBook = 0;
270 KABC::StdAddressBook::close(); 270 KABC::StdAddressBook::close();
271} 271}
272 272
273void KABCore::restoreSettings() 273void KABCore::restoreSettings()
274{ 274{
275 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 275 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
276 276
277 bool state; 277 bool state;
278 278
279 if (mMultipleViewsAtOnce) 279 if (mMultipleViewsAtOnce)
280 state = KABPrefs::instance()->mDetailsPageVisible; 280 state = KABPrefs::instance()->mDetailsPageVisible;
281 else 281 else
282 state = false; 282 state = false;
283 283
284 mActionDetails->setChecked( state ); 284 mActionDetails->setChecked( state );
285 setDetailsVisible( state ); 285 setDetailsVisible( state );
286 286
287 state = KABPrefs::instance()->mJumpButtonBarVisible; 287 state = KABPrefs::instance()->mJumpButtonBarVisible;
288 288
289 mActionJumpBar->setChecked( state ); 289 mActionJumpBar->setChecked( state );
290 setJumpButtonBarVisible( state ); 290 setJumpButtonBarVisible( state );
291/*US 291/*US
292 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 292 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
293 if ( splitterSize.count() == 0 ) { 293 if ( splitterSize.count() == 0 ) {
294 splitterSize.append( width() / 2 ); 294 splitterSize.append( width() / 2 );
295 splitterSize.append( width() / 2 ); 295 splitterSize.append( width() / 2 );
296 } 296 }
297 mMiniSplitter->setSizes( splitterSize ); 297 mMiniSplitter->setSizes( splitterSize );
298 if ( mExtensionBarSplitter ) { 298 if ( mExtensionBarSplitter ) {
299 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 299 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
300 if ( splitterSize.count() == 0 ) { 300 if ( splitterSize.count() == 0 ) {
301 splitterSize.append( width() / 2 ); 301 splitterSize.append( width() / 2 );
302 splitterSize.append( width() / 2 ); 302 splitterSize.append( width() / 2 );
303 } 303 }
304 mExtensionBarSplitter->setSizes( splitterSize ); 304 mExtensionBarSplitter->setSizes( splitterSize );
305 305
306 } 306 }
307*/ 307*/
308 mViewManager->restoreSettings(); 308 mViewManager->restoreSettings();
309 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 309 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
310 mExtensionManager->restoreSettings(); 310 mExtensionManager->restoreSettings();
311#ifdef DESKTOP_VERSION 311#ifdef DESKTOP_VERSION
312 int wid = width(); 312 int wid = width();
313 if ( wid < 10 ) 313 if ( wid < 10 )
314 wid = 400; 314 wid = 400;
315#else 315#else
316 int wid = QApplication::desktop()->width(); 316 int wid = QApplication::desktop()->width();
317 if ( wid < 640 ) 317 if ( wid < 640 )
318 wid = QApplication::desktop()->height(); 318 wid = QApplication::desktop()->height();
319#endif 319#endif
320 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; 320 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
321 if ( true /*splitterSize.count() == 0*/ ) { 321 if ( true /*splitterSize.count() == 0*/ ) {
322 splitterSize.append( wid / 2 ); 322 splitterSize.append( wid / 2 );
323 splitterSize.append( wid / 2 ); 323 splitterSize.append( wid / 2 );
324 } 324 }
325 mMiniSplitter->setSizes( splitterSize ); 325 mMiniSplitter->setSizes( splitterSize );
326 if ( mExtensionBarSplitter ) { 326 if ( mExtensionBarSplitter ) {
327 //splitterSize = KABPrefs::instance()->mExtensionsSplitter; 327 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
328 if ( true /*splitterSize.count() == 0*/ ) { 328 if ( true /*splitterSize.count() == 0*/ ) {
329 splitterSize.append( wid / 2 ); 329 splitterSize.append( wid / 2 );
330 splitterSize.append( wid / 2 ); 330 splitterSize.append( wid / 2 );
331 } 331 }
332 mExtensionBarSplitter->setSizes( splitterSize ); 332 mExtensionBarSplitter->setSizes( splitterSize );
333 333
334 } 334 }
335 335
336 336
337} 337}
338 338
339void KABCore::saveSettings() 339void KABCore::saveSettings()
340{ 340{
341 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 341 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
342 if ( mExtensionBarSplitter ) 342 if ( mExtensionBarSplitter )
343 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 343 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
344 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 344 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
345 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 345 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
346#ifndef KAB_EMBEDDED 346#ifndef KAB_EMBEDDED
347 347
348 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 348 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
349 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 349 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
350#endif //KAB_EMBEDDED 350#endif //KAB_EMBEDDED
351 mExtensionManager->saveSettings(); 351 mExtensionManager->saveSettings();
352 mViewManager->saveSettings(); 352 mViewManager->saveSettings();
353 353
354 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 354 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
355} 355}
356 356
357KABC::AddressBook *KABCore::addressBook() const 357KABC::AddressBook *KABCore::addressBook() const
358{ 358{
359 return mAddressBook; 359 return mAddressBook;
360} 360}
361 361
362KConfig *KABCore::config() 362KConfig *KABCore::config()
363{ 363{
364#ifndef KAB_EMBEDDED 364#ifndef KAB_EMBEDDED
365 return KABPrefs::instance()->config(); 365 return KABPrefs::instance()->config();
366#else //KAB_EMBEDDED 366#else //KAB_EMBEDDED
367 return KABPrefs::instance()->getConfig(); 367 return KABPrefs::instance()->getConfig();
368#endif //KAB_EMBEDDED 368#endif //KAB_EMBEDDED
369} 369}
370 370
371KActionCollection *KABCore::actionCollection() const 371KActionCollection *KABCore::actionCollection() const
372{ 372{
373 return mGUIClient->actionCollection(); 373 return mGUIClient->actionCollection();
374} 374}
375 375
376KABC::Field *KABCore::currentSearchField() const 376KABC::Field *KABCore::currentSearchField() const
377{ 377{
378 if (mIncSearchWidget) 378 if (mIncSearchWidget)
379 return mIncSearchWidget->currentField(); 379 return mIncSearchWidget->currentField();
380 else 380 else
381 return 0; 381 return 0;
382} 382}
383 383
384QStringList KABCore::selectedUIDs() const 384QStringList KABCore::selectedUIDs() const
385{ 385{
386 return mViewManager->selectedUids(); 386 return mViewManager->selectedUids();
387} 387}
388 388
389KABC::Resource *KABCore::requestResource( QWidget *parent ) 389KABC::Resource *KABCore::requestResource( QWidget *parent )
390{ 390{
391 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 391 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
392 392
393 QPtrList<KRES::Resource> kresResources; 393 QPtrList<KRES::Resource> kresResources;
394 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 394 QPtrListIterator<KABC::Resource> resIt( kabcResources );
395 KABC::Resource *resource; 395 KABC::Resource *resource;
396 while ( ( resource = resIt.current() ) != 0 ) { 396 while ( ( resource = resIt.current() ) != 0 ) {
397 ++resIt; 397 ++resIt;
398 if ( !resource->readOnly() ) { 398 if ( !resource->readOnly() ) {
399 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 399 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
400 if ( res ) 400 if ( res )
401 kresResources.append( res ); 401 kresResources.append( res );
402 } 402 }
403 } 403 }
404 404
405 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 405 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
406 return static_cast<KABC::Resource*>( res ); 406 return static_cast<KABC::Resource*>( res );
407} 407}
408 408
409#ifndef KAB_EMBEDDED 409#ifndef KAB_EMBEDDED
410KAboutData *KABCore::createAboutData() 410KAboutData *KABCore::createAboutData()
411#else //KAB_EMBEDDED 411#else //KAB_EMBEDDED
412void KABCore::createAboutData() 412void KABCore::createAboutData()
413#endif //KAB_EMBEDDED 413#endif //KAB_EMBEDDED
414{ 414{
415#ifndef KAB_EMBEDDED 415#ifndef KAB_EMBEDDED
416 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 416 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
417 "3.1", I18N_NOOP( "The KDE Address Book" ), 417 "3.1", I18N_NOOP( "The KDE Address Book" ),
418 KAboutData::License_GPL_V2, 418 KAboutData::License_GPL_V2,
419 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 419 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
420 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 420 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
421 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 421 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
422 about->addAuthor( "Cornelius Schumacher", 422 about->addAuthor( "Cornelius Schumacher",
423 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 423 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
424 "schumacher@kde.org" ); 424 "schumacher@kde.org" );
425 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 425 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
426 "mpilone@slac.com" ); 426 "mpilone@slac.com" );
427 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 427 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
428 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 428 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
429 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 429 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
430 "michel@klaralvdalens-datakonsult.se" ); 430 "michel@klaralvdalens-datakonsult.se" );
431 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 431 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
432 "hansen@kde.org" ); 432 "hansen@kde.org" );
433 433
434 return about; 434 return about;
435#endif //KAB_EMBEDDED 435#endif //KAB_EMBEDDED
436 436
437 QString version; 437 QString version;
438#include <../version> 438#include <../version>
439 QMessageBox::about( this, "About KAddressbook/Pi", 439 QMessageBox::about( this, "About KAddressbook/Pi",
440 "KAddressbook/Platform-independent\n" 440 "KAddressbook/Platform-independent\n"
441 "(KA/Pi) " +version + " - " + 441 "(KA/Pi) " +version + " - " +
442#ifdef DESKTOP_VERSION 442#ifdef DESKTOP_VERSION
443 "Desktop Edition\n" 443 "Desktop Edition\n"
444#else 444#else
445 "PDA-Edition\n" 445 "PDA-Edition\n"
446 "for: Zaurus 5500 / 7x0 / 8x0\n" 446 "for: Zaurus 5500 / 7x0 / 8x0\n"
447#endif 447#endif
448 448
449 "(c) 2004 Ulf Schenk\n" 449 "(c) 2004 Ulf Schenk\n"
450 "(c) 2004 Lutz Rogowski\n" 450 "(c) 2004 Lutz Rogowski\n"
451 "(c) 1997-2003, The KDE PIM Team\n" 451 "(c) 1997-2003, The KDE PIM Team\n"
452 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 452 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
453 "Don Sanders Original author\n" 453 "Don Sanders Original author\n"
454 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 454 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
455 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 455 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
456 "Greg Stern DCOP interface\n" 456 "Greg Stern DCOP interface\n"
457 "Mark Westcot Contact pinning\n" 457 "Mark Westcot Contact pinning\n"
458 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 458 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
459 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 459 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
460#ifdef _WIN32_ 460#ifdef _WIN32_
461 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 461 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
462#endif 462#endif
463 ); 463 );
464} 464}
465 465
466void KABCore::setContactSelected( const QString &uid ) 466void KABCore::setContactSelected( const QString &uid )
467{ 467{
468 KABC::Addressee addr = mAddressBook->findByUid( uid ); 468 KABC::Addressee addr = mAddressBook->findByUid( uid );
469 if ( !mDetails->isHidden() ) 469 if ( !mDetails->isHidden() )
470 mDetails->setAddressee( addr ); 470 mDetails->setAddressee( addr );
471 471
472 if ( !addr.isEmpty() ) { 472 if ( !addr.isEmpty() ) {
473 emit contactSelected( addr.formattedName() ); 473 emit contactSelected( addr.formattedName() );
474 KABC::Picture pic = addr.photo(); 474 KABC::Picture pic = addr.photo();
475 if ( pic.isIntern() ) { 475 if ( pic.isIntern() ) {
476//US emit contactSelected( pic.data() ); 476//US emit contactSelected( pic.data() );
477//US instead use: 477//US instead use:
478 QPixmap px; 478 QPixmap px;
479 if (pic.data().isNull() != true) 479 if (pic.data().isNull() != true)
480 { 480 {
481 px.convertFromImage(pic.data()); 481 px.convertFromImage(pic.data());
482 } 482 }
483 483
484 emit contactSelected( px ); 484 emit contactSelected( px );
485 } 485 }
486 } 486 }
487 487
488 488
489 mExtensionManager->setSelectionChanged(); 489 mExtensionManager->setSelectionChanged();
490 490
491 // update the actions 491 // update the actions
492 bool selected = !uid.isEmpty(); 492 bool selected = !uid.isEmpty();
493 493
494 if ( mReadWrite ) { 494 if ( mReadWrite ) {
495 mActionCut->setEnabled( selected ); 495 mActionCut->setEnabled( selected );
496 mActionPaste->setEnabled( selected ); 496 mActionPaste->setEnabled( selected );
497 } 497 }
498 498
499 mActionCopy->setEnabled( selected ); 499 mActionCopy->setEnabled( selected );
500 mActionDelete->setEnabled( selected ); 500 mActionDelete->setEnabled( selected );
501 mActionEditAddressee->setEnabled( selected ); 501 mActionEditAddressee->setEnabled( selected );
502 mActionMail->setEnabled( selected ); 502 mActionMail->setEnabled( selected );
503 mActionMailVCard->setEnabled( selected ); 503 mActionMailVCard->setEnabled( selected );
504 //if (mActionBeam) 504 //if (mActionBeam)
505 //mActionBeam->setEnabled( selected ); 505 //mActionBeam->setEnabled( selected );
506 506
507 if (mActionBeamVCard) 507 if (mActionBeamVCard)
508 mActionBeamVCard->setEnabled( selected ); 508 mActionBeamVCard->setEnabled( selected );
509 509
510 mActionWhoAmI->setEnabled( selected ); 510 mActionWhoAmI->setEnabled( selected );
511 mActionCategories->setEnabled( selected ); 511 mActionCategories->setEnabled( selected );
512} 512}
513 513
514void KABCore::sendMail() 514void KABCore::sendMail()
515{ 515{
516 sendMail( mViewManager->selectedEmails().join( ", " ) ); 516 sendMail( mViewManager->selectedEmails().join( ", " ) );
517} 517}
518 518
519void KABCore::sendMail( const QString& emaillist ) 519void KABCore::sendMail( const QString& emaillist )
520{ 520{
521 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 521 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
522 if (emaillist.contains(",") > 0) 522 if (emaillist.contains(",") > 0)
523 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 523 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
524 else 524 else
525 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 525 ExternalAppHandler::instance()->mailToOneContact( emaillist );
526} 526}
527 527
528 528
529 529
530void KABCore::mailVCard() 530void KABCore::mailVCard()
531{ 531{
532 QStringList uids = mViewManager->selectedUids(); 532 QStringList uids = mViewManager->selectedUids();
533 if ( !uids.isEmpty() ) 533 if ( !uids.isEmpty() )
534 mailVCard( uids ); 534 mailVCard( uids );
535} 535}
536 536
537void KABCore::mailVCard( const QStringList& uids ) 537void KABCore::mailVCard( const QStringList& uids )
538{ 538{
539 QStringList urls; 539 QStringList urls;
540 540
541// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 541// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
542 542
543 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 543 QString dirName = "/tmp/" + KApplication::randomString( 8 );
544 544
545 545
546 546
547 QDir().mkdir( dirName, true ); 547 QDir().mkdir( dirName, true );
548 548
549 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 549 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
550 KABC::Addressee a = mAddressBook->findByUid( *it ); 550 KABC::Addressee a = mAddressBook->findByUid( *it );
551 551
552 if ( a.isEmpty() ) 552 if ( a.isEmpty() )
553 continue; 553 continue;
554 554
555 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 555 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
556 556
557 QString fileName = dirName + "/" + name; 557 QString fileName = dirName + "/" + name;
558 558
559 QFile outFile(fileName); 559 QFile outFile(fileName);
560 560
561 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 561 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
562 KABC::VCardConverter converter; 562 KABC::VCardConverter converter;
563 QString vcard; 563 QString vcard;
564 564
565 converter.addresseeToVCard( a, vcard ); 565 converter.addresseeToVCard( a, vcard );
566 566
567 QTextStream t( &outFile ); // use a text stream 567 QTextStream t( &outFile ); // use a text stream
568 t.setEncoding( QTextStream::UnicodeUTF8 ); 568 t.setEncoding( QTextStream::UnicodeUTF8 );
569 t << vcard; 569 t << vcard;
570 570
571 outFile.close(); 571 outFile.close();
572 572
573 urls.append( fileName ); 573 urls.append( fileName );
574 } 574 }
575 } 575 }
576 576
577 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 577 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
578 578
579 579
580/*US 580/*US
581 kapp->invokeMailer( QString::null, QString::null, QString::null, 581 kapp->invokeMailer( QString::null, QString::null, QString::null,
582 QString::null, // subject 582 QString::null, // subject
583 QString::null, // body 583 QString::null, // body
584 QString::null, 584 QString::null,
585 urls ); // attachments 585 urls ); // attachments
586*/ 586*/
587 587
588} 588}
589 589
590/** 590/**
591 Beams the "WhoAmI contact. 591 Beams the "WhoAmI contact.
592*/ 592*/
593void KABCore::beamMySelf() 593void KABCore::beamMySelf()
594{ 594{
595 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 595 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
596 if (!a.isEmpty()) 596 if (!a.isEmpty())
597 { 597 {
598 QStringList uids; 598 QStringList uids;
599 uids << a.uid(); 599 uids << a.uid();
600 600
601 beamVCard(uids); 601 beamVCard(uids);
602 } else { 602 } else {
603 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 603 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
604 604
605 605
606 } 606 }
607} 607}
608 608
609void KABCore::beamVCard() 609void KABCore::beamVCard()
610{ 610{
611 QStringList uids = mViewManager->selectedUids(); 611 QStringList uids = mViewManager->selectedUids();
612 if ( !uids.isEmpty() ) 612 if ( !uids.isEmpty() )
613 beamVCard( uids ); 613 beamVCard( uids );
614} 614}
615 615
616 616
617void KABCore::beamVCard(const QStringList& uids) 617void KABCore::beamVCard(const QStringList& uids)
618{ 618{
619/*US 619/*US
620 QString beamFilename; 620 QString beamFilename;
621 Opie::OPimContact c; 621 Opie::OPimContact c;
622 if ( actionPersonal->isOn() ) { 622 if ( actionPersonal->isOn() ) {
623 beamFilename = addressbookPersonalVCardName(); 623 beamFilename = addressbookPersonalVCardName();
624 if ( !QFile::exists( beamFilename ) ) 624 if ( !QFile::exists( beamFilename ) )
625 return; // can't beam a non-existent file 625 return; // can't beam a non-existent file
626 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 626 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
627 beamFilename ); 627 beamFilename );
628 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 628 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
629 Opie::OPimContactAccess::List allList = access->allRecords(); 629 Opie::OPimContactAccess::List allList = access->allRecords();
630 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 630 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
631 c = *it; 631 c = *it;
632 632
633 delete access; 633 delete access;
634 } else { 634 } else {
635 unlink( beamfile ); // delete if exists 635 unlink( beamfile ); // delete if exists
636 mkdir("/tmp/obex/", 0755); 636 mkdir("/tmp/obex/", 0755);
637 c = m_abView -> currentEntry(); 637 c = m_abView -> currentEntry();
638 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 638 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
639 beamfile ); 639 beamfile );
640 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 640 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
641 access->add( c ); 641 access->add( c );
642 access->save(); 642 access->save();
643 delete access; 643 delete access;
644 644
645 beamFilename = beamfile; 645 beamFilename = beamfile;
646 } 646 }
647 647
648 owarn << "Beaming: " << beamFilename << oendl; 648 owarn << "Beaming: " << beamFilename << oendl;
649*/ 649*/
650 650
651#if 0 651#if 0
652 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 652 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
653 653
654 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 654 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
655 655
656 QString name = "contact.vcf"; 656 QString name = "contact.vcf";
657 657
658 QString fileName = dirName + "/" + name; 658 QString fileName = dirName + "/" + name;
659#endif 659#endif
660 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 660 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
661 // 661 //
662 QString fileName = "/tmp/kapibeamfile.vcf"; 662 QString fileName = "/tmp/kapibeamfile.vcf";
663 663
664 664
665 //QDir().mkdir( dirName, true ); 665 //QDir().mkdir( dirName, true );
666 666
667 667
668 KABC::VCardConverter converter; 668 KABC::VCardConverter converter;
669 QString description; 669 QString description;
670 QString datastream; 670 QString datastream;
671 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 671 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
672 KABC::Addressee a = mAddressBook->findByUid( *it ); 672 KABC::Addressee a = mAddressBook->findByUid( *it );
673 673
674 if ( a.isEmpty() ) 674 if ( a.isEmpty() )
675 continue; 675 continue;
676 676
677 if (description.isEmpty()) 677 if (description.isEmpty())
678 description = a.formattedName(); 678 description = a.formattedName();
679 679
680 QString vcard; 680 QString vcard;
681 converter.addresseeToVCard( a, vcard ); 681 converter.addresseeToVCard( a, vcard );
682 int start = 0; 682 int start = 0;
683 int next; 683 int next;
684 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 684 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
685 int semi = vcard.find(";", next); 685 int semi = vcard.find(";", next);
686 int dopp = vcard.find(":", next); 686 int dopp = vcard.find(":", next);
687 int sep; 687 int sep;
688 if ( semi < dopp && semi >= 0 ) 688 if ( semi < dopp && semi >= 0 )
689 sep = semi ; 689 sep = semi ;
690 else 690 else
691 sep = dopp; 691 sep = dopp;
692 datastream +=vcard.mid( start, next - start); 692 datastream +=vcard.mid( start, next - start);
693 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 693 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
694 start = sep; 694 start = sep;
695 } 695 }
696 datastream += vcard.mid( start,vcard.length() ); 696 datastream += vcard.mid( start,vcard.length() );
697 } 697 }
698#ifndef DESKTOP_VERSION 698#ifndef DESKTOP_VERSION
699 QFile outFile(fileName); 699 QFile outFile(fileName);
700 if ( outFile.open(IO_WriteOnly) ) { 700 if ( outFile.open(IO_WriteOnly) ) {
701 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 701 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
702 QTextStream t( &outFile ); // use a text stream 702 QTextStream t( &outFile ); // use a text stream
703 t.setEncoding( QTextStream::UnicodeUTF8 ); 703 t.setEncoding( QTextStream::UnicodeUTF8 );
704 t <<datastream; 704 t <<datastream;
705 outFile.close(); 705 outFile.close();
706 Ir *ir = new Ir( this ); 706 Ir *ir = new Ir( this );
707 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 707 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
708 ir->send( fileName, description, "text/x-vCard" ); 708 ir->send( fileName, description, "text/x-vCard" );
709 } else { 709 } else {
710 qDebug("Error open temp beam file "); 710 qDebug("Error open temp beam file ");
711 return; 711 return;
712 } 712 }
713#endif 713#endif
714 714
715} 715}
716 716
717void KABCore::beamDone( Ir *ir ) 717void KABCore::beamDone( Ir *ir )
718{ 718{
719#ifndef DESKTOP_VERSION 719#ifndef DESKTOP_VERSION
720 delete ir; 720 delete ir;
721#endif 721#endif
722} 722}
723 723
724 724
725void KABCore::browse( const QString& url ) 725void KABCore::browse( const QString& url )
726{ 726{
727#ifndef KAB_EMBEDDED 727#ifndef KAB_EMBEDDED
728 kapp->invokeBrowser( url ); 728 kapp->invokeBrowser( url );
729#else //KAB_EMBEDDED 729#else //KAB_EMBEDDED
730 qDebug("KABCore::browse must be fixed"); 730 qDebug("KABCore::browse must be fixed");
731#endif //KAB_EMBEDDED 731#endif //KAB_EMBEDDED
732} 732}
733 733
734void KABCore::selectAllContacts() 734void KABCore::selectAllContacts()
735{ 735{
736 mViewManager->setSelected( QString::null, true ); 736 mViewManager->setSelected( QString::null, true );
737} 737}
738 738
739void KABCore::deleteContacts() 739void KABCore::deleteContacts()
740{ 740{
741 QStringList uidList = mViewManager->selectedUids(); 741 QStringList uidList = mViewManager->selectedUids();
742 deleteContacts( uidList ); 742 deleteContacts( uidList );
743} 743}
744 744
745void KABCore::deleteContacts( const QStringList &uids ) 745void KABCore::deleteContacts( const QStringList &uids )
746{ 746{
747 if ( uids.count() > 0 ) { 747 if ( uids.count() > 0 ) {
748 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 748 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
749 UndoStack::instance()->push( command ); 749 UndoStack::instance()->push( command );
750 RedoStack::instance()->clear(); 750 RedoStack::instance()->clear();
751 751
752 // now if we deleted anything, refresh 752 // now if we deleted anything, refresh
753 setContactSelected( QString::null ); 753 setContactSelected( QString::null );
754 setModified( true ); 754 setModified( true );
755 } 755 }
756} 756}
757 757
758void KABCore::copyContacts() 758void KABCore::copyContacts()
759{ 759{
760 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 760 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
761 761
762 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 762 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
763 763
764 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 764 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
765 765
766 QClipboard *cb = QApplication::clipboard(); 766 QClipboard *cb = QApplication::clipboard();
767 cb->setText( clipText ); 767 cb->setText( clipText );
768} 768}
769 769
770void KABCore::cutContacts() 770void KABCore::cutContacts()
771{ 771{
772 QStringList uidList = mViewManager->selectedUids(); 772 QStringList uidList = mViewManager->selectedUids();
773 773
774//US if ( uidList.size() > 0 ) { 774//US if ( uidList.size() > 0 ) {
775 if ( uidList.count() > 0 ) { 775 if ( uidList.count() > 0 ) {
776 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 776 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
777 UndoStack::instance()->push( command ); 777 UndoStack::instance()->push( command );
778 RedoStack::instance()->clear(); 778 RedoStack::instance()->clear();
779 779
780 setModified( true ); 780 setModified( true );
781 } 781 }
782} 782}
783 783
784void KABCore::pasteContacts() 784void KABCore::pasteContacts()
785{ 785{
786 QClipboard *cb = QApplication::clipboard(); 786 QClipboard *cb = QApplication::clipboard();
787 787
788 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 788 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
789 789
790 pasteContacts( list ); 790 pasteContacts( list );
791} 791}
792 792
793void KABCore::pasteContacts( KABC::Addressee::List &list ) 793void KABCore::pasteContacts( KABC::Addressee::List &list )
794{ 794{
795 KABC::Resource *resource = requestResource( this ); 795 KABC::Resource *resource = requestResource( this );
796 KABC::Addressee::List::Iterator it; 796 KABC::Addressee::List::Iterator it;
797 for ( it = list.begin(); it != list.end(); ++it ) 797 for ( it = list.begin(); it != list.end(); ++it )
798 (*it).setResource( resource ); 798 (*it).setResource( resource );
799 799
800 PwPasteCommand *command = new PwPasteCommand( this, list ); 800 PwPasteCommand *command = new PwPasteCommand( this, list );
801 UndoStack::instance()->push( command ); 801 UndoStack::instance()->push( command );
802 RedoStack::instance()->clear(); 802 RedoStack::instance()->clear();
803 803
804 setModified( true ); 804 setModified( true );
805} 805}
806 806
807void KABCore::setWhoAmI() 807void KABCore::setWhoAmI()
808{ 808{
809 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 809 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
810 810
811 if ( addrList.count() > 1 ) { 811 if ( addrList.count() > 1 ) {
812 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 812 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
813 return; 813 return;
814 } 814 }
815 815
816 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 816 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
817 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 817 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
818 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 818 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
819} 819}
820 820
821void KABCore::setCategories() 821void KABCore::setCategories()
822{ 822{
823 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 823 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
824 if ( !dlg.exec() ) 824 if ( !dlg.exec() )
825 return; 825 return;
826 826
827 bool merge = false; 827 bool merge = false;
828 QString msg = i18n( "Merge with existing categories?" ); 828 QString msg = i18n( "Merge with existing categories?" );
829 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 829 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
830 merge = true; 830 merge = true;
831 831
832 QStringList categories = dlg.selectedCategories(); 832 QStringList categories = dlg.selectedCategories();
833 833
834 QStringList uids = mViewManager->selectedUids(); 834 QStringList uids = mViewManager->selectedUids();
835 QStringList::Iterator it; 835 QStringList::Iterator it;
836 for ( it = uids.begin(); it != uids.end(); ++it ) { 836 for ( it = uids.begin(); it != uids.end(); ++it ) {
837 KABC::Addressee addr = mAddressBook->findByUid( *it ); 837 KABC::Addressee addr = mAddressBook->findByUid( *it );
838 if ( !addr.isEmpty() ) { 838 if ( !addr.isEmpty() ) {
839 if ( !merge ) 839 if ( !merge )
840 addr.setCategories( categories ); 840 addr.setCategories( categories );
841 else { 841 else {
842 QStringList addrCategories = addr.categories(); 842 QStringList addrCategories = addr.categories();
843 QStringList::Iterator catIt; 843 QStringList::Iterator catIt;
844 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 844 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
845 if ( !addrCategories.contains( *catIt ) ) 845 if ( !addrCategories.contains( *catIt ) )
846 addrCategories.append( *catIt ); 846 addrCategories.append( *catIt );
847 } 847 }
848 addr.setCategories( addrCategories ); 848 addr.setCategories( addrCategories );
849 } 849 }
850 850
851 mAddressBook->insertAddressee( addr ); 851 mAddressBook->insertAddressee( addr );
852 } 852 }
853 } 853 }
854 854
855 if ( uids.count() > 0 ) 855 if ( uids.count() > 0 )
856 setModified( true ); 856 setModified( true );
857} 857}
858 858
859void KABCore::setSearchFields( const KABC::Field::List &fields ) 859void KABCore::setSearchFields( const KABC::Field::List &fields )
860{ 860{
861 mIncSearchWidget->setFields( fields ); 861 mIncSearchWidget->setFields( fields );
862} 862}
863 863
864void KABCore::incrementalSearch( const QString& text ) 864void KABCore::incrementalSearch( const QString& text )
865{ 865{
866 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 866 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
867} 867}
868 868
869void KABCore::setModified() 869void KABCore::setModified()
870{ 870{
871 setModified( true ); 871 setModified( true );
872} 872}
873 873
874void KABCore::setModifiedWOrefresh() 874void KABCore::setModifiedWOrefresh()
875{ 875{
876 // qDebug("KABCore::setModifiedWOrefresh() "); 876 // qDebug("KABCore::setModifiedWOrefresh() ");
877 mModified = true; 877 mModified = true;
878 mActionSave->setEnabled( mModified ); 878 mActionSave->setEnabled( mModified );
879#ifdef DESKTOP_VERSION 879#ifdef DESKTOP_VERSION
880 mDetails->refreshView(); 880 mDetails->refreshView();
881#endif 881#endif
882 882
883} 883}
884void KABCore::setModified( bool modified ) 884void KABCore::setModified( bool modified )
885{ 885{
886 mModified = modified; 886 mModified = modified;
887 mActionSave->setEnabled( mModified ); 887 mActionSave->setEnabled( mModified );
888 888
889 if ( modified ) 889 if ( modified )
890 mJumpButtonBar->recreateButtons(); 890 mJumpButtonBar->recreateButtons();
891 891
892 mViewManager->refreshView(); 892 mViewManager->refreshView();
893 mDetails->refreshView(); 893 mDetails->refreshView();
894 894
895} 895}
896 896
897bool KABCore::modified() const 897bool KABCore::modified() const
898{ 898{
899 return mModified; 899 return mModified;
900} 900}
901 901
902void KABCore::contactModified( const KABC::Addressee &addr ) 902void KABCore::contactModified( const KABC::Addressee &addr )
903{ 903{
904 904
905 Command *command = 0; 905 Command *command = 0;
906 QString uid; 906 QString uid;
907 907
908 // check if it exists already 908 // check if it exists already
909 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 909 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
910 if ( origAddr.isEmpty() ) 910 if ( origAddr.isEmpty() )
911 command = new PwNewCommand( mAddressBook, addr ); 911 command = new PwNewCommand( mAddressBook, addr );
912 else { 912 else {
913 command = new PwEditCommand( mAddressBook, origAddr, addr ); 913 command = new PwEditCommand( mAddressBook, origAddr, addr );
914 uid = addr.uid(); 914 uid = addr.uid();
915 } 915 }
916 916
917 UndoStack::instance()->push( command ); 917 UndoStack::instance()->push( command );
918 RedoStack::instance()->clear(); 918 RedoStack::instance()->clear();
919 919
920 setModified( true ); 920 setModified( true );
921} 921}
922 922
923void KABCore::newContact() 923void KABCore::newContact()
924{ 924{
925 925
926 926
927 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 927 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
928 928
929 QPtrList<KRES::Resource> kresResources; 929 QPtrList<KRES::Resource> kresResources;
930 QPtrListIterator<KABC::Resource> it( kabcResources ); 930 QPtrListIterator<KABC::Resource> it( kabcResources );
931 KABC::Resource *resource; 931 KABC::Resource *resource;
932 while ( ( resource = it.current() ) != 0 ) { 932 while ( ( resource = it.current() ) != 0 ) {
933 ++it; 933 ++it;
934 if ( !resource->readOnly() ) { 934 if ( !resource->readOnly() ) {
935 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 935 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
936 if ( res ) 936 if ( res )
937 kresResources.append( res ); 937 kresResources.append( res );
938 } 938 }
939 } 939 }
940 940
941 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 941 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
942 resource = static_cast<KABC::Resource*>( res ); 942 resource = static_cast<KABC::Resource*>( res );
943 943
944 if ( resource ) { 944 if ( resource ) {
945 KABC::Addressee addr; 945 KABC::Addressee addr;
946 addr.setResource( resource ); 946 addr.setResource( resource );
947 mEditorDialog->setAddressee( addr ); 947 mEditorDialog->setAddressee( addr );
948 KApplication::execDialog ( mEditorDialog ); 948 KApplication::execDialog ( mEditorDialog );
949 949
950 } else 950 } else
951 return; 951 return;
952 952
953 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 953 // mEditorDict.insert( dialog->addressee().uid(), dialog );
954 954
955 955
956} 956}
957 957
958void KABCore::addEmail( QString aStr ) 958void KABCore::addEmail( QString aStr )
959{ 959{
960#ifndef KAB_EMBEDDED 960#ifndef KAB_EMBEDDED
961 QString fullName, email; 961 QString fullName, email;
962 962
963 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 963 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
964 964
965 // Try to lookup the addressee matching the email address 965 // Try to lookup the addressee matching the email address
966 bool found = false; 966 bool found = false;
967 QStringList emailList; 967 QStringList emailList;
968 KABC::AddressBook::Iterator it; 968 KABC::AddressBook::Iterator it;
969 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 969 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
970 emailList = (*it).emails(); 970 emailList = (*it).emails();
971 if ( emailList.contains( email ) > 0 ) { 971 if ( emailList.contains( email ) > 0 ) {
972 found = true; 972 found = true;
973 (*it).setNameFromString( fullName ); 973 (*it).setNameFromString( fullName );
974 editContact( (*it).uid() ); 974 editContact( (*it).uid() );
975 } 975 }
976 } 976 }
977 977
978 if ( !found ) { 978 if ( !found ) {
979 KABC::Addressee addr; 979 KABC::Addressee addr;
980 addr.setNameFromString( fullName ); 980 addr.setNameFromString( fullName );
981 addr.insertEmail( email, true ); 981 addr.insertEmail( email, true );
982 982
983 mAddressBook->insertAddressee( addr ); 983 mAddressBook->insertAddressee( addr );
984 mViewManager->refreshView( addr.uid() ); 984 mViewManager->refreshView( addr.uid() );
985 editContact( addr.uid() ); 985 editContact( addr.uid() );
986 } 986 }
987#else //KAB_EMBEDDED 987#else //KAB_EMBEDDED
988 qDebug("KABCore::addEmail finsih method"); 988 qDebug("KABCore::addEmail finsih method");
989#endif //KAB_EMBEDDED 989#endif //KAB_EMBEDDED
990} 990}
991 991
992void KABCore::importVCard( const KURL &url, bool showPreview ) 992void KABCore::importVCard( const KURL &url, bool showPreview )
993{ 993{
994 mXXPortManager->importVCard( url, showPreview ); 994 mXXPortManager->importVCard( url, showPreview );
995} 995}
996void KABCore::importFromOL() 996void KABCore::importFromOL()
997{ 997{
998#ifdef _WIN32_ 998#ifdef _WIN32_
999 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 999 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1000 idgl->exec(); 1000 idgl->exec();
1001 KABC::Addressee::List list = idgl->getAddressList(); 1001 KABC::Addressee::List list = idgl->getAddressList();
1002 if ( list.count() > 0 ) { 1002 if ( list.count() > 0 ) {
1003 KABC::Addressee::List listNew; 1003 KABC::Addressee::List listNew;
1004 KABC::Addressee::List listExisting; 1004 KABC::Addressee::List listExisting;
1005 KABC::Addressee::List::Iterator it; 1005 KABC::Addressee::List::Iterator it;
1006 KABC::AddressBook::Iterator iter; 1006 KABC::AddressBook::Iterator iter;
1007 for ( it = list.begin(); it != list.end(); ++it ) { 1007 for ( it = list.begin(); it != list.end(); ++it ) {
1008 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1008 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1009 listNew.append( (*it) ); 1009 listNew.append( (*it) );
1010 else 1010 else
1011 listExisting.append( (*it) ); 1011 listExisting.append( (*it) );
1012 } 1012 }
1013 if ( listExisting.count() > 0 ) 1013 if ( listExisting.count() > 0 )
1014 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1014 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1015 if ( listNew.count() > 0 ) { 1015 if ( listNew.count() > 0 ) {
1016 pasteWithNewUid = false; 1016 pasteWithNewUid = false;
1017 pasteContacts( listNew ); 1017 pasteContacts( listNew );
1018 pasteWithNewUid = true; 1018 pasteWithNewUid = true;
1019 } 1019 }
1020 } 1020 }
1021 delete idgl; 1021 delete idgl;
1022#endif 1022#endif
1023} 1023}
1024 1024
1025void KABCore::importVCard( const QString &vCard, bool showPreview ) 1025void KABCore::importVCard( const QString &vCard, bool showPreview )
1026{ 1026{
1027 mXXPortManager->importVCard( vCard, showPreview ); 1027 mXXPortManager->importVCard( vCard, showPreview );
1028} 1028}
1029 1029
1030//US added a second method without defaultparameter 1030//US added a second method without defaultparameter
1031void KABCore::editContact2() { 1031void KABCore::editContact2() {
1032 editContact( QString::null ); 1032 editContact( QString::null );
1033} 1033}
1034 1034
1035void KABCore::editContact( const QString &uid ) 1035void KABCore::editContact( const QString &uid )
1036{ 1036{
1037 1037
1038 if ( mExtensionManager->isQuickEditVisible() ) 1038 if ( mExtensionManager->isQuickEditVisible() )
1039 return; 1039 return;
1040 1040
1041 // First, locate the contact entry 1041 // First, locate the contact entry
1042 QString localUID = uid; 1042 QString localUID = uid;
1043 if ( localUID.isNull() ) { 1043 if ( localUID.isNull() ) {
1044 QStringList uidList = mViewManager->selectedUids(); 1044 QStringList uidList = mViewManager->selectedUids();
1045 if ( uidList.count() > 0 ) 1045 if ( uidList.count() > 0 )
1046 localUID = *( uidList.at( 0 ) ); 1046 localUID = *( uidList.at( 0 ) );
1047 } 1047 }
1048 1048
1049 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1049 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1050 if ( !addr.isEmpty() ) { 1050 if ( !addr.isEmpty() ) {
1051 mEditorDialog->setAddressee( addr ); 1051 mEditorDialog->setAddressee( addr );
1052 KApplication::execDialog ( mEditorDialog ); 1052 KApplication::execDialog ( mEditorDialog );
1053 } 1053 }
1054} 1054}
1055 1055
1056/** 1056/**
1057 Shows or edits the detail view for the given uid. If the uid is QString::null, 1057 Shows or edits the detail view for the given uid. If the uid is QString::null,
1058 the method will try to find a selected addressee in the view. 1058 the method will try to find a selected addressee in the view.
1059 */ 1059 */
1060void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1060void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1061{ 1061{
1062 if ( mMultipleViewsAtOnce ) 1062 if ( mMultipleViewsAtOnce )
1063 { 1063 {
1064 editContact( uid ); 1064 editContact( uid );
1065 } 1065 }
1066 else 1066 else
1067 { 1067 {
1068 setDetailsVisible( true ); 1068 setDetailsVisible( true );
1069 mActionDetails->setChecked(true); 1069 mActionDetails->setChecked(true);
1070 } 1070 }
1071 1071
1072} 1072}
1073 1073
1074void KABCore::save() 1074void KABCore::save()
1075{ 1075{
1076 if (mBlockSaveFlag) 1076 if (mBlockSaveFlag)
1077 return; 1077 return;
1078 mBlockSaveFlag = true; 1078 mBlockSaveFlag = true;
1079 if ( !mModified ) 1079 if ( !mModified )
1080 return; 1080 return;
1081 QString text = i18n( "There was an error while attempting to save\n the " 1081 QString text = i18n( "There was an error while attempting to save\n the "
1082 "address book. Please check that some \nother application is " 1082 "address book. Please check that some \nother application is "
1083 "not using it. " ); 1083 "not using it. " );
1084 statusMessage(i18n("Saving addressbook ... ")); 1084 statusMessage(i18n("Saving addressbook ... "));
1085#ifndef KAB_EMBEDDED 1085#ifndef KAB_EMBEDDED
1086 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1086 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1087 if ( !b || !b->save() ) { 1087 if ( !b || !b->save() ) {
1088 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1088 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1089 } 1089 }
1090#else //KAB_EMBEDDED 1090#else //KAB_EMBEDDED
1091 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1091 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1092 if ( !b || !b->save() ) { 1092 if ( !b || !b->save() ) {
1093 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1093 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1094 } 1094 }
1095#endif //KAB_EMBEDDED 1095#endif //KAB_EMBEDDED
1096 1096
1097 statusMessage(i18n("Addressbook saved!")); 1097 statusMessage(i18n("Addressbook saved!"));
1098 setModified( false ); 1098 setModified( false );
1099 mBlockSaveFlag = false; 1099 mBlockSaveFlag = false;
1100} 1100}
1101 1101
1102void KABCore::statusMessage(QString mess , int time ) 1102void KABCore::statusMessage(QString mess , int time )
1103{ 1103{
1104 //topLevelWidget()->setCaption( mess ); 1104 //topLevelWidget()->setCaption( mess );
1105 // pending setting timer to revome message 1105 // pending setting timer to revome message
1106} 1106}
1107void KABCore::undo() 1107void KABCore::undo()
1108{ 1108{
1109 UndoStack::instance()->undo(); 1109 UndoStack::instance()->undo();
1110 1110
1111 // Refresh the view 1111 // Refresh the view
1112 mViewManager->refreshView(); 1112 mViewManager->refreshView();
1113} 1113}
1114 1114
1115void KABCore::redo() 1115void KABCore::redo()
1116{ 1116{
1117 RedoStack::instance()->redo(); 1117 RedoStack::instance()->redo();
1118 1118
1119 // Refresh the view 1119 // Refresh the view
1120 mViewManager->refreshView(); 1120 mViewManager->refreshView();
1121} 1121}
1122 1122
1123void KABCore::setJumpButtonBarVisible( bool visible ) 1123void KABCore::setJumpButtonBarVisible( bool visible )
1124{ 1124{
1125 if (mMultipleViewsAtOnce) 1125 if (mMultipleViewsAtOnce)
1126 { 1126 {
1127 if ( visible ) 1127 if ( visible )
1128 mJumpButtonBar->show(); 1128 mJumpButtonBar->show();
1129 else 1129 else
1130 mJumpButtonBar->hide(); 1130 mJumpButtonBar->hide();
1131 } 1131 }
1132 else 1132 else
1133 { 1133 {
1134 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1134 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1135 if (mViewManager->isVisible()) 1135 if (mViewManager->isVisible())
1136 { 1136 {
1137 if ( visible ) 1137 if ( visible )
1138 mJumpButtonBar->show(); 1138 mJumpButtonBar->show();
1139 else 1139 else
1140 mJumpButtonBar->hide(); 1140 mJumpButtonBar->hide();
1141 } 1141 }
1142 else 1142 else
1143 { 1143 {
1144 mJumpButtonBar->hide(); 1144 mJumpButtonBar->hide();
1145 } 1145 }
1146 } 1146 }
1147} 1147}
1148 1148
1149 1149
1150void KABCore::setDetailsToState() 1150void KABCore::setDetailsToState()
1151{ 1151{
1152 setDetailsVisible( mActionDetails->isChecked() ); 1152 setDetailsVisible( mActionDetails->isChecked() );
1153} 1153}
1154 1154
1155 1155
1156 1156
1157void KABCore::setDetailsVisible( bool visible ) 1157void KABCore::setDetailsVisible( bool visible )
1158{ 1158{
1159 if (visible && mDetails->isHidden()) 1159 if (visible && mDetails->isHidden())
1160 { 1160 {
1161 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1161 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1162 if ( addrList.count() > 0 ) 1162 if ( addrList.count() > 0 )
1163 mDetails->setAddressee( addrList[ 0 ] ); 1163 mDetails->setAddressee( addrList[ 0 ] );
1164 } 1164 }
1165 1165
1166 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between 1166 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1167 // the listview and the detailview. We do that by changing the splitbar size. 1167 // the listview and the detailview. We do that by changing the splitbar size.
1168 if (mMultipleViewsAtOnce) 1168 if (mMultipleViewsAtOnce)
1169 { 1169 {
1170 if ( visible ) 1170 if ( visible )
1171 mDetails->show(); 1171 mDetails->show();
1172 else 1172 else
1173 mDetails->hide(); 1173 mDetails->hide();
1174 } 1174 }
1175 else 1175 else
1176 { 1176 {
1177 if ( visible ) { 1177 if ( visible ) {
1178 mViewManager->hide(); 1178 mViewManager->hide();
1179 mDetails->show(); 1179 mDetails->show();
1180 } 1180 }
1181 else { 1181 else {
1182 mViewManager->show(); 1182 mViewManager->show();
1183 mDetails->hide(); 1183 mDetails->hide();
1184 } 1184 }
1185 setJumpButtonBarVisible( !visible ); 1185 setJumpButtonBarVisible( !visible );
1186 } 1186 }
1187 1187
1188} 1188}
1189 1189
1190void KABCore::extensionChanged( int id ) 1190void KABCore::extensionChanged( int id )
1191{ 1191{
1192 //change the details view only for non desktop systems 1192 //change the details view only for non desktop systems
1193#ifndef DESKTOP_VERSION 1193#ifndef DESKTOP_VERSION
1194 1194
1195 if (id == 0) 1195 if (id == 0)
1196 { 1196 {
1197 //the user disabled the extension. 1197 //the user disabled the extension.
1198 1198
1199 if (mMultipleViewsAtOnce) 1199 if (mMultipleViewsAtOnce)
1200 { // enable detailsview again 1200 { // enable detailsview again
1201 setDetailsVisible( true ); 1201 setDetailsVisible( true );
1202 mActionDetails->setChecked( true ); 1202 mActionDetails->setChecked( true );
1203 } 1203 }
1204 else 1204 else
1205 { //go back to the listview 1205 { //go back to the listview
1206 setDetailsVisible( false ); 1206 setDetailsVisible( false );
1207 mActionDetails->setChecked( false ); 1207 mActionDetails->setChecked( false );
1208 mActionDetails->setEnabled(true); 1208 mActionDetails->setEnabled(true);
1209 } 1209 }
1210 1210
1211 } 1211 }
1212 else 1212 else
1213 { 1213 {
1214 //the user enabled the extension. 1214 //the user enabled the extension.
1215 setDetailsVisible( false ); 1215 setDetailsVisible( false );
1216 mActionDetails->setChecked( false ); 1216 mActionDetails->setChecked( false );
1217 1217
1218 if (!mMultipleViewsAtOnce) 1218 if (!mMultipleViewsAtOnce)
1219 { 1219 {
1220 mActionDetails->setEnabled(false); 1220 mActionDetails->setEnabled(false);
1221 } 1221 }
1222 1222
1223 mExtensionManager->setSelectionChanged(); 1223 mExtensionManager->setSelectionChanged();
1224 1224
1225 } 1225 }
1226 1226
1227#endif// DESKTOP_VERSION 1227#endif// DESKTOP_VERSION
1228 1228
1229} 1229}
1230 1230
1231 1231
1232void KABCore::extensionModified( const KABC::Addressee::List &list ) 1232void KABCore::extensionModified( const KABC::Addressee::List &list )
1233{ 1233{
1234 1234
1235 if ( list.count() != 0 ) { 1235 if ( list.count() != 0 ) {
1236 KABC::Addressee::List::ConstIterator it; 1236 KABC::Addressee::List::ConstIterator it;
1237 for ( it = list.begin(); it != list.end(); ++it ) 1237 for ( it = list.begin(); it != list.end(); ++it )
1238 mAddressBook->insertAddressee( *it ); 1238 mAddressBook->insertAddressee( *it );
1239 if ( list.count() > 1 ) 1239 if ( list.count() > 1 )
1240 setModified(); 1240 setModified();
1241 else 1241 else
1242 setModifiedWOrefresh(); 1242 setModifiedWOrefresh();
1243 } 1243 }
1244 if ( list.count() == 0 ) 1244 if ( list.count() == 0 )
1245 mViewManager->refreshView(); 1245 mViewManager->refreshView();
1246 else 1246 else
1247 mViewManager->refreshView( list[ 0 ].uid() ); 1247 mViewManager->refreshView( list[ 0 ].uid() );
1248 1248
1249 1249
1250 1250
1251} 1251}
1252 1252
1253QString KABCore::getNameByPhone( const QString &phone ) 1253QString KABCore::getNameByPhone( const QString &phone )
1254{ 1254{
1255#ifndef KAB_EMBEDDED 1255#ifndef KAB_EMBEDDED
1256 QRegExp r( "[/*/-/ ]" ); 1256 QRegExp r( "[/*/-/ ]" );
1257 QString localPhone( phone ); 1257 QString localPhone( phone );
1258 1258
1259 bool found = false; 1259 bool found = false;
1260 QString ownerName = ""; 1260 QString ownerName = "";
1261 KABC::AddressBook::Iterator iter; 1261 KABC::AddressBook::Iterator iter;
1262 KABC::PhoneNumber::List::Iterator phoneIter; 1262 KABC::PhoneNumber::List::Iterator phoneIter;
1263 KABC::PhoneNumber::List phoneList; 1263 KABC::PhoneNumber::List phoneList;
1264 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1264 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1265 phoneList = (*iter).phoneNumbers(); 1265 phoneList = (*iter).phoneNumbers();
1266 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1266 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1267 ++phoneIter) { 1267 ++phoneIter) {
1268 // Get rid of separator chars so just the numbers are compared. 1268 // Get rid of separator chars so just the numbers are compared.
1269 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1269 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1270 ownerName = (*iter).formattedName(); 1270 ownerName = (*iter).formattedName();
1271 found = true; 1271 found = true;
1272 } 1272 }
1273 } 1273 }
1274 } 1274 }
1275 1275
1276 return ownerName; 1276 return ownerName;
1277#else //KAB_EMBEDDED 1277#else //KAB_EMBEDDED
1278 qDebug("KABCore::getNameByPhone finsih method"); 1278 qDebug("KABCore::getNameByPhone finsih method");
1279 return ""; 1279 return "";
1280#endif //KAB_EMBEDDED 1280#endif //KAB_EMBEDDED
1281 1281
1282} 1282}
1283 1283
1284void KABCore::openConfigDialog() 1284void KABCore::openConfigDialog()
1285{ 1285{
1286 KABPrefs* kab_prefs = KABPrefs::instance();
1287 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance();
1288
1289 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1286 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1290 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1287 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1291 ConfigureDialog->addModule(kabcfg ); 1288 ConfigureDialog->addModule(kabcfg );
1292 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1289 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1293 ConfigureDialog->addModule(kdelibcfg ); 1290 ConfigureDialog->addModule(kdelibcfg );
1294 1291
1295
1296
1297 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1292 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1298 this, SLOT( configurationChanged() ) ); 1293 this, SLOT( configurationChanged() ) );
1299 connect( ConfigureDialog, SIGNAL( okClicked() ), 1294 connect( ConfigureDialog, SIGNAL( okClicked() ),
1300 this, SLOT( configurationChanged() ) ); 1295 this, SLOT( configurationChanged() ) );
1301 saveSettings(); 1296 saveSettings();
1302#ifndef DESKTOP_VERSION 1297#ifndef DESKTOP_VERSION
1303 ConfigureDialog->showMaximized(); 1298 ConfigureDialog->showMaximized();
1304#endif 1299#endif
1305 if ( ConfigureDialog->exec() ) 1300 if ( ConfigureDialog->exec() )
1306 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); 1301 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1307 delete ConfigureDialog; 1302 delete ConfigureDialog;
1308} 1303}
1309 1304
1310void KABCore::openLDAPDialog() 1305void KABCore::openLDAPDialog()
1311{ 1306{
1312#ifndef KAB_EMBEDDED 1307#ifndef KAB_EMBEDDED
1313 if ( !mLdapSearchDialog ) { 1308 if ( !mLdapSearchDialog ) {
1314 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1309 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1315 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1310 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1316 SLOT( refreshView() ) ); 1311 SLOT( refreshView() ) );
1317 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1312 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1318 SLOT( setModified() ) ); 1313 SLOT( setModified() ) );
1319 } else 1314 } else
1320 mLdapSearchDialog->restoreSettings(); 1315 mLdapSearchDialog->restoreSettings();
1321 1316
1322 if ( mLdapSearchDialog->isOK() ) 1317 if ( mLdapSearchDialog->isOK() )
1323 mLdapSearchDialog->exec(); 1318 mLdapSearchDialog->exec();
1324#else //KAB_EMBEDDED 1319#else //KAB_EMBEDDED
1325 qDebug("KABCore::openLDAPDialog() finsih method"); 1320 qDebug("KABCore::openLDAPDialog() finsih method");
1326#endif //KAB_EMBEDDED 1321#endif //KAB_EMBEDDED
1327} 1322}
1328 1323
1329void KABCore::print() 1324void KABCore::print()
1330{ 1325{
1331#ifndef KAB_EMBEDDED 1326#ifndef KAB_EMBEDDED
1332 KPrinter printer; 1327 KPrinter printer;
1333 if ( !printer.setup( this ) ) 1328 if ( !printer.setup( this ) )
1334 return; 1329 return;
1335 1330
1336 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1331 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1337 mViewManager->selectedUids(), this ); 1332 mViewManager->selectedUids(), this );
1338 1333
1339 wizard.exec(); 1334 wizard.exec();
1340#else //KAB_EMBEDDED 1335#else //KAB_EMBEDDED
1341 qDebug("KABCore::print() finsih method"); 1336 qDebug("KABCore::print() finsih method");
1342#endif //KAB_EMBEDDED 1337#endif //KAB_EMBEDDED
1343 1338
1344} 1339}
1345 1340
1346 1341
1347void KABCore::addGUIClient( KXMLGUIClient *client ) 1342void KABCore::addGUIClient( KXMLGUIClient *client )
1348{ 1343{
1349 if ( mGUIClient ) 1344 if ( mGUIClient )
1350 mGUIClient->insertChildClient( client ); 1345 mGUIClient->insertChildClient( client );
1351 else 1346 else
1352 KMessageBox::error( this, "no KXMLGUICLient"); 1347 KMessageBox::error( this, "no KXMLGUICLient");
1353} 1348}
1354 1349
1355 1350
1356void KABCore::configurationChanged() 1351void KABCore::configurationChanged()
1357{ 1352{
1358 mExtensionManager->reconfigure(); 1353 mExtensionManager->reconfigure();
1359} 1354}
1360 1355
1361void KABCore::addressBookChanged() 1356void KABCore::addressBookChanged()
1362{ 1357{
1363/*US 1358/*US
1364 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1359 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1365 while ( it.current() ) { 1360 while ( it.current() ) {
1366 if ( it.current()->dirty() ) { 1361 if ( it.current()->dirty() ) {
1367 QString text = i18n( "Data has been changed externally. Unsaved " 1362 QString text = i18n( "Data has been changed externally. Unsaved "
1368 "changes will be lost." ); 1363 "changes will be lost." );
1369 KMessageBox::information( this, text ); 1364 KMessageBox::information( this, text );
1370 } 1365 }
1371 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1366 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1372 ++it; 1367 ++it;
1373 } 1368 }
1374*/ 1369*/
1375 if (mEditorDialog) 1370 if (mEditorDialog)
1376 { 1371 {
1377 if (mEditorDialog->dirty()) 1372 if (mEditorDialog->dirty())
1378 { 1373 {
1379 QString text = i18n( "Data has been changed externally. Unsaved " 1374 QString text = i18n( "Data has been changed externally. Unsaved "
1380 "changes will be lost." ); 1375 "changes will be lost." );
1381 KMessageBox::information( this, text ); 1376 KMessageBox::information( this, text );
1382 } 1377 }
1383 QString currentuid = mEditorDialog->addressee().uid(); 1378 QString currentuid = mEditorDialog->addressee().uid();
1384 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1379 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1385 } 1380 }
1386 mViewManager->refreshView(); 1381 mViewManager->refreshView();
1387// mDetails->refreshView(); 1382// mDetails->refreshView();
1388 1383
1389 1384
1390} 1385}
1391 1386
1392AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1387AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1393 const char *name ) 1388 const char *name )
1394{ 1389{
1395 1390
1396 if ( mEditorDialog == 0 ) { 1391 if ( mEditorDialog == 0 ) {
1397 mEditorDialog = new AddresseeEditorDialog( this, parent, 1392 mEditorDialog = new AddresseeEditorDialog( this, parent,
1398 name ? name : "editorDialog" ); 1393 name ? name : "editorDialog" );
1399 1394
1400 1395
1401 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1396 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1402 SLOT( contactModified( const KABC::Addressee& ) ) ); 1397 SLOT( contactModified( const KABC::Addressee& ) ) );
1403 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), 1398 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ),
1404 // SLOT( slotEditorDestroyed( const QString& ) ) ; 1399 // SLOT( slotEditorDestroyed( const QString& ) ) ;
1405 } 1400 }
1406 1401
1407 return mEditorDialog; 1402 return mEditorDialog;
1408} 1403}
1409 1404
1410void KABCore::slotEditorDestroyed( const QString &uid ) 1405void KABCore::slotEditorDestroyed( const QString &uid )
1411{ 1406{
1412 //mEditorDict.remove( uid ); 1407 //mEditorDict.remove( uid );
1413} 1408}
1414 1409
1415void KABCore::initGUI() 1410void KABCore::initGUI()
1416{ 1411{
1417#ifndef KAB_EMBEDDED 1412#ifndef KAB_EMBEDDED
1418 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1413 QHBoxLayout *topLayout = new QHBoxLayout( this );
1419 topLayout->setSpacing( KDialogBase::spacingHint() ); 1414 topLayout->setSpacing( KDialogBase::spacingHint() );
1420 1415
1421 mExtensionBarSplitter = new QSplitter( this ); 1416 mExtensionBarSplitter = new QSplitter( this );
1422 mExtensionBarSplitter->setOrientation( Qt::Vertical ); 1417 mExtensionBarSplitter->setOrientation( Qt::Vertical );
1423 1418
1424 mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); 1419 mDetailsSplitter = new QSplitter( mExtensionBarSplitter );
1425 1420
1426 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1421 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1427 mIncSearchWidget = new IncSearchWidget( viewSpace ); 1422 mIncSearchWidget = new IncSearchWidget( viewSpace );
1428 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1423 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1429 SLOT( incrementalSearch( const QString& ) ) ); 1424 SLOT( incrementalSearch( const QString& ) ) );
1430 1425
1431 mViewManager = new ViewManager( this, viewSpace ); 1426 mViewManager = new ViewManager( this, viewSpace );
1432 viewSpace->setStretchFactor( mViewManager, 1 ); 1427 viewSpace->setStretchFactor( mViewManager, 1 );
1433 1428
1434 mDetails = new ViewContainer( mDetailsSplitter ); 1429 mDetails = new ViewContainer( mDetailsSplitter );
1435 1430
1436 mJumpButtonBar = new JumpButtonBar( this, this ); 1431 mJumpButtonBar = new JumpButtonBar( this, this );
1437 1432
1438 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1433 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1439 1434
1440 topLayout->addWidget( mExtensionBarSplitter ); 1435 topLayout->addWidget( mExtensionBarSplitter );
1441 topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); 1436 topLayout->setStretchFactor( mExtensionBarSplitter, 100 );
1442 topLayout->addWidget( mJumpButtonBar ); 1437 topLayout->addWidget( mJumpButtonBar );
1443 topLayout->setStretchFactor( mJumpButtonBar, 1 ); 1438 topLayout->setStretchFactor( mJumpButtonBar, 1 );
1444 1439
1445 mXXPortManager = new XXPortManager( this, this ); 1440 mXXPortManager = new XXPortManager( this, this );
1446 1441
1447#else //KAB_EMBEDDED 1442#else //KAB_EMBEDDED
1448 //US initialize viewMenu before settingup viewmanager. 1443 //US initialize viewMenu before settingup viewmanager.
1449 // Viewmanager needs this menu to plugin submenues. 1444 // Viewmanager needs this menu to plugin submenues.
1450 viewMenu = new QPopupMenu( this ); 1445 viewMenu = new QPopupMenu( this );
1451 settingsMenu = new QPopupMenu( this ); 1446 settingsMenu = new QPopupMenu( this );
1452 //filterMenu = new QPopupMenu( this ); 1447 //filterMenu = new QPopupMenu( this );
1453 ImportMenu = new QPopupMenu( this ); 1448 ImportMenu = new QPopupMenu( this );
1454 ExportMenu = new QPopupMenu( this ); 1449 ExportMenu = new QPopupMenu( this );
1455 syncMenu = new QPopupMenu( this ); 1450 syncMenu = new QPopupMenu( this );
1456 changeMenu= new QPopupMenu( this ); 1451 changeMenu= new QPopupMenu( this );
1457 1452
1458//US since we have no splitter for the embedded system, setup 1453//US since we have no splitter for the embedded system, setup
1459// a layout with two frames. One left and one right. 1454// a layout with two frames. One left and one right.
1460 1455
1461 QBoxLayout *topLayout; 1456 QBoxLayout *topLayout;
1462 1457
1463 // = new QHBoxLayout( this ); 1458 // = new QHBoxLayout( this );
1464// QBoxLayout *topLayout = (QBoxLayout*)layout(); 1459// QBoxLayout *topLayout = (QBoxLayout*)layout();
1465 1460
1466// QWidget *mainBox = new QWidget( this ); 1461// QWidget *mainBox = new QWidget( this );
1467// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); 1462// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox);
1468 1463
1469#ifdef DESKTOP_VERSION 1464#ifdef DESKTOP_VERSION
1470 topLayout = new QHBoxLayout( this ); 1465 topLayout = new QHBoxLayout( this );
1471 1466
1472 1467
1473 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1468 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1474 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1469 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1475 1470
1476 topLayout->addWidget(mMiniSplitter ); 1471 topLayout->addWidget(mMiniSplitter );
1477 1472
1478 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); 1473 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter );
1479 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1474 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1480 mViewManager = new ViewManager( this, mExtensionBarSplitter ); 1475 mViewManager = new ViewManager( this, mExtensionBarSplitter );
1481 mDetails = new ViewContainer( mMiniSplitter ); 1476 mDetails = new ViewContainer( mMiniSplitter );
1482 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1477 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1483#else 1478#else
1484 if ( QApplication::desktop()->width() > 480 ) { 1479 if ( QApplication::desktop()->width() > 480 ) {
1485 topLayout = new QHBoxLayout( this ); 1480 topLayout = new QHBoxLayout( this );
1486 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1481 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1487 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1482 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1488 } else { 1483 } else {
1489 1484
1490 topLayout = new QHBoxLayout( this ); 1485 topLayout = new QHBoxLayout( this );
1491 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); 1486 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this);
1492 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1487 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1493 } 1488 }
1494 1489
1495 topLayout->addWidget(mMiniSplitter ); 1490 topLayout->addWidget(mMiniSplitter );
1496 mViewManager = new ViewManager( this, mMiniSplitter ); 1491 mViewManager = new ViewManager( this, mMiniSplitter );
1497 mDetails = new ViewContainer( mMiniSplitter ); 1492 mDetails = new ViewContainer( mMiniSplitter );
1498 1493
1499 1494
1500 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1495 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1501#endif 1496#endif
1502 //eh->hide(); 1497 //eh->hide();
1503 // topLayout->addWidget(mExtensionManager ); 1498 // topLayout->addWidget(mExtensionManager );
1504 1499
1505 1500
1506/*US 1501/*US
1507#ifndef KAB_NOSPLITTER 1502#ifndef KAB_NOSPLITTER
1508 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1503 QHBoxLayout *topLayout = new QHBoxLayout( this );
1509//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1504//US topLayout->setSpacing( KDialogBase::spacingHint() );
1510 topLayout->setSpacing( 10 ); 1505 topLayout->setSpacing( 10 );
1511 1506
1512 mDetailsSplitter = new QSplitter( this ); 1507 mDetailsSplitter = new QSplitter( this );
1513 1508
1514 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1509 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1515 1510
1516 mViewManager = new ViewManager( this, viewSpace ); 1511 mViewManager = new ViewManager( this, viewSpace );
1517 viewSpace->setStretchFactor( mViewManager, 1 ); 1512 viewSpace->setStretchFactor( mViewManager, 1 );
1518 1513
1519 mDetails = new ViewContainer( mDetailsSplitter ); 1514 mDetails = new ViewContainer( mDetailsSplitter );
1520 1515
1521 topLayout->addWidget( mDetailsSplitter ); 1516 topLayout->addWidget( mDetailsSplitter );
1522 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1517 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1523#else //KAB_NOSPLITTER 1518#else //KAB_NOSPLITTER
1524 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1519 QHBoxLayout *topLayout = new QHBoxLayout( this );
1525//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1520//US topLayout->setSpacing( KDialogBase::spacingHint() );
1526 topLayout->setSpacing( 10 ); 1521 topLayout->setSpacing( 10 );
1527 1522
1528// mDetailsSplitter = new QSplitter( this ); 1523// mDetailsSplitter = new QSplitter( this );
1529 1524
1530 QVBox *viewSpace = new QVBox( this ); 1525 QVBox *viewSpace = new QVBox( this );
1531 1526
1532 mViewManager = new ViewManager( this, viewSpace ); 1527 mViewManager = new ViewManager( this, viewSpace );
1533 viewSpace->setStretchFactor( mViewManager, 1 ); 1528 viewSpace->setStretchFactor( mViewManager, 1 );
1534 1529
1535 mDetails = new ViewContainer( this ); 1530 mDetails = new ViewContainer( this );
1536 1531
1537 topLayout->addWidget( viewSpace ); 1532 topLayout->addWidget( viewSpace );
1538// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1533// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1539 topLayout->addWidget( mDetails ); 1534 topLayout->addWidget( mDetails );
1540#endif //KAB_NOSPLITTER 1535#endif //KAB_NOSPLITTER
1541*/ 1536*/
1542 1537
1543 1538
1544#endif //KAB_EMBEDDED 1539#endif //KAB_EMBEDDED
1545 initActions(); 1540 initActions();
1546 1541
1547#ifdef KAB_EMBEDDED 1542#ifdef KAB_EMBEDDED
1548 addActionsManually(); 1543 addActionsManually();
1549 //US make sure the export and import menues are initialized before creating the xxPortManager. 1544 //US make sure the export and import menues are initialized before creating the xxPortManager.
1550 mXXPortManager = new XXPortManager( this, this ); 1545 mXXPortManager = new XXPortManager( this, this );
1551 1546
1552 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1547 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1553 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1548 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1554 // mActionQuit->plug ( mMainWindow->toolBar()); 1549 // mActionQuit->plug ( mMainWindow->toolBar());
1555 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1550 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1556 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1551 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1557 // mIncSearchWidget->hide(); 1552 // mIncSearchWidget->hide();
1558 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1553 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1559 SLOT( incrementalSearch( const QString& ) ) ); 1554 SLOT( incrementalSearch( const QString& ) ) );
1560 1555
1561 1556
1562 mJumpButtonBar = new JumpButtonBar( this, this ); 1557 mJumpButtonBar = new JumpButtonBar( this, this );
1563 1558
1564 topLayout->addWidget( mJumpButtonBar ); 1559 topLayout->addWidget( mJumpButtonBar );
1565//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1560//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1566 1561
1567// mMainWindow->getIconToolBar()->raise(); 1562// mMainWindow->getIconToolBar()->raise();
1568 1563
1569#endif //KAB_EMBEDDED 1564#endif //KAB_EMBEDDED
1570 1565
1571} 1566}
1572void KABCore::initActions() 1567void KABCore::initActions()
1573{ 1568{
1574//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1569//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1575 1570
1576#ifndef KAB_EMBEDDED 1571#ifndef KAB_EMBEDDED
1577 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1572 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1578 SLOT( clipboardDataChanged() ) ); 1573 SLOT( clipboardDataChanged() ) );
1579#endif //KAB_EMBEDDED 1574#endif //KAB_EMBEDDED
1580 1575
1581 // file menu 1576 // file menu
1582 if ( mIsPart ) { 1577 if ( mIsPart ) {
1583 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this, 1578 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this,
1584 SLOT( sendMail() ), actionCollection(), 1579 SLOT( sendMail() ), actionCollection(),
1585 "kaddressbook_mail" ); 1580 "kaddressbook_mail" );
1586 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this, 1581 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this,
1587 SLOT( print() ), actionCollection(), "kaddressbook_print" ); 1582 SLOT( print() ), actionCollection(), "kaddressbook_print" );
1588 1583
1589 } else { 1584 } else {
1590 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1585 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
1591 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); 1586 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() );
1592 } 1587 }
1593 1588
1594 1589
1595 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, 1590 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this,
1596 SLOT( save() ), actionCollection(), "file_sync" ); 1591 SLOT( save() ), actionCollection(), "file_sync" );
1597 1592
1598 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, 1593 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this,
1599 SLOT( newContact() ), actionCollection(), "file_new_contact" ); 1594 SLOT( newContact() ), actionCollection(), "file_new_contact" );
1600 1595
1601 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, 1596 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0,
1602 this, SLOT( mailVCard() ), 1597 this, SLOT( mailVCard() ),
1603 actionCollection(), "file_mail_vcard"); 1598 actionCollection(), "file_mail_vcard");
1604 1599
1605 mActionBeamVCard = 0; 1600 mActionBeamVCard = 0;
1606 mActionBeam = 0; 1601 mActionBeam = 0;
1607 1602
1608#ifndef DESKTOP_VERSION 1603#ifndef DESKTOP_VERSION
1609 if ( Ir::supported() ) { 1604 if ( Ir::supported() ) {
1610 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this, 1605 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this,
1611 SLOT( beamVCard() ), actionCollection(), 1606 SLOT( beamVCard() ), actionCollection(),
1612 "kaddressbook_beam_vcard" ); 1607 "kaddressbook_beam_vcard" );
1613 1608
1614 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, 1609 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this,
1615 SLOT( beamMySelf() ), actionCollection(), 1610 SLOT( beamMySelf() ), actionCollection(),
1616 "kaddressbook_beam_myself" ); 1611 "kaddressbook_beam_myself" );
1617 } 1612 }
1618#endif 1613#endif
1619 1614
1620 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, 1615 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0,
1621 this, SLOT( editContact2() ), 1616 this, SLOT( editContact2() ),
1622 actionCollection(), "file_properties" ); 1617 actionCollection(), "file_properties" );
1623 1618
1624#ifdef KAB_EMBEDDED 1619#ifdef KAB_EMBEDDED
1625 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); 1620 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() );
1626 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, 1621 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0,
1627 mMainWindow, SLOT( exit() ), 1622 mMainWindow, SLOT( exit() ),
1628 actionCollection(), "quit" ); 1623 actionCollection(), "quit" );
1629#endif //KAB_EMBEDDED 1624#endif //KAB_EMBEDDED
1630 1625
1631 // edit menu 1626 // edit menu
1632 if ( mIsPart ) { 1627 if ( mIsPart ) {
1633 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, 1628 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this,
1634 SLOT( copyContacts() ), actionCollection(), 1629 SLOT( copyContacts() ), actionCollection(),
1635 "kaddressbook_copy" ); 1630 "kaddressbook_copy" );
1636 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, 1631 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this,
1637 SLOT( cutContacts() ), actionCollection(), 1632 SLOT( cutContacts() ), actionCollection(),
1638 "kaddressbook_cut" ); 1633 "kaddressbook_cut" );
1639 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, 1634 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this,
1640 SLOT( pasteContacts() ), actionCollection(), 1635 SLOT( pasteContacts() ), actionCollection(),
1641 "kaddressbook_paste" ); 1636 "kaddressbook_paste" );
1642 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, 1637 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this,
1643 SLOT( selectAllContacts() ), actionCollection(), 1638 SLOT( selectAllContacts() ), actionCollection(),
1644 "kaddressbook_select_all" ); 1639 "kaddressbook_select_all" );
1645 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, 1640 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this,
1646 SLOT( undo() ), actionCollection(), 1641 SLOT( undo() ), actionCollection(),
1647 "kaddressbook_undo" ); 1642 "kaddressbook_undo" );
1648 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, 1643 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z,
1649 this, SLOT( redo() ), actionCollection(), 1644 this, SLOT( redo() ), actionCollection(),
1650 "kaddressbook_redo" ); 1645 "kaddressbook_redo" );
1651 } else { 1646 } else {
1652 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); 1647 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() );
1653 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); 1648 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() );
1654 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); 1649 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() );
1655 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); 1650 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() );
1656 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); 1651 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
1657 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); 1652 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
1658 } 1653 }
1659 1654
1660 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", 1655 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete",
1661 Key_Delete, this, SLOT( deleteContacts() ), 1656 Key_Delete, this, SLOT( deleteContacts() ),
1662 actionCollection(), "edit_delete" ); 1657 actionCollection(), "edit_delete" );
1663 1658
1664 mActionUndo->setEnabled( false ); 1659 mActionUndo->setEnabled( false );
1665 mActionRedo->setEnabled( false ); 1660 mActionRedo->setEnabled( false );
1666 1661
1667 // settings menu 1662 // settings menu
1668#ifdef KAB_EMBEDDED 1663#ifdef KAB_EMBEDDED
1669//US special menuentry to configure the addressbook resources. On KDE 1664//US special menuentry to configure the addressbook resources. On KDE
1670// you do that through the control center !!! 1665// you do that through the control center !!!
1671 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, 1666 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this,
1672 SLOT( configureResources() ), actionCollection(), 1667 SLOT( configureResources() ), actionCollection(),
1673 "kaddressbook_configure_resources" ); 1668 "kaddressbook_configure_resources" );
1674#endif //KAB_EMBEDDED 1669#endif //KAB_EMBEDDED
1675 1670
1676 if ( mIsPart ) { 1671 if ( mIsPart ) {
1677 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, 1672 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this,
1678 SLOT( openConfigDialog() ), actionCollection(), 1673 SLOT( openConfigDialog() ), actionCollection(),
1679 "kaddressbook_configure" ); 1674 "kaddressbook_configure" );
1680 1675
1681 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, 1676 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0,
1682 this, SLOT( configureKeyBindings() ), actionCollection(), 1677 this, SLOT( configureKeyBindings() ), actionCollection(),
1683 "kaddressbook_configure_shortcuts" ); 1678 "kaddressbook_configure_shortcuts" );
1684#ifdef KAB_EMBEDDED 1679#ifdef KAB_EMBEDDED
1685 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); 1680 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() );
1686 mActionConfigureToolbars->setEnabled( false ); 1681 mActionConfigureToolbars->setEnabled( false );
1687#endif //KAB_EMBEDDED 1682#endif //KAB_EMBEDDED
1688 1683
1689 } else { 1684 } else {
1690 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() ); 1685 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() );
1691 1686
1692 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() ); 1687 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() );
1693 } 1688 }
1694 1689
1695 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, 1690 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0,
1696 actionCollection(), "options_show_jump_bar" ); 1691 actionCollection(), "options_show_jump_bar" );
1697 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) ); 1692 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) );
1698 1693
1699 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, 1694 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0,
1700 actionCollection(), "options_show_details" ); 1695 actionCollection(), "options_show_details" );
1701 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); 1696 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) );
1702 1697
1703 // misc 1698 // misc
1704 // only enable LDAP lookup if we can handle the protocol 1699 // only enable LDAP lookup if we can handle the protocol
1705#ifndef KAB_EMBEDDED 1700#ifndef KAB_EMBEDDED
1706 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { 1701 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) {
1707 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, 1702 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0,
1708 this, SLOT( openLDAPDialog() ), actionCollection(), 1703 this, SLOT( openLDAPDialog() ), actionCollection(),
1709 "ldap_lookup" ); 1704 "ldap_lookup" );
1710 } 1705 }
1711#else //KAB_EMBEDDED 1706#else //KAB_EMBEDDED
1712 //qDebug("KABCore::initActions() LDAP has to be implemented"); 1707 //qDebug("KABCore::initActions() LDAP has to be implemented");
1713#endif //KAB_EMBEDDED 1708#endif //KAB_EMBEDDED
1714 1709
1715 1710
1716 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 1711 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
1717 SLOT( setWhoAmI() ), actionCollection(), 1712 SLOT( setWhoAmI() ), actionCollection(),
1718 "set_personal" ); 1713 "set_personal" );
1719 1714
1720 1715
1721 1716
1722 1717
1723 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this, 1718 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this,
1724 SLOT( setCategories() ), actionCollection(), 1719 SLOT( setCategories() ), actionCollection(),
1725 "edit_set_categories" ); 1720 "edit_set_categories" );
1726 1721
1727 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 1722 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
1728 SLOT( removeVoice() ), actionCollection(), 1723 SLOT( removeVoice() ), actionCollection(),
1729 "remove_voice" ); 1724 "remove_voice" );
1730 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, 1725 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this,
1731 SLOT( importFromOL() ), actionCollection(), 1726 SLOT( importFromOL() ), actionCollection(),
1732 "import_OL" ); 1727 "import_OL" );
1733#ifdef KAB_EMBEDDED 1728#ifdef KAB_EMBEDDED
1734 mActionLicence = new KAction( i18n( "Licence" ), 0, 1729 mActionLicence = new KAction( i18n( "Licence" ), 0,
1735 this, SLOT( showLicence() ), actionCollection(), 1730 this, SLOT( showLicence() ), actionCollection(),
1736 "licence_about_data" ); 1731 "licence_about_data" );
1737 mActionFaq = new KAction( i18n( "Faq" ), 0, 1732 mActionFaq = new KAction( i18n( "Faq" ), 0,
1738 this, SLOT( faq() ), actionCollection(), 1733 this, SLOT( faq() ), actionCollection(),
1739 "faq_about_data" ); 1734 "faq_about_data" );
1740 1735
1741 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 1736 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
1742 this, SLOT( createAboutData() ), actionCollection(), 1737 this, SLOT( createAboutData() ), actionCollection(),
1743 "kaddressbook_about_data" ); 1738 "kaddressbook_about_data" );
1744#endif //KAB_EMBEDDED 1739#endif //KAB_EMBEDDED
1745 1740
1746 clipboardDataChanged(); 1741 clipboardDataChanged();
1747 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1742 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1748 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1743 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1749} 1744}
1750 1745
1751//US we need this function, to plug all actions into the correct menues. 1746//US we need this function, to plug all actions into the correct menues.
1752// KDE uses a XML format to plug the actions, but we work her without this overhead. 1747// KDE uses a XML format to plug the actions, but we work her without this overhead.
1753void KABCore::addActionsManually() 1748void KABCore::addActionsManually()
1754{ 1749{
1755//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1750//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1756 1751
1757#ifdef KAB_EMBEDDED 1752#ifdef KAB_EMBEDDED
1758 QPopupMenu *fileMenu = new QPopupMenu( this ); 1753 QPopupMenu *fileMenu = new QPopupMenu( this );
1759 QPopupMenu *editMenu = new QPopupMenu( this ); 1754 QPopupMenu *editMenu = new QPopupMenu( this );
1760 QPopupMenu *helpMenu = new QPopupMenu( this ); 1755 QPopupMenu *helpMenu = new QPopupMenu( this );
1761 1756
1762 KToolBar* tb = mMainWindow->toolBar(); 1757 KToolBar* tb = mMainWindow->toolBar();
1763 1758
1764#ifdef DESKTOP_VERSION 1759#ifdef DESKTOP_VERSION
1765 QMenuBar* mb = mMainWindow->menuBar(); 1760 QMenuBar* mb = mMainWindow->menuBar();
1766 1761
1767 //US setup menubar. 1762 //US setup menubar.
1768 //Disable the following block if you do not want to have a menubar. 1763 //Disable the following block if you do not want to have a menubar.
1769 mb->insertItem( "&File", fileMenu ); 1764 mb->insertItem( "&File", fileMenu );
1770 mb->insertItem( "&Edit", editMenu ); 1765 mb->insertItem( "&Edit", editMenu );
1771 mb->insertItem( "&View", viewMenu ); 1766 mb->insertItem( "&View", viewMenu );
1772 mb->insertItem( "&Settings", settingsMenu ); 1767 mb->insertItem( "&Settings", settingsMenu );
1773 mb->insertItem( i18n("Synchronize"), syncMenu ); 1768 mb->insertItem( i18n("Synchronize"), syncMenu );
1774 mb->insertItem( "&Change selected", changeMenu ); 1769 mb->insertItem( "&Change selected", changeMenu );
1775 mb->insertItem( "&Help", helpMenu ); 1770 mb->insertItem( "&Help", helpMenu );
1776 mIncSearchWidget = new IncSearchWidget( tb ); 1771 mIncSearchWidget = new IncSearchWidget( tb );
1777 // tb->insertWidget(-1, 0, mIncSearchWidget); 1772 // tb->insertWidget(-1, 0, mIncSearchWidget);
1778 1773
1779#else 1774#else
1780 //US setup toolbar 1775 //US setup toolbar
1781 QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); 1776 QPEMenuBar *menuBarTB = new QPEMenuBar( tb );
1782 QPopupMenu *popupBarTB = new QPopupMenu( this ); 1777 QPopupMenu *popupBarTB = new QPopupMenu( this );
1783 menuBarTB->insertItem( "ME", popupBarTB); 1778 menuBarTB->insertItem( "ME", popupBarTB);
1784 tb->insertWidget(-1, 0, menuBarTB); 1779 tb->insertWidget(-1, 0, menuBarTB);
1785 mIncSearchWidget = new IncSearchWidget( tb ); 1780 mIncSearchWidget = new IncSearchWidget( tb );
1786 1781
1787 tb->enableMoving(false); 1782 tb->enableMoving(false);
1788 popupBarTB->insertItem( "&File", fileMenu ); 1783 popupBarTB->insertItem( "&File", fileMenu );
1789 popupBarTB->insertItem( "&Edit", editMenu ); 1784 popupBarTB->insertItem( "&Edit", editMenu );
1790 popupBarTB->insertItem( "&View", viewMenu ); 1785 popupBarTB->insertItem( "&View", viewMenu );
1791 popupBarTB->insertItem( "&Settings", settingsMenu ); 1786 popupBarTB->insertItem( "&Settings", settingsMenu );
1792 popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); 1787 popupBarTB->insertItem( i18n("Synchronize"), syncMenu );
1793 mViewManager->getFilterAction()->plug ( popupBarTB); 1788 mViewManager->getFilterAction()->plug ( popupBarTB);
1794 popupBarTB->insertItem( "&Change selected", changeMenu ); 1789 popupBarTB->insertItem( "&Change selected", changeMenu );
1795 popupBarTB->insertItem( "&Help", helpMenu ); 1790 popupBarTB->insertItem( "&Help", helpMenu );
1796 if (QApplication::desktop()->width() > 320 ) { 1791 if (QApplication::desktop()->width() > 320 ) {
1797 // mViewManager->getFilterAction()->plug ( tb); 1792 // mViewManager->getFilterAction()->plug ( tb);
1798 } 1793 }
1799#endif 1794#endif
1800 // mActionQuit->plug ( mMainWindow->toolBar()); 1795 // mActionQuit->plug ( mMainWindow->toolBar());
1801 1796
1802 1797
1803 1798
1804 //US Now connect the actions with the menue entries. 1799 //US Now connect the actions with the menue entries.
1805 mActionPrint->plug( fileMenu ); 1800 mActionPrint->plug( fileMenu );
1806 mActionMail->plug( fileMenu ); 1801 mActionMail->plug( fileMenu );
1807 fileMenu->insertSeparator(); 1802 fileMenu->insertSeparator();
1808 1803
1809 mActionNewContact->plug( fileMenu ); 1804 mActionNewContact->plug( fileMenu );
1810 mActionNewContact->plug( tb ); 1805 mActionNewContact->plug( tb );
1811 1806
1812 mActionEditAddressee->plug( fileMenu ); 1807 mActionEditAddressee->plug( fileMenu );
1813 if ((KGlobal::getDesktopSize() > KGlobal::Small ) || 1808 if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
1814 (!KABPrefs::instance()->mMultipleViewsAtOnce )) 1809 (!KABPrefs::instance()->mMultipleViewsAtOnce ))
1815 mActionEditAddressee->plug( tb ); 1810 mActionEditAddressee->plug( tb );
1816 1811
1817 fileMenu->insertSeparator(); 1812 fileMenu->insertSeparator();
1818 mActionSave->plug( fileMenu ); 1813 mActionSave->plug( fileMenu );
1819 fileMenu->insertItem( "&Import", ImportMenu ); 1814 fileMenu->insertItem( "&Import", ImportMenu );
1820 fileMenu->insertItem( "&Export", ExportMenu ); 1815 fileMenu->insertItem( "&Export", ExportMenu );
1821 fileMenu->insertSeparator(); 1816 fileMenu->insertSeparator();
1822 mActionMailVCard->plug( fileMenu ); 1817 mActionMailVCard->plug( fileMenu );
1823#ifndef DESKTOP_VERSION 1818#ifndef DESKTOP_VERSION
1824 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu ); 1819 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu );
1825 if ( Ir::supported() ) mActionBeam->plug(fileMenu ); 1820 if ( Ir::supported() ) mActionBeam->plug(fileMenu );
1826#endif 1821#endif
1827 fileMenu->insertSeparator(); 1822 fileMenu->insertSeparator();
1828 mActionQuit->plug( fileMenu ); 1823 mActionQuit->plug( fileMenu );
1829#ifdef _WIN32_ 1824#ifdef _WIN32_
1830 mActionImportOL->plug( ImportMenu ); 1825 mActionImportOL->plug( ImportMenu );
1831#endif 1826#endif
1832 // edit menu 1827 // edit menu
1833 mActionUndo->plug( editMenu ); 1828 mActionUndo->plug( editMenu );
1834 mActionRedo->plug( editMenu ); 1829 mActionRedo->plug( editMenu );
1835 editMenu->insertSeparator(); 1830 editMenu->insertSeparator();
1836 mActionCut->plug( editMenu ); 1831 mActionCut->plug( editMenu );
1837 mActionCopy->plug( editMenu ); 1832 mActionCopy->plug( editMenu );
1838 mActionPaste->plug( editMenu ); 1833 mActionPaste->plug( editMenu );
1839 mActionDelete->plug( editMenu ); 1834 mActionDelete->plug( editMenu );
1840 editMenu->insertSeparator(); 1835 editMenu->insertSeparator();
1841 mActionSelectAll->plug( editMenu ); 1836 mActionSelectAll->plug( editMenu );
1842 1837
1843 mActionRemoveVoice->plug( changeMenu ); 1838 mActionRemoveVoice->plug( changeMenu );
1844 // settings menu 1839 // settings menu
1845//US special menuentry to configure the addressbook resources. On KDE 1840//US special menuentry to configure the addressbook resources. On KDE
1846// you do that through the control center !!! 1841// you do that through the control center !!!
1847 mActionConfigResources->plug( settingsMenu ); 1842 mActionConfigResources->plug( settingsMenu );
1848 settingsMenu->insertSeparator(); 1843 settingsMenu->insertSeparator();
1849 1844
1850 mActionConfigKAddressbook->plug( settingsMenu ); 1845 mActionConfigKAddressbook->plug( settingsMenu );
1851 1846
1852 if ( mIsPart ) { 1847 if ( mIsPart ) {
1853 mActionConfigShortcuts->plug( settingsMenu ); 1848 mActionConfigShortcuts->plug( settingsMenu );
1854 mActionConfigureToolbars->plug( settingsMenu ); 1849 mActionConfigureToolbars->plug( settingsMenu );
1855 1850
1856 } else { 1851 } else {
1857 mActionKeyBindings->plug( settingsMenu ); 1852 mActionKeyBindings->plug( settingsMenu );
1858 } 1853 }
1859 1854
1860 settingsMenu->insertSeparator(); 1855 settingsMenu->insertSeparator();
1861 1856
1862 mActionJumpBar->plug( settingsMenu ); 1857 mActionJumpBar->plug( settingsMenu );
1863 mActionDetails->plug( settingsMenu ); 1858 mActionDetails->plug( settingsMenu );
1864 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 1859 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
1865 mActionDetails->plug( tb ); 1860 mActionDetails->plug( tb );
1866 settingsMenu->insertSeparator(); 1861 settingsMenu->insertSeparator();
1867 1862
1868 mActionWhoAmI->plug( settingsMenu ); 1863 mActionWhoAmI->plug( settingsMenu );
1869 mActionCategories->plug( settingsMenu ); 1864 mActionCategories->plug( settingsMenu );
1870 1865
1871 mActionLicence->plug( helpMenu ); 1866 mActionLicence->plug( helpMenu );
1872 mActionFaq->plug( helpMenu ); 1867 mActionFaq->plug( helpMenu );
1873 mActionAboutKAddressbook->plug( helpMenu ); 1868 mActionAboutKAddressbook->plug( helpMenu );
1874 1869
1875 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1870 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
1876 1871
1877 mActionSave->plug( tb ); 1872 mActionSave->plug( tb );
1878 mViewManager->getFilterAction()->plug ( tb); 1873 mViewManager->getFilterAction()->plug ( tb);
1879 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 1874 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
1880 mActionUndo->plug( tb ); 1875 mActionUndo->plug( tb );
1881 mActionDelete->plug( tb ); 1876 mActionDelete->plug( tb );
1882 mActionRedo->plug( tb ); 1877 mActionRedo->plug( tb );
1883 } 1878 }
1884 } 1879 }
1885 //mActionQuit->plug ( tb ); 1880 //mActionQuit->plug ( tb );
1886 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 1881 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
1887 1882
1888 //US link the searchwidget first to this. 1883 //US link the searchwidget first to this.
1889 // The real linkage to the toolbar happens later. 1884 // The real linkage to the toolbar happens later.
1890//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 1885//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
1891//US tb->insertItem( mIncSearchWidget ); 1886//US tb->insertItem( mIncSearchWidget );
1892/*US 1887/*US
1893 mIncSearchWidget = new IncSearchWidget( tb ); 1888 mIncSearchWidget = new IncSearchWidget( tb );
1894 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1889 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1895 SLOT( incrementalSearch( const QString& ) ) ); 1890 SLOT( incrementalSearch( const QString& ) ) );
1896 1891
1897 mJumpButtonBar = new JumpButtonBar( this, this ); 1892 mJumpButtonBar = new JumpButtonBar( this, this );
1898 1893
1899//US topLayout->addWidget( mJumpButtonBar ); 1894//US topLayout->addWidget( mJumpButtonBar );
1900 this->layout()->add( mJumpButtonBar ); 1895 this->layout()->add( mJumpButtonBar );
1901*/ 1896*/
1902 1897
1903#endif //KAB_EMBEDDED 1898#endif //KAB_EMBEDDED
1904 1899
1905 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) ); 1900 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) );
1906 fillSyncMenu(); 1901 fillSyncMenu();
1907 1902
1908} 1903}
1909void KABCore::showLicence() 1904void KABCore::showLicence()
1910{ 1905{
1911 KApplication::showLicence(); 1906 KApplication::showLicence();
1912} 1907}
1913void KABCore::removeVoice() 1908void KABCore::removeVoice()
1914{ 1909{
1915 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) 1910 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
1916 return; 1911 return;
1917 KABC::Addressee::List list = mViewManager->selectedAddressees(); 1912 KABC::Addressee::List list = mViewManager->selectedAddressees();
1918 KABC::Addressee::List::Iterator it; 1913 KABC::Addressee::List::Iterator it;
1919 for ( it = list.begin(); it != list.end(); ++it ) { 1914 for ( it = list.begin(); it != list.end(); ++it ) {
1920 PhoneNumber::List phoneNumbers = (*it).phoneNumbers(); 1915 PhoneNumber::List phoneNumbers = (*it).phoneNumbers();
1921 PhoneNumber::List::Iterator phoneIt; 1916 PhoneNumber::List::Iterator phoneIt;
1922 bool found = false; 1917 bool found = false;
1923 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) { 1918 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) {
1924 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 1919 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
1925 if ((*phoneIt).type() - PhoneNumber::Voice ) { 1920 if ((*phoneIt).type() - PhoneNumber::Voice ) {
1926 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 1921 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
1927 (*it).insertPhoneNumber( (*phoneIt) ); 1922 (*it).insertPhoneNumber( (*phoneIt) );
1928 found = true; 1923 found = true;
1929 } 1924 }
1930 } 1925 }
1931 1926
1932 } 1927 }
1933 if ( found ) 1928 if ( found )
1934 contactModified((*it) ); 1929 contactModified((*it) );
1935 } 1930 }
1936} 1931}
1937 1932
1938 1933
1939 1934
1940void KABCore::clipboardDataChanged() 1935void KABCore::clipboardDataChanged()
1941{ 1936{
1942 1937
1943 if ( mReadWrite ) 1938 if ( mReadWrite )
1944 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 1939 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
1945 1940
1946} 1941}
1947 1942
1948void KABCore::updateActionMenu() 1943void KABCore::updateActionMenu()
1949{ 1944{
1950 UndoStack *undo = UndoStack::instance(); 1945 UndoStack *undo = UndoStack::instance();
1951 RedoStack *redo = RedoStack::instance(); 1946 RedoStack *redo = RedoStack::instance();
1952 1947
1953 if ( undo->isEmpty() ) 1948 if ( undo->isEmpty() )
1954 mActionUndo->setText( i18n( "Undo" ) ); 1949 mActionUndo->setText( i18n( "Undo" ) );
1955 else 1950 else
1956 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 1951 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
1957 1952
1958 mActionUndo->setEnabled( !undo->isEmpty() ); 1953 mActionUndo->setEnabled( !undo->isEmpty() );
1959 1954
1960 if ( !redo->top() ) 1955 if ( !redo->top() )
1961 mActionRedo->setText( i18n( "Redo" ) ); 1956 mActionRedo->setText( i18n( "Redo" ) );
1962 else 1957 else
1963 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 1958 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
1964 1959
1965 mActionRedo->setEnabled( !redo->isEmpty() ); 1960 mActionRedo->setEnabled( !redo->isEmpty() );
1966} 1961}
1967 1962
1968void KABCore::configureKeyBindings() 1963void KABCore::configureKeyBindings()
1969{ 1964{
1970#ifndef KAB_EMBEDDED 1965#ifndef KAB_EMBEDDED
1971 KKeyDialog::configure( actionCollection(), true ); 1966 KKeyDialog::configure( actionCollection(), true );
1972#else //KAB_EMBEDDED 1967#else //KAB_EMBEDDED
1973 qDebug("KABCore::configureKeyBindings() not implemented"); 1968 qDebug("KABCore::configureKeyBindings() not implemented");
1974#endif //KAB_EMBEDDED 1969#endif //KAB_EMBEDDED
1975} 1970}
1976 1971
1977#ifdef KAB_EMBEDDED 1972#ifdef KAB_EMBEDDED
1978void KABCore::configureResources() 1973void KABCore::configureResources()
1979{ 1974{
1980 KRES::KCMKResources dlg( this, "" , 0 ); 1975 KRES::KCMKResources dlg( this, "" , 0 );
1981 1976
1982 if ( !dlg.exec() ) 1977 if ( !dlg.exec() )
1983 return; 1978 return;
1984 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); 1979 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") );
1985} 1980}
1986#endif //KAB_EMBEDDED 1981#endif //KAB_EMBEDDED
1987 1982
1988 1983
1989/* this method will be called through the QCop interface from Ko/Pi to select addresses 1984/* this method will be called through the QCop interface from Ko/Pi to select addresses
1990 * for the attendees list of an event. 1985 * for the attendees list of an event.
1991 */ 1986 */
1992void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) 1987void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid)
1993{ 1988{
1994 QStringList nameList; 1989 QStringList nameList;
1995 QStringList emailList; 1990 QStringList emailList;
1996 QStringList uidList; 1991 QStringList uidList;
1997 1992
1998 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 1993 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
1999 uint i=0; 1994 uint i=0;
2000 for (i=0; i < list.count(); i++) 1995 for (i=0; i < list.count(); i++)
2001 { 1996 {
2002 nameList.append(list[i].realName()); 1997 nameList.append(list[i].realName());
2003 emailList.append(list[i].preferredEmail()); 1998 emailList.append(list[i].preferredEmail());
2004 uidList.append(list[i].uid()); 1999 uidList.append(list[i].uid());
2005 } 2000 }
2006 2001
2007 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList); 2002 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList);
2008 2003
2009} 2004}
2010 2005
2011/* this method will be called through the QCop interface from other apps to show details of a contact. 2006/* this method will be called through the QCop interface from other apps to show details of a contact.
2012 */ 2007 */
2013void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2008void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2014{ 2009{
2015 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2010 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2016 2011
2017 QString foundUid = QString::null; 2012 QString foundUid = QString::null;
2018 if ( ! uid.isEmpty() ) { 2013 if ( ! uid.isEmpty() ) {
2019 Addressee adrr = mAddressBook->findByUid( uid ); 2014 Addressee adrr = mAddressBook->findByUid( uid );
2020 if ( !adrr.isEmpty() ) { 2015 if ( !adrr.isEmpty() ) {
2021 foundUid = uid; 2016 foundUid = uid;
2022 } 2017 }
2023 if ( email == "sendbacklist" ) { 2018 if ( email == "sendbacklist" ) {
2024 //qDebug("ssssssssssssssssssssssend "); 2019 //qDebug("ssssssssssssssssssssssend ");
2025 QStringList nameList; 2020 QStringList nameList;
2026 QStringList emailList; 2021 QStringList emailList;
2027 QStringList uidList; 2022 QStringList uidList;
2028 nameList.append(adrr.realName()); 2023 nameList.append(adrr.realName());
2029 emailList = adrr.emails(); 2024 emailList = adrr.emails();
2030 uidList.append( adrr.preferredEmail()); 2025 uidList.append( adrr.preferredEmail());
2031 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2026 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2032 return; 2027 return;
2033 } 2028 }
2034 2029
2035 } 2030 }
2036 2031
2037 if ( email == "sendbacklist" ) 2032 if ( email == "sendbacklist" )
2038 return; 2033 return;
2039 if (foundUid.isEmpty()) 2034 if (foundUid.isEmpty())
2040 { 2035 {
2041 //find the uid of the person first 2036 //find the uid of the person first
2042 Addressee::List namelist; 2037 Addressee::List namelist;
2043 Addressee::List emaillist; 2038 Addressee::List emaillist;
2044 2039
2045 if (!name.isEmpty()) 2040 if (!name.isEmpty())
2046 namelist = mAddressBook->findByName( name ); 2041 namelist = mAddressBook->findByName( name );
2047 2042
2048 if (!email.isEmpty()) 2043 if (!email.isEmpty())
2049 emaillist = mAddressBook->findByEmail( email ); 2044 emaillist = mAddressBook->findByEmail( email );
2050 qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2045 qDebug("count %d %d ", namelist.count(),emaillist.count() );
2051 //check if we have a match in Namelist and Emaillist 2046 //check if we have a match in Namelist and Emaillist
2052 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2047 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2053 foundUid = emaillist[0].uid(); 2048 foundUid = emaillist[0].uid();
2054 } 2049 }
2055 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2050 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2056 foundUid = namelist[0].uid(); 2051 foundUid = namelist[0].uid();
2057 else 2052 else
2058 { 2053 {
2059 for (int i = 0; i < namelist.count(); i++) 2054 for (int i = 0; i < namelist.count(); i++)
2060 { 2055 {
2061 for (int j = 0; j < emaillist.count(); j++) 2056 for (int j = 0; j < emaillist.count(); j++)
2062 { 2057 {
2063 if (namelist[i] == emaillist[j]) 2058 if (namelist[i] == emaillist[j])
2064 { 2059 {
2065 foundUid = namelist[i].uid(); 2060 foundUid = namelist[i].uid();
2066 } 2061 }
2067 } 2062 }
2068 } 2063 }
2069 } 2064 }
2070 } 2065 }
2071 else 2066 else
2072 { 2067 {
2073 foundUid = uid; 2068 foundUid = uid;
2074 } 2069 }
2075 2070
2076 if (!foundUid.isEmpty()) 2071 if (!foundUid.isEmpty())
2077 { 2072 {
2078 2073
2079 // raise Ka/Pi if it is in the background 2074 // raise Ka/Pi if it is in the background
2080#ifndef DESKTOP_VERSION 2075#ifndef DESKTOP_VERSION
2081#ifndef KORG_NODCOP 2076#ifndef KORG_NODCOP
2082 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2077 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2083#endif 2078#endif
2084#endif 2079#endif
2085 2080
2086 mMainWindow->showMaximized(); 2081 mMainWindow->showMaximized();
2087 mMainWindow-> raise(); 2082 mMainWindow-> raise();
2088 2083
2089 mViewManager->setSelected( "", false); 2084 mViewManager->setSelected( "", false);
2090 mViewManager->refreshView( "" ); 2085 mViewManager->refreshView( "" );
2091 mViewManager->setSelected( foundUid, true ); 2086 mViewManager->setSelected( foundUid, true );
2092 mViewManager->refreshView( foundUid ); 2087 mViewManager->refreshView( foundUid );
2093 2088
2094 if ( !mMultipleViewsAtOnce ) 2089 if ( !mMultipleViewsAtOnce )
2095 { 2090 {
2096 setDetailsVisible( true ); 2091 setDetailsVisible( true );
2097 mActionDetails->setChecked(true); 2092 mActionDetails->setChecked(true);
2098 } 2093 }
2099 } 2094 }
2100} 2095}
2101 2096
2102 2097
2103void KABCore::faq() 2098void KABCore::faq()
2104{ 2099{
2105 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2100 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2106} 2101}
2107 2102
2108 2103
2109void KABCore::fillSyncMenu() 2104void KABCore::fillSyncMenu()
2110{ 2105{
2111 if ( syncMenu->count() ) 2106 if ( syncMenu->count() )
2112 syncMenu->clear(); 2107 syncMenu->clear();
2113 syncMenu->insertItem( i18n("Configure..."), 0 ); 2108 syncMenu->insertItem( i18n("Configure..."), 0 );
2114 syncMenu->insertSeparator(); 2109 syncMenu->insertSeparator();
2115 syncMenu->insertItem( i18n("Multiple sync"), 1 ); 2110 syncMenu->insertItem( i18n("Multiple sync"), 1 );
2116 syncMenu->insertSeparator(); 2111 syncMenu->insertSeparator();
2117 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2112 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2118 config.setGroup("General"); 2113 config.setGroup("General");
2119 QStringList prof = config.readListEntry("SyncProfileNames"); 2114 QStringList prof = config.readListEntry("SyncProfileNames");
2120 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 2115 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
2121 if ( prof.count() < 3 ) { 2116 if ( prof.count() < 3 ) {
2122 prof.clear(); 2117 prof.clear();
2123 prof << i18n("Sharp_DTM"); 2118 prof << i18n("Sharp_DTM");
2124 prof << i18n("Local_file"); 2119 prof << i18n("Local_file");
2125 prof << i18n("Last_file"); 2120 prof << i18n("Last_file");
2126 KSyncProfile* temp = new KSyncProfile (); 2121 KSyncProfile* temp = new KSyncProfile ();
2127 temp->setName( prof[0] ); 2122 temp->setName( prof[0] );
2128 temp->writeConfig(&config); 2123 temp->writeConfig(&config);
2129 temp->setName( prof[1] ); 2124 temp->setName( prof[1] );
2130 temp->writeConfig(&config); 2125 temp->writeConfig(&config);
2131 temp->setName( prof[2] ); 2126 temp->setName( prof[2] );
2132 temp->writeConfig(&config); 2127 temp->writeConfig(&config);
2133 config.setGroup("General"); 2128 config.setGroup("General");
2134 config.writeEntry("SyncProfileNames",prof); 2129 config.writeEntry("SyncProfileNames",prof);
2135 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 2130 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
2136 config.sync(); 2131 config.sync();
2137 delete temp; 2132 delete temp;
2138 } 2133 }
2139 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 2134 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
2140 KABPrefs::instance()->mSyncProfileNames = prof; 2135 KABPrefs::instance()->mSyncProfileNames = prof;
2141 int i; 2136 int i;
2142 for ( i = 0; i < prof.count(); ++i ) { 2137 for ( i = 0; i < prof.count(); ++i ) {
2143 2138
2144 syncMenu->insertItem( prof[i], 1000+i ); 2139 syncMenu->insertItem( prof[i], 1000+i );
2145 if ( i == 2 ) 2140 if ( i == 2 )
2146 syncMenu->insertSeparator(); 2141 syncMenu->insertSeparator();
2147 } 2142 }
2148 QDir app_dir; 2143 QDir app_dir;
2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 2144 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
2150 syncMenu->setItemEnabled( false , 1000 ); 2145 syncMenu->setItemEnabled( false , 1000 );
2151 } 2146 }
2152 //probaly useless 2147 //probaly useless
2153 //mView->setupExternSyncProfiles(); 2148 //mView->setupExternSyncProfiles();
2154} 2149}
2155void KABCore::slotSyncMenu( int action ) 2150void KABCore::slotSyncMenu( int action )
2156{ 2151{
2157 //qDebug("syncaction %d ", action); 2152 //qDebug("syncaction %d ", action);
2158 if ( action == 0 ) { 2153 if ( action == 0 ) {
2159 2154
2160 // seems to be a Qt2 event handling bug 2155 // seems to be a Qt2 event handling bug
2161 // syncmenu.clear causes a segfault at first time 2156 // syncmenu.clear causes a segfault at first time
2162 // when we call it after the main event loop, it is ok 2157 // when we call it after the main event loop, it is ok
2163 // same behaviour when calling OM/Pi via QCOP for the first time 2158 // same behaviour when calling OM/Pi via QCOP for the first time
2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 2159 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
2165 //confSync(); 2160 //confSync();
2166 2161
2167 return; 2162 return;
2168 } 2163 }
2169 if ( action == 1 ) { 2164 if ( action == 1 ) {
2170 multiSync( true ); 2165 multiSync( true );
2171 return; 2166 return;
2172 } 2167 }
2173 2168
2174 if (mBlockSaveFlag) 2169 if (mBlockSaveFlag)
2175 return; 2170 return;
2176 mBlockSaveFlag = true; 2171 mBlockSaveFlag = true;
2177 mCurrentSyncProfile = action - 1000 ; 2172 mCurrentSyncProfile = action - 1000 ;
2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ; 2173 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ; 2174 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2175 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2181 KSyncProfile* temp = new KSyncProfile (); 2176 KSyncProfile* temp = new KSyncProfile ();
2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2177 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2183 temp->readConfig(&config); 2178 temp->readConfig(&config);
2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2179 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 2180 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2181 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2182 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2188 KABPrefs::instance()->mWriteBackInFuture = 0; 2183 KABPrefs::instance()->mWriteBackInFuture = 0;
2189 if ( temp->getWriteBackFuture() ) 2184 if ( temp->getWriteBackFuture() )
2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2185 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 2186 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
2192 if ( action == 1000 ) { 2187 if ( action == 1000 ) {
2193 syncSharp(); 2188 syncSharp();
2194 2189
2195 } else if ( action == 1001 ) { 2190 } else if ( action == 1001 ) {
2196 syncLocalFile(); 2191 syncLocalFile();
2197 2192
2198 } else if ( action == 1002 ) { 2193 } else if ( action == 1002 ) {
2199 quickSyncLocalFile(); 2194 quickSyncLocalFile();
2200 2195
2201 } else if ( action >= 1003 ) { 2196 } else if ( action >= 1003 ) {
2202 if ( temp->getIsLocalFileSync() ) { 2197 if ( temp->getIsLocalFileSync() ) {
2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 2198 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2199 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2205 } else { 2200 } else {
2206 if ( temp->getIsPhoneSync() ) { 2201 if ( temp->getIsPhoneSync() ) {
2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2202 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2203 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2204 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2210 syncPhone(); 2205 syncPhone();
2211 } else 2206 } else
2212 syncRemote( temp ); 2207 syncRemote( temp );
2213 2208
2214 } 2209 }
2215 } 2210 }
2216 delete temp; 2211 delete temp;
2217 mBlockSaveFlag = false; 2212 mBlockSaveFlag = false;
2218} 2213}
2219 2214
2220void KABCore::syncLocalFile() 2215void KABCore::syncLocalFile()
2221{ 2216{
2222 2217
2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile; 2218 QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
2224 2219
2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); 2220 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
2226 if ( fn == "" ) 2221 if ( fn == "" )
2227 return; 2222 return;
2228 if ( syncWithFile( fn, false ) ) { 2223 if ( syncWithFile( fn, false ) ) {
2229 qDebug("syncLocalFile() successful "); 2224 qDebug("syncLocalFile() successful ");
2230 } 2225 }
2231 2226
2232} 2227}
2233bool KABCore::syncWithFile( QString fn , bool quick ) 2228bool KABCore::syncWithFile( QString fn , bool quick )
2234{ 2229{
2235 bool ret = false; 2230 bool ret = false;
2236 QFileInfo info; 2231 QFileInfo info;
2237 info.setFile( fn ); 2232 info.setFile( fn );
2238 QString mess; 2233 QString mess;
2239 bool loadbup = true; 2234 bool loadbup = true;
2240 if ( !info. exists() ) { 2235 if ( !info. exists() ) {
2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 2236 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2237 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2243 mess ); 2238 mess );
2244 return ret; 2239 return ret;
2245 } 2240 }
2246 int result = 0; 2241 int result = 0;
2247 if ( !quick ) { 2242 if ( !quick ) {
2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2243 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2244 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2250 mess, 2245 mess,
2251 i18n("Sync"), i18n("Cancel"), 0, 2246 i18n("Sync"), i18n("Cancel"), 0,
2252 0, 1 ); 2247 0, 1 );
2253 if ( result ) 2248 if ( result )
2254 return false; 2249 return false;
2255 } 2250 }
2256 if ( KABPrefs::instance()->mAskForPreferences ) 2251 if ( KABPrefs::instance()->mAskForPreferences )
2257 edit_sync_options(); 2252 edit_sync_options();
2258 if ( result == 0 ) { 2253 if ( result == 0 ) {
2259 //qDebug("Now sycing ... "); 2254 //qDebug("Now sycing ... ");
2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) ) 2255 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
2261 setCaption( i18n("Synchronization successful") ); 2256 setCaption( i18n("Synchronization successful") );
2262 else 2257 else
2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); 2258 setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
2264 if ( ! quick ) 2259 if ( ! quick )
2265 KABPrefs::instance()->mLastSyncedLocalFile = fn; 2260 KABPrefs::instance()->mLastSyncedLocalFile = fn;
2266 setModified(); 2261 setModified();
2267 } 2262 }
2268 return ret; 2263 return ret;
2269} 2264}
2270void KABCore::quickSyncLocalFile() 2265void KABCore::quickSyncLocalFile()
2271{ 2266{
2272 2267
2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) { 2268 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
2274 qDebug("quick syncLocalFile() successful "); 2269 qDebug("quick syncLocalFile() successful ");
2275 2270
2276 } 2271 }
2277} 2272}
2278void KABCore::multiSync( bool askforPrefs ) 2273void KABCore::multiSync( bool askforPrefs )
2279{ 2274{
2280 if (mBlockSaveFlag) 2275 if (mBlockSaveFlag)
2281 return; 2276 return;
2282 mBlockSaveFlag = true; 2277 mBlockSaveFlag = true;
2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 2278 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2279 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2285 question, 2280 question,
2286 i18n("Yes"), i18n("No"), 2281 i18n("Yes"), i18n("No"),
2287 0, 0 ) != 0 ) { 2282 0, 0 ) != 0 ) {
2288 mBlockSaveFlag = false; 2283 mBlockSaveFlag = false;
2289 setCaption(i18n("Aborted! Nothing synced!")); 2284 setCaption(i18n("Aborted! Nothing synced!"));
2290 return; 2285 return;
2291 } 2286 }
2292 mCurrentSyncDevice = i18n("Multiple profiles") ; 2287 mCurrentSyncDevice = i18n("Multiple profiles") ;
2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs; 2288 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
2294 if ( askforPrefs ) { 2289 if ( askforPrefs ) {
2295 edit_sync_options(); 2290 edit_sync_options();
2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs; 2291 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
2297 } 2292 }
2298 setCaption(i18n("Multiple sync started.") ); 2293 setCaption(i18n("Multiple sync started.") );
2299 qApp->processEvents(); 2294 qApp->processEvents();
2300 int num = ringSync() ; 2295 int num = ringSync() ;
2301 if ( num > 1 ) 2296 if ( num > 1 )
2302 ringSync(); 2297 ringSync();
2303 mBlockSaveFlag = false; 2298 mBlockSaveFlag = false;
2304 if ( num ) 2299 if ( num )
2305 save(); 2300 save();
2306 if ( num ) 2301 if ( num )
2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 2302 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
2308 else 2303 else
2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 2304 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
2310 return; 2305 return;
2311} 2306}
2312int KABCore::ringSync() 2307int KABCore::ringSync()
2313{ 2308{
2314 int syncedProfiles = 0; 2309 int syncedProfiles = 0;
2315 int i; 2310 int i;
2316 QTime timer; 2311 QTime timer;
2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2312 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames; 2313 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
2319 KSyncProfile* temp = new KSyncProfile (); 2314 KSyncProfile* temp = new KSyncProfile ();
2320 KABPrefs::instance()->mAskForPreferences = false; 2315 KABPrefs::instance()->mAskForPreferences = false;
2321 for ( i = 0; i < syncProfileNames.count(); ++i ) { 2316 for ( i = 0; i < syncProfileNames.count(); ++i ) {
2322 mCurrentSyncProfile = i; 2317 mCurrentSyncProfile = i;
2323 temp->setName(syncProfileNames[mCurrentSyncProfile]); 2318 temp->setName(syncProfileNames[mCurrentSyncProfile]);
2324 temp->readConfig(&config); 2319 temp->readConfig(&config);
2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) { 2320 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 2321 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
2327 ++syncedProfiles; 2322 ++syncedProfiles;
2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2323 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2324 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2325 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2331 KABPrefs::instance()->mWriteBackInFuture = 0; 2326 KABPrefs::instance()->mWriteBackInFuture = 0;
2332 if ( temp->getWriteBackFuture() ) 2327 if ( temp->getWriteBackFuture() )
2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2328 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2334 KABPrefs::instance()->mShowSyncSummary = false; 2329 KABPrefs::instance()->mShowSyncSummary = false;
2335 mCurrentSyncDevice = syncProfileNames[i] ; 2330 mCurrentSyncDevice = syncProfileNames[i] ;
2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName; 2331 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
2337 if ( i == 0 ) { 2332 if ( i == 0 ) {
2338 syncSharp(); 2333 syncSharp();
2339 } else { 2334 } else {
2340 if ( temp->getIsLocalFileSync() ) { 2335 if ( temp->getIsLocalFileSync() ) {
2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) ) 2336 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2337 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2343 } else { 2338 } else {
2344 if ( temp->getIsPhoneSync() ) { 2339 if ( temp->getIsPhoneSync() ) {
2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2340 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2341 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2342 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2348 syncPhone(); 2343 syncPhone();
2349 } else 2344 } else
2350 syncRemote( temp, false ); 2345 syncRemote( temp, false );
2351 2346
2352 } 2347 }
2353 } 2348 }
2354 timer.start(); 2349 timer.start();
2355 setCaption(i18n("Multiple sync in progress ... please wait!") ); 2350 setCaption(i18n("Multiple sync in progress ... please wait!") );
2356 while ( timer.elapsed () < 2000 ) { 2351 while ( timer.elapsed () < 2000 ) {
2357 qApp->processEvents(); 2352 qApp->processEvents();
2358#ifndef _WIN32_ 2353#ifndef _WIN32_
2359 sleep (1); 2354 sleep (1);
2360#endif 2355#endif
2361 } 2356 }
2362 2357
2363 } 2358 }
2364 2359
2365 } 2360 }
2366 delete temp; 2361 delete temp;
2367 return syncedProfiles; 2362 return syncedProfiles;
2368} 2363}
2369 2364
2370void KABCore::syncRemote( KSyncProfile* prof, bool ask) 2365void KABCore::syncRemote( KSyncProfile* prof, bool ask)
2371{ 2366{
2372 QString question; 2367 QString question;
2373 if ( ask ) { 2368 if ( ask ) {
2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 2369 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2370 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2376 question, 2371 question,
2377 i18n("Yes"), i18n("No"), 2372 i18n("Yes"), i18n("No"),
2378 0, 0 ) != 0 ) 2373 0, 0 ) != 0 )
2379 return; 2374 return;
2380 } 2375 }
2381 QString command = prof->getPreSyncCommandAB(); 2376 QString command = prof->getPreSyncCommandAB();
2382 int fi; 2377 int fi;
2383 if ( (fi = command.find("$PWD$")) > 0 ) { 2378 if ( (fi = command.find("$PWD$")) > 0 ) {
2384 QString pwd = getPassword(); 2379 QString pwd = getPassword();
2385 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2380 command = command.left( fi )+ pwd + command.mid( fi+5 );
2386 2381
2387 } 2382 }
2388 int maxlen = 30; 2383 int maxlen = 30;
2389 if ( QApplication::desktop()->width() > 320 ) 2384 if ( QApplication::desktop()->width() > 320 )
2390 maxlen += 25; 2385 maxlen += 25;
2391 setCaption ( i18n( "Copy remote file to local machine..." ) ); 2386 setCaption ( i18n( "Copy remote file to local machine..." ) );
2392 int fileSize = 0; 2387 int fileSize = 0;
2393 int result = system ( command ); 2388 int result = system ( command );
2394 // 0 : okay 2389 // 0 : okay
2395 // 256: no such file or dir 2390 // 256: no such file or dir
2396 // 2391 //
2397 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 2392 qDebug("KO: Remote copy result(0 = okay): %d ",result );
2398 if ( result != 0 ) { 2393 if ( result != 0 ) {
2399 int len = maxlen; 2394 int len = maxlen;
2400 while ( len < command.length() ) { 2395 while ( len < command.length() ) {
2401 command.insert( len , "\n" ); 2396 command.insert( len , "\n" );
2402 len += maxlen +2; 2397 len += maxlen +2;
2403 } 2398 }
2404 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ; 2399 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ;
2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"), 2400 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
2406 question, 2401 question,
2407 i18n("Okay!")) ; 2402 i18n("Okay!")) ;
2408 setCaption ("KO/Pi"); 2403 setCaption ("KO/Pi");
2409 return; 2404 return;
2410 } 2405 }
2411 setCaption ( i18n( "Copying succeed." ) ); 2406 setCaption ( i18n( "Copying succeed." ) );
2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 2407 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) { 2408 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
2414// Event* e = mView->getLastSyncEvent(); 2409// Event* e = mView->getLastSyncEvent();
2415// e->setReadOnly( false ); 2410// e->setReadOnly( false );
2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2411// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2417// e->setReadOnly( true ); 2412// e->setReadOnly( true );
2418 if ( KABPrefs::instance()->mWriteBackFile ) { 2413 if ( KABPrefs::instance()->mWriteBackFile ) {
2419 command = prof->getPostSyncCommandAB(); 2414 command = prof->getPostSyncCommandAB();
2420 int fi; 2415 int fi;
2421 if ( (fi = command.find("$PWD$")) > 0 ) { 2416 if ( (fi = command.find("$PWD$")) > 0 ) {
2422 QString pwd = getPassword(); 2417 QString pwd = getPassword();
2423 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2418 command = command.left( fi )+ pwd + command.mid( fi+5 );
2424 2419
2425 } 2420 }
2426 setCaption ( i18n( "Writing back file ..." ) ); 2421 setCaption ( i18n( "Writing back file ..." ) );
2427 result = system ( command ); 2422 result = system ( command );
2428 qDebug("KO: Writing back file result: %d ", result); 2423 qDebug("KO: Writing back file result: %d ", result);
2429 if ( result != 0 ) { 2424 if ( result != 0 ) {
2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 2425 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
2431 return; 2426 return;
2432 } else { 2427 } else {
2433 setCaption ( i18n( "Syncronization sucessfully completed" ) ); 2428 setCaption ( i18n( "Syncronization sucessfully completed" ) );
2434 } 2429 }
2435 } 2430 }
2436 } 2431 }
2437 return; 2432 return;
2438} 2433}
2439#include <qpushbutton.h> 2434#include <qpushbutton.h>
2440#include <qradiobutton.h> 2435#include <qradiobutton.h>
2441#include <qbuttongroup.h> 2436#include <qbuttongroup.h>
2442void KABCore::edit_sync_options() 2437void KABCore::edit_sync_options()
2443{ 2438{
2444 //mDialogManager->showSyncOptions(); 2439 //mDialogManager->showSyncOptions();
2445 //KABPrefs::instance()->mSyncAlgoPrefs 2440 //KABPrefs::instance()->mSyncAlgoPrefs
2446 QDialog dia( this, "dia", true ); 2441 QDialog dia( this, "dia", true );
2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2442 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2443 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2449 QVBoxLayout lay ( &dia ); 2444 QVBoxLayout lay ( &dia );
2450 lay.setSpacing( 2 ); 2445 lay.setSpacing( 2 );
2451 lay.setMargin( 3 ); 2446 lay.setMargin( 3 );
2452 lay.addWidget(&gr); 2447 lay.addWidget(&gr);
2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2448 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2449 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2450 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2451 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2452 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2453 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2459 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2454 //QRadioButton both( i18n("Take both on conflict"), &gr );
2460 QPushButton pb ( "OK", &dia); 2455 QPushButton pb ( "OK", &dia);
2461 lay.addWidget( &pb ); 2456 lay.addWidget( &pb );
2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2457 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) { 2458 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
2464 case 0: 2459 case 0:
2465 loc.setChecked( true); 2460 loc.setChecked( true);
2466 break; 2461 break;
2467 case 1: 2462 case 1:
2468 rem.setChecked( true ); 2463 rem.setChecked( true );
2469 break; 2464 break;
2470 case 2: 2465 case 2:
2471 newest.setChecked( true); 2466 newest.setChecked( true);
2472 break; 2467 break;
2473 case 3: 2468 case 3:
2474 ask.setChecked( true); 2469 ask.setChecked( true);
2475 break; 2470 break;
2476 case 4: 2471 case 4:
2477 f_loc.setChecked( true); 2472 f_loc.setChecked( true);
2478 break; 2473 break;
2479 case 5: 2474 case 5:
2480 f_rem.setChecked( true); 2475 f_rem.setChecked( true);
2481 break; 2476 break;
2482 case 6: 2477 case 6:
2483 // both.setChecked( true); 2478 // both.setChecked( true);
2484 break; 2479 break;
2485 default: 2480 default:
2486 break; 2481 break;
2487 } 2482 }
2488 if ( dia.exec() ) { 2483 if ( dia.exec() ) {
2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2484 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2490 } 2485 }
2491 2486
2492 2487
2493} 2488}
2494QString KABCore::getPassword( ) 2489QString KABCore::getPassword( )
2495{ 2490{
2496 QString retfile = ""; 2491 QString retfile = "";
2497 QDialog dia ( this, "input-dialog", true ); 2492 QDialog dia ( this, "input-dialog", true );
2498 QLineEdit lab ( &dia ); 2493 QLineEdit lab ( &dia );
2499 lab.setEchoMode( QLineEdit::Password ); 2494 lab.setEchoMode( QLineEdit::Password );
2500 QVBoxLayout lay( &dia ); 2495 QVBoxLayout lay( &dia );
2501 lay.setMargin(7); 2496 lay.setMargin(7);
2502 lay.setSpacing(7); 2497 lay.setSpacing(7);
2503 lay.addWidget( &lab); 2498 lay.addWidget( &lab);
2504 dia.setFixedSize( 230,50 ); 2499 dia.setFixedSize( 230,50 );
2505 dia.setCaption( i18n("Enter password") ); 2500 dia.setCaption( i18n("Enter password") );
2506 QPushButton pb ( "OK", &dia); 2501 QPushButton pb ( "OK", &dia);
2507 lay.addWidget( &pb ); 2502 lay.addWidget( &pb );
2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2503 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2509 dia.show(); 2504 dia.show();
2510 int res = dia.exec(); 2505 int res = dia.exec();
2511 if ( res ) 2506 if ( res )
2512 retfile = lab.text(); 2507 retfile = lab.text();
2513 dia.hide(); 2508 dia.hide();
2514 qApp->processEvents(); 2509 qApp->processEvents();
2515 return retfile; 2510 return retfile;
2516 2511
2517} 2512}
2518#include <libkcal/syncdefines.h> 2513#include <libkcal/syncdefines.h>
2519 2514
2520KABC::Addressee KABCore::getLastSyncAddressee() 2515KABC::Addressee KABCore::getLastSyncAddressee()
2521{ 2516{
2522 Addressee lse; 2517 Addressee lse;
2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2518 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2519 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2525 if (lse.isEmpty()) { 2520 if (lse.isEmpty()) {
2526 qDebug("Creating new last-syncAddressee "); 2521 qDebug("Creating new last-syncAddressee ");
2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2522 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2528 QString sum = ""; 2523 QString sum = "";
2529 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2524 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2530 sum = "E: "; 2525 sum = "E: ";
2531 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2526 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2532 lse.setRevision( mLastAddressbookSync ); 2527 lse.setRevision( mLastAddressbookSync );
2533 lse.setCategories( i18n("SyncEvent") ); 2528 lse.setCategories( i18n("SyncEvent") );
2534 mAddressBook->insertAddressee( lse ); 2529 mAddressBook->insertAddressee( lse );
2535 } 2530 }
2536 return lse; 2531 return lse;
2537} 2532}
2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2533int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2539{ 2534{
2540 2535
2541 //void setZaurusId(int id); 2536 //void setZaurusId(int id);
2542 // int zaurusId() const; 2537 // int zaurusId() const;
2543 // void setZaurusUid(int id); 2538 // void setZaurusUid(int id);
2544 // int zaurusUid() const; 2539 // int zaurusUid() const;
2545 // void setZaurusStat(int id); 2540 // void setZaurusStat(int id);
2546 // int zaurusStat() const; 2541 // int zaurusStat() const;
2547 // 0 equal 2542 // 0 equal
2548 // 1 take local 2543 // 1 take local
2549 // 2 take remote 2544 // 2 take remote
2550 // 3 cancel 2545 // 3 cancel
2551 QDateTime lastSync = mLastAddressbookSync; 2546 QDateTime lastSync = mLastAddressbookSync;
2552 QDateTime localMod = local->revision(); 2547 QDateTime localMod = local->revision();
2553 QDateTime remoteMod = remote->revision(); 2548 QDateTime remoteMod = remote->revision();
2554 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2549 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2555 bool remCh, locCh; 2550 bool remCh, locCh;
2556 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2551 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2557 2552
2558 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2553 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2559 locCh = ( localMod > mLastAddressbookSync ); 2554 locCh = ( localMod > mLastAddressbookSync );
2560 if ( !remCh && ! locCh ) { 2555 if ( !remCh && ! locCh ) {
2561 //qDebug("both not changed "); 2556 //qDebug("both not changed ");
2562 lastSync = localMod.addDays(1); 2557 lastSync = localMod.addDays(1);
2563 if ( mode <= SYNC_PREF_ASK ) 2558 if ( mode <= SYNC_PREF_ASK )
2564 return 0; 2559 return 0;
2565 } else { 2560 } else {
2566 if ( locCh ) { 2561 if ( locCh ) {
2567 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2562 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2568 lastSync = localMod.addDays( -1 ); 2563 lastSync = localMod.addDays( -1 );
2569 if ( !remCh ) 2564 if ( !remCh )
2570 remoteMod =( lastSync.addDays( -1 ) ); 2565 remoteMod =( lastSync.addDays( -1 ) );
2571 } else { 2566 } else {
2572 //qDebug(" not loc changed "); 2567 //qDebug(" not loc changed ");
2573 lastSync = localMod.addDays( 1 ); 2568 lastSync = localMod.addDays( 1 );
2574 if ( remCh ) 2569 if ( remCh )
2575 remoteMod =( lastSync.addDays( 1 ) ); 2570 remoteMod =( lastSync.addDays( 1 ) );
2576 2571
2577 } 2572 }
2578 } 2573 }
2579 full = true; 2574 full = true;
2580 if ( mode < SYNC_PREF_ASK ) 2575 if ( mode < SYNC_PREF_ASK )
2581 mode = SYNC_PREF_ASK; 2576 mode = SYNC_PREF_ASK;
2582 } else { 2577 } else {
2583 if ( localMod == remoteMod ) 2578 if ( localMod == remoteMod )
2584 return 0; 2579 return 0;
2585 2580
2586 } 2581 }
2587 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2582 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2588 2583
2589 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2584 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2590 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2585 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2591 //full = true; //debug only 2586 //full = true; //debug only
2592 if ( full ) { 2587 if ( full ) {
2593 bool equ = ( (*local) == (*remote) ); 2588 bool equ = ( (*local) == (*remote) );
2594 if ( equ ) { 2589 if ( equ ) {
2595 //qDebug("equal "); 2590 //qDebug("equal ");
2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2591 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2597 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2592 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2598 } 2593 }
2599 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2594 if ( mode < SYNC_PREF_FORCE_LOCAL )
2600 return 0; 2595 return 0;
2601 2596
2602 }//else //debug only 2597 }//else //debug only
2603 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2598 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2604 } 2599 }
2605 int result; 2600 int result;
2606 bool localIsNew; 2601 bool localIsNew;
2607 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 2602 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2608 2603
2609 if ( full && mode < SYNC_PREF_NEWEST ) 2604 if ( full && mode < SYNC_PREF_NEWEST )
2610 mode = SYNC_PREF_ASK; 2605 mode = SYNC_PREF_ASK;
2611 2606
2612 switch( mode ) { 2607 switch( mode ) {
2613 case SYNC_PREF_LOCAL: 2608 case SYNC_PREF_LOCAL:
2614 if ( lastSync > remoteMod ) 2609 if ( lastSync > remoteMod )
2615 return 1; 2610 return 1;
2616 if ( lastSync > localMod ) 2611 if ( lastSync > localMod )
2617 return 2; 2612 return 2;
2618 return 1; 2613 return 1;
2619 break; 2614 break;
2620 case SYNC_PREF_REMOTE: 2615 case SYNC_PREF_REMOTE:
2621 if ( lastSync > remoteMod ) 2616 if ( lastSync > remoteMod )
2622 return 1; 2617 return 1;
2623 if ( lastSync > localMod ) 2618 if ( lastSync > localMod )
2624 return 2; 2619 return 2;
2625 return 2; 2620 return 2;
2626 break; 2621 break;
2627 case SYNC_PREF_NEWEST: 2622 case SYNC_PREF_NEWEST:
2628 if ( localMod > remoteMod ) 2623 if ( localMod > remoteMod )
2629 return 1; 2624 return 1;
2630 else 2625 else
2631 return 2; 2626 return 2;
2632 break; 2627 break;
2633 case SYNC_PREF_ASK: 2628 case SYNC_PREF_ASK:
2634 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2629 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2635 if ( lastSync > remoteMod ) 2630 if ( lastSync > remoteMod )
2636 return 1; 2631 return 1;
2637 if ( lastSync > localMod ) 2632 if ( lastSync > localMod )
2638 return 2; 2633 return 2;
2639 localIsNew = localMod >= remoteMod; 2634 localIsNew = localMod >= remoteMod;
2640 //qDebug("conflict! ************************************** "); 2635 //qDebug("conflict! ************************************** ");
2641 { 2636 {
2642 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2637 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2643 result = acd.executeD(localIsNew); 2638 result = acd.executeD(localIsNew);
2644 return result; 2639 return result;
2645 } 2640 }
2646 break; 2641 break;
2647 case SYNC_PREF_FORCE_LOCAL: 2642 case SYNC_PREF_FORCE_LOCAL:
2648 return 1; 2643 return 1;
2649 break; 2644 break;
2650 case SYNC_PREF_FORCE_REMOTE: 2645 case SYNC_PREF_FORCE_REMOTE:
2651 return 2; 2646 return 2;
2652 break; 2647 break;
2653 2648
2654 default: 2649 default:
2655 // SYNC_PREF_TAKE_BOTH not implemented 2650 // SYNC_PREF_TAKE_BOTH not implemented
2656 break; 2651 break;
2657 } 2652 }
2658 return 0; 2653 return 0;
2659} 2654}
2660bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2655bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2661{ 2656{
2662 bool syncOK = true; 2657 bool syncOK = true;
2663 int addedAddressee = 0; 2658 int addedAddressee = 0;
2664 int addedAddresseeR = 0; 2659 int addedAddresseeR = 0;
2665 int deletedAddresseeR = 0; 2660 int deletedAddresseeR = 0;
2666 int deletedAddresseeL = 0; 2661 int deletedAddresseeL = 0;
2667 int changedLocal = 0; 2662 int changedLocal = 0;
2668 int changedRemote = 0; 2663 int changedRemote = 0;
2669 //QPtrList<Addressee> el = local->rawAddressees(); 2664 //QPtrList<Addressee> el = local->rawAddressees();
2670 Addressee addresseeR; 2665 Addressee addresseeR;
2671 QString uid; 2666 QString uid;
2672 int take; 2667 int take;
2673 Addressee addresseeL; 2668 Addressee addresseeL;
2674 Addressee addresseeRSync; 2669 Addressee addresseeRSync;
2675 Addressee addresseeLSync; 2670 Addressee addresseeLSync;
2676 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2671 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2677 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2672 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2678 bool fullDateRange = false; 2673 bool fullDateRange = false;
2679 local->resetTempSyncStat(); 2674 local->resetTempSyncStat();
2680 mLastAddressbookSync = QDateTime::currentDateTime(); 2675 mLastAddressbookSync = QDateTime::currentDateTime();
2681 QDateTime modifiedCalendar = mLastAddressbookSync;; 2676 QDateTime modifiedCalendar = mLastAddressbookSync;;
2682 addresseeLSync = getLastSyncAddressee(); 2677 addresseeLSync = getLastSyncAddressee();
2683 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2678 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2684 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2679 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2685 if ( !addresseeR.isEmpty() ) { 2680 if ( !addresseeR.isEmpty() ) {
2686 addresseeRSync = addresseeR; 2681 addresseeRSync = addresseeR;
2687 remote->removeAddressee(addresseeR ); 2682 remote->removeAddressee(addresseeR );
2688 2683
2689 } else { 2684 } else {
2690 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2685 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2691 addresseeRSync = addresseeLSync ; 2686 addresseeRSync = addresseeLSync ;
2692 } else { 2687 } else {
2693 qDebug("FULLDATE 1"); 2688 qDebug("FULLDATE 1");
2694 fullDateRange = true; 2689 fullDateRange = true;
2695 Addressee newAdd; 2690 Addressee newAdd;
2696 addresseeRSync = newAdd; 2691 addresseeRSync = newAdd;
2697 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2692 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2698 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2693 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2699 addresseeRSync.setRevision( mLastAddressbookSync ); 2694 addresseeRSync.setRevision( mLastAddressbookSync );
2700 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2695 addresseeRSync.setCategories( i18n("SyncAddressee") );
2701 } 2696 }
2702 } 2697 }
2703 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2698 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2704 qDebug("FULLDATE 2"); 2699 qDebug("FULLDATE 2");
2705 fullDateRange = true; 2700 fullDateRange = true;
2706 } 2701 }
2707 if ( ! fullDateRange ) { 2702 if ( ! fullDateRange ) {
2708 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2703 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2709 2704
2710 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2705 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2711 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2706 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2712 fullDateRange = true; 2707 fullDateRange = true;
2713 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2708 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2714 } 2709 }
2715 } 2710 }
2716 // fullDateRange = true; // debug only! 2711 // fullDateRange = true; // debug only!
2717 if ( fullDateRange ) 2712 if ( fullDateRange )
2718 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2713 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2719 else 2714 else
2720 mLastAddressbookSync = addresseeLSync.revision(); 2715 mLastAddressbookSync = addresseeLSync.revision();
2721 // for resyncing if own file has changed 2716 // for resyncing if own file has changed
2722 // PENDING fixme later when implemented 2717 // PENDING fixme later when implemented
2723#if 0 2718#if 0
2724 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2719 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2725 mLastAddressbookSync = loadedFileVersion; 2720 mLastAddressbookSync = loadedFileVersion;
2726 qDebug("setting mLastAddressbookSync "); 2721 qDebug("setting mLastAddressbookSync ");
2727 } 2722 }
2728#endif 2723#endif
2729 2724
2730 //qDebug("*************************** "); 2725 //qDebug("*************************** ");
2731 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2726 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2732 QStringList er = remote->uidList(); 2727 QStringList er = remote->uidList();
2733 Addressee inR ;//= er.first(); 2728 Addressee inR ;//= er.first();
2734 Addressee inL; 2729 Addressee inL;
2735 QProgressBar bar( er.count(),0 ); 2730 QProgressBar bar( er.count(),0 );
2736 bar.setCaption (i18n("Syncing - close to abort!") ); 2731 bar.setCaption (i18n("Syncing - close to abort!") );
2737 2732
2738 int w = 300; 2733 int w = 300;
2739 if ( QApplication::desktop()->width() < 320 ) 2734 if ( QApplication::desktop()->width() < 320 )
2740 w = 220; 2735 w = 220;
2741 int h = bar.sizeHint().height() ; 2736 int h = bar.sizeHint().height() ;
2742 int dw = QApplication::desktop()->width(); 2737 int dw = QApplication::desktop()->width();
2743 int dh = QApplication::desktop()->height(); 2738 int dh = QApplication::desktop()->height();
2744 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2739 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2745 bar.show(); 2740 bar.show();
2746 int modulo = (er.count()/10)+1; 2741 int modulo = (er.count()/10)+1;
2747 int incCounter = 0; 2742 int incCounter = 0;
2748 while ( incCounter < er.count()) { 2743 while ( incCounter < er.count()) {
2749 if ( ! bar.isVisible() ) 2744 if ( ! bar.isVisible() )
2750 return false; 2745 return false;
2751 if ( incCounter % modulo == 0 ) 2746 if ( incCounter % modulo == 0 )
2752 bar.setProgress( incCounter ); 2747 bar.setProgress( incCounter );
2753 uid = er[ incCounter ]; 2748 uid = er[ incCounter ];
2754 bool skipIncidence = false; 2749 bool skipIncidence = false;
2755 if ( uid.left(19) == QString("last-syncAddressee-") ) 2750 if ( uid.left(19) == QString("last-syncAddressee-") )
2756 skipIncidence = true; 2751 skipIncidence = true;
2757 QString idS,OidS; 2752 QString idS,OidS;
2758 qApp->processEvents(); 2753 qApp->processEvents();
2759 if ( !skipIncidence ) { 2754 if ( !skipIncidence ) {
2760 inL = local->findByUid( uid ); 2755 inL = local->findByUid( uid );
2761 inR = remote->findByUid( uid ); 2756 inR = remote->findByUid( uid );
2762 //inL.setResource( 0 ); 2757 //inL.setResource( 0 );
2763 //inR.setResource( 0 ); 2758 //inR.setResource( 0 );
2764 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2759 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2765 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2760 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2766 //qDebug("take %d %s ", take, inL.summary().latin1()); 2761 //qDebug("take %d %s ", take, inL.summary().latin1());
2767 if ( take == 3 ) 2762 if ( take == 3 )
2768 return false; 2763 return false;
2769 if ( take == 1 ) {// take local 2764 if ( take == 1 ) {// take local
2770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2765 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2771 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2766 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2772 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2767 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2773 local->insertAddressee( inL, false ); 2768 local->insertAddressee( inL, false );
2774 idS = inR.externalUID(); 2769 idS = inR.externalUID();
2775 OidS = inR.originalExternalUID(); 2770 OidS = inR.originalExternalUID();
2776 } 2771 }
2777 else 2772 else
2778 idS = inR.IDStr(); 2773 idS = inR.IDStr();
2779 remote->removeAddressee( inR ); 2774 remote->removeAddressee( inR );
2780 inR = inL; 2775 inR = inL;
2781 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2776 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2782 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2777 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2783 inR.setOriginalExternalUID( OidS ); 2778 inR.setOriginalExternalUID( OidS );
2784 inR.setExternalUID( idS ); 2779 inR.setExternalUID( idS );
2785 } else { 2780 } else {
2786 inR.setIDStr( idS ); 2781 inR.setIDStr( idS );
2787 } 2782 }
2788 inR.setResource( 0 ); 2783 inR.setResource( 0 );
2789 remote->insertAddressee( inR , false); 2784 remote->insertAddressee( inR , false);
2790 ++changedRemote; 2785 ++changedRemote;
2791 } else { // take == 2 take remote 2786 } else { // take == 2 take remote
2792 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2787 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2793 if ( inR.revision().date().year() < 2004 ) 2788 if ( inR.revision().date().year() < 2004 )
2794 inR.setRevision( modifiedCalendar ); 2789 inR.setRevision( modifiedCalendar );
2795 } 2790 }
2796 idS = inL.IDStr(); 2791 idS = inL.IDStr();
2797 local->removeAddressee( inL ); 2792 local->removeAddressee( inL );
2798 inL = inR; 2793 inL = inR;
2799 inL.setIDStr( idS ); 2794 inL.setIDStr( idS );
2800 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2795 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2801 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2796 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2802 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2797 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2803 } 2798 }
2804 inL.setResource( 0 ); 2799 inL.setResource( 0 );
2805 local->insertAddressee( inL , false ); 2800 local->insertAddressee( inL , false );
2806 ++changedLocal; 2801 ++changedLocal;
2807 } 2802 }
2808 } 2803 }
2809 } else { // no conflict 2804 } else { // no conflict
2810 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2805 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2811 QString des = addresseeLSync.note(); 2806 QString des = addresseeLSync.note();
2812 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2807 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2813 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2808 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2814 remote->insertAddressee( inR, false ); 2809 remote->insertAddressee( inR, false );
2815 ++deletedAddresseeR; 2810 ++deletedAddresseeR;
2816 } else { 2811 } else {
2817 inR.setRevision( modifiedCalendar ); 2812 inR.setRevision( modifiedCalendar );
2818 remote->insertAddressee( inR, false ); 2813 remote->insertAddressee( inR, false );
2819 inL = inR; 2814 inL = inR;
2820 inL.setResource( 0 ); 2815 inL.setResource( 0 );
2821 local->insertAddressee( inL , false); 2816 local->insertAddressee( inL , false);
2822 ++addedAddressee; 2817 ++addedAddressee;
2823 } 2818 }
2824 } else { 2819 } else {
2825 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2820 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2826 inR.setRevision( modifiedCalendar ); 2821 inR.setRevision( modifiedCalendar );
2827 remote->insertAddressee( inR, false ); 2822 remote->insertAddressee( inR, false );
2828 inR.setResource( 0 ); 2823 inR.setResource( 0 );
2829 local->insertAddressee( inR, false ); 2824 local->insertAddressee( inR, false );
2830 ++addedAddressee; 2825 ++addedAddressee;
2831 } else { 2826 } else {
2832 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2827 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2833 remote->removeAddressee( inR ); 2828 remote->removeAddressee( inR );
2834 ++deletedAddresseeR; 2829 ++deletedAddresseeR;
2835 } 2830 }
2836 } 2831 }
2837 } 2832 }
2838 } 2833 }
2839 ++incCounter; 2834 ++incCounter;
2840 } 2835 }
2841 er.clear(); 2836 er.clear();
2842 QStringList el = local->uidList(); 2837 QStringList el = local->uidList();
2843 modulo = (el.count()/10)+1; 2838 modulo = (el.count()/10)+1;
2844 bar.setCaption (i18n("Add / remove addressees") ); 2839 bar.setCaption (i18n("Add / remove addressees") );
2845 bar.setTotalSteps ( el.count() ) ; 2840 bar.setTotalSteps ( el.count() ) ;
2846 bar.show(); 2841 bar.show();
2847 incCounter = 0; 2842 incCounter = 0;
2848 while ( incCounter < el.count()) { 2843 while ( incCounter < el.count()) {
2849 qApp->processEvents(); 2844 qApp->processEvents();
2850 if ( ! bar.isVisible() ) 2845 if ( ! bar.isVisible() )
2851 return false; 2846 return false;
2852 if ( incCounter % modulo == 0 ) 2847 if ( incCounter % modulo == 0 )
2853 bar.setProgress( incCounter ); 2848 bar.setProgress( incCounter );
2854 uid = el[ incCounter ]; 2849 uid = el[ incCounter ];
2855 bool skipIncidence = false; 2850 bool skipIncidence = false;
2856 if ( uid.left(19) == QString("last-syncAddressee-") ) 2851 if ( uid.left(19) == QString("last-syncAddressee-") )
2857 skipIncidence = true; 2852 skipIncidence = true;
2858 if ( !skipIncidence ) { 2853 if ( !skipIncidence ) {
2859 inL = local->findByUid( uid ); 2854 inL = local->findByUid( uid );
2860 inR = remote->findByUid( uid ); 2855 inR = remote->findByUid( uid );
2861 if ( inR.isEmpty() ) { 2856 if ( inR.isEmpty() ) {
2862 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2857 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2863 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2858 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2864 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2859 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2865 local->removeAddressee( inL ); 2860 local->removeAddressee( inL );
2866 ++deletedAddresseeL; 2861 ++deletedAddresseeL;
2867 } else { 2862 } else {
2868 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2863 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2869 inL.removeID(mCurrentSyncDevice ); 2864 inL.removeID(mCurrentSyncDevice );
2870 ++addedAddresseeR; 2865 ++addedAddresseeR;
2871 inL.setRevision( modifiedCalendar ); 2866 inL.setRevision( modifiedCalendar );
2872 local->insertAddressee( inL, false ); 2867 local->insertAddressee( inL, false );
2873 inR = inL; 2868 inR = inL;
2874 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2869 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2875 inR.setResource( 0 ); 2870 inR.setResource( 0 );
2876 remote->insertAddressee( inR, false ); 2871 remote->insertAddressee( inR, false );
2877 } 2872 }
2878 } 2873 }
2879 } else { 2874 } else {
2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2875 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2876 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2882 local->removeAddressee( inL ); 2877 local->removeAddressee( inL );
2883 ++deletedAddresseeL; 2878 ++deletedAddresseeL;
2884 } else { 2879 } else {
2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2880 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2886 ++addedAddresseeR; 2881 ++addedAddresseeR;
2887 inL.setRevision( modifiedCalendar ); 2882 inL.setRevision( modifiedCalendar );
2888 local->insertAddressee( inL, false ); 2883 local->insertAddressee( inL, false );
2889 inR = inL; 2884 inR = inL;
2890 inR.setResource( 0 ); 2885 inR.setResource( 0 );
2891 remote->insertAddressee( inR, false ); 2886 remote->insertAddressee( inR, false );
2892 } 2887 }
2893 } 2888 }
2894 } 2889 }
2895 } 2890 }
2896 } 2891 }
2897 ++incCounter; 2892 ++incCounter;
2898 } 2893 }
2899 el.clear(); 2894 el.clear();
2900 bar.hide(); 2895 bar.hide();
2901 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2896 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2902 // get rid of micro seconds 2897 // get rid of micro seconds
2903 QTime t = mLastAddressbookSync.time(); 2898 QTime t = mLastAddressbookSync.time();
2904 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2899 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2905 addresseeLSync.setRevision( mLastAddressbookSync ); 2900 addresseeLSync.setRevision( mLastAddressbookSync );
2906 addresseeRSync.setRevision( mLastAddressbookSync ); 2901 addresseeRSync.setRevision( mLastAddressbookSync );
2907 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2902 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2908 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2903 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2909 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2904 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2910 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2905 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2911 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2906 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2912 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2907 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2913 addresseeRSync.setNote( "" ) ; 2908 addresseeRSync.setNote( "" ) ;
2914 addresseeLSync.setNote( "" ); 2909 addresseeLSync.setNote( "" );
2915 2910
2916 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2911 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2917 remote->insertAddressee( addresseeRSync, false ); 2912 remote->insertAddressee( addresseeRSync, false );
2918 local->insertAddressee( addresseeLSync, false ); 2913 local->insertAddressee( addresseeLSync, false );
2919 QString mes; 2914 QString mes;
2920 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 2915 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
2921 if ( KABPrefs::instance()->mShowSyncSummary ) { 2916 if ( KABPrefs::instance()->mShowSyncSummary ) {
2922 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2917 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2923 } 2918 }
2924 qDebug( mes ); 2919 qDebug( mes );
2925 return syncOK; 2920 return syncOK;
2926} 2921}
2927 2922
2928bool KABCore::syncAB(QString filename, int mode) 2923bool KABCore::syncAB(QString filename, int mode)
2929{ 2924{
2930 2925
2931 //pending prepare addresseeview for output 2926 //pending prepare addresseeview for output
2932 //pending detect, if remote file has REV field. if not switch to external sync 2927 //pending detect, if remote file has REV field. if not switch to external sync
2933 mGlobalSyncMode = SYNC_MODE_NORMAL; 2928 mGlobalSyncMode = SYNC_MODE_NORMAL;
2934 AddressBook abLocal(filename,"syncContact"); 2929 AddressBook abLocal(filename,"syncContact");
2935 bool syncOK = false; 2930 bool syncOK = false;
2936 if ( abLocal.load() ) { 2931 if ( abLocal.load() ) {
2937 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2932 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2938 bool external = false; 2933 bool external = false;
2939 bool isXML = false; 2934 bool isXML = false;
2940 if ( filename.right(4) == ".xml") { 2935 if ( filename.right(4) == ".xml") {
2941 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2936 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2942 isXML = true; 2937 isXML = true;
2943 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2938 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2944 } else { 2939 } else {
2945 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2940 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2946 if ( ! lse.isEmpty() ) { 2941 if ( ! lse.isEmpty() ) {
2947 if ( lse.familyName().left(4) == "!E: " ) 2942 if ( lse.familyName().left(4) == "!E: " )
2948 external = true; 2943 external = true;
2949 } else { 2944 } else {
2950 bool found = false; 2945 bool found = false;
2951 AddressBook::Iterator it; 2946 AddressBook::Iterator it;
2952 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2947 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2953 if ( (*it).revision().date().year() > 2003 ) { 2948 if ( (*it).revision().date().year() > 2003 ) {
2954 found = true; 2949 found = true;
2955 break; 2950 break;
2956 } 2951 }
2957 } 2952 }
2958 external = ! found; 2953 external = ! found;
2959 } 2954 }
2960 2955
2961 if ( external ) { 2956 if ( external ) {
2962 qDebug("Setting vcf mode to external "); 2957 qDebug("Setting vcf mode to external ");
2963 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2958 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2964 AddressBook::Iterator it; 2959 AddressBook::Iterator it;
2965 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2960 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2966 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2961 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2967 (*it).computeCsum( mCurrentSyncDevice ); 2962 (*it).computeCsum( mCurrentSyncDevice );
2968 } 2963 }
2969 } 2964 }
2970 } 2965 }
2971 //AddressBook::Iterator it; 2966 //AddressBook::Iterator it;
2972 //QStringList vcards; 2967 //QStringList vcards;
2973 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2968 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2974 // qDebug("Name %s ", (*it).familyName().latin1()); 2969 // qDebug("Name %s ", (*it).familyName().latin1());
2975 //} 2970 //}
2976 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2971 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2977 if ( syncOK ) { 2972 if ( syncOK ) {
2978 if ( KABPrefs::instance()->mWriteBackFile ) 2973 if ( KABPrefs::instance()->mWriteBackFile )
2979 { 2974 {
2980 if ( external ) 2975 if ( external )
2981 abLocal.removeSyncAddressees( !isXML); 2976 abLocal.removeSyncAddressees( !isXML);
2982 qDebug("Saving remote AB "); 2977 qDebug("Saving remote AB ");
2983 abLocal.saveAB(); 2978 abLocal.saveAB();
2984 if ( isXML ) { 2979 if ( isXML ) {
2985 // afterwrite processing 2980 // afterwrite processing
2986 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2981 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2987 } 2982 }
2988 } 2983 }
2989 } 2984 }
2990 setModified(); 2985 setModified();
2991 2986
2992 } 2987 }
2993 if ( syncOK ) 2988 if ( syncOK )
2994 mViewManager->refreshView(); 2989 mViewManager->refreshView();
2995 return syncOK; 2990 return syncOK;
2996#if 0 2991#if 0
2997 2992
2998 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2993 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2999 getEventViewerDialog()->setSyncMode( true ); 2994 getEventViewerDialog()->setSyncMode( true );
3000 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 2995 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
3001 getEventViewerDialog()->setSyncMode( false ); 2996 getEventViewerDialog()->setSyncMode( false );
3002 if ( syncOK ) { 2997 if ( syncOK ) {
3003 if ( KOPrefs::instance()->mWriteBackFile ) 2998 if ( KOPrefs::instance()->mWriteBackFile )
3004 { 2999 {
3005 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3000 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3006 storage->save(); 3001 storage->save();
3007 } 3002 }
3008 } 3003 }
3009 setModified(); 3004 setModified();
3010 } 3005 }
3011 3006
3012#endif 3007#endif
3013} 3008}
3014 3009
3015void KABCore::confSync() 3010void KABCore::confSync()
3016{ 3011{
3017 static KSyncPrefsDialog* sp = 0; 3012 static KSyncPrefsDialog* sp = 0;
3018 if ( ! sp ) { 3013 if ( ! sp ) {
3019 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 3014 sp = new KSyncPrefsDialog( this, "syncprefs", true );
3020 } 3015 }
3021 sp->usrReadConfig(); 3016 sp->usrReadConfig();
3022#ifndef DESKTOP_VERSION 3017#ifndef DESKTOP_VERSION
3023 sp->showMaximized(); 3018 sp->showMaximized();
3024#else 3019#else
3025 sp->show(); 3020 sp->show();
3026#endif 3021#endif
3027 sp->exec(); 3022 sp->exec();
3028 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 3023 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
3029 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 3024 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
3030 fillSyncMenu(); 3025 fillSyncMenu();
3031} 3026}
3032void KABCore::syncSharp() 3027void KABCore::syncSharp()
3033{ 3028{
3034 if ( ! syncExternal("sharp") ) 3029 if ( ! syncExternal("sharp") )
3035 qDebug("ERROR sync sharp ");; 3030 qDebug("ERROR sync sharp ");;
3036} 3031}
3037bool KABCore::syncExternal(QString resource) 3032bool KABCore::syncExternal(QString resource)
3038{ 3033{
3039 if ( mModified ) 3034 if ( mModified )
3040 save(); 3035 save();
3041 if ( KABPrefs::instance()->mAskForPreferences ) 3036 if ( KABPrefs::instance()->mAskForPreferences )
3042 edit_sync_options(); 3037 edit_sync_options();
3043 qDebug("syncSharp() "); 3038 qDebug("syncSharp() ");
3044 AddressBook abLocal( resource,"syncContact"); 3039 AddressBook abLocal( resource,"syncContact");
3045 bool syncOK = false; 3040 bool syncOK = false;
3046 if ( abLocal.load() ) { 3041 if ( abLocal.load() ) {
3047 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 3042 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
3048 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3043 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3049 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 3044 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
3050 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs ); 3045 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs );
3051 if ( syncOK ) { 3046 if ( syncOK ) {
3052 if ( KABPrefs::instance()->mWriteBackFile ) { 3047 if ( KABPrefs::instance()->mWriteBackFile ) {
3053 abLocal.saveAB(); 3048 abLocal.saveAB();
3054 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 3049 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
3055 } 3050 }
3056 } 3051 }
3057 setModified(); 3052 setModified();
3058 } 3053 }
3059 if ( syncOK ) 3054 if ( syncOK )
3060 mViewManager->refreshView(); 3055 mViewManager->refreshView();
3061 return syncOK; 3056 return syncOK;
3062 3057
3063} 3058}
3064void KABCore::syncPhone() 3059void KABCore::syncPhone()
3065{ 3060{
3066 if ( mModified ) 3061 if ( mModified )
3067 save(); 3062 save();
3068 qDebug("pending syncPhone(); "); 3063 qDebug("pending syncPhone(); ");
3069 //mView->syncPhone(); 3064 //mView->syncPhone();
3070 setModified(); 3065 setModified();
3071 3066
3072} 3067}
diff --git a/kaddressbook/kcmconfigs/kabconfigwidget.cpp b/kaddressbook/kcmconfigs/kabconfigwidget.cpp
index 0c3a199..e970c3d 100644
--- a/kaddressbook/kcmconfigs/kabconfigwidget.cpp
+++ b/kaddressbook/kcmconfigs/kabconfigwidget.cpp
@@ -1,403 +1,385 @@
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#include <qcheckbox.h> 24#include <qcheckbox.h>
25#include <qframe.h> 25#include <qframe.h>
26#include <qgroupbox.h> 26#include <qgroupbox.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qpushbutton.h> 28#include <qpushbutton.h>
29#include <qtabwidget.h> 29#include <qtabwidget.h>
30#include <qcombobox.h> 30#include <qcombobox.h>
31#include <qlineedit.h> 31#include <qlineedit.h>
32#include <qlabel.h> 32#include <qlabel.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qvbox.h> 34#include <qvbox.h>
35 35
36#include <kconfig.h> 36#include <kconfig.h>
37#include <kdebug.h> 37#include <kdebug.h>
38#include <kdialog.h> 38#include <kdialog.h>
39#include <klistview.h> 39#include <klistview.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <kglobal.h> 41#include <kglobal.h>
42#include <kmessagebox.h> 42#include <kmessagebox.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44 44
45#ifndef KAB_EMBEDDED 45#ifndef KAB_EMBEDDED
46#include <ktrader.h> 46#include <ktrader.h>
47#else // KAB_EMBEDDED 47#else // KAB_EMBEDDED
48#include <mergewidget.h> 48#include <mergewidget.h>
49#include <distributionlistwidget.h> 49#include <distributionlistwidget.h>
50#endif // KAB_EMBEDDED 50#endif // KAB_EMBEDDED
51 51
52#include "addresseewidget.h" 52#include "addresseewidget.h"
53#include "extensionconfigdialog.h" 53#include "extensionconfigdialog.h"
54#include "extensionwidget.h" 54#include "extensionwidget.h"
55#include "kabprefs.h" 55#include "kabprefs.h"
56 56
57#include "kabconfigwidget.h" 57#include "kabconfigwidget.h"
58 58
59class ExtensionItem : public QCheckListItem 59class ExtensionItem : public QCheckListItem
60{ 60{
61 public: 61 public:
62 62
63#ifndef KAB_EMBEDDED 63#ifndef KAB_EMBEDDED
64 ExtensionItem( QListView *parent, const QString &text ); 64 ExtensionItem( QListView *parent, const QString &text );
65 void setService( const KService::Ptr &ptr ); 65 void setService( const KService::Ptr &ptr );
66#else //KAB_EMBEDDED 66#else //KAB_EMBEDDED
67 ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment ); 67 ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment );
68 void setFactory( ExtensionFactory* fac ); 68 void setFactory( ExtensionFactory* fac );
69#endif //KAB_EMBEDDED 69#endif //KAB_EMBEDDED
70 70
71 bool configWidgetAvailable() const; 71 bool configWidgetAvailable() const;
72 ExtensionFactory *factory() const; 72 ExtensionFactory *factory() const;
73 73
74 virtual QString text( int column ) const; 74 virtual QString text( int column ) const;
75 75
76 private: 76 private:
77#ifndef KAB_EMBEDDED 77#ifndef KAB_EMBEDDED
78 KService::Ptr mPtr; 78 KService::Ptr mPtr;
79#else //KAB_EMBEDDED 79#else //KAB_EMBEDDED
80 ExtensionFactory* mFactory; 80 ExtensionFactory* mFactory;
81 QString mName; 81 QString mName;
82 QString mComment; 82 QString mComment;
83 83
84#endif //KAB_EMBEDDED 84#endif //KAB_EMBEDDED
85 85
86}; 86};
87 87
88KABConfigWidget::KABConfigWidget( QWidget *parent, const char *name ) 88KABConfigWidget::KABConfigWidget( KABPrefs* prefs, QWidget *parent, const char *name )
89 : QWidget( parent, name ) 89 : KPrefsWidget( prefs, parent, name )
90{ 90{
91 QVBoxLayout *topLayout = new QVBoxLayout( this, 0, 91 QVBoxLayout *topLayout = new QVBoxLayout( this, 0,
92 KDialog::spacingHint() ); 92 KDialog::spacingHint() );
93 93
94 QTabWidget *tabWidget = new QTabWidget( this ); 94 QTabWidget *tabWidget = new QTabWidget( this );
95 topLayout->addWidget( tabWidget ); 95 topLayout->addWidget( tabWidget );
96 96
97 // General page 97 // General page
98 QWidget *generalPage = new QWidget( this ); 98 QWidget *generalPage = new QWidget( this );
99 QVBoxLayout *layout = new QVBoxLayout( generalPage, KDialog::marginHintSmall(), 99 QVBoxLayout *layout = new QVBoxLayout( generalPage, KDialog::marginHintSmall(),
100 KDialog::spacingHintSmall() ); 100 KDialog::spacingHintSmall() );
101 //general groupbox 101 //general groupbox
102 QVBox *vBox = new QVBox( generalPage, "qvbox" ); 102 QVBox *vBox = new QVBox( generalPage, "qvbox" );
103 QVBoxLayout *boxLayout = new QVBoxLayout( vBox->layout(), -1, "qvboxlayout" ); 103 QVBoxLayout *boxLayout = new QVBoxLayout( vBox->layout(), -1, "qvboxlayout" );
104 boxLayout->setAlignment( Qt::AlignTop ); 104 boxLayout->setAlignment( Qt::AlignTop );
105 boxLayout->setMargin(KDialog::marginHintSmall() ); 105 boxLayout->setMargin(KDialog::marginHintSmall() );
106 vBox->layout()->setMargin(KDialog::marginHintSmall()) ; 106 vBox->layout()->setMargin(KDialog::marginHintSmall()) ;
107 vBox->layout()->setSpacing(KDialog::spacingHintSmall()); 107 vBox->layout()->setSpacing(KDialog::spacingHintSmall());
108 boxLayout->setSpacing( KDialog::spacingHintSmall() ); 108 boxLayout->setSpacing( KDialog::spacingHintSmall() );
109 mSearchReturnBox = new QCheckBox( i18n( "Search only after <return> key pressed" ), vBox, "mreturn" ); 109 mSearchReturnBox = new QCheckBox( i18n( "Search only after <return> key pressed" ), vBox, "mreturn" );
110 boxLayout->addWidget( mSearchReturnBox ); 110 boxLayout->addWidget( mSearchReturnBox );
111 mViewsSingleClickBox = new QCheckBox( i18n( "Honor KDE single click" ), vBox, "msingle" ); 111 mViewsSingleClickBox = new QCheckBox( i18n( "Honor KDE single click" ), vBox, "msingle" );
112 boxLayout->addWidget( mViewsSingleClickBox ); 112 boxLayout->addWidget( mViewsSingleClickBox );
113 113
114 mNameParsing = new QCheckBox( i18n( "Automatic name parsing for new addressees" ), vBox, "mparse" ); 114 mNameParsing = new QCheckBox( i18n( "Automatic name parsing for new addressees" ), vBox, "mparse" );
115 boxLayout->addWidget( mNameParsing ); 115 boxLayout->addWidget( mNameParsing );
116 116
117 mMultipleViewsAtOnce = new QCheckBox( i18n( "Display List and Details at once (restart)" ), vBox, "mdisplay" ); 117 mMultipleViewsAtOnce = new QCheckBox( i18n( "Display List and Details at once (restart)" ), vBox, "mdisplay" );
118 boxLayout->addWidget( mMultipleViewsAtOnce ); 118 boxLayout->addWidget( mMultipleViewsAtOnce );
119 119
120 mAskForQuit = new QCheckBox( i18n( "Ask for quit when closing Ka/Pi" ), vBox, "mquit" ); 120 mAskForQuit = new QCheckBox( i18n( "Ask for quit when closing Ka/Pi" ), vBox, "mquit" );
121 boxLayout->addWidget( mAskForQuit ); 121 boxLayout->addWidget( mAskForQuit );
122 122
123 layout->addWidget( vBox ); 123 layout->addWidget( vBox );
124 124
125 tabWidget->addTab( generalPage, i18n( "General" ) ); 125 tabWidget->addTab( generalPage, i18n( "General" ) );
126 126
127 // Extension page 127 // Extension page
128 QWidget *extensionPage = new QWidget( this ); 128 QWidget *extensionPage = new QWidget( this );
129 QVBoxLayout *extensionLayout = new QVBoxLayout( extensionPage, KDialog::marginHintSmall(), 129 QVBoxLayout *extensionLayout = new QVBoxLayout( extensionPage, KDialog::marginHintSmall(),
130 KDialog::spacingHintSmall() ); 130 KDialog::spacingHintSmall() );
131 131
132 //extensions groupbox 132 //extensions groupbox
133 133
134 QGroupBox* groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Extensions (restart)" ), extensionPage ); 134 QGroupBox* groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Extensions (restart)" ), extensionPage );
135 boxLayout = new QVBoxLayout( groupBox->layout() ); 135 boxLayout = new QVBoxLayout( groupBox->layout() );
136 boxLayout->setAlignment( Qt::AlignTop ); 136 boxLayout->setAlignment( Qt::AlignTop );
137 boxLayout->setMargin(KDialog::marginHintSmall()); 137 boxLayout->setMargin(KDialog::marginHintSmall());
138 boxLayout->setSpacing(KDialog::spacingHintSmall()); 138 boxLayout->setSpacing(KDialog::spacingHintSmall());
139 groupBox->layout()->setMargin(1) ; 139 groupBox->layout()->setMargin(1) ;
140 groupBox->layout()->setSpacing(0); 140 groupBox->layout()->setSpacing(0);
141 mExtensionView = new KListView( groupBox ); 141 mExtensionView = new KListView( groupBox );
142 mExtensionView->setAllColumnsShowFocus( true ); 142 mExtensionView->setAllColumnsShowFocus( true );
143 mExtensionView->addColumn( i18n( "Name" ) ); 143 mExtensionView->addColumn( i18n( "Name" ) );
144 mExtensionView->addColumn( i18n( "Description" ) ); 144 mExtensionView->addColumn( i18n( "Description" ) );
145 mExtensionView->setMaximumHeight(80); 145 mExtensionView->setMaximumHeight(80);
146 146
147 boxLayout->addWidget( mExtensionView ); 147 boxLayout->addWidget( mExtensionView );
148 148
149 mConfigureButton = new QPushButton( i18n( "Configure..." ), groupBox ); 149 mConfigureButton = new QPushButton( i18n( "Configure..." ), groupBox );
150 mConfigureButton->setEnabled( false ); 150 mConfigureButton->setEnabled( false );
151 boxLayout->addWidget( mConfigureButton ); 151 boxLayout->addWidget( mConfigureButton );
152 152
153 extensionLayout->addWidget( groupBox ); 153 extensionLayout->addWidget( groupBox );
154 154
155 connect( mNameParsing, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 155 connect( mNameParsing, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
156 connect( mViewsSingleClickBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 156 connect( mViewsSingleClickBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
157 connect( mSearchReturnBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 157 connect( mSearchReturnBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
158 connect( mMultipleViewsAtOnce, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 158 connect( mMultipleViewsAtOnce, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
159 connect( mAskForQuit, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 159 connect( mAskForQuit, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
160 connect( mExtensionView, SIGNAL( selectionChanged( QListViewItem* ) ), 160 connect( mExtensionView, SIGNAL( selectionChanged( QListViewItem* ) ),
161 SLOT( selectionChanged( QListViewItem* ) ) ); 161 SLOT( selectionChanged( QListViewItem* ) ) );
162 connect( mExtensionView, SIGNAL( clicked( QListViewItem* ) ), 162 connect( mExtensionView, SIGNAL( clicked( QListViewItem* ) ),
163 SLOT( itemClicked( QListViewItem* ) ) ); 163 SLOT( itemClicked( QListViewItem* ) ) );
164 connect( mConfigureButton, SIGNAL( clicked() ), 164 connect( mConfigureButton, SIGNAL( clicked() ),
165 SLOT( configureExtension() ) ); 165 SLOT( configureExtension() ) );
166 166
167 tabWidget->addTab( extensionPage, i18n( "Extensions" ) ); 167 tabWidget->addTab( extensionPage, i18n( "Extensions" ) );
168 168
169 // Addressee page 169 // Addressee page
170 mAddresseeWidget = new AddresseeWidget( this ); 170 mAddresseeWidget = new AddresseeWidget( this );
171 tabWidget->addTab( mAddresseeWidget, i18n( "Contact" ) ); 171 tabWidget->addTab( mAddresseeWidget, i18n( "Contact" ) );
172 connect( mAddresseeWidget, SIGNAL( modified() ), SLOT( modified() ) ); 172 connect( mAddresseeWidget, SIGNAL( modified() ), SLOT( modified() ) );
173 173
174} 174}
175 175
176 176void KABConfigWidget::usrReadConfig()
177void KABConfigWidget::restoreSettings(KABPrefs* prefs)
178{ 177{
179//US prefs was KABPrefs::instance() before 178 KABPrefs* prefs = KABPrefs::instance();
180 179
181 bool blocked = signalsBlocked(); 180 bool blocked = signalsBlocked();
182 blockSignals( true ); 181 blockSignals( true );
183 182
184 mNameParsing->setChecked( prefs->mAutomaticNameParsing ); 183 mNameParsing->setChecked( prefs->mAutomaticNameParsing );
185 mViewsSingleClickBox->setChecked( prefs->mHonorSingleClick ); 184 mViewsSingleClickBox->setChecked( prefs->mHonorSingleClick );
186 mSearchReturnBox->setChecked( prefs->mSearchWithReturn ); 185 mSearchReturnBox->setChecked( prefs->mSearchWithReturn );
187 mMultipleViewsAtOnce->setChecked( prefs->mMultipleViewsAtOnce ); 186 mMultipleViewsAtOnce->setChecked( prefs->mMultipleViewsAtOnce );
188 mAskForQuit->setChecked( prefs->mAskForQuit ); 187 mAskForQuit->setChecked( prefs->mAskForQuit );
189 188
190 mAddresseeWidget->restoreSettings(); 189 mAddresseeWidget->restoreSettings();
191 190
192 restoreExtensionSettings(); 191 restoreExtensionSettings();
193 192
194 blockSignals( blocked ); 193 blockSignals( blocked );
195 194
196 emit changed( false );
197} 195}
198 196
199void KABConfigWidget::saveSettings(KABPrefs* prefs) 197void KABConfigWidget::usrWriteConfig()
200{ 198{
199 KABPrefs* prefs = KABPrefs::instance();
200
201 prefs->mAutomaticNameParsing = mNameParsing->isChecked(); 201 prefs->mAutomaticNameParsing = mNameParsing->isChecked();
202 prefs->mHonorSingleClick = mViewsSingleClickBox->isChecked(); 202 prefs->mHonorSingleClick = mViewsSingleClickBox->isChecked();
203 prefs->mSearchWithReturn = mSearchReturnBox->isChecked(); 203 prefs->mSearchWithReturn = mSearchReturnBox->isChecked();
204 prefs->mMultipleViewsAtOnce = mMultipleViewsAtOnce->isChecked(); 204 prefs->mMultipleViewsAtOnce = mMultipleViewsAtOnce->isChecked();
205 prefs->mAskForQuit = mAskForQuit->isChecked(); 205 prefs->mAskForQuit = mAskForQuit->isChecked();
206 206
207 mAddresseeWidget->saveSettings(); 207 mAddresseeWidget->saveSettings();
208 208
209 saveExtensionSettings(); 209 saveExtensionSettings();
210 KABPrefs::instance()->writeConfig();
211 210
212 emit changed( false );
213}
214
215void KABConfigWidget::defaults(KABPrefs* prefs)
216{
217 mNameParsing->setChecked( true );
218 mViewsSingleClickBox->setChecked( false );
219 mMultipleViewsAtOnce->setChecked( true );
220 mSearchReturnBox->setChecked( true );
221 mAskForQuit->setChecked (true);
222
223 emit changed( true );
224}
225
226void KABConfigWidget::modified()
227{
228 emit changed( true );
229} 211}
230 212
231void KABConfigWidget::restoreExtensionSettings() 213void KABConfigWidget::restoreExtensionSettings()
232{ 214{
233 QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions; 215 QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions;
234 216
235 mExtensionView->clear(); 217 mExtensionView->clear();
236 218
237#ifndef KAB_EMBEDDED 219#ifndef KAB_EMBEDDED
238 KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/Extension" ); 220 KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/Extension" );
239 KTrader::OfferList::ConstIterator it; 221 KTrader::OfferList::ConstIterator it;
240 for ( it = plugins.begin(); it != plugins.end(); ++it ) { 222 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
241 if ( !(*it)->hasServiceType( "KAddressBook/Extension" ) ) 223 if ( !(*it)->hasServiceType( "KAddressBook/Extension" ) )
242 continue; 224 continue;
243 225
244 ExtensionItem *item = new ExtensionItem( mExtensionView, (*it)->name() ); 226 ExtensionItem *item = new ExtensionItem( mExtensionView, (*it)->name() );
245 item->setService( *it ); 227 item->setService( *it );
246 if ( activeExtensions.contains( item->factory()->identifier() ) ) 228 if ( activeExtensions.contains( item->factory()->identifier() ) )
247 item->setOn( true ); 229 item->setOn( true );
248 } 230 }
249#else //KAB_EMBEDDED 231#else //KAB_EMBEDDED
250 ExtensionFactory *extensionFactory = new MergeFactory(); 232 ExtensionFactory *extensionFactory = new MergeFactory();
251 233
252 ExtensionItem *item = new ExtensionItem( mExtensionView, "Merge", "Merge", "Merge contacts"); 234 ExtensionItem *item = new ExtensionItem( mExtensionView, "Merge", "Merge", "Merge contacts");
253 235
254 item->setFactory( extensionFactory ); 236 item->setFactory( extensionFactory );
255 if ( activeExtensions.contains( extensionFactory->identifier() ) ) 237 if ( activeExtensions.contains( extensionFactory->identifier() ) )
256 item->setOn( true ); 238 item->setOn( true );
257 239
258 240
259 241
260 extensionFactory = new DistributionListFactory(); 242 extensionFactory = new DistributionListFactory();
261 243
262 item = new ExtensionItem( mExtensionView, "Distribution List", "Distribution List", "Manage Distribution Lists"); 244 item = new ExtensionItem( mExtensionView, "Distribution List", "Distribution List", "Manage Distribution Lists");
263 245
264 item->setFactory( extensionFactory ); 246 item->setFactory( extensionFactory );
265 if ( activeExtensions.contains( extensionFactory->identifier() ) ) 247 if ( activeExtensions.contains( extensionFactory->identifier() ) )
266 item->setOn( true ); 248 item->setOn( true );
267 249
268 250
269#endif //KAB_EMBEDDED 251#endif //KAB_EMBEDDED
270 252
271} 253}
272 254
273void KABConfigWidget::saveExtensionSettings() 255void KABConfigWidget::saveExtensionSettings()
274{ 256{
275 QStringList activeExtensions; 257 QStringList activeExtensions;
276 258
277 QPtrList<QListViewItem> list; 259 QPtrList<QListViewItem> list;
278 QListViewItemIterator it( mExtensionView ); 260 QListViewItemIterator it( mExtensionView );
279 while ( it.current() ) { 261 while ( it.current() ) {
280 ExtensionItem *item = static_cast<ExtensionItem*>( it.current() ); 262 ExtensionItem *item = static_cast<ExtensionItem*>( it.current() );
281 if ( item ) { 263 if ( item ) {
282 if ( item->isOn() ) 264 if ( item->isOn() )
283 activeExtensions.append( item->factory()->identifier() ); 265 activeExtensions.append( item->factory()->identifier() );
284 } 266 }
285 ++it; 267 ++it;
286 } 268 }
287 269
288 KABPrefs::instance()->mActiveExtensions = activeExtensions; 270 KABPrefs::instance()->mActiveExtensions = activeExtensions;
289} 271}
290 272
291void KABConfigWidget::configureExtension() 273void KABConfigWidget::configureExtension()
292{ 274{
293 ExtensionItem *item = static_cast<ExtensionItem*>( mExtensionView->currentItem() ); 275 ExtensionItem *item = static_cast<ExtensionItem*>( mExtensionView->currentItem() );
294 if ( !item ) 276 if ( !item )
295 return; 277 return;
296 278
297#ifndef KAB_EMBEDDED 279#ifndef KAB_EMBEDDED
298 KConfig config( "kaddressbookrc" ); 280 KConfig config( "kaddressbookrc" );
299#else //KAB_EMBEDDED 281#else //KAB_EMBEDDED
300 KConfig config( locateLocal("config", "kaddressbookrc") ); 282 KConfig config( locateLocal("config", "kaddressbookrc") );
301#endif //KAB_EMBEDDED 283#endif //KAB_EMBEDDED
302 config.setGroup( QString( "Extensions_%1" ).arg( item->factory()->identifier() ) ); 284 config.setGroup( QString( "Extensions_%1" ).arg( item->factory()->identifier() ) );
303 285
304 ExtensionConfigDialog dlg( item->factory(), &config, this ); 286 ExtensionConfigDialog dlg( item->factory(), &config, this );
305 dlg.exec(); 287 dlg.exec();
306 288
307 config.sync(); 289 config.sync();
308} 290}
309 291
310void KABConfigWidget::selectionChanged( QListViewItem *i ) 292void KABConfigWidget::selectionChanged( QListViewItem *i )
311{ 293{
312 ExtensionItem *item = static_cast<ExtensionItem*>( i ); 294 ExtensionItem *item = static_cast<ExtensionItem*>( i );
313 if ( !item ) 295 if ( !item )
314 return; 296 return;
315 297
316 mConfigureButton->setEnabled( item->configWidgetAvailable() ); 298 mConfigureButton->setEnabled( item->configWidgetAvailable() );
317} 299}
318 300
319void KABConfigWidget::itemClicked( QListViewItem *item ) 301void KABConfigWidget::itemClicked( QListViewItem *item )
320{ 302{
321 if ( item != 0 ) 303 if ( item != 0 )
322 modified(); 304 modified();
323} 305}
324 306
325#ifndef KAB_EMBEDDED 307#ifndef KAB_EMBEDDED
326ExtensionItem::ExtensionItem( QListView *parent, const QString &text ) 308ExtensionItem::ExtensionItem( QListView *parent, const QString &text )
327 : QCheckListItem( parent, text, CheckBox ) 309 : QCheckListItem( parent, text, CheckBox )
328{ 310{
329} 311}
330 312
331void ExtensionItem::setService( const KService::Ptr &ptr ) 313void ExtensionItem::setService( const KService::Ptr &ptr )
332{ 314{
333 mPtr = ptr; 315 mPtr = ptr;
334} 316}
335#else //KAB_EMBEDDED 317#else //KAB_EMBEDDED
336ExtensionItem::ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment ) 318ExtensionItem::ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment )
337 : QCheckListItem( parent, text, CheckBox ) 319 : QCheckListItem( parent, text, CheckBox )
338{ 320{
339 mName = name; 321 mName = name;
340 mComment = comment; 322 mComment = comment;
341} 323}
342 324
343 325
344void ExtensionItem::setFactory( ExtensionFactory* fac ) 326void ExtensionItem::setFactory( ExtensionFactory* fac )
345{ 327{
346 mFactory = fac; 328 mFactory = fac;
347} 329}
348#endif //KAB_EMBEDDED 330#endif //KAB_EMBEDDED
349 331
350bool ExtensionItem::configWidgetAvailable() const 332bool ExtensionItem::configWidgetAvailable() const
351{ 333{
352#ifndef KAB_EMBEDDED 334#ifndef KAB_EMBEDDED
353 KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() ); 335 KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() );
354 if ( !factory ) 336 if ( !factory )
355 return false; 337 return false;
356 338
357 ExtensionFactory *extensionFactory = static_cast<ExtensionFactory*>( factory ); 339 ExtensionFactory *extensionFactory = static_cast<ExtensionFactory*>( factory );
358 if ( !extensionFactory ) 340 if ( !extensionFactory )
359 return false; 341 return false;
360 342
361 return extensionFactory->configureWidgetAvailable(); 343 return extensionFactory->configureWidgetAvailable();
362#else //KAB_EMBEDDED 344#else //KAB_EMBEDDED
363 return mFactory->configureWidgetAvailable(); 345 return mFactory->configureWidgetAvailable();
364#endif //KAB_EMBEDDED 346#endif //KAB_EMBEDDED
365 347
366} 348}
367 349
368ExtensionFactory *ExtensionItem::factory() const 350ExtensionFactory *ExtensionItem::factory() const
369{ 351{
370#ifndef KAB_EMBEDDED 352#ifndef KAB_EMBEDDED
371 KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() ); 353 KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() );
372 if ( !factory ) 354 if ( !factory )
373 return 0; 355 return 0;
374 356
375 return static_cast<ExtensionFactory*>( factory ); 357 return static_cast<ExtensionFactory*>( factory );
376#else //KAB_EMBEDDED 358#else //KAB_EMBEDDED
377 return mFactory; 359 return mFactory;
378#endif //KAB_EMBEDDED 360#endif //KAB_EMBEDDED
379} 361}
380 362
381QString ExtensionItem::text( int column ) const 363QString ExtensionItem::text( int column ) const
382{ 364{
383#ifndef KAB_EMBEDDED 365#ifndef KAB_EMBEDDED
384 if ( column == 0 ) 366 if ( column == 0 )
385 return mPtr->name(); 367 return mPtr->name();
386 else if ( column == 1 ) 368 else if ( column == 1 )
387 return mPtr->comment(); 369 return mPtr->comment();
388 else 370 else
389 return QString::null; 371 return QString::null;
390#else //KAB_EMBEDDED 372#else //KAB_EMBEDDED
391 if ( column == 0 ) 373 if ( column == 0 )
392 return mName; 374 return mName;
393 else if ( column == 1 ) 375 else if ( column == 1 )
394 return mComment; 376 return mComment;
395 else 377 else
396 return QString::null; 378 return QString::null;
397#endif //KAB_EMBEDDED 379#endif //KAB_EMBEDDED
398} 380}
399 381
400#ifndef KAB_EMBEDDED 382#ifndef KAB_EMBEDDED
401#include "kabconfigwidget.moc" 383#include "kabconfigwidget.moc"
402#endif //KAB_EMBEDDED 384#endif //KAB_EMBEDDED
403 385
diff --git a/kaddressbook/kcmconfigs/kabconfigwidget.h b/kaddressbook/kcmconfigs/kabconfigwidget.h
index 6cd4223..1e71fd1 100644
--- a/kaddressbook/kcmconfigs/kabconfigwidget.h
+++ b/kaddressbook/kcmconfigs/kabconfigwidget.h
@@ -1,79 +1,75 @@
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#ifndef KABCONFIGWIDGET_H 24#ifndef KABCONFIGWIDGET_H
25#define KABCONFIGWIDGET_H 25#define KABCONFIGWIDGET_H
26 26
27#include <qwidget.h> 27#include <kprefswidget.h>
28 28
29class QCheckBox; 29class QCheckBox;
30class QListViewItem; 30class QListViewItem;
31class QPushButton; 31class QPushButton;
32class QComboBox; 32class QComboBox;
33class QLineEdit; 33class QLineEdit;
34class KListView; 34class KListView;
35class KABPrefs; 35class KABPrefs;
36 36
37class AddresseeWidget; 37class AddresseeWidget;
38 38
39class KABConfigWidget : public QWidget 39class KABConfigWidget : public KPrefsWidget
40{ 40{
41 Q_OBJECT 41 Q_OBJECT
42 42
43 public: 43 public:
44 KABConfigWidget( QWidget *parent, const char *name = 0 ); 44 KABConfigWidget(KABPrefs *prefs, QWidget *parent, const char *name = 0 );
45 45
46 void restoreSettings(KABPrefs* prefs); 46 protected:
47 void saveSettings(KABPrefs* prefs); 47 /** Implement this to read custom configuration widgets. */
48 void defaults(KABPrefs* prefs); 48 virtual void usrReadConfig();
49 49 /** Implement this to write custom configuration widgets. */
50 signals: 50 virtual void usrWriteConfig();
51 void changed( bool );
52
53 public slots:
54 void modified();
55 51
56 52
57 53
58 private slots: 54 private slots:
59 void configureExtension(); 55 void configureExtension();
60 void selectionChanged( QListViewItem* ); 56 void selectionChanged( QListViewItem* );
61 void itemClicked( QListViewItem* ); 57 void itemClicked( QListViewItem* );
62 58
63 private: 59 private:
64 void restoreExtensionSettings(); 60 void restoreExtensionSettings();
65 void saveExtensionSettings(); 61 void saveExtensionSettings();
66 62
67 KListView *mExtensionView; 63 KListView *mExtensionView;
68 QCheckBox *mSearchReturnBox; 64 QCheckBox *mSearchReturnBox;
69 QCheckBox *mNameParsing; 65 QCheckBox *mNameParsing;
70 QCheckBox *mViewsSingleClickBox; 66 QCheckBox *mViewsSingleClickBox;
71 QCheckBox *mMultipleViewsAtOnce; 67 QCheckBox *mMultipleViewsAtOnce;
72 QCheckBox *mAskForQuit; 68 QCheckBox *mAskForQuit;
73 69
74 QPushButton *mConfigureButton; 70 QPushButton *mConfigureButton;
75 71
76 AddresseeWidget *mAddresseeWidget; 72 AddresseeWidget *mAddresseeWidget;
77}; 73};
78 74
79#endif 75#endif
diff --git a/kaddressbook/kcmconfigs/kcmkabconfig.cpp b/kaddressbook/kcmconfigs/kcmkabconfig.cpp
index b460a81..cbfedbd 100644
--- a/kaddressbook/kcmconfigs/kcmkabconfig.cpp
+++ b/kaddressbook/kcmconfigs/kcmkabconfig.cpp
@@ -1,92 +1,92 @@
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#include <qlayout.h> 24#include <qlayout.h>
25 25
26#ifndef KAB_EMBEDDED 26#ifndef KAB_EMBEDDED
27#include <kaboutdata.h> 27#include <kaboutdata.h>
28#endif //KAB_EMBEDDED 28#endif //KAB_EMBEDDED
29#include <kdebug.h> 29#include <kdebug.h>
30//#include <klocale.h> 30//#include <klocale.h>
31//#include <stdlib.h> 31//#include <stdlib.h>
32 32
33#include "kabconfigwidget.h" 33#include "kabconfigwidget.h"
34 34
35#include "kcmkabconfig.h" 35#include "kcmkabconfig.h"
36 36
37#include "kabprefs.h" 37#include "kabprefs.h"
38#include "kprefs.h" 38#include "kprefs.h"
39 39
40extern "C" 40extern "C"
41{ 41{
42 KCModule *create_kabconfig( KABPrefs* prefs, QWidget *parent, const char * ) { 42 KCModule *create_kabconfig( QWidget *parent, const char * ) {
43 return new KCMKabConfig( prefs, parent, "kcmkabconfig" ); 43 return new KCMKabConfig( parent, "kcmkabconfig" );
44 } 44 }
45} 45}
46 46
47KCMKabConfig::KCMKabConfig( KABPrefs* prefs, QWidget *parent, const char *name ) 47KCMKabConfig::KCMKabConfig( QWidget *parent, const char *name )
48 : KCModule( prefs, parent, name ) 48 : KCModule( KABPrefs::instance(), parent, name )
49{ 49{
50 //abort(); 50 //abort();
51 QVBoxLayout *layout = new QVBoxLayout( this ); 51 QVBoxLayout *layout = new QVBoxLayout( this );
52 mConfigWidget = new KABConfigWidget( this, "mConfigWidget" ); 52 mConfigWidget = new KABConfigWidget( (KABPrefs*)getPreferences(), this, "KABConfigWidget" );
53 layout->addWidget( mConfigWidget ); 53 layout->addWidget( mConfigWidget );
54 layout->setSpacing( 0 ); 54 layout->setSpacing( 0 );
55 layout->setMargin( 0 ); 55 layout->setMargin( 0 );
56 56
57 connect( mConfigWidget, SIGNAL( changed( bool ) ), SIGNAL( changed( bool ) ) ); 57 connect( mConfigWidget, SIGNAL( changed( bool ) ), SIGNAL( changed( bool ) ) );
58} 58}
59 59
60void KCMKabConfig::load() 60void KCMKabConfig::load()
61{ 61{
62 mConfigWidget->restoreSettings((KABPrefs*)getPreferences()); 62 mConfigWidget->readConfig();
63} 63}
64 64
65void KCMKabConfig::save() 65void KCMKabConfig::save()
66{ 66{
67 mConfigWidget->saveSettings((KABPrefs*)getPreferences()); 67 mConfigWidget->writeConfig();
68} 68}
69 69
70void KCMKabConfig::defaults() 70void KCMKabConfig::defaults()
71{ 71{
72 mConfigWidget->defaults((KABPrefs*)getPreferences()); 72 mConfigWidget->setDefaults();
73} 73}
74 74
75#ifndef KAB_EMBEDDED 75#ifndef KAB_EMBEDDED
76const KAboutData* KCMKabConfig::aboutData() const 76const KAboutData* KCMKabConfig::aboutData() const
77{ 77{
78 KAboutData *about = new KAboutData( I18N_NOOP( "kcmkabconfig" ), 78 KAboutData *about = new KAboutData( I18N_NOOP( "kcmkabconfig" ),
79 I18N_NOOP( "KAddressBook Configure Dialog" ), 79 I18N_NOOP( "KAddressBook Configure Dialog" ),
80 0, 0, KAboutData::License_GPL, 80 0, 0, KAboutData::License_GPL,
81 I18N_NOOP( "(c), 2003 Tobias Koenig" ) ); 81 I18N_NOOP( "(c), 2003 Tobias Koenig" ) );
82 82
83 about->addAuthor( "Tobias Koenig", 0, "tokoe@kde.org" ); 83 about->addAuthor( "Tobias Koenig", 0, "tokoe@kde.org" );
84 84
85 return about; 85 return about;
86 86
87} 87}
88#endif //KAB_EMBEDDED 88#endif //KAB_EMBEDDED
89 89
90#ifndef KAB_EMBEDDED 90#ifndef KAB_EMBEDDED
91#include "kcmkabconfig.moc" 91#include "kcmkabconfig.moc"
92#endif //KAB_EMBEDDED 92#endif //KAB_EMBEDDED
diff --git a/kaddressbook/kcmconfigs/kcmkabconfig.h b/kaddressbook/kcmconfigs/kcmkabconfig.h
index 1cb6ad3..2ecbfef 100644
--- a/kaddressbook/kcmconfigs/kcmkabconfig.h
+++ b/kaddressbook/kcmconfigs/kcmkabconfig.h
@@ -1,47 +1,47 @@
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#ifndef KCMKABCONFIG_H 24#ifndef KCMKABCONFIG_H
25#define KCMKABCONFIG_H 25#define KCMKABCONFIG_H
26 26
27#include <kcmodule.h> 27#include <kcmodule.h>
28 28
29class KABConfigWidget; 29class KABConfigWidget;
30class KABPrefs; 30class KABPrefs;
31 31
32class KCMKabConfig : public KCModule 32class KCMKabConfig : public KCModule
33{ 33{
34 Q_OBJECT 34 Q_OBJECT
35 35
36 public: 36 public:
37 KCMKabConfig( KABPrefs* prefs, QWidget *parent = 0, const char *name = 0 ); 37 KCMKabConfig( QWidget *parent = 0, const char *name = 0 );
38 38
39 virtual void load(); 39 virtual void load();
40 virtual void save(); 40 virtual void save();
41 virtual void defaults(); 41 virtual void defaults();
42 42
43 private: 43 private:
44 KABConfigWidget *mConfigWidget; 44 KABConfigWidget *mConfigWidget;
45}; 45};
46 46
47#endif 47#endif