Added capability to create editors from an editor factory to PgLabItemDelegate

This commit is contained in:
eelke 2018-12-15 12:11:23 +01:00
parent 62c6ad5bfb
commit f8d61b61f4
3 changed files with 66 additions and 0 deletions

View file

@ -4,6 +4,7 @@
#include "Pgsql_oids.h" #include "Pgsql_oids.h"
#include "ResultTableModelUtil.h" #include "ResultTableModelUtil.h"
#include "CustomDataRole.h" #include "CustomDataRole.h"
#include "AbstractEditorFactory.h"
PgLabItemDelegate::PgLabItemDelegate(QObject *parent) PgLabItemDelegate::PgLabItemDelegate(QObject *parent)
: QStyledItemDelegate(parent) : QStyledItemDelegate(parent)
@ -128,3 +129,32 @@ void PgLabItemDelegate::paint(QPainter *painter,
QStyle *style = widget ? widget->style() : QApplication::style(); QStyle *style = widget ? widget->style() : QApplication::style();
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
} }
QWidget *PgLabItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (m_editorFactory)
return m_editorFactory->createEditor(parent, option, index);
return nullptr;
}
void PgLabItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
if (m_editorFactory)
m_editorFactory->setEditorData(editor, index);
}
void PgLabItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
if (m_editorFactory)
m_editorFactory->setModelData(editor, model, index);
}
AbstractEditorFactory* PgLabItemDelegate::editorFactory()
{
return m_editorFactory;
}
void PgLabItemDelegate::setEditorFactory(AbstractEditorFactory *editor_factory)
{
m_editorFactory = editor_factory;
}

View file

@ -3,6 +3,8 @@
#include <QStyledItemDelegate> #include <QStyledItemDelegate>
class AbstractEditorFactory;
/** Delegate for rendering SQL data types in tableviews /** Delegate for rendering SQL data types in tableviews
* *
* This delegate removes the need for the model to provide formatting information * This delegate removes the need for the model to provide formatting information
@ -16,9 +18,18 @@ public:
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
AbstractEditorFactory* editorFactory();
void setEditorFactory(AbstractEditorFactory *editor_factory);
protected: protected:
virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override; virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override;
private:
AbstractEditorFactory *m_editorFactory = nullptr;
}; };
#endif // PGLABITEMDELEGATE_H #endif // PGLABITEMDELEGATE_H

View file

@ -0,0 +1,25 @@
#ifndef ABSTRACTEDITORFACTORY_H
#define ABSTRACTEDITORFACTORY_H
#include <QObject>
class QWidget;
class QStyleOptionViewItem;
class QModelIndex;
class QAbstractItemModel;
/// Base class for factory classes that create item editors used in views.
///
/// Specifically the PgLabItemDelegate supports the use of EditorFactories.
class AbstractEditorFactory: public QObject {
Q_OBJECT
public:
using QObject::QObject;
virtual QWidget *createEditor (QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const = 0;
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const = 0;
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const = 0;
};
#endif // ABSTRACTEDITORFACTORY_H