summaryrefslogtreecommitdiffstats
path: root/kopete/kopete/addaccountwizard/addaccountwizard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/kopete/addaccountwizard/addaccountwizard.cpp')
-rw-r--r--kopete/kopete/addaccountwizard/addaccountwizard.cpp222
1 files changed, 222 insertions, 0 deletions
diff --git a/kopete/kopete/addaccountwizard/addaccountwizard.cpp b/kopete/kopete/addaccountwizard/addaccountwizard.cpp
new file mode 100644
index 00000000..5518c536
--- /dev/null
+++ b/kopete/kopete/addaccountwizard/addaccountwizard.cpp
@@ -0,0 +1,222 @@
+/*
+ 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 <qcheckbox.h>
+#include <qlabel.h>
+
+#include <kcolorbutton.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <klistview.h>
+#include <klocale.h>
+#include <kmessagebox.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( QWidget *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
+ QValueList<KPluginInfo *> protocols = Kopete::PluginManager::self()->availablePlugins("Protocols");
+ for (QValueList<KPluginInfo *>::Iterator it = protocols.begin(); it != protocols.end(); ++it)
+ {
+ QListViewItem *pluginItem = new QListViewItem(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
+ QListView &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, SIGNAL(clicked(QListViewItem *)),
+ this, SLOT(slotProtocolListClicked(QListViewItem *)));
+ connect(m_selectService->protocolListView, SIGNAL(selectionChanged(QListViewItem *)),
+ this, SLOT( slotProtocolListClicked(QListViewItem *)));
+ connect(m_selectService->protocolListView, SIGNAL(doubleClicked(QListViewItem *)),
+ this, SLOT(slotProtocolListDoubleClicked(QListViewItem *)));
+}
+
+void AddAccountWizard::slotProtocolListClicked( QListViewItem * )
+{
+ // Make sure a protocol is selected before allowing the user to continue
+ setNextEnabled(m_selectService, m_selectService->protocolListView->selectedItem() != 0);
+}
+
+void AddAccountWizard::slotProtocolListDoubleClicked( QListViewItem *lvi )
+{
+ // proceed to the next wizard page if we double click a protocol
+ next();
+}
+
+void AddAccountWizard::back()
+{
+ if (currentPage() == dynamic_cast<QWidget *>(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() ) )
+ {
+ QListViewItem *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<QWidget *>(m_accountPage), i18n("Step Two: Account Information"), indexOf(m_finish));
+ KWizard::next();
+ }
+ else if (currentPage() == dynamic_cast<QWidget *>(m_accountPage))
+ {
+ // check the data of the page is valid
+ if (!m_accountPage->validateData())
+ {
+ return;
+ }
+
+ QColor 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 QString 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 QString 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:
+