From 387c664284d6931b9b1919746cba37d945a15103 Mon Sep 17 00:00:00 2001 From: eelke Date: Sun, 16 Dec 2018 09:35:57 +0100 Subject: [PATCH] EditColumnTableModel, return typename for displayrole for type column and oid for edit value. --- pglab/EditColumnTableModel.cpp | 22 +++++++++++++++++----- pglab/EditColumnTableModel.h | 6 ++++-- pglab/EditTableWidget.cpp | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/pglab/EditColumnTableModel.cpp b/pglab/EditColumnTableModel.cpp index 58c512a..0a04645 100644 --- a/pglab/EditColumnTableModel.cpp +++ b/pglab/EditColumnTableModel.cpp @@ -1,7 +1,10 @@ #include "EditColumnTableModel.h" +#include "PgDatabaseCatalog.h" +#include "PgTypeContainer.h" -EditColumnTableModel::EditColumnTableModel(QObject *parent) +EditColumnTableModel::EditColumnTableModel(std::shared_ptr catalog, QObject *parent) : QAbstractTableModel(parent) + , m_catalog(catalog) { m_data.push_back({}); } @@ -44,7 +47,16 @@ QVariant EditColumnTableModel::data(const QModelIndex &index, int role) const if (role == Qt::EditRole || role == Qt::DisplayRole) { switch (index.column()) { 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 ScaleCol: return d.scale; case CollateCol: return d.collate; @@ -70,14 +82,14 @@ bool EditColumnTableModel::setData(const QModelIndex &index, const QVariant &val { size_t rij = static_cast(index.row()); auto && d = m_data.at(rij); - if (role == Qt::EditRole || role == Qt::DisplayRole) { + if (role == Qt::EditRole) { const int col = index.column(); if (col == NameCol) { d.name = value.toString(); return true; } else if (col == TypeCol) { - d.type = value.toInt(); + d.type = value.toUInt(); return true; } else if (col == LengthCol) { @@ -89,7 +101,7 @@ bool EditColumnTableModel::setData(const QModelIndex &index, const QVariant &val return true; } else if (col == CollateCol) { - d.collate = value.toInt(); + d.collate = value.toUInt(); return true; } else if (col == NotNullCol) { diff --git a/pglab/EditColumnTableModel.h b/pglab/EditColumnTableModel.h index c6abd99..7a32be2 100644 --- a/pglab/EditColumnTableModel.h +++ b/pglab/EditColumnTableModel.h @@ -3,7 +3,9 @@ #include #include "Pgsql_oids.h" +#include +class PgDatabaseCatalog; class Column { public: @@ -38,8 +40,7 @@ public: colCount }; - EditColumnTableModel(QObject *parent = nullptr); - + EditColumnTableModel(std::shared_ptr catalog, QObject *parent = nullptr); virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; @@ -57,6 +58,7 @@ public slots: private: using ColumnList = std::vector; + std::shared_ptr m_catalog; ColumnList m_data; ///< Better call it data as columns would be confusing }; diff --git a/pglab/EditTableWidget.cpp b/pglab/EditTableWidget.cpp index c3a43d2..c582c81 100644 --- a/pglab/EditTableWidget.cpp +++ b/pglab/EditTableWidget.cpp @@ -22,7 +22,7 @@ EditTableWidget::EditTableWidget(std::shared_ptr database, QWidget mainLayout->addWidget(table); setLayout(mainLayout); - auto model = new EditColumnTableModel(this); + auto model = new EditColumnTableModel(database->catalog(), this); table->setModel(model); table->setItemDelegate(new PgLabItemDelegate(this));