summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp138
-rw-r--r--kaddressbook/kabcore.h7
2 files changed, 100 insertions, 45 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 96603e6..6807bed 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -96,434 +96,427 @@
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 192 connect( mViewManager, SIGNAL( executed( const QString& ) ),
193 //small devices show only the details view. bigger devices can edit the entry 193 SLOT( executeContact( const QString& ) ) );
194 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
195 connect( mViewManager, SIGNAL( executed( const QString& ) ),
196 SLOT( editContact( const QString& ) ) );
197 }
198 else
199 {
200 connect( mViewManager, SIGNAL( executed( const QString& ) ),
201 SLOT( showContact( const QString& ) ) );
202 }
203 194
204 connect( mViewManager, SIGNAL( deleteRequest( ) ), 195 connect( mViewManager, SIGNAL( deleteRequest( ) ),
205 SLOT( deleteContacts( ) ) ); 196 SLOT( deleteContacts( ) ) );
206 connect( mViewManager, SIGNAL( modified() ), 197 connect( mViewManager, SIGNAL( modified() ),
207 SLOT( setModified() ) ); 198 SLOT( setModified() ) );
208 199
209 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 200 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
201 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
210 202
211 connect( mXXPortManager, SIGNAL( modified() ), 203 connect( mXXPortManager, SIGNAL( modified() ),
212 SLOT( setModified() ) ); 204 SLOT( setModified() ) );
213 205
214 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 206 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
215 SLOT( incrementalSearch( const QString& ) ) ); 207 SLOT( incrementalSearch( const QString& ) ) );
216 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 208 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
217 mJumpButtonBar, SLOT( recreateButtons() ) ); 209 mJumpButtonBar, SLOT( recreateButtons() ) );
218 210
219 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 211 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
220 SLOT( sendMail( const QString& ) ) ); 212 SLOT( sendMail( const QString& ) ) );
221 213
222#ifndef KAB_EMBEDDED 214#ifndef KAB_EMBEDDED
223 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 215 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
224 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 216 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
225 217
226 connect( mDetails, SIGNAL( browse( const QString& ) ), 218 connect( mDetails, SIGNAL( browse( const QString& ) ),
227 SLOT( browse( const QString& ) ) ); 219 SLOT( browse( const QString& ) ) );
228 220
229 mAddressBookService = new KAddressBookService( this ); 221 mAddressBookService = new KAddressBookService( this );
230 222
231#endif //KAB_EMBEDDED 223#endif //KAB_EMBEDDED
232 mEditorDialog = 0; 224 mEditorDialog = 0;
233 createAddresseeEditorDialog( this ); 225 createAddresseeEditorDialog( this );
234 setModified( false ); 226 setModified( false );
235} 227}
236 228
237KABCore::~KABCore() 229KABCore::~KABCore()
238{ 230{
239 // save(); 231 // save();
240 //saveSettings(); 232 //saveSettings();
241 //KABPrefs::instance()->writeConfig(); 233 //KABPrefs::instance()->writeConfig();
242 delete AddresseeConfig::instance(); 234 delete AddresseeConfig::instance();
243 mAddressBook = 0; 235 mAddressBook = 0;
244 KABC::StdAddressBook::close(); 236 KABC::StdAddressBook::close();
245} 237}
246 238
247void KABCore::restoreSettings() 239void KABCore::restoreSettings()
248{ 240{
241 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
242
249 bool state; 243 bool state;
250 244
251 //small devices have at startup the details view disabled 245 if (mMultipleViewsAtOnce)
252 if (KGlobal::getDesktopSize() > KGlobal::Small )
253 state = KABPrefs::instance()->mDetailsPageVisible; 246 state = KABPrefs::instance()->mDetailsPageVisible;
254 else 247 else
255 state = false; 248 state = false;
256 249
257 mActionDetails->setChecked( state ); 250 mActionDetails->setChecked( state );
258 setDetailsVisible( state ); 251 setDetailsVisible( state );
259 252
260 state = KABPrefs::instance()->mJumpButtonBarVisible; 253 state = KABPrefs::instance()->mJumpButtonBarVisible;
261 254
262 mActionJumpBar->setChecked( state ); 255 mActionJumpBar->setChecked( state );
263 setJumpButtonBarVisible( state ); 256 setJumpButtonBarVisible( state );
264 257/*US
265 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 258 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
266 if ( splitterSize.count() == 0 ) { 259 if ( splitterSize.count() == 0 ) {
267 splitterSize.append( width() / 2 ); 260 splitterSize.append( width() / 2 );
268 splitterSize.append( width() / 2 ); 261 splitterSize.append( width() / 2 );
269 } 262 }
270 mMiniSplitter->setSizes( splitterSize ); 263 mMiniSplitter->setSizes( splitterSize );
271 if ( mExtensionBarSplitter ) { 264 if ( mExtensionBarSplitter ) {
272 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 265 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
273 if ( splitterSize.count() == 0 ) { 266 if ( splitterSize.count() == 0 ) {
274 splitterSize.append( width() / 2 ); 267 splitterSize.append( width() / 2 );
275 splitterSize.append( width() / 2 ); 268 splitterSize.append( width() / 2 );
276 } 269 }
277 mExtensionBarSplitter->setSizes( splitterSize ); 270 mExtensionBarSplitter->setSizes( splitterSize );
278 271
279 } 272 }
280#ifndef KAB_EMBEDDED 273*/
281 QValueList<int> splitterSize = KABPrefs::instance()->mExtensionsSplitter; 274 mViewManager->restoreSettings();
275 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
276 mExtensionManager->restoreSettings();
277
278 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
282 if ( splitterSize.count() == 0 ) { 279 if ( splitterSize.count() == 0 ) {
283 splitterSize.append( width() / 2 ); 280 splitterSize.append( width() / 2 );
284 splitterSize.append( width() / 2 ); 281 splitterSize.append( width() / 2 );
285 } 282 }
286 mExtensionBarSplitter->setSizes( splitterSize ); 283 mMiniSplitter->setSizes( splitterSize );
287 284 if ( mExtensionBarSplitter ) {
288 splitterSize = KABPrefs::instance()->mDetailsSplitter; 285 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
289 if ( splitterSize.count() == 0 ) { 286 if ( splitterSize.count() == 0 ) {
290 splitterSize.append( height() / 2 ); 287 splitterSize.append( width() / 2 );
291 splitterSize.append( height() / 2 ); 288 splitterSize.append( width() / 2 );
292 } 289 }
293 mDetailsSplitter->setSizes( splitterSize ); 290 mExtensionBarSplitter->setSizes( splitterSize );
294 291
295 mExtensionManager->restoreSettings(); 292 }
296 293
297#endif //KAB_EMBEDDED
298 294
299 mViewManager->restoreSettings();
300 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
301 mExtensionManager->restoreSettings();
302} 295}
303 296
304void KABCore::saveSettings() 297void KABCore::saveSettings()
305{ 298{
306 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 299 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
307 if ( mExtensionBarSplitter ) 300 if ( mExtensionBarSplitter )
308 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 301 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
309 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 302 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
310 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 303 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
311#ifndef KAB_EMBEDDED 304#ifndef KAB_EMBEDDED
312 305
313 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 306 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
314 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 307 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
315#endif //KAB_EMBEDDED 308#endif //KAB_EMBEDDED
316 mExtensionManager->saveSettings(); 309 mExtensionManager->saveSettings();
317 mViewManager->saveSettings(); 310 mViewManager->saveSettings();
318 311
319 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 312 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
320} 313}
321 314
322KABC::AddressBook *KABCore::addressBook() const 315KABC::AddressBook *KABCore::addressBook() const
323{ 316{
324 return mAddressBook; 317 return mAddressBook;
325} 318}
326 319
327KConfig *KABCore::config() 320KConfig *KABCore::config()
328{ 321{
329#ifndef KAB_EMBEDDED 322#ifndef KAB_EMBEDDED
330 return KABPrefs::instance()->config(); 323 return KABPrefs::instance()->config();
331#else //KAB_EMBEDDED 324#else //KAB_EMBEDDED
332 return KABPrefs::instance()->getConfig(); 325 return KABPrefs::instance()->getConfig();
333#endif //KAB_EMBEDDED 326#endif //KAB_EMBEDDED
334} 327}
335 328
336KActionCollection *KABCore::actionCollection() const 329KActionCollection *KABCore::actionCollection() const
337{ 330{
338 return mGUIClient->actionCollection(); 331 return mGUIClient->actionCollection();
339} 332}
340 333
341KABC::Field *KABCore::currentSearchField() const 334KABC::Field *KABCore::currentSearchField() const
342{ 335{
343 if (mIncSearchWidget) 336 if (mIncSearchWidget)
344 return mIncSearchWidget->currentField(); 337 return mIncSearchWidget->currentField();
345 else 338 else
346 return 0; 339 return 0;
347} 340}
348 341
349QStringList KABCore::selectedUIDs() const 342QStringList KABCore::selectedUIDs() const
350{ 343{
351 return mViewManager->selectedUids(); 344 return mViewManager->selectedUids();
352} 345}
353 346
354KABC::Resource *KABCore::requestResource( QWidget *parent ) 347KABC::Resource *KABCore::requestResource( QWidget *parent )
355{ 348{
356 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 349 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
357 350
358 QPtrList<KRES::Resource> kresResources; 351 QPtrList<KRES::Resource> kresResources;
359 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 352 QPtrListIterator<KABC::Resource> resIt( kabcResources );
360 KABC::Resource *resource; 353 KABC::Resource *resource;
361 while ( ( resource = resIt.current() ) != 0 ) { 354 while ( ( resource = resIt.current() ) != 0 ) {
362 ++resIt; 355 ++resIt;
363 if ( !resource->readOnly() ) { 356 if ( !resource->readOnly() ) {
364 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 357 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
365 if ( res ) 358 if ( res )
366 kresResources.append( res ); 359 kresResources.append( res );
367 } 360 }
368 } 361 }
369 362
370 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 363 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
371 return static_cast<KABC::Resource*>( res ); 364 return static_cast<KABC::Resource*>( res );
372} 365}
373 366
374#ifndef KAB_EMBEDDED 367#ifndef KAB_EMBEDDED
375KAboutData *KABCore::createAboutData() 368KAboutData *KABCore::createAboutData()
376#else //KAB_EMBEDDED 369#else //KAB_EMBEDDED
377void KABCore::createAboutData() 370void KABCore::createAboutData()
378#endif //KAB_EMBEDDED 371#endif //KAB_EMBEDDED
379{ 372{
380#ifndef KAB_EMBEDDED 373#ifndef KAB_EMBEDDED
381 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 374 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
382 "3.1", I18N_NOOP( "The KDE Address Book" ), 375 "3.1", I18N_NOOP( "The KDE Address Book" ),
383 KAboutData::License_GPL_V2, 376 KAboutData::License_GPL_V2,
384 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 377 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
385 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 378 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
386 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 379 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
387 about->addAuthor( "Cornelius Schumacher", 380 about->addAuthor( "Cornelius Schumacher",
388 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 381 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
389 "schumacher@kde.org" ); 382 "schumacher@kde.org" );
390 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 383 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
391 "mpilone@slac.com" ); 384 "mpilone@slac.com" );
392 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 385 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
393 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 386 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
394 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 387 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
395 "michel@klaralvdalens-datakonsult.se" ); 388 "michel@klaralvdalens-datakonsult.se" );
396 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 389 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
397 "hansen@kde.org" ); 390 "hansen@kde.org" );
398 391
399 return about; 392 return about;
400#endif //KAB_EMBEDDED 393#endif //KAB_EMBEDDED
401 394
402 QString version; 395 QString version;
403#include <../version> 396#include <../version>
404 QMessageBox::about( this, "About KAddressbook/Pi", 397 QMessageBox::about( this, "About KAddressbook/Pi",
405 "KAddressbook/Platform-independent\n" 398 "KAddressbook/Platform-independent\n"
406 "(KA/Pi) " +version + " - " + 399 "(KA/Pi) " +version + " - " +
407#ifdef DESKTOP_VERSION 400#ifdef DESKTOP_VERSION
408 "Desktop Edition\n" 401 "Desktop Edition\n"
409#else 402#else
410 "PDA-Edition\n" 403 "PDA-Edition\n"
411 "for: Zaurus 5500 / 7x0 / 8x0\n" 404 "for: Zaurus 5500 / 7x0 / 8x0\n"
412#endif 405#endif
413 406
414 "(c) 2004 Ulf Schenk\n" 407 "(c) 2004 Ulf Schenk\n"
415 "(c) 1997-2003, The KDE PIM Team\n" 408 "(c) 1997-2003, The KDE PIM Team\n"
416 "Tobias Koenig Current maintainer tokoe@kde.org\n" 409 "Tobias Koenig Current maintainer tokoe@kde.org\n"
417 "Don Sanders Original author\n" 410 "Don Sanders Original author\n"
418 "Cornelius Schumacher Co-maintainer schumacher@kde.org\n" 411 "Cornelius Schumacher Co-maintainer schumacher@kde.org\n"
419 "Mike Pilone GUI and framework redesign mpilone@slac.com\n" 412 "Mike Pilone GUI and framework redesign mpilone@slac.com\n"
420 "Greg Stern DCOP interface\n" 413 "Greg Stern DCOP interface\n"
421 "Mark Westcot Contact pinning\n" 414 "Mark Westcot Contact pinning\n"
422 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 415 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
423 "Steffen Hansen LDAP Lookup hansen@kde.org\n" 416 "Steffen Hansen LDAP Lookup hansen@kde.org\n"
424#ifdef _WIN32_ 417#ifdef _WIN32_
425 "(c) 2004 Lutz Rogowski Import from OL rogowski@kde.org\n" 418 "(c) 2004 Lutz Rogowski Import from OL rogowski@kde.org\n"
426#endif 419#endif
427 ); 420 );
428} 421}
429 422
430void KABCore::setContactSelected( const QString &uid ) 423void KABCore::setContactSelected( const QString &uid )
431{ 424{
432 KABC::Addressee addr = mAddressBook->findByUid( uid ); 425 KABC::Addressee addr = mAddressBook->findByUid( uid );
433//US if ( !mDetails->isHidden() ) 426 if ( !mDetails->isHidden() )
434 mDetails->setAddressee( addr ); 427 mDetails->setAddressee( addr );
435 428
436 if ( !addr.isEmpty() ) { 429 if ( !addr.isEmpty() ) {
437 emit contactSelected( addr.formattedName() ); 430 emit contactSelected( addr.formattedName() );
438 KABC::Picture pic = addr.photo(); 431 KABC::Picture pic = addr.photo();
439 if ( pic.isIntern() ) { 432 if ( pic.isIntern() ) {
440//US emit contactSelected( pic.data() ); 433//US emit contactSelected( pic.data() );
441//US instead use: 434//US instead use:
442 QPixmap px; 435 QPixmap px;
443 if (pic.data().isNull() != true) 436 if (pic.data().isNull() != true)
444 { 437 {
445 px.convertFromImage(pic.data()); 438 px.convertFromImage(pic.data());
446 } 439 }
447 440
448 emit contactSelected( px ); 441 emit contactSelected( px );
449 } 442 }
450 } 443 }
451 444
452 445
453 mExtensionManager->setSelectionChanged(); 446 mExtensionManager->setSelectionChanged();
454 447
455 // update the actions 448 // update the actions
456 bool selected = !uid.isEmpty(); 449 bool selected = !uid.isEmpty();
457 450
458 if ( mReadWrite ) { 451 if ( mReadWrite ) {
459 mActionCut->setEnabled( selected ); 452 mActionCut->setEnabled( selected );
460 mActionPaste->setEnabled( selected ); 453 mActionPaste->setEnabled( selected );
461 } 454 }
462 455
463 mActionCopy->setEnabled( selected ); 456 mActionCopy->setEnabled( selected );
464 mActionDelete->setEnabled( selected ); 457 mActionDelete->setEnabled( selected );
465 mActionEditAddressee->setEnabled( selected ); 458 mActionEditAddressee->setEnabled( selected );
466 mActionMail->setEnabled( selected ); 459 mActionMail->setEnabled( selected );
467 mActionMailVCard->setEnabled( selected ); 460 mActionMailVCard->setEnabled( selected );
468 //if (mActionBeam) 461 //if (mActionBeam)
469 //mActionBeam->setEnabled( selected ); 462 //mActionBeam->setEnabled( selected );
470 463
471 if (mActionBeamVCard) 464 if (mActionBeamVCard)
472 mActionBeamVCard->setEnabled( selected ); 465 mActionBeamVCard->setEnabled( selected );
473 466
474 mActionWhoAmI->setEnabled( selected ); 467 mActionWhoAmI->setEnabled( selected );
475 mActionCategories->setEnabled( selected ); 468 mActionCategories->setEnabled( selected );
476} 469}
477 470
478void KABCore::sendMail() 471void KABCore::sendMail()
479{ 472{
480 sendMail( mViewManager->selectedEmails().join( ", " ) ); 473 sendMail( mViewManager->selectedEmails().join( ", " ) );
481} 474}
482 475
483void KABCore::sendMail( const QString& emaillist ) 476void KABCore::sendMail( const QString& emaillist )
484{ 477{
485 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 478 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
486 if (emaillist.contains(",") > 0) 479 if (emaillist.contains(",") > 0)
487 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 480 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
488 else 481 else
489 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 482 ExternalAppHandler::instance()->mailToOneContact( emaillist );
490} 483}
491 484
492 485
493 486
494void KABCore::mailVCard() 487void KABCore::mailVCard()
495{ 488{
496 QStringList uids = mViewManager->selectedUids(); 489 QStringList uids = mViewManager->selectedUids();
497 if ( !uids.isEmpty() ) 490 if ( !uids.isEmpty() )
498 mailVCard( uids ); 491 mailVCard( uids );
499} 492}
500 493
501void KABCore::mailVCard( const QStringList& uids ) 494void KABCore::mailVCard( const QStringList& uids )
502{ 495{
503 QStringList urls; 496 QStringList urls;
504 497
505// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 498// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
506 499
507 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 500 QString dirName = "/tmp/" + KApplication::randomString( 8 );
508 501
509 502
510 503
511 QDir().mkdir( dirName, true ); 504 QDir().mkdir( dirName, true );
512 505
513 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 506 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
514 KABC::Addressee a = mAddressBook->findByUid( *it ); 507 KABC::Addressee a = mAddressBook->findByUid( *it );
515 508
516 if ( a.isEmpty() ) 509 if ( a.isEmpty() )
517 continue; 510 continue;
518 511
519 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 512 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
520 513
521 QString fileName = dirName + "/" + name; 514 QString fileName = dirName + "/" + name;
522 515
523 QFile outFile(fileName); 516 QFile outFile(fileName);
524 517
525 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 518 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
526 KABC::VCardConverter converter; 519 KABC::VCardConverter converter;
527 QString vcard; 520 QString vcard;
528 521
529 converter.addresseeToVCard( a, vcard ); 522 converter.addresseeToVCard( a, vcard );
@@ -964,380 +957,436 @@ void KABCore::addEmail( QString aStr )
964 QString fullName, email; 957 QString fullName, email;
965 958
966 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 959 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
967 960
968 // Try to lookup the addressee matching the email address 961 // Try to lookup the addressee matching the email address
969 bool found = false; 962 bool found = false;
970 QStringList emailList; 963 QStringList emailList;
971 KABC::AddressBook::Iterator it; 964 KABC::AddressBook::Iterator it;
972 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 965 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
973 emailList = (*it).emails(); 966 emailList = (*it).emails();
974 if ( emailList.contains( email ) > 0 ) { 967 if ( emailList.contains( email ) > 0 ) {
975 found = true; 968 found = true;
976 (*it).setNameFromString( fullName ); 969 (*it).setNameFromString( fullName );
977 editContact( (*it).uid() ); 970 editContact( (*it).uid() );
978 } 971 }
979 } 972 }
980 973
981 if ( !found ) { 974 if ( !found ) {
982 KABC::Addressee addr; 975 KABC::Addressee addr;
983 addr.setNameFromString( fullName ); 976 addr.setNameFromString( fullName );
984 addr.insertEmail( email, true ); 977 addr.insertEmail( email, true );
985 978
986 mAddressBook->insertAddressee( addr ); 979 mAddressBook->insertAddressee( addr );
987 mViewManager->refreshView( addr.uid() ); 980 mViewManager->refreshView( addr.uid() );
988 editContact( addr.uid() ); 981 editContact( addr.uid() );
989 } 982 }
990#else //KAB_EMBEDDED 983#else //KAB_EMBEDDED
991 qDebug("KABCore::addEmail finsih method"); 984 qDebug("KABCore::addEmail finsih method");
992#endif //KAB_EMBEDDED 985#endif //KAB_EMBEDDED
993} 986}
994 987
995void KABCore::importVCard( const KURL &url, bool showPreview ) 988void KABCore::importVCard( const KURL &url, bool showPreview )
996{ 989{
997 mXXPortManager->importVCard( url, showPreview ); 990 mXXPortManager->importVCard( url, showPreview );
998} 991}
999void KABCore::importFromOL() 992void KABCore::importFromOL()
1000{ 993{
1001#ifdef _WIN32_ 994#ifdef _WIN32_
1002 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 995 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1003 idgl->exec(); 996 idgl->exec();
1004 KABC::Addressee::List list = idgl->getAddressList(); 997 KABC::Addressee::List list = idgl->getAddressList();
1005 if ( list.count() > 0 ) { 998 if ( list.count() > 0 ) {
1006 KABC::Addressee::List listNew; 999 KABC::Addressee::List listNew;
1007 KABC::Addressee::List listExisting; 1000 KABC::Addressee::List listExisting;
1008 KABC::Addressee::List::Iterator it; 1001 KABC::Addressee::List::Iterator it;
1009 KABC::AddressBook::Iterator iter; 1002 KABC::AddressBook::Iterator iter;
1010 for ( it = list.begin(); it != list.end(); ++it ) { 1003 for ( it = list.begin(); it != list.end(); ++it ) {
1011 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1004 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1012 listNew.append( (*it) ); 1005 listNew.append( (*it) );
1013 else 1006 else
1014 listExisting.append( (*it) ); 1007 listExisting.append( (*it) );
1015 } 1008 }
1016 if ( listExisting.count() > 0 ) 1009 if ( listExisting.count() > 0 )
1017 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1010 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1018 if ( listNew.count() > 0 ) { 1011 if ( listNew.count() > 0 ) {
1019 pasteWithNewUid = false; 1012 pasteWithNewUid = false;
1020 pasteContacts( listNew ); 1013 pasteContacts( listNew );
1021 pasteWithNewUid = true; 1014 pasteWithNewUid = true;
1022 } 1015 }
1023 } 1016 }
1024 delete idgl; 1017 delete idgl;
1025#endif 1018#endif
1026} 1019}
1027 1020
1028void KABCore::importVCard( const QString &vCard, bool showPreview ) 1021void KABCore::importVCard( const QString &vCard, bool showPreview )
1029{ 1022{
1030 mXXPortManager->importVCard( vCard, showPreview ); 1023 mXXPortManager->importVCard( vCard, showPreview );
1031} 1024}
1032 1025
1033//US added a second method without defaultparameter 1026//US added a second method without defaultparameter
1034void KABCore::editContact2() { 1027void KABCore::editContact2() {
1035 editContact( QString::null ); 1028 editContact( QString::null );
1036} 1029}
1037 1030
1038void KABCore::editContact( const QString &uid ) 1031void KABCore::editContact( const QString &uid )
1039{ 1032{
1040 1033
1041 if ( mExtensionManager->isQuickEditVisible() ) 1034 if ( mExtensionManager->isQuickEditVisible() )
1042 return; 1035 return;
1043 1036
1044 // First, locate the contact entry 1037 // First, locate the contact entry
1045 QString localUID = uid; 1038 QString localUID = uid;
1046 if ( localUID.isNull() ) { 1039 if ( localUID.isNull() ) {
1047 QStringList uidList = mViewManager->selectedUids(); 1040 QStringList uidList = mViewManager->selectedUids();
1048 if ( uidList.count() > 0 ) 1041 if ( uidList.count() > 0 )
1049 localUID = *( uidList.at( 0 ) ); 1042 localUID = *( uidList.at( 0 ) );
1050 } 1043 }
1051 1044
1052 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1045 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1053 if ( !addr.isEmpty() ) { 1046 if ( !addr.isEmpty() ) {
1054 mEditorDialog->setAddressee( addr ); 1047 mEditorDialog->setAddressee( addr );
1055 KApplication::execDialog ( mEditorDialog ); 1048 KApplication::execDialog ( mEditorDialog );
1056 } 1049 }
1057} 1050}
1058 1051
1059/** 1052/**
1060 Shows the detail view for the given uid. If the uid is QString::null, 1053 Shows or edits the detail view for the given uid. If the uid is QString::null,
1061 the method will try to find a selected addressee in the view. 1054 the method will try to find a selected addressee in the view.
1062 We call this method only if we use a small device. Bigger devices are calling editContact instead
1063 */ 1055 */
1064void KABCore::showContact( const QString &uid /*US = QString::null*/ ) 1056void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1065{ 1057{
1066 setDetailsVisible( true ); 1058 if ( mMultipleViewsAtOnce )
1067 mActionDetails->setChecked(true); 1059 {
1060 editContact( uid );
1061 }
1062 else
1063 {
1064 setDetailsVisible( true );
1065 mActionDetails->setChecked(true);
1066 }
1067
1068} 1068}
1069 1069
1070void KABCore::save() 1070void KABCore::save()
1071{ 1071{
1072 if ( !mModified ) 1072 if ( !mModified )
1073 return; 1073 return;
1074 QString text = i18n( "There was an error while attempting to save\n the " 1074 QString text = i18n( "There was an error while attempting to save\n the "
1075 "address book. Please check that some \nother application is " 1075 "address book. Please check that some \nother application is "
1076 "not using it. " ); 1076 "not using it. " );
1077 statusMessage(i18n("Saving addressbook ... ")); 1077 statusMessage(i18n("Saving addressbook ... "));
1078#ifndef KAB_EMBEDDED 1078#ifndef KAB_EMBEDDED
1079 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1079 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1080 if ( !b || !b->save() ) { 1080 if ( !b || !b->save() ) {
1081 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1081 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1082 } 1082 }
1083#else //KAB_EMBEDDED 1083#else //KAB_EMBEDDED
1084 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1084 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1085 if ( !b || !b->save() ) { 1085 if ( !b || !b->save() ) {
1086 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1086 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1087 } 1087 }
1088#endif //KAB_EMBEDDED 1088#endif //KAB_EMBEDDED
1089 1089
1090 statusMessage(i18n("Addressbook saved!")); 1090 statusMessage(i18n("Addressbook saved!"));
1091 setModified( false ); 1091 setModified( false );
1092} 1092}
1093 1093
1094void KABCore::statusMessage(QString mess , int time ) 1094void KABCore::statusMessage(QString mess , int time )
1095{ 1095{
1096 //topLevelWidget()->setCaption( mess ); 1096 //topLevelWidget()->setCaption( mess );
1097 // pending setting timer to revome message 1097 // pending setting timer to revome message
1098} 1098}
1099void KABCore::undo() 1099void KABCore::undo()
1100{ 1100{
1101 UndoStack::instance()->undo(); 1101 UndoStack::instance()->undo();
1102 1102
1103 // Refresh the view 1103 // Refresh the view
1104 mViewManager->refreshView(); 1104 mViewManager->refreshView();
1105} 1105}
1106 1106
1107void KABCore::redo() 1107void KABCore::redo()
1108{ 1108{
1109 RedoStack::instance()->redo(); 1109 RedoStack::instance()->redo();
1110 1110
1111 // Refresh the view 1111 // Refresh the view
1112 mViewManager->refreshView(); 1112 mViewManager->refreshView();
1113} 1113}
1114 1114
1115void KABCore::setJumpButtonBarVisible( bool visible ) 1115void KABCore::setJumpButtonBarVisible( bool visible )
1116{ 1116{
1117 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1117 if (mMultipleViewsAtOnce)
1118 {
1118 if ( visible ) 1119 if ( visible )
1119 mJumpButtonBar->show(); 1120 mJumpButtonBar->show();
1120 else 1121 else
1121 mJumpButtonBar->hide(); 1122 mJumpButtonBar->hide();
1122 } 1123 }
1123 else 1124 else
1124 { 1125 {
1125 // for the Z5500, show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1126 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1126 if (mViewManager->isVisible()) 1127 if (mViewManager->isVisible())
1127 { 1128 {
1128 if ( visible ) 1129 if ( visible )
1129 mJumpButtonBar->show(); 1130 mJumpButtonBar->show();
1130 else 1131 else
1131 mJumpButtonBar->hide(); 1132 mJumpButtonBar->hide();
1132 } 1133 }
1133 else 1134 else
1134 { 1135 {
1135 mJumpButtonBar->hide(); 1136 mJumpButtonBar->hide();
1136 } 1137 }
1137 } 1138 }
1138} 1139}
1140
1141
1139void KABCore::setDetailsToState() 1142void KABCore::setDetailsToState()
1140{ 1143{
1141 setDetailsVisible( mActionDetails->isChecked() ); 1144 setDetailsVisible( mActionDetails->isChecked() );
1142} 1145}
1143 1146
1144 1147
1145 1148
1146void KABCore::setDetailsVisible( bool visible ) 1149void KABCore::setDetailsVisible( bool visible )
1147{ 1150{
1148 //US "details visible" has two different meanings for small devices like the 5500 1151 if (visible && mDetails->isHidden())
1149 // compared with large devices like the c series. 1152 {
1153 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1154 if ( addrList.count() > 0 )
1155 mDetails->setAddressee( addrList[ 0 ] );
1156 }
1150 1157
1151 // small devices: mDetails is always visible. But we switch between 1158 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1152 // the listview and the detailview. We do that by changing the splitbar size. 1159 // the listview and the detailview. We do that by changing the splitbar size.
1153 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1160 if (mMultipleViewsAtOnce)
1161 {
1154 if ( visible ) 1162 if ( visible )
1155 mDetails->show(); 1163 mDetails->show();
1156 else 1164 else
1157 mDetails->hide(); 1165 mDetails->hide();
1158 } 1166 }
1159 else 1167 else
1160 { 1168 {
1161 if ( visible ) { 1169 if ( visible ) {
1162 mViewManager->hide(); 1170 mViewManager->hide();
1163 mDetails->show(); 1171 mDetails->show();
1164// mDetails->show();
1165 } 1172 }
1166 else { 1173 else {
1167 mViewManager->show(); 1174 mViewManager->show();
1168 mDetails->hide(); 1175 mDetails->hide();
1169 } 1176 }
1170 setJumpButtonBarVisible( !visible ); 1177 setJumpButtonBarVisible( !visible );
1178 }
1179
1180}
1181
1182void KABCore::extensionChanged( int id )
1183{
1184 //change the details view only for non desktop systems
1185#ifndef DESKTOP_VERSION
1186
1187 if (id == 0)
1188 {
1189 //the user disabled the extension.
1190
1191 if (mMultipleViewsAtOnce)
1192 { // enable detailsview again
1193 setDetailsVisible( true );
1194 mActionDetails->setChecked( true );
1195 }
1196 else
1197 { //go back to the listview
1198 setDetailsVisible( false );
1199 mActionDetails->setChecked( false );
1200 mActionDetails->setEnabled(true);
1201 }
1171 1202
1172 } 1203 }
1204 else
1205 {
1206 //the user enabled the extension.
1207 setDetailsVisible( false );
1208 mActionDetails->setChecked( false );
1209
1210 if (!mMultipleViewsAtOnce)
1211 {
1212 mActionDetails->setEnabled(false);
1213 }
1214
1215 mExtensionManager->setSelectionChanged();
1216
1217 }
1218
1219#endif// DESKTOP_VERSION
1220
1173} 1221}
1174 1222
1223
1175void KABCore::extensionModified( const KABC::Addressee::List &list ) 1224void KABCore::extensionModified( const KABC::Addressee::List &list )
1176{ 1225{
1177 1226
1178 if ( list.count() != 0 ) { 1227 if ( list.count() != 0 ) {
1179 KABC::Addressee::List::ConstIterator it; 1228 KABC::Addressee::List::ConstIterator it;
1180 for ( it = list.begin(); it != list.end(); ++it ) 1229 for ( it = list.begin(); it != list.end(); ++it )
1181 mAddressBook->insertAddressee( *it ); 1230 mAddressBook->insertAddressee( *it );
1182 if ( list.count() > 1 ) 1231 if ( list.count() > 1 )
1183 setModified(); 1232 setModified();
1184 else 1233 else
1185 setModifiedWOrefresh(); 1234 setModifiedWOrefresh();
1186 } 1235 }
1187 if ( list.count() == 0 ) 1236 if ( list.count() == 0 )
1188 mViewManager->refreshView(); 1237 mViewManager->refreshView();
1189 else 1238 else
1190 mViewManager->refreshView( list[ 0 ].uid() ); 1239 mViewManager->refreshView( list[ 0 ].uid() );
1191 1240
1192 1241
1193 1242
1194} 1243}
1195 1244
1196QString KABCore::getNameByPhone( const QString &phone ) 1245QString KABCore::getNameByPhone( const QString &phone )
1197{ 1246{
1198#ifndef KAB_EMBEDDED 1247#ifndef KAB_EMBEDDED
1199 QRegExp r( "[/*/-/ ]" ); 1248 QRegExp r( "[/*/-/ ]" );
1200 QString localPhone( phone ); 1249 QString localPhone( phone );
1201 1250
1202 bool found = false; 1251 bool found = false;
1203 QString ownerName = ""; 1252 QString ownerName = "";
1204 KABC::AddressBook::Iterator iter; 1253 KABC::AddressBook::Iterator iter;
1205 KABC::PhoneNumber::List::Iterator phoneIter; 1254 KABC::PhoneNumber::List::Iterator phoneIter;
1206 KABC::PhoneNumber::List phoneList; 1255 KABC::PhoneNumber::List phoneList;
1207 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1256 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1208 phoneList = (*iter).phoneNumbers(); 1257 phoneList = (*iter).phoneNumbers();
1209 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1258 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1210 ++phoneIter) { 1259 ++phoneIter) {
1211 // Get rid of separator chars so just the numbers are compared. 1260 // Get rid of separator chars so just the numbers are compared.
1212 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1261 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1213 ownerName = (*iter).formattedName(); 1262 ownerName = (*iter).formattedName();
1214 found = true; 1263 found = true;
1215 } 1264 }
1216 } 1265 }
1217 } 1266 }
1218 1267
1219 return ownerName; 1268 return ownerName;
1220#else //KAB_EMBEDDED 1269#else //KAB_EMBEDDED
1221 qDebug("KABCore::getNameByPhone finsih method"); 1270 qDebug("KABCore::getNameByPhone finsih method");
1222 return ""; 1271 return "";
1223#endif //KAB_EMBEDDED 1272#endif //KAB_EMBEDDED
1224 1273
1225} 1274}
1226 1275
1227void KABCore::openConfigDialog() 1276void KABCore::openConfigDialog()
1228{ 1277{
1229 KABPrefs* kab_prefs = KABPrefs::instance(); 1278 KABPrefs* kab_prefs = KABPrefs::instance();
1230 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance(); 1279 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance();
1231 1280
1232 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1281 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1233 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1282 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1234 ConfigureDialog->addModule(kabcfg ); 1283 ConfigureDialog->addModule(kabcfg );
1235 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1284 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1236 ConfigureDialog->addModule(kdelibcfg ); 1285 ConfigureDialog->addModule(kdelibcfg );
1237 1286
1238 1287
1239 1288
1240 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1289 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1241 this, SLOT( configurationChanged() ) ); 1290 this, SLOT( configurationChanged() ) );
1242 connect( ConfigureDialog, SIGNAL( okClicked() ), 1291 connect( ConfigureDialog, SIGNAL( okClicked() ),
1243 this, SLOT( configurationChanged() ) ); 1292 this, SLOT( configurationChanged() ) );
1244 saveSettings(); 1293 saveSettings();
1245 ConfigureDialog->showMaximized(); 1294 ConfigureDialog->showMaximized();
1246 if ( ConfigureDialog->exec() ) 1295 if ( ConfigureDialog->exec() )
1247 KMessageBox::information( this, i18n("If you configured \nExtensions,\nplease restart!\n") ); 1296 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1248 delete ConfigureDialog; 1297 delete ConfigureDialog;
1249} 1298}
1250 1299
1251void KABCore::openLDAPDialog() 1300void KABCore::openLDAPDialog()
1252{ 1301{
1253#ifndef KAB_EMBEDDED 1302#ifndef KAB_EMBEDDED
1254 if ( !mLdapSearchDialog ) { 1303 if ( !mLdapSearchDialog ) {
1255 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1304 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1256 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1305 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1257 SLOT( refreshView() ) ); 1306 SLOT( refreshView() ) );
1258 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1307 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1259 SLOT( setModified() ) ); 1308 SLOT( setModified() ) );
1260 } else 1309 } else
1261 mLdapSearchDialog->restoreSettings(); 1310 mLdapSearchDialog->restoreSettings();
1262 1311
1263 if ( mLdapSearchDialog->isOK() ) 1312 if ( mLdapSearchDialog->isOK() )
1264 mLdapSearchDialog->exec(); 1313 mLdapSearchDialog->exec();
1265#else //KAB_EMBEDDED 1314#else //KAB_EMBEDDED
1266 qDebug("KABCore::openLDAPDialog() finsih method"); 1315 qDebug("KABCore::openLDAPDialog() finsih method");
1267#endif //KAB_EMBEDDED 1316#endif //KAB_EMBEDDED
1268} 1317}
1269 1318
1270void KABCore::print() 1319void KABCore::print()
1271{ 1320{
1272#ifndef KAB_EMBEDDED 1321#ifndef KAB_EMBEDDED
1273 KPrinter printer; 1322 KPrinter printer;
1274 if ( !printer.setup( this ) ) 1323 if ( !printer.setup( this ) )
1275 return; 1324 return;
1276 1325
1277 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1326 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1278 mViewManager->selectedUids(), this ); 1327 mViewManager->selectedUids(), this );
1279 1328
1280 wizard.exec(); 1329 wizard.exec();
1281#else //KAB_EMBEDDED 1330#else //KAB_EMBEDDED
1282 qDebug("KABCore::print() finsih method"); 1331 qDebug("KABCore::print() finsih method");
1283#endif //KAB_EMBEDDED 1332#endif //KAB_EMBEDDED
1284 1333
1285} 1334}
1286 1335
1287 1336
1288void KABCore::addGUIClient( KXMLGUIClient *client ) 1337void KABCore::addGUIClient( KXMLGUIClient *client )
1289{ 1338{
1290 if ( mGUIClient ) 1339 if ( mGUIClient )
1291 mGUIClient->insertChildClient( client ); 1340 mGUIClient->insertChildClient( client );
1292 else 1341 else
1293 KMessageBox::error( this, "no KXMLGUICLient"); 1342 KMessageBox::error( this, "no KXMLGUICLient");
1294} 1343}
1295 1344
1296 1345
1297void KABCore::configurationChanged() 1346void KABCore::configurationChanged()
1298{ 1347{
1299 mExtensionManager->reconfigure(); 1348 mExtensionManager->reconfigure();
1300} 1349}
1301 1350
1302void KABCore::addressBookChanged() 1351void KABCore::addressBookChanged()
1303{ 1352{
1304/*US 1353/*US
1305 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1354 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1306 while ( it.current() ) { 1355 while ( it.current() ) {
1307 if ( it.current()->dirty() ) { 1356 if ( it.current()->dirty() ) {
1308 QString text = i18n( "Data has been changed externally. Unsaved " 1357 QString text = i18n( "Data has been changed externally. Unsaved "
1309 "changes will be lost." ); 1358 "changes will be lost." );
1310 KMessageBox::information( this, text ); 1359 KMessageBox::information( this, text );
1311 } 1360 }
1312 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1361 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1313 ++it; 1362 ++it;
1314 } 1363 }
1315*/ 1364*/
1316 if (mEditorDialog) 1365 if (mEditorDialog)
1317 { 1366 {
1318 if (mEditorDialog->dirty()) 1367 if (mEditorDialog->dirty())
1319 { 1368 {
1320 QString text = i18n( "Data has been changed externally. Unsaved " 1369 QString text = i18n( "Data has been changed externally. Unsaved "
1321 "changes will be lost." ); 1370 "changes will be lost." );
1322 KMessageBox::information( this, text ); 1371 KMessageBox::information( this, text );
1323 } 1372 }
1324 QString currentuid = mEditorDialog->addressee().uid(); 1373 QString currentuid = mEditorDialog->addressee().uid();
1325 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1374 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1326 } 1375 }
1327 mViewManager->refreshView(); 1376 mViewManager->refreshView();
1328// mDetails->refreshView(); 1377// mDetails->refreshView();
1329 1378
1330 1379
1331} 1380}
1332 1381
1333AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1382AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1334 const char *name ) 1383 const char *name )
1335{ 1384{
1336 1385
1337 if ( mEditorDialog == 0 ) { 1386 if ( mEditorDialog == 0 ) {
1338 mEditorDialog = new AddresseeEditorDialog( this, parent, 1387 mEditorDialog = new AddresseeEditorDialog( this, parent,
1339 name ? name : "editorDialog" ); 1388 name ? name : "editorDialog" );
1340 1389
1341 1390
1342 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1391 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1343 SLOT( contactModified( const KABC::Addressee& ) ) ); 1392 SLOT( contactModified( const KABC::Addressee& ) ) );
@@ -1652,241 +1701,244 @@ void KABCore::initActions()
1652#else //KAB_EMBEDDED 1701#else //KAB_EMBEDDED
1653 //qDebug("KABCore::initActions() LDAP has to be implemented"); 1702 //qDebug("KABCore::initActions() LDAP has to be implemented");
1654#endif //KAB_EMBEDDED 1703#endif //KAB_EMBEDDED
1655 1704
1656 1705
1657 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 1706 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
1658 SLOT( setWhoAmI() ), actionCollection(), 1707 SLOT( setWhoAmI() ), actionCollection(),
1659 "set_personal" ); 1708 "set_personal" );
1660 1709
1661 1710
1662 1711
1663 1712
1664 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this, 1713 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this,
1665 SLOT( setCategories() ), actionCollection(), 1714 SLOT( setCategories() ), actionCollection(),
1666 "edit_set_categories" ); 1715 "edit_set_categories" );
1667 1716
1668 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 1717 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
1669 SLOT( removeVoice() ), actionCollection(), 1718 SLOT( removeVoice() ), actionCollection(),
1670 "remove_voice" ); 1719 "remove_voice" );
1671 mActionImportOL = new KAction( i18n( "Import from OL..." ), 0, this, 1720 mActionImportOL = new KAction( i18n( "Import from OL..." ), 0, this,
1672 SLOT( importFromOL() ), actionCollection(), 1721 SLOT( importFromOL() ), actionCollection(),
1673 "import_OL" ); 1722 "import_OL" );
1674#ifdef KAB_EMBEDDED 1723#ifdef KAB_EMBEDDED
1675 mActionLicence = new KAction( i18n( "Licence" ), "licence", 0, 1724 mActionLicence = new KAction( i18n( "Licence" ), "licence", 0,
1676 this, SLOT( showLicence() ), actionCollection(), 1725 this, SLOT( showLicence() ), actionCollection(),
1677 "licence_about_data" ); 1726 "licence_about_data" );
1678 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 1727 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
1679 this, SLOT( createAboutData() ), actionCollection(), 1728 this, SLOT( createAboutData() ), actionCollection(),
1680 "kaddressbook_about_data" ); 1729 "kaddressbook_about_data" );
1681#endif //KAB_EMBEDDED 1730#endif //KAB_EMBEDDED
1682 1731
1683 clipboardDataChanged(); 1732 clipboardDataChanged();
1684 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1733 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1685 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1734 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1686} 1735}
1687 1736
1688//US we need this function, to plug all actions into the correct menues. 1737//US we need this function, to plug all actions into the correct menues.
1689// KDE uses a XML format to plug the actions, but we work her without this overhead. 1738// KDE uses a XML format to plug the actions, but we work her without this overhead.
1690void KABCore::addActionsManually() 1739void KABCore::addActionsManually()
1691{ 1740{
1692//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1741//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1693 1742
1694#ifdef KAB_EMBEDDED 1743#ifdef KAB_EMBEDDED
1695 QPopupMenu *fileMenu = new QPopupMenu( this ); 1744 QPopupMenu *fileMenu = new QPopupMenu( this );
1696 QPopupMenu *editMenu = new QPopupMenu( this ); 1745 QPopupMenu *editMenu = new QPopupMenu( this );
1697 QPopupMenu *helpMenu = new QPopupMenu( this ); 1746 QPopupMenu *helpMenu = new QPopupMenu( this );
1698 1747
1699 KToolBar* tb = mMainWindow->toolBar(); 1748 KToolBar* tb = mMainWindow->toolBar();
1700 1749
1701#ifdef DESKTOP_VERSION 1750#ifdef DESKTOP_VERSION
1702 QMenuBar* mb = mMainWindow->menuBar(); 1751 QMenuBar* mb = mMainWindow->menuBar();
1703 1752
1704 //US setup menubar. 1753 //US setup menubar.
1705 //Disable the following block if you do not want to have a menubar. 1754 //Disable the following block if you do not want to have a menubar.
1706 mb->insertItem( "&File", fileMenu ); 1755 mb->insertItem( "&File", fileMenu );
1707 mb->insertItem( "&Edit", editMenu ); 1756 mb->insertItem( "&Edit", editMenu );
1708 mb->insertItem( "&View", viewMenu ); 1757 mb->insertItem( "&View", viewMenu );
1709 mb->insertItem( "&Settings", settingsMenu ); 1758 mb->insertItem( "&Settings", settingsMenu );
1710 mb->insertItem( "&Change selected", changeMenu ); 1759 mb->insertItem( "&Change selected", changeMenu );
1711 mb->insertItem( "&Help", helpMenu ); 1760 mb->insertItem( "&Help", helpMenu );
1712 mIncSearchWidget = new IncSearchWidget( tb ); 1761 mIncSearchWidget = new IncSearchWidget( tb );
1713 // tb->insertWidget(-1, 0, mIncSearchWidget); 1762 // tb->insertWidget(-1, 0, mIncSearchWidget);
1714 1763
1715#else 1764#else
1716 //US setup toolbar 1765 //US setup toolbar
1717 QMenuBar *menuBarTB = new QMenuBar( tb ); 1766 QMenuBar *menuBarTB = new QMenuBar( tb );
1718 QPopupMenu *popupBarTB = new QPopupMenu( this ); 1767 QPopupMenu *popupBarTB = new QPopupMenu( this );
1719 menuBarTB->insertItem( "ME", popupBarTB); 1768 menuBarTB->insertItem( "ME", popupBarTB);
1720 tb->insertWidget(-1, 0, menuBarTB); 1769 tb->insertWidget(-1, 0, menuBarTB);
1721 mIncSearchWidget = new IncSearchWidget( tb ); 1770 mIncSearchWidget = new IncSearchWidget( tb );
1722 1771
1723 tb->enableMoving(false); 1772 tb->enableMoving(false);
1724 popupBarTB->insertItem( "&File", fileMenu ); 1773 popupBarTB->insertItem( "&File", fileMenu );
1725 popupBarTB->insertItem( "&Edit", editMenu ); 1774 popupBarTB->insertItem( "&Edit", editMenu );
1726 popupBarTB->insertItem( "&View", viewMenu ); 1775 popupBarTB->insertItem( "&View", viewMenu );
1727 popupBarTB->insertItem( "&Settings", settingsMenu ); 1776 popupBarTB->insertItem( "&Settings", settingsMenu );
1728 mViewManager->getFilterAction()->plug ( popupBarTB); 1777 mViewManager->getFilterAction()->plug ( popupBarTB);
1729 popupBarTB->insertItem( "&Change selected", changeMenu ); 1778 popupBarTB->insertItem( "&Change selected", changeMenu );
1730 popupBarTB->insertItem( "&Help", helpMenu ); 1779 popupBarTB->insertItem( "&Help", helpMenu );
1731 if (QApplication::desktop()->width() > 320 ) { 1780 if (QApplication::desktop()->width() > 320 ) {
1732 // mViewManager->getFilterAction()->plug ( tb); 1781 // mViewManager->getFilterAction()->plug ( tb);
1733 } 1782 }
1734#endif 1783#endif
1735 // mActionQuit->plug ( mMainWindow->toolBar()); 1784 // mActionQuit->plug ( mMainWindow->toolBar());
1736 1785
1737 1786
1738 1787
1739 //US Now connect the actions with the menue entries. 1788 //US Now connect the actions with the menue entries.
1740 mActionPrint->plug( fileMenu ); 1789 mActionPrint->plug( fileMenu );
1741 mActionMail->plug( fileMenu ); 1790 mActionMail->plug( fileMenu );
1742 fileMenu->insertSeparator(); 1791 fileMenu->insertSeparator();
1743 1792
1744 mActionNewContact->plug( fileMenu ); 1793 mActionNewContact->plug( fileMenu );
1745 mActionNewContact->plug( tb ); 1794 mActionNewContact->plug( tb );
1746 1795
1747 mActionEditAddressee->plug( fileMenu ); 1796 mActionEditAddressee->plug( fileMenu );
1748 mActionEditAddressee->plug( tb ); 1797 if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
1798 (!KABPrefs::instance()->mMultipleViewsAtOnce ))
1799 mActionEditAddressee->plug( tb );
1800
1749 fileMenu->insertSeparator(); 1801 fileMenu->insertSeparator();
1750 mActionSave->plug( fileMenu ); 1802 mActionSave->plug( fileMenu );
1751 fileMenu->insertItem( "&Import", ImportMenu ); 1803 fileMenu->insertItem( "&Import", ImportMenu );
1752 fileMenu->insertItem( "&Emport", ExportMenu ); 1804 fileMenu->insertItem( "&Emport", ExportMenu );
1753 fileMenu->insertSeparator(); 1805 fileMenu->insertSeparator();
1754 mActionMailVCard->plug( fileMenu ); 1806 mActionMailVCard->plug( fileMenu );
1755#ifndef DESKTOP_VERSION 1807#ifndef DESKTOP_VERSION
1756 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu ); 1808 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu );
1757 if ( Ir::supported() ) mActionBeam->plug(fileMenu ); 1809 if ( Ir::supported() ) mActionBeam->plug(fileMenu );
1758#endif 1810#endif
1759 fileMenu->insertSeparator(); 1811 fileMenu->insertSeparator();
1760 mActionQuit->plug( fileMenu ); 1812 mActionQuit->plug( fileMenu );
1761#ifdef _WIN32_ 1813#ifdef _WIN32_
1762 mActionImportOL->plug( ImportMenu ); 1814 mActionImportOL->plug( ImportMenu );
1763#endif 1815#endif
1764 // edit menu 1816 // edit menu
1765 mActionUndo->plug( editMenu ); 1817 mActionUndo->plug( editMenu );
1766 mActionRedo->plug( editMenu ); 1818 mActionRedo->plug( editMenu );
1767 editMenu->insertSeparator(); 1819 editMenu->insertSeparator();
1768 mActionCut->plug( editMenu ); 1820 mActionCut->plug( editMenu );
1769 mActionCopy->plug( editMenu ); 1821 mActionCopy->plug( editMenu );
1770 mActionPaste->plug( editMenu ); 1822 mActionPaste->plug( editMenu );
1771 mActionDelete->plug( editMenu ); 1823 mActionDelete->plug( editMenu );
1772 editMenu->insertSeparator(); 1824 editMenu->insertSeparator();
1773 mActionSelectAll->plug( editMenu ); 1825 mActionSelectAll->plug( editMenu );
1774 1826
1775 mActionRemoveVoice->plug( changeMenu ); 1827 mActionRemoveVoice->plug( changeMenu );
1776 // settings menu 1828 // settings menu
1777//US special menuentry to configure the addressbook resources. On KDE 1829//US special menuentry to configure the addressbook resources. On KDE
1778// you do that through the control center !!! 1830// you do that through the control center !!!
1779 mActionConfigResources->plug( settingsMenu ); 1831 mActionConfigResources->plug( settingsMenu );
1780 settingsMenu->insertSeparator(); 1832 settingsMenu->insertSeparator();
1781 1833
1782 mActionConfigKAddressbook->plug( settingsMenu ); 1834 mActionConfigKAddressbook->plug( settingsMenu );
1783 1835
1784 if ( mIsPart ) { 1836 if ( mIsPart ) {
1785 mActionConfigShortcuts->plug( settingsMenu ); 1837 mActionConfigShortcuts->plug( settingsMenu );
1786 mActionConfigureToolbars->plug( settingsMenu ); 1838 mActionConfigureToolbars->plug( settingsMenu );
1787 1839
1788 } else { 1840 } else {
1789 mActionKeyBindings->plug( settingsMenu ); 1841 mActionKeyBindings->plug( settingsMenu );
1790 } 1842 }
1791 1843
1792 settingsMenu->insertSeparator(); 1844 settingsMenu->insertSeparator();
1793 1845
1794 mActionJumpBar->plug( settingsMenu ); 1846 mActionJumpBar->plug( settingsMenu );
1795 mActionDetails->plug( settingsMenu ); 1847 mActionDetails->plug( settingsMenu );
1796 if (KGlobal::getDesktopSize() == KGlobal::Small ) 1848 if (!KABPrefs::instance()->mMultipleViewsAtOnce )
1797 mActionDetails->plug( tb ); 1849 mActionDetails->plug( tb );
1798 settingsMenu->insertSeparator(); 1850 settingsMenu->insertSeparator();
1799 1851
1800 mActionWhoAmI->plug( settingsMenu ); 1852 mActionWhoAmI->plug( settingsMenu );
1801 mActionCategories->plug( settingsMenu ); 1853 mActionCategories->plug( settingsMenu );
1802 1854
1803 mActionAboutKAddressbook->plug( helpMenu ); 1855 mActionAboutKAddressbook->plug( helpMenu );
1804 mActionLicence->plug( helpMenu ); 1856 mActionLicence->plug( helpMenu );
1805 1857
1806 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1858 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
1807 1859
1808 mActionSave->plug( tb ); 1860 mActionSave->plug( tb );
1809 mViewManager->getFilterAction()->plug ( tb); 1861 mViewManager->getFilterAction()->plug ( tb);
1810 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 1862 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
1811 mActionUndo->plug( tb ); 1863 mActionUndo->plug( tb );
1812 mActionDelete->plug( tb ); 1864 mActionDelete->plug( tb );
1813 mActionRedo->plug( tb ); 1865 mActionRedo->plug( tb );
1814 } 1866 }
1815 } 1867 }
1816 //mActionQuit->plug ( tb ); 1868 //mActionQuit->plug ( tb );
1817 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 1869 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
1818 1870
1819 //US link the searchwidget first to this. 1871 //US link the searchwidget first to this.
1820 // The real linkage to the toolbar happens later. 1872 // The real linkage to the toolbar happens later.
1821//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 1873//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
1822//US tb->insertItem( mIncSearchWidget ); 1874//US tb->insertItem( mIncSearchWidget );
1823/*US 1875/*US
1824 mIncSearchWidget = new IncSearchWidget( tb ); 1876 mIncSearchWidget = new IncSearchWidget( tb );
1825 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1877 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1826 SLOT( incrementalSearch( const QString& ) ) ); 1878 SLOT( incrementalSearch( const QString& ) ) );
1827 1879
1828 mJumpButtonBar = new JumpButtonBar( this, this ); 1880 mJumpButtonBar = new JumpButtonBar( this, this );
1829 1881
1830//US topLayout->addWidget( mJumpButtonBar ); 1882//US topLayout->addWidget( mJumpButtonBar );
1831 this->layout()->add( mJumpButtonBar ); 1883 this->layout()->add( mJumpButtonBar );
1832*/ 1884*/
1833 1885
1834#endif //KAB_EMBEDDED 1886#endif //KAB_EMBEDDED
1835} 1887}
1836void KABCore::showLicence() 1888void KABCore::showLicence()
1837{ 1889{
1838 KApplication::showLicence(); 1890 KApplication::showLicence();
1839} 1891}
1840void KABCore::removeVoice() 1892void KABCore::removeVoice()
1841{ 1893{
1842 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) 1894 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
1843 return; 1895 return;
1844 KABC::Addressee::List list = mViewManager->selectedAddressees(); 1896 KABC::Addressee::List list = mViewManager->selectedAddressees();
1845 KABC::Addressee::List::Iterator it; 1897 KABC::Addressee::List::Iterator it;
1846 for ( it = list.begin(); it != list.end(); ++it ) { 1898 for ( it = list.begin(); it != list.end(); ++it ) {
1847 PhoneNumber::List phoneNumbers = (*it).phoneNumbers(); 1899 PhoneNumber::List phoneNumbers = (*it).phoneNumbers();
1848 PhoneNumber::List::Iterator phoneIt; 1900 PhoneNumber::List::Iterator phoneIt;
1849 bool found = false; 1901 bool found = false;
1850 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) { 1902 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) {
1851 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 1903 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
1852 if ((*phoneIt).type() - PhoneNumber::Voice ) { 1904 if ((*phoneIt).type() - PhoneNumber::Voice ) {
1853 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 1905 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
1854 (*it).insertPhoneNumber( (*phoneIt) ); 1906 (*it).insertPhoneNumber( (*phoneIt) );
1855 found = true; 1907 found = true;
1856 } 1908 }
1857 } 1909 }
1858 1910
1859 } 1911 }
1860 if ( found ) 1912 if ( found )
1861 contactModified((*it) ); 1913 contactModified((*it) );
1862 } 1914 }
1863} 1915}
1864 1916
1865 1917
1866 1918
1867void KABCore::clipboardDataChanged() 1919void KABCore::clipboardDataChanged()
1868{ 1920{
1869 1921
1870 if ( mReadWrite ) 1922 if ( mReadWrite )
1871 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 1923 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
1872 1924
1873} 1925}
1874 1926
1875void KABCore::updateActionMenu() 1927void KABCore::updateActionMenu()
1876{ 1928{
1877 UndoStack *undo = UndoStack::instance(); 1929 UndoStack *undo = UndoStack::instance();
1878 RedoStack *redo = RedoStack::instance(); 1930 RedoStack *redo = RedoStack::instance();
1879 1931
1880 if ( undo->isEmpty() ) 1932 if ( undo->isEmpty() )
1881 mActionUndo->setText( i18n( "Undo" ) ); 1933 mActionUndo->setText( i18n( "Undo" ) );
1882 else 1934 else
1883 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 1935 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
1884 1936
1885 mActionUndo->setEnabled( !undo->isEmpty() ); 1937 mActionUndo->setEnabled( !undo->isEmpty() );
1886 1938
1887 if ( !redo->top() ) 1939 if ( !redo->top() )
1888 mActionRedo->setText( i18n( "Redo" ) ); 1940 mActionRedo->setText( i18n( "Redo" ) );
1889 else 1941 else
1890 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 1942 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
1891 1943
1892 mActionRedo->setEnabled( !redo->isEmpty() ); 1944 mActionRedo->setEnabled( !redo->isEmpty() );
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index a45c4c6..d4d28f1 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -209,238 +209,241 @@ class KABCore : public QWidget
209 /** 209 /**
210 Paste contacts from clipboard into the address book. 210 Paste contacts from clipboard into the address book.
211 */ 211 */
212 void pasteContacts(); 212 void pasteContacts();
213 213
214 /** 214 /**
215 Paste given contacts into the address book. 215 Paste given contacts into the address book.
216 216
217 @param list The list of addressee, which shall be pasted. 217 @param list The list of addressee, which shall be pasted.
218 */ 218 */
219 void pasteContacts( KABC::Addressee::List &list ); 219 void pasteContacts( KABC::Addressee::List &list );
220 220
221 /** 221 /**
222 Sets the whoAmI contact, that is used by many other programs to 222 Sets the whoAmI contact, that is used by many other programs to
223 get personal information about the current user. 223 get personal information about the current user.
224 */ 224 */
225 void setWhoAmI(); 225 void setWhoAmI();
226 226
227 /** 227 /**
228 Displays the category dialog and applies the result to all 228 Displays the category dialog and applies the result to all
229 selected contacts. 229 selected contacts.
230 */ 230 */
231 void setCategories(); 231 void setCategories();
232 232
233 /** 233 /**
234 Sets the field list of the Incremental Search Widget. 234 Sets the field list of the Incremental Search Widget.
235 */ 235 */
236 void setSearchFields( const KABC::Field::List &fields ); 236 void setSearchFields( const KABC::Field::List &fields );
237 237
238 /** 238 /**
239 Search with the current search field for a contact, that matches 239 Search with the current search field for a contact, that matches
240 the given text, and selects it in the view. 240 the given text, and selects it in the view.
241 */ 241 */
242 void incrementalSearch( const QString& text ); 242 void incrementalSearch( const QString& text );
243 243
244 /** 244 /**
245 Marks the address book as modified. 245 Marks the address book as modified.
246 */ 246 */
247 void setModified(); 247 void setModified();
248 /** 248 /**
249 Marks the address book as modified without refreshing the view. 249 Marks the address book as modified without refreshing the view.
250 */ 250 */
251 void setModifiedWOrefresh(); 251 void setModifiedWOrefresh();
252 252
253 /** 253 /**
254 Marks the address book as modified concerning the argument. 254 Marks the address book as modified concerning the argument.
255 */ 255 */
256 void setModified( bool modified ); 256 void setModified( bool modified );
257 257
258 /** 258 /**
259 Returns whether the address book is modified. 259 Returns whether the address book is modified.
260 */ 260 */
261 bool modified() const; 261 bool modified() const;
262 262
263 /** 263 /**
264 Called whenever an contact is modified in the contact editor 264 Called whenever an contact is modified in the contact editor
265 dialog or the quick edit. 265 dialog or the quick edit.
266 */ 266 */
267 void contactModified( const KABC::Addressee &addr ); 267 void contactModified( const KABC::Addressee &addr );
268 268
269 /** 269 /**
270 DCOP METHODS. 270 DCOP METHODS.
271 */ 271 */
272 void addEmail( QString addr ); 272 void addEmail( QString addr );
273 void importVCard( const KURL& url, bool showPreview ); 273 void importVCard( const KURL& url, bool showPreview );
274 void importVCard( const QString& vCard, bool showPreview ); 274 void importVCard( const QString& vCard, bool showPreview );
275 void newContact(); 275 void newContact();
276 QString getNameByPhone( const QString& phone ); 276 QString getNameByPhone( const QString& phone );
277 /** 277 /**
278 END DCOP METHODS 278 END DCOP METHODS
279 */ 279 */
280 280
281 /** 281 /**
282 Saves the contents of the AddressBook back to disk. 282 Saves the contents of the AddressBook back to disk.
283 */ 283 */
284 void save(); 284 void save();
285 285
286 /** 286 /**
287 Undos the last command using the undo stack. 287 Undos the last command using the undo stack.
288 */ 288 */
289 void undo(); 289 void undo();
290 290
291 /** 291 /**
292 Redos the last command that was undone, using the redo stack. 292 Redos the last command that was undone, using the redo stack.
293 */ 293 */
294 void redo(); 294 void redo();
295 295
296 /** 296 /**
297 Shows the edit dialog for the given uid. If the uid is QString::null, 297 Shows the edit dialog for the given uid. If the uid is QString::null,
298 the method will try to find a selected addressee in the view. 298 the method will try to find a selected addressee in the view.
299 */ 299 */
300 void editContact( const QString &uid /*US = QString::null*/ ); 300 void editContact( const QString &uid /*US = QString::null*/ );
301//US added a second method without defaultparameter 301//US added a second method without defaultparameter
302 void editContact2(); 302 void editContact2();
303 303
304 /** 304 /**
305 Shows the detail view for the given uid. If the uid is QString::null, 305 Shows or edits the detail view for the given uid. If the uid is QString::null,
306 the method will try to find a selected addressee in the view. 306 the method will try to find a selected addressee in the view.
307 */ 307 */
308 void showContact( const QString &uid /*US = QString::null*/ ); 308 void executeContact( const QString &uid /*US = QString::null*/ );
309 309
310 /** 310 /**
311 Launches the configuration dialog. 311 Launches the configuration dialog.
312 */ 312 */
313 void openConfigDialog(); 313 void openConfigDialog();
314 314
315 /** 315 /**
316 Launches the ldap search dialog. 316 Launches the ldap search dialog.
317 */ 317 */
318 void openLDAPDialog(); 318 void openLDAPDialog();
319 319
320 /** 320 /**
321 Creates a KAddressBookPrinter, which will display the print 321 Creates a KAddressBookPrinter, which will display the print
322 dialog and do the printing. 322 dialog and do the printing.
323 */ 323 */
324 void print(); 324 void print();
325 325
326 /** 326 /**
327 Registers a new GUI client, so plugins can register its actions. 327 Registers a new GUI client, so plugins can register its actions.
328 */ 328 */
329 void addGUIClient( KXMLGUIClient *client ); 329 void addGUIClient( KXMLGUIClient *client );
330 330
331 signals: 331 signals:
332 void contactSelected( const QString &name ); 332 void contactSelected( const QString &name );
333 void contactSelected( const QPixmap &pixmap ); 333 void contactSelected( const QPixmap &pixmap );
334 public slots: 334 public slots:
335 void setDetailsVisible( bool visible ); 335 void setDetailsVisible( bool visible );
336 void setDetailsToState(); 336 void setDetailsToState();
337 private slots: 337 private slots:
338 void setJumpButtonBarVisible( bool visible ); 338 void setJumpButtonBarVisible( bool visible );
339 void importFromOL(); 339 void importFromOL();
340 void extensionModified( const KABC::Addressee::List &list ); 340 void extensionModified( const KABC::Addressee::List &list );
341 void extensionChanged( int id );
341 void clipboardDataChanged(); 342 void clipboardDataChanged();
342 void updateActionMenu(); 343 void updateActionMenu();
343 void configureKeyBindings(); 344 void configureKeyBindings();
344 void removeVoice(); 345 void removeVoice();
345#ifdef KAB_EMBEDDED 346#ifdef KAB_EMBEDDED
346 void configureResources(); 347 void configureResources();
347#endif //KAB_EMBEDDED 348#endif //KAB_EMBEDDED
348 349
349 void slotEditorDestroyed( const QString &uid ); 350 void slotEditorDestroyed( const QString &uid );
350 void configurationChanged(); 351 void configurationChanged();
351 void addressBookChanged(); 352 void addressBookChanged();
352 353
353 private: 354 private:
354 void initGUI(); 355 void initGUI();
355 void initActions(); 356 void initActions();
356 357
357 AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent, 358 AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent,
358 const char *name = 0 ); 359 const char *name = 0 );
359 360
360 KXMLGUIClient *mGUIClient; 361 KXMLGUIClient *mGUIClient;
361 362
362 KABC::AddressBook *mAddressBook; 363 KABC::AddressBook *mAddressBook;
363 364
364 ViewManager *mViewManager; 365 ViewManager *mViewManager;
365 // QSplitter *mDetailsSplitter; 366 // QSplitter *mDetailsSplitter;
366 KDGanttMinimizeSplitter *mExtensionBarSplitter; 367 KDGanttMinimizeSplitter *mExtensionBarSplitter;
367 ViewContainer *mDetails; 368 ViewContainer *mDetails;
368 KDGanttMinimizeSplitter* mMiniSplitter; 369 KDGanttMinimizeSplitter* mMiniSplitter;
369 XXPortManager *mXXPortManager; 370 XXPortManager *mXXPortManager;
370 JumpButtonBar *mJumpButtonBar; 371 JumpButtonBar *mJumpButtonBar;
371 IncSearchWidget *mIncSearchWidget; 372 IncSearchWidget *mIncSearchWidget;
372 ExtensionManager *mExtensionManager; 373 ExtensionManager *mExtensionManager;
373 374
374 KCMultiDialog *mConfigureDialog; 375 KCMultiDialog *mConfigureDialog;
375 376
376#ifndef KAB_EMBEDDED 377#ifndef KAB_EMBEDDED
377 LDAPSearchDialog *mLdapSearchDialog; 378 LDAPSearchDialog *mLdapSearchDialog;
378#endif //KAB_EMBEDDED 379#endif //KAB_EMBEDDED
379 // QDict<AddresseeEditorDialog> mEditorDict; 380 // QDict<AddresseeEditorDialog> mEditorDict;
380 AddresseeEditorDialog *mEditorDialog; 381 AddresseeEditorDialog *mEditorDialog;
381 bool mReadWrite; 382 bool mReadWrite;
382 bool mModified; 383 bool mModified;
383 bool mIsPart; 384 bool mIsPart;
385 bool mMultipleViewsAtOnce;
386
384 387
385 //US file menu 388 //US file menu
386 KAction *mActionMail; 389 KAction *mActionMail;
387 KAction *mActionBeam; 390 KAction *mActionBeam;
388 KAction* mActionPrint; 391 KAction* mActionPrint;
389 KAction* mActionNewContact; 392 KAction* mActionNewContact;
390 KAction *mActionSave; 393 KAction *mActionSave;
391 KAction *mActionEditAddressee; 394 KAction *mActionEditAddressee;
392 KAction *mActionMailVCard; 395 KAction *mActionMailVCard;
393 KAction *mActionBeamVCard; 396 KAction *mActionBeamVCard;
394 397
395 KAction *mActionQuit; 398 KAction *mActionQuit;
396 399
397 //US edit menu 400 //US edit menu
398 KAction *mActionCopy; 401 KAction *mActionCopy;
399 KAction *mActionCut; 402 KAction *mActionCut;
400 KAction *mActionPaste; 403 KAction *mActionPaste;
401 KAction *mActionSelectAll; 404 KAction *mActionSelectAll;
402 KAction *mActionUndo; 405 KAction *mActionUndo;
403 KAction *mActionRedo; 406 KAction *mActionRedo;
404 KAction *mActionDelete; 407 KAction *mActionDelete;
405 408
406 //US settings menu 409 //US settings menu
407 KAction *mActionConfigResources; 410 KAction *mActionConfigResources;
408 KAction *mActionConfigKAddressbook; 411 KAction *mActionConfigKAddressbook;
409 KAction *mActionConfigShortcuts; 412 KAction *mActionConfigShortcuts;
410 KAction *mActionConfigureToolbars; 413 KAction *mActionConfigureToolbars;
411 KAction *mActionKeyBindings; 414 KAction *mActionKeyBindings;
412 KToggleAction *mActionJumpBar; 415 KToggleAction *mActionJumpBar;
413 KToggleAction *mActionDetails; 416 KToggleAction *mActionDetails;
414 KAction *mActionWhoAmI; 417 KAction *mActionWhoAmI;
415 KAction *mActionCategories; 418 KAction *mActionCategories;
416 KAction *mActionAboutKAddressbook; 419 KAction *mActionAboutKAddressbook;
417 KAction *mActionLicence; 420 KAction *mActionLicence;
418 421
419 KAction *mActionDeleteView; 422 KAction *mActionDeleteView;
420 423
421 QPopupMenu *viewMenu; 424 QPopupMenu *viewMenu;
422 QPopupMenu *filterMenu; 425 QPopupMenu *filterMenu;
423 QPopupMenu *settingsMenu; 426 QPopupMenu *settingsMenu;
424 QPopupMenu *changeMenu; 427 QPopupMenu *changeMenu;
425 428
426//US QAction *mActionSave; 429//US QAction *mActionSave;
427 QPopupMenu *ImportMenu; 430 QPopupMenu *ImportMenu;
428 QPopupMenu *ExportMenu; 431 QPopupMenu *ExportMenu;
429 //LR additional methods 432 //LR additional methods
430 KAction *mActionRemoveVoice; 433 KAction *mActionRemoveVoice;
431 KAction * mActionImportOL; 434 KAction * mActionImportOL;
432 435
433#ifndef KAB_EMBEDDED 436#ifndef KAB_EMBEDDED
434 KAddressBookService *mAddressBookService; 437 KAddressBookService *mAddressBookService;
435#endif //KAB_EMBEDDED 438#endif //KAB_EMBEDDED
436 439
437 class KABCorePrivate; 440 class KABCorePrivate;
438 KABCorePrivate *d; 441 KABCorePrivate *d;
439 442
440#ifdef KAB_EMBEDDED 443#ifdef KAB_EMBEDDED
441 KAddressBookMain *mMainWindow; // should be the same like mGUIClient 444 KAddressBookMain *mMainWindow; // should be the same like mGUIClient
442#endif //KAB_EMBEDDED 445#endif //KAB_EMBEDDED
443 446
444}; 447};
445 448
446#endif 449#endif