#include "TablesTableModel.h" #include "PgDatabaseCatalog.h" #include "PgClass.h" #include "PgClassContainer.h" #include "Pgsql_declare.h" TablesTableModel::TablesTableModel(QObject *parent) : BaseTableModel(parent) { } void TablesTableModel::setCatalog(std::shared_ptr cat) { beginResetModel(); m_catalog = cat; // Later afscheiden naar filter functie auto classes = cat->classes(); // How many? int n = 0; for (const auto &e : *classes) if (e.kind == RelKind::Table) ++n; m_tables.clear(); m_tables.reserve(n); // reserve space for (const auto &e : *classes) { if (e.kind == RelKind::Table) { m_tables.push_back(e); } } endResetModel(); } QVariant TablesTableModel::headerData(int section, Qt::Orientation orientation, int role) const { QVariant v; if (orientation == Qt::Horizontal) { if (role == Qt::DisplayRole) { switch (section) { case NameCol: v = tr("Name"); break; case OwnerCol: v = tr("Owner"); break; case TablespaceCol: v = tr("Tablespace"); break; case OptionsCol: v = tr("Options"); break; case AclCol: v = tr("ACL"); break; } } } return v; } // Basic functionality: int TablesTableModel::rowCount(const QModelIndex &) const { return m_tables.size(); } int TablesTableModel::columnCount(const QModelIndex &) const { return colCount; } Oid TablesTableModel::getType(int column) const { Oid oid; switch (column) { case TablespaceCol: case OwnerCol: case NameCol: case OptionsCol: case AclCol: default: oid = Pgsql::VARCHAROID; } return oid; } QVariant TablesTableModel::getData(const QModelIndex &index) const { QVariant v; const auto &t = m_tables[index.row()]; switch (index.column()) { case NameCol: v = formatTableName(t); break; case OwnerCol: v = getRoleDisplayString(*m_catalog, t.owner); break; case TablespaceCol: v = getTablespaceDisplayString(*m_catalog, t.tablespace); break; case OptionsCol: v = t.options; break; case AclCol: v = t.acl; break; } return v; } QString TablesTableModel::formatTableName(const PgClass &cls) const { const char * format = "%2 (%1)"; QString ns_name = getNamespaceDisplayString(*m_catalog, cls.relnamespace); return QString(format).arg(ns_name).arg(cls.name); }