EditColumnTableModel, return typename for displayrole for type column and oid for edit value.
This commit is contained in:
parent
44358d198a
commit
387c664284
3 changed files with 22 additions and 8 deletions
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue