Skip to content

Commit 77490d5

Browse files
committed
wip: refactoring
refactored the database load/save credentials macOS settings dialog now saves and loads database settings added getInstance to MainWindow to allow any function to get the main window.
1 parent 029161b commit 77490d5

13 files changed

+223
-60
lines changed

DatabaseSettingsPage.cpp

+37-13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727

2828
#include "DatabaseSettingsPage.h"
29+
#include "RegExDatabase.h"
2930
#include "ui_DatabaseSettingsPage.h"
3031

3132
#include <QDebug>
@@ -39,19 +40,21 @@ Nedrysoft::DatabaseSettingsPage::DatabaseSettingsPage(QWidget *parent) :
3940
ui->setupUi(this);
4041

4142
QMap<QString, QString> databaseDriverMap(std::map<QString, QString> {
42-
{"QDB2", "IBM DB2 (version 7.1 and above)"},
43+
{"QDB2", "IBM DB2 (Version 7.1 and above)"},
4344
{"QIBASE", "Borland InterBase" },
44-
{"QMYSQL", "MySQL or MariaDB (version 5.0 and above)"},
45+
{"QMYSQL", "MySQL or MariaDB (Version 5.0 and above)"},
4546
{"QOCI", "Oracle Call Interface Driver"},
46-
{"QODBC", "Open Database Connectivity (ODBC)"},
47-
{"QODBC3", "Open Database Connectivity (ODBC)"},
48-
{"QPSQL", "PostgreSQL (versions 7.3 and above)"},
49-
{"QPSQL7", "PostgreSQL (version 6.x and 7.x)"},
50-
{"QSQLITE2", "SQLite version 2"},
51-
{"QSQLITE", "SQLite version 3"},
47+
{"QODBC", "ODBC"},
48+
{"QODBC3", "ODBC (Version 3 and above)"},
49+
{"QPSQL", "PostgreSQL (Version 7.3 and above)"},
50+
{"QPSQL7", "PostgreSQL (Version 6.x and 7.x)"},
51+
{"QSQLITE2", "SQLite (Version 2)"},
52+
{"QSQLITE", "SQLite (Version 3)"},
5253
{"QTDS", "Sybase Adaptive Server"}
5354
});
5455

56+
auto ignoredDriverList = QStringList() << "QODBC" << "QPSQL7" << "QSQLITE2";
57+
5558
#if defined(Q_OS_MACOS)
5659
m_size = QSize(qMax(minimumSizeHint().width(), size().width()), qMax(minimumSizeHint().height(), size().height()));
5760
#else
@@ -61,14 +64,26 @@ Nedrysoft::DatabaseSettingsPage::DatabaseSettingsPage(QWidget *parent) :
6164
auto driverList = QSqlDatabase::drivers();
6265

6366
for(auto driver : driverList) {
64-
QString displayName = driver;
67+
if ((ignoredDriverList.contains(driver))) {
68+
continue;
69+
}
6570

6671
if (databaseDriverMap.contains(driver)) {
67-
displayName = databaseDriverMap[driver]+" ";
72+
ui->databaseTypeComboBox->addItem(databaseDriverMap[driver]+" ", driver);;
73+
} else {
74+
ui->databaseTypeComboBox->addItem(driver, driver);
6875
}
69-
70-
ui->databaseTypeComboBox->addItem(displayName);
7176
}
77+
78+
QVariantMap settingsMap;
79+
80+
settingsMap = RegExDatabase::getInstance()->getSettings();
81+
82+
ui->databaseTypeComboBox->setCurrentText(settingsMap["databaseDriver"].toString());
83+
ui->databaseNameLineEdit->setText(settingsMap["databaseName"].toString());
84+
ui->hostNameLineEdit->setText(settingsMap["databaseHost"].toString());
85+
ui->usernameLineEdit->setText(settingsMap["databaseUser"].toString());
86+
ui->passwordLineEdit->setText(settingsMap["databasePassword"].toString());
7287
}
7388

7489
Nedrysoft::DatabaseSettingsPage::~DatabaseSettingsPage()
@@ -82,7 +97,16 @@ bool Nedrysoft::DatabaseSettingsPage::canAcceptSettings()
8297
}
8398

8499
void Nedrysoft::DatabaseSettingsPage::acceptSettings()
85-
{
100+
{
101+
QVariantMap settingsMap;
102+
103+
settingsMap["databaseDriver"] = ui->databaseTypeComboBox->currentData();
104+
settingsMap["databaseName"] = ui->databaseNameLineEdit->text();
105+
settingsMap["databaseHost"] = ui->hostNameLineEdit->text();
106+
settingsMap["databaseUser"] = ui->usernameLineEdit->text();
107+
settingsMap["databasePassword"]= ui->passwordLineEdit->text();
108+
109+
RegExDatabase::getInstance()->storeSettings(settingsMap);
86110
}
87111

88112
QSize Nedrysoft::DatabaseSettingsPage::sizeHint() const

DatabaseSettingsPage.ui

+32-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>460</width>
10-
<height>106</height>
10+
<height>160</height>
1111
</rect>
1212
</property>
1313
<property name="sizePolicy">
@@ -57,30 +57,57 @@
5757
</property>
5858
</widget>
5959
</item>
60-
<item row="1" column="0">
60+
<item row="3" column="0">
6161
<widget class="QLabel" name="usernameLabel">
6262
<property name="text">
6363
<string>User name:</string>
6464
</property>
6565
</widget>
6666
</item>
67-
<item row="1" column="1">
67+
<item row="3" column="1">
6868
<widget class="QLineEdit" name="usernameLineEdit"/>
6969
</item>
70-
<item row="2" column="0">
70+
<item row="4" column="0">
7171
<widget class="QLabel" name="passwordLabel">
7272
<property name="text">
7373
<string>Password:</string>
7474
</property>
7575
</widget>
7676
</item>
77-
<item row="2" column="1">
77+
<item row="4" column="1">
7878
<widget class="QLineEdit" name="passwordLineEdit"/>
7979
</item>
80+
<item row="1" column="0">
81+
<widget class="QLabel" name="hostNameLabel">
82+
<property name="text">
83+
<string>Host:</string>
84+
</property>
85+
</widget>
86+
</item>
87+
<item row="1" column="1">
88+
<widget class="QLineEdit" name="hostNameLineEdit"/>
89+
</item>
90+
<item row="2" column="0">
91+
<widget class="QLabel" name="databaseNameLabel">
92+
<property name="text">
93+
<string>Database Name:</string>
94+
</property>
95+
</widget>
96+
</item>
97+
<item row="2" column="1">
98+
<widget class="QLineEdit" name="databaseNameLineEdit"/>
99+
</item>
80100
</layout>
81101
</item>
82102
</layout>
83103
</widget>
104+
<tabstops>
105+
<tabstop>databaseTypeComboBox</tabstop>
106+
<tabstop>hostNameLineEdit</tabstop>
107+
<tabstop>databaseNameLineEdit</tabstop>
108+
<tabstop>usernameLineEdit</tabstop>
109+
<tabstop>passwordLineEdit</tabstop>
110+
</tabstops>
84111
<resources/>
85112
<connections/>
86113
</ui>

GeneralSettingsPage.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
*/
2727

2828
#include "GeneralSettingsPage.h"
29+
#include "MainWindow.h"
2930
#include "ui_GeneralSettingsPage.h"
3031

3132
#include <QDebug>
33+
#include <QMessageBox>
3234

3335
Nedrysoft::GeneralSettingsPage::GeneralSettingsPage(QWidget *parent) :
3436
QWidget(parent),
@@ -41,6 +43,20 @@ Nedrysoft::GeneralSettingsPage::GeneralSettingsPage(QWidget *parent) :
4143
#else
4244
m_size = minimumSizeHint();
4345
#endif
46+
47+
connect(ui->updateClonePushButton, &QPushButton::clicked, [=](bool /*checked*/) {
48+
if (QMessageBox::warning(MainWindow::getInstance(), "Update Clone", tr("Updating the clone may break functionality.\r\n\r\nYou can revert to the factory supplied clone which has been tested for compatability by clicking the \"Reset to Factory Clone\" button if you experience problems.\r\n\r\nDo you want to update the clone?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::No)==QMessageBox::Yes) {
49+
// TODO: Do factory clone
50+
}
51+
});
52+
53+
connect(ui->resetToFactoryClonePushButton, &QPushButton::clicked, [=](bool /*checked*/) {
54+
if (QMessageBox::warning(MainWindow::getInstance(), "Update Clone", tr("Are you sure you want to revent back to the factory clone?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::No)==QMessageBox::Yes) {
55+
// TODO: Delete user clone
56+
}
57+
});
58+
59+
ui->resetToFactoryClonePushButton->setEnabled(false);
4460
}
4561

4662
Nedrysoft::GeneralSettingsPage::~GeneralSettingsPage()

GeneralSettingsPage.ui

+8-5
Original file line numberDiff line numberDiff line change
@@ -60,23 +60,26 @@
6060
</widget>
6161
</item>
6262
<item row="0" column="1">
63-
<widget class="QLineEdit" name="lineEdit">
63+
<widget class="QLineEdit" name="cloneDetailLineEdit">
6464
<property name="readOnly">
6565
<bool>true</bool>
6666
</property>
67+
<property name="placeholderText">
68+
<string>Factory Clone (01/02/2020)</string>
69+
</property>
6770
</widget>
6871
</item>
6972
<item row="1" column="1">
70-
<widget class="QPushButton" name="pushButton">
73+
<widget class="QPushButton" name="updateClonePushButton">
7174
<property name="text">
72-
<string>Update Mirror...</string>
75+
<string>Clone...</string>
7376
</property>
7477
</widget>
7578
</item>
7679
<item row="2" column="1">
77-
<widget class="QPushButton" name="pushButton_2">
80+
<widget class="QPushButton" name="resetToFactoryClonePushButton">
7881
<property name="text">
79-
<string>Reset To Factory Mirror...</string>
82+
<string>Reset To Factory Clone...</string>
8083
</property>
8184
</widget>
8285
</item>

MainWindow.cpp

+13-5
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,20 @@ using namespace std::chrono_literals;
4040

4141
constexpr auto splashScreenDuration = 1s;
4242

43-
Nedrysoft::MainWindow::MainWindow(Nedrysoft::RegExSplashScreen *splashScreen, QWidget *parent)
44-
: QMainWindow(parent),
43+
Nedrysoft::MainWindow *Nedrysoft::MainWindow::m_instance = nullptr;
44+
45+
Nedrysoft::MainWindow::MainWindow(Nedrysoft::RegExSplashScreen *splashScreen)
46+
: QMainWindow(nullptr),
4547
ui(new Ui::MainWindow),
46-
m_page(new Nedrysoft::RegExWebEnginePage)
48+
m_page(new Nedrysoft::RegExWebEnginePage),
49+
m_settingsDialog(nullptr)
4750
{
4851
ui->setupUi(this);
4952

50-
m_settingsDialog = nullptr;
51-
5253
qApp->installEventFilter(this);
5354

55+
m_instance = this;
56+
5457
showMaximized();
5558

5659
ui->webEngineView->setPage(m_page);
@@ -72,6 +75,11 @@ Nedrysoft::MainWindow::~MainWindow()
7275
delete ui;
7376
}
7477

78+
Nedrysoft::MainWindow *Nedrysoft::MainWindow::getInstance()
79+
{
80+
return(m_instance);
81+
}
82+
7583
void Nedrysoft::MainWindow::on_actionAbout_triggered()
7684
{
7785
Nedrysoft::RegExAboutDialog aboutDialog(this);

MainWindow.h

+9-2
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,8 @@ namespace Nedrysoft {
5454
*
5555
* @param[in] splashScreen is a pointer to the splashscreen that was created
5656
* by the main thread at startup.
57-
* @param[in] parent is the parent widget that owns this main window.
5857
*/
59-
MainWindow(Nedrysoft::RegExSplashScreen *splashScreen, QWidget *parent = nullptr);
58+
MainWindow(Nedrysoft::RegExSplashScreen *splashScreen);
6059

6160
/**
6261
* @brief Destroys the main window.
@@ -70,6 +69,13 @@ namespace Nedrysoft {
7069
*/
7170
void handleOpenByUrl(const QUrl &url);
7271

72+
/**
73+
* @brief Returns the last instance of the class
74+
*
75+
* @returns a pointer to the MainWindow instance.
76+
*/
77+
static MainWindow *getInstance();
78+
7379
protected:
7480

7581
/**
@@ -120,6 +126,7 @@ namespace Nedrysoft {
120126
Ui::MainWindow *ui; //! ui class for the main window
121127
Nedrysoft::RegExWebEnginePage *m_page; //! web page object set up for our scheme
122128
SettingsDialog *m_settingsDialog; //! the settings dialog
129+
static MainWindow *m_instance; //! instance of the main window
123130
};
124131
}
125132

RegExDatabase.cpp

+55-6
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,46 @@
1+
#include "MainWindow.h"
12
#include "RegExDatabase.h"
23

4+
#include <QCoreApplication>
35
#include <QDebug>
46
#include <QDir>
57
#include <QFile>
68
#include <QFileInfo>
9+
#include <QMessageBox>
10+
#include <QSettings>
11+
#include <QSqlError>
712
#include <QSqlQuery>
813
#include <QStandardPaths>
914

15+
constexpr auto defaultDatabaseType = "QSQLITE";
16+
1017
Nedrysoft::RegExDatabase::RegExDatabase()
1118
{
12-
QFileInfo fileInfo(QDir::cleanPath(QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).at(0)+QDir::separator()+"regex101.sqlite"));
13-
bool fileExists = fileInfo.exists();
19+
QVariantMap settingsMap;
20+
21+
auto defaultDatabaseFile = QDir::cleanPath(QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).at(0)+QDir::separator()+"regex101.sqlite");
22+
23+
settingsMap = getSettings();
24+
25+
auto databaseDriver = settingsMap["databaseDriver"].toString();
26+
auto databaseName = settingsMap["databaseName"].toString();
27+
auto databaseHost = settingsMap["databaseHost"].toString();;
28+
auto databaseUser = settingsMap["databaseUser"].toString();
29+
auto databasePassword = settingsMap["databasePassword"].toString();
1430

15-
m_database = QSqlDatabase::addDatabase("QSQLITE");
31+
m_database = QSqlDatabase::addDatabase(databaseDriver);
1632

17-
m_database.setDatabaseName(fileInfo.absoluteFilePath());
33+
m_database.setDatabaseName(databaseName);
34+
m_database.setHostName(databaseHost);
35+
m_database.setUserName(databaseUser);
36+
m_database.setPassword(databasePassword);
1837

19-
m_database.open();
38+
if (!m_database.open()) {
39+
auto errorTitle = QCoreApplication::translate("database", "Unable to open error");
40+
auto errorMessage = QCoreApplication::translate("database", "Unable to open database, the following error was reported.\r\n\r\n%1").arg(m_database.lastError().text());;
2041

21-
if (!fileExists) {
42+
QMessageBox::warning(Nedrysoft::MainWindow::getInstance(), errorTitle, errorMessage);
43+
} else {
2244
initialiseDatabase();
2345
}
2446
}
@@ -30,6 +52,33 @@ Nedrysoft::RegExDatabase *Nedrysoft::RegExDatabase::getInstance()
3052
return(&instance);
3153
}
3254

55+
QVariantMap Nedrysoft::RegExDatabase::getSettings()
56+
{
57+
QSettings settings;
58+
auto defaultDatabaseFile = QDir::cleanPath(QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).at(0)+QDir::separator()+"regex101.sqlite");
59+
60+
QVariantMap settingsMap;
61+
62+
settingsMap["databaseDriver"] = settings.value(QStringLiteral("databaseDriver"), defaultDatabaseType);
63+
settingsMap["databaseHost"] = settings.value(QStringLiteral("databaseHost"), QStringLiteral(""));
64+
settingsMap["databaseName"] = settings.value(QStringLiteral("databaseName"), defaultDatabaseFile);
65+
settingsMap["databaseUser"] = settings.value(QStringLiteral("databaseUser"), QStringLiteral(""));
66+
settingsMap["databasePassword"]= settings.value(QStringLiteral("databasePassword"), QStringLiteral(""));
67+
68+
return settingsMap;
69+
}
70+
71+
void Nedrysoft::RegExDatabase::storeSettings(QVariantMap settingsMap)
72+
{
73+
QSettings settings;
74+
75+
settings.setValue("databaseDriver", settingsMap["databaseDriver"]);
76+
settings.setValue("databaseHost", settingsMap["databaseHost"]);
77+
settings.setValue("databaseName", settingsMap["databaseName"]);
78+
settings.setValue("databaseUser", settingsMap["databaseUser"]);
79+
settings.setValue("databasePassword", settingsMap["databasePassword"]);
80+
}
81+
3382
QSqlQuery Nedrysoft::RegExDatabase::prepareQuery(QString queryName)
3483
{
3584
QFile sqlFile(QString(":/regex101/sql/%1.sql").arg(queryName));

0 commit comments

Comments
 (0)