prettyficating the prompting for backend credentials
[quassel.git] / src / qtui / coreconfigwizard.cpp
index 030af57..0d5c977 100644 (file)
@@ -162,9 +162,12 @@ bool AdminUserPage::isComplete() const {
 
 /*** Storage Selection Page ***/
 
-StorageSelectionPage::StorageSelectionPage(const QHash<QString, QVariant> &backends, QWidget *parent) : QWizardPage(parent) {
+StorageSelectionPage::StorageSelectionPage(const QHash<QString, QVariant> &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."));
@@ -189,29 +192,61 @@ QString StorageSelectionPage::selectedBackend() const {
 
 QVariantMap StorageSelectionPage::connectionProperties() const {
   QString backend = ui.backendList->itemData(ui.backendList->currentIndex()).toString();
-  QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap();
-  if(!properties.isEmpty() && _connectionBox) {
-    QVariantMap::iterator propertyIter = properties.begin();
-    while(propertyIter != properties.constEnd()) {
-      QWidget *widget = _connectionBox->findChild<QWidget *>(propertyIter.key());
-      switch(propertyIter.value().type()) {
+
+  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<QWidget *>(key);
+      QVariant def;
+      if(defaults.contains(key)) {
+       def = defaults[key];
+      }
+      switch(def.type()) {
       case QVariant::Int:
        {
          QSpinBox *spinbox = qobject_cast<QSpinBox *>(widget);
          Q_ASSERT(spinbox);
-         propertyIter.value() = QVariant(spinbox->value());
+         def = QVariant(spinbox->value());
        }
        break;
       default:
        {
          QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget);
          Q_ASSERT(lineEdit);
-         propertyIter.value() = QVariant(lineEdit->text());
+         def = QVariant(lineEdit->text());
        }
       }
-      propertyIter++;
+      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<QWidget *>(propertyIter.key());
+//       switch(propertyIter.value().type()) {
+//       case QVariant::Int:
+//     {
+//       QSpinBox *spinbox = qobject_cast<QSpinBox *>(widget);
+//       Q_ASSERT(spinbox);
+//       propertyIter.value() = QVariant(spinbox->value());
+//     }
+//     break;
+//       default:
+//     {
+//       QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget);
+//       Q_ASSERT(lineEdit);
+//       propertyIter.value() = QVariant(lineEdit->text());
+//     }
+//       }
+//       propertyIter++;
+//     }
+//   }
   return properties;
 }
 
@@ -225,30 +260,39 @@ void StorageSelectionPage::on_backendList_currentIndexChanged() {
     _connectionBox = 0;
   }
 
-  QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap();
-  if(!properties.isEmpty()) {
+  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;
 
-    QVariantMap::const_iterator propertyIter = properties.constBegin();
-    while(propertyIter != properties.constEnd()) {
+    foreach(QString key, setupKeys) {
       QWidget *widget = 0;
-      switch(propertyIter.value().type()) {
+      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(propertyIter.value().toInt());
+         spinbox->setValue(def.toInt());
          widget = spinbox;
        }
        break;
       default:
-       widget = new QLineEdit(propertyIter.value().toString(), propertyBox);
+       {
+         QLineEdit *lineEdit = new QLineEdit(def.toString(), propertyBox);
+         if(key.toLower().contains("password")) {
+           lineEdit->setEchoMode(QLineEdit::Password);
+         }
+         widget = lineEdit;
+       }
       }
-      widget->setObjectName(propertyIter.key());
-      formlayout->addRow(propertyIter.key() + ":", widget);
-      propertyIter++;
+      widget->setObjectName(key);
+      formlayout->addRow(key + ":", widget);
     }
     propertyBox->setLayout(formlayout);
     static_cast<QVBoxLayout *>(layout())->insertWidget(layout()->indexOf(ui.descriptionBox) + 1, propertyBox);