Files
RRJServer/LibServer/settings/dialogsettingstray.cpp
2026-01-29 16:23:35 +03:00

378 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <QXmlStreamReader>
#include <QMessageBox>
#include "dialogsettingstray.h"
#include "Systems/tools.h"
#include "ui_dialogsettingstray.h"
#include "dialogcheckdb.h"
#include "dialogauthorization.h"
#include "specialmessagebox.h"
DialogSettingsTray::DialogSettingsTray(ProviderDBLMS* providerDBLMS, QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogSettingsTray),
settings(nullptr),
providerDBLMS(providerDBLMS),
flSettingsServerChanged(false)
{
ui->setupUi(this);
ui->btnSave->setObjectName("btnSave");
ui->btnCheckDB->setObjectName("btnCheckDB");
ui->btnUpdateDocs->setObjectName("btnUpdateDocs");
ui->checkLocalhost->setObjectName("checkLocalhost");
#ifndef PROJECT_TYPE_DEBUG
ui->checkLocalhost->setEnabled(false);
ui->btnUpdateDocs->setVisible(false);
#endif
/* Создаем строку для регулярного выражения */
QString ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
/* Создаем регулярное выражение с применением строки, как
* повторяющегося элемента
*/
QRegExp ipRegex ("^" + ipRange
+ "\\." + ipRange
+ "\\." + ipRange
+ "\\." + ipRange + "$");
/* Создаем Валидатор регулярного выражения с применением
* созданного регулярного выражения
*/
QRegExpValidator *ipValidator = new QRegExpValidator(ipRegex, this);
/* Устанавливаем Валидатор на QLineEdit */
ui->editHostName->setValidator(ipValidator);
settings = new ServerDBSettings();
//Задаём два пункта с текстом локалей в комбобоксе
ui->cmbLanguage->addItems(QStringList() << "English" << "Русский");
//Скрываем пароль
ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password);
if(loadSettings(settings))
{
if(settings->Language == "ENG")
ui->cmbLanguage->setCurrentText("English");
else
ui->cmbLanguage->setCurrentText("Русский");
ui->editNameDB->setText(settings->NameDB);
if(settings->HostName == "localhost")
{
ui->checkLocalhost->setChecked(true);
}
else
{
ui->checkLocalhost->setChecked(false);
}
ui->editHostName->setText(settings->HostName);
ui->editPort->setText(settings->Port);
ui->editUserName->setText(settings->UserName);
ui->editPassword->setText(settings->Password);
ui->btnSave->setEnabled(false);
ui->btnCheckDB->setEnabled(true);
ui->btnUpdateDocs->setEnabled(true);
flSettingsServerChanged = false;
}
else
{
ui->checkLocalhost->setChecked(true);
//ui->editHostName->setEnabled(true);
ui->editPort->setEnabled(true);
ui->editNameDB->setEnabled(true);
ui->editUserName->setEnabled(true);
ui->editPassword->setEnabled(true);
ui->btnSave->setEnabled(false);
ui->btnSave->setEnabled(false);
ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = false;
}
}
DialogSettingsTray::~DialogSettingsTray()
{
delete ui;
delete settings;
}
ServerDBSettings DialogSettingsTray::getSettings()
{
return *settings;
}
bool DialogSettingsTray::loadSettings(ServerDBSettings *settings)
{
QFile file(settingsName);
if(! file.open(QIODevice::ReadOnly))
return false;
QXmlStreamReader xmlReader(&file);
while (!xmlReader.atEnd()){
if(xmlReader.isStartElement()){
if(xmlReader.name() == "DataBaseSettings")
{
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){
QString name = attr.name().toString();
QString value = attr.value().toString();
if(name == "Type"){
settings->Type = value;
}
if(name == "Name"){
settings->NameDB = value;
}
if(name == "UserName"){
settings->UserName = value;
}
if(name == "Password"){
settings->Password = value;
}
if(name == "HostName"){
settings->HostName = value;
}
if(name == "Port"){
settings->Port = value;
}
if(name == "Language"){
settings->Language = value;
}
}
}
}
xmlReader.readNext();
}
file.close();
return true;
}
bool DialogSettingsTray::saveSettings()
{
QFile file(settingsName);
if(! file.open(QIODevice::WriteOnly))
return false;
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("ServerSettingsContainer");
xmlWriter.writeStartElement("DataBaseSettings");
xmlWriter.writeAttribute("Type", settings->Type);
xmlWriter.writeAttribute("Name", settings->NameDB);
xmlWriter.writeAttribute("UserName", settings->UserName);
xmlWriter.writeAttribute("Password", settings->Password);
xmlWriter.writeAttribute("HostName", settings->HostName);
xmlWriter.writeAttribute("Port", settings->Port);
xmlWriter.writeAttribute("Language", settings->Language);
xmlWriter.writeEndElement();
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
return true;
}
void DialogSettingsTray::on_btnSave_clicked()
{
if(ui->cmbLanguage->currentText() == QStringLiteral("English"))
{
settings->Language = "ENG";
}
else
{
settings->Language = "RUS";
}
settings->NameDB = ui->editNameDB->text();
settings->HostName = ui->editHostName->text();
settings->Port = ui->editPort->text();
settings->UserName = ui->editUserName->text();
settings->Password = ui->editPassword->text();
saveSettings();
ui->btnCheckDB->setEnabled(true);
ui->btnUpdateDocs->setEnabled(true);
this->accept();
}
void DialogSettingsTray::on_cmbLanguage_currentIndexChanged(int index)
{
ui->btnSave->setEnabled(true);
}
void DialogSettingsTray::on_DialogSettingsTray_accepted()
{
QString language;
if(settings->Language == "ENG")
language = QString("en_EN");
else
language = QString("ru_RU");
emit signal_LanguageChanged(language);
}
void DialogSettingsTray::on_editNameDB_textChanged(const QString &arg1)
{
ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true;
}
void DialogSettingsTray::on_editHostName_textChanged(const QString &arg1)
{
ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true;
}
void DialogSettingsTray::on_editPort_textChanged(const QString &arg1)
{
ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true;
}
void DialogSettingsTray::on_editUserName_textChanged(const QString &arg1)
{
ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true;
}
void DialogSettingsTray::on_editPassword_textChanged(const QString &arg1)
{
ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true;
}
void DialogSettingsTray::on_checkLocalhost_stateChanged(int arg1)
{
if(arg1)
{
ui->editHostName->setText("localhost");
ui->editHostName->setEnabled(false);
}
else
{
ui->editHostName->setText("0.0.0.0");
ui->editHostName->setEnabled(true);
}
}
void DialogSettingsTray::on_btnCheckDB_clicked()
{
//Проверяем, установлен ли PostgreSQL
if(!providerDBLMS->checkDriverQPSQLavailable())
{
SpecMsgBox::CriticalClose(this, tr("Driver PostgreSQL is not installed!"));
return;
}
//Запрос Логина и Пароля Суперюзера PostgreSQL (postgres)
QString UserNamePostgres;
QString PasswordPostgres;
DialogAuthorization dlg(this);
dlg.setWindowIcon(QIcon(QStringLiteral(":/resources/icons/PngServerRRJ.png")));
dlg.setWindowTitle(tr("Superuser PostgreSQL authorization"));
dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowContextHelpButtonHint);
dlg.setMinimumWidth(350);
dlg.setStyleSheet(this->styleSheet());
dlg.setLogin("postgres");
dlg.setPassword("");
switch( dlg.exec() )
{
case QDialog::Accepted:
{
UserNamePostgres = dlg.getLogin();
PasswordPostgres = dlg.getPassword();
break;
}
case QDialog::Rejected:
return;
default:
return;
}
if(providerDBLMS->setUserPasswordPostgres(UserNamePostgres, PasswordPostgres))
{
DialogCheckDB dlgCheckDB(providerDBLMS, this);
dlgCheckDB.setWindowFlags(dlgCheckDB.windowFlags() & ~Qt::WindowContextHelpButtonHint);
switch( dlgCheckDB.exec() )
{
case QDialog::Accepted:
ui->btnSave->setEnabled(true);
flSettingsServerChanged = true;
on_btnSave_clicked();
break;
case QDialog::Rejected:
break;
default:
break;
}
}
else
{
if(settings->HostName == "localhost")
SpecMsgBox::CriticalClose(this, tr("Error connecting to PostgreSQL!") + "\n\n" +
tr("Possible reasons:") + "\n" +
"- " + tr("superuser PostgreSQL login or password is incorrect;") + "\n" +
"- " + tr("port is incorrect;") + "\n" +
"- " + tr("PostgreSQL is not installed.")
);
else
SpecMsgBox::CriticalClose(this, tr("Error connecting to PostgreSQL!") + "\n\n" +
tr("Possible reasons:") + "\n" +
"- " + tr("superuser PostgreSQL login or password is incorrect;") + "\n" +
"- " + tr("port is incorrect;") + "\n" +
"- " + tr("file 'pg_hba.conf' does not contain an entry for the IP address:") + settings->HostName + ";" + "\n" +
"- " + tr("PostgreSQL is not installed.")
);
return;
}
}
void DialogSettingsTray::on_btnUpdateDocs_clicked()
{
emit signal_UpdateDocs();
}