Working on the connection manager.
Made a list model for displaying them in a list. Also added controles to edit the most important properties.
This commit is contained in:
parent
be1892ac52
commit
f5eab84c24
14 changed files with 1100 additions and 9 deletions
18
Ivory.pro
18
Ivory.pro
|
|
@ -13,7 +13,7 @@ TEMPLATE = app
|
|||
|
||||
INCLUDEPATH += C:\prog\include
|
||||
DEFINES += WIN32_LEAN_AND_MEAN NOMINMAX
|
||||
LIBS += c:\prog\lib\libpq.lib User32.lib
|
||||
LIBS += c:\prog\lib\libpq.lib User32.lib ws2_32.lib
|
||||
|
||||
SOURCES += main.cpp\
|
||||
mainwindow.cpp \
|
||||
|
|
@ -29,7 +29,11 @@ SOURCES += main.cpp\
|
|||
tsqueue.cpp \
|
||||
win32event.cpp \
|
||||
waithandlelist.cpp \
|
||||
csvwriter.cpp
|
||||
csvwriter.cpp \
|
||||
databasewindow.cpp \
|
||||
connectionmanagerwindow.cpp \
|
||||
connectionlistmodel.cpp \
|
||||
connectionconfig.cpp
|
||||
|
||||
HEADERS += mainwindow.h \
|
||||
serverproperties.h \
|
||||
|
|
@ -43,7 +47,13 @@ HEADERS += mainwindow.h \
|
|||
tsqueue.h \
|
||||
win32event.h \
|
||||
waithandlelist.h \
|
||||
csvwriter.h
|
||||
csvwriter.h \
|
||||
databasewindow.h \
|
||||
connectionmanagerwindow.h \
|
||||
connectionlistmodel.h \
|
||||
connectionconfig.h
|
||||
|
||||
FORMS += mainwindow.ui \
|
||||
serverproperties.ui
|
||||
serverproperties.ui \
|
||||
databasewindow.ui \
|
||||
connectionmanagerwindow.ui
|
||||
|
|
|
|||
202
connectionconfig.cpp
Normal file
202
connectionconfig.cpp
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
#include "connectionconfig.h"
|
||||
#include <QCoreApplication>
|
||||
|
||||
namespace {
|
||||
|
||||
struct {
|
||||
SslMode mode;
|
||||
const char* string;
|
||||
} SslModeStringTable[] = {
|
||||
{ SslMode::disable, "disable" },
|
||||
{ SslMode::allow, "allow" },
|
||||
{ SslMode::prefer, "prefer" },
|
||||
{ SslMode::require, "require" },
|
||||
{ SslMode::verify_ca, "verify-ca" },
|
||||
{ SslMode::verify_full, "verify-full" }
|
||||
};
|
||||
|
||||
inline const char *valuePtr(const std::string &v)
|
||||
{
|
||||
return v.empty() ? nullptr : v.c_str();
|
||||
}
|
||||
|
||||
} // end unnamed namespace
|
||||
|
||||
std::string SslModeToString(SslMode sm)
|
||||
{
|
||||
std::string result;
|
||||
for (auto e : SslModeStringTable) {
|
||||
if (e.mode == sm) {
|
||||
result = e.string;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
SslMode StringToSslMode(std::string s)
|
||||
{
|
||||
SslMode result = SslMode::allow;
|
||||
for (auto e : SslModeStringTable) {
|
||||
if (e.string == s) {
|
||||
result = e.mode;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
std::vector<const char*> ConnectionConfig::s_keywords = {
|
||||
"host", "hostaddr", "port", "user", "password", "dbname",
|
||||
"sslmode", "sslcert", "sslkey", "sslrootcrt", "sslcrl",
|
||||
"client_encoding", "application_name", nullptr };
|
||||
|
||||
|
||||
ConnectionConfig::ConnectionConfig()
|
||||
: m_applicationName(QCoreApplication::applicationName().toUtf8().data())
|
||||
, m_values(s_keywords.size(), nullptr)
|
||||
{}
|
||||
|
||||
void ConnectionConfig::setDescription(std::string desc)
|
||||
{
|
||||
m_description = std::move(desc);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::description() const
|
||||
{
|
||||
return m_description;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setHost(std::string host)
|
||||
{
|
||||
m_host = std::move(host);
|
||||
m_values[0] = valuePtr(m_host);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::host() const
|
||||
{
|
||||
return m_host;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setHostAddr(std::string v)
|
||||
{
|
||||
m_hostaddr = std::move(v);
|
||||
m_values[1] = valuePtr(m_hostaddr);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::hostAddr() const
|
||||
{
|
||||
return m_hostaddr;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setPort(unsigned short port)
|
||||
{
|
||||
m_port = std::to_string(port);
|
||||
m_values[2] = valuePtr(m_port);
|
||||
}
|
||||
|
||||
unsigned short ConnectionConfig::port() const
|
||||
{
|
||||
return static_cast<unsigned short>(std::stoi(m_port));
|
||||
}
|
||||
|
||||
void ConnectionConfig::setUser(std::string v)
|
||||
{
|
||||
m_user = std::move(v);
|
||||
m_values[3] = valuePtr(m_user);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::user() const
|
||||
{
|
||||
return m_user;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setPassword(std::string v)
|
||||
{
|
||||
m_password = std::move(v);
|
||||
m_values[4] = valuePtr(m_password);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::password() const
|
||||
{
|
||||
return m_password;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setDbname(std::string v)
|
||||
{
|
||||
m_dbname = std::move(v);
|
||||
m_values[5] = valuePtr(m_dbname);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::dbname() const
|
||||
{
|
||||
return m_dbname;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setSslMode(SslMode m)
|
||||
{
|
||||
m_sslMode = SslModeToString(m);
|
||||
m_values[6] = valuePtr(m_sslMode);
|
||||
}
|
||||
|
||||
SslMode ConnectionConfig::sslMode() const
|
||||
{
|
||||
return StringToSslMode(m_sslMode);
|
||||
}
|
||||
|
||||
void ConnectionConfig::setSslCert(std::string v)
|
||||
{
|
||||
m_sslCert = std::move(v);
|
||||
m_values[7] = valuePtr(m_sslCert);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::sslCert() const
|
||||
{
|
||||
return m_sslCert;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setSslKey(std::string v)
|
||||
{
|
||||
m_sslKey = std::move(v);
|
||||
m_values[8] = valuePtr(m_sslKey);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::sslKey() const
|
||||
{
|
||||
return m_sslKey;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setSslRootCert(std::string v)
|
||||
{
|
||||
m_sslRootCert = std::move(v);
|
||||
m_values[9] = valuePtr(m_sslRootCert);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::sslRootCert() const
|
||||
{
|
||||
return m_sslRootCert;
|
||||
}
|
||||
|
||||
void ConnectionConfig::setSslCrl(std::string v)
|
||||
{
|
||||
m_sslCrl = std::move(v);
|
||||
m_values[10] = valuePtr(m_sslCrl);
|
||||
}
|
||||
|
||||
const std::string& ConnectionConfig::sslCrl() const
|
||||
{
|
||||
return m_sslCrl;
|
||||
}
|
||||
|
||||
|
||||
const char * const * ConnectionConfig::getKeywords() const
|
||||
{
|
||||
return s_keywords.data();
|
||||
}
|
||||
|
||||
const char * const * ConnectionConfig::getValues() const
|
||||
{
|
||||
m_values[11] = "utf8";
|
||||
m_values[12] = valuePtr(m_applicationName);
|
||||
|
||||
return m_values.data();
|
||||
}
|
||||
82
connectionconfig.h
Normal file
82
connectionconfig.h
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
#ifndef CONNECTION_H
|
||||
#define CONNECTION_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
enum class SslMode {
|
||||
disable=0,
|
||||
allow=1,
|
||||
prefer=2,
|
||||
require=3,
|
||||
verify_ca=4,
|
||||
verify_full=5
|
||||
};
|
||||
|
||||
class ConnectionConfig {
|
||||
public:
|
||||
ConnectionConfig();
|
||||
|
||||
void setDescription(std::string desc);
|
||||
const std::string& description() const;
|
||||
|
||||
void setHost(std::string host);
|
||||
const std::string& host() const;
|
||||
|
||||
void setHostAddr(std::string v);
|
||||
const std::string& hostAddr() const;
|
||||
|
||||
void setPort(unsigned short port);
|
||||
unsigned short port() const;
|
||||
|
||||
void setUser(std::string v);
|
||||
const std::string& user() const;
|
||||
|
||||
void setPassword(std::string v);
|
||||
const std::string& password() const;
|
||||
|
||||
void setDbname(std::string v);
|
||||
const std::string& dbname() const;
|
||||
|
||||
void setSslMode(SslMode m);
|
||||
SslMode sslMode() const;
|
||||
|
||||
void setSslCert(std::string v);
|
||||
const std::string& sslCert() const;
|
||||
|
||||
void setSslKey(std::string v);
|
||||
const std::string& sslKey() const;
|
||||
|
||||
void setSslRootCert(std::string v);
|
||||
const std::string& sslRootCert() const;
|
||||
|
||||
void setSslCrl(std::string v);
|
||||
const std::string& sslCrl() const;
|
||||
|
||||
const char * const * getKeywords() const;
|
||||
const char * const * getValues() const;
|
||||
|
||||
private:
|
||||
std::string m_description;
|
||||
std::string m_host;
|
||||
std::string m_hostaddr;
|
||||
std::string m_port = "5432";
|
||||
|
||||
std::string m_user;
|
||||
std::string m_password;
|
||||
std::string m_dbname;
|
||||
|
||||
std::string m_sslMode;
|
||||
std::string m_sslCert;
|
||||
std::string m_sslKey;
|
||||
std::string m_sslRootCert;
|
||||
std::string m_sslCrl;
|
||||
|
||||
std::string m_applicationName;
|
||||
|
||||
static std::vector<const char*> s_keywords;
|
||||
mutable std::vector<const char*> m_values;
|
||||
};
|
||||
|
||||
|
||||
#endif // CONNECTION_H
|
||||
89
connectionlistmodel.cpp
Normal file
89
connectionlistmodel.cpp
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
#include "connectionlistmodel.h"
|
||||
#include <QSettings>
|
||||
|
||||
|
||||
inline QString stdStrToQ(const std::string &s)
|
||||
{
|
||||
return QString::fromUtf8(s.c_str());
|
||||
}
|
||||
|
||||
inline std::string qStrToStd(const QString &s)
|
||||
{
|
||||
return std::string(s.toUtf8().data());
|
||||
}
|
||||
|
||||
inline std::string qvarToStdStr(const QVariant &c)
|
||||
{
|
||||
return qStrToStd(c.toString());
|
||||
}
|
||||
|
||||
|
||||
/** Saves a connection configuration.
|
||||
|
||||
Before calling this you may want to call beginGroup.
|
||||
*/
|
||||
void SaveConnectionConfig(QSettings &settings, const ConnectionConfig &cc)
|
||||
{
|
||||
settings.setValue("description", stdStrToQ(cc.description()));
|
||||
settings.setValue("host", stdStrToQ(cc.host()));
|
||||
settings.setValue("hostaddr", stdStrToQ(cc.hostAddr()));
|
||||
settings.setValue("port", cc.port());
|
||||
settings.setValue("user", stdStrToQ(cc.user()));
|
||||
settings.setValue("password", stdStrToQ(cc.password()));
|
||||
settings.setValue("dbname", stdStrToQ(cc.dbname()));
|
||||
settings.setValue("sslmode", (int)cc.sslMode());
|
||||
settings.setValue("sslcert", stdStrToQ(cc.sslCert()));
|
||||
settings.setValue("sslkey", stdStrToQ(cc.sslKey()));
|
||||
settings.setValue("sslrootcert", stdStrToQ(cc.sslRootCert()));
|
||||
settings.setValue("sslcrl", stdStrToQ(cc.sslCrl()));
|
||||
}
|
||||
|
||||
void LoadConnectionConfig(QSettings &settings, ConnectionConfig &cc)
|
||||
{
|
||||
cc.setDescription(qvarToStdStr(settings.value("description")));
|
||||
cc.setHost(qvarToStdStr(settings.value("host")));
|
||||
cc.setHostAddr(qvarToStdStr(settings.value("hostaddr")));
|
||||
cc.setPort(settings.value("port", 5432).toInt());
|
||||
cc.setUser(qvarToStdStr(settings.value("user")));
|
||||
cc.setPassword(qvarToStdStr(settings.value("password")));
|
||||
cc.setDbname(qvarToStdStr(settings.value("dbname")));
|
||||
cc.setSslMode((SslMode)settings.value("sslmode").toInt());
|
||||
cc.setSslCert(qvarToStdStr(settings.value("sslcert")));
|
||||
cc.setSslKey(qvarToStdStr(settings.value("sslkey")));
|
||||
cc.setSslRootCert(qvarToStdStr(settings.value("sslrootcert")));
|
||||
cc.setSslCrl(qvarToStdStr(settings.value("sslcrl")));
|
||||
}
|
||||
|
||||
|
||||
|
||||
ConnectionListModel::ConnectionListModel(QObject *parent)
|
||||
: QAbstractListModel(parent)
|
||||
{}
|
||||
|
||||
int ConnectionListModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return m_connections.size();
|
||||
}
|
||||
|
||||
QVariant ConnectionListModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
QVariant result;
|
||||
if (role == Qt::DisplayRole) {
|
||||
int row = index.row();
|
||||
result = makeLongDescription(m_connections.at(row));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
QString ConnectionListModel::makeLongDescription(const ConnectionConfig &cfg)
|
||||
{
|
||||
std::string result(cfg.description());
|
||||
result += " (";
|
||||
result += cfg.user();
|
||||
result += "@";
|
||||
result += cfg.host();
|
||||
result += "/";
|
||||
result += cfg.dbname();
|
||||
result += ")";
|
||||
return stdStrToQ(result);
|
||||
}
|
||||
35
connectionlistmodel.h
Normal file
35
connectionlistmodel.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#ifndef CONNECTIONLISTMODEL_H
|
||||
#define CONNECTIONLISTMODEL_H
|
||||
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
|
||||
#include <QAbstractListModel>
|
||||
|
||||
#include "connectionconfig.h"
|
||||
|
||||
|
||||
class ConnectionListModel : public QAbstractListModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ConnectionListModel(QObject *parent);
|
||||
|
||||
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
// virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||
|
||||
void add(const ConnectionConfig &cfg)
|
||||
{
|
||||
m_connections.push_back(cfg);
|
||||
auto idx = createIndex(m_connections.size()-1, 0);
|
||||
emit dataChanged(idx, idx);
|
||||
}
|
||||
|
||||
private:
|
||||
using t_Connections = std::vector<ConnectionConfig>;
|
||||
t_Connections m_connections;
|
||||
|
||||
static QString makeLongDescription(const ConnectionConfig &cfg);
|
||||
};
|
||||
|
||||
#endif // CONNECTIONLISTMODEL_H
|
||||
57
connectionmanagerwindow.cpp
Normal file
57
connectionmanagerwindow.cpp
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#include "connectionmanagerwindow.h"
|
||||
#include "ui_connectionmanagerwindow.h"
|
||||
|
||||
#include "connectionlistmodel.h"
|
||||
|
||||
ConnectionManagerWindow::ConnectionManagerWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::ConnectionManagerWindow)
|
||||
, m_listModel(new ConnectionListModel(this))
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
ConnectionConfig c;
|
||||
c.setDescription("test");
|
||||
m_listModel->add(c);
|
||||
|
||||
ui->listView->setModel(m_listModel);
|
||||
|
||||
connect(ui->listView->selectionModel(),
|
||||
SIGNAL(currentChanged(QModelIndex,QModelIndex)),
|
||||
this, SLOT(on_currentChanged(QModelIndex,QModelIndex)));
|
||||
}
|
||||
|
||||
ConnectionManagerWindow::~ConnectionManagerWindow()
|
||||
{
|
||||
delete ui;
|
||||
delete m_listModel;
|
||||
}
|
||||
|
||||
void ConnectionManagerWindow::on_actionAdd_Connection_triggered()
|
||||
{
|
||||
ConnectionConfig c;
|
||||
c.setDescription("new");
|
||||
m_listModel->add(c);
|
||||
}
|
||||
|
||||
void ConnectionManagerWindow::on_currentChanged(const QModelIndex ¤t,
|
||||
const QModelIndex &previous)
|
||||
{
|
||||
int currow = current.row();
|
||||
int prevrow = previous.row();
|
||||
ui->lineEdit->setText(QString::number(currow));
|
||||
ui->lineEdit_2->setText(QString::number(prevrow));
|
||||
// if(selection.indexes().isEmpty()) {
|
||||
// clearMyView();
|
||||
// } else {
|
||||
// displayModelIndexInMyView(selection.indexes().first());
|
||||
// }
|
||||
}
|
||||
|
||||
void ConnectionManagerWindow::on_actionDelete_connection_triggered()
|
||||
{
|
||||
auto ci = ui->listView->selectionModel()->currentIndex();
|
||||
if (ci.isValid()) {
|
||||
//m_listModel->removeRow(ci.row());
|
||||
}
|
||||
}
|
||||
30
connectionmanagerwindow.h
Normal file
30
connectionmanagerwindow.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef CONNECTIONMANAGERWINDOW_H
|
||||
#define CONNECTIONMANAGERWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
namespace Ui {
|
||||
class ConnectionManagerWindow;
|
||||
}
|
||||
|
||||
class ConnectionListModel;
|
||||
|
||||
class ConnectionManagerWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ConnectionManagerWindow(QWidget *parent = 0);
|
||||
~ConnectionManagerWindow();
|
||||
|
||||
private slots:
|
||||
void on_actionAdd_Connection_triggered();
|
||||
void on_currentChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
||||
void on_actionDelete_connection_triggered();
|
||||
|
||||
private:
|
||||
Ui::ConnectionManagerWindow *ui;
|
||||
ConnectionListModel *m_listModel = nullptr;
|
||||
};
|
||||
|
||||
#endif // CONNECTIONMANAGERWINDOW_H
|
||||
190
connectionmanagerwindow.ui
Normal file
190
connectionmanagerwindow.ui
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ConnectionManagerWindow</class>
|
||||
<widget class="QMainWindow" name="ConnectionManagerWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QListView" name="listView">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Host</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_2"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="spinBox">
|
||||
<property name="maximum">
|
||||
<number>65535</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Maintenance DB</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="comboBox">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>postgres</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>template1</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Username</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_3"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_4">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<widget class="QToolBar" name="toolBar">
|
||||
<property name="windowTitle">
|
||||
<string>toolBar</string>
|
||||
</property>
|
||||
<property name="movable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="floatable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="actionConnect"/>
|
||||
<addaction name="actionAdd_Connection"/>
|
||||
<addaction name="actionDelete_connection"/>
|
||||
</widget>
|
||||
<action name="actionAdd_Connection">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../../../Users/eelke/fatcow-hosting-icons-900/server_add.png</normaloff>
|
||||
<normalon>../../../Users/eelke/icons/server_add.png</normalon>../../../Users/eelke/fatcow-hosting-icons-900/server_add.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Connection</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDelete_connection">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../../../Users/eelke/fatcow-hosting-icons-900/server_delete.png</normaloff>
|
||||
<normalon>../../../Users/eelke/icons/server_delete.png</normalon>../../../Users/eelke/fatcow-hosting-icons-900/server_delete.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete connection</string>
|
||||
</property>
|
||||
<property name="iconText">
|
||||
<string>Delete</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionConnect">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../../../Users/eelke/fatcow-hosting-icons-900/server_go.png</normaloff>../../../Users/eelke/fatcow-hosting-icons-900/server_go.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Connect</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
14
databasewindow.cpp
Normal file
14
databasewindow.cpp
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#include "databasewindow.h"
|
||||
#include "ui_databasewindow.h"
|
||||
|
||||
DatabaseWindow::DatabaseWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::DatabaseWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
DatabaseWindow::~DatabaseWindow()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
22
databasewindow.h
Normal file
22
databasewindow.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef DATABASEWINDOW_H
|
||||
#define DATABASEWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
namespace Ui {
|
||||
class DatabaseWindow;
|
||||
}
|
||||
|
||||
class DatabaseWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DatabaseWindow(QWidget *parent = 0);
|
||||
~DatabaseWindow();
|
||||
|
||||
private:
|
||||
Ui::DatabaseWindow *ui;
|
||||
};
|
||||
|
||||
#endif // DATABASEWINDOW_H
|
||||
48
databasewindow.ui
Normal file
48
databasewindow.ui
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>DatabaseWindow</class>
|
||||
<widget class="QMainWindow" name="DatabaseWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Tab 1</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Tab 2</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
14
main.cpp
14
main.cpp
|
|
@ -1,10 +1,9 @@
|
|||
#include "mainwindow.h"
|
||||
//#include "mainwindow.h"
|
||||
//#include "databasewindow.h"
|
||||
#include "connectionmanagerwindow.h"
|
||||
#include <QApplication>
|
||||
#include <winsock2.h>
|
||||
|
||||
// Need to link with Ws2_32.lib
|
||||
#pragma comment(lib, "ws2_32.lib")
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
|
|
@ -20,7 +19,12 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
|
||||
QCoreApplication::setOrganizationName("MySoft");
|
||||
QCoreApplication::setOrganizationDomain("eelkeklein.nl");
|
||||
QCoreApplication::setApplicationName("Ivory");
|
||||
|
||||
ConnectionManagerWindow w;
|
||||
w.show();
|
||||
|
||||
int result = a.exec();
|
||||
|
|
|
|||
222
ui_connectionmanagerwindow.h
Normal file
222
ui_connectionmanagerwindow.h
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
/********************************************************************************
|
||||
** Form generated from reading UI file 'connectionmanagerwindow.ui'
|
||||
**
|
||||
** Created by: Qt User Interface Compiler version 5.7.1
|
||||
**
|
||||
** WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||
********************************************************************************/
|
||||
|
||||
#ifndef UI_CONNECTIONMANAGERWINDOW_H
|
||||
#define UI_CONNECTIONMANAGERWINDOW_H
|
||||
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtWidgets/QAction>
|
||||
#include <QtWidgets/QApplication>
|
||||
#include <QtWidgets/QButtonGroup>
|
||||
#include <QtWidgets/QComboBox>
|
||||
#include <QtWidgets/QFormLayout>
|
||||
#include <QtWidgets/QHeaderView>
|
||||
#include <QtWidgets/QLabel>
|
||||
#include <QtWidgets/QLineEdit>
|
||||
#include <QtWidgets/QListView>
|
||||
#include <QtWidgets/QMainWindow>
|
||||
#include <QtWidgets/QMenuBar>
|
||||
#include <QtWidgets/QSpinBox>
|
||||
#include <QtWidgets/QSplitter>
|
||||
#include <QtWidgets/QStatusBar>
|
||||
#include <QtWidgets/QToolBar>
|
||||
#include <QtWidgets/QVBoxLayout>
|
||||
#include <QtWidgets/QWidget>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class Ui_ConnectionManagerWindow
|
||||
{
|
||||
public:
|
||||
QAction *actionAdd_Connection;
|
||||
QAction *actionDelete_connection;
|
||||
QAction *actionConnect;
|
||||
QWidget *centralwidget;
|
||||
QVBoxLayout *verticalLayout;
|
||||
QSplitter *splitter;
|
||||
QListView *listView;
|
||||
QWidget *layoutWidget;
|
||||
QFormLayout *formLayout_2;
|
||||
QLabel *label;
|
||||
QLineEdit *lineEdit;
|
||||
QLabel *label_2;
|
||||
QLineEdit *lineEdit_2;
|
||||
QLabel *label_3;
|
||||
QSpinBox *spinBox;
|
||||
QLabel *label_4;
|
||||
QComboBox *comboBox;
|
||||
QLabel *label_5;
|
||||
QLineEdit *lineEdit_3;
|
||||
QLabel *label_6;
|
||||
QLineEdit *lineEdit_4;
|
||||
QMenuBar *menubar;
|
||||
QStatusBar *statusbar;
|
||||
QToolBar *toolBar;
|
||||
|
||||
void setupUi(QMainWindow *ConnectionManagerWindow)
|
||||
{
|
||||
if (ConnectionManagerWindow->objectName().isEmpty())
|
||||
ConnectionManagerWindow->setObjectName(QStringLiteral("ConnectionManagerWindow"));
|
||||
ConnectionManagerWindow->resize(800, 600);
|
||||
actionAdd_Connection = new QAction(ConnectionManagerWindow);
|
||||
actionAdd_Connection->setObjectName(QStringLiteral("actionAdd_Connection"));
|
||||
QIcon icon;
|
||||
icon.addFile(QStringLiteral("../../../Users/eelke/fatcow-hosting-icons-900/server_add.png"), QSize(), QIcon::Normal, QIcon::Off);
|
||||
icon.addFile(QStringLiteral("../../../Users/eelke/icons/server_add.png"), QSize(), QIcon::Normal, QIcon::On);
|
||||
actionAdd_Connection->setIcon(icon);
|
||||
actionDelete_connection = new QAction(ConnectionManagerWindow);
|
||||
actionDelete_connection->setObjectName(QStringLiteral("actionDelete_connection"));
|
||||
QIcon icon1;
|
||||
icon1.addFile(QStringLiteral("../../../Users/eelke/fatcow-hosting-icons-900/server_delete.png"), QSize(), QIcon::Normal, QIcon::Off);
|
||||
icon1.addFile(QStringLiteral("../../../Users/eelke/icons/server_delete.png"), QSize(), QIcon::Normal, QIcon::On);
|
||||
actionDelete_connection->setIcon(icon1);
|
||||
actionConnect = new QAction(ConnectionManagerWindow);
|
||||
actionConnect->setObjectName(QStringLiteral("actionConnect"));
|
||||
QIcon icon2;
|
||||
icon2.addFile(QStringLiteral("../../../Users/eelke/fatcow-hosting-icons-900/server_go.png"), QSize(), QIcon::Normal, QIcon::Off);
|
||||
actionConnect->setIcon(icon2);
|
||||
centralwidget = new QWidget(ConnectionManagerWindow);
|
||||
centralwidget->setObjectName(QStringLiteral("centralwidget"));
|
||||
verticalLayout = new QVBoxLayout(centralwidget);
|
||||
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
|
||||
splitter = new QSplitter(centralwidget);
|
||||
splitter->setObjectName(QStringLiteral("splitter"));
|
||||
splitter->setOrientation(Qt::Horizontal);
|
||||
listView = new QListView(splitter);
|
||||
listView->setObjectName(QStringLiteral("listView"));
|
||||
listView->setAlternatingRowColors(true);
|
||||
listView->setUniformItemSizes(true);
|
||||
splitter->addWidget(listView);
|
||||
layoutWidget = new QWidget(splitter);
|
||||
layoutWidget->setObjectName(QStringLiteral("layoutWidget"));
|
||||
formLayout_2 = new QFormLayout(layoutWidget);
|
||||
formLayout_2->setObjectName(QStringLiteral("formLayout_2"));
|
||||
formLayout_2->setContentsMargins(0, 0, 0, 0);
|
||||
label = new QLabel(layoutWidget);
|
||||
label->setObjectName(QStringLiteral("label"));
|
||||
|
||||
formLayout_2->setWidget(0, QFormLayout::LabelRole, label);
|
||||
|
||||
lineEdit = new QLineEdit(layoutWidget);
|
||||
lineEdit->setObjectName(QStringLiteral("lineEdit"));
|
||||
|
||||
formLayout_2->setWidget(0, QFormLayout::FieldRole, lineEdit);
|
||||
|
||||
label_2 = new QLabel(layoutWidget);
|
||||
label_2->setObjectName(QStringLiteral("label_2"));
|
||||
|
||||
formLayout_2->setWidget(1, QFormLayout::LabelRole, label_2);
|
||||
|
||||
lineEdit_2 = new QLineEdit(layoutWidget);
|
||||
lineEdit_2->setObjectName(QStringLiteral("lineEdit_2"));
|
||||
|
||||
formLayout_2->setWidget(1, QFormLayout::FieldRole, lineEdit_2);
|
||||
|
||||
label_3 = new QLabel(layoutWidget);
|
||||
label_3->setObjectName(QStringLiteral("label_3"));
|
||||
|
||||
formLayout_2->setWidget(2, QFormLayout::LabelRole, label_3);
|
||||
|
||||
spinBox = new QSpinBox(layoutWidget);
|
||||
spinBox->setObjectName(QStringLiteral("spinBox"));
|
||||
spinBox->setMaximum(65535);
|
||||
|
||||
formLayout_2->setWidget(2, QFormLayout::FieldRole, spinBox);
|
||||
|
||||
label_4 = new QLabel(layoutWidget);
|
||||
label_4->setObjectName(QStringLiteral("label_4"));
|
||||
|
||||
formLayout_2->setWidget(3, QFormLayout::LabelRole, label_4);
|
||||
|
||||
comboBox = new QComboBox(layoutWidget);
|
||||
comboBox->setObjectName(QStringLiteral("comboBox"));
|
||||
comboBox->setEditable(true);
|
||||
|
||||
formLayout_2->setWidget(3, QFormLayout::FieldRole, comboBox);
|
||||
|
||||
label_5 = new QLabel(layoutWidget);
|
||||
label_5->setObjectName(QStringLiteral("label_5"));
|
||||
|
||||
formLayout_2->setWidget(4, QFormLayout::LabelRole, label_5);
|
||||
|
||||
lineEdit_3 = new QLineEdit(layoutWidget);
|
||||
lineEdit_3->setObjectName(QStringLiteral("lineEdit_3"));
|
||||
|
||||
formLayout_2->setWidget(4, QFormLayout::FieldRole, lineEdit_3);
|
||||
|
||||
label_6 = new QLabel(layoutWidget);
|
||||
label_6->setObjectName(QStringLiteral("label_6"));
|
||||
|
||||
formLayout_2->setWidget(5, QFormLayout::LabelRole, label_6);
|
||||
|
||||
lineEdit_4 = new QLineEdit(layoutWidget);
|
||||
lineEdit_4->setObjectName(QStringLiteral("lineEdit_4"));
|
||||
lineEdit_4->setEchoMode(QLineEdit::Password);
|
||||
|
||||
formLayout_2->setWidget(5, QFormLayout::FieldRole, lineEdit_4);
|
||||
|
||||
splitter->addWidget(layoutWidget);
|
||||
|
||||
verticalLayout->addWidget(splitter);
|
||||
|
||||
ConnectionManagerWindow->setCentralWidget(centralwidget);
|
||||
menubar = new QMenuBar(ConnectionManagerWindow);
|
||||
menubar->setObjectName(QStringLiteral("menubar"));
|
||||
menubar->setGeometry(QRect(0, 0, 800, 25));
|
||||
ConnectionManagerWindow->setMenuBar(menubar);
|
||||
statusbar = new QStatusBar(ConnectionManagerWindow);
|
||||
statusbar->setObjectName(QStringLiteral("statusbar"));
|
||||
ConnectionManagerWindow->setStatusBar(statusbar);
|
||||
toolBar = new QToolBar(ConnectionManagerWindow);
|
||||
toolBar->setObjectName(QStringLiteral("toolBar"));
|
||||
toolBar->setMovable(false);
|
||||
toolBar->setFloatable(false);
|
||||
ConnectionManagerWindow->addToolBar(Qt::TopToolBarArea, toolBar);
|
||||
|
||||
toolBar->addAction(actionConnect);
|
||||
toolBar->addAction(actionAdd_Connection);
|
||||
toolBar->addAction(actionDelete_connection);
|
||||
|
||||
retranslateUi(ConnectionManagerWindow);
|
||||
|
||||
comboBox->setCurrentIndex(0);
|
||||
|
||||
|
||||
QMetaObject::connectSlotsByName(ConnectionManagerWindow);
|
||||
} // setupUi
|
||||
|
||||
void retranslateUi(QMainWindow *ConnectionManagerWindow)
|
||||
{
|
||||
ConnectionManagerWindow->setWindowTitle(QApplication::translate("ConnectionManagerWindow", "MainWindow", Q_NULLPTR));
|
||||
actionAdd_Connection->setText(QApplication::translate("ConnectionManagerWindow", "Add Connection", Q_NULLPTR));
|
||||
actionDelete_connection->setText(QApplication::translate("ConnectionManagerWindow", "Delete connection", Q_NULLPTR));
|
||||
actionDelete_connection->setIconText(QApplication::translate("ConnectionManagerWindow", "Delete", Q_NULLPTR));
|
||||
actionConnect->setText(QApplication::translate("ConnectionManagerWindow", "Connect", Q_NULLPTR));
|
||||
label->setText(QApplication::translate("ConnectionManagerWindow", "Name", Q_NULLPTR));
|
||||
label_2->setText(QApplication::translate("ConnectionManagerWindow", "Host", Q_NULLPTR));
|
||||
label_3->setText(QApplication::translate("ConnectionManagerWindow", "Port", Q_NULLPTR));
|
||||
label_4->setText(QApplication::translate("ConnectionManagerWindow", "Maintenance DB", Q_NULLPTR));
|
||||
comboBox->clear();
|
||||
comboBox->insertItems(0, QStringList()
|
||||
<< QApplication::translate("ConnectionManagerWindow", "postgres", Q_NULLPTR)
|
||||
<< QApplication::translate("ConnectionManagerWindow", "template1", Q_NULLPTR)
|
||||
);
|
||||
label_5->setText(QApplication::translate("ConnectionManagerWindow", "Username", Q_NULLPTR));
|
||||
label_6->setText(QApplication::translate("ConnectionManagerWindow", "Password", Q_NULLPTR));
|
||||
toolBar->setWindowTitle(QApplication::translate("ConnectionManagerWindow", "toolBar", Q_NULLPTR));
|
||||
} // retranslateUi
|
||||
|
||||
};
|
||||
|
||||
namespace Ui {
|
||||
class ConnectionManagerWindow: public Ui_ConnectionManagerWindow {};
|
||||
} // namespace Ui
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // UI_CONNECTIONMANAGERWINDOW_H
|
||||
86
ui_databasewindow.h
Normal file
86
ui_databasewindow.h
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/********************************************************************************
|
||||
** Form generated from reading UI file 'databasewindow.ui'
|
||||
**
|
||||
** Created by: Qt User Interface Compiler version 5.7.1
|
||||
**
|
||||
** WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||
********************************************************************************/
|
||||
|
||||
#ifndef UI_DATABASEWINDOW_H
|
||||
#define UI_DATABASEWINDOW_H
|
||||
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtWidgets/QAction>
|
||||
#include <QtWidgets/QApplication>
|
||||
#include <QtWidgets/QButtonGroup>
|
||||
#include <QtWidgets/QHeaderView>
|
||||
#include <QtWidgets/QMainWindow>
|
||||
#include <QtWidgets/QMenuBar>
|
||||
#include <QtWidgets/QStatusBar>
|
||||
#include <QtWidgets/QTabWidget>
|
||||
#include <QtWidgets/QVBoxLayout>
|
||||
#include <QtWidgets/QWidget>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class Ui_DatabaseWindow
|
||||
{
|
||||
public:
|
||||
QWidget *centralwidget;
|
||||
QVBoxLayout *verticalLayout;
|
||||
QTabWidget *tabWidget;
|
||||
QWidget *tab;
|
||||
QWidget *tab_2;
|
||||
QMenuBar *menubar;
|
||||
QStatusBar *statusbar;
|
||||
|
||||
void setupUi(QMainWindow *DatabaseWindow)
|
||||
{
|
||||
if (DatabaseWindow->objectName().isEmpty())
|
||||
DatabaseWindow->setObjectName(QStringLiteral("DatabaseWindow"));
|
||||
DatabaseWindow->resize(800, 600);
|
||||
centralwidget = new QWidget(DatabaseWindow);
|
||||
centralwidget->setObjectName(QStringLiteral("centralwidget"));
|
||||
verticalLayout = new QVBoxLayout(centralwidget);
|
||||
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
|
||||
tabWidget = new QTabWidget(centralwidget);
|
||||
tabWidget->setObjectName(QStringLiteral("tabWidget"));
|
||||
tab = new QWidget();
|
||||
tab->setObjectName(QStringLiteral("tab"));
|
||||
tabWidget->addTab(tab, QString());
|
||||
tab_2 = new QWidget();
|
||||
tab_2->setObjectName(QStringLiteral("tab_2"));
|
||||
tabWidget->addTab(tab_2, QString());
|
||||
|
||||
verticalLayout->addWidget(tabWidget);
|
||||
|
||||
DatabaseWindow->setCentralWidget(centralwidget);
|
||||
menubar = new QMenuBar(DatabaseWindow);
|
||||
menubar->setObjectName(QStringLiteral("menubar"));
|
||||
menubar->setGeometry(QRect(0, 0, 800, 25));
|
||||
DatabaseWindow->setMenuBar(menubar);
|
||||
statusbar = new QStatusBar(DatabaseWindow);
|
||||
statusbar->setObjectName(QStringLiteral("statusbar"));
|
||||
DatabaseWindow->setStatusBar(statusbar);
|
||||
|
||||
retranslateUi(DatabaseWindow);
|
||||
|
||||
QMetaObject::connectSlotsByName(DatabaseWindow);
|
||||
} // setupUi
|
||||
|
||||
void retranslateUi(QMainWindow *DatabaseWindow)
|
||||
{
|
||||
DatabaseWindow->setWindowTitle(QApplication::translate("DatabaseWindow", "MainWindow", Q_NULLPTR));
|
||||
tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("DatabaseWindow", "Tab 1", Q_NULLPTR));
|
||||
tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate("DatabaseWindow", "Tab 2", Q_NULLPTR));
|
||||
} // retranslateUi
|
||||
|
||||
};
|
||||
|
||||
namespace Ui {
|
||||
class DatabaseWindow: public Ui_DatabaseWindow {};
|
||||
} // namespace Ui
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // UI_DATABASEWINDOW_H
|
||||
Loading…
Add table
Add a link
Reference in a new issue