Added capability to create editors from an editor factory to PgLabItemDelegate
This commit is contained in:
parent
62c6ad5bfb
commit
f8d61b61f4
3 changed files with 66 additions and 0 deletions
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
25
pglablib/AbstractEditorFactory.h
Normal file
25
pglablib/AbstractEditorFactory.h
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue