5#include <QLoggingCategory>
8#include <QWhatsThisClickedEvent>
9#include <QDesktopServices>
11#include "RabbitCommonDir.h"
12#include "ParameterNet.h"
13#include "ParameterUser.h"
14#include "ParameterDatabaseUI.h"
15#include "ui_ParameterDatabaseUI.h"
16#include "ParameterGlobal.h"
19static Q_LOGGING_CATEGORY(log,
"Para.Database.UI")
24 , m_pParaGlobal(
nullptr)
30 setWindowTitle(tr(
"Database"));
32 ui->leDatabaseName->installEventFilter(
this);
34 szUrl =
"<a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual#sharing-operation-parameters>" + tr(
"Sharing \"Operation Parameters\"") +
"</a>";
35 ui->gpSaveOperateSettings->setWhatsThis(szUrl);
36 ui->gpSaveOperateSettings->installEventFilter(
this);
37 ui->rbSaveSettingsToDatabase->setWhatsThis(szUrl);
38 ui->rbSaveSettingsToDatabase->installEventFilter(
this);
39 ui->rbSaveSettingsToLocal->setWhatsThis(szUrl);
40 ui->rbSaveSettingsToLocal->installEventFilter(
this);
42 ui->pbBrowser->setVisible(
false);
44 QStringList drivers = QSqlDatabase::drivers();
45 qDebug(log) <<
"Database:" << drivers;
46 QSet<QString> supportDrivers = CParameterDatabase::GetSupportDatabase();
47 QSet<QString> drv(drivers.begin(), drivers.end());
48 QSet<QString> interDb = drv.intersect(supportDrivers);
49 QStringList lstDb(interDb.begin(), interDb.end());
50 ui->cbType->addItems(lstDb);
51 slotTypeCurrentTextChanged(ui->cbType->currentText());
52 check = connect(ui->cbType, &QComboBox::currentTextChanged,
53 this, &CParameterDatabaseUI::slotTypeCurrentTextChanged);
57CParameterDatabaseUI::~CParameterDatabaseUI()
64 m_pParaGlobal = qobject_cast<CParameterGlobal*>(pParameter);
65 if(!m_pParaGlobal)
return -1;
67 m_pParaDB = &m_pParaGlobal->m_Database;
68 if(!m_pParaDB)
return -1;
70 m_Net = m_pParaDB->m_Net;
71 ui->wNet->SetParameter(&m_Net);
73 ui->cbType->setCurrentText(m_pParaDB->GetType());
74 ui->leDatabaseName->setText(m_pParaDB->GetDatabaseName());
75 ui->leOptions->setText(m_pParaDB->GetOptions());
77 switch(m_pParaGlobal->GetSaveSettingsType()) {
78 case CParameterGlobal::SaveSettingsType::File:
79 ui->rbSaveSettingsToLocal->setChecked(
true);
81 case CParameterGlobal::SaveSettingsType::Database:
82 ui->rbSaveSettingsToDatabase->setChecked(
true);
85 ui->lbDatabaseWarn->setVisible(
86 ui->rbSaveSettingsToDatabase->isChecked()
87 && ui->cbType->currentText() !=
"QSQLITE");
94 if(!validity)
return true;
96 if(ui->cbType->currentText() ==
"QMYSQL") {
97 if(!ui->wNet->CheckValidity(validity)) {
102 if(ui->rbSaveSettingsToLocal->isChecked()) {
103 if(ui->cbType->currentText() !=
"QSQLITE") {
104 QString szErr = tr(
"Save operate settings to:") +
" \"" + tr(
"Local") +
"\". " + tr(
"but the database is not set local database \"QSQLITE\".");
106 szErr += tr(
"Please modify database \"Type\" to \"QSQLITE\"") +
" ";
107 szErr += tr(
"or modify ") + tr(
"Save operate settings to:") +
" " + tr(
"Database");
108 QMessageBox::critical(
this, tr(
"Error"), szErr);
109 qCritical(log) << szErr;
110 ui->rbSaveSettingsToDatabase->setFocus();
121 m_pParaDB->m_Net = m_Net;
122 m_pParaDB->SetType(ui->cbType->currentText());
124 m_pParaDB->SetDatabaseName(ui->leDatabaseName->text());
125 m_pParaDB->SetOptions(ui->leOptions->text());
127 if(ui->rbSaveSettingsToLocal->isChecked()) {
128 m_pParaGlobal->SetSaveSettingsType(CParameterGlobal::SaveSettingsType::File);
129 }
else if(ui->rbSaveSettingsToDatabase->isChecked()) {
130 m_pParaGlobal->SetSaveSettingsType(CParameterGlobal::SaveSettingsType::Database);
136void CParameterDatabaseUI::slotTypeCurrentTextChanged(
const QString &text)
140 szMsg = tr(
"Set the database name");
142 bool bBrowser =
false;
144 if(
"QSQLITE" == text) {
145 szMsg = tr(
"Set the sqlite database file. If is empty, then use default database file.");
148 }
else if(
"QODBC" == text) {
149 szMsg = tr(
"The name can either be a DSN, a DSN filename (in which case the file must have a .dsn extension), or a connection string.");
150 szHelp = szMsg +
" <a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual_zh_CN#%E5%9C%A8-windows-%E4%B8%8B%E4%BD%BF%E7%94%A8-odbc-%E8%AE%BF%E9%97%AE-mysql-%E6%95%B0%E6%8D%AE%E5%BA%93>" + tr(
"Configure database") +
"</a>";
152 }
else if(
"QMYSQL" == text) {
155 auto &net = m_pParaDB->m_Net;
156 if(0 == net.GetPort()) {
158 ui->wNet->SetParameter(&net);
164 szHelp = szMsg +
" <a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual_zh_CN#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93>" + tr(
"Configure database") +
"</a>";
165 ui->leDatabaseName->setWhatsThis(szHelp);
166 ui->leDatabaseName->setPlaceholderText(szMsg);
167 ui->leDatabaseName->setToolTip(szMsg);
168 ui->pbBrowser->setVisible(bBrowser);
169 ui->wNet->setVisible(bNet);
171 ui->lbDatabaseWarn->setVisible(
172 ui->rbSaveSettingsToDatabase->isChecked()
173 && ui->cbType->currentText() !=
"QSQLITE");
176void CParameterDatabaseUI::on_pbBrowser_clicked()
180 szTitle = tr(
"Database file");
181 szFilter = tr(
"Database file (*.db);; All files (*.*)");
182 QString szFile = QFileDialog::getSaveFileName(
184 RabbitCommon::CDir::Instance()->GetDirUserDatabase(),
186 if(szFile.isEmpty())
return;
187 ui->leDatabaseName->setText(szFile);
190bool CParameterDatabaseUI::eventFilter(QObject *watched, QEvent *event)
192 if(event->type() == QEvent::WhatsThisClicked) {
193 QWhatsThisClickedEvent* e = (QWhatsThisClickedEvent*)event;
195 qDebug(log) << e->href();
196 return QDesktopServices::openUrl(e->href());
199 return QWidget::eventFilter(watched, event);
202void CParameterDatabaseUI::on_rbSaveSettingsToDatabase_toggled(
bool checked)
204 ui->lbDatabaseWarn->setVisible(checked && ui->cbType->currentText() !=
"QSQLITE");
207void CParameterDatabaseUI::on_pbTest_clicked()
210 dbPara.SetType(ui->cbType->currentText());
211 dbPara.SetDatabaseName(ui->leDatabaseName->text());
212 dbPara.SetOptions(ui->leOptions->text());
216 dbPara.m_Net = m_Net;
223 QMessageBox::information(
this, tr(
"Test"), tr(
"Test is successfully!"));
225 QMessageBox::critical(
this, tr(
"Test"),
226 tr(
"Test is failed!") +
"\n\n"
Provide interfaces such as opening the database and initializing the database.
void CloseDatabase()
Close database.
bool OpenDatabase(const CParameterDatabase *pPara=nullptr, const QString &szConnectName=QString())
Open a new database.
virtual int SetParameter(CParameter *pParameter) override
[override functions]
virtual bool CheckValidity(bool validity) override
Check parameters validity.
virtual int Accept() override
Accept parameters.
The parameter UI interface.