Skip to content

Commit 7bd1293

Browse files
committed
Plugins: check validity in database
1 parent 0187c77 commit 7bd1293

17 files changed

Lines changed: 364 additions & 240 deletions

App/Client/ParameterDlgSettings.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QScreen>
77
#include <QApplication>
88

9+
#include "ParameterUI.h"
910
#include "ParameterDlgSettings.h"
1011
#include "ui_ParameterDlgSettings.h"
1112

@@ -167,8 +168,26 @@ void CParameterDlgSettings::on_pbOk_clicked()
167168

168169
m_pParameters->SetFavoriteEdit(ui->cbFavoriteDoubleEdit->isChecked());
169170
m_pParameters->SetMessageBoxDisplayInformation(ui->cbMessageBoxDisplayInfo->isChecked());
170-
171+
171172
m_pParameters->SetKeepSplitViewWhenFullScreen(ui->cbKeepSplitView->isChecked());
173+
174+
// Check validity
175+
for(int i = 0; i < ui->tabWidget->count(); i++) {
176+
QWidget* v = ui->tabWidget->widget(i);
177+
CParameterUI* w = qobject_cast<CParameterUI*>(v);
178+
if(!w) {
179+
QScrollArea* pScroll = qobject_cast<QScrollArea*>(v);
180+
if(!pScroll) continue;
181+
w = qobject_cast<CParameterUI*>(pScroll->widget());
182+
if(!w) continue;
183+
}
184+
185+
bool bRet = w->CheckValidity(true);
186+
if(bRet) continue;
187+
188+
ui->tabWidget->setCurrentIndex(i);
189+
return;
190+
}
172191
accept();
173192
}
174193

App/Client/Recent/RecentModel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Qt::ItemFlags CRecentModel::flags(const QModelIndex &index) const
3232
bool bExist = false;
3333
QFileInfo fi(szFile);
3434
if(m_pParameterApp->GetGlobalParameters()->GetSaveSettingsType()
35-
== CParameterGlobal::SaveSettingsType::File) {
35+
== CParameterGlobal::SaveSettingsType::Local) {
3636
bExist = fi.exists();
3737
} else {
3838
bExist = m_pDatabase->HasFileContents(item);

App/Client/mainwindow.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,15 +464,15 @@ int MainWindow::Initial()
464464
m_pRecentMenu->addRecentFile(it->GetFile(), it->szName, it->icon);
465465
}
466466
m_pRecentMenu->slotShowFileEixst(
467-
m_Parameter.GetGlobalParameters()->GetSaveSettingsType() == CParameterGlobal::File);
467+
m_Parameter.GetGlobalParameters()->GetSaveSettingsType() == CParameterGlobal::Local);
468468
bool check = connect(
469469
m_Parameter.GetGlobalParameters(),
470470
&CParameterGlobal::sigSaveSettingsTypeChanged,
471471
m_pRecentMenu, [this]() {
472472
if(!(m_pRecentMenu && m_Parameter.GetGlobalParameters()))
473473
return;
474474
m_pRecentMenu->slotShowFileEixst(
475-
m_Parameter.GetGlobalParameters()->GetSaveSettingsType() == CParameterGlobal::File);
475+
m_Parameter.GetGlobalParameters()->GetSaveSettingsType() == CParameterGlobal::Local);
476476
});
477477
Q_ASSERT(check);
478478
}
@@ -510,7 +510,8 @@ int MainWindow::Initial()
510510
} while(false);
511511

512512
setEnabled(true);
513-
513+
514+
slotError(nRet, szErr);
514515
QMessageBox errMsgBox;
515516
errMsgBox.setWindowTitle(QObject::tr("Error"));
516517
errMsgBox.setText(QObject::tr("Initial error:") + szErr);

Plugins/FreeRDP/Client/DlgSetFreeRDP.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ CDlgSetFreeRDP::~CDlgSetFreeRDP()
232232
delete ui;
233233
}
234234

235+
// [Check validity and accept]
235236
void CDlgSetFreeRDP::on_pbOk_clicked()
236237
{
237238
int nRet = 0;
@@ -366,6 +367,7 @@ void CDlgSetFreeRDP::on_pbOk_clicked()
366367

367368
accept();
368369
}
370+
// [Check validity and accept]
369371

370372
void CDlgSetFreeRDP::on_pbCancel_clicked()
371373
{

Src/Database/ParameterDatabaseUI.cpp

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Author: Kang Lin <kl222@126.com>
22

3+
#include <QMessageBox>
34
#include <QSqlDatabase>
45
#include <QLoggingCategory>
56
#include <QSet>
@@ -12,12 +13,14 @@
1213
#include "ParameterUser.h"
1314
#include "ParameterDatabaseUI.h"
1415
#include "ui_ParameterDatabaseUI.h"
16+
#include "ParameterGlobal.h"
1517

1618
static Q_LOGGING_CATEGORY(log, "Para.Database.UI")
1719
CParameterDatabaseUI::CParameterDatabaseUI(QWidget *parent)
1820
: CParameterUI(parent)
1921
, ui(new Ui::CParameterDatabaseUI)
20-
, m_pPara(nullptr)
22+
, m_pParaDB(nullptr)
23+
, m_pParaGlobal(nullptr)
2124
{
2225
bool check = false;
2326
ui->setupUi(this);
@@ -47,26 +50,73 @@ CParameterDatabaseUI::~CParameterDatabaseUI()
4750

4851
int CParameterDatabaseUI::SetParameter(CParameter *pParameter)
4952
{
50-
m_pPara = qobject_cast<CParameterDatabase*>(pParameter);
51-
if(!m_pPara) return -1;
53+
m_pParaGlobal = qobject_cast<CParameterGlobal*>(pParameter);
54+
if(!m_pParaGlobal) return -1;
55+
56+
m_pParaDB = &m_pParaGlobal->m_Database;
57+
if(!m_pParaDB) return -1;
58+
59+
ui->wNet->SetParameter(&m_pParaDB->m_Net);
60+
61+
ui->cbType->setCurrentText(m_pParaDB->GetType());
62+
ui->leDatabaseName->setText(m_pParaDB->GetDatabaseName());
63+
ui->leOptions->setText(m_pParaDB->GetOptions());
64+
65+
switch(m_pParaGlobal->GetSaveSettingsType()) {
66+
case CParameterGlobal::SaveSettingsType::Local:
67+
ui->rbSaveSettingsToLocal->setChecked(true);
68+
break;
69+
case CParameterGlobal::SaveSettingsType::Database:
70+
ui->rbSaveSettingsToDatabase->setChecked(true);
71+
break;
72+
}
73+
ui->lbDatabaseWarn->setVisible(
74+
m_pParaGlobal->GetSaveSettingsType()
75+
== CParameterGlobal::SaveSettingsType::Database);
5276

53-
ui->wNet->SetParameter(&m_pPara->m_Net);
77+
return 0;
78+
}
5479

55-
ui->cbType->setCurrentText(m_pPara->GetType());
56-
ui->leDatabaseName->setText(m_pPara->GetDatabaseName());
57-
ui->leOptions->setText(m_pPara->GetOptions());
80+
bool CParameterDatabaseUI::CheckValidity(bool validity)
81+
{
82+
if(!validity) return true;
5883

59-
return 0;
84+
if(ui->cbType->currentText() == "QMYSQL") {
85+
if(!ui->wNet->CheckValidity(validity)) {
86+
return false;
87+
}
88+
}
89+
90+
if(ui->rbSaveSettingsToLocal->isChecked()) {
91+
if(ui->cbType->currentText() != "QSQLITE") {
92+
QString szErr = tr("Save operate settings to:") + " \"" + tr("Locale") + "\". " + tr("but the database is not set local database \"QSQLITE\".");
93+
szErr += "\n\n";
94+
szErr += tr("Please modify databse \"Type\" to \"QSQLITE\"") + " ";
95+
szErr += tr("or modify ") + tr("Save operate settings to:") + " " + tr("Database");
96+
QMessageBox::critical(this, tr("Error"), szErr);
97+
qCritical(log) << szErr;
98+
ui->rbSaveSettingsToDatabase->setFocus();
99+
return false;
100+
}
101+
}
102+
103+
return true;
60104
}
61105

62106
int CParameterDatabaseUI::Accept()
63107
{
64108
ui->wNet->Accept();
65-
m_pPara->SetType(ui->cbType->currentText());
66-
67-
m_pPara->SetDatabaseName(ui->leDatabaseName->text());
68-
m_pPara->SetOptions(ui->leOptions->text());
69-
109+
m_pParaDB->SetType(ui->cbType->currentText());
110+
111+
m_pParaDB->SetDatabaseName(ui->leDatabaseName->text());
112+
m_pParaDB->SetOptions(ui->leOptions->text());
113+
114+
if(ui->rbSaveSettingsToLocal->isChecked()) {
115+
m_pParaGlobal->SetSaveSettingsType(CParameterGlobal::SaveSettingsType::Local);
116+
} else if(ui->rbSaveSettingsToDatabase->isChecked()) {
117+
m_pParaGlobal->SetSaveSettingsType(CParameterGlobal::SaveSettingsType::Database);
118+
}
119+
70120
return 0;
71121
}
72122

@@ -88,8 +138,8 @@ void CParameterDatabaseUI::slotTypeCurrentTextChanged(const QString &text)
88138
bNet = false;
89139
} else if("QMYSQL" == text) {
90140
bNet = true;
91-
if(m_pPara) {
92-
auto &net = m_pPara->m_Net;
141+
if(m_pParaDB) {
142+
auto &net = m_pParaDB->m_Net;
93143
if(0 == net.GetPort()) {
94144
net.SetPort(3306);
95145
ui->wNet->SetParameter(&net);
@@ -133,3 +183,8 @@ bool CParameterDatabaseUI::eventFilter(QObject *watched, QEvent *event)
133183
}
134184
return QWidget::eventFilter(watched, event);
135185
}
186+
187+
void CParameterDatabaseUI::on_rbSaveSettingsToDatabase_toggled(bool checked)
188+
{
189+
ui->lbDatabaseWarn->setVisible(checked);
190+
}

Src/Database/ParameterDatabaseUI.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,19 @@ class PLUGIN_EXPORT CParameterDatabaseUI : public CParameterUI
1717
~CParameterDatabaseUI();
1818

1919
virtual int SetParameter(CParameter *pParameter) override;
20+
virtual bool CheckValidity(bool validity) override;
2021
virtual int Accept() override;
2122

2223
virtual bool eventFilter(QObject *watched, QEvent *event) override;
2324

2425
private slots:
2526
void slotTypeCurrentTextChanged(const QString &text);
2627
void on_pbBrowser_clicked();
27-
28+
29+
void on_rbSaveSettingsToDatabase_toggled(bool checked);
30+
2831
private:
2932
Ui::CParameterDatabaseUI *ui;
30-
CParameterDatabase* m_pPara;
33+
CParameterDatabase* m_pParaDB;
34+
CParameterGlobal* m_pParaGlobal;
3135
};

Src/Database/ParameterDatabaseUI.ui

Lines changed: 76 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,45 @@
77
<x>0</x>
88
<y>0</y>
99
<width>550</width>
10-
<height>300</height>
10+
<height>400</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
1414
<string>Form</string>
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout">
17-
<item row="4" column="0">
18-
<layout class="QHBoxLayout" name="horizontalLayout_3">
17+
<item row="0" column="0" colspan="2">
18+
<widget class="QLabel" name="label_4">
19+
<property name="text">
20+
<string>The setting will take effect only after restarting the program.</string>
21+
</property>
22+
<property name="wordWrap">
23+
<bool>true</bool>
24+
</property>
25+
</widget>
26+
</item>
27+
<item row="1" column="0">
28+
<layout class="QHBoxLayout" name="horizontalLayout">
1929
<item>
20-
<widget class="QLabel" name="label_3">
30+
<widget class="QLabel" name="label">
2131
<property name="text">
22-
<string>Options:</string>
32+
<string>Type:</string>
2333
</property>
2434
</widget>
2535
</item>
2636
<item>
27-
<widget class="QLineEdit" name="leOptions"/>
37+
<widget class="QComboBox" name="cbType">
38+
<property name="sizePolicy">
39+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
40+
<horstretch>0</horstretch>
41+
<verstretch>0</verstretch>
42+
</sizepolicy>
43+
</property>
44+
</widget>
2845
</item>
2946
</layout>
3047
</item>
31-
<item row="3" column="0">
32-
<widget class="CParameterNetUI" name="wNet" native="true"/>
33-
</item>
34-
<item row="2" column="0">
48+
<item row="2" column="0" colspan="2">
3549
<layout class="QHBoxLayout" name="horizontalLayout_2">
3650
<item>
3751
<widget class="QLabel" name="label_2">
@@ -52,28 +66,67 @@
5266
</item>
5367
</layout>
5468
</item>
55-
<item row="1" column="0">
56-
<layout class="QHBoxLayout" name="horizontalLayout">
69+
<item row="3" column="0" colspan="2">
70+
<widget class="CParameterNetUI" name="wNet" native="true"/>
71+
</item>
72+
<item row="4" column="0">
73+
<layout class="QHBoxLayout" name="horizontalLayout_3">
5774
<item>
58-
<widget class="QLabel" name="label">
75+
<widget class="QLabel" name="label_3">
5976
<property name="text">
60-
<string>Type:</string>
77+
<string>Options:</string>
6178
</property>
6279
</widget>
6380
</item>
6481
<item>
65-
<widget class="QComboBox" name="cbType">
66-
<property name="sizePolicy">
67-
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
68-
<horstretch>0</horstretch>
69-
<verstretch>0</verstretch>
70-
</sizepolicy>
71-
</property>
72-
</widget>
82+
<widget class="QLineEdit" name="leOptions"/>
7383
</item>
7484
</layout>
7585
</item>
76-
<item row="5" column="0">
86+
<item row="5" column="0" colspan="2">
87+
<widget class="QGroupBox" name="groupBox_3">
88+
<property name="sizePolicy">
89+
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
90+
<horstretch>0</horstretch>
91+
<verstretch>0</verstretch>
92+
</sizepolicy>
93+
</property>
94+
<property name="title">
95+
<string>Save operate settings to:</string>
96+
</property>
97+
<layout class="QGridLayout" name="gridLayout_2">
98+
<item row="0" column="0">
99+
<layout class="QHBoxLayout" name="horizontalLayout_4">
100+
<item>
101+
<widget class="QRadioButton" name="rbSaveSettingsToLocal">
102+
<property name="text">
103+
<string>Local</string>
104+
</property>
105+
</widget>
106+
</item>
107+
<item>
108+
<widget class="QRadioButton" name="rbSaveSettingsToDatabase">
109+
<property name="text">
110+
<string>Database</string>
111+
</property>
112+
</widget>
113+
</item>
114+
</layout>
115+
</item>
116+
<item row="1" column="0">
117+
<widget class="QLabel" name="lbDatabaseWarn">
118+
<property name="text">
119+
<string>Note: Please ensure that the database you want to access is secure. Otherwise, information such as recent lists and favorites may be leaked.</string>
120+
</property>
121+
<property name="wordWrap">
122+
<bool>true</bool>
123+
</property>
124+
</widget>
125+
</item>
126+
</layout>
127+
</widget>
128+
</item>
129+
<item row="6" column="0">
77130
<spacer name="verticalSpacer">
78131
<property name="orientation">
79132
<enum>Qt::Orientation::Vertical</enum>
@@ -86,16 +139,6 @@
86139
</property>
87140
</spacer>
88141
</item>
89-
<item row="0" column="0">
90-
<widget class="QLabel" name="label_4">
91-
<property name="text">
92-
<string>The setting will take effect only after restarting the program.</string>
93-
</property>
94-
<property name="wordWrap">
95-
<bool>true</bool>
96-
</property>
97-
</widget>
98-
</item>
99142
</layout>
100143
</widget>
101144
<customwidgets>

0 commit comments

Comments
 (0)