smaller "margins" when multilining items

This commit is contained in:
Martin Rotter 2022-01-19 11:37:28 +01:00
parent bbf1f5bed1
commit 6bc7b9796b
7 changed files with 69 additions and 90 deletions

View File

@ -441,7 +441,7 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
} }
QFontMetrics fm(data(idx, Qt::ItemDataRole::FontRole).value<QFont>()); QFontMetrics fm(data(idx, Qt::ItemDataRole::FontRole).value<QFont>());
auto rct = fm.boundingRect(QRect(QPoint(0, 0), QPoint(wd - 20, 100000)), auto rct = fm.boundingRect(QRect(QPoint(0, 0), QPoint(wd - 10, 100000)),
Qt::TextFlag::TextWordWrap | Qt::TextFlag::TextWordWrap |
Qt::AlignmentFlag::AlignLeft | Qt::AlignmentFlag::AlignLeft |
Qt::AlignmentFlag::AlignVCenter, Qt::AlignmentFlag::AlignVCenter,

View File

@ -8,10 +8,48 @@
#include <QDir> #include <QDir>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSqlError>
#include <QSqlQuery>
DatabaseDriver::DatabaseDriver(QObject* parent) : QObject(parent) DatabaseDriver::DatabaseDriver(QObject* parent) : QObject(parent)
{} {}
bool DatabaseDriver::updateDatabaseSchema(QSqlQuery& query,
int source_db_schema_version,
const QString& database_name) {
const int current_version = QSL(APP_DB_SCHEMA_VERSION).toInt();
while (source_db_schema_version != current_version) {
try {
const QStringList statements = prepareScript(APP_SQL_PATH,
QSL(APP_DB_UPDATE_FILE_PATTERN).arg(ddlFilePrefix(),
QString::number(source_db_schema_version),
QString::number(source_db_schema_version + 1)),
database_name);
for (const QString& statement : statements) {
if (!query.exec(statement) && query.lastError().isValid()) {
throw ApplicationException(query.lastError().text());
}
}
}
catch (const ApplicationException& ex) {
qFatal("Error when running SQL scripts: %s.", qPrintable(ex.message()));
}
// Increment the version.
qDebugNN << LOGSEC_DB
<< "Updating database schema "
<< QUOTE_W_SPACE(source_db_schema_version)
<< "->"
<< QUOTE_W_SPACE_DOT(source_db_schema_version + 1);
source_db_schema_version++;
}
return true;
}
QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder, QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder,
const QString& sql_file, const QString& sql_file,
const QString& database_name) { const QString& database_name) {

View File

@ -6,6 +6,7 @@
#include <QObject> #include <QObject>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlQuery>
class DatabaseDriver : public QObject { class DatabaseDriver : public QObject {
Q_OBJECT Q_OBJECT
@ -31,6 +32,7 @@ class DatabaseDriver : public QObject {
virtual QString location() const = 0; virtual QString location() const = 0;
virtual QString humanDriverType() const = 0; virtual QString humanDriverType() const = 0;
virtual QString qtDriverCode() const = 0; virtual QString qtDriverCode() const = 0;
virtual QString ddlFilePrefix() const = 0;
virtual DriverType driverType() const = 0; virtual DriverType driverType() const = 0;
virtual QString autoIncrementPrimaryKey() const = 0; virtual QString autoIncrementPrimaryKey() const = 0;
virtual QString blob() const = 0; virtual QString blob() const = 0;
@ -44,6 +46,10 @@ class DatabaseDriver : public QObject {
DatabaseDriver::DesiredStorageType desired_type = DatabaseDriver::DesiredStorageType::FromSettings) = 0; DatabaseDriver::DesiredStorageType desired_type = DatabaseDriver::DesiredStorageType::FromSettings) = 0;
protected: protected:
bool updateDatabaseSchema(QSqlQuery& query,
int source_db_schema_version,
const QString& database_name = {});
QStringList prepareScript(const QString& base_sql_folder, QStringList prepareScript(const QString& base_sql_folder,
const QString& sql_file, const QString& sql_file,
const QString& database_name = {}); const QString& database_name = {});

View File

@ -13,6 +13,10 @@
MariaDbDriver::MariaDbDriver(QObject* parent) : DatabaseDriver(parent), m_databaseInitialized(false) {} MariaDbDriver::MariaDbDriver(QObject* parent) : DatabaseDriver(parent), m_databaseInitialized(false) {}
QString MariaDbDriver::ddlFilePrefix() const {
return QSL("mysql");
}
MariaDbDriver::MariaDbError MariaDbDriver::testConnection(const QString& hostname, int port, MariaDbDriver::MariaDbError MariaDbDriver::testConnection(const QString& hostname, int port,
const QString& w_database, const QString& username, const QString& w_database, const QString& username,
const QString& password) { const QString& password) {
@ -189,9 +193,9 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
else { else {
// Database was previously initialized. Now just check the schema version. // Database was previously initialized. Now just check the schema version.
query_db.next(); query_db.next();
const QString installed_db_schema = query_db.value(0).toString(); const int installed_db_schema = query_db.value(0).toString().toInt();
if (installed_db_schema.toInt() < QSL(APP_DB_SCHEMA_VERSION).toInt()) { if (installed_db_schema < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
if (updateDatabaseSchema(query_db, installed_db_schema, database_name)) { if (updateDatabaseSchema(query_db, installed_db_schema, database_name)) {
qDebugNN << LOGSEC_DB qDebugNN << LOGSEC_DB
<< "Database schema was updated from" << "Database schema was updated from"
@ -202,7 +206,7 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
} }
else { else {
qFatal("Database schema was not updated from '%s' to '%s' successully.", qFatal("Database schema was not updated from '%s' to '%s' successully.",
qPrintable(installed_db_schema), qPrintable(QString::number(installed_db_schema)),
APP_DB_SCHEMA_VERSION); APP_DB_SCHEMA_VERSION);
} }
} }
@ -220,43 +224,6 @@ void MariaDbDriver::setPragmas(QSqlQuery& query) {
query.exec(QSL("SET CHARACTER SET utf8mb4;")); query.exec(QSL("SET CHARACTER SET utf8mb4;"));
} }
bool MariaDbDriver::updateDatabaseSchema(QSqlQuery& query,
const QString& source_db_schema_version,
const QString& database_name) {
int working_version = QString(source_db_schema_version).remove('.').toInt();
const int current_version = QSL(APP_DB_SCHEMA_VERSION).remove('.').toInt();
while (working_version != current_version) {
try {
const QStringList statements = prepareScript(APP_SQL_PATH,
QSL(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("mysql"),
QString::number(working_version),
QString::number(working_version + 1)),
database_name);
for (const QString& statement : statements) {
if (!query.exec(statement) && query.lastError().isValid()) {
throw ApplicationException(query.lastError().text());
}
}
}
catch (const ApplicationException& ex) {
qFatal("Error when running SQL scripts: %s.", qPrintable(ex.message()));
}
// Increment the version.
qDebugNN << LOGSEC_DB
<< "Updating database schema "
<< QUOTE_W_SPACE(working_version)
<< "->"
<< QUOTE_W_SPACE_DOT(working_version + 1);
working_version++;
}
return true;
}
QSqlDatabase MariaDbDriver::connection(const QString& connection_name, DatabaseDriver::DesiredStorageType desired_type) { QSqlDatabase MariaDbDriver::connection(const QString& connection_name, DatabaseDriver::DesiredStorageType desired_type) {
Q_UNUSED(desired_type) Q_UNUSED(desired_type)

View File

@ -27,6 +27,7 @@ class MariaDbDriver : public DatabaseDriver {
virtual QString location() const; virtual QString location() const;
virtual QString humanDriverType() const; virtual QString humanDriverType() const;
virtual QString qtDriverCode() const; virtual QString qtDriverCode() const;
virtual QString ddlFilePrefix() const;
virtual DriverType driverType() const; virtual DriverType driverType() const;
virtual bool vacuumDatabase(); virtual bool vacuumDatabase();
virtual bool saveDatabase(); virtual bool saveDatabase();
@ -42,9 +43,6 @@ class MariaDbDriver : public DatabaseDriver {
QString interpretErrorCode(MariaDbError error_code) const; QString interpretErrorCode(MariaDbError error_code) const;
private: private:
bool updateDatabaseSchema(QSqlQuery& query,
const QString& source_db_schema_version,
const QString& database_name);
QSqlDatabase initializeDatabase(const QString& connection_name); QSqlDatabase initializeDatabase(const QString& connection_name);
void setPragmas(QSqlQuery& query); void setPragmas(QSqlQuery& query);

View File

@ -35,6 +35,10 @@ bool SqliteDriver::vacuumDatabase() {
return query_vacuum.exec(QSL("VACUUM")); return query_vacuum.exec(QSL("VACUUM"));
} }
QString SqliteDriver::ddlFilePrefix() const {
return QSL("sqlite");
}
bool SqliteDriver::saveDatabase() { bool SqliteDriver::saveDatabase() {
if (!m_inMemoryDatabase) { if (!m_inMemoryDatabase) {
return true; return true;
@ -259,9 +263,17 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
} }
else if (!in_memory) { else if (!in_memory) {
query_db.next(); query_db.next();
const QString installed_db_schema = query_db.value(0).toString(); const int installed_db_schema = query_db.value(0).toString().toInt();
if (installed_db_schema < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
// Now, it would be good to create backup of SQLite DB file.
if (IOFactory::copyFile(databaseFilePath(), databaseFilePath() + ".bak")) {
qDebugNN << LOGSEC_DB << "Creating backup of SQLite DB file.";
}
else {
qFatal("Creation of backup SQLite DB file failed.");
}
if (installed_db_schema.toInt() < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
if (updateDatabaseSchema(query_db, installed_db_schema)) { if (updateDatabaseSchema(query_db, installed_db_schema)) {
qDebugNN << LOGSEC_DB qDebugNN << LOGSEC_DB
<< "Database schema was updated from '" << "Database schema was updated from '"
@ -272,7 +284,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
} }
else { else {
qFatal("Database schema was not updated from '%s' to '%s' successully.", qFatal("Database schema was not updated from '%s' to '%s' successully.",
qPrintable(installed_db_schema), qPrintable(QString::number(installed_db_schema)),
APP_DB_SCHEMA_VERSION); APP_DB_SCHEMA_VERSION);
} }
} }
@ -342,48 +354,6 @@ QString SqliteDriver::databaseFilePath() const {
return m_databaseFilePath + QDir::separator() + APP_DB_SQLITE_FILE; return m_databaseFilePath + QDir::separator() + APP_DB_SQLITE_FILE;
} }
bool SqliteDriver::updateDatabaseSchema(QSqlQuery& query, const QString& source_db_schema_version) {
int working_version = QString(source_db_schema_version).remove('.').toInt();
const int current_version = QSL(APP_DB_SCHEMA_VERSION).remove('.').toInt();
// Now, it would be good to create backup of SQLite DB file.
if (IOFactory::copyFile(databaseFilePath(), databaseFilePath() + ".bak")) {
qDebugNN << LOGSEC_DB << "Creating backup of SQLite DB file.";
}
else {
qFatal("Creation of backup SQLite DB file failed.");
}
while (working_version != current_version) {
try {
const QStringList statements = prepareScript(APP_SQL_PATH,
QSL(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("sqlite"),
QString::number(working_version),
QString::number(working_version + 1)));
for (const QString& statement : statements) {
if (!query.exec(statement) && query.lastError().isValid()) {
throw ApplicationException(query.lastError().text());
}
}
}
catch (const ApplicationException& ex) {
qFatal("Error when running SQL scripts: %s.", qPrintable(ex.message()));
}
// Increment the version.
qDebugNN << LOGSEC_DB
<< "Updating database schema:"
<< QUOTE_W_SPACE(working_version)
<< "->"
<< QUOTE_W_SPACE_DOT(working_version + 1);
working_version++;
}
return true;
}
void SqliteDriver::setPragmas(QSqlQuery& query) { void SqliteDriver::setPragmas(QSqlQuery& query) {
query.exec(QSL("PRAGMA encoding = \"UTF-8\"")); query.exec(QSL("PRAGMA encoding = \"UTF-8\""));
query.exec(QSL("PRAGMA synchronous = OFF")); query.exec(QSL("PRAGMA synchronous = OFF"));

View File

@ -14,6 +14,7 @@ class SqliteDriver : public DatabaseDriver {
virtual QString location() const; virtual QString location() const;
virtual DriverType driverType() const; virtual DriverType driverType() const;
virtual bool vacuumDatabase(); virtual bool vacuumDatabase();
virtual QString ddlFilePrefix() const;
virtual bool saveDatabase(); virtual bool saveDatabase();
virtual bool initiateRestoration(const QString& database_package_file); virtual bool initiateRestoration(const QString& database_package_file);
virtual bool finishRestoration(); virtual bool finishRestoration();
@ -28,7 +29,6 @@ class SqliteDriver : public DatabaseDriver {
private: private:
QSqlDatabase initializeDatabase(const QString& connection_name, bool in_memory); QSqlDatabase initializeDatabase(const QString& connection_name, bool in_memory);
bool updateDatabaseSchema(QSqlQuery &query, const QString& source_db_schema_version);
void setPragmas(QSqlQuery& query); void setPragmas(QSqlQuery& query);
QString databaseFilePath() const; QString databaseFilePath() const;