Added CollationModel + factory for editing and added to EditTableWidget

This commit is contained in:
eelke 2018-12-16 11:35:39 +01:00
parent f0c1035378
commit e75b0f1a71
7 changed files with 107 additions and 19 deletions

View file

@ -1,6 +1,45 @@
#include "CollationModel.h"
#include "CollationModel.h"
CollationModel::CollationModel()
#include "catalog/PgCollationContainer.h"
#include <algorithm>
CollationModel::CollationModel(QObject *parent)
: QAbstractListModel(parent)
{
}
int CollationModel::rowCount(const QModelIndex &/*parent*/) const
{
if (m_collations)
return static_cast<int>(m_collations->count());
return 0;
}
int CollationModel::columnCount(const QModelIndex &/*parent*/) const
{
return colCount;
}
QVariant CollationModel::data(const QModelIndex &index, int role) const
{
if (index.isValid()) {
int row = index.row();
int column = index.column();
if (role == Qt::DisplayRole) {
auto elem = m_collations->getByIdx(row);
switch (column) {
case OidCol: return elem.oid();
case NameCol: return elem.objectName();
}
}
}
return QVariant();
}
void CollationModel::setCollationList(std::shared_ptr<const PgCollationContainer> collations)
{
beginResetModel();
m_collations = collations;
endResetModel();
}

View file

@ -1,11 +1,32 @@
#ifndef COLLATIONMODEL_H
#ifndef COLLATIONMODEL_H
#define COLLATIONMODEL_H
#include <QAbstractListModel>
#include <memory>
#include <vector>
class CollationModel
{
class PgCollationContainer;
class CollationModel : public QAbstractListModel {
Q_OBJECT
public:
CollationModel();
enum e_Columns : int {
OidCol,
NameCol, //
colCount
};
explicit CollationModel(QObject *parent = nullptr);
void setCollationList(std::shared_ptr<const PgCollationContainer> collations);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
private:
std::shared_ptr<const PgCollationContainer> m_collations;
};
#endif // COLLATIONMODEL_H
#endif // COLLATIONMODEL_H

View file

@ -1,6 +1,16 @@
#include "CollationModelFactory.h"
#include "CollationModelFactory.h"
#include "CollationModel.h"
CollationModelFactory::CollationModelFactory()
CollationModelFactory::CollationModelFactory(QObject *parent, std::shared_ptr<const PgCollationContainer> collations)
: AbstractModelFactory(parent)
, m_collations(collations)
{}
QAbstractItemModel* CollationModelFactory::createModel(QObject *parent) const
{
auto model = new CollationModel(parent);
model->setCollationList(m_collations);
return model;
}

View file

@ -1,11 +1,19 @@
#ifndef COLLATIONMODELFACTORY_H
#ifndef COLLATIONMODELFACTORY_H
#define COLLATIONMODELFACTORY_H
#include "AbstractModelFactory.h"
class CollationModelFactory
{
class PgCollationContainer;
class CollationModelFactory: public AbstractModelFactory {
Q_OBJECT
public:
CollationModelFactory();
CollationModelFactory(QObject *parent, std::shared_ptr<const PgCollationContainer> collations);
virtual QAbstractItemModel* createModel(QObject *parent = nullptr) const override;
private:
std::shared_ptr<const PgCollationContainer> m_collations;
};
#endif // COLLATIONMODELFACTORY_H
#endif // COLLATIONMODELFACTORY_H