diff --git a/pglab/BaseTableModel.cpp b/pglab/BaseTableModel.cpp index de5e077..5d1ceae 100644 --- a/pglab/BaseTableModel.cpp +++ b/pglab/BaseTableModel.cpp @@ -4,10 +4,6 @@ using namespace Pgsql; -BaseTableModel::BaseTableModel(QObject *parent) - : QAbstractTableModel(parent) -{} - QVariant BaseTableModel::data(const QModelIndex &index, int role) const { QVariant v; diff --git a/pglab/BaseTableModel.h b/pglab/BaseTableModel.h index c6d6e8e..cd18330 100644 --- a/pglab/BaseTableModel.h +++ b/pglab/BaseTableModel.h @@ -9,7 +9,8 @@ class BaseTableModel : public QAbstractTableModel Q_OBJECT public: - explicit BaseTableModel(QObject *parent); + using QAbstractTableModel::QAbstractTableModel; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; protected: diff --git a/pglab/QueryResultModel.cpp b/pglab/QueryResultModel.cpp index c6449c5..1af75d3 100644 --- a/pglab/QueryResultModel.cpp +++ b/pglab/QueryResultModel.cpp @@ -5,7 +5,7 @@ #include QueryResultModel::QueryResultModel(QObject *parent, std::shared_ptr r) - : QAbstractTableModel(parent) + : BaseTableModel(parent) , result(std::move(r)) {} @@ -22,72 +22,48 @@ int QueryResultModel::columnCount(const QModelIndex &) const return r; } -QVariant QueryResultModel::data(const QModelIndex &index, int role) const +Oid QueryResultModel::getType(int column) const { - using namespace Pgsql; + return result->type(column); +} +QVariant QueryResultModel::getData(const QModelIndex &index) const +{ QVariant r; int rij = index.row(); int col = index.column(); - if (role == Qt::DisplayRole) { - if (result->null(col, rij)) { - r = "null"; - } - else { - Oid o = result->type(col); - QString s(result->val(col, rij)); - switch (o) { - case BOOLOID: - s = (s == "t") ? "TRUE" : "FALSE"; - // intentional fall through - default: - if (s.length() > 256) { - s.truncate(256); - } - r = s; - } - - - } + if (result->null(col, rij)) { + r = "null"; } - else if (role == Qt::TextAlignmentRole) { - r = GetDefaultAlignmentForType(result->type(col)); - } - else if (role == Qt::ForegroundRole) { - if (result->null(col, rij)) { - r = QBrush(Qt::gray); - } - else { - Oid o = result->type(col); - switch (o) { - case INT2OID: - case INT4OID: - case INT8OID: - r = QBrush(Qt::darkBlue); - break; - case FLOAT4OID: - case FLOAT8OID: - r = QBrush(Qt::darkCyan); - break; - case NUMERICOID: - r = QBrush(Qt::darkGreen); - break; - case BOOLOID: - if (strcmp(result->val(col, rij), "t") == 0) { - r = QBrush(Qt::darkGreen); - } - else { - r = QBrush(Qt::darkRed); - } - break; - default: - break; + else { +// Oid o = result->type(col); + QString s(result->val(col, rij)); +// switch (o) { +// case BOOLOID: +// s = (s == "t") ? "TRUE" : "FALSE"; +// // intentional fall through +// default: + if (s.length() > 256) { + s.truncate(256); } - } + r = s; +// } } return r; } +QVariant QueryResultModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::ForegroundRole) { + int rij = index.row(); + int col = index.column(); + if (result->null(col, rij)) { + return QBrush(Qt::gray); + } + } + return BaseTableModel::data(index, role); +} + QVariant QueryResultModel::headerData(int section, Qt::Orientation orientation, int role) const { QVariant r; diff --git a/pglab/QueryResultModel.h b/pglab/QueryResultModel.h index ed8f21a..1481686 100644 --- a/pglab/QueryResultModel.h +++ b/pglab/QueryResultModel.h @@ -1,10 +1,11 @@ #ifndef QUERYRESULTMODEL_H #define QUERYRESULTMODEL_H -#include +//#include +#include "BaseTableModel.h" #include "Pgsql_Connection.h" -class QueryResultModel : public QAbstractTableModel +class QueryResultModel : public BaseTableModel { Q_OBJECT public: @@ -16,6 +17,9 @@ public: virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; // virtual Qt::ItemFlags flags(const QModelIndex &index) const override; +protected: + virtual Oid getType(int column) const override; + virtual QVariant getData(const QModelIndex &index) const override; private: std::shared_ptr result; };