pgLab/pglab/DatabasesTableModel.cpp
eelke 9c9e78c54b Improvement to the ServerWindow
- sorting of Roles
- resizeColumns voor zowel databases als roles
- boolean columns now display check mark and cross
2021-03-31 16:06:45 +02:00

176 lines
3.5 KiB
C++

#include "DatabasesTableModel.h"
#include "CustomDataRole.h"
#include "ScopeGuard.h"
#include "catalog/PgDatabaseCatalog.h"
#include "catalog/PgDatabaseContainer.h"
#include "catalog/PgAuthIdContainer.h"
#include "ResultTableModelUtil.h"
using namespace Pgsql;
DatabasesTableModel::DatabasesTableModel(QObject *parent)
: BaseTableModel(parent)
{
}
void DatabasesTableModel::setDatabaseList(std::shared_ptr<const PgDatabaseCatalog> cat)
{
beginResetModel();
SCOPE_EXIT { endResetModel(); };
m_catalog = cat;
m_databases = cat->databases();
}
QVariant DatabasesTableModel::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 DbaCol:
v = tr("Owner");
break;
case EncodingCol:
v = tr("Encoding");
break;
case CollateCol:
v = tr("Collation");
break;
case CTypeCol:
v = tr("CType");
break;
case IsTemplateCol:
v = tr("Is template");
break;
case AllowConnCol:
v = tr("Can connect");
break;
case ConnLimitCol:
v = tr("Conn. limit");
break;
case TablespaceCol:
v = tr("Tablespace");
break;
case CommentCol:
v = tr("Comment");
break;
case SizeCol:
v = tr("Size");
break;
case AclCol:
v = tr("ACL");
break;
}
}
}
return v;
}
int DatabasesTableModel::rowCount(const QModelIndex &) const
{
int result = 0;
if (m_databases) {
result = m_databases->count();
}
return result;
}
int DatabasesTableModel::columnCount(const QModelIndex &) const
{
int result = COL_COUNT;
return result;
}
Oid DatabasesTableModel::getType(int column) const
{
Oid oid;
switch (column) {
case AllowConnCol:
case IsTemplateCol:
oid = Pgsql::bool_oid;
break;
case ConnLimitCol:
oid = Pgsql::int4_oid;
break;
case SizeCol:
oid = Pgsql::int8_oid;
break;
case AclCol:
case CollateCol:
case CTypeCol:
case EncodingCol:
case DbaCol:
case NameCol:
case TablespaceCol:
case CommentCol:
oid = Pgsql::varchar_oid;
break;
default:
oid = InvalidOid;
}
return oid;
}
QVariant DatabasesTableModel::getData(const QModelIndex &index) const
{
QVariant v;
//if (!index.isValid())
if (m_databases) {
const PgDatabase &db = m_databases->getByIdx(index.row());
switch (index.column()) {
case NameCol:
v = db.objectName();
break;
case DbaCol:
v = getRoleDisplayString(*m_catalog, db.dba);
break;
case EncodingCol:
// todo lookup encoding name
v = db.encodingString;
break;
case CollateCol:
v = db.collate;
break;
case CTypeCol:
v = db.ctype;
break;
case IsTemplateCol:
v = db.isTemplate;
break;
case AllowConnCol:
v = db.allowConn;
break;
case ConnLimitCol:
v = db.connLimit;
break;
case TablespaceCol:
// todo lookup tablespace name
v = getTablespaceDisplayString(*m_catalog, db.tablespace);
break;
case CommentCol:
v = db.description;
break;
case SizeCol:
v = db.sizeBytes;
break;
case AclCol:
v = db.aclString();
break;
}
}
return v;
}
QVariant DatabasesTableModel::getDataMeaning(const QModelIndex &index) const
{
if (index.column() == SizeCol)
return static_cast<int>(DataMeaningBytes);
return BaseTableModel::getDataMeaning(index);
}