Added CollationModel + factory for editing and added to EditTableWidget
This commit is contained in:
parent
f0c1035378
commit
e75b0f1a71
7 changed files with 107 additions and 19 deletions
|
|
@ -6,6 +6,7 @@
|
|||
#include "OpenDatabase.h"
|
||||
#include "catalog/PgDatabaseCatalog.h"
|
||||
#include "SelectionEditorFactory.h"
|
||||
#include "model/CollationModelFactory.h"
|
||||
#include "model/TypeModelFactory.h"
|
||||
|
||||
EditTableWidget::EditTableWidget(std::shared_ptr<OpenDatabase> database, QWidget *parent)
|
||||
|
|
@ -33,6 +34,12 @@ EditTableWidget::EditTableWidget(std::shared_ptr<OpenDatabase> database, QWidget
|
|||
);
|
||||
table->setItemDelegateForColumn(EditColumnTableModel::TypeCol, type_delegate);
|
||||
|
||||
auto collations = database->catalog()->collations();
|
||||
auto collate_delegate = new PgLabItemDelegate(this);
|
||||
collate_delegate->setEditorFactory(
|
||||
new SelectionEditorFactory(this, new CollationModelFactory(this, collations), 0, 1)
|
||||
);
|
||||
table->setItemDelegateForColumn(EditColumnTableModel::CollateCol, collate_delegate);
|
||||
|
||||
// if (opendb) {
|
||||
// m_typeDelegate.setTypeSelectionModel(opendb->typeSelectionModel());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
#include "SelectionEditorFactory.h"
|
||||
#include "model/TypeSelectionItemModel.h"
|
||||
#include "AbstractModelFactory.h"
|
||||
#include <QComboBox>
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -78,7 +78,9 @@ SOURCES += \
|
|||
catalog/PgAm.cpp \
|
||||
model/TypeModelFactory.cpp \
|
||||
model/TypeSelectionItemModel.cpp \
|
||||
catalog/PgAmContainer.cpp
|
||||
catalog/PgAmContainer.cpp \
|
||||
model/CollationModel.cpp \
|
||||
model/CollationModelFactory.cpp
|
||||
|
||||
HEADERS += \
|
||||
Pglablib.h \
|
||||
|
|
@ -141,7 +143,9 @@ HEADERS += \
|
|||
model/TypeSelectionItemModel.h \
|
||||
model/TypeModelFactory.h \
|
||||
catalog/PgAm.h \
|
||||
catalog/PgAmContainer.h
|
||||
catalog/PgAmContainer.h \
|
||||
model/CollationModel.h \
|
||||
model/CollationModelFactory.h
|
||||
|
||||
unix {
|
||||
target.path = /usr/lib
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue