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>());
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::AlignmentFlag::AlignLeft |
Qt::AlignmentFlag::AlignVCenter,

View File

@ -8,10 +8,48 @@
#include <QDir>
#include <QRegularExpression>
#include <QSqlError>
#include <QSqlQuery>
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,
const QString& sql_file,
const QString& database_name) {

View File

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

View File

@ -13,6 +13,10 @@
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,
const QString& w_database, const QString& username,
const QString& password) {
@ -189,9 +193,9 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
else {
// Database was previously initialized. Now just check the schema version.
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)) {
qDebugNN << LOGSEC_DB
<< "Database schema was updated from"
@ -202,7 +206,7 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
}
else {
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);
}
}
@ -220,43 +224,6 @@ void MariaDbDriver::setPragmas(QSqlQuery& query) {
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) {
Q_UNUSED(desired_type)

View File

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

View File

@ -35,6 +35,10 @@ bool SqliteDriver::vacuumDatabase() {
return query_vacuum.exec(QSL("VACUUM"));
}
QString SqliteDriver::ddlFilePrefix() const {
return QSL("sqlite");
}
bool SqliteDriver::saveDatabase() {
if (!m_inMemoryDatabase) {
return true;
@ -259,9 +263,17 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
}
else if (!in_memory) {
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)) {
qDebugNN << LOGSEC_DB
<< "Database schema was updated from '"
@ -272,7 +284,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
}
else {
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);
}
}
@ -342,48 +354,6 @@ QString SqliteDriver::databaseFilePath() const {
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) {
query.exec(QSL("PRAGMA encoding = \"UTF-8\""));
query.exec(QSL("PRAGMA synchronous = OFF"));

View File

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