diff options
Diffstat (limited to 'src/gui/buddyform.cpp')
-rw-r--r-- | src/gui/buddyform.cpp | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/src/gui/buddyform.cpp b/src/gui/buddyform.cpp new file mode 100644 index 0000000..a8ae059 --- /dev/null +++ b/src/gui/buddyform.cpp @@ -0,0 +1,180 @@ +/* + Copyright (C) 2005-2009 Michel de Boer <michel@twinklephone.com> + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "gui.h" +#include "sockets/url.h" +#include "buddylistview.h" +#include "audits/memman.h" +#include "buddyform.h" +/* + * Constructs a BuddyForm as a child of 'parent', with the + * name 'name' and widget flags set to 'f'. + * + * The dialog will by default be modeless, unless you set 'modal' to + * true to construct a modal dialog. + */ +BuddyForm::BuddyForm(QWidget* parent, const char* name, bool modal, Qt::WindowFlags fl) + : QDialog(parent, name, modal, fl) +{ + setupUi(this); + + init(); +} + +/* + * Destroys the object and frees any allocated resources + */ +BuddyForm::~BuddyForm() +{ + destroy(); + // no need to delete child widgets, Qt does it all for us +} + +/* + * Sets the strings of the subwidgets using the current + * language. + */ +void BuddyForm::languageChange() +{ + retranslateUi(this); +} + + +void BuddyForm::init() +{ + getAddressForm = 0; +} + +void BuddyForm::destroy() +{ + if (getAddressForm) { + MEMMAN_DELETE(getAddressForm); + delete getAddressForm; + } +} + +void BuddyForm::showNew(t_buddy_list &_buddy_list, Q3ListViewItem *_profileItem) +{ + user_config = _buddy_list.get_user_profile(); + edit_mode = false; + buddy_list = &_buddy_list; + profileItem = _profileItem; + + QDialog::show(); +} + +void BuddyForm::showEdit(t_buddy &buddy) +{ + user_config = buddy.get_user_profile(); + edit_mode = true; + edit_buddy = &buddy; + buddy_list = edit_buddy->get_buddy_list(); + + nameLineEdit->setText(buddy.get_name().c_str()); + phoneLineEdit->setText(buddy.get_sip_address().c_str()); + subscribeCheckBox->setChecked(buddy.get_may_subscribe_presence()); + + phoneLineEdit->setEnabled(false); + phoneTextLabel->setEnabled(false); + addressToolButton->hide(); + + QDialog::show(); +} + +void BuddyForm::validate() +{ + QString name = nameLineEdit->text().stripWhiteSpace(); + QString address = phoneLineEdit->text().stripWhiteSpace(); + + if (name.isEmpty()) { + ((t_gui *)ui)->cb_show_msg(this, + tr("You must fill in a name.").ascii(), MSG_CRITICAL); + nameLineEdit->setFocus(); + return; + } + + string dest = ui->expand_destination(user_config, address.ascii()); + t_url dest_url(dest); + if (!dest_url.is_valid()) { + ((t_gui *)ui)->cb_show_msg(this, + tr("Invalid phone.").ascii(), MSG_CRITICAL); + phoneLineEdit->setFocus(); + return; + } + + if (edit_mode) { + // Edit existing buddy + bool must_subscribe = false; + bool must_unsubscribe = false; + + if (edit_buddy->get_may_subscribe_presence() != subscribeCheckBox->isChecked()) + { + if (subscribeCheckBox->isChecked()) { + must_subscribe = true;; + } else { + must_unsubscribe = true; + } + } + + edit_buddy->set_name(nameLineEdit->text().stripWhiteSpace().ascii()); + edit_buddy->set_sip_address(phoneLineEdit->text().stripWhiteSpace().ascii()); + edit_buddy->set_may_subscribe_presence(subscribeCheckBox->isChecked()); + + if (must_subscribe) edit_buddy->subscribe_presence(); + if (must_unsubscribe) edit_buddy->unsubscribe_presence(); + } else { + // Add a new buddy + t_buddy buddy; + buddy.set_name(nameLineEdit->text().stripWhiteSpace().ascii()); + buddy.set_sip_address(phoneLineEdit->text().stripWhiteSpace().ascii()); + buddy.set_may_subscribe_presence(subscribeCheckBox->isChecked()); + + t_buddy *new_buddy = buddy_list->add_buddy(buddy); + new BuddyListViewItem(profileItem, new_buddy); + new_buddy->subscribe_presence(); + } + + string err_msg; + if (!buddy_list->save(err_msg)) { + QString msg = tr("Failed to save buddy list: %1").arg(err_msg.c_str()); + ((t_gui *)ui)->cb_show_msg(this, msg.ascii(), MSG_CRITICAL); + } + + accept(); +} + +void BuddyForm::showAddressBook() +{ + if (!getAddressForm) { + getAddressForm = new GetAddressForm( + this, "select address", true); + MEMMAN_NEW(getAddressForm); + } + + connect(getAddressForm, + SIGNAL(address(const QString &, const QString &)), + this, SLOT(selectedAddress(const QString &, const QString &))); + + getAddressForm->show(); +} + +void BuddyForm::selectedAddress(const QString &name, const QString &phone) +{ + nameLineEdit->setText(name); + phoneLineEdit->setText(phone); +} |