#include "ConnectionConfigurationWidget.h" #include "SslModeModel.h" #include "ConnectionConfig.h" #include "ConnectionController.h" #include "ConnectionListModel.h" #include "util.h" #include #include #include #include #include #include #include #include #include #include #include #define SET_OBJECT_NAME(var) var->setObjectName(#var) void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *ctrl, const ConnectionConfig &cfg) { try { 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 ); QObject::connect(btn_hbox, &QDialogButtonBox::accepted, [ctrl, w, win] () { auto [grp, cc] = w->data(); ctrl->getConnectionTreeModel()->save(grp, cc); win->accept(); }); QObject::connect(btn_hbox, &QDialogButtonBox::rejected, [win] () { win->reject(); }); win->show(); } catch (const std::exception &ex) { qDebug() << "exception: " << QString::fromUtf8(ex.what()); } } 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::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(cfg.name()); edtHost->setText(cfg.host()); spinPort->setValue(cfg.port()); edtUser->setText(cfg.user()); edtDbname->setText(cfg.dbname()); cmbbxSsl->setCurrentIndex(static_cast(cfg.sslMode())); edtCert->setText(cfg.sslCert()); edtKey->setText(cfg.sslKey()); edtRootCert->setText(cfg.sslRootCert()); edtCrl->setText(cfg.sslCrl()); } std::tuple ConnectionConfigurationWidget::data() const { QString group; group = cmbbxGroup->currentText(); ConnectionConfig cfg; cfg.setUuid(m_uuid); cfg.setName(edtName->text()); cfg.setHost(edtHost->text()); cfg.setPort(static_cast(spinPort->value())); cfg.setUser(edtUser->text()); cfg.setDbname(edtDbname->text()); cfg.setSslMode(static_cast(cmbbxSsl->currentIndex())); cfg.setSslCert(edtCert->text()); cfg.setSslKey(edtKey->text()); cfg.setSslRootCert(edtRootCert->text()); cfg.setSslCrl(edtCrl->text()); return { group, cfg }; }