summaryrefslogtreecommitdiffstats
path: root/kopete/kopete/contactlist/kopetelviprops.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/kopete/contactlist/kopetelviprops.cpp')
-rw-r--r--kopete/kopete/contactlist/kopetelviprops.cpp570
1 files changed, 570 insertions, 0 deletions
diff --git a/kopete/kopete/contactlist/kopetelviprops.cpp b/kopete/kopete/contactlist/kopetelviprops.cpp
new file mode 100644
index 00000000..bf5431bf
--- /dev/null
+++ b/kopete/kopete/contactlist/kopetelviprops.cpp
@@ -0,0 +1,570 @@
+/*
+ kopetelviprops.cpp
+
+ Kopete Contactlist Properties GUI for Groups and MetaContacts
+
+ Copyright (c) 2002-2003 by Stefan Gehn <metz AT gehn.net>
+ Copyright (c) 2004 by Will Stephenson <lists@stevello.free-online.co.uk>
+ Copyright (c) 2004-2005 by Duncan Mac-Vicar P. <duncan@kde.org>
+
+ Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include "kopetelviprops.h"
+
+#include <kdebug.h>
+
+#include <qapplication.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qcombobox.h>
+
+#include <kdialogbase.h>
+#include <kfiledialog.h>
+#include <kicondialog.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kurlrequester.h>
+#include <kabc/addresseedialog.h>
+#include <kabc/stdaddressbook.h>
+#include <kabc/addressee.h>
+#include <kstandarddirs.h>
+#include <kurlrequester.h>
+
+#include "kabcpersistence.h"
+#include "kopeteaddrbookexport.h"
+#include "kopetecontact.h"
+#include "kopetegroup.h"
+#include "kopetegroupviewitem.h"
+#include "kopetemetacontactlvi.h"
+#include "kopeteaccount.h"
+#include "kopeteprotocol.h"
+#include "addressbooklinkwidget.h"
+#include "addressbookselectordialog.h"
+
+#include "customnotificationprops.h"
+#include "customnotifications.h"
+
+const char MC_OFF[] = "metacontact_offline";
+const char MC_ON[] = "metacontact_online";
+const char MC_AW[] = "metacontact_away";
+const char MC_UNK[] = "metacontact_unknown";
+
+
+KopeteGVIProps::KopeteGVIProps(KopeteGroupViewItem *gvi, QWidget *parent, const char *name)
+: KDialogBase(parent, name, true, i18n("Properties of Group %1").arg(gvi->group()->displayName()), Ok|Cancel, Ok, false)
+{
+ mainWidget = new KopeteGVIPropsWidget(this, "mainWidget");
+ mainWidget->icnbOpen->setIconSize(KIcon::SizeSmall);
+ mainWidget->icnbClosed->setIconSize(KIcon::SizeSmall);
+
+ mNotificationProps = new CustomNotificationProps( this, gvi->group() );
+ mainWidget->tabWidget->addTab( mNotificationProps->widget(), i18n( "Custom &Notifications" ) );
+
+ setMainWidget(mainWidget);
+ item = gvi;
+ m_dirty = false;
+
+ mainWidget->edtDisplayName->setText( item->group()->displayName() );
+
+ mainWidget->chkUseCustomIcons->setChecked( item->group()->useCustomIcon() );
+
+ QString openName = item->group()->icon( Kopete::ContactListElement::Open );
+ if(openName.isEmpty())
+ openName = KOPETE_GROUP_DEFAULT_OPEN_ICON;
+ QString closeName = item->group()->icon( Kopete::ContactListElement::Closed );
+ if(closeName.isEmpty())
+ closeName = KOPETE_GROUP_DEFAULT_CLOSED_ICON;
+ mainWidget->icnbOpen->setIcon( openName );
+ mainWidget->icnbClosed->setIcon( closeName );
+
+ connect( this, SIGNAL(okClicked()), this, SLOT( slotOkClicked() ) );
+ connect( mainWidget->chkUseCustomIcons, SIGNAL( toggled( bool ) ),
+ this, SLOT( slotUseCustomIconsToggled( bool ) ) );
+ connect( mainWidget->icnbOpen, SIGNAL( iconChanged( QString ) ),
+ SLOT( slotIconChanged() ) );
+ connect( mainWidget->icnbClosed, SIGNAL( iconChanged( QString ) ),
+ SLOT( slotIconChanged() ) );
+ slotUseCustomIconsToggled( mainWidget->chkUseCustomIcons->isChecked() );
+}
+
+KopeteGVIProps::~KopeteGVIProps()
+{
+}
+
+void KopeteGVIProps::slotOkClicked()
+{
+ if( mainWidget->edtDisplayName->text() != item->group()->displayName() )
+ {
+ item->group()->setDisplayName( mainWidget->edtDisplayName->text() );
+ item->refreshDisplayName();
+ }
+
+ item->group()->setUseCustomIcon( mainWidget->chkUseCustomIcons->isChecked() );
+
+ // only call setIcon if the icon was changed
+ if( m_dirty )
+ {
+ item->group()->setIcon( mainWidget->icnbOpen->icon(),
+ Kopete::ContactListElement::Open );
+
+ item->group()->setIcon( mainWidget->icnbClosed->icon(),
+ Kopete::ContactListElement::Closed );
+ }
+
+ mNotificationProps->storeCurrentCustoms();
+}
+
+void KopeteGVIProps::slotUseCustomIconsToggled(bool on)
+{
+ mainWidget->lblOpen->setEnabled( on );
+ mainWidget->icnbOpen->setEnabled( on );
+ mainWidget->lblClosed->setEnabled( on );
+ mainWidget->icnbClosed->setEnabled( on );
+}
+
+void KopeteGVIProps::slotIconChanged()
+{
+ m_dirty = true;
+}
+
+// =============================================================================
+
+
+KopeteMetaLVIProps::KopeteMetaLVIProps(KopeteMetaContactLVI *lvi, QWidget *parent, const char *name)
+: KDialogBase(parent, name, true, i18n("Properties of Meta Contact %1").arg(lvi->metaContact()->displayName()), Ok|Cancel, Ok, false)
+{
+ m_countPhotoCapable = 0;
+ mainWidget = new KopeteMetaLVIPropsWidget( this, "mainWidget" );
+ mainWidget->icnbOffline->setIconSize( KIcon::SizeSmall );
+ mainWidget->icnbOnline->setIconSize( KIcon::SizeSmall );
+ mainWidget->icnbAway->setIconSize( KIcon::SizeSmall );
+ mainWidget->icnbUnknown->setIconSize( KIcon::SizeSmall );
+
+ mNotificationProps = new CustomNotificationProps( this, lvi->metaContact() );
+ // add a button to the notification props to get the sound from KABC
+ // the widget's vert box layout, horiz box layout containing button, spacer, followed by a spacer
+ QBoxLayout * vb = static_cast<QVBoxLayout*>( mNotificationProps->widget()->layout() );
+
+ QHBoxLayout* hb = new QHBoxLayout( vb, -1, "soundFromKABClayout" );
+ mFromKABC = new QPushButton( i18n( "Sync KABC..." ), mNotificationProps->widget(), "getSoundFromKABC" );
+ hb->addWidget( mFromKABC ); // [ [Button] <-xxxxx-> ]
+ hb->addStretch();
+ vb->addStretch(); // vert spacer keeps the rest snug
+
+ mainWidget->tabWidget->addTab( mNotificationProps->widget(), i18n( "Custom &Notifications" ) );
+ setMainWidget( mainWidget );
+ item = lvi;
+
+ connect( mainWidget->radioNameKABC, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->radioNameContact, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->radioNameCustom, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->radioPhotoKABC, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->radioPhotoContact, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->radioPhotoCustom, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->cmbPhotoUrl, SIGNAL(urlSelected(const QString &)), SLOT(slotEnableAndDisableWidgets()));
+ connect( mainWidget->cmbAccountPhoto, SIGNAL(activated ( int )), SLOT(slotEnableAndDisableWidgets()));
+
+
+ mainWidget->btnClearPhoto->setIconSet( SmallIconSet( QApplication::reverseLayout() ? "locationbar_erase" : "clear_left" ) );
+ connect( mainWidget->btnClearPhoto, SIGNAL( clicked() ), this, SLOT( slotClearPhotoClicked() ) );
+ connect( mainWidget->widAddresseeLink, SIGNAL( addresseeChanged( const KABC::Addressee & ) ), SLOT( slotAddresseeChanged( const KABC::Addressee & ) ) );
+ mainWidget->chkUseCustomIcons->setChecked( item->metaContact()->useCustomIcon() );
+
+ QString offlineName = item->metaContact()->icon( Kopete::ContactListElement::Offline );
+ if(offlineName.isEmpty())
+ offlineName = QString::fromLatin1(MC_OFF); // Default
+
+ QString onlineName = item->metaContact()->icon( Kopete::ContactListElement::Online );
+ if(onlineName.isEmpty())
+ onlineName = QString::fromLatin1(MC_ON); // Default
+
+ QString awayName = item->metaContact()->icon( Kopete::ContactListElement::Away );
+ if(awayName.isEmpty())
+ awayName = QString::fromLatin1(MC_AW); // Default
+
+ QString unknownName = item->metaContact()->icon( Kopete::ContactListElement::Unknown );
+ if(unknownName.isEmpty())
+ unknownName = QString::fromLatin1(MC_UNK); // Default
+
+ mainWidget->icnbOffline->setIcon( offlineName );
+ mainWidget->icnbOnline->setIcon( onlineName );
+ mainWidget->icnbAway->setIcon( awayName );
+ mainWidget->icnbUnknown->setIcon( unknownName );
+
+ mainWidget->widAddresseeLink->setMetaContact( lvi->metaContact() );
+
+ mAddressBookUid = item->metaContact()->metaContactId();
+
+ mExport = 0L;
+
+ if ( !mAddressBookUid.isEmpty() )
+ {
+ KABC::AddressBook *ab = Kopete::KABCPersistence::self()->addressBook();
+ KABC::Addressee a = ab->findByUid( mAddressBookUid );
+ mainWidget->widAddresseeLink->setAddressee( a );
+
+ if ( !a.isEmpty() )
+ {
+ mainWidget->btnImportKABC->setEnabled( true );
+ mainWidget->btnExportKABC->setEnabled( true );
+ mExport = new KopeteAddressBookExport( this, item->metaContact() );
+
+ mSound = a.sound();
+ mFromKABC->setEnabled( !( mSound.isIntern() || mSound.url().isEmpty() ) );
+ }
+ }
+
+ slotLoadNameSources();
+ slotLoadPhotoSources();
+
+ connect( this, SIGNAL(okClicked()), this, SLOT( slotOkClicked() ) );
+ connect( mainWidget->chkUseCustomIcons, SIGNAL( toggled( bool ) ),
+ this, SLOT( slotUseCustomIconsToggled( bool ) ) );
+ connect( mainWidget->btnImportKABC, SIGNAL( clicked() ),
+ this, SLOT( slotImportClicked() ) );
+ connect( mainWidget->btnExportKABC, SIGNAL( clicked() ),
+ this, SLOT( slotExportClicked() ) );
+ connect( mFromKABC, SIGNAL( clicked() ),
+ this, SLOT( slotFromKABCClicked() ) );
+ connect( mNotificationProps->widget()->customSound, SIGNAL( openFileDialog( KURLRequester * )),
+ SLOT( slotOpenSoundDialog( KURLRequester * )));
+
+ slotUseCustomIconsToggled( mainWidget->chkUseCustomIcons->isChecked() );
+ slotEnableAndDisableWidgets();
+}
+
+KopeteMetaLVIProps::~KopeteMetaLVIProps()
+{
+}
+
+
+void KopeteMetaLVIProps::slotLoadNameSources()
+{
+ Kopete::Contact* trackingName = item->metaContact()->displayNameSourceContact();
+ QPtrList< Kopete::Contact > cList = item->metaContact()->contacts();
+ QPtrListIterator<Kopete::Contact> it( cList );
+ mainWidget->cmbAccountName->clear();
+ for( ; it.current(); ++it )
+ {
+ QString acct = it.current()->property( Kopete::Global::Properties::self()->nickName() ).value().toString() + " <" + it.current()->contactId() + ">";
+ QPixmap acctIcon = it.current()->account()->accountIcon();
+ mainWidget->cmbAccountName->insertItem( acctIcon, acct );
+
+ // Select this item if it's the one we're tracking.
+ if( it.current() == trackingName )
+ {
+ mainWidget->cmbAccountName->setCurrentItem( mainWidget->cmbAccountName->count() - 1 );
+ }
+ }
+
+ mainWidget->edtDisplayName->setText( item->metaContact()->customDisplayName() );
+
+ Kopete::MetaContact::PropertySource nameSource = item->metaContact()->displayNameSource();
+
+ mainWidget->radioNameContact->setChecked(nameSource == Kopete::MetaContact::SourceContact);
+ mainWidget->radioNameKABC->setChecked(nameSource == Kopete::MetaContact::SourceKABC);
+ mainWidget->radioNameCustom->setChecked(nameSource == Kopete::MetaContact::SourceCustom);
+
+}
+
+void KopeteMetaLVIProps::slotLoadPhotoSources()
+{
+ // fill photo contact sources
+ QPtrList< Kopete::Contact > cList = item->metaContact()->contacts();
+ m_withPhotoContacts.clear();
+ Kopete::Contact* trackingPhoto = item->metaContact()->photoSourceContact();
+ mainWidget->cmbAccountPhoto->clear();
+ QPtrListIterator<Kopete::Contact> itp( cList );
+ for( ; itp.current(); ++itp )
+ {
+ Kopete::Contact *citem = itp.current();
+ if ( citem->hasProperty( Kopete::Global::Properties::self()->photo().key() ) )
+ {
+ QString acct = citem->property( Kopete::Global::Properties::self()->nickName() ).value().toString() + " <" + citem->contactId() + ">";
+ QPixmap acctIcon = citem->account()->accountIcon();
+ mainWidget->cmbAccountPhoto->insertItem( acctIcon, acct );
+
+ // Select this item if it's the one we're tracking.
+ if( citem == trackingPhoto )
+ {
+ mainWidget->cmbAccountPhoto->setCurrentItem( mainWidget->cmbAccountPhoto->count() - 1 );
+ }
+ m_withPhotoContacts.insert(mainWidget->cmbAccountPhoto->count() - 1 , citem );
+ }
+ }
+#if KDE_IS_VERSION(3,4,0)
+ mainWidget->cmbPhotoUrl->setKURL(item->metaContact()->customPhoto().url());
+#else
+ mainWidget->cmbPhotoUrl->setURL(item->metaContact()->customPhoto().url());
+#endif
+
+ Kopete::MetaContact::PropertySource photoSource = item->metaContact()->photoSource();
+
+ mainWidget->radioPhotoContact->setChecked(photoSource == Kopete::MetaContact::SourceContact);
+ mainWidget->radioPhotoKABC->setChecked(photoSource == Kopete::MetaContact::SourceKABC);
+ mainWidget->radioPhotoCustom->setChecked(photoSource == Kopete::MetaContact::SourceCustom);
+
+ mainWidget->chkSyncPhoto->setChecked(item->metaContact()->isPhotoSyncedWithKABC());
+}
+
+void KopeteMetaLVIProps::slotEnableAndDisableWidgets()
+{
+ KABC::AddressBook *ab = Kopete::KABCPersistence::self()->addressBook();
+ KABC::Addressee a = ab->findByUid( mAddressBookUid );
+ bool validLink = ! a.isEmpty();
+ // kabc source requires a kabc link
+ mainWidget->radioNameKABC->setEnabled(validLink);
+ // kabc source requires a kabc link
+ mainWidget->radioPhotoKABC->setEnabled(validLink);
+ // sync with kabc has no sense if we use kabc as source (sync kabc with kabc? uh?)
+ // it has also no sense if they are no kabc link
+ if( selectedPhotoSource() == Kopete::MetaContact::SourceKABC || !validLink )
+ {
+ mainWidget->chkSyncPhoto->setEnabled(false);
+ }
+ else
+ {
+ mainWidget->chkSyncPhoto->setEnabled(true);
+ }
+
+ mainWidget->radioNameContact->setEnabled(item->metaContact()->contacts().count());
+ mainWidget->radioPhotoContact->setEnabled(!m_withPhotoContacts.isEmpty());
+
+ mainWidget->cmbAccountName->setEnabled(selectedNameSource() == Kopete::MetaContact::SourceContact);
+ mainWidget->edtDisplayName->setEnabled(selectedNameSource() == Kopete::MetaContact::SourceCustom);
+
+ mainWidget->cmbAccountPhoto->setEnabled(selectedPhotoSource() == Kopete::MetaContact::SourceContact);
+ mainWidget->cmbPhotoUrl->setEnabled(selectedPhotoSource() == Kopete::MetaContact::SourceCustom);
+
+ if ( m_withPhotoContacts.isEmpty() )
+ {
+ mainWidget->cmbAccountPhoto->clear();
+ mainWidget->cmbAccountPhoto->insertItem(i18n("No Contacts with Photo Support"));
+ mainWidget->cmbAccountPhoto->setEnabled(false);
+ }
+
+ QImage photo;
+ switch ( selectedPhotoSource() )
+ {
+ case Kopete::MetaContact::SourceKABC:
+ photo = Kopete::photoFromKABC(mAddressBookUid);
+ break;
+ case Kopete::MetaContact::SourceContact:
+ photo = Kopete::photoFromContact(selectedPhotoSourceContact());
+ break;
+ case Kopete::MetaContact::SourceCustom:
+ photo = QImage(KURL::decode_string(mainWidget->cmbPhotoUrl->url()));
+ break;
+ }
+ if( !photo.isNull() )
+ mainWidget->photoLabel->setPixmap(QPixmap(photo.smoothScale( 64, 92, QImage::ScaleMin )));
+ else
+ mainWidget->photoLabel->setPixmap( QPixmap() );
+}
+
+Kopete::MetaContact::PropertySource KopeteMetaLVIProps::selectedNameSource() const
+{
+ if ( mainWidget->radioNameKABC->isChecked() )
+ return Kopete::MetaContact::SourceKABC;
+ if ( mainWidget->radioNameContact->isChecked() )
+ return Kopete::MetaContact::SourceContact;
+ if ( mainWidget->radioNameCustom->isChecked() )
+ return Kopete::MetaContact::SourceCustom;
+ else
+ return Kopete::MetaContact::SourceCustom;
+}
+
+Kopete::MetaContact::PropertySource KopeteMetaLVIProps::selectedPhotoSource() const
+{
+ if ( mainWidget->radioPhotoKABC->isChecked() )
+ return Kopete::MetaContact::SourceKABC;
+ if ( mainWidget->radioPhotoContact->isChecked() )
+ return Kopete::MetaContact::SourceContact;
+ if ( mainWidget->radioPhotoCustom->isChecked() )
+ return Kopete::MetaContact::SourceCustom;
+ else
+ return Kopete::MetaContact::SourceCustom;
+}
+
+Kopete::Contact* KopeteMetaLVIProps::selectedNameSourceContact() const
+{
+ Kopete::Contact *c= item->metaContact()->contacts().at( mainWidget->cmbAccountName->currentItem() );
+ return c ? c : 0L;
+}
+
+Kopete::Contact* KopeteMetaLVIProps::selectedPhotoSourceContact() const
+{
+ if (m_withPhotoContacts.isEmpty())
+ return 0L;
+ Kopete::Contact *c = m_withPhotoContacts[mainWidget->cmbAccountPhoto->currentItem() ];
+ return c ? c : 0L;
+}
+
+void KopeteMetaLVIProps::slotOkClicked()
+{
+ // update meta contact's UID
+ item->metaContact()->setMetaContactId( mAddressBookUid );
+ //this has to be done first, in the case something is synced with KABC (see bug 109494)
+
+ // set custom display name
+ if( mainWidget->edtDisplayName->text() != item->metaContact()->customDisplayName() )
+ item->metaContact()->setDisplayName( mainWidget->edtDisplayName->text() );
+
+ item->metaContact()->setDisplayNameSource(selectedNameSource());
+ item->metaContact()->setDisplayNameSourceContact( selectedNameSourceContact() );
+
+ // set photo source
+ item->metaContact()->setPhotoSource(selectedPhotoSource());
+ item->metaContact()->setPhotoSourceContact( selectedPhotoSourceContact() );
+ if ( !mainWidget->cmbPhotoUrl->url().isEmpty())
+ item->metaContact()->setPhoto(KURL::fromPathOrURL((mainWidget->cmbPhotoUrl->url())));
+ item->metaContact()->setPhotoSyncedWithKABC( mainWidget->chkSyncPhoto->isChecked() );
+
+ item->metaContact()->setUseCustomIcon(
+ mainWidget->chkUseCustomIcons->isChecked() );
+
+ // only call setIcon if any of the icons is not set to default icon
+ if(
+ mainWidget->icnbOffline->icon() != MC_OFF ||
+ mainWidget->icnbOnline->icon() != MC_ON ||
+ mainWidget->icnbAway->icon() != MC_AW ||
+ mainWidget->icnbUnknown->icon() != MC_UNK )
+ {
+ item->metaContact()->setIcon( mainWidget->icnbOffline->icon(),
+ Kopete::ContactListElement::Offline );
+
+ item->metaContact()->setIcon( mainWidget->icnbOnline->icon(),
+ Kopete::ContactListElement::Online );
+
+ item->metaContact()->setIcon( mainWidget->icnbAway->icon(),
+ Kopete::ContactListElement::Away );
+
+ item->metaContact()->setIcon( mainWidget->icnbUnknown->icon(),
+ Kopete::ContactListElement::Unknown );
+ }
+
+ mNotificationProps->storeCurrentCustoms();
+}
+
+void KopeteMetaLVIProps::slotUseCustomIconsToggled(bool on)
+{
+ mainWidget->lblOffline->setEnabled( on );
+ mainWidget->lblOnline->setEnabled( on );
+ mainWidget->lblAway->setEnabled( on );
+ mainWidget->lblUnknown->setEnabled( on );
+
+ mainWidget->icnbOffline->setEnabled( on );
+ mainWidget->icnbOnline->setEnabled( on );
+ mainWidget->icnbAway->setEnabled( on );
+ mainWidget->icnbUnknown->setEnabled( on );
+}
+
+void KopeteMetaLVIProps::slotAddresseeChanged( const KABC::Addressee & a )
+{
+ if ( !a.isEmpty() )
+ {
+ mSound = a.sound();
+ mFromKABC->setEnabled( !( mSound.isIntern() || mSound.url().isEmpty() ) );
+ mainWidget->btnExportKABC->setEnabled( true );
+ mainWidget->btnImportKABC->setEnabled( true );
+ // set/update the MC's addressee uin field
+ mAddressBookUid = a.uid();
+ }
+ else
+ {
+ mainWidget->btnExportKABC->setEnabled( false );
+ mainWidget->btnImportKABC->setEnabled( false );
+ mAddressBookUid = QString::null;
+ mainWidget->radioNameContact->setChecked( true );
+ mainWidget->radioPhotoContact->setChecked( true );
+ }
+ slotEnableAndDisableWidgets();
+}
+
+void KopeteMetaLVIProps::slotExportClicked()
+{
+ item->metaContact()->setMetaContactId( mAddressBookUid );
+ delete mExport;
+ mExport = new KopeteAddressBookExport( this, item->metaContact() );
+ if ( mExport->showDialog() == QDialog::Accepted )
+ mExport->exportData();
+}
+
+void KopeteMetaLVIProps::slotImportClicked()
+{
+ item->metaContact()->setMetaContactId( mAddressBookUid );
+ if ( Kopete::KABCPersistence::self()->syncWithKABC( item->metaContact() ) )
+ KMessageBox::queuedMessageBox( this, KMessageBox::Information,
+ i18n( "No contacts were imported from the address book." ),
+ i18n( "No Change" ) );
+}
+
+void KopeteMetaLVIProps::slotFromKABCClicked()
+{
+ mNotificationProps->widget()->customSound->setURL( mSound.url() );
+}
+
+void KopeteMetaLVIProps::slotOpenSoundDialog( KURLRequester *requester )
+{
+ // taken from kdelibs/kio/kfile/knotifydialog.cpp
+ // only need to init this once
+ requester->disconnect( SIGNAL( openFileDialog( KURLRequester * )),
+ this, SLOT( slotOpenSoundDialog( KURLRequester * )));
+
+ KFileDialog *fileDialog = requester->fileDialog();
+ //fileDialog->setCaption( i18n("Select Sound File") );
+ QStringList filters;
+ filters << "audio/x-wav" << "audio/x-mp3" << "application/ogg"
+ << "audio/x-adpcm";
+ fileDialog->setMimeFilter( filters );
+
+ // find the first "sound"-resource that contains files
+ QStringList soundDirs =
+ KGlobal::dirs()->findDirs("data", "kopete/sounds");
+ soundDirs += KGlobal::dirs()->resourceDirs( "sound" );
+
+ if ( !soundDirs.isEmpty() ) {
+ KURL soundURL;
+ QDir dir;
+ dir.setFilter( QDir::Files | QDir::Readable );
+ QStringList::ConstIterator it = soundDirs.begin();
+ while ( it != soundDirs.end() ) {
+ dir = *it;
+ if ( dir.isReadable() && dir.count() > 2 ) {
+ soundURL.setPath( *it );
+ fileDialog->setURL( soundURL );
+ break;
+ }
+ ++it;
+ }
+ }
+}
+
+void KopeteMetaLVIProps::slotClearPhotoClicked()
+{
+#if KDE_IS_VERSION(3,4,0)
+ mainWidget->cmbPhotoUrl->setKURL( KURL() );
+#else
+ mainWidget->cmbPhotoUrl->setURL( QString::null );
+#endif
+ item->metaContact()->setPhoto( KURL() );
+
+ slotEnableAndDisableWidgets();
+}
+
+#include "kopetelviprops.moc"