mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
Create/copy from README.md documentation about remote databases. Add Help button to Remote database dialog. Extend documentation in the Windows msi installer
162 lines
3.5 KiB
C++
162 lines
3.5 KiB
C++
/* vi: set sw=4 ts=4:
|
|
*
|
|
* Copyright (C) 2017 Christian Hohnstaedt.
|
|
*
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <QStringList>
|
|
#include <QDebug>
|
|
#include <QFile>
|
|
|
|
#include "MainWindow.h"
|
|
#include "OpenDb.h"
|
|
#include "Help.h"
|
|
#include "XcaWarning.h"
|
|
#include "lib/base.h"
|
|
#include "lib/dbhistory.h"
|
|
|
|
DbMap OpenDb::databases {
|
|
{ "QPSQL", "PostgreSQL" },
|
|
{ "QMYSQL", "MySQL / MariaDB" },
|
|
{ "QODBC", "Open Database Connectivity (ODBC)" }
|
|
};
|
|
|
|
void OpenDb::initDatabases()
|
|
{
|
|
QStringList list = QSqlDatabase::drivers();
|
|
|
|
qDebug() << "SQL Plugins:" << list.join(",");;
|
|
foreach (QString driver, databases.keys()) {
|
|
if (!list.contains(driver))
|
|
databases.take(driver);
|
|
{
|
|
QSqlDatabase db = QSqlDatabase::addDatabase(driver, driver + "_C");
|
|
if (!db.isValid()) {
|
|
qDebug() << "Database" << driver << "is Invalid";
|
|
databases.take(driver);
|
|
}
|
|
}
|
|
QSqlDatabase::removeDatabase(driver + "_C");
|
|
}
|
|
qDebug() << "Valid Remote DB Drivers: " << databases.size()
|
|
<< "[" << databases.keys().join(",") << "]";
|
|
}
|
|
|
|
bool OpenDb::hasSqLite()
|
|
{
|
|
return QSqlDatabase::isDriverAvailable("QSQLITE");
|
|
}
|
|
|
|
void OpenDb::driver_selected()
|
|
{
|
|
if (getDbType() == "QODBC")
|
|
dbName_label->setText("DSN");
|
|
else
|
|
dbName_label->setText(tr("Database name"));
|
|
}
|
|
|
|
bool OpenDb::hasRemoteDrivers()
|
|
{
|
|
return databases.size() > 0;
|
|
}
|
|
|
|
void OpenDb::fillDbDropDown(const QString ¤t)
|
|
{
|
|
dbType->clear();
|
|
foreach(QString driver, databases.keys()) {
|
|
dbType->insertItem(0, databases[driver], driver);
|
|
if (driver == current)
|
|
dbType->setCurrentIndex(0);
|
|
}
|
|
if (dbType->count() == 1) {
|
|
dbType->setCurrentIndex(0);
|
|
}
|
|
}
|
|
|
|
void OpenDb::setupDatabaseName(const QString &db)
|
|
{
|
|
if (!database_model::isRemoteDB(db))
|
|
return;
|
|
|
|
DbMap remote_param = database_model::splitRemoteDbName(db);
|
|
|
|
userName->setText(remote_param["user"]);
|
|
hostName->setText(remote_param["host"]);
|
|
dbName->setText(remote_param["dbname"]);
|
|
prefix->setText(remote_param["prefix"]);
|
|
fillDbDropDown(remote_param["type"]);
|
|
}
|
|
|
|
OpenDb::OpenDb(QWidget *parent, const QString &db)
|
|
:QDialog(parent)
|
|
{
|
|
setupUi(this);
|
|
setWindowTitle(XCA_TITLE);
|
|
fillDbDropDown(QString());
|
|
|
|
if (database_model::isRemoteDB(db)) {
|
|
setupDatabaseName(db);
|
|
sqlite = false;
|
|
show_connection_settings = true;
|
|
} else if (hasSqLite() && !db.isEmpty()) {
|
|
dbName->setText(db);
|
|
sqlite = true;
|
|
show_connection_settings = false;
|
|
} else {
|
|
sqlite = false;
|
|
show_connection_settings = true;
|
|
}
|
|
driver_selected();
|
|
connect(dbType, SIGNAL(currentIndexChanged(int)),
|
|
this, SLOT(driver_selected()));
|
|
|
|
mainwin->helpdlg->register_ctxhelp_button(this, "remote_db");
|
|
}
|
|
|
|
QString OpenDb::getDbType() const
|
|
{
|
|
return sqlite ? hasSqLite() ? QString("QSQLITE") : QString("") :
|
|
dbType->itemData(dbType->currentIndex()).toString();
|
|
}
|
|
|
|
void OpenDb::checkSqLite()
|
|
{
|
|
if (hasSqLite())
|
|
return;
|
|
XCA_WARN(tr("No SqLite3 driver available. Please install the qt-sqlite package of your distribution"));
|
|
}
|
|
|
|
QString OpenDb::getDescriptor() const
|
|
{
|
|
QString pref = prefix->text();
|
|
if (!pref.isEmpty())
|
|
pref = QString("#%1").arg(pref.toLower());
|
|
return sqlite ?
|
|
dbName->text() :
|
|
QString("%1@%2/%3:%4%5")
|
|
.arg(userName->text())
|
|
.arg(hostName->text())
|
|
.arg(getDbType())
|
|
.arg(dbName->text())
|
|
.arg(pref);
|
|
}
|
|
|
|
int OpenDb::exec()
|
|
{
|
|
if (!hasSqLite() && !hasRemoteDrivers())
|
|
return 0;
|
|
|
|
if (!show_connection_settings)
|
|
return 1;
|
|
|
|
setupDatabaseName(dbhistory::getLastRemote());
|
|
|
|
bool ret = QDialog::exec();
|
|
|
|
if (ret && !sqlite)
|
|
dbhistory::setLastRemote(getDescriptor());
|
|
return ret;
|
|
}
|