summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index d6f0cee..6610288 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,1044 +1,1038 @@
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 "kabcore.h" 24#include "kabcore.h"
25 25
26#include <stdaddressbook.h> 26#include <stdaddressbook.h>
27#include <klocale.h> 27#include <klocale.h>
28 28
29#ifndef KAB_EMBEDDED 29#ifndef KAB_EMBEDDED
30#include <qclipboard.h> 30#include <qclipboard.h>
31#include <qdir.h> 31#include <qdir.h>
32#include <qfile.h> 32#include <qfile.h>
33#include <qapplicaton.h> 33#include <qapplicaton.h>
34#include <qlayout.h> 34#include <qlayout.h>
35#include <qregexp.h> 35#include <qregexp.h>
36#include <qvbox.h> 36#include <qvbox.h>
37#include <kabc/addresseelist.h> 37#include <kabc/addresseelist.h>
38#include <kabc/errorhandler.h> 38#include <kabc/errorhandler.h>
39#include <kabc/resource.h> 39#include <kabc/resource.h>
40#include <kabc/vcardconverter.h> 40#include <kabc/vcardconverter.h>
41#include <kapplication.h> 41#include <kapplication.h>
42#include <kactionclasses.h> 42#include <kactionclasses.h>
43#include <kcmultidialog.h> 43#include <kcmultidialog.h>
44#include <kdebug.h> 44#include <kdebug.h>
45#include <kdeversion.h> 45#include <kdeversion.h>
46#include <kkeydialog.h> 46#include <kkeydialog.h>
47#include <kmessagebox.h> 47#include <kmessagebox.h>
48#include <kprinter.h> 48#include <kprinter.h>
49#include <kprotocolinfo.h> 49#include <kprotocolinfo.h>
50#include <kresources/selectdialog.h> 50#include <kresources/selectdialog.h>
51#include <kstandarddirs.h> 51#include <kstandarddirs.h>
52#include <ktempfile.h> 52#include <ktempfile.h>
53#include <kxmlguiclient.h> 53#include <kxmlguiclient.h>
54#include <kaboutdata.h> 54#include <kaboutdata.h>
55#include <libkdepim/categoryselectdialog.h> 55#include <libkdepim/categoryselectdialog.h>
56 56
57#include "addresseeutil.h" 57#include "addresseeutil.h"
58#include "addresseeeditordialog.h" 58#include "addresseeeditordialog.h"
59#include "extensionmanager.h" 59#include "extensionmanager.h"
60#include "kstdaction.h" 60#include "kstdaction.h"
61#include "kaddressbookservice.h" 61#include "kaddressbookservice.h"
62#include "ldapsearchdialog.h" 62#include "ldapsearchdialog.h"
63#include "printing/printingwizard.h" 63#include "printing/printingwizard.h"
64#else // KAB_EMBEDDED 64#else // KAB_EMBEDDED
65 65
66#include <kapplication.h> 66#include <kapplication.h>
67#include "KDGanttMinimizeSplitter.h" 67#include "KDGanttMinimizeSplitter.h"
68#include "kaddressbookmain.h" 68#include "kaddressbookmain.h"
69#include "kactioncollection.h" 69#include "kactioncollection.h"
70#include <qapp.h> 70#include <qapp.h>
71#include <qmenubar.h> 71#include <qmenubar.h>
72//#include <qtoolbar.h> 72//#include <qtoolbar.h>
73#include <qmessagebox.h> 73#include <qmessagebox.h>
74#include <kdebug.h> 74#include <kdebug.h>
75#include <kiconloader.h> // needed for SmallIcon 75#include <kiconloader.h> // needed for SmallIcon
76#include <kresources/kcmkresources.h> 76#include <kresources/kcmkresources.h>
77#include <ktoolbar.h> 77#include <ktoolbar.h>
78 78
79 79
80//#include <qlabel.h> 80//#include <qlabel.h>
81 81
82 82
83#ifndef DESKTOP_VERSION 83#ifndef DESKTOP_VERSION
84#include <qpe/ir.h> 84#include <qpe/ir.h>
85#endif 85#endif
86 86
87#endif // KAB_EMBEDDED 87#endif // KAB_EMBEDDED
88#include "kcmconfigs/kcmkabconfig.h" 88#include "kcmconfigs/kcmkabconfig.h"
89#include "kcmconfigs/kcmkdepimconfig.h" 89#include "kcmconfigs/kcmkdepimconfig.h"
90#include "kpimglobalprefs.h" 90#include "kpimglobalprefs.h"
91#include "externalapphandler.h" 91#include "externalapphandler.h"
92 92
93 93
94#include <kresources/selectdialog.h> 94#include <kresources/selectdialog.h>
95#include <kmessagebox.h> 95#include <kmessagebox.h>
96 96
97#include <picture.h> 97#include <picture.h>
98#include <resource.h> 98#include <resource.h>
99 99
100//US#include <qsplitter.h> 100//US#include <qsplitter.h>
101#include <qmap.h> 101#include <qmap.h>
102#include <qdir.h> 102#include <qdir.h>
103#include <qfile.h> 103#include <qfile.h>
104#include <qvbox.h> 104#include <qvbox.h>
105#include <qlayout.h> 105#include <qlayout.h>
106#include <qclipboard.h> 106#include <qclipboard.h>
107#include <qtextstream.h> 107#include <qtextstream.h>
108 108
109#include <libkdepim/categoryselectdialog.h> 109#include <libkdepim/categoryselectdialog.h>
110#include <kabc/vcardconverter.h> 110#include <kabc/vcardconverter.h>
111 111
112 112
113#include "addresseeutil.h" 113#include "addresseeutil.h"
114#include "undocmds.h" 114#include "undocmds.h"
115#include "addresseeeditordialog.h" 115#include "addresseeeditordialog.h"
116#include "viewmanager.h" 116#include "viewmanager.h"
117#include "details/detailsviewcontainer.h" 117#include "details/detailsviewcontainer.h"
118#include "kabprefs.h" 118#include "kabprefs.h"
119#include "xxportmanager.h" 119#include "xxportmanager.h"
120#include "incsearchwidget.h" 120#include "incsearchwidget.h"
121#include "jumpbuttonbar.h" 121#include "jumpbuttonbar.h"
122#include "extensionmanager.h" 122#include "extensionmanager.h"
123#include "addresseeconfig.h" 123#include "addresseeconfig.h"
124#include <kcmultidialog.h> 124#include <kcmultidialog.h>
125 125
126#ifdef _WIN32_ 126#ifdef _WIN32_
127 127
128#include "kaimportoldialog.h" 128#include "kaimportoldialog.h"
129#endif 129#endif
130 130
131bool pasteWithNewUid = true; 131bool pasteWithNewUid = true;
132 132
133#ifdef KAB_EMBEDDED 133#ifdef KAB_EMBEDDED
134KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 134KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
135 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 135 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
136 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 136 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
137 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 137 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
138#else //KAB_EMBEDDED 138#else //KAB_EMBEDDED
139KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 139KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
140 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 140 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
141 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 141 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
142 mReadWrite( readWrite ), mModified( false ) 142 mReadWrite( readWrite ), mModified( false )
143#endif //KAB_EMBEDDED 143#endif //KAB_EMBEDDED
144{ 144{
145 145
146 mExtensionBarSplitter = 0; 146 mExtensionBarSplitter = 0;
147 mIsPart = !parent->inherits( "KAddressBookMain" ); 147 mIsPart = !parent->inherits( "KAddressBookMain" );
148 148
149 mAddressBook = KABC::StdAddressBook::self(); 149 mAddressBook = KABC::StdAddressBook::self();
150 KABC::StdAddressBook::setAutomaticSave( false ); 150 KABC::StdAddressBook::setAutomaticSave( false );
151 151
152#ifndef KAB_EMBEDDED 152#ifndef KAB_EMBEDDED
153 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 153 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
154#endif //KAB_EMBEDDED 154#endif //KAB_EMBEDDED
155 155
156 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 156 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
157 SLOT( addressBookChanged() ) ); 157 SLOT( addressBookChanged() ) );
158 158
159 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 159 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
160 "X-Department", "KADDRESSBOOK" ); 160 "X-Department", "KADDRESSBOOK" );
161 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 161 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
162 "X-Profession", "KADDRESSBOOK" ); 162 "X-Profession", "KADDRESSBOOK" );
163 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 163 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
164 "X-AssistantsName", "KADDRESSBOOK" ); 164 "X-AssistantsName", "KADDRESSBOOK" );
165 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 165 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
166 "X-ManagersName", "KADDRESSBOOK" ); 166 "X-ManagersName", "KADDRESSBOOK" );
167 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 167 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
168 "X-SpousesName", "KADDRESSBOOK" ); 168 "X-SpousesName", "KADDRESSBOOK" );
169 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 169 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
170 "X-Office", "KADDRESSBOOK" ); 170 "X-Office", "KADDRESSBOOK" );
171 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 171 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
172 "X-IMAddress", "KADDRESSBOOK" ); 172 "X-IMAddress", "KADDRESSBOOK" );
173 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 173 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
174 "X-Anniversary", "KADDRESSBOOK" ); 174 "X-Anniversary", "KADDRESSBOOK" );
175 175
176 //US added this field to become compatible with Opie/qtopia addressbook 176 //US added this field to become compatible with Opie/qtopia addressbook
177 // values can be "female" or "male" or "". An empty field represents undefined. 177 // values can be "female" or "male" or "". An empty field represents undefined.
178 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 178 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
179 "X-Gender", "KADDRESSBOOK" ); 179 "X-Gender", "KADDRESSBOOK" );
180 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 180 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
181 "X-Children", "KADDRESSBOOK" ); 181 "X-Children", "KADDRESSBOOK" );
182 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 182 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
183 "X-FreeBusyUrl", "KADDRESSBOOK" ); 183 "X-FreeBusyUrl", "KADDRESSBOOK" );
184 184
185 initGUI(); 185 initGUI();
186 186
187 mIncSearchWidget->setFocus(); 187 mIncSearchWidget->setFocus();
188 188
189 189
190 connect( mViewManager, SIGNAL( selected( const QString& ) ), 190 connect( mViewManager, SIGNAL( selected( const QString& ) ),
191 SLOT( setContactSelected( const QString& ) ) ); 191 SLOT( setContactSelected( const QString& ) ) );
192 connect( mViewManager, SIGNAL( executed( const QString& ) ), 192 connect( mViewManager, SIGNAL( executed( const QString& ) ),
193 SLOT( editContact( const QString& ) ) ); 193 SLOT( editContact( const QString& ) ) );
194 connect( mViewManager, SIGNAL( deleteRequest( ) ), 194 connect( mViewManager, SIGNAL( deleteRequest( ) ),
195 SLOT( deleteContacts( ) ) ); 195 SLOT( deleteContacts( ) ) );
196 connect( mViewManager, SIGNAL( modified() ), 196 connect( mViewManager, SIGNAL( modified() ),
197 SLOT( setModified() ) ); 197 SLOT( setModified() ) );
198 198
199 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 199 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
200 200
201 connect( mXXPortManager, SIGNAL( modified() ), 201 connect( mXXPortManager, SIGNAL( modified() ),
202 SLOT( setModified() ) ); 202 SLOT( setModified() ) );
203 203
204 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 204 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
205 SLOT( incrementalSearch( const QString& ) ) ); 205 SLOT( incrementalSearch( const QString& ) ) );
206 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 206 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
207 mJumpButtonBar, SLOT( recreateButtons() ) ); 207 mJumpButtonBar, SLOT( recreateButtons() ) );
208 208
209 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 209 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
210 SLOT( sendMail( const QString& ) ) ); 210 SLOT( sendMail( const QString& ) ) );
211 211
212#ifndef KAB_EMBEDDED 212#ifndef KAB_EMBEDDED
213 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 213 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
214 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 214 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
215 215
216 connect( mDetails, SIGNAL( browse( const QString& ) ), 216 connect( mDetails, SIGNAL( browse( const QString& ) ),
217 SLOT( browse( const QString& ) ) ); 217 SLOT( browse( const QString& ) ) );
218 218
219 mAddressBookService = new KAddressBookService( this ); 219 mAddressBookService = new KAddressBookService( this );
220 220
221#endif //KAB_EMBEDDED 221#endif //KAB_EMBEDDED
222 mEditorDialog = 0; 222 mEditorDialog = 0;
223 createAddresseeEditorDialog( this ); 223 createAddresseeEditorDialog( this );
224 setModified( false ); 224 setModified( false );
225} 225}
226 226
227KABCore::~KABCore() 227KABCore::~KABCore()
228{ 228{
229 // save(); 229 // save();
230 //saveSettings(); 230 //saveSettings();
231 //KABPrefs::instance()->writeConfig(); 231 //KABPrefs::instance()->writeConfig();
232 delete AddresseeConfig::instance(); 232 delete AddresseeConfig::instance();
233 mAddressBook = 0; 233 mAddressBook = 0;
234 KABC::StdAddressBook::close(); 234 KABC::StdAddressBook::close();
235} 235}
236 236
237void KABCore::restoreSettings() 237void KABCore::restoreSettings()
238{ 238{
239 bool state = KABPrefs::instance()->mJumpButtonBarVisible; 239 bool state = KABPrefs::instance()->mJumpButtonBarVisible;
240 240
241 mActionJumpBar->setChecked( state ); 241 mActionJumpBar->setChecked( state );
242 setJumpButtonBarVisible( state ); 242 setJumpButtonBarVisible( state );
243 243
244 state = KABPrefs::instance()->mDetailsPageVisible; 244 state = KABPrefs::instance()->mDetailsPageVisible;
245 245
246 mActionDetails->setChecked( state ); 246 mActionDetails->setChecked( state );
247 setDetailsVisible( state ); 247 setDetailsVisible( state );
248 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 248 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
249 if ( splitterSize.count() == 0 ) { 249 if ( splitterSize.count() == 0 ) {
250 splitterSize.append( width() / 2 ); 250 splitterSize.append( width() / 2 );
251 splitterSize.append( width() / 2 ); 251 splitterSize.append( width() / 2 );
252 } 252 }
253 mMiniSplitter->setSizes( splitterSize ); 253 mMiniSplitter->setSizes( splitterSize );
254 if ( mExtensionBarSplitter ) { 254 if ( mExtensionBarSplitter ) {
255 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 255 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
256 if ( splitterSize.count() == 0 ) { 256 if ( splitterSize.count() == 0 ) {
257 splitterSize.append( width() / 2 ); 257 splitterSize.append( width() / 2 );
258 splitterSize.append( width() / 2 ); 258 splitterSize.append( width() / 2 );
259 } 259 }
260 mExtensionBarSplitter->setSizes( splitterSize ); 260 mExtensionBarSplitter->setSizes( splitterSize );
261 261
262 } 262 }
263#ifndef KAB_EMBEDDED 263#ifndef KAB_EMBEDDED
264 QValueList<int> splitterSize = KABPrefs::instance()->mExtensionsSplitter; 264 QValueList<int> splitterSize = KABPrefs::instance()->mExtensionsSplitter;
265 if ( splitterSize.count() == 0 ) { 265 if ( splitterSize.count() == 0 ) {
266 splitterSize.append( width() / 2 ); 266 splitterSize.append( width() / 2 );
267 splitterSize.append( width() / 2 ); 267 splitterSize.append( width() / 2 );
268 } 268 }
269 mExtensionBarSplitter->setSizes( splitterSize ); 269 mExtensionBarSplitter->setSizes( splitterSize );
270 270
271 splitterSize = KABPrefs::instance()->mDetailsSplitter; 271 splitterSize = KABPrefs::instance()->mDetailsSplitter;
272 if ( splitterSize.count() == 0 ) { 272 if ( splitterSize.count() == 0 ) {
273 splitterSize.append( height() / 2 ); 273 splitterSize.append( height() / 2 );
274 splitterSize.append( height() / 2 ); 274 splitterSize.append( height() / 2 );
275 } 275 }
276 mDetailsSplitter->setSizes( splitterSize ); 276 mDetailsSplitter->setSizes( splitterSize );
277 277
278 mExtensionManager->restoreSettings(); 278 mExtensionManager->restoreSettings();
279 279
280#endif //KAB_EMBEDDED 280#endif //KAB_EMBEDDED
281 281
282 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 282 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
283 283
284 mViewManager->restoreSettings(); 284 mViewManager->restoreSettings();
285 mExtensionManager->restoreSettings(); 285 mExtensionManager->restoreSettings();
286} 286}
287 287
288void KABCore::saveSettings() 288void KABCore::saveSettings()
289{ 289{
290 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 290 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
291 if ( mExtensionBarSplitter ) 291 if ( mExtensionBarSplitter )
292 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 292 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
293 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 293 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
294 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 294 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
295#ifndef KAB_EMBEDDED 295#ifndef KAB_EMBEDDED
296 296
297 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 297 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
298 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 298 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
299#endif //KAB_EMBEDDED 299#endif //KAB_EMBEDDED
300 mExtensionManager->saveSettings(); 300 mExtensionManager->saveSettings();
301 mViewManager->saveSettings(); 301 mViewManager->saveSettings();
302 302
303 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 303 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
304 304
305} 305}
306 306
307KABC::AddressBook *KABCore::addressBook() const 307KABC::AddressBook *KABCore::addressBook() const
308{ 308{
309 return mAddressBook; 309 return mAddressBook;
310} 310}
311 311
312KConfig *KABCore::config() 312KConfig *KABCore::config()
313{ 313{
314#ifndef KAB_EMBEDDED 314#ifndef KAB_EMBEDDED
315 return KABPrefs::instance()->config(); 315 return KABPrefs::instance()->config();
316#else //KAB_EMBEDDED 316#else //KAB_EMBEDDED
317 return KABPrefs::instance()->getConfig(); 317 return KABPrefs::instance()->getConfig();
318#endif //KAB_EMBEDDED 318#endif //KAB_EMBEDDED
319} 319}
320 320
321KActionCollection *KABCore::actionCollection() const 321KActionCollection *KABCore::actionCollection() const
322{ 322{
323 return mGUIClient->actionCollection(); 323 return mGUIClient->actionCollection();
324} 324}
325 325
326KABC::Field *KABCore::currentSearchField() const 326KABC::Field *KABCore::currentSearchField() const
327{ 327{
328 if (mIncSearchWidget) 328 if (mIncSearchWidget)
329 return mIncSearchWidget->currentField(); 329 return mIncSearchWidget->currentField();
330 else 330 else
331 return 0; 331 return 0;
332} 332}
333 333
334QStringList KABCore::selectedUIDs() const 334QStringList KABCore::selectedUIDs() const
335{ 335{
336 return mViewManager->selectedUids(); 336 return mViewManager->selectedUids();
337} 337}
338 338
339KABC::Resource *KABCore::requestResource( QWidget *parent ) 339KABC::Resource *KABCore::requestResource( QWidget *parent )
340{ 340{
341 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 341 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
342 342
343 QPtrList<KRES::Resource> kresResources; 343 QPtrList<KRES::Resource> kresResources;
344 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 344 QPtrListIterator<KABC::Resource> resIt( kabcResources );
345 KABC::Resource *resource; 345 KABC::Resource *resource;
346 while ( ( resource = resIt.current() ) != 0 ) { 346 while ( ( resource = resIt.current() ) != 0 ) {
347 ++resIt; 347 ++resIt;
348 if ( !resource->readOnly() ) { 348 if ( !resource->readOnly() ) {
349 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 349 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
350 if ( res ) 350 if ( res )
351 kresResources.append( res ); 351 kresResources.append( res );
352 } 352 }
353 } 353 }
354 354
355 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 355 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
356 return static_cast<KABC::Resource*>( res ); 356 return static_cast<KABC::Resource*>( res );
357} 357}
358 358
359#ifndef KAB_EMBEDDED 359#ifndef KAB_EMBEDDED
360KAboutData *KABCore::createAboutData() 360KAboutData *KABCore::createAboutData()
361#else //KAB_EMBEDDED 361#else //KAB_EMBEDDED
362void KABCore::createAboutData() 362void KABCore::createAboutData()
363#endif //KAB_EMBEDDED 363#endif //KAB_EMBEDDED
364{ 364{
365#ifndef KAB_EMBEDDED 365#ifndef KAB_EMBEDDED
366 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 366 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
367 "3.1", I18N_NOOP( "The KDE Address Book" ), 367 "3.1", I18N_NOOP( "The KDE Address Book" ),
368 KAboutData::License_GPL_V2, 368 KAboutData::License_GPL_V2,
369 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 369 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
370 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 370 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
371 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 371 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
372 about->addAuthor( "Cornelius Schumacher", 372 about->addAuthor( "Cornelius Schumacher",
373 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 373 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
374 "schumacher@kde.org" ); 374 "schumacher@kde.org" );
375 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 375 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
376 "mpilone@slac.com" ); 376 "mpilone@slac.com" );
377 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 377 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
378 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 378 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
379 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 379 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
380 "michel@klaralvdalens-datakonsult.se" ); 380 "michel@klaralvdalens-datakonsult.se" );
381 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 381 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
382 "hansen@kde.org" ); 382 "hansen@kde.org" );
383 383
384 return about; 384 return about;
385#endif //KAB_EMBEDDED 385#endif //KAB_EMBEDDED
386 386
387 QString version; 387 QString version;
388#include <../version> 388#include <../version>
389 QMessageBox::about( this, "About KAddressbook/Pi", 389 QMessageBox::about( this, "About KAddressbook/Pi",
390 "KAddressbook/Platform-independent\n" 390 "KAddressbook/Platform-independent\n"
391 "(KA/Pi) " +version + " - " + 391 "(KA/Pi) " +version + " - " +
392#ifdef DESKTOP_VERSION 392#ifdef DESKTOP_VERSION
393 "Desktop Edition\n" 393 "Desktop Edition\n"
394#else 394#else
395 "PDA-Edition\n" 395 "PDA-Edition\n"
396 "for: Zaurus 5500 / 7x0 / 8x0\n" 396 "for: Zaurus 5500 / 7x0 / 8x0\n"
397#endif 397#endif
398 398
399 "(c) 2004 Ulf Schenk\n" 399 "(c) 2004 Ulf Schenk\n"
400 "(c) 1997-2003, The KDE PIM Team\n" 400 "(c) 1997-2003, The KDE PIM Team\n"
401 "Tobias Koenig Current maintainer tokoe@kde.org\n" 401 "Tobias Koenig Current maintainer tokoe@kde.org\n"
402 "Don Sanders Original author\n" 402 "Don Sanders Original author\n"
403 "Cornelius Schumacher Co-maintainer schumacher@kde.org\n" 403 "Cornelius Schumacher Co-maintainer schumacher@kde.org\n"
404 "Mike Pilone GUI and framework redesign mpilone@slac.com\n" 404 "Mike Pilone GUI and framework redesign mpilone@slac.com\n"
405 "Greg Stern DCOP interface\n" 405 "Greg Stern DCOP interface\n"
406 "Mark Westcot Contact pinning\n" 406 "Mark Westcot Contact pinning\n"
407 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 407 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
408 "Steffen Hansen LDAP Lookup hansen@kde.org\n" 408 "Steffen Hansen LDAP Lookup hansen@kde.org\n"
409#ifdef _WIN32_ 409#ifdef _WIN32_
410 "(c) 2004 Lutz Rogowski Import from OL rogowski@kde.org\n" 410 "(c) 2004 Lutz Rogowski Import from OL rogowski@kde.org\n"
411#endif 411#endif
412 ); 412 );
413} 413}
414 414
415void KABCore::setContactSelected( const QString &uid ) 415void KABCore::setContactSelected( const QString &uid )
416{ 416{
417 KABC::Addressee addr = mAddressBook->findByUid( uid ); 417 KABC::Addressee addr = mAddressBook->findByUid( uid );
418 if ( !mDetails->isHidden() ) 418 if ( !mDetails->isHidden() )
419 mDetails->setAddressee( addr ); 419 mDetails->setAddressee( addr );
420 420
421 if ( !addr.isEmpty() ) { 421 if ( !addr.isEmpty() ) {
422 emit contactSelected( addr.formattedName() ); 422 emit contactSelected( addr.formattedName() );
423 KABC::Picture pic = addr.photo(); 423 KABC::Picture pic = addr.photo();
424 if ( pic.isIntern() ) { 424 if ( pic.isIntern() ) {
425//US emit contactSelected( pic.data() ); 425//US emit contactSelected( pic.data() );
426//US instead use: 426//US instead use:
427 QPixmap px; 427 QPixmap px;
428 if (pic.data().isNull() != true) 428 if (pic.data().isNull() != true)
429 { 429 {
430 px.convertFromImage(pic.data()); 430 px.convertFromImage(pic.data());
431 } 431 }
432 432
433 emit contactSelected( px ); 433 emit contactSelected( px );
434 } 434 }
435 } 435 }
436 436
437 437
438 mExtensionManager->setSelectionChanged(); 438 mExtensionManager->setSelectionChanged();
439 439
440 // update the actions 440 // update the actions
441 bool selected = !uid.isEmpty(); 441 bool selected = !uid.isEmpty();
442 442
443 if ( mReadWrite ) { 443 if ( mReadWrite ) {
444 mActionCut->setEnabled( selected ); 444 mActionCut->setEnabled( selected );
445 mActionPaste->setEnabled( selected ); 445 mActionPaste->setEnabled( selected );
446 } 446 }
447 447
448 mActionCopy->setEnabled( selected ); 448 mActionCopy->setEnabled( selected );
449 mActionDelete->setEnabled( selected ); 449 mActionDelete->setEnabled( selected );
450 mActionEditAddressee->setEnabled( selected ); 450 mActionEditAddressee->setEnabled( selected );
451 mActionMail->setEnabled( selected ); 451 mActionMail->setEnabled( selected );
452 mActionMailVCard->setEnabled( selected ); 452 mActionMailVCard->setEnabled( selected );
453 //if (mActionBeam) 453 //if (mActionBeam)
454 //mActionBeam->setEnabled( selected ); 454 //mActionBeam->setEnabled( selected );
455 455
456 if (mActionBeamVCard) 456 if (mActionBeamVCard)
457 mActionBeamVCard->setEnabled( selected ); 457 mActionBeamVCard->setEnabled( selected );
458 458
459 mActionWhoAmI->setEnabled( selected ); 459 mActionWhoAmI->setEnabled( selected );
460 mActionCategories->setEnabled( selected ); 460 mActionCategories->setEnabled( selected );
461} 461}
462 462
463void KABCore::sendMail() 463void KABCore::sendMail()
464{ 464{
465 sendMail( mViewManager->selectedEmails().join( ", " ) ); 465 sendMail( mViewManager->selectedEmails().join( ", " ) );
466} 466}
467 467
468void KABCore::sendMail( const QString& email ) 468void KABCore::sendMail( const QString& emaillist )
469{ 469{
470 bool result = ExternalAppHandler::instance()->mailToContacts(email); 470 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
471 if (emaillist.contains(",") > 0)
472 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
473 else
474 ExternalAppHandler::instance()->mailToOneContact( emaillist );
471} 475}
472 476
473 477
474 478
475void KABCore::mailVCard() 479void KABCore::mailVCard()
476{ 480{
477 QStringList uids = mViewManager->selectedUids(); 481 QStringList uids = mViewManager->selectedUids();
478 if ( !uids.isEmpty() ) 482 if ( !uids.isEmpty() )
479 mailVCard( uids ); 483 mailVCard( uids );
480} 484}
481 485
482void KABCore::mailVCard( const QStringList& uids ) 486void KABCore::mailVCard( const QStringList& uids )
483{ 487{
484 QStringList urls; 488 QStringList urls;
485 489
486 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 490// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
487 491
488/*US 492 QString dirName = "/tmp/" + KApplication::randomString( 8 );
489 // Create a temp dir, so that we can put the files in it with proper names
490 KTempFile tempDir;
491 if ( tempDir.status() != 0 ) {
492 kdWarning() << strerror( tempDir.status() ) << endl;
493 return;
494 }
495
496 QString dirName = tempDir.name();
497 tempDir.unlink();
498*/
499 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
500 493
501 494
502 495
503 QDir().mkdir( dirName, true ); 496 QDir().mkdir( dirName, true );
504 497
505 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 498 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
506 KABC::Addressee a = mAddressBook->findByUid( *it ); 499 KABC::Addressee a = mAddressBook->findByUid( *it );
507 500
508 if ( a.isEmpty() ) 501 if ( a.isEmpty() )
509 continue; 502 continue;
510 503
511 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 504 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
512 505
513 QString fileName = dirName + "/" + name; 506 QString fileName = dirName + "/" + name;
514 507
515 QFile outFile(fileName); 508 QFile outFile(fileName);
509
516 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 510 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
517 KABC::VCardConverter converter; 511 KABC::VCardConverter converter;
518 QString vcard; 512 QString vcard;
519 513
520 converter.addresseeToVCard( a, vcard ); 514 converter.addresseeToVCard( a, vcard );
521 515
522 QTextStream t( &outFile ); // use a text stream 516 QTextStream t( &outFile ); // use a text stream
523 t.setEncoding( QTextStream::UnicodeUTF8 ); 517 t.setEncoding( QTextStream::UnicodeUTF8 );
524 t << vcard; 518 t << vcard;
525 519
526 outFile.close(); 520 outFile.close();
527 521
528 urls.append( fileName ); 522 urls.append( fileName );
529 } 523 }
530 } 524 }
531 525
532 bool result = ExternalAppHandler::instance()->mailAttachments(urls.join(", ")); 526 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
533 527
534 528
535/*US 529/*US
536 kapp->invokeMailer( QString::null, QString::null, QString::null, 530 kapp->invokeMailer( QString::null, QString::null, QString::null,
537 QString::null, // subject 531 QString::null, // subject
538 QString::null, // body 532 QString::null, // body
539 QString::null, 533 QString::null,
540 urls ); // attachments 534 urls ); // attachments
541*/ 535*/
542 536
543} 537}
544 538
545/** 539/**
546 Beams the "WhoAmI contact. 540 Beams the "WhoAmI contact.
547*/ 541*/
548void KABCore::beamMySelf() 542void KABCore::beamMySelf()
549{ 543{
550 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 544 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
551 if (!a.isEmpty()) 545 if (!a.isEmpty())
552 { 546 {
553 QStringList uids; 547 QStringList uids;
554 uids << a.uid(); 548 uids << a.uid();
555 549
556 beamVCard(uids); 550 beamVCard(uids);
557 } else { 551 } else {
558 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 552 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
559 553
560 554
561 } 555 }
562} 556}
563 557
564void KABCore::beamVCard() 558void KABCore::beamVCard()
565{ 559{
566 QStringList uids = mViewManager->selectedUids(); 560 QStringList uids = mViewManager->selectedUids();
567 if ( !uids.isEmpty() ) 561 if ( !uids.isEmpty() )
568 beamVCard( uids ); 562 beamVCard( uids );
569} 563}
570 564
571 565
572void KABCore::beamVCard(const QStringList& uids) 566void KABCore::beamVCard(const QStringList& uids)
573{ 567{
574/*US 568/*US
575 QString beamFilename; 569 QString beamFilename;
576 Opie::OPimContact c; 570 Opie::OPimContact c;
577 if ( actionPersonal->isOn() ) { 571 if ( actionPersonal->isOn() ) {
578 beamFilename = addressbookPersonalVCardName(); 572 beamFilename = addressbookPersonalVCardName();
579 if ( !QFile::exists( beamFilename ) ) 573 if ( !QFile::exists( beamFilename ) )
580 return; // can't beam a non-existent file 574 return; // can't beam a non-existent file
581 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 575 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
582 beamFilename ); 576 beamFilename );
583 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 577 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
584 Opie::OPimContactAccess::List allList = access->allRecords(); 578 Opie::OPimContactAccess::List allList = access->allRecords();
585 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 579 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
586 c = *it; 580 c = *it;
587 581
588 delete access; 582 delete access;
589 } else { 583 } else {
590 unlink( beamfile ); // delete if exists 584 unlink( beamfile ); // delete if exists
591 mkdir("/tmp/obex/", 0755); 585 mkdir("/tmp/obex/", 0755);
592 c = m_abView -> currentEntry(); 586 c = m_abView -> currentEntry();
593 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 587 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
594 beamfile ); 588 beamfile );
595 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 589 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
596 access->add( c ); 590 access->add( c );
597 access->save(); 591 access->save();
598 delete access; 592 delete access;
599 593
600 beamFilename = beamfile; 594 beamFilename = beamfile;
601 } 595 }
602 596
603 owarn << "Beaming: " << beamFilename << oendl; 597 owarn << "Beaming: " << beamFilename << oendl;
604*/ 598*/
605 599
606#if 0 600#if 0
607 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 601 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
608 602
609 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 603 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
610 604
611 QString name = "contact.vcf"; 605 QString name = "contact.vcf";
612 606
613 QString fileName = dirName + "/" + name; 607 QString fileName = dirName + "/" + name;
614#endif 608#endif
615 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 609 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
616 // 610 //
617 QString fileName = "/tmp/kdepimbeamfile"; 611 QString fileName = "/tmp/kdepimbeamfile";
618 612
619 613
620 //QDir().mkdir( dirName, true ); 614 //QDir().mkdir( dirName, true );
621 615
622 QFile outFile(fileName); 616 QFile outFile(fileName);
623 KABC::VCardConverter converter; 617 KABC::VCardConverter converter;
624 QString description; 618 QString description;
625 619
626 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 620 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
627 621
628 QTextStream t( &outFile ); // use a text stream 622 QTextStream t( &outFile ); // use a text stream
629 t.setEncoding( QTextStream::UnicodeUTF8 ); 623 t.setEncoding( QTextStream::UnicodeUTF8 );
630 624
631 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 625 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
632 KABC::Addressee a = mAddressBook->findByUid( *it ); 626 KABC::Addressee a = mAddressBook->findByUid( *it );
633 627
634 if ( a.isEmpty() ) 628 if ( a.isEmpty() )
635 continue; 629 continue;
636 630
637 if (description.isEmpty()) 631 if (description.isEmpty())
638 description = a.formattedName(); 632 description = a.formattedName();
639 633
640 QString vcard; 634 QString vcard;
641 converter.addresseeToVCard( a, vcard ); 635 converter.addresseeToVCard( a, vcard );
642 t << vcard; 636 t << vcard;
643 637
644 } 638 }
645 } else { 639 } else {
646 qDebug("Error open temp beam file "); 640 qDebug("Error open temp beam file ");
647 return; 641 return;
648 } 642 }
649 643
650 outFile.close(); 644 outFile.close();
651 645
652#ifndef DESKTOP_VERSION 646#ifndef DESKTOP_VERSION
653 Ir *ir = new Ir( this ); 647 Ir *ir = new Ir( this );
654 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 648 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
655 ir->send( fileName, description, "text/x-vCard" ); 649 ir->send( fileName, description, "text/x-vCard" );
656#endif 650#endif
657 651
658} 652}
659 653
660void KABCore::beamDone( Ir *ir ) 654void KABCore::beamDone( Ir *ir )
661{ 655{
662#ifndef DESKTOP_VERSION 656#ifndef DESKTOP_VERSION
663 delete ir; 657 delete ir;
664#endif 658#endif
665} 659}
666 660
667 661
668void KABCore::browse( const QString& url ) 662void KABCore::browse( const QString& url )
669{ 663{
670#ifndef KAB_EMBEDDED 664#ifndef KAB_EMBEDDED
671 kapp->invokeBrowser( url ); 665 kapp->invokeBrowser( url );
672#else //KAB_EMBEDDED 666#else //KAB_EMBEDDED
673 qDebug("KABCore::browse must be fixed"); 667 qDebug("KABCore::browse must be fixed");
674#endif //KAB_EMBEDDED 668#endif //KAB_EMBEDDED
675} 669}
676 670
677void KABCore::selectAllContacts() 671void KABCore::selectAllContacts()
678{ 672{
679 mViewManager->setSelected( QString::null, true ); 673 mViewManager->setSelected( QString::null, true );
680} 674}
681 675
682void KABCore::deleteContacts() 676void KABCore::deleteContacts()
683{ 677{
684 QStringList uidList = mViewManager->selectedUids(); 678 QStringList uidList = mViewManager->selectedUids();
685 deleteContacts( uidList ); 679 deleteContacts( uidList );
686} 680}
687 681
688void KABCore::deleteContacts( const QStringList &uids ) 682void KABCore::deleteContacts( const QStringList &uids )
689{ 683{
690 if ( uids.count() > 0 ) { 684 if ( uids.count() > 0 ) {
691 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 685 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
692 UndoStack::instance()->push( command ); 686 UndoStack::instance()->push( command );
693 RedoStack::instance()->clear(); 687 RedoStack::instance()->clear();
694 688
695 // now if we deleted anything, refresh 689 // now if we deleted anything, refresh
696 setContactSelected( QString::null ); 690 setContactSelected( QString::null );
697 setModified( true ); 691 setModified( true );
698 } 692 }
699} 693}
700 694
701void KABCore::copyContacts() 695void KABCore::copyContacts()
702{ 696{
703 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 697 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
704 698
705 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 699 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
706 700
707 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 701 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
708 702
709 QClipboard *cb = QApplication::clipboard(); 703 QClipboard *cb = QApplication::clipboard();
710 cb->setText( clipText ); 704 cb->setText( clipText );
711} 705}
712 706
713void KABCore::cutContacts() 707void KABCore::cutContacts()
714{ 708{
715 QStringList uidList = mViewManager->selectedUids(); 709 QStringList uidList = mViewManager->selectedUids();
716 710
717//US if ( uidList.size() > 0 ) { 711//US if ( uidList.size() > 0 ) {
718 if ( uidList.count() > 0 ) { 712 if ( uidList.count() > 0 ) {
719 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 713 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
720 UndoStack::instance()->push( command ); 714 UndoStack::instance()->push( command );
721 RedoStack::instance()->clear(); 715 RedoStack::instance()->clear();
722 716
723 setModified( true ); 717 setModified( true );
724 } 718 }
725} 719}
726 720
727void KABCore::pasteContacts() 721void KABCore::pasteContacts()
728{ 722{
729 QClipboard *cb = QApplication::clipboard(); 723 QClipboard *cb = QApplication::clipboard();
730 724
731 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 725 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
732 726
733 pasteContacts( list ); 727 pasteContacts( list );
734} 728}
735 729
736void KABCore::pasteContacts( KABC::Addressee::List &list ) 730void KABCore::pasteContacts( KABC::Addressee::List &list )
737{ 731{
738 KABC::Resource *resource = requestResource( this ); 732 KABC::Resource *resource = requestResource( this );
739 KABC::Addressee::List::Iterator it; 733 KABC::Addressee::List::Iterator it;
740 for ( it = list.begin(); it != list.end(); ++it ) 734 for ( it = list.begin(); it != list.end(); ++it )
741 (*it).setResource( resource ); 735 (*it).setResource( resource );
742 736
743 PwPasteCommand *command = new PwPasteCommand( this, list ); 737 PwPasteCommand *command = new PwPasteCommand( this, list );
744 UndoStack::instance()->push( command ); 738 UndoStack::instance()->push( command );
745 RedoStack::instance()->clear(); 739 RedoStack::instance()->clear();
746 740
747 setModified( true ); 741 setModified( true );
748} 742}
749 743
750void KABCore::setWhoAmI() 744void KABCore::setWhoAmI()
751{ 745{
752 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 746 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
753 747
754 if ( addrList.count() > 1 ) { 748 if ( addrList.count() > 1 ) {
755 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 749 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
756 return; 750 return;
757 } 751 }
758 752
759 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 753 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
760 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 754 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
761 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 755 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
762} 756}
763 757
764void KABCore::setCategories() 758void KABCore::setCategories()
765{ 759{
766 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 760 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
767 if ( !dlg.exec() ) 761 if ( !dlg.exec() )
768 return; 762 return;
769 763
770 bool merge = false; 764 bool merge = false;
771 QString msg = i18n( "Merge with existing categories?" ); 765 QString msg = i18n( "Merge with existing categories?" );
772 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 766 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
773 merge = true; 767 merge = true;
774 768
775 QStringList categories = dlg.selectedCategories(); 769 QStringList categories = dlg.selectedCategories();
776 770
777 QStringList uids = mViewManager->selectedUids(); 771 QStringList uids = mViewManager->selectedUids();
778 QStringList::Iterator it; 772 QStringList::Iterator it;
779 for ( it = uids.begin(); it != uids.end(); ++it ) { 773 for ( it = uids.begin(); it != uids.end(); ++it ) {
780 KABC::Addressee addr = mAddressBook->findByUid( *it ); 774 KABC::Addressee addr = mAddressBook->findByUid( *it );
781 if ( !addr.isEmpty() ) { 775 if ( !addr.isEmpty() ) {
782 if ( !merge ) 776 if ( !merge )
783 addr.setCategories( categories ); 777 addr.setCategories( categories );
784 else { 778 else {
785 QStringList addrCategories = addr.categories(); 779 QStringList addrCategories = addr.categories();
786 QStringList::Iterator catIt; 780 QStringList::Iterator catIt;
787 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 781 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
788 if ( !addrCategories.contains( *catIt ) ) 782 if ( !addrCategories.contains( *catIt ) )
789 addrCategories.append( *catIt ); 783 addrCategories.append( *catIt );
790 } 784 }
791 addr.setCategories( addrCategories ); 785 addr.setCategories( addrCategories );
792 } 786 }
793 787
794 mAddressBook->insertAddressee( addr ); 788 mAddressBook->insertAddressee( addr );
795 } 789 }
796 } 790 }
797 791
798 if ( uids.count() > 0 ) 792 if ( uids.count() > 0 )
799 setModified( true ); 793 setModified( true );
800} 794}
801 795
802void KABCore::setSearchFields( const KABC::Field::List &fields ) 796void KABCore::setSearchFields( const KABC::Field::List &fields )
803{ 797{
804 mIncSearchWidget->setFields( fields ); 798 mIncSearchWidget->setFields( fields );
805} 799}
806 800
807void KABCore::incrementalSearch( const QString& text ) 801void KABCore::incrementalSearch( const QString& text )
808{ 802{
809 mViewManager->setSelected( QString::null, false ); 803 mViewManager->setSelected( QString::null, false );
810 804
811 if ( !text.isEmpty() ) { 805 if ( !text.isEmpty() ) {
812 KABC::Field *field = mIncSearchWidget->currentField(); 806 KABC::Field *field = mIncSearchWidget->currentField();
813 807
814 QString pattern = text.lower(); 808 QString pattern = text.lower();
815 809
816#if 1 //KDE_VERSION >= 319 810#if 1 //KDE_VERSION >= 319
817 KABC::AddresseeList list( mAddressBook->allAddressees() ); 811 KABC::AddresseeList list( mAddressBook->allAddressees() );
818 if ( field ) { 812 if ( field ) {
819 list.sortByField( field ); 813 list.sortByField( field );
820 KABC::AddresseeList::Iterator it; 814 KABC::AddresseeList::Iterator it;
821 for ( it = list.begin(); it != list.end(); ++it ) { 815 for ( it = list.begin(); it != list.end(); ++it ) {
822 if ( field->value( *it ).lower().startsWith( pattern ) ) { 816 if ( field->value( *it ).lower().startsWith( pattern ) ) {
823 mViewManager->setSelected( (*it).uid(), true ); 817 mViewManager->setSelected( (*it).uid(), true );
824 return; 818 return;
825 } 819 }
826 } 820 }
827 } else { 821 } else {
828 KABC::AddresseeList::Iterator it; 822 KABC::AddresseeList::Iterator it;
829 for ( it = list.begin(); it != list.end(); ++it ) { 823 for ( it = list.begin(); it != list.end(); ++it ) {
830 KABC::Field::List fieldList = mIncSearchWidget->fields(); 824 KABC::Field::List fieldList = mIncSearchWidget->fields();
831 KABC::Field::List::ConstIterator fieldIt; 825 KABC::Field::List::ConstIterator fieldIt;
832 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { 826 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
833 if ( (*fieldIt)->value( *it ).lower().startsWith( pattern ) ) { 827 if ( (*fieldIt)->value( *it ).lower().startsWith( pattern ) ) {
834 mViewManager->setSelected( (*it).uid(), true ); 828 mViewManager->setSelected( (*it).uid(), true );
835 return; 829 return;
836 } 830 }
837 } 831 }
838 } 832 }
839 } 833 }
840#else 834#else
841 KABC::AddressBook::Iterator it; 835 KABC::AddressBook::Iterator it;
842 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 836 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
843 if ( field ) { 837 if ( field ) {
844 if ( field->value( *it ).lower().startsWith( pattern ) ) { 838 if ( field->value( *it ).lower().startsWith( pattern ) ) {
845 mViewManager->setSelected( (*it).uid(), true ); 839 mViewManager->setSelected( (*it).uid(), true );
846 return; 840 return;
847 } 841 }
848 } else { 842 } else {
849 KABC::Field::List fieldList = mIncSearchWidget->fields(); 843 KABC::Field::List fieldList = mIncSearchWidget->fields();
850 KABC::Field::List::ConstIterator fieldIt; 844 KABC::Field::List::ConstIterator fieldIt;
851 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { 845 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
852 if ( (*fieldIt)->value( *it ).lower().startsWith( pattern ) ) { 846 if ( (*fieldIt)->value( *it ).lower().startsWith( pattern ) ) {
853 mViewManager->setSelected( (*it).uid(), true ); 847 mViewManager->setSelected( (*it).uid(), true );
854 return; 848 return;
855 } 849 }
856 } 850 }
857 } 851 }
858 } 852 }
859#endif 853#endif
860 } 854 }
861} 855}
862 856
863void KABCore::setModified() 857void KABCore::setModified()
864{ 858{
865 setModified( true ); 859 setModified( true );
866} 860}
867 861
868void KABCore::setModifiedWOrefresh() 862void KABCore::setModifiedWOrefresh()
869{ 863{
870 // qDebug("KABCore::setModifiedWOrefresh() "); 864 // qDebug("KABCore::setModifiedWOrefresh() ");
871 mModified = true; 865 mModified = true;
872 mActionSave->setEnabled( mModified ); 866 mActionSave->setEnabled( mModified );
873#ifdef DESKTOP_VERSION 867#ifdef DESKTOP_VERSION
874 mDetails->refreshView(); 868 mDetails->refreshView();
875#endif 869#endif
876 870
877} 871}
878void KABCore::setModified( bool modified ) 872void KABCore::setModified( bool modified )
879{ 873{
880 mModified = modified; 874 mModified = modified;
881 mActionSave->setEnabled( mModified ); 875 mActionSave->setEnabled( mModified );
882 876
883 if ( modified ) 877 if ( modified )
884 mJumpButtonBar->recreateButtons(); 878 mJumpButtonBar->recreateButtons();
885 879
886 mViewManager->refreshView(); 880 mViewManager->refreshView();
887 mDetails->refreshView(); 881 mDetails->refreshView();
888 882
889} 883}
890 884
891bool KABCore::modified() const 885bool KABCore::modified() const
892{ 886{
893 return mModified; 887 return mModified;
894} 888}
895 889
896void KABCore::contactModified( const KABC::Addressee &addr ) 890void KABCore::contactModified( const KABC::Addressee &addr )
897{ 891{
898 892
899 Command *command = 0; 893 Command *command = 0;
900 QString uid; 894 QString uid;
901 895
902 // check if it exists already 896 // check if it exists already
903 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 897 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
904 if ( origAddr.isEmpty() ) 898 if ( origAddr.isEmpty() )
905 command = new PwNewCommand( mAddressBook, addr ); 899 command = new PwNewCommand( mAddressBook, addr );
906 else { 900 else {
907 command = new PwEditCommand( mAddressBook, origAddr, addr ); 901 command = new PwEditCommand( mAddressBook, origAddr, addr );
908 uid = addr.uid(); 902 uid = addr.uid();
909 } 903 }
910 904
911 UndoStack::instance()->push( command ); 905 UndoStack::instance()->push( command );
912 RedoStack::instance()->clear(); 906 RedoStack::instance()->clear();
913 907
914 setModified( true ); 908 setModified( true );
915} 909}
916 910
917void KABCore::newContact() 911void KABCore::newContact()
918{ 912{
919 913
920 914
921 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 915 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
922 916
923 QPtrList<KRES::Resource> kresResources; 917 QPtrList<KRES::Resource> kresResources;
924 QPtrListIterator<KABC::Resource> it( kabcResources ); 918 QPtrListIterator<KABC::Resource> it( kabcResources );
925 KABC::Resource *resource; 919 KABC::Resource *resource;
926 while ( ( resource = it.current() ) != 0 ) { 920 while ( ( resource = it.current() ) != 0 ) {
927 ++it; 921 ++it;
928 if ( !resource->readOnly() ) { 922 if ( !resource->readOnly() ) {
929 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 923 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
930 if ( res ) 924 if ( res )
931 kresResources.append( res ); 925 kresResources.append( res );
932 } 926 }
933 } 927 }
934 928
935 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 929 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
936 resource = static_cast<KABC::Resource*>( res ); 930 resource = static_cast<KABC::Resource*>( res );
937 931
938 if ( resource ) { 932 if ( resource ) {
939 KABC::Addressee addr; 933 KABC::Addressee addr;
940 addr.setResource( resource ); 934 addr.setResource( resource );
941 mEditorDialog->setAddressee( addr ); 935 mEditorDialog->setAddressee( addr );
942 KApplication::execDialog ( mEditorDialog ); 936 KApplication::execDialog ( mEditorDialog );
943 937
944 } else 938 } else
945 return; 939 return;
946 940
947 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 941 // mEditorDict.insert( dialog->addressee().uid(), dialog );
948 942
949 943
950} 944}
951 945
952void KABCore::addEmail( QString aStr ) 946void KABCore::addEmail( QString aStr )
953{ 947{
954#ifndef KAB_EMBEDDED 948#ifndef KAB_EMBEDDED
955 QString fullName, email; 949 QString fullName, email;
956 950
957 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 951 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
958 952
959 // Try to lookup the addressee matching the email address 953 // Try to lookup the addressee matching the email address
960 bool found = false; 954 bool found = false;
961 QStringList emailList; 955 QStringList emailList;
962 KABC::AddressBook::Iterator it; 956 KABC::AddressBook::Iterator it;
963 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 957 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
964 emailList = (*it).emails(); 958 emailList = (*it).emails();
965 if ( emailList.contains( email ) > 0 ) { 959 if ( emailList.contains( email ) > 0 ) {
966 found = true; 960 found = true;
967 (*it).setNameFromString( fullName ); 961 (*it).setNameFromString( fullName );
968 editContact( (*it).uid() ); 962 editContact( (*it).uid() );
969 } 963 }
970 } 964 }
971 965
972 if ( !found ) { 966 if ( !found ) {
973 KABC::Addressee addr; 967 KABC::Addressee addr;
974 addr.setNameFromString( fullName ); 968 addr.setNameFromString( fullName );
975 addr.insertEmail( email, true ); 969 addr.insertEmail( email, true );
976 970
977 mAddressBook->insertAddressee( addr ); 971 mAddressBook->insertAddressee( addr );
978 mViewManager->refreshView( addr.uid() ); 972 mViewManager->refreshView( addr.uid() );
979 editContact( addr.uid() ); 973 editContact( addr.uid() );
980 } 974 }
981#else //KAB_EMBEDDED 975#else //KAB_EMBEDDED
982 qDebug("KABCore::addEmail finsih method"); 976 qDebug("KABCore::addEmail finsih method");
983#endif //KAB_EMBEDDED 977#endif //KAB_EMBEDDED
984} 978}
985 979
986void KABCore::importVCard( const KURL &url, bool showPreview ) 980void KABCore::importVCard( const KURL &url, bool showPreview )
987{ 981{
988 mXXPortManager->importVCard( url, showPreview ); 982 mXXPortManager->importVCard( url, showPreview );
989} 983}
990void KABCore::importFromOL() 984void KABCore::importFromOL()
991{ 985{
992#ifdef _WIN32_ 986#ifdef _WIN32_
993 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 987 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
994 idgl->exec(); 988 idgl->exec();
995 KABC::Addressee::List list = idgl->getAddressList(); 989 KABC::Addressee::List list = idgl->getAddressList();
996 if ( list.count() > 0 ) { 990 if ( list.count() > 0 ) {
997 KABC::Addressee::List listNew; 991 KABC::Addressee::List listNew;
998 KABC::Addressee::List listExisting; 992 KABC::Addressee::List listExisting;
999 KABC::Addressee::List::Iterator it; 993 KABC::Addressee::List::Iterator it;
1000 KABC::AddressBook::Iterator iter; 994 KABC::AddressBook::Iterator iter;
1001 for ( it = list.begin(); it != list.end(); ++it ) { 995 for ( it = list.begin(); it != list.end(); ++it ) {
1002 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 996 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1003 listNew.append( (*it) ); 997 listNew.append( (*it) );
1004 else 998 else
1005 listExisting.append( (*it) ); 999 listExisting.append( (*it) );
1006 } 1000 }
1007 if ( listExisting.count() > 0 ) 1001 if ( listExisting.count() > 0 )
1008 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1002 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1009 if ( listNew.count() > 0 ) { 1003 if ( listNew.count() > 0 ) {
1010 pasteWithNewUid = false; 1004 pasteWithNewUid = false;
1011 pasteContacts( listNew ); 1005 pasteContacts( listNew );
1012 pasteWithNewUid = true; 1006 pasteWithNewUid = true;
1013 } 1007 }
1014 } 1008 }
1015 delete idgl; 1009 delete idgl;
1016#endif 1010#endif
1017} 1011}
1018 1012
1019void KABCore::importVCard( const QString &vCard, bool showPreview ) 1013void KABCore::importVCard( const QString &vCard, bool showPreview )
1020{ 1014{
1021 mXXPortManager->importVCard( vCard, showPreview ); 1015 mXXPortManager->importVCard( vCard, showPreview );
1022} 1016}
1023 1017
1024//US added a second method without defaultparameter 1018//US added a second method without defaultparameter
1025void KABCore::editContact2() { 1019void KABCore::editContact2() {
1026 editContact( QString::null ); 1020 editContact( QString::null );
1027} 1021}
1028 1022
1029void KABCore::editContact( const QString &uid ) 1023void KABCore::editContact( const QString &uid )
1030{ 1024{
1031 1025
1032 if ( mExtensionManager->isQuickEditVisible() ) 1026 if ( mExtensionManager->isQuickEditVisible() )
1033 return; 1027 return;
1034 1028
1035 // First, locate the contact entry 1029 // First, locate the contact entry
1036 QString localUID = uid; 1030 QString localUID = uid;
1037 if ( localUID.isNull() ) { 1031 if ( localUID.isNull() ) {
1038 QStringList uidList = mViewManager->selectedUids(); 1032 QStringList uidList = mViewManager->selectedUids();
1039 if ( uidList.count() > 0 ) 1033 if ( uidList.count() > 0 )
1040 localUID = *( uidList.at( 0 ) ); 1034 localUID = *( uidList.at( 0 ) );
1041 } 1035 }
1042 1036
1043 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1037 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1044 if ( !addr.isEmpty() ) { 1038 if ( !addr.isEmpty() ) {