You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/kopete/addaccountwizard/addaccountwizard.cpp

223 lines
7.2 KiB

/*
addaccountwizard.cpp - Kopete Add Account Wizard
Copyright (c) 2003-2004 by Olivier Goffart <ogoffart @ kde.org>
Copyright (c) 2003 by Martijn Klingens <klingens@kde.org>
Kopete (c) 2003-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 "addaccountwizard.h"
#include <tqcheckbox.h>
#include <tqlabel.h>
#include <kcolorbutton.h>
#include <kdebug.h>
#include <kiconloader.h>
#include <tdelistview.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <kplugininfo.h>
#include "addaccountwizardpage1.h"
#include "addaccountwizardpage2.h"
#include "editaccountwidget.h"
#include "kopeteaccount.h"
#include "kopeteaccountmanager.h"
#include "kopeteprotocol.h"
#include "kopetepluginmanager.h"
AddAccountWizard::AddAccountWizard( TQWidget *parent, const char *name, bool modal, bool firstRun )
:
KWizard(parent, name, modal, WDestructiveClose),
m_accountPage(0),
m_proto(0)
{
// setup the select service page
m_selectService = new AddAccountWizardPage1(this);
if ( firstRun )
m_selectService->m_header->setText( i18n( "1st message shown to users on first run of Kopete. Please keep the formatting.", "<h2>Welcome to Kopete</h2><p>Which messaging service do you want to connect to?</p>") );
addPage(m_selectService, m_selectService->caption());
setNextEnabled(m_selectService, false);
// setup the final page
m_finish = new AddAccountWizardPage2(this);
if ( firstRun )
m_finish->m_header->setText( i18n( "2nd message shown to users on first run of Kopete. Please keep the formatting.", "<h2>Congratulations</h2><p>You have finished configuring the account. You can add more accounts with <i>Settings->Configure</i>. Please click the \"Finish\" button.</p>") );
addPage(m_finish, m_finish->caption());
setFinishEnabled(m_finish, true);
// add the available messanger services to the dialogs list
TQValueList<KPluginInfo *> protocols = Kopete::PluginManager::self()->availablePlugins("Protocols");
for (TQValueList<KPluginInfo *>::Iterator it = protocols.begin(); it != protocols.end(); ++it)
{
TQListViewItem *pluginItem = new TQListViewItem(m_selectService->protocolListView);
pluginItem->setPixmap(0, SmallIcon((*it)->icon()));
pluginItem->setText(0, (*it)->name());
pluginItem->setText(1, (*it)->comment());
m_protocolItems.insert(pluginItem, *it);
}
// focus the ListView and select the first item
TQListView &protocol_list = *m_selectService->protocolListView;
protocol_list.setFocus();
if (protocol_list.childCount() > 0)
{
protocol_list.setSelected(protocol_list.firstChild(), true);
}
// hook up the user input
connect(m_selectService->protocolListView, TQT_SIGNAL(clicked(TQListViewItem *)),
this, TQT_SLOT(slotProtocolListClicked(TQListViewItem *)));
connect(m_selectService->protocolListView, TQT_SIGNAL(selectionChanged(TQListViewItem *)),
this, TQT_SLOT( slotProtocolListClicked(TQListViewItem *)));
connect(m_selectService->protocolListView, TQT_SIGNAL(doubleClicked(TQListViewItem *)),
this, TQT_SLOT(slotProtocolListDoubleClicked(TQListViewItem *)));
}
void AddAccountWizard::slotProtocolListClicked( TQListViewItem * )
{
// Make sure a protocol is selected before allowing the user to continue
setNextEnabled(m_selectService, m_selectService->protocolListView->selectedItem() != 0);
}
void AddAccountWizard::slotProtocolListDoubleClicked( TQListViewItem *lvi )
{
// proceed to the next wizard page if we double click a protocol
next();
}
void AddAccountWizard::back()
{
if (currentPage() == dynamic_cast<TQWidget *>(m_accountPage))
{
// Deletes the accountPage, KWizard does not like deleting pages
// using different pointers, it only seems to watch its own pointer
delete currentPage();
m_accountPage = 0;
m_proto = 0;
// removePage() already goes back to previous page, no back() needed
}
else
{
KWizard::back();
}
}
void AddAccountWizard::next()
{
if ( currentPage() == m_selectService &&
( m_selectService->protocolListView->selectedItem() ) )
{
TQListViewItem *lvi = m_selectService->protocolListView->selectedItem();
m_proto = dynamic_cast<Kopete::Protocol *>(Kopete::PluginManager::self()->loadPlugin(m_protocolItems[lvi]->pluginName()));
if (!m_proto)
{
KMessageBox::queuedMessageBox(this, KMessageBox::Error,
i18n("Cannot load the %1 protocol plugin.").arg(m_protocolItems[lvi]->name()),
i18n("Error While Adding Account"));
return;
}
m_accountPage = m_proto->createEditAccountWidget(0, this);
if (!m_accountPage)
{
KMessageBox::queuedMessageBox(this, KMessageBox::Error,
i18n("This protocol does not currently support adding accounts."),
i18n("Error While Adding Account"));
return;
}
insertPage(dynamic_cast<TQWidget *>(m_accountPage), i18n("Step Two: Account Information"), indexOf(m_finish));
KWizard::next();
}
else if (currentPage() == dynamic_cast<TQWidget *>(m_accountPage))
{
// check the data of the page is valid
if (!m_accountPage->validateData())
{
return;
}
TQColor col = Kopete::AccountManager::self()->guessColor(m_proto);
m_finish->mColorButton->setColor(col);
m_finish->mUseColor->setChecked(col.isValid());
KWizard::next();
}
else
{
kdDebug(14100) << k_funcinfo << "Next pressed on misc page" << endl;
KWizard::next();
}
// if it's the finish page, focus the finish button
if (currentPage() == m_finish)
{
finishButton()->setFocus();
}
}
void AddAccountWizard::accept()
{
// registeredAccount shouldn't probably be called here. Anyway, if the account is already registered,
// it won't be registered twice
Kopete::AccountManager *manager = Kopete::AccountManager::self();
Kopete::Account *account = manager->registerAccount(m_accountPage->apply());
// if the account wasn't created correctly then leave
if (!account)
{
return;
}
// Make sure the protocol is correctly enabled. This is not really needed, but still good
const TQString PROTO_NAME = m_proto->pluginId().remove("Protocol").lower();
Kopete::PluginManager::self()->setPluginEnabled(PROTO_NAME , true);
// setup the custom colour
if (m_finish->mUseColor->isChecked())
{
account->setColor(m_finish->mColorButton->color());
}
// connect if neccessary
if (m_finish->mConnectNow->isChecked())
{
account->connect();
}
KWizard::accept();
}
void AddAccountWizard::reject()
{
// if we have a protocol plugin loaded and its not being used, unload it
if (m_proto && Kopete::AccountManager::self()->accounts(m_proto).isEmpty())
{
const TQString PROTO_NAME = m_proto->pluginId().remove("Protocol").lower();
Kopete::PluginManager::self()->unloadPlugin(PROTO_NAME);
}
KWizard::reject();
}
#include "addaccountwizard.moc"
// vim: set noet ts=4 sts=4 sw=4: