pgLab/pglab/ConnectionConfigurationWidget.cpp
eelke bf8bb087e7 Fix: adding connection
Crashed because it tried to select right group when there was no group to set.
2019-09-01 06:52:26 +02:00

198 lines
6.2 KiB
C++

#include "ConnectionConfigurationWidget.h"
#include "SslModeModel.h"
#include "ConnectionConfig.h"
#include "ConnectionController.h"
#include "ConnectionListModel.h"
#include "util.h"
#include <QApplication>
#include <QDataWidgetMapper>
#include <QDialogButtonBox>
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QSpinBox>
#include <QComboBox>
#include <QDialog>
#define SET_OBJECT_NAME(var) var->setObjectName(#var)
void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *ctrl, const ConnectionConfig &cfg)
{
auto w = new ConnectionConfigurationWidget(ctrl->getConnectionTreeModel());
w->setData(cfg);
auto btn_hbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal);
//auto btn_test = btn_hbox->addButton(tr("Test"), QDialogButtonBox::ActionRole);
auto vbox = new QVBoxLayout;
vbox->addWidget(w);
vbox->addWidget(btn_hbox);
auto win = new QDialog;
win->setWindowTitle(tr("Edit connection configuration"));
win->setLayout(vbox);
win->setAttribute( Qt::WA_DeleteOnClose, true );
win->connect(btn_hbox, &QDialogButtonBox::accepted, [ctrl, w, win] () {
auto [grp, cc] = w->data();
ctrl->getConnectionTreeModel()->save(grp, cc);
win->accept();
});
win->connect(btn_hbox, &QDialogButtonBox::rejected, [win] ()
{
win->reject();
});
win->show();
}
ConnectionConfigurationWidget::ConnectionConfigurationWidget(ConnectionTreeModel *connection_model, QWidget *parent)
: QWidget(parent)
, m_connectionModel(connection_model)
{
lblGroup = new QLabel;
cmbbxGroup = new QComboBox;
cmbbxGroup->setModel(connection_model);
cmbbxGroup->setModelColumn(0);
lblGroup->setBuddy(cmbbxGroup);
lblName = new QLabel;
SET_OBJECT_NAME(lblName);
edtName = new QLineEdit ;
SET_OBJECT_NAME(edtName);
lblName->setBuddy(edtName);
lblHost = new QLabel;
SET_OBJECT_NAME(lblHost);
edtHost = new QLineEdit;
SET_OBJECT_NAME(edtHost);
lblHost->setBuddy(edtHost);
lblPort = new QLabel;
SET_OBJECT_NAME(lblPort);
spinPort = new QSpinBox;
SET_OBJECT_NAME(spinPort);
spinPort->setRange(1, std::numeric_limits<uint16_t>::max());
lblPort->setBuddy(spinPort);
lblUser = new QLabel;
SET_OBJECT_NAME(lblUser);
edtUser = new QLineEdit;
SET_OBJECT_NAME(edtUser);
lblUser->setBuddy(edtUser);
lblDbName = new QLabel;
SET_OBJECT_NAME(lblDbName);
edtDbname = new QLineEdit;
SET_OBJECT_NAME(edtDbname);
lblDbName->setBuddy(edtDbname);
lblSsl = new QLabel;
SET_OBJECT_NAME(lblSsl);
cmbbxSsl = new QComboBox;
SET_OBJECT_NAME(cmbbxSsl);
cmbbxSsl->setModelColumn(0);
auto ssl_model = new SslModeModel(this);
cmbbxSsl->setModel(ssl_model);
lblSsl->setBuddy(cmbbxSsl);
lblCert = new QLabel;
SET_OBJECT_NAME(lblCert);
edtCert = new QLineEdit;
SET_OBJECT_NAME(edtCert);
lblCert->setBuddy(edtCert);
lblKey = new QLabel;
SET_OBJECT_NAME(lblKey);
edtKey = new QLineEdit;
SET_OBJECT_NAME(edtKey);
lblKey->setBuddy(edtKey);
lblRootCert = new QLabel;
SET_OBJECT_NAME(lblRootCert);
edtRootCert = new QLineEdit;
SET_OBJECT_NAME(edtRootCert);
lblRootCert->setBuddy(edtRootCert);
lblCrl = new QLabel;
SET_OBJECT_NAME(lblCrl);
edtCrl = new QLineEdit;
SET_OBJECT_NAME(edtCrl);
lblCrl->setBuddy(edtCrl);
formLayout = new QFormLayout;
formLayout->addRow(lblGroup, cmbbxGroup);
formLayout->addRow(lblName, edtName);
formLayout->addRow(lblHost, edtHost);
formLayout->addRow(lblPort, spinPort);
formLayout->addRow(lblUser, edtUser);
formLayout->addRow(lblDbName, edtDbname);
formLayout->addRow(lblSsl, cmbbxSsl);
formLayout->addRow(lblCert, edtCert);
formLayout->addRow(lblKey, edtKey);
formLayout->addRow(lblRootCert, edtRootCert);
formLayout->addRow(lblCrl, edtCrl);
setLayout(formLayout);
retranslateUi();
}
void ConnectionConfigurationWidget::retranslateUi()
{
lblGroup->setText(QApplication::translate("ConnectionConfigurationWidget", "&Group", nullptr));
lblName->setText(QApplication::translate("ConnectionConfigurationWidget", "&Name", nullptr));
lblHost->setText(QApplication::translate("ConnectionConfigurationWidget", "&Host", nullptr));
lblPort->setText(QApplication::translate("ConnectionConfigurationWidget", "&Port", nullptr));
lblUser->setText(QApplication::translate("ConnectionConfigurationWidget", "&Username", nullptr));
lblDbName->setText(QApplication::translate("ConnectionConfigurationWidget", "&Database", nullptr));
lblSsl->setText(QApplication::translate("ConnectionConfigurationWidget", "&SSL mode", nullptr));
lblCert->setText(QApplication::translate("ConnectionConfigurationWidget", "&Certificate", nullptr));
lblKey->setText(QApplication::translate("ConnectionConfigurationWidget", "&Key", nullptr));
lblRootCert->setText(QApplication::translate("ConnectionConfigurationWidget", "&Root cert.", nullptr));
lblCrl->setText(QApplication::translate("ConnectionConfigurationWidget", "Revocation &list", nullptr));
}
void ConnectionConfigurationWidget::setData(const ConnectionConfig &cfg)
{
auto group = cfg.parent();
if (group) {
auto group_idx = m_connectionModel->findGroup(group->conngroup_id);
cmbbxGroup->setCurrentIndex(group_idx);
}
m_uuid = cfg.uuid();
edtName->setText(stdStrToQ(cfg.name()));
edtHost->setText(stdStrToQ(cfg.host()));
spinPort->setValue(cfg.port());
edtUser->setText(stdStrToQ(cfg.user()));
edtDbname->setText(stdStrToQ(cfg.dbname()));
cmbbxSsl->setCurrentIndex(static_cast<int>(cfg.sslMode()));
edtCert->setText(stdStrToQ(cfg.sslCert()));
edtKey->setText(stdStrToQ(cfg.sslKey()));
edtRootCert->setText(stdStrToQ(cfg.sslRootCert()));
edtCrl->setText(stdStrToQ(cfg.sslCrl()));
}
std::tuple<QString, ConnectionConfig> ConnectionConfigurationWidget::data() const
{
QString group;
group = cmbbxGroup->currentText();
ConnectionConfig cfg;
cfg.setUuid(m_uuid);
cfg.setName(qStrToStd(edtName->text()));
cfg.setHost(qStrToStd(edtHost->text()));
cfg.setPort(static_cast<uint16_t>(spinPort->value()));
cfg.setUser(qStrToStd(edtUser->text()));
cfg.setDbname(qStrToStd(edtDbname->text()));
cfg.setSslMode(static_cast<SslMode>(cmbbxSsl->currentIndex()));
cfg.setSslCert(qStrToStd(edtCert->text()));
cfg.setSslKey(qStrToStd(edtKey->text()));
cfg.setSslRootCert(qStrToStd(edtRootCert->text()));
cfg.setSslCrl(qStrToStd(edtCrl->text()));
return { group, cfg };
}