26#include <tqeventloop.h>
28#include <tqclipboard.h>
34#include <tqwidgetstack.h>
38#include <tqwhatsthis.h>
40#include <tdeabc/addresseelist.h>
41#include <tdeabc/errorhandler.h>
42#include <tdeabc/resource.h>
43#include <tdeabc/stdaddressbook.h>
44#include <tdeabc/vcardconverter.h>
45#include <tdeabc/resourcefile.h>
46#include <tdeaboutdata.h>
47#include <tdeaccelmanager.h>
48#include <tdeapplication.h>
49#include <dcopclient.h>
50#include <tdeactionclasses.h>
51#include <tdecmdlineargs.h>
52#include <kcmultidialog.h>
54#include <tdeimproxy.h>
56#include <tdemessagebox.h>
58#include <kprotocolinfo.h>
59#include <kpushbutton.h>
60#include <tderesources/selectdialog.h>
61#include <tdestandarddirs.h>
62#include <kstatusbar.h>
63#include <kstdguiitem.h>
64#include <kxmlguiclient.h>
65#include <tdetoolbar.h>
66#include <libtdepim/addresseeview.h>
67#include <libtdepim/categoryeditdialog.h>
68#include <libtdepim/categoryselectdialog.h>
69#include <libtdepim/resourceabc.h>
70#include "distributionlisteditor.h"
72#include "addresseeutil.h"
73#include "addresseeeditordialog.h"
74#include "distributionlistentryview.h"
75#include "extensionmanager.h"
76#include "filterselectionwidget.h"
77#include "incsearchwidget.h"
78#include "jumpbuttonbar.h"
82#include "kaddressbookservice.h"
83#include "kaddressbookiface.h"
84#include "ldapsearchdialog.h"
85#include "locationmap.h"
86#include "printing/printingwizard.h"
87#include "searchmanager.h"
89#include "viewmanager.h"
90#include "xxportmanager.h"
94KABCore::KABCore( KXMLGUIClient *client,
bool readWrite, TQWidget *parent,
95 const TQString &file,
const char *name )
96 : KAB::Core( client, parent, name ), mStatusBar( 0 ), mViewManager( 0 ),
97 mExtensionManager( 0 ), mJumpButtonBar( 0 ), mCategorySelectDialog( 0 ),
98 mCategoryEditDialog( 0 ), mLdapSearchDialog( 0 ), mReadWrite( readWrite ),
101 mWidget =
new TQWidget( parent, name );
103 mIsPart = !parent->isA(
"KAddressBookMain" );
105 mAddressBookChangedTimer =
new TQTimer(
this );
106 connect( mAddressBookChangedTimer, TQ_SIGNAL( timeout() ),
107 this, TQ_SLOT( addressBookChanged() ) );
109 if ( file.isEmpty() ) {
110 mAddressBook = TDEABC::StdAddressBook::self(
true );
112 kdDebug(5720) <<
"KABCore(): document '" << file <<
"'" << endl;
113 mAddressBook =
new TDEABC::AddressBook;
114 mAddressBook->addResource(
new TDEABC::ResourceFile( file ) );
115 if ( !mAddressBook->load() ) {
116 KMessageBox::error( parent, i18n(
"Unable to load '%1'.").arg( file ) );
119 mAddressBook->setErrorHandler(
new TDEABC::GuiErrorHandler( mWidget ) );
121 mAddressBook->addCustomField( i18n(
"Profession" ), TDEABC::Field::Organization,
122 "X-Profession",
"KADDRESSBOOK" );
123 mAddressBook->addCustomField( i18n(
"Assistant's Name" ), TDEABC::Field::Organization,
124 "X-AssistantsName",
"KADDRESSBOOK" );
125 mAddressBook->addCustomField( i18n(
"Manager's Name" ), TDEABC::Field::Organization,
126 "X-ManagersName",
"KADDRESSBOOK" );
127 mAddressBook->addCustomField( i18n(
"Partner's Name" ), TDEABC::Field::Personal,
128 "X-SpousesName",
"KADDRESSBOOK" );
129 mAddressBook->addCustomField( i18n(
"Office" ), TDEABC::Field::Personal,
130 "X-Office",
"KADDRESSBOOK" );
131 mAddressBook->addCustomField( i18n(
"IM Address" ), TDEABC::Field::Personal,
132 "X-IMAddress",
"KADDRESSBOOK" );
133 mAddressBook->addCustomField( i18n(
"Anniversary" ), TDEABC::Field::Personal,
134 "X-Anniversary",
"KADDRESSBOOK" );
135 mAddressBook->addCustomField( i18n(
"Blog" ), TDEABC::Field::Personal,
136 "BlogFeed",
"KADDRESSBOOK" );
138 mSearchManager =
new KAB::SearchManager( mAddressBook, parent );
140 connect( mSearchManager, TQ_SIGNAL( contactsUpdated() ),
141 this, TQ_SLOT( slotContactsUpdated() ) );
145 connect( mAddressBook, TQ_SIGNAL( addressBookChanged( AddressBook* ) ),
146 TQ_SLOT( delayedAddressBookChanged() ) );
147 connect( mAddressBook, TQ_SIGNAL( loadingFinished( Resource* ) ),
148 TQ_SLOT( delayedAddressBookChanged() ) );
150 mIncSearchWidget->setFocus();
152 connect( mViewManager, TQ_SIGNAL( selected(
const TQString& ) ),
153 TQ_SLOT( setContactSelected(
const TQString& ) ) );
154 connect( mViewManager, TQ_SIGNAL( executed(
const TQString& ) ),
155 TQ_SLOT( editContact(
const TQString& ) ) );
156 connect( mViewManager, TQ_SIGNAL( modified() ),
157 TQ_SLOT( setModified() ) );
158 connect( mViewManager, TQ_SIGNAL( urlDropped(
const KURL& ) ),
159 mXXPortManager, TQ_SLOT( importVCard(
const KURL& ) ) );
160 connect( mViewManager, TQ_SIGNAL( viewFieldsChanged() ),
161 TQ_SLOT( updateIncSearchWidget() ) );
162 connect( mExtensionManager, TQ_SIGNAL( modified(
const TDEABC::Addressee::List& ) ),
163 this, TQ_SLOT( extensionModified(
const TDEABC::Addressee::List& ) ) );
164 connect( mExtensionManager, TQ_SIGNAL( deleted(
const TQStringList& ) ),
165 this, TQ_SLOT( extensionDeleted(
const TQStringList& ) ) );
167 connect( mXXPortManager, TQ_SIGNAL( modified() ),
168 TQ_SLOT( setModified() ) );
170 connect( mDetailsViewer, TQ_SIGNAL( highlightedMessage(
const TQString& ) ),
171 TQ_SLOT( detailsHighlighted(
const TQString& ) ) );
173 connect( mIncSearchWidget, TQ_SIGNAL( scrollUp() ),
174 mViewManager, TQ_SLOT( scrollUp() ) );
175 connect( mIncSearchWidget, TQ_SIGNAL( scrollDown() ),
176 mViewManager, TQ_SLOT( scrollDown() ) );
178 mAddressBookService =
new KAddressBookService(
this );
180 mCommandHistory =
new KCommandHistory( actionCollection(),
true );
181 connect( mCommandHistory, TQ_SIGNAL( commandExecuted() ),
182 mSearchManager, TQ_SLOT( reload() ) );
184 mSearchManager->reload();
186 setModified(
false );
188 TDEAcceleratorManager::manage( mWidget );
190 mKIMProxy = ::KIMProxy::instance( tdeApp->dcopClient() );
195 mAddressBook->disconnect();
198 TDEABC::StdAddressBook::close();
202void KABCore::restoreSettings()
204 bool state = KABPrefs::instance()->jumpButtonBarVisible();
205 mActionJumpBar->setChecked( state );
206 setJumpButtonBarVisible( state );
208 state = KABPrefs::instance()->detailsPageVisible();
209 mActionDetails->setChecked( state );
210 setDetailsVisible( state );
212 mViewManager->restoreSettings();
213 mExtensionManager->restoreSettings();
215 updateIncSearchWidget();
216 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->currentIncSearchField() );
218 TQValueList<int> splitterSize = KABPrefs::instance()->detailsSplitter();
219 if ( splitterSize.count() == 0 ) {
220 splitterSize.append( 360 );
221 splitterSize.append( 260 );
223 mDetailsSplitter->setSizes( splitterSize );
225 const TQValueList<int> leftSplitterSizes = KABPrefs::instance()->leftSplitter();
226 if ( !leftSplitterSizes.isEmpty() )
227 mLeftSplitter->setSizes( leftSplitterSizes );
230void KABCore::saveSettings()
232 KABPrefs::instance()->setJumpButtonBarVisible( mActionJumpBar->isChecked() );
233 KABPrefs::instance()->setDetailsPageVisible( mActionDetails->isChecked() );
234 KABPrefs::instance()->setDetailsSplitter( mDetailsSplitter->sizes() );
235 KABPrefs::instance()->setLeftSplitter( mLeftSplitter->sizes() );
237 mExtensionManager->saveSettings();
238 mViewManager->saveSettings();
240 KABPrefs::instance()->setCurrentIncSearchField( mIncSearchWidget->currentItem() );
243TDEABC::AddressBook *KABCore::addressBook()
const
248TDEConfig *KABCore::config()
const
250 return KABPrefs::instance()->config();
253TDEActionCollection *KABCore::actionCollection()
const
255 return guiClient()->actionCollection();
258TDEABC::Field *KABCore::currentSortField()
const
260 return mViewManager->currentSortField();
263TQStringList KABCore::selectedUIDs()
const
265 return mViewManager->selectedUids();
268TDEABC::Resource *KABCore::requestResource( TQWidget *parent )
270 TQPtrList<TDEABC::Resource> tdeabcResources = addressBook()->resources();
272 TQPtrList<KRES::Resource> kresResources;
273 TQPtrListIterator<TDEABC::Resource> resIt( tdeabcResources );
274 TDEABC::Resource *resource;
275 while ( ( resource = resIt.current() ) != 0 ) {
277 bool writable =
false;
278 if ( resource->inherits(
"KPIM::ResourceABC" ) ) {
279 KPIM::ResourceABC *resAbc =
static_cast<KPIM::ResourceABC *
>( resource );
280 const TQStringList subresources = resAbc->subresources();
281 for ( TQStringList::ConstIterator it = subresources.begin(); it != subresources.end(); ++it ) {
282 if ( resAbc->subresourceActive(*it) && resAbc->subresourceWritable(*it) ) {
288 if ( !resource->readOnly() ) {
294 KRES::Resource *res = resource;
295 kresResources.append( res );
299 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
300 return static_cast<TDEABC::Resource*
>( res );
303TQWidget *KABCore::widget()
const
308TDEAboutData *KABCore::createAboutData()
310 TDEAboutData *about =
new TDEAboutData(
"kaddressbook", I18N_NOOP(
"KAddressBook" ),
311 "3.5.13", I18N_NOOP(
"The TDE Address Book" ),
312 TDEAboutData::License_GPL_V2,
313 I18N_NOOP(
"(c) 2008-2010, The Trinity Team\n(c) 1997-2005, The KDE PIM Team" ) );
314 about->addAuthor(
"Timothy Pearson", I18N_NOOP(
"Current maintainer" ),
"kb9vqf@pearsoncomputing.net" );
315 about->addAuthor(
"Tobias Koenig", I18N_NOOP(
"Previous maintainer" ),
"tokoe@kde.org" );
316 about->addAuthor(
"Don Sanders", I18N_NOOP(
"Original author" ) );
317 about->addAuthor(
"Cornelius Schumacher",
318 I18N_NOOP(
"Co-maintainer, libtdeabc port, CSV import/export" ),
319 "schumacher@kde.org" );
320 about->addAuthor(
"Mike Pilone", I18N_NOOP(
"GUI and framework redesign" ),
321 "mpilone@slac.com" );
322 about->addAuthor(
"Greg Stern", I18N_NOOP(
"DCOP interface" ) );
323 about->addAuthor(
"Mark Westcott", I18N_NOOP(
"Contact pinning" ) );
324 about->addAuthor(
"Mischel Boyer de la Giroday", I18N_NOOP(
"LDAP Lookup" ),
325 "michel@klaralvdalens-datakonsult.se" );
326 about->addAuthor(
"Steffen Hansen", I18N_NOOP(
"LDAP Lookup" ),
332void KABCore::setStatusBar( KStatusBar *statusBar )
334 mStatusBar = statusBar;
337KStatusBar *KABCore::statusBar()
const
342void KABCore::setContactSelected(
const TQString &uid )
345 if ( !mAddressBook ) {
349 TDEABC::Addressee addr = mAddressBook->findByUid( uid );
350 if ( !mDetailsViewer->isHidden() )
351 mDetailsViewer->setAddressee( addr );
352#ifdef TDEPIM_NEW_DISTRLISTS
353 if ( !mSelectedDistributionList.isNull() && mDistListEntryView->isShown() ) {
354 showDistributionListEntry( uid );
357 mExtensionManager->setSelectionChanged();
359 TDEABC::Addressee::List list = mViewManager->selectedAddressees();
360 const bool someSelected = list.size() > 0;
361 const bool singleSelected = list.size() == 1;
362 bool writable = mReadWrite;
369 TDEABC::Addressee::List::ConstIterator addrIt = list.constBegin();
370 for ( ; addrIt != list.constEnd(); ++addrIt ) {
371 TDEABC::Resource *res = ( *addrIt ).resource();
373 kdDebug() <<
"KABCore::setContactSelected: this addressee has no resource!" << endl;
377 if ( res->readOnly() ) {
382 if ( res->inherits(
"KPIM::ResourceABC" ) ) {
383 KPIM::ResourceABC *resAbc =
static_cast<KPIM::ResourceABC *
>( res );
385 TQString subresource = resAbc->uidToResourceMap()[ ( *addrIt ).uid() ];
386 if ( !subresource.isEmpty() && !resAbc->subresourceWritable( subresource ) ) {
394 bool moreThanOneResource = mAddressBook->resources().count() > 1;
395 if ( !moreThanOneResource && !mAddressBook->resources().isEmpty() ) {
396 TDEABC::Resource *res = mAddressBook->resources().first();
397 if ( res->inherits(
"KPIM::ResourceABC" ) ) {
398 KPIM::ResourceABC *resAbc =
static_cast<KPIM::ResourceABC *
>( res );
399 const TQStringList subresources = resAbc->subresources();
401 for ( TQStringList::ConstIterator it = subresources.begin(); it != subresources.end(); ++it ) {
402 if ( resAbc->subresourceActive(*it) && resAbc->subresourceWritable(*it) ) {
406 moreThanOneResource = ( writeables >= 2 );
412 mActionCopy->setEnabled( someSelected );
413 mActionCut->setEnabled( someSelected && writable );
414 mActionDelete->setEnabled( someSelected && writable );
417 mActionEditAddressee->setEnabled( singleSelected && !mExtensionManager->isQuickEditVisible());
418 mActionCopyAddresseeTo->setEnabled( someSelected && moreThanOneResource );
419 mActionMoveAddresseeTo->setEnabled( someSelected && moreThanOneResource && writable );
420 mActionMail->setEnabled( someSelected );
421 mActionMailVCard->setEnabled( someSelected );
422 mActionChat->setEnabled( singleSelected && mKIMProxy && mKIMProxy->initialize() );
423 mActionWhoAmI->setEnabled( singleSelected );
424 mActionCategories->setEnabled( someSelected && writable );
425 mActionMerge->setEnabled( ( list.size() == 2 ) && writable );
428 TQClipboard *cb = TQApplication::clipboard();
429#if defined(KABC_VCARD_ENCODING_FIX)
430 const TQMimeSource *data = cb->data( TQClipboard::Clipboard );
435 mActionPaste->setEnabled( !list.isEmpty() );
437#ifdef TDEPIM_NEW_DISTRLISTS
438 mAddDistListButton->setEnabled( writable );
439 mRemoveDistListButton->setEnabled( someSelected && writable );
443void KABCore::sendMail()
446 sendMail( mViewManager->selectedEmails().join(
", " ) );
449void KABCore::sendMail(
const TQString& email )
451 tdeApp->invokeMailer( email,
"" );
454void KABCore::mailVCard()
456 TQStringList uids = mViewManager->selectedUids();
457 if ( !uids.isEmpty() )
461void KABCore::mailVCard(
const TQStringList &uids )
463 KABTools::mailVCards( uids, mAddressBook );
466void KABCore::startChat()
468 TQStringList uids = mViewManager->selectedUids();
469 if ( !uids.isEmpty() )
470 mKIMProxy->chatWithContact( uids.first() );
473void KABCore::browse(
const TQString& url )
475 tdeApp->invokeBrowser( url );
478void KABCore::selectAllContacts()
480 mViewManager->setSelected( TQString(),
true );
483void KABCore::deleteContacts()
485 TQStringList uidList = mViewManager->selectedUids();
487 deleteContacts( uidList );
490void KABCore::deleteDistributionLists(
const TQStringList & names )
492 if ( names.isEmpty() )
494 if ( KMessageBox::warningContinueCancelList( mWidget, i18n(
"Do you really want to delete this distribution list?",
495 "Do you really want to delete these %n distribution lists?", names.count() ),
496 names, TQString(), KStdGuiItem::del() ) == KMessageBox::Cancel )
500 for ( TQStringList::ConstIterator it = names.begin(); it != names.end(); ++it ) {
501 uids.append( KPIM::DistributionList::findByName( mAddressBook, *it ).uid() );
503 DeleteCommand *command =
new DeleteCommand( mAddressBook, uids );
504 mCommandHistory->addCommand( command );
508void KABCore::deleteContacts(
const TQStringList &uids )
510 if ( uids.count() > 0 ) {
512 TQStringList::ConstIterator it = uids.begin();
513 const TQStringList::ConstIterator endIt( uids.end() );
514 while ( it != endIt ) {
515 TDEABC::Addressee addr = mAddressBook->findByUid( *it );
516 names.append( addr.realName().isEmpty() ? addr.preferredEmail() : addr.realName() );
520 if ( KMessageBox::warningContinueCancelList(
523 "Do you really want to delete this contact from your addressbook?<br>"
524 "<b>Note:</b>The contact will be also removed from all distribution lists."
527 "Do you really want to delete these %n contacts from your addressbook?<br>"
528 "<b>Note:</b>The contacts will be also removed from all distribution lists."
531 names, TQString(), KStdGuiItem::del() ) == KMessageBox::Cancel ) {
535 DeleteCommand *command =
new DeleteCommand( mAddressBook, uids );
536 mCommandHistory->addCommand( command );
539 setContactSelected( TQString() );
544void KABCore::copyContacts()
546 TDEABC::Addressee::List addrList = mViewManager->selectedAddressees();
548#if defined(KABC_VCARD_ENCODING_FIX)
550 TQClipboard *cb = TQApplication::clipboard();
551 cb->setText( TQString::fromUtf8( clipText.data() ) );
554 TQClipboard *cb = TQApplication::clipboard();
555 cb->setText( clipText );
559void KABCore::cutContacts()
561 TQStringList uidList = mViewManager->selectedUids();
563 if ( uidList.size() > 0 ) {
564 CutCommand *command =
new CutCommand( mAddressBook, uidList );
565 mCommandHistory->addCommand( command );
571void KABCore::pasteContacts()
573 TQClipboard *cb = TQApplication::clipboard();
574#if defined(KABC_VCARD_ENCODING_FIX)
575 const TQMimeSource *data = cb->data( TQClipboard::Clipboard );
580 pasteContacts( list );
583void KABCore::pasteContacts( TDEABC::Addressee::List &list )
585 TDEABC::Resource *resource = requestResource( mWidget );
589 TDEABC::Addressee::List::Iterator it;
590 const TDEABC::Addressee::List::Iterator endIt( list.end() );
591 for ( it = list.begin(); it != endIt; ++it )
592 (*it).setResource( resource );
594 PasteCommand *command =
new PasteCommand(
this, list );
595 mCommandHistory->addCommand( command );
600void KABCore::mergeContacts()
602 TDEABC::Addressee::List list = mViewManager->selectedAddressees();
603 if ( list.count() < 2 )
606 TDEABC::Addressee addr = KABTools::mergeContacts( list );
608 TDEABC::Addressee::List::Iterator it = list.begin();
609 const TDEABC::Addressee::List::Iterator endIt( list.end() );
610 TDEABC::Addressee origAddr = *it;
613 while ( it != endIt ) {
614 uids.append( (*it).uid() );
618 DeleteCommand *command =
new DeleteCommand( mAddressBook, uids );
619 mCommandHistory->addCommand( command );
621 EditCommand *editCommand =
new EditCommand( mAddressBook, origAddr, addr );
622 mCommandHistory->addCommand( editCommand );
624 mSearchManager->reload();
627void KABCore::setWhoAmI()
629 TDEABC::Addressee::List addrList = mViewManager->selectedAddressees();
631 if ( addrList.count() > 1 ) {
633 KMessageBox::sorry( mWidget, i18n(
"Please select only one contact." ) );
637 TQString text( i18n(
"<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
638 if ( KMessageBox::questionYesNo( mWidget, text.arg( addrList[ 0 ].assembledName() ), TQString(), i18n(
"Use"), i18n(
"Do Not Use") ) == KMessageBox::Yes )
639 static_cast<TDEABC::StdAddressBook*
>( TDEABC::StdAddressBook::self(
true ) )->setWhoAmI( addrList[ 0 ] );
642void KABCore::incrementalTextSearch(
const TQString& text )
644 setContactSelected( TQString() );
645 mSearchManager->search( text, mIncSearchWidget->currentFields() );
648void KABCore::incrementalJumpButtonSearch(
const TQString& character )
650 mViewManager->setSelected( TQString(),
false );
652 TDEABC::AddresseeList list = mSearchManager->contacts();
653 TDEABC::Field *field = mViewManager->currentSortField();
655 list.sortByField( field );
656 TDEABC::AddresseeList::ConstIterator it;
657 const TDEABC::AddresseeList::ConstIterator endIt( list.end() );
658 for ( it = list.begin(); it != endIt; ++it ) {
659 if ( field->value( *it ).startsWith( character,
false ) ) {
660 mViewManager->setSelected( (*it).uid(),
true );
667void KABCore::setModified()
672void KABCore::setModified(
bool modified )
674 mModified = modified;
675 mActionSave->setEnabled( mModified );
677 mSearchManager->reload();
680bool KABCore::modified()
const
685void KABCore::contactModified(
const TDEABC::Addressee &addr )
687 Command *command = 0;
690 TDEABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
691 if ( origAddr.isEmpty() ) {
692 TDEABC::Addressee::List addressees;
693 addressees.append( addr );
694 command =
new NewCommand( mAddressBook, addressees );
696 command =
new EditCommand( mAddressBook, origAddr, addr );
699 mCommandHistory->addCommand( command );
701 setContactSelected( addr.uid() );
705void KABCore::newDistributionList()
707#ifdef TDEPIM_NEW_DISTRLISTS
708 TDEABC::Resource *resource = requestResource( mWidget );
712 TQString name = i18n(
"New Distribution List" );
713 const KPIM::DistributionList distList = KPIM::DistributionList::findByName( addressBook(), name );
714 if ( !distList.isEmpty() ) {
715 bool foundUnused =
false;
717 while ( !foundUnused ) {
718 name = i18n(
"New Distribution List (%1)" ).arg( i++ );
719 foundUnused = KPIM::DistributionList::findByName( addressBook(), name ).isEmpty();
722 KPIM::DistributionList list;
723 list.setUid( TDEApplication::randomString( 10 ) );
724 list.setName( name );
725 list.setResource( resource );
726 editDistributionList( list );
730void KABCore::newContact()
732 AddresseeEditorDialog *dialog = 0;
734 TDEABC::Resource* resource = requestResource( mWidget );
737 TDEABC::Addressee addr;
738 addr.setResource( resource );
740 if ( !KABLock::self( mAddressBook )->lock( addr.resource() ) )
743 dialog = createAddresseeEditorDialog( mWidget );
744 dialog->setAddressee( addr );
748 mEditorDict.insert( dialog->addressee().uid(), dialog );
753void KABCore::addEmail(
const TQString &aStr )
755 TQString fullName, email;
757 TDEABC::Addressee::parseEmailAddress( aStr, fullName, email );
761 while ( !mAddressBook->loadingHasFinished() ) {
762 TQApplication::eventLoop()->processEvents( TQEventLoop::ExcludeUserInput );
770 TQStringList emailList;
771 TDEABC::AddressBook::Iterator it;
772 const TDEABC::AddressBook::Iterator endIt( mAddressBook->end() );
773 for ( it = mAddressBook->begin(); !found && (it != endIt); ++it ) {
774 emailList = (*it).emails();
775 if ( emailList.contains( email ) > 0 ) {
777 (*it).setNameFromString( fullName );
778 editContact( (*it).uid() );
783 TDEABC::Addressee addr;
784 addr.setNameFromString( fullName );
785 addr.insertEmail( email,
true );
787 mAddressBook->insertAddressee( addr );
788 mViewManager->refreshView( addr.uid() );
789 editContact( addr.uid() );
793void KABCore::importVCard(
const KURL &url )
795 mXXPortManager->importVCard( url );
798void KABCore::importVCardFromData(
const TQString &vCard )
800 mXXPortManager->importVCardFromData( vCard );
803void KABCore::editContact(
const TQString &uid )
805 if ( mExtensionManager->isQuickEditVisible() )
809 TQString localUID = uid;
810 if ( localUID.isNull() ) {
811 TQStringList uidList = mViewManager->selectedUids();
812 if ( uidList.count() > 0 )
813 localUID = *( uidList.at( 0 ) );
818 else while ( !mAddressBook->loadingHasFinished() ) {
819 TQApplication::eventLoop()->processEvents( TQEventLoop::ExcludeUserInput );
825 TDEABC::Addressee addr = mAddressBook->findByUid( localUID );
826 if ( !addr.isEmpty() ) {
827 AddresseeEditorDialog *dialog = mEditorDict.find( addr.uid() );
830 if ( !addr.resource()->readOnly() )
831 if ( !KABLock::self( mAddressBook )->lock( addr.resource() ) ) {
835 dialog = createAddresseeEditorDialog( mWidget );
837 mEditorDict.insert( addr.uid(), dialog );
839 dialog->setAddressee( addr );
848void KABCore::copySelectedContactToResource()
850 storeContactIn( TQString(),
true );
853void KABCore::moveSelectedContactToResource()
855 storeContactIn( TQString(),
false );
858void KABCore::storeContactIn(
const TQString &uid,
bool copy )
861 TQStringList uidList;
862 if ( uid.isNull() ) {
863 uidList = mViewManager->selectedUids();
867 TDEABC::Resource *resource = requestResource( mWidget );
872 CopyToCommand *command =
new CopyToCommand( mAddressBook, uidList, resource );
873 mCommandHistory->addCommand( command );
876 MoveToCommand *command =
new MoveToCommand(
this, uidList, resource );
877 mCommandHistory->addCommand( command );
880 addressBookChanged();
886 TQPtrList<TDEABC::Resource> resources = mAddressBook->resources();
887 TQPtrListIterator<TDEABC::Resource> it( resources );
888 while ( it.current() && !it.current()->readOnly() ) {
889 TDEABC::Ticket *ticket = mAddressBook->requestSaveTicket( it.current() );
891 if ( !mAddressBook->save( ticket ) ) {
892 KMessageBox::error( mWidget,
893 i18n(
"<qt>Unable to save address book <b>%1</b>.</qt>" ).arg( it.current()->resourceName() ) );
894 mAddressBook->releaseSaveTicket( ticket );
896 setModified(
false );
899 KMessageBox::error( mWidget,
900 i18n(
"<qt>Unable to get access for saving the address book <b>%1</b>.</qt>" )
901 .arg( it.current()->resourceName() ) );
910 TQPtrList<TDEABC::Resource> resources = mAddressBook->resources();
911 TQPtrListIterator<TDEABC::Resource> it( resources );
912 while ( it.current() ) {
913 mAddressBook->load();
918void KABCore::setJumpButtonBarVisible(
bool visible )
921 if ( !mJumpButtonBar )
922 createJumpButtonBar();
923 mJumpButtonBar->show();
925 if ( mJumpButtonBar )
926 mJumpButtonBar->hide();
929void KABCore::setDetailsVisible(
bool visible )
932 mDetailsPage->show();
934 mDetailsPage->hide();
937void KABCore::extensionModified(
const TDEABC::Addressee::List &list )
939 if ( list.count() != 0 ) {
940 TDEABC::Addressee::List::ConstIterator it;
941 const TDEABC::Addressee::List::ConstIterator endIt( list.end() );
942 for ( it = list.begin(); it != endIt; ++it ) {
943 Command *command = 0;
946 TDEABC::Addressee origAddr = mAddressBook->findByUid( (*it).uid() );
947 if ( origAddr.isEmpty() ) {
948 TDEABC::Addressee::List addressees;
949 addressees.append( *it );
950 command =
new NewCommand( mAddressBook, addressees );
952 command =
new EditCommand( mAddressBook, origAddr, *it );
954 mCommandHistory->blockSignals(
true );
955 mCommandHistory->addCommand( command );
956 mCommandHistory->blockSignals(
false );
963void KABCore::extensionDeleted(
const TQStringList &uidList )
965 DeleteCommand *command =
new DeleteCommand( mAddressBook, uidList );
966 mCommandHistory->addCommand( command );
969 setContactSelected( TQString() );
973TQString KABCore::getNameByPhone(
const TQString &phone )
977 while ( !mAddressBook->loadingHasFinished() ) {
978 TQApplication::eventLoop()->processEvents( TQEventLoop::ExcludeUserInput );
984 TQRegExp r(
"[/*/-/ ]" );
985 TQString localPhone( phone );
988 TQString ownerName =
"";
989 TDEABC::PhoneNumber::List phoneList;
991 TDEABC::AddressBook::ConstIterator iter;
992 const TDEABC::AddressBook::ConstIterator endIter( mAddressBook->end() );
994 for ( iter = mAddressBook->begin(); !found && ( iter != endIter ); ++iter ) {
995 phoneList = (*iter).phoneNumbers();
996 TDEABC::PhoneNumber::List::Iterator phoneIter( phoneList.begin() );
997 const TDEABC::PhoneNumber::List::Iterator phoneEndIter( phoneList.end() );
998 for ( ; !found && ( phoneIter != phoneEndIter ); ++phoneIter) {
1000 if ( (*phoneIter).number().replace( r,
"" ) == localPhone.replace( r,
"" ) ) {
1001 ownerName = (*iter).realName();
1010void KABCore::openLDAPDialog()
1012 if ( !KProtocolInfo::isKnownProtocol( KURL(
"ldap://localhost" ) ) ) {
1013 KMessageBox::error( mWidget, i18n(
"Your TDE installation is missing LDAP "
1014 "support, please ask your administrator or distributor for more information." ),
1015 i18n(
"No LDAP IO Slave Available" ) );
1019 if ( !mLdapSearchDialog ) {
1020 mLdapSearchDialog =
new LDAPSearchDialog( mAddressBook,
this, mWidget );
1021 connect( mLdapSearchDialog, TQ_SIGNAL( addresseesAdded() ),
1022 TQ_SLOT( addressBookChanged() ) );
1023 connect( mLdapSearchDialog, TQ_SIGNAL( addresseesAdded() ),
1024 TQ_SLOT( setModified() ) );
1026 mLdapSearchDialog->restoreSettings();
1028 if ( mLdapSearchDialog->isOK() )
1029 mLdapSearchDialog->exec();
1032void KABCore::configure()
1037 KCMultiDialog dlg( mWidget,
"",
true );
1038 connect( &dlg, TQ_SIGNAL( configCommitted() ),
1039 this, TQ_SLOT( configurationChanged() ) );
1041 dlg.addModule(
"kabconfig.desktop" );
1042 dlg.addModule(
"kabldapconfig.desktop" );
1043 dlg.addModule(
"kabcustomfields.desktop" );
1048void KABCore::print()
1051 printer.setDocName( i18n(
"Address Book" ) );
1052 printer.setDocFileName(
"addressbook" );
1054 if ( !printer.setup( mWidget, i18n(
"Print Addresses") ) )
1058 mViewManager->selectedUids(), mWidget );
1063void KABCore::detailsHighlighted(
const TQString &msg )
1066 if ( !mStatusBar->hasItem( 2 ) )
1067 mStatusBar->insertItem( msg, 2 );
1069 mStatusBar->changeItem( msg, 2 );
1073void KABCore::showContactsAddress(
const TQString &addrUid )
1075 TQStringList uidList = mViewManager->selectedUids();
1076 if ( uidList.isEmpty() )
1079 TDEABC::Addressee addr = mAddressBook->findByUid( uidList.first() );
1080 if ( addr.isEmpty() )
1083 const TDEABC::Address::List list = addr.addresses();
1084 TDEABC::Address::List::ConstIterator it;
1085 const TDEABC::Address::List::ConstIterator endIt( list.end() );
1086 for ( it = list.begin(); it != endIt; ++it )
1087 if ( (*it).id() == addrUid ) {
1088 LocationMap::instance()->showAddress( *it );
1093void KABCore::configurationChanged()
1095 mExtensionManager->reconfigure();
1096 mViewManager->refreshView();
1099bool KABCore::queryClose()
1102 KABPrefs::instance()->writeConfig();
1104 TQPtrList<TDEABC::Resource> resources = mAddressBook->resources();
1105 TQPtrListIterator<TDEABC::Resource> it( resources );
1106 while ( it.current() ) {
1107 it.current()->close();
1114void KABCore::reinitXMLGUI()
1116 mExtensionManager->createActions();
1118void KABCore::delayedAddressBookChanged()
1120 mAddressBookChangedTimer->start( 1000 );
1123void KABCore::addressBookChanged()
1125 const TQStringList selectedUids = mViewManager->selectedUids();
1127 mAddressBookChangedTimer->stop();
1129 if ( mJumpButtonBar )
1130 mJumpButtonBar->updateButtons();
1132 mSearchManager->reload();
1134 mViewManager->setSelected( TQString(),
false );
1136 TQString uid = TQString();
1137 if ( !selectedUids.isEmpty() ) {
1138 uid = selectedUids.first();
1139 mViewManager->setSelected( uid,
true );
1142 setContactSelected( uid );
1147AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( TQWidget *parent,
1150 AddresseeEditorDialog *dialog =
new AddresseeEditorDialog(
this, parent,
1151 name ? name :
"editorDialog" );
1152 connect( dialog, TQ_SIGNAL( contactModified(
const TDEABC::Addressee& ) ),
1153 TQ_SLOT( contactModified(
const TDEABC::Addressee& ) ) );
1154 connect( dialog, TQ_SIGNAL( editorDestroyed(
const TQString& ) ),
1155 TQ_SLOT( slotEditorDestroyed(
const TQString& ) ) );
1160void KABCore::activateDetailsWidget( TQWidget *widget )
1162 if ( mDetailsStack->visibleWidget() == widget )
1164 mDetailsStack->raiseWidget( widget );
1167void KABCore::deactivateDetailsWidget( TQWidget *widget )
1169 if ( mDetailsStack->visibleWidget() != widget )
1171 mDetailsStack->raiseWidget( mDetailsWidget );
1174void KABCore::slotEditorDestroyed(
const TQString &uid )
1176 AddresseeEditorDialog *dialog = mEditorDict.take( uid );
1178 TDEABC::Addressee addr = dialog->addressee();
1180 if ( !addr.resource()->readOnly() ) {
1181 TQApplication::setOverrideCursor( TQt::waitCursor );
1182 KABLock::self( mAddressBook )->unlock( addr.resource() );
1183 TQApplication::restoreOverrideCursor();
1187void KABCore::initGUI()
1189 TQVBoxLayout *topLayout =
new TQVBoxLayout( mWidget, 0, 0 );
1190 TDEToolBar* searchTB =
new TDEToolBar( mWidget,
"search toolbar");
1191 searchTB->boxLayout()->setSpacing( KDialog::spacingHint() );
1192 mIncSearchWidget =
new IncSearchWidget( searchTB,
"tde toolbar widget");
1193 searchTB->setStretchableWidget( mIncSearchWidget );
1194 connect( mIncSearchWidget, TQ_SIGNAL( doSearch(
const TQString& ) ),
1195 TQ_SLOT( incrementalTextSearch(
const TQString& ) ) );
1197 mDetailsSplitter =
new TQSplitter( mWidget );
1199 mLeftSplitter =
new TQSplitter( mDetailsSplitter );
1200 mLeftSplitter->setOrientation( KABPrefs::instance()->contactListAboveExtensions() ? TQt::Vertical : TQt::Horizontal );
1202 topLayout->addWidget( searchTB );
1203 topLayout->addWidget( mDetailsSplitter );
1205 mDetailsStack =
new TQWidgetStack( mDetailsSplitter );
1206 mExtensionManager =
new ExtensionManager(
new TQWidget( mLeftSplitter ), mDetailsStack,
this,
this );
1207 connect( mExtensionManager, TQ_SIGNAL( detailsWidgetDeactivated( TQWidget* ) ),
1208 this, TQ_SLOT( deactivateDetailsWidget( TQWidget* ) ) );
1209 connect( mExtensionManager, TQ_SIGNAL( detailsWidgetActivated( TQWidget* ) ),
1210 this, TQ_SLOT( activateDetailsWidget( TQWidget* ) ) );
1212 TQWidget *viewWidget =
new TQWidget( mLeftSplitter );
1213 if ( KABPrefs::instance()->contactListAboveExtensions() )
1214 mLeftSplitter->moveToFirst( viewWidget );
1215 TQVBoxLayout *viewLayout =
new TQVBoxLayout( viewWidget );
1216 viewLayout->setSpacing( KDialog::spacingHint() );
1218 mViewHeaderLabel =
new TQLabel( viewWidget );
1220 mViewHeaderLabel->setText( i18n(
"Contacts" ) );
1221 viewLayout->addWidget( mViewHeaderLabel );
1222 mViewManager =
new ViewManager(
this, viewWidget );
1223 viewLayout->addWidget( mViewManager, 1 );
1225#ifdef TDEPIM_NEW_DISTRLISTS
1226 mDistListButtonWidget =
new TQWidget( viewWidget );
1227 TQHBoxLayout *buttonLayout =
new TQHBoxLayout( mDistListButtonWidget );
1228 buttonLayout->setSpacing( KDialog::spacingHint() );
1229 buttonLayout->addStretch( 1 );
1231 mAddDistListButton =
new KPushButton( mDistListButtonWidget );
1232 mAddDistListButton->setEnabled(
false );
1233 mAddDistListButton->setText( i18n(
"Add" ) );
1234 TQToolTip::add( mAddDistListButton, i18n(
"Add contacts to the distribution list" ) );
1235 TQWhatsThis::add( mAddDistListButton,
1236 i18n(
"Click this button if you want to add more contacts to "
1237 "the current distribution list. You will be shown a dialog that allows "
1238 "to enter a list of existing contacts to this distribution list." ) );
1239 connect( mAddDistListButton, TQ_SIGNAL( clicked() ),
1240 this, TQ_SLOT( editSelectedDistributionList() ) );
1241 buttonLayout->addWidget( mAddDistListButton );
1242 mDistListButtonWidget->setShown(
false );
1243 viewLayout->addWidget( mDistListButtonWidget );
1245 mRemoveDistListButton =
new KPushButton( mDistListButtonWidget );
1246 mRemoveDistListButton->setEnabled(
false );
1247 mRemoveDistListButton->setText( i18n(
"Remove" ) );
1248 TQToolTip::add( mRemoveDistListButton, i18n(
"Remove contacts from the distribution list" ) );
1249 TQWhatsThis::add( mRemoveDistListButton,
1250 i18n(
"Click this button if you want to remove the selected contacts from "
1251 "the current distribution list." ) );
1252 connect( mRemoveDistListButton, TQ_SIGNAL( clicked() ),
1253 this, TQ_SLOT( removeSelectedContactsFromDistList() ) );
1254 buttonLayout->addWidget( mRemoveDistListButton );
1258 mViewManager->setFilterSelectionWidget( mFilterSelectionWidget );
1260 connect( mFilterSelectionWidget, TQ_SIGNAL( filterActivated(
int ) ),
1261 mViewManager, TQ_SLOT( setActiveFilter(
int ) ) );
1263 mDetailsWidget =
new TQWidget( mDetailsSplitter );
1264 mDetailsLayout =
new TQHBoxLayout( mDetailsWidget );
1266 mDetailsPage =
new TQWidget( mDetailsWidget );
1267 mDetailsLayout->addWidget( mDetailsPage );
1269 TQHBoxLayout *detailsPageLayout =
new TQHBoxLayout( mDetailsPage, 0, 0 );
1270 mDetailsViewer =
new KPIM::AddresseeView( mDetailsPage );
1271 mDetailsViewer->setVScrollBarMode( TQScrollView::Auto );
1272 detailsPageLayout->addWidget( mDetailsViewer );
1274 mDistListEntryView =
new KAB::DistributionListEntryView(
this, mWidget );
1275 connect( mDistListEntryView, TQ_SIGNAL( distributionListClicked(
const TQString& ) ),
1276 this, TQ_SLOT( sendMailToDistributionList(
const TQString& ) ) );
1277 mDetailsStack->addWidget( mDistListEntryView );
1278 mDetailsStack->addWidget( mDetailsWidget );
1279 mDetailsStack->raiseWidget( mDetailsWidget );
1280 mDetailsSplitter->moveToLast( mDetailsStack );
1282 connect( mDetailsViewer, TQ_SIGNAL( addressClicked(
const TQString&) ),
1283 this, TQ_SLOT( showContactsAddress(
const TQString& ) ) );
1285 topLayout->setStretchFactor( mDetailsSplitter, 1 );
1287 mXXPortManager =
new XXPortManager(
this, mWidget );
1292void KABCore::createJumpButtonBar()
1295 mDetailsLayout->addWidget( mJumpButtonBar );
1296 mDetailsLayout->setStretchFactor( mJumpButtonBar, 1 );
1298 connect( mJumpButtonBar, TQ_SIGNAL( jumpToLetter(
const TQString& ) ),
1299 TQ_SLOT( incrementalJumpButtonSearch(
const TQString& ) ) );
1300 connect( mViewManager, TQ_SIGNAL( sortFieldChanged() ),
1301 mJumpButtonBar, TQ_SLOT( updateButtons() ) );
1304void KABCore::initActions()
1306 connect( TQApplication::clipboard(), TQ_SIGNAL( dataChanged() ),
1307 TQ_SLOT( clipboardDataChanged() ) );
1312 mActionMail =
new TDEAction( i18n(
"&Send Email to Contact..." ),
"mail-send", 0,
1313 this, TQ_SLOT( sendMail() ), actionCollection(),
"file_mail" );
1314 action = KStdAction::print(
this, TQ_SLOT( print() ), actionCollection() );
1315 mActionMail->setWhatsThis( i18n(
"Send a mail to all selected contacts." ) );
1316 action->setWhatsThis( i18n(
"Print a special number of contacts." ) );
1318 mActionSave = KStdAction::save(
this,
1319 TQ_SLOT( save() ), actionCollection(),
"file_sync" );
1320 mActionSave->setWhatsThis( i18n(
"Save all changes of the address book to the storage backend." ) );
1322 action =
new TDEAction( i18n(
"&New Contact..." ),
"identity", CTRL+Key_N,
this,
1323 TQ_SLOT( newContact() ), actionCollection(),
"file_new_contact" );
1324 action->setWhatsThis( i18n(
"Create a new contact<p>You will be presented with a dialog where you can add all data about a person, including addresses and phone numbers." ) );
1326 action =
new TDEAction( i18n(
"&New Distribution List..." ),
"kontact_contacts", 0,
this,
1327 TQ_SLOT( newDistributionList() ), actionCollection(),
"file_new_distributionlist" );
1328 action->setWhatsThis( i18n(
"Create a new distribution list<p>You will be presented with a dialog where you can create a new distribution list." ) );
1330 mActionMailVCard =
new TDEAction( i18n(
"Send &Contact..."),
"mail_post_to", 0,
1331 this, TQ_SLOT( mailVCard() ),
1332 actionCollection(),
"file_mail_vcard" );
1333 mActionMailVCard->setWhatsThis( i18n(
"Send a mail with the selected contact as attachment." ) );
1335 mActionChat =
new TDEAction( i18n(
"Chat &With..."), 0,
1336 this, TQ_SLOT( startChat() ),
1337 actionCollection(),
"file_chat" );
1338 mActionChat->setWhatsThis( i18n(
"Start a chat with the selected contact." ) );
1340 mActionEditAddressee =
new TDEAction( i18n(
"&Edit Contact..." ),
"edit", 0,
1341 this, TQ_SLOT( editContact() ),
1342 actionCollection(),
"file_properties" );
1343 mActionEditAddressee->setWhatsThis( i18n(
"Edit a contact<p>You will be presented with a dialog where you can change all data about a person, including addresses and phone numbers." ) );
1345 mActionMerge =
new TDEAction( i18n(
"&Merge Contacts" ),
"", 0,
1346 this, TQ_SLOT( mergeContacts() ),
1347 actionCollection(),
"edit_merge" );
1350 mActionCopy = KStdAction::copy(
this, TQ_SLOT( copyContacts() ), actionCollection() );
1351 mActionCut = KStdAction::cut(
this, TQ_SLOT( cutContacts() ), actionCollection() );
1352 mActionPaste = KStdAction::paste(
this, TQ_SLOT( pasteContacts() ), actionCollection() );
1353 action = KStdAction::selectAll(
this, TQ_SLOT( selectAllContacts() ), actionCollection() );
1354 mActionCopy->setWhatsThis( i18n(
"Copy the currently selected contact(s) to system clipboard in vCard format." ) );
1355 mActionCut->setWhatsThis( i18n(
"Cuts the currently selected contact(s) to system clipboard in vCard format." ) );
1356 mActionPaste->setWhatsThis( i18n(
"Paste the previously cut or copied contacts from clipboard." ) );
1357 action->setWhatsThis( i18n(
"Selects all visible contacts from current view." ) );
1361 mActionDelete =
new TDEAction( i18n(
"&Delete Contact" ),
"edit-delete",
1362 Key_Delete,
this, TQ_SLOT( deleteContacts() ),
1363 actionCollection(),
"edit_delete" );
1364 mActionDelete->setWhatsThis( i18n(
"Delete all selected contacts." ) );
1367 mActionCopyAddresseeTo =
new TDEAction( i18n(
"&Copy Contact To..." ),
"", 0,
1368 this, TQ_SLOT( copySelectedContactToResource() ),
1369 actionCollection(),
"copy_contact_to" );
1370 const TQString copyMoveWhatsThis = i18n(
"Store a contact in a different Addressbook<p>You will be presented with a dialog where you can select a new storage place for this contact." );
1371 mActionCopyAddresseeTo->setWhatsThis( copyMoveWhatsThis );
1373 mActionMoveAddresseeTo =
new TDEAction( i18n(
"M&ove Contact To..." ),
"", 0,
1374 this, TQ_SLOT( moveSelectedContactToResource() ),
1375 actionCollection(),
"move_contact_to" );
1376 mActionMoveAddresseeTo->setWhatsThis( copyMoveWhatsThis );
1379 mActionJumpBar =
new TDEToggleAction( i18n(
"Show Jump Bar" ),
"next", 0,
1380 actionCollection(),
"options_show_jump_bar" );
1381 mActionJumpBar->setWhatsThis( i18n(
"Toggle whether the jump button bar shall be visible." ) );
1382 mActionJumpBar->setCheckedState( i18n(
"Hide Jump Bar") );
1383 connect( mActionJumpBar, TQ_SIGNAL( toggled(
bool ) ), TQ_SLOT( setJumpButtonBarVisible(
bool ) ) );
1385 mActionDetails =
new TDEToggleAction( i18n(
"Show Details" ), 0, 0,
1386 actionCollection(),
"options_show_details" );
1387 mActionDetails->setWhatsThis( i18n(
"Toggle whether the details page shall be visible." ) );
1388 mActionDetails->setCheckedState( i18n(
"Hide Details") );
1389 connect( mActionDetails, TQ_SIGNAL( toggled(
bool ) ), TQ_SLOT( setDetailsVisible(
bool ) ) );
1392 action =
new TDEAction( i18n(
"&Configure Address Book..." ),
"configure", 0,
1393 this, TQ_SLOT( configure() ), actionCollection(),
1394 "kaddressbook_configure" );
1396 action = KStdAction::preferences(
this, TQ_SLOT( configure() ), actionCollection() );
1398 action->setWhatsThis( i18n(
"You will be presented with a dialog, that offers you all possibilities to configure KAddressBook." ) );
1401 action =
new TDEAction( i18n(
"&Lookup Addresses in LDAP Directory..." ),
"edit-find", 0,
1402 this, TQ_SLOT( openLDAPDialog() ), actionCollection(),
"ldap_lookup" );
1403 action->setWhatsThis( i18n(
"Search for contacts on a LDAP server<p>You will be presented with a dialog, where you can search for contacts and select the ones you want to add to your local address book." ) );
1405 mActionWhoAmI =
new TDEAction( i18n(
"Set as Personal Contact Data" ),
"preferences-desktop-personal", 0,
this,
1406 TQ_SLOT( setWhoAmI() ), actionCollection(),
1407 "edit_set_personal" );
1408 mActionWhoAmI->setWhatsThis( i18n(
"Set the personal contact<p>The data of this contact will be used in many other TDE applications, so you do not have to input your personal data several times." ) );
1410 mActionCategories =
new TDEAction( i18n(
"Select Categories..." ), 0,
this,
1411 TQ_SLOT( setCategories() ), actionCollection(),
1412 "edit_set_categories" );
1413 mActionCategories->setWhatsThis( i18n(
"Set the categories for all selected contacts." ) );
1415 TDEAction *clearLocation =
new TDEAction( i18n(
"Clear Search Bar" ),
1416 TQApplication::reverseLayout() ?
"clear_left" :
"locationbar_erase",
1417 CTRL+Key_L,
this, TQ_SLOT( slotClearSearchBar() ), actionCollection(),
"clear_search" );
1418 clearLocation->setWhatsThis( i18n(
"Clear Search Bar<p>"
1419 "Clears the content of the quick search bar." ) );
1421 clipboardDataChanged();
1424void KABCore::clipboardDataChanged()
1427 mActionPaste->setEnabled( !TQApplication::clipboard()->text().isEmpty() );
1430void KABCore::updateIncSearchWidget()
1432 mIncSearchWidget->setViewFields( mViewManager->viewFields() );
1435void KABCore::updateCategories()
1437 TQStringList categories( allCategories() );
1440 const TQStringList customCategories( KABPrefs::instance()->customCategories() );
1441 TQStringList::ConstIterator it;
1442 const TQStringList::ConstIterator endIt( customCategories.end() );
1443 for ( it = customCategories.begin(); it != endIt; ++it ) {
1444 if ( categories.find( *it ) == categories.end() ) {
1445 categories.append( *it );
1449 KABPrefs::instance()->mCustomCategories = categories;
1450 KABPrefs::instance()->writeConfig();
1452 if ( mCategoryEditDialog )
1453 mCategoryEditDialog->reload();
1456TQStringList KABCore::allCategories()
const
1458 TQStringList categories, allCategories;
1459 TQStringList::ConstIterator catIt;
1462 if ( !mAddressBook ) {
1463 return allCategories;
1466 TDEABC::AddressBook::ConstIterator it;
1467 const TDEABC::AddressBook::ConstIterator endIt( mAddressBook->end() );
1468 for ( it = mAddressBook->begin(); it != endIt; ++it ) {
1469 categories = (*it).categories();
1470 const TQStringList::ConstIterator catEndIt( categories.end() );
1471 for ( catIt = categories.begin(); catIt != catEndIt; ++catIt ) {
1472 if ( !allCategories.contains( *catIt ) )
1473 allCategories.append( *catIt );
1477 return allCategories;
1480void KABCore::setCategories()
1483 if ( mCategorySelectDialog == 0 ) {
1484 mCategorySelectDialog =
new KPIM::CategorySelectDialog( KABPrefs::instance(), mWidget );
1485 connect( mCategorySelectDialog, TQ_SIGNAL( categoriesSelected(
const TQStringList& ) ),
1486 TQ_SLOT( categoriesSelected(
const TQStringList& ) ) );
1487 connect( mCategorySelectDialog, TQ_SIGNAL( editCategories() ), TQ_SLOT( editCategories() ) );
1490 mCategorySelectDialog->show();
1491 mCategorySelectDialog->raise();
1494void KABCore::categoriesSelected(
const TQStringList &categories )
1497 TQString msg = i18n(
"Merge with existing categories?" );
1498 if ( KMessageBox::questionYesNo( mWidget, msg, TQString(), i18n(
"Merge" ), i18n(
"Do Not Merge" ) ) == KMessageBox::Yes )
1501 TQStringList uids = mViewManager->selectedUids();
1502 TQStringList::ConstIterator it;
1503 const TQStringList::ConstIterator endIt( uids.end() );
1504 for ( it = uids.begin(); it != endIt; ++it ) {
1505 TDEABC::Addressee addr = mAddressBook->findByUid( *it );
1506 if ( !addr.isEmpty() ) {
1508 addr.setCategories( categories );
1510 TQStringList addrCategories = addr.categories();
1511 TQStringList::ConstIterator catIt;
1512 const TQStringList::ConstIterator catEndIt( categories.end() );
1513 for ( catIt = categories.begin(); catIt != catEndIt; ++catIt ) {
1514 if ( !addrCategories.contains( *catIt ) )
1515 addrCategories.append( *catIt );
1517 addr.setCategories( addrCategories );
1520 mAddressBook->insertAddressee( addr );
1524 if ( uids.count() > 0 )
1525 setModified(
true );
1528void KABCore::editCategories()
1530 if ( mCategoryEditDialog == 0 ) {
1531 mCategoryEditDialog =
new KPIM::CategoryEditDialog( KABPrefs::instance(), mWidget );
1532 connect( mCategoryEditDialog, TQ_SIGNAL( categoryConfigChanged() ),
1533 mCategorySelectDialog, TQ_SLOT( updateCategoryConfig() ) );
1536 mCategoryEditDialog->show();
1537 mCategoryEditDialog->raise();
1540void KABCore::slotClearSearchBar()
1542 mIncSearchWidget->clear();
1543 mIncSearchWidget->setFocus();
1546void KABCore::slotContactsUpdated()
1549 TQString msg( i18n(
"%n contact matches",
"%n contacts matching", mSearchManager->contacts().count() ) );
1550 if ( !mStatusBar->hasItem( 1 ) )
1551 mStatusBar->insertItem( msg, 1 );
1553 mStatusBar->changeItem( msg, 1 );
1556 emit contactsUpdated();
1559bool KABCore::handleCommandLine( KAddressBookIface* iface )
1561 TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
1562 TQCString addrStr = args->getOption(
"addr" );
1563 TQCString uidStr = args->getOption(
"uid" );
1565 TQString addr, uid, vcard;
1566 if ( !addrStr.isEmpty() )
1567 addr = TQString::fromLocal8Bit( addrStr );
1568 if ( !uidStr.isEmpty() )
1569 uid = TQString::fromLocal8Bit( uidStr );
1571 bool doneSomething =
false;
1574 if ( !addr.isEmpty() ) {
1575 iface->addEmail( addr );
1576 doneSomething =
true;
1579 if ( !uid.isEmpty() ) {
1580 iface->showContactEditor( uid );
1581 doneSomething =
true;
1584 if ( args->isSet(
"new-contact" ) ) {
1585 iface->newContact();
1586 doneSomething =
true;
1589 if ( args->count() >= 1 ) {
1590 for (
int i = 0; i < args->count(); ++i )
1591 iface->importVCard( args->url( i ).url() );
1592 doneSomething =
true;
1594 return doneSomething;
1597void KABCore::removeSelectedContactsFromDistList()
1599#ifdef TDEPIM_NEW_DISTRLISTS
1601 KPIM::DistributionList dist = KPIM::DistributionList::findByName( addressBook(), mSelectedDistributionList );
1602 if ( dist.isEmpty() )
1604 const TQStringList uids = selectedUIDs();
1605 if ( uids.isEmpty() )
1609 TQStringList::ConstIterator it = uids.begin();
1610 const TQStringList::ConstIterator endIt( uids.end() );
1611 while ( it != endIt ) {
1612 TDEABC::Addressee addr = mAddressBook->findByUid( *it );
1613 names.append( addr.realName().isEmpty() ? addr.preferredEmail() : addr.realName() );
1617 if ( KMessageBox::warningContinueCancelList(
1620 "Do you really want to remove this contact from the %1 distribution list?<br>"
1621 "<b>Note:</b>The contact will be not be removed from your addressbook nor from "
1622 "any other distribution list."
1625 "Do you really want to remove these %n contacts from the %1 distribution list?<br>"
1626 "<b>Note:</b>The contacts will be not be removed from your addressbook nor from "
1627 "any other distribution list."
1629 uids.count() ).arg( mSelectedDistributionList ),
1630 names, TQString(), KStdGuiItem::del() ) == KMessageBox::Cancel ) {
1634 for ( TQStringList::ConstIterator uidIt = uids.begin(); uidIt != uids.end(); ++uidIt ) {
1635 typedef KPIM::DistributionList::Entry::List EntryList;
1636 const EntryList entries = dist.entries( addressBook() );
1637 for ( EntryList::ConstIterator it = entries.begin(); it != entries.end(); ++it ) {
1638 if ( (*it).addressee.uid() == (*uidIt) ) {
1639 dist.removeEntry( (*it).addressee, (*it).email );
1644 addressBook()->insertAddressee( dist );
1649void KABCore::sendMailToDistributionList(
const TQString &name )
1651#ifdef TDEPIM_NEW_DISTRLISTS
1652 KPIM::DistributionList dist = KPIM::DistributionList::findByName( addressBook(), name );
1653 if ( dist.isEmpty() )
1655 typedef KPIM::DistributionList::Entry::List EntryList;
1657 const EntryList entries = dist.entries( addressBook() );
1658 for ( EntryList::ConstIterator it = entries.begin(); it != entries.end(); ++it )
1659 mails += (*it).addressee.fullEmail( (*it).email );
1660 sendMail( mails.join(
", " ) );
1664void KABCore::editSelectedDistributionList()
1666#ifdef TDEPIM_NEW_DISTRLISTS
1667 editDistributionList( KPIM::DistributionList::findByName( addressBook(), mSelectedDistributionList ) );
1672void KABCore::editDistributionList(
const TQString &name )
1674#ifdef TDEPIM_NEW_DISTRLISTS
1675 editDistributionList( KPIM::DistributionList::findByName( addressBook(), name ) );
1679#ifdef TDEPIM_NEW_DISTRLISTS
1681void KABCore::showDistributionListEntry(
const TQString& uid )
1683 KPIM::DistributionList dist = KPIM::DistributionList::findByName( addressBook(), mSelectedDistributionList );
1684 if ( !dist.isEmpty() ) {
1685 mDistListEntryView->clear();
1686 typedef KPIM::DistributionList::Entry::List EntryList;
1687 const EntryList entries = dist.entries( addressBook() );
1688 for (EntryList::ConstIterator it = entries.begin(); it != entries.end(); ++it ) {
1689 if ( (*it).addressee.uid() == uid ) {
1690 mDistListEntryView->setEntry( dist, *it );
1697void KABCore::editDistributionList(
const KPIM::DistributionList &dist )
1699 if ( dist.isEmpty() )
1701 TQGuardedPtr<KPIM::DistributionListEditor::EditorWidget> dlg =
new KPIM::DistributionListEditor::EditorWidget( addressBook(), widget() );
1702 dlg->setDistributionList( dist );
1703 if ( dlg->exec() == TQDialog::Accepted && dlg ) {
1704 const KPIM::DistributionList newDist = dlg->distributionList();
1705 if ( newDist != dist ) {
1713KPIM::DistributionList::List KABCore::distributionLists()
const
1715 return mSearchManager->distributionLists();
1718void KABCore::setSelectedDistributionList(
const TQString &name )
1720 mSelectedDistributionList = name;
1721 mSearchManager->setSelectedDistributionList( name );
1722 mViewHeaderLabel->setText( name.isNull() ?
1723 i18n(
"Contacts" ) :
1724 i18n(
"Distribution List: %1" ).arg( name ) );
1725 mDistListButtonWidget->setShown( !mSelectedDistributionList.isNull() );
1726 if ( !name.isNull() ) {
1727 mDetailsStack->raiseWidget( mDistListEntryView );
1728 if ( selectedUIDs().isEmpty() ) {
1729 mViewManager->setFirstSelected(
true );
1731 const TQStringList selectedUids = selectedUIDs();
1732 showDistributionListEntry( selectedUids.isEmpty() ? TQString() : selectedUids.first() );
1734 mDetailsStack->raiseWidget( mExtensionManager->activeDetailsWidget() ?
1735 mExtensionManager->activeDetailsWidget() : mDetailsWidget );
1739TQStringList KABCore::distributionListNames()
const
1741 return mSearchManager->distributionListNames();
1745#include "kabcore.moc"
static TDEABC::Addressee::List clipboardToAddressees(const TQString &clipboard)
Convert a string from the clipboard into a list of addressee objects.
static TQString addresseesToClipboard(const TDEABC::Addressee::List &addrList)
Same as above function, except that an entire list of TDEABC::Addressee objects will be converted to ...
The PrintingWizard combines pages common for all print styles and those provided by the respective st...
The view manager manages the views and everything related to them.