summaryrefslogtreecommitdiffabout
path: root/kaddressbook
Unidiff
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 74e5cf7..1a1bcff 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,694 +1,702 @@
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 35
36#ifndef KAB_EMBEDDED 36#ifndef KAB_EMBEDDED
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qdir.h> 38#include <qdir.h>
39#include <qfile.h> 39#include <qfile.h>
40#include <qapplicaton.h> 40#include <qapplicaton.h>
41#include <qlayout.h> 41#include <qlayout.h>
42#include <qregexp.h> 42#include <qregexp.h>
43#include <qvbox.h> 43#include <qvbox.h>
44#include <kabc/addresseelist.h> 44#include <kabc/addresseelist.h>
45#include <kabc/errorhandler.h> 45#include <kabc/errorhandler.h>
46#include <kabc/resource.h> 46#include <kabc/resource.h>
47#include <kabc/vcardconverter.h> 47#include <kabc/vcardconverter.h>
48#include <kapplication.h> 48#include <kapplication.h>
49#include <kactionclasses.h> 49#include <kactionclasses.h>
50#include <kcmultidialog.h> 50#include <kcmultidialog.h>
51#include <kdebug.h> 51#include <kdebug.h>
52#include <kdeversion.h> 52#include <kdeversion.h>
53#include <kkeydialog.h> 53#include <kkeydialog.h>
54#include <kmessagebox.h> 54#include <kmessagebox.h>
55#include <kprinter.h> 55#include <kprinter.h>
56#include <kprotocolinfo.h> 56#include <kprotocolinfo.h>
57#include <kresources/selectdialog.h> 57#include <kresources/selectdialog.h>
58#include <kstandarddirs.h> 58#include <kstandarddirs.h>
59#include <ktempfile.h> 59#include <ktempfile.h>
60#include <kxmlguiclient.h> 60#include <kxmlguiclient.h>
61#include <kaboutdata.h> 61#include <kaboutdata.h>
62#include <libkdepim/categoryselectdialog.h> 62#include <libkdepim/categoryselectdialog.h>
63 63
64#include "addresseeutil.h" 64#include "addresseeutil.h"
65#include "addresseeeditordialog.h" 65#include "addresseeeditordialog.h"
66#include "extensionmanager.h" 66#include "extensionmanager.h"
67#include "kstdaction.h" 67#include "kstdaction.h"
68#include "kaddressbookservice.h" 68#include "kaddressbookservice.h"
69#include "ldapsearchdialog.h" 69#include "ldapsearchdialog.h"
70#include "printing/printingwizard.h" 70#include "printing/printingwizard.h"
71#else // KAB_EMBEDDED 71#else // KAB_EMBEDDED
72 72
73#include <kapplication.h> 73#include <kapplication.h>
74#include "KDGanttMinimizeSplitter.h" 74#include "KDGanttMinimizeSplitter.h"
75#include "kaddressbookmain.h" 75#include "kaddressbookmain.h"
76#include "kactioncollection.h" 76#include "kactioncollection.h"
77#include "addresseedialog.h" 77#include "addresseedialog.h"
78//US 78//US
79#include <libkdepim/addresseeview.h> 79#include <libkdepim/addresseeview.h>
80 80
81#include <qapp.h> 81#include <qapp.h>
82#include <qmenubar.h> 82#include <qmenubar.h>
83//#include <qtoolbar.h> 83//#include <qtoolbar.h>
84#include <qmessagebox.h> 84#include <qmessagebox.h>
85#include <kdebug.h> 85#include <kdebug.h>
86#include <kiconloader.h> // needed for SmallIcon 86#include <kiconloader.h> // needed for SmallIcon
87#include <kresources/kcmkresources.h> 87#include <kresources/kcmkresources.h>
88#include <ktoolbar.h> 88#include <ktoolbar.h>
89 89
90 90
91//#include <qlabel.h> 91//#include <qlabel.h>
92 92
93 93
94#ifndef DESKTOP_VERSION 94#ifndef DESKTOP_VERSION
95#include <qpe/ir.h> 95#include <qpe/ir.h>
96#include <qtopia/qcopenvelope_qws.h> 96#include <qtopia/qcopenvelope_qws.h>
97#else 97#else
98 98
99#endif 99#endif
100 100
101#endif // KAB_EMBEDDED 101#endif // KAB_EMBEDDED
102#include "kcmconfigs/kcmkabconfig.h" 102#include "kcmconfigs/kcmkabconfig.h"
103#include "kcmconfigs/kcmkdepimconfig.h" 103#include "kcmconfigs/kcmkdepimconfig.h"
104#include "kpimglobalprefs.h" 104#include "kpimglobalprefs.h"
105#include "externalapphandler.h" 105#include "externalapphandler.h"
106 106
107 107
108#include <kresources/selectdialog.h> 108#include <kresources/selectdialog.h>
109#include <kmessagebox.h> 109#include <kmessagebox.h>
110 110
111#include <picture.h> 111#include <picture.h>
112#include <resource.h> 112#include <resource.h>
113 113
114//US#include <qsplitter.h> 114//US#include <qsplitter.h>
115#include <qmap.h> 115#include <qmap.h>
116#include <qdir.h> 116#include <qdir.h>
117#include <qfile.h> 117#include <qfile.h>
118#include <qvbox.h> 118#include <qvbox.h>
119#include <qlayout.h> 119#include <qlayout.h>
120#include <qclipboard.h> 120#include <qclipboard.h>
121#include <qtextstream.h> 121#include <qtextstream.h>
122 122
123#include <libkdepim/categoryselectdialog.h> 123#include <libkdepim/categoryselectdialog.h>
124#include <kabc/vcardconverter.h> 124#include <kabc/vcardconverter.h>
125 125
126 126
127#include "addresseeutil.h" 127#include "addresseeutil.h"
128#include "undocmds.h" 128#include "undocmds.h"
129#include "addresseeeditordialog.h" 129#include "addresseeeditordialog.h"
130#include "viewmanager.h" 130#include "viewmanager.h"
131#include "details/detailsviewcontainer.h" 131#include "details/detailsviewcontainer.h"
132#include "kabprefs.h" 132#include "kabprefs.h"
133#include "xxportmanager.h" 133#include "xxportmanager.h"
134#include "incsearchwidget.h" 134#include "incsearchwidget.h"
135#include "jumpbuttonbar.h" 135#include "jumpbuttonbar.h"
136#include "extensionmanager.h" 136#include "extensionmanager.h"
137#include "addresseeconfig.h" 137#include "addresseeconfig.h"
138#include <kcmultidialog.h> 138#include <kcmultidialog.h>
139 139
140#ifdef _WIN32_ 140#ifdef _WIN32_
141 141
142#include "kaimportoldialog.h" 142#include "kaimportoldialog.h"
143#endif 143#endif
144 144
145bool pasteWithNewUid = true; 145bool pasteWithNewUid = true;
146 146
147#ifdef KAB_EMBEDDED 147#ifdef KAB_EMBEDDED
148KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 148KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
149 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 149 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
150 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 150 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
151 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 151 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
152#else //KAB_EMBEDDED 152#else //KAB_EMBEDDED
153KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 153KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
154 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 154 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
155 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 155 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
156 mReadWrite( readWrite ), mModified( false ) 156 mReadWrite( readWrite ), mModified( false )
157#endif //KAB_EMBEDDED 157#endif //KAB_EMBEDDED
158{ 158{
159 159
160 mExtensionBarSplitter = 0; 160 mExtensionBarSplitter = 0;
161 mIsPart = !parent->inherits( "KAddressBookMain" ); 161 mIsPart = !parent->inherits( "KAddressBookMain" );
162 162
163 mAddressBook = KABC::StdAddressBook::self(); 163 mAddressBook = KABC::StdAddressBook::self();
164 KABC::StdAddressBook::setAutomaticSave( false ); 164 KABC::StdAddressBook::setAutomaticSave( false );
165 165
166#ifndef KAB_EMBEDDED 166#ifndef KAB_EMBEDDED
167 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 167 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
168#endif //KAB_EMBEDDED 168#endif //KAB_EMBEDDED
169 169
170 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 170 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
171 SLOT( addressBookChanged() ) ); 171 SLOT( addressBookChanged() ) );
172 172
173 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 173 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
174 "X-Department", "KADDRESSBOOK" ); 174 "X-Department", "KADDRESSBOOK" );
175 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 175 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
176 "X-Profession", "KADDRESSBOOK" ); 176 "X-Profession", "KADDRESSBOOK" );
177 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 177 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
178 "X-AssistantsName", "KADDRESSBOOK" ); 178 "X-AssistantsName", "KADDRESSBOOK" );
179 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 179 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
180 "X-ManagersName", "KADDRESSBOOK" ); 180 "X-ManagersName", "KADDRESSBOOK" );
181 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 181 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
182 "X-SpousesName", "KADDRESSBOOK" ); 182 "X-SpousesName", "KADDRESSBOOK" );
183 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 183 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
184 "X-Office", "KADDRESSBOOK" ); 184 "X-Office", "KADDRESSBOOK" );
185 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 185 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
186 "X-IMAddress", "KADDRESSBOOK" ); 186 "X-IMAddress", "KADDRESSBOOK" );
187 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 187 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
188 "X-Anniversary", "KADDRESSBOOK" ); 188 "X-Anniversary", "KADDRESSBOOK" );
189 189
190 //US added this field to become compatible with Opie/qtopia addressbook 190 //US added this field to become compatible with Opie/qtopia addressbook
191 // values can be "female" or "male" or "". An empty field represents undefined. 191 // values can be "female" or "male" or "". An empty field represents undefined.
192 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 192 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
193 "X-Gender", "KADDRESSBOOK" ); 193 "X-Gender", "KADDRESSBOOK" );
194 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 194 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
195 "X-Children", "KADDRESSBOOK" ); 195 "X-Children", "KADDRESSBOOK" );
196 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 196 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
197 "X-FreeBusyUrl", "KADDRESSBOOK" ); 197 "X-FreeBusyUrl", "KADDRESSBOOK" );
198 198
199 initGUI(); 199 initGUI();
200 200
201 mIncSearchWidget->setFocus(); 201 mIncSearchWidget->setFocus();
202 202
203 203
204 connect( mViewManager, SIGNAL( selected( const QString& ) ), 204 connect( mViewManager, SIGNAL( selected( const QString& ) ),
205 SLOT( setContactSelected( const QString& ) ) ); 205 SLOT( setContactSelected( const QString& ) ) );
206 connect( mViewManager, SIGNAL( executed( const QString& ) ), 206 connect( mViewManager, SIGNAL( executed( const QString& ) ),
207 SLOT( executeContact( const QString& ) ) ); 207 SLOT( executeContact( const QString& ) ) );
208 208
209 connect( mViewManager, SIGNAL( deleteRequest( ) ), 209 connect( mViewManager, SIGNAL( deleteRequest( ) ),
210 SLOT( deleteContacts( ) ) ); 210 SLOT( deleteContacts( ) ) );
211 connect( mViewManager, SIGNAL( modified() ), 211 connect( mViewManager, SIGNAL( modified() ),
212 SLOT( setModified() ) ); 212 SLOT( setModified() ) );
213 213
214 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 214 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
215 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 215 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
216 216
217 connect( mXXPortManager, SIGNAL( modified() ), 217 connect( mXXPortManager, SIGNAL( modified() ),
218 SLOT( setModified() ) ); 218 SLOT( setModified() ) );
219 219
220 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 220 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
221 SLOT( incrementalSearch( const QString& ) ) ); 221 SLOT( incrementalSearch( const QString& ) ) );
222 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 222 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
223 mJumpButtonBar, SLOT( recreateButtons() ) ); 223 mJumpButtonBar, SLOT( recreateButtons() ) );
224 224
225 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 225 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
226 SLOT( sendMail( const QString& ) ) ); 226 SLOT( sendMail( const QString& ) ) );
227 227
228 228
229 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 229 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
230 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&))); 230 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&)));
231 231
232 232
233#ifndef KAB_EMBEDDED 233#ifndef KAB_EMBEDDED
234 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 234 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
235 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 235 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
236 236
237 connect( mDetails, SIGNAL( browse( const QString& ) ), 237 connect( mDetails, SIGNAL( browse( const QString& ) ),
238 SLOT( browse( const QString& ) ) ); 238 SLOT( browse( const QString& ) ) );
239 239
240 240
241 mAddressBookService = new KAddressBookService( this ); 241 mAddressBookService = new KAddressBookService( this );
242 242
243#endif //KAB_EMBEDDED 243#endif //KAB_EMBEDDED
244 mEditorDialog = 0; 244 mEditorDialog = 0;
245 createAddresseeEditorDialog( this ); 245 createAddresseeEditorDialog( this );
246 setModified( false ); 246 setModified( false );
247} 247}
248 248
249KABCore::~KABCore() 249KABCore::~KABCore()
250{ 250{
251 // save(); 251 // save();
252 //saveSettings(); 252 //saveSettings();
253 //KABPrefs::instance()->writeConfig(); 253 //KABPrefs::instance()->writeConfig();
254 delete AddresseeConfig::instance(); 254 delete AddresseeConfig::instance();
255 mAddressBook = 0; 255 mAddressBook = 0;
256 KABC::StdAddressBook::close(); 256 KABC::StdAddressBook::close();
257} 257}
258 258
259void KABCore::restoreSettings() 259void KABCore::restoreSettings()
260{ 260{
261 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 261 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
262 262
263 bool state; 263 bool state;
264 264
265 if (mMultipleViewsAtOnce) 265 if (mMultipleViewsAtOnce)
266 state = KABPrefs::instance()->mDetailsPageVisible; 266 state = KABPrefs::instance()->mDetailsPageVisible;
267 else 267 else
268 state = false; 268 state = false;
269 269
270 mActionDetails->setChecked( state ); 270 mActionDetails->setChecked( state );
271 setDetailsVisible( state ); 271 setDetailsVisible( state );
272 272
273 state = KABPrefs::instance()->mJumpButtonBarVisible; 273 state = KABPrefs::instance()->mJumpButtonBarVisible;
274 274
275 mActionJumpBar->setChecked( state ); 275 mActionJumpBar->setChecked( state );
276 setJumpButtonBarVisible( state ); 276 setJumpButtonBarVisible( state );
277/*US 277/*US
278 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 278 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
279 if ( splitterSize.count() == 0 ) { 279 if ( splitterSize.count() == 0 ) {
280 splitterSize.append( width() / 2 ); 280 splitterSize.append( width() / 2 );
281 splitterSize.append( width() / 2 ); 281 splitterSize.append( width() / 2 );
282 } 282 }
283 mMiniSplitter->setSizes( splitterSize ); 283 mMiniSplitter->setSizes( splitterSize );
284 if ( mExtensionBarSplitter ) { 284 if ( mExtensionBarSplitter ) {
285 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 285 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
286 if ( splitterSize.count() == 0 ) { 286 if ( splitterSize.count() == 0 ) {
287 splitterSize.append( width() / 2 ); 287 splitterSize.append( width() / 2 );
288 splitterSize.append( width() / 2 ); 288 splitterSize.append( width() / 2 );
289 } 289 }
290 mExtensionBarSplitter->setSizes( splitterSize ); 290 mExtensionBarSplitter->setSizes( splitterSize );
291 291
292 } 292 }
293*/ 293*/
294 mViewManager->restoreSettings(); 294 mViewManager->restoreSettings();
295 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 295 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
296 mExtensionManager->restoreSettings(); 296 mExtensionManager->restoreSettings();
297 297#ifdef DESKTOP_VERSION
298 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 298 int wid = width();
299 if ( splitterSize.count() == 0 ) { 299 if ( wid < 10 )
300 splitterSize.append( width() / 2 ); 300 wid = 400;
301 splitterSize.append( width() / 2 ); 301#else
302 int wid = QApplication::desktop()->width();
303 if ( wid < 640 )
304 wid = QApplication::desktop()->height();
305#endif
306 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
307 if ( true /*splitterSize.count() == 0*/ ) {
308 splitterSize.append( wid / 2 );
309 splitterSize.append( wid / 2 );
302 } 310 }
303 mMiniSplitter->setSizes( splitterSize ); 311 mMiniSplitter->setSizes( splitterSize );
304 if ( mExtensionBarSplitter ) { 312 if ( mExtensionBarSplitter ) {
305 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 313 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
306 if ( splitterSize.count() == 0 ) { 314 if ( true /*splitterSize.count() == 0*/ ) {
307 splitterSize.append( width() / 2 ); 315 splitterSize.append( wid / 2 );
308 splitterSize.append( width() / 2 ); 316 splitterSize.append( wid / 2 );
309 } 317 }
310 mExtensionBarSplitter->setSizes( splitterSize ); 318 mExtensionBarSplitter->setSizes( splitterSize );
311 319
312 } 320 }
313 321
314 322
315} 323}
316 324
317void KABCore::saveSettings() 325void KABCore::saveSettings()
318{ 326{
319 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 327 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
320 if ( mExtensionBarSplitter ) 328 if ( mExtensionBarSplitter )
321 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 329 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
322 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 330 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
323 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 331 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
324#ifndef KAB_EMBEDDED 332#ifndef KAB_EMBEDDED
325 333
326 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 334 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
327 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 335 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
328#endif //KAB_EMBEDDED 336#endif //KAB_EMBEDDED
329 mExtensionManager->saveSettings(); 337 mExtensionManager->saveSettings();
330 mViewManager->saveSettings(); 338 mViewManager->saveSettings();
331 339
332 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 340 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
333} 341}
334 342
335KABC::AddressBook *KABCore::addressBook() const 343KABC::AddressBook *KABCore::addressBook() const
336{ 344{
337 return mAddressBook; 345 return mAddressBook;
338} 346}
339 347
340KConfig *KABCore::config() 348KConfig *KABCore::config()
341{ 349{
342#ifndef KAB_EMBEDDED 350#ifndef KAB_EMBEDDED
343 return KABPrefs::instance()->config(); 351 return KABPrefs::instance()->config();
344#else //KAB_EMBEDDED 352#else //KAB_EMBEDDED
345 return KABPrefs::instance()->getConfig(); 353 return KABPrefs::instance()->getConfig();
346#endif //KAB_EMBEDDED 354#endif //KAB_EMBEDDED
347} 355}
348 356
349KActionCollection *KABCore::actionCollection() const 357KActionCollection *KABCore::actionCollection() const
350{ 358{
351 return mGUIClient->actionCollection(); 359 return mGUIClient->actionCollection();
352} 360}
353 361
354KABC::Field *KABCore::currentSearchField() const 362KABC::Field *KABCore::currentSearchField() const
355{ 363{
356 if (mIncSearchWidget) 364 if (mIncSearchWidget)
357 return mIncSearchWidget->currentField(); 365 return mIncSearchWidget->currentField();
358 else 366 else
359 return 0; 367 return 0;
360} 368}
361 369
362QStringList KABCore::selectedUIDs() const 370QStringList KABCore::selectedUIDs() const
363{ 371{
364 return mViewManager->selectedUids(); 372 return mViewManager->selectedUids();
365} 373}
366 374
367KABC::Resource *KABCore::requestResource( QWidget *parent ) 375KABC::Resource *KABCore::requestResource( QWidget *parent )
368{ 376{
369 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 377 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
370 378
371 QPtrList<KRES::Resource> kresResources; 379 QPtrList<KRES::Resource> kresResources;
372 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 380 QPtrListIterator<KABC::Resource> resIt( kabcResources );
373 KABC::Resource *resource; 381 KABC::Resource *resource;
374 while ( ( resource = resIt.current() ) != 0 ) { 382 while ( ( resource = resIt.current() ) != 0 ) {
375 ++resIt; 383 ++resIt;
376 if ( !resource->readOnly() ) { 384 if ( !resource->readOnly() ) {
377 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 385 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
378 if ( res ) 386 if ( res )
379 kresResources.append( res ); 387 kresResources.append( res );
380 } 388 }
381 } 389 }
382 390
383 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 391 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
384 return static_cast<KABC::Resource*>( res ); 392 return static_cast<KABC::Resource*>( res );
385} 393}
386 394
387#ifndef KAB_EMBEDDED 395#ifndef KAB_EMBEDDED
388KAboutData *KABCore::createAboutData() 396KAboutData *KABCore::createAboutData()
389#else //KAB_EMBEDDED 397#else //KAB_EMBEDDED
390void KABCore::createAboutData() 398void KABCore::createAboutData()
391#endif //KAB_EMBEDDED 399#endif //KAB_EMBEDDED
392{ 400{
393#ifndef KAB_EMBEDDED 401#ifndef KAB_EMBEDDED
394 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 402 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
395 "3.1", I18N_NOOP( "The KDE Address Book" ), 403 "3.1", I18N_NOOP( "The KDE Address Book" ),
396 KAboutData::License_GPL_V2, 404 KAboutData::License_GPL_V2,
397 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 405 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
398 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 406 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
399 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 407 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
400 about->addAuthor( "Cornelius Schumacher", 408 about->addAuthor( "Cornelius Schumacher",
401 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 409 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
402 "schumacher@kde.org" ); 410 "schumacher@kde.org" );
403 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 411 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
404 "mpilone@slac.com" ); 412 "mpilone@slac.com" );
405 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 413 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
406 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 414 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
407 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 415 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
408 "michel@klaralvdalens-datakonsult.se" ); 416 "michel@klaralvdalens-datakonsult.se" );
409 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 417 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
410 "hansen@kde.org" ); 418 "hansen@kde.org" );
411 419
412 return about; 420 return about;
413#endif //KAB_EMBEDDED 421#endif //KAB_EMBEDDED
414 422
415 QString version; 423 QString version;
416#include <../version> 424#include <../version>
417 QMessageBox::about( this, "About KAddressbook/Pi", 425 QMessageBox::about( this, "About KAddressbook/Pi",
418 "KAddressbook/Platform-independent\n" 426 "KAddressbook/Platform-independent\n"
419 "(KA/Pi) " +version + " - " + 427 "(KA/Pi) " +version + " - " +
420#ifdef DESKTOP_VERSION 428#ifdef DESKTOP_VERSION
421 "Desktop Edition\n" 429 "Desktop Edition\n"
422#else 430#else
423 "PDA-Edition\n" 431 "PDA-Edition\n"
424 "for: Zaurus 5500 / 7x0 / 8x0\n" 432 "for: Zaurus 5500 / 7x0 / 8x0\n"
425#endif 433#endif
426 434
427 "(c) 2004 Ulf Schenk\n" 435 "(c) 2004 Ulf Schenk\n"
428 "(c) 2004 Lutz Rogowski\n" 436 "(c) 2004 Lutz Rogowski\n"
429 "(c) 1997-2003, The KDE PIM Team\n" 437 "(c) 1997-2003, The KDE PIM Team\n"
430 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 438 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
431 "Don Sanders Original author\n" 439 "Don Sanders Original author\n"
432 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 440 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
433 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 441 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
434 "Greg Stern DCOP interface\n" 442 "Greg Stern DCOP interface\n"
435 "Mark Westcot Contact pinning\n" 443 "Mark Westcot Contact pinning\n"
436 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 444 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
437 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 445 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
438#ifdef _WIN32_ 446#ifdef _WIN32_
439 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 447 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
440#endif 448#endif
441 ); 449 );
442} 450}
443 451
444void KABCore::setContactSelected( const QString &uid ) 452void KABCore::setContactSelected( const QString &uid )
445{ 453{
446 KABC::Addressee addr = mAddressBook->findByUid( uid ); 454 KABC::Addressee addr = mAddressBook->findByUid( uid );
447 if ( !mDetails->isHidden() ) 455 if ( !mDetails->isHidden() )
448 mDetails->setAddressee( addr ); 456 mDetails->setAddressee( addr );
449 457
450 if ( !addr.isEmpty() ) { 458 if ( !addr.isEmpty() ) {
451 emit contactSelected( addr.formattedName() ); 459 emit contactSelected( addr.formattedName() );
452 KABC::Picture pic = addr.photo(); 460 KABC::Picture pic = addr.photo();
453 if ( pic.isIntern() ) { 461 if ( pic.isIntern() ) {
454//US emit contactSelected( pic.data() ); 462//US emit contactSelected( pic.data() );
455//US instead use: 463//US instead use:
456 QPixmap px; 464 QPixmap px;
457 if (pic.data().isNull() != true) 465 if (pic.data().isNull() != true)
458 { 466 {
459 px.convertFromImage(pic.data()); 467 px.convertFromImage(pic.data());
460 } 468 }
461 469
462 emit contactSelected( px ); 470 emit contactSelected( px );
463 } 471 }
464 } 472 }
465 473
466 474
467 mExtensionManager->setSelectionChanged(); 475 mExtensionManager->setSelectionChanged();
468 476
469 // update the actions 477 // update the actions
470 bool selected = !uid.isEmpty(); 478 bool selected = !uid.isEmpty();
471 479
472 if ( mReadWrite ) { 480 if ( mReadWrite ) {
473 mActionCut->setEnabled( selected ); 481 mActionCut->setEnabled( selected );
474 mActionPaste->setEnabled( selected ); 482 mActionPaste->setEnabled( selected );
475 } 483 }
476 484
477 mActionCopy->setEnabled( selected ); 485 mActionCopy->setEnabled( selected );
478 mActionDelete->setEnabled( selected ); 486 mActionDelete->setEnabled( selected );
479 mActionEditAddressee->setEnabled( selected ); 487 mActionEditAddressee->setEnabled( selected );
480 mActionMail->setEnabled( selected ); 488 mActionMail->setEnabled( selected );
481 mActionMailVCard->setEnabled( selected ); 489 mActionMailVCard->setEnabled( selected );
482 //if (mActionBeam) 490 //if (mActionBeam)
483 //mActionBeam->setEnabled( selected ); 491 //mActionBeam->setEnabled( selected );
484 492
485 if (mActionBeamVCard) 493 if (mActionBeamVCard)
486 mActionBeamVCard->setEnabled( selected ); 494 mActionBeamVCard->setEnabled( selected );
487 495
488 mActionWhoAmI->setEnabled( selected ); 496 mActionWhoAmI->setEnabled( selected );
489 mActionCategories->setEnabled( selected ); 497 mActionCategories->setEnabled( selected );
490} 498}
491 499
492void KABCore::sendMail() 500void KABCore::sendMail()
493{ 501{
494 sendMail( mViewManager->selectedEmails().join( ", " ) ); 502 sendMail( mViewManager->selectedEmails().join( ", " ) );
495} 503}
496 504
497void KABCore::sendMail( const QString& emaillist ) 505void KABCore::sendMail( const QString& emaillist )
498{ 506{
499 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 507 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
500 if (emaillist.contains(",") > 0) 508 if (emaillist.contains(",") > 0)
501 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 509 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
502 else 510 else
503 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 511 ExternalAppHandler::instance()->mailToOneContact( emaillist );
504} 512}
505 513
506 514
507 515
508void KABCore::mailVCard() 516void KABCore::mailVCard()
509{ 517{
510 QStringList uids = mViewManager->selectedUids(); 518 QStringList uids = mViewManager->selectedUids();
511 if ( !uids.isEmpty() ) 519 if ( !uids.isEmpty() )
512 mailVCard( uids ); 520 mailVCard( uids );
513} 521}
514 522
515void KABCore::mailVCard( const QStringList& uids ) 523void KABCore::mailVCard( const QStringList& uids )
516{ 524{
517 QStringList urls; 525 QStringList urls;
518 526
519// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 527// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
520 528
521 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 529 QString dirName = "/tmp/" + KApplication::randomString( 8 );
522 530
523 531
524 532
525 QDir().mkdir( dirName, true ); 533 QDir().mkdir( dirName, true );
526 534
527 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 535 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
528 KABC::Addressee a = mAddressBook->findByUid( *it ); 536 KABC::Addressee a = mAddressBook->findByUid( *it );
529 537
530 if ( a.isEmpty() ) 538 if ( a.isEmpty() )
531 continue; 539 continue;
532 540
533 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 541 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
534 542
535 QString fileName = dirName + "/" + name; 543 QString fileName = dirName + "/" + name;
536 544
537 QFile outFile(fileName); 545 QFile outFile(fileName);
538 546
539 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 547 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
540 KABC::VCardConverter converter; 548 KABC::VCardConverter converter;
541 QString vcard; 549 QString vcard;
542 550
543 converter.addresseeToVCard( a, vcard ); 551 converter.addresseeToVCard( a, vcard );
544 552
545 QTextStream t( &outFile ); // use a text stream 553 QTextStream t( &outFile ); // use a text stream
546 t.setEncoding( QTextStream::UnicodeUTF8 ); 554 t.setEncoding( QTextStream::UnicodeUTF8 );
547 t << vcard; 555 t << vcard;
548 556
549 outFile.close(); 557 outFile.close();
550 558
551 urls.append( fileName ); 559 urls.append( fileName );
552 } 560 }
553 } 561 }
554 562
555 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 563 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
556 564
557 565
558/*US 566/*US
559 kapp->invokeMailer( QString::null, QString::null, QString::null, 567 kapp->invokeMailer( QString::null, QString::null, QString::null,
560 QString::null, // subject 568 QString::null, // subject
561 QString::null, // body 569 QString::null, // body
562 QString::null, 570 QString::null,
563 urls ); // attachments 571 urls ); // attachments
564*/ 572*/
565 573
566} 574}
567 575
568/** 576/**
569 Beams the "WhoAmI contact. 577 Beams the "WhoAmI contact.
570*/ 578*/
571void KABCore::beamMySelf() 579void KABCore::beamMySelf()
572{ 580{
573 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 581 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
574 if (!a.isEmpty()) 582 if (!a.isEmpty())
575 { 583 {
576 QStringList uids; 584 QStringList uids;
577 uids << a.uid(); 585 uids << a.uid();
578 586
579 beamVCard(uids); 587 beamVCard(uids);
580 } else { 588 } else {
581 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 589 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
582 590
583 591
584 } 592 }
585} 593}
586 594
587void KABCore::beamVCard() 595void KABCore::beamVCard()
588{ 596{
589 QStringList uids = mViewManager->selectedUids(); 597 QStringList uids = mViewManager->selectedUids();
590 if ( !uids.isEmpty() ) 598 if ( !uids.isEmpty() )
591 beamVCard( uids ); 599 beamVCard( uids );
592} 600}
593 601
594 602
595void KABCore::beamVCard(const QStringList& uids) 603void KABCore::beamVCard(const QStringList& uids)
596{ 604{
597/*US 605/*US
598 QString beamFilename; 606 QString beamFilename;
599 Opie::OPimContact c; 607 Opie::OPimContact c;
600 if ( actionPersonal->isOn() ) { 608 if ( actionPersonal->isOn() ) {
601 beamFilename = addressbookPersonalVCardName(); 609 beamFilename = addressbookPersonalVCardName();
602 if ( !QFile::exists( beamFilename ) ) 610 if ( !QFile::exists( beamFilename ) )
603 return; // can't beam a non-existent file 611 return; // can't beam a non-existent file
604 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 612 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
605 beamFilename ); 613 beamFilename );
606 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 614 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
607 Opie::OPimContactAccess::List allList = access->allRecords(); 615 Opie::OPimContactAccess::List allList = access->allRecords();
608 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 616 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
609 c = *it; 617 c = *it;
610 618
611 delete access; 619 delete access;
612 } else { 620 } else {
613 unlink( beamfile ); // delete if exists 621 unlink( beamfile ); // delete if exists
614 mkdir("/tmp/obex/", 0755); 622 mkdir("/tmp/obex/", 0755);
615 c = m_abView -> currentEntry(); 623 c = m_abView -> currentEntry();
616 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 624 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
617 beamfile ); 625 beamfile );
618 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 626 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
619 access->add( c ); 627 access->add( c );
620 access->save(); 628 access->save();
621 delete access; 629 delete access;
622 630
623 beamFilename = beamfile; 631 beamFilename = beamfile;
624 } 632 }
625 633
626 owarn << "Beaming: " << beamFilename << oendl; 634 owarn << "Beaming: " << beamFilename << oendl;
627*/ 635*/
628 636
629#if 0 637#if 0
630 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 638 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
631 639
632 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 640 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
633 641
634 QString name = "contact.vcf"; 642 QString name = "contact.vcf";
635 643
636 QString fileName = dirName + "/" + name; 644 QString fileName = dirName + "/" + name;
637#endif 645#endif
638 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 646 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
639 // 647 //
640 QString fileName = "/tmp/kapibeamfile.vcf"; 648 QString fileName = "/tmp/kapibeamfile.vcf";
641 649
642 650
643 //QDir().mkdir( dirName, true ); 651 //QDir().mkdir( dirName, true );
644 652
645 653
646 KABC::VCardConverter converter; 654 KABC::VCardConverter converter;
647 QString description; 655 QString description;
648 QString datastream; 656 QString datastream;
649 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 657 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
650 KABC::Addressee a = mAddressBook->findByUid( *it ); 658 KABC::Addressee a = mAddressBook->findByUid( *it );
651 659
652 if ( a.isEmpty() ) 660 if ( a.isEmpty() )
653 continue; 661 continue;
654 662
655 if (description.isEmpty()) 663 if (description.isEmpty())
656 description = a.formattedName(); 664 description = a.formattedName();
657 665
658 QString vcard; 666 QString vcard;
659 converter.addresseeToVCard( a, vcard ); 667 converter.addresseeToVCard( a, vcard );
660 int start = 0; 668 int start = 0;
661 int next; 669 int next;
662 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 670 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
663 int semi = vcard.find(";", next); 671 int semi = vcard.find(";", next);
664 int dopp = vcard.find(":", next); 672 int dopp = vcard.find(":", next);
665 int sep; 673 int sep;
666 if ( semi < dopp && semi >= 0 ) 674 if ( semi < dopp && semi >= 0 )
667 sep = semi ; 675 sep = semi ;
668 else 676 else
669 sep = dopp; 677 sep = dopp;
670 datastream +=vcard.mid( start, next - start); 678 datastream +=vcard.mid( start, next - start);
671 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 679 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
672 start = sep; 680 start = sep;
673 } 681 }
674 datastream += vcard.mid( start,vcard.length() ); 682 datastream += vcard.mid( start,vcard.length() );
675 } 683 }
676#ifndef DESKTOP_VERSION 684#ifndef DESKTOP_VERSION
677 QFile outFile(fileName); 685 QFile outFile(fileName);
678 if ( outFile.open(IO_WriteOnly) ) { 686 if ( outFile.open(IO_WriteOnly) ) {
679 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 687 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
680 QTextStream t( &outFile ); // use a text stream 688 QTextStream t( &outFile ); // use a text stream
681 t.setEncoding( QTextStream::UnicodeUTF8 ); 689 t.setEncoding( QTextStream::UnicodeUTF8 );
682 t <<datastream; 690 t <<datastream;
683 outFile.close(); 691 outFile.close();
684 Ir *ir = new Ir( this ); 692 Ir *ir = new Ir( this );
685 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 693 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
686 ir->send( fileName, description, "text/x-vCard" ); 694 ir->send( fileName, description, "text/x-vCard" );
687 } else { 695 } else {
688 qDebug("Error open temp beam file "); 696 qDebug("Error open temp beam file ");
689 return; 697 return;
690 } 698 }
691#endif 699#endif
692 700
693} 701}
694 702