97 lines
2.7 KiB
C++
97 lines
2.7 KiB
C++
#include "base_sql_table_model.h"
|
|
|
|
#include "QSqlError"
|
|
#include "table_info_sqlite.h"
|
|
#include <QDateTime>
|
|
#include <QSqlQuery>
|
|
|
|
BaseSqlTableModel::BaseSqlTableModel(QObject *parent, QSqlDatabase database)
|
|
: QSqlRelationalTableModel(parent, database) {}
|
|
|
|
bool BaseSqlTableModel::refreshAll() {
|
|
beginResetModel();
|
|
bool result = select();
|
|
endResetModel();
|
|
|
|
result ? qInfo() << "Model of table with database name" << tableName()
|
|
<< "was refreshed successfully"
|
|
: qWarning() << "Failed to refresh model: Database name of table:"
|
|
<< tableName() << "Error:" << lastError().text();
|
|
return result;
|
|
}
|
|
|
|
QVariant BaseSqlTableModel::data(const QModelIndex &index, int role) const {
|
|
// if (role != Qt::DisplayRole) {
|
|
return QSqlRelationalTableModel::data(index, role);
|
|
// }
|
|
//
|
|
// QVariant value = QSqlRelationalTableModel::data(index, role);
|
|
//
|
|
// QDateTime datetime = QDateTime::fromString(value.toString(), Qt::ISODate);
|
|
//
|
|
// if (!datetime.isValid()) {
|
|
// return value;
|
|
// }
|
|
//
|
|
// QLocale locale;
|
|
// QString formattedDateTime = locale.toString(datetime, QLocale::LongFormat);
|
|
//
|
|
// formattedDateTime[0] = formattedDateTime[0].toUpper();
|
|
//
|
|
// return formattedDateTime;
|
|
}
|
|
|
|
void BaseSqlTableModel::setTable(const QString &databaseTableName) {
|
|
tableInfo_.setDatabaseTableName(databaseTableName);
|
|
QSqlRelationalTableModel::setTable(databaseTableName);
|
|
}
|
|
|
|
void BaseSqlTableModel::resetFilter() {
|
|
qInfo().noquote() << createUpdateFilterMessage("");
|
|
setFilter("");
|
|
}
|
|
|
|
void BaseSqlTableModel::setMultiColumnFilter(const QString &filter) {
|
|
if (filter.isEmpty()) {
|
|
resetFilter();
|
|
return;
|
|
}
|
|
|
|
const QString filterQuery = createMultiColumnFilter(filter);
|
|
|
|
qInfo().noquote() << createUpdateFilterMessage(filter);
|
|
|
|
setFilter(filterQuery);
|
|
}
|
|
|
|
QString
|
|
BaseSqlTableModel::createMultiColumnFilter(const QString &filter) const {
|
|
|
|
QStringList conditions;
|
|
for (const QString &column : columnNames()) {
|
|
conditions.append(QString("%1 LIKE '%%2%'").arg(column).arg(filter));
|
|
}
|
|
|
|
return conditions.join(" OR ");
|
|
}
|
|
|
|
QString
|
|
BaseSqlTableModel::createUpdateFilterMessage(const QString &filter) const {
|
|
QString classInfoMessage =
|
|
QString("Model manager class name: %1").arg(metaObject()->className());
|
|
|
|
QString tableInfoMessage =
|
|
QString("Database table name: %1").arg(tableName());
|
|
|
|
QString filterInfoMessage = filter.isEmpty()
|
|
? "The filter was reset"
|
|
: QString("Filter: \"%1\"").arg(filter);
|
|
|
|
QString message = QString("The model was updated: %1: %2: %3")
|
|
.arg(classInfoMessage)
|
|
.arg(tableInfoMessage)
|
|
.arg(filterInfoMessage);
|
|
|
|
return message;
|
|
}
|