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 "OpenDatabase.h"
|
||||||
#include "catalog/PgDatabaseCatalog.h"
|
#include "catalog/PgDatabaseCatalog.h"
|
||||||
#include "SelectionEditorFactory.h"
|
#include "SelectionEditorFactory.h"
|
||||||
|
#include "model/CollationModelFactory.h"
|
||||||
#include "model/TypeModelFactory.h"
|
#include "model/TypeModelFactory.h"
|
||||||
|
|
||||||
EditTableWidget::EditTableWidget(std::shared_ptr<OpenDatabase> database, QWidget *parent)
|
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);
|
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) {
|
// if (opendb) {
|
||||||
// m_typeDelegate.setTypeSelectionModel(opendb->typeSelectionModel());
|
// m_typeDelegate.setTypeSelectionModel(opendb->typeSelectionModel());
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
#include "SelectionEditorFactory.h"
|
#include "SelectionEditorFactory.h"
|
||||||
#include "model/TypeSelectionItemModel.h"
|
|
||||||
#include "AbstractModelFactory.h"
|
#include "AbstractModelFactory.h"
|
||||||
#include <QComboBox>
|
#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
|
#define COLLATIONMODEL_H
|
||||||
|
|
||||||
|
#include <QAbstractListModel>
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class CollationModel
|
class PgCollationContainer;
|
||||||
{
|
|
||||||
|
class CollationModel : public QAbstractListModel {
|
||||||
|
Q_OBJECT
|
||||||
public:
|
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
|
#define COLLATIONMODELFACTORY_H
|
||||||
|
|
||||||
|
#include "AbstractModelFactory.h"
|
||||||
|
|
||||||
class CollationModelFactory
|
class PgCollationContainer;
|
||||||
{
|
|
||||||
|
class CollationModelFactory: public AbstractModelFactory {
|
||||||
|
Q_OBJECT
|
||||||
public:
|
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 \
|
catalog/PgAm.cpp \
|
||||||
model/TypeModelFactory.cpp \
|
model/TypeModelFactory.cpp \
|
||||||
model/TypeSelectionItemModel.cpp \
|
model/TypeSelectionItemModel.cpp \
|
||||||
catalog/PgAmContainer.cpp
|
catalog/PgAmContainer.cpp \
|
||||||
|
model/CollationModel.cpp \
|
||||||
|
model/CollationModelFactory.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
Pglablib.h \
|
Pglablib.h \
|
||||||
|
|
@ -141,7 +143,9 @@ HEADERS += \
|
||||||
model/TypeSelectionItemModel.h \
|
model/TypeSelectionItemModel.h \
|
||||||
model/TypeModelFactory.h \
|
model/TypeModelFactory.h \
|
||||||
catalog/PgAm.h \
|
catalog/PgAm.h \
|
||||||
catalog/PgAmContainer.h
|
catalog/PgAmContainer.h \
|
||||||
|
model/CollationModel.h \
|
||||||
|
model/CollationModelFactory.h
|
||||||
|
|
||||||
unix {
|
unix {
|
||||||
target.path = /usr/lib
|
target.path = /usr/lib
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue