/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you want to add, delete, or rename functions or slots, use
** Qt Designer to update this file, preserving your code.
**
** You should not define a constructor or destructor in this file.
** Instead, write your code in functions called init() and destroy().
** These will automatically be called by the form's constructor and
** destructor.
*****************************************************************************/

/*
   Copyright (C) 2005-2007  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
*/

void BuddyForm::init()
{
	getAddressForm = 0;
}

void BuddyForm::destroy()
{
	if (getAddressForm) {
		MEMMAN_DELETE(getAddressForm);
		delete getAddressForm;
	}
}

void BuddyForm::showNew(t_buddy_list &_buddy_list, QListViewItem *_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);
}


syntax highlighted by Code2HTML, v. 0.9.1