diff options
Diffstat (limited to 'konversation/src/linkaddressbook/linkaddressbookui.cpp')
-rw-r--r-- | konversation/src/linkaddressbook/linkaddressbookui.cpp | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/konversation/src/linkaddressbook/linkaddressbookui.cpp b/konversation/src/linkaddressbook/linkaddressbookui.cpp new file mode 100644 index 0000000..9347075 --- /dev/null +++ b/konversation/src/linkaddressbook/linkaddressbookui.cpp @@ -0,0 +1,191 @@ +/* + Kontact's Link IRC Nick to Addressbook contact Wizard + + This code was shamelessly stolen from kopete's add new contact wizard. + + Copyright (c) 2004 by John Tapsell <john@geola.co.uk> + + Copyright (c) 2003 by Will Stephenson <will@stevello.free-online.co.uk> + Copyright (c) 2002 by Nick Betcher <nbetcher@kde.org> + Copyright (c) 2002 by Duncan Mac-Vicar Prett <duncan@kde.org> + +Kopete (c) 2002-2004 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 "linkaddressbookui.h" +#include "addressbook.h" +#include "linkaddressbookui_base.h" +#include "addresseeitem.h" + +#include <qcheckbox.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qtooltip.h> +#include <qwhatsthis.h> + +#include <kapplication.h> +#include <kconfig.h> +#include <klocale.h> +#include <kiconloader.h> +#include <kdeversion.h> +#include <kinputdialog.h> +#include <kpushbutton.h> +#include <kactivelabel.h> +#include <kdebug.h> +#include <klistview.h> +#include <klistviewsearchline.h> +#include <kabc/addressbook.h> +#include <kabc/stdaddressbook.h> + + +LinkAddressbookUI::LinkAddressbookUI( QWidget *parent, const char *name, const QString &ircnick, const QString &servername, const QString &servergroup, const QString &suggested_realname ) +: KDialogBase(Plain, i18n("Link IRC Nick to Addressbook Contact"), Ok|Cancel|Help, Ok, parent, name) +{ + QFrame* page = plainPage(); + QGridLayout* pageLayout = new QGridLayout(page, 1, 1, 0, 0); + m_mainWidget = new LinkAddressbookUI_Base(page); + pageLayout->addWidget(m_mainWidget, 0, 0); + + enableButtonOK(false); + setHelp("linkaddressbook"); + m_addressBook = Konversation::Addressbook::self()->getAddressBook(); + + // Addressee validation connections + connect( m_mainWidget->addAddresseeButton, SIGNAL( clicked() ), SLOT( slotAddAddresseeClicked() ) ); + connect( m_mainWidget->addresseeListView, SIGNAL( clicked(QListViewItem * ) ), + SLOT( slotAddresseeListClicked( QListViewItem * ) ) ); + connect( m_mainWidget->addresseeListView, SIGNAL( selectionChanged( QListViewItem * ) ), + SLOT( slotAddresseeListClicked( QListViewItem * ) ) ); + connect( m_mainWidget->addresseeListView, SIGNAL( spacePressed( QListViewItem * ) ), + SLOT( slotAddresseeListClicked( QListViewItem * ) ) ); + + connect( m_addressBook, SIGNAL( addressBookChanged( AddressBook * ) ), this, SLOT( slotLoadAddressees() ) ); + connect( Konversation::Addressbook::self(), SIGNAL(addresseesChanged()), this, SLOT(slotLoadAddressees())); + + //We should add a clear KAction here. But we can't really do that with a designer file :\ this sucks + + m_ircnick = ircnick; + m_lower_ircnick = m_ircnick.lower(); + m_servername = servername; + m_servergroup = servergroup; + m_suggested_realname = suggested_realname; + + m_mainWidget->addresseeListView->setColumnText(2, SmallIconSet("email"), i18n("Email") ); + + if(m_suggested_realname.isEmpty()) m_suggested_realname = suggested_realname; + Q_ASSERT(!ircnick.isEmpty()); + m_mainWidget->kListViewSearchLine->setListView(m_mainWidget->addresseeListView); + slotLoadAddressees(); + + m_mainWidget->addresseeListView->setColumnWidthMode(0, QListView::Manual); + //Photo is 60, and it's nice to have a small gap, imho + m_mainWidget->addresseeListView->setColumnWidth(0, 63); + +} + +LinkAddressbookUI::~LinkAddressbookUI() +{ +} + +/** Read in contacts from addressbook, and select the contact that is for our nick. */ +void LinkAddressbookUI::slotLoadAddressees() +{ + m_mainWidget->addresseeListView->clear(); + + QString realname; + int num_contacts_with_nick=0; //There shouldn't be more than 1 contact with this irc nick. Warn the user if there is. + + KABC::AddressBook::Iterator it; + for( it = m_addressBook->begin(); it != m_addressBook->end(); ++it ) + if(Konversation::Addressbook::self()->hasNick(*it, m_lower_ircnick, m_servername, m_servergroup)) + { + realname = (*it).realName(); + num_contacts_with_nick++; + (new AddresseeItem( m_mainWidget->addresseeListView, (*it) ))->setSelected(true); + } else + /*AddresseeItem *item =*/ new AddresseeItem( m_mainWidget->addresseeListView, (*it)); + + if(num_contacts_with_nick == 0) + m_mainWidget->lblHeader->setText(i18n("Choose the person who '%1' is.").arg(m_ircnick)); + else if(num_contacts_with_nick == 1 && realname.isEmpty()) + m_mainWidget->lblHeader->setText(i18n("Currently '%1' is associated with a contact.").arg(m_ircnick)); + else if(num_contacts_with_nick == 1 && !realname.isEmpty()) + m_mainWidget->lblHeader->setText(i18n("Currently '%1' is associated with contact '%2'.").arg(m_ircnick).arg(realname)); + else + m_mainWidget->lblHeader->setText(i18n("<qt><b>Warning:</b> '%1' is currently being listed as belonging to multiple contacts. Please select the correct contact.</qt>").arg(m_ircnick)); + +} + +void LinkAddressbookUI::slotAddAddresseeClicked() +{ + // Pop up add addressee dialog + if(!Konversation::Addressbook::self()->getAndCheckTicket()) return; + QString addresseeName = KInputDialog::getText( i18n( "New Address Book Entry" ), + i18n( "Name the new entry:" ), + m_suggested_realname, 0, this ); + + if ( !addresseeName.isEmpty() ) + { + KABC::Addressee addr; + addr.setNameFromString( addresseeName ); + m_addressBook->insertAddressee(addr); + Konversation::Addressbook::self()->saveTicket(); + slotLoadAddressees(); + } + else + { + Konversation::Addressbook::self()->releaseTicket(); + } +} + +void LinkAddressbookUI::slotAddresseeListClicked( QListViewItem *addressee ) +{ + // enable ok if a valid addressee is selected + enableButtonOK(addressee ? addressee->isSelected() : false); +} + +void LinkAddressbookUI::slotOk() +{ + //// set the KABC uid in the metacontact + AddresseeItem *item = 0L; + item = static_cast<AddresseeItem *>( m_mainWidget->addresseeListView->selectedItem() ); + + KABC::Addressee addr; + if ( item ) + { + + addr = item->addressee(); + if(!Konversation::Addressbook::self()->getAndCheckTicket()) + { + return; + } + Konversation::Addressbook::self()->associateNickAndUnassociateFromEveryoneElse(addr, m_ircnick, m_servername, m_servergroup); + if(!Konversation::Addressbook::self()->saveTicket()) + { + return; + } + } + disconnect( m_addressBook, SIGNAL( addressBookChanged( AddressBook * ) ), this, SLOT( slotLoadAddressees() ) ); + deleteLater(); + accept(); +} + +void LinkAddressbookUI::slotCancel() +{ + disconnect( m_addressBook, SIGNAL( addressBookChanged( AddressBook * ) ), this, SLOT( slotLoadAddressees() ) ); + deleteLater(); + reject(); +} + +#include "linkaddressbookui.moc" + +// vim: set noet ts=4 sts=4 sw=4: |