EditColumnTableModel, return typename for displayrole for type column and oid for edit value.

This commit is contained in:
eelke 2018-12-16 09:35:57 +01:00
parent 44358d198a
commit 387c664284
3 changed files with 22 additions and 8 deletions

View file

@ -1,7 +1,10 @@
#include "EditColumnTableModel.h" #include "EditColumnTableModel.h"
#include "PgDatabaseCatalog.h"
#include "PgTypeContainer.h"
EditColumnTableModel::EditColumnTableModel(QObject *parent) EditColumnTableModel::EditColumnTableModel(std::shared_ptr<PgDatabaseCatalog> catalog, QObject *parent)
: QAbstractTableModel(parent) : QAbstractTableModel(parent)
, m_catalog(catalog)
{ {
m_data.push_back({}); m_data.push_back({});
} }
@ -44,7 +47,16 @@ QVariant EditColumnTableModel::data(const QModelIndex &index, int role) const
if (role == Qt::EditRole || role == Qt::DisplayRole) { if (role == Qt::EditRole || role == Qt::DisplayRole) {
switch (index.column()) { switch (index.column()) {
case NameCol: return d.name; case NameCol: return d.name;
case TypeCol: return d.type; case TypeCol:
if (role == Qt::DisplayRole) {
if (d.type != InvalidOid) {
auto&& t = m_catalog->types()->getByKey(d.type);
return t->objectName();
}
return QString();
}
else
return d.type;
case LengthCol: return d.length; case LengthCol: return d.length;
case ScaleCol: return d.scale; case ScaleCol: return d.scale;
case CollateCol: return d.collate; case CollateCol: return d.collate;
@ -70,14 +82,14 @@ bool EditColumnTableModel::setData(const QModelIndex &index, const QVariant &val
{ {
size_t rij = static_cast<size_t>(index.row()); size_t rij = static_cast<size_t>(index.row());
auto && d = m_data.at(rij); auto && d = m_data.at(rij);
if (role == Qt::EditRole || role == Qt::DisplayRole) { if (role == Qt::EditRole) {
const int col = index.column(); const int col = index.column();
if (col == NameCol) { if (col == NameCol) {
d.name = value.toString(); d.name = value.toString();
return true; return true;
} }
else if (col == TypeCol) { else if (col == TypeCol) {
d.type = value.toInt(); d.type = value.toUInt();
return true; return true;
} }
else if (col == LengthCol) { else if (col == LengthCol) {
@ -89,7 +101,7 @@ bool EditColumnTableModel::setData(const QModelIndex &index, const QVariant &val
return true; return true;
} }
else if (col == CollateCol) { else if (col == CollateCol) {
d.collate = value.toInt(); d.collate = value.toUInt();
return true; return true;
} }
else if (col == NotNullCol) { else if (col == NotNullCol) {

View file

@ -3,7 +3,9 @@
#include <QAbstractTableModel> #include <QAbstractTableModel>
#include "Pgsql_oids.h" #include "Pgsql_oids.h"
#include <memory>
class PgDatabaseCatalog;
class Column { class Column {
public: public:
@ -38,8 +40,7 @@ public:
colCount colCount
}; };
EditColumnTableModel(QObject *parent = nullptr); EditColumnTableModel(std::shared_ptr<PgDatabaseCatalog> catalog, QObject *parent = nullptr);
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
@ -57,6 +58,7 @@ public slots:
private: private:
using ColumnList = std::vector<Column>; using ColumnList = std::vector<Column>;
std::shared_ptr<PgDatabaseCatalog> m_catalog;
ColumnList m_data; ///< Better call it data as columns would be confusing ColumnList m_data; ///< Better call it data as columns would be confusing
}; };

View file

@ -22,7 +22,7 @@ EditTableWidget::EditTableWidget(std::shared_ptr<OpenDatabase> database, QWidget
mainLayout->addWidget(table); mainLayout->addWidget(table);
setLayout(mainLayout); setLayout(mainLayout);
auto model = new EditColumnTableModel(this); auto model = new EditColumnTableModel(database->catalog(), this);
table->setModel(model); table->setModel(model);
table->setItemDelegate(new PgLabItemDelegate(this)); table->setItemDelegate(new PgLabItemDelegate(this));