X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcoreconfigwizard.cpp;h=837b08442a69e70c18888879da658ef997804d32;hp=799801a3631841ca781f13b04442613e482928ba;hb=5ba28fb36a747bd9a2c05a58f0533d1e38c2a0de;hpb=c9ee7972b2c9b84e37f363befa05bf5fb04114af diff --git a/src/qtui/coreconfigwizard.cpp b/src/qtui/coreconfigwizard.cpp index 799801a3..837b0844 100644 --- a/src/qtui/coreconfigwizard.cpp +++ b/src/qtui/coreconfigwizard.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel IRC Team * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,19 +20,28 @@ #include #include +#include +#include #include "coreconfigwizard.h" +#include "coreconnection.h" +#include "iconloader.h" -//#include "client.h" -//#include "identitiessettingspage.h" +CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QList &backends, QWidget *parent) + : QWizard(parent), + _connection(connection) +{ + setModal(true); + setAttribute(Qt::WA_DeleteOnClose); + + foreach(const QVariant &v, backends) + _backends[v.toMap()["DisplayName"].toString()] = v; -CoreConfigWizard::CoreConfigWizard(const QList &backends, QWidget *parent) : QWizard(parent) { - foreach(QVariant v, backends) _backends[v.toMap()["DisplayName"].toString()] = v; setPage(IntroPage, new CoreConfigWizardPages::IntroPage(this)); setPage(AdminUserPage, new CoreConfigWizardPages::AdminUserPage(this)); setPage(StorageSelectionPage, new CoreConfigWizardPages::StorageSelectionPage(_backends, this)); syncPage = new CoreConfigWizardPages::SyncPage(this); - connect(syncPage, SIGNAL(setupCore(const QString &)), this, SLOT(prepareCoreSetup(const QString &))); + connect(syncPage, SIGNAL(setupCore(const QString &, const QVariantMap &)), SLOT(prepareCoreSetup(const QString &, const QVariantMap &))); setPage(SyncPage, syncPage); syncRelayPage = new CoreConfigWizardPages::SyncRelayPage(this); connect(syncRelayPage, SIGNAL(startOver()), this, SLOT(startOver())); @@ -58,32 +67,37 @@ CoreConfigWizard::CoreConfigWizard(const QList &backends, QWidget *par setModal(true); setWindowTitle(tr("Core Configuration Wizard")); - setPixmap(QWizard::LogoPixmap, QPixmap(":icons/quassel-icon.png")); + setPixmap(QWizard::LogoPixmap, DesktopIcon("quassel")); + + connect(connection, SIGNAL(coreSetupSuccess()), SLOT(coreSetupSuccess())); + connect(connection, SIGNAL(coreSetupFailed(QString)), SLOT(coreSetupFailed(QString))); + //connect(connection, SIGNAL(loginSuccess()), SLOT(loginSuccess())); + connect(connection, SIGNAL(synchronized()), SLOT(syncFinished())); + connect(this, SIGNAL(rejected()), connection, SLOT(disconnectFromCore())); } QHash CoreConfigWizard::backends() const { return _backends; } -void CoreConfigWizard::prepareCoreSetup(const QString &backend) { +void CoreConfigWizard::prepareCoreSetup(const QString &backend, const QVariantMap &properties) { // Prevent the user from changing any settings he already specified... - foreach(int idx, visitedPages()) page(idx)->setEnabled(false); + foreach(int idx, visitedPages()) + page(idx)->setEnabled(false); + QVariantMap foo; foo["AdminUser"] = field("adminUser.user").toString(); foo["AdminPasswd"] = field("adminUser.password").toString(); foo["Backend"] = backend; - emit setupCore(foo); + foo["ConnectionProperties"] = properties; + coreConnection()->doCoreSetup(foo); } void CoreConfigWizard::coreSetupSuccess() { syncPage->setStatus(tr("Your core has been successfully configured. Logging you in...")); syncPage->setError(false); syncRelayPage->setMode(CoreConfigWizardPages::SyncRelayPage::Error); - QVariantMap loginData; - loginData["User"] = field("adminUser.user"); - loginData["Password"] = field("adminUser.password"); - loginData["RememberPasswd"] = field("adminUser.rememberPasswd"); - emit loginToCore(loginData); + coreConnection()->loginToCore(field("adminUser.user").toString(), field("adminUser.password").toString(), field("adminUser.rememberPasswd").toBool()); } void CoreConfigWizard::coreSetupFailed(const QString &error) { @@ -93,7 +107,6 @@ void CoreConfigWizard::coreSetupFailed(const QString &error) { //foreach(int idx, visitedPages()) page(idx)->setEnabled(true); //setStartId(SyncPage); //restart(); - } void CoreConfigWizard::startOver() { @@ -110,8 +123,7 @@ void CoreConfigWizard::loginSuccess() { } void CoreConfigWizard::syncFinished() { - // TODO: display identities and networks settings if appropriate! - // accept(); + accept(); } namespace CoreConfigWizardPages { @@ -160,9 +172,12 @@ bool AdminUserPage::isComplete() const { /*** Storage Selection Page ***/ -StorageSelectionPage::StorageSelectionPage(const QHash &backends, QWidget *parent) : QWizardPage(parent) { +StorageSelectionPage::StorageSelectionPage(const QHash &backends, QWidget *parent) + : QWizardPage(parent), + _connectionBox(0), + _backends(backends) +{ ui.setupUi(this); - _backends = backends; setTitle(tr("Select Storage Backend")); setSubTitle(tr("Please select a database backend for the Quassel Core storage to store the backlog and other data in.")); @@ -185,9 +200,114 @@ QString StorageSelectionPage::selectedBackend() const { return ui.backendList->currentText(); } +QVariantMap StorageSelectionPage::connectionProperties() const { + QString backend = ui.backendList->itemData(ui.backendList->currentIndex()).toString(); + + QVariantMap properties; + QStringList setupKeys = _backends[backend].toMap()["SetupKeys"].toStringList(); + if(!setupKeys.isEmpty()) { + QVariantMap defaults = _backends[backend].toMap()["SetupDefaults"].toMap(); + foreach(QString key, setupKeys) { + QWidget *widget = _connectionBox->findChild(key); + QVariant def; + if(defaults.contains(key)) { + def = defaults[key]; + } + switch(def.type()) { + case QVariant::Int: + { + QSpinBox *spinbox = qobject_cast(widget); + Q_ASSERT(spinbox); + def = QVariant(spinbox->value()); + } + break; + default: + { + QLineEdit *lineEdit = qobject_cast(widget); + Q_ASSERT(lineEdit); + def = QVariant(lineEdit->text()); + } + } + properties[key] = def; + } + } + qDebug() << properties; + + +// QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap(); +// if(!properties.isEmpty() && _connectionBox) { +// QVariantMap::iterator propertyIter = properties.begin(); +// while(propertyIter != properties.constEnd()) { +// QWidget *widget = _connectionBox->findChild(propertyIter.key()); +// switch(propertyIter.value().type()) { +// case QVariant::Int: +// { +// QSpinBox *spinbox = qobject_cast(widget); +// Q_ASSERT(spinbox); +// propertyIter.value() = QVariant(spinbox->value()); +// } +// break; +// default: +// { +// QLineEdit *lineEdit = qobject_cast(widget); +// Q_ASSERT(lineEdit); +// propertyIter.value() = QVariant(lineEdit->text()); +// } +// } +// propertyIter++; +// } +// } + return properties; +} + void StorageSelectionPage::on_backendList_currentIndexChanged() { QString backend = ui.backendList->itemData(ui.backendList->currentIndex()).toString(); ui.description->setText(_backends[backend].toMap()["Description"].toString()); + + if(_connectionBox) { + layout()->removeWidget(_connectionBox); + _connectionBox->deleteLater(); + _connectionBox = 0; + } + + QStringList setupKeys = _backends[backend].toMap()["SetupKeys"].toStringList(); + if(!setupKeys.isEmpty()) { + QVariantMap defaults = _backends[backend].toMap()["SetupDefaults"].toMap(); + QGroupBox *propertyBox = new QGroupBox(this); + propertyBox->setTitle(tr("Connection Properties")); + QFormLayout *formlayout = new QFormLayout; + + foreach(QString key, setupKeys) { + QWidget *widget = 0; + QVariant def; + if(defaults.contains(key)) { + def = defaults[key]; + } + switch(def.type()) { + case QVariant::Int: + { + QSpinBox *spinbox = new QSpinBox(propertyBox); + spinbox->setMaximum(64000); + spinbox->setValue(def.toInt()); + widget = spinbox; + } + break; + default: + { + QLineEdit *lineEdit = new QLineEdit(def.toString(), propertyBox); + if(key.toLower().contains("password")) { + lineEdit->setEchoMode(QLineEdit::Password); + } + widget = lineEdit; + } + } + widget->setObjectName(key); + formlayout->addRow(key + ":", widget); + } + propertyBox->setLayout(formlayout); + static_cast(layout())->insertWidget(layout()->indexOf(ui.descriptionBox) + 1, propertyBox); + _connectionBox = propertyBox; + } } /*** Sync Page ***/ @@ -201,11 +321,14 @@ SyncPage::SyncPage(QWidget *parent) : QWizardPage(parent) { void SyncPage::initializePage() { complete = false; hasError = false; - QString backend = qobject_cast(wizard()->page(CoreConfigWizard::StorageSelectionPage))->selectedBackend(); + + StorageSelectionPage *storagePage = qobject_cast(wizard()->page(CoreConfigWizard::StorageSelectionPage)); + QString backend = storagePage->selectedBackend(); + QVariantMap properties = storagePage->connectionProperties(); Q_ASSERT(!backend.isEmpty()); ui.user->setText(wizard()->field("adminUser.user").toString()); ui.backend->setText(backend); - emit setupCore(backend); + emit setupCore(backend, properties); } int SyncPage::nextId() const {