2018-12-15 15:18:19 +01:00
|
|
|
|
#include "SelectionEditorFactory.h"
|
2018-12-16 10:17:59 +01:00
|
|
|
|
#include "model/TypeSelectionItemModel.h"
|
2018-12-15 15:18:19 +01:00
|
|
|
|
#include "AbstractModelFactory.h"
|
|
|
|
|
|
#include <QComboBox>
|
|
|
|
|
|
|
|
|
|
|
|
SelectionEditorFactory::SelectionEditorFactory(QObject *parent, AbstractModelFactory *model_factory, int key_column, int value_column)
|
|
|
|
|
|
: AbstractEditorFactory(parent)
|
|
|
|
|
|
, m_modelFactory(model_factory)
|
|
|
|
|
|
, m_keyColumn(key_column)
|
|
|
|
|
|
, m_valueColumn(value_column)
|
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
|
|
QWidget *SelectionEditorFactory::createEditor (QWidget *parent, const QStyleOptionViewItem &,
|
|
|
|
|
|
const QModelIndex &) const
|
|
|
|
|
|
{
|
|
|
|
|
|
QWidget *w = nullptr;
|
|
|
|
|
|
|
|
|
|
|
|
QComboBox *cmbbx = new QComboBox(parent);
|
|
|
|
|
|
cmbbx->setMaxVisibleItems(32);
|
|
|
|
|
|
auto model = m_modelFactory->createModel(cmbbx);
|
|
|
|
|
|
cmbbx->setModel(model);
|
|
|
|
|
|
cmbbx->setModelColumn(m_valueColumn);
|
|
|
|
|
|
w = cmbbx;
|
|
|
|
|
|
|
|
|
|
|
|
return w;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SelectionEditorFactory::setEditorData(QWidget *editor, const QModelIndex &index) const
|
|
|
|
|
|
{
|
|
|
|
|
|
QComboBox *cmbbx = dynamic_cast<QComboBox*>(editor);
|
|
|
|
|
|
if (cmbbx) {
|
2018-12-16 09:39:43 +01:00
|
|
|
|
auto data = index.data(Qt::EditRole);
|
2018-12-15 20:27:40 +01:00
|
|
|
|
|
|
|
|
|
|
auto list_model = cmbbx->model();
|
|
|
|
|
|
QModelIndexList indexes = list_model->match(
|
|
|
|
|
|
list_model->index(0, m_keyColumn), Qt::DisplayRole, data, 1, Qt::MatchFlags( Qt::MatchExactly ));
|
|
|
|
|
|
if (!indexes.empty()) {
|
|
|
|
|
|
cmbbx->setCurrentIndex(indexes.at(0).row());
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
cmbbx->setCurrentIndex(-1);
|
2018-12-15 15:18:19 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SelectionEditorFactory::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
|
|
|
|
|
|
{
|
|
|
|
|
|
QComboBox *cmbbx = dynamic_cast<QComboBox*>(editor);
|
|
|
|
|
|
if (cmbbx) {
|
|
|
|
|
|
auto data = index.data();
|
|
|
|
|
|
if (data.canConvert<QString>()) {
|
2018-12-15 20:27:40 +01:00
|
|
|
|
auto list_model = cmbbx->model();
|
|
|
|
|
|
QVariant d = list_model->data(
|
|
|
|
|
|
list_model->index(cmbbx->currentIndex(), m_keyColumn));
|
2018-12-15 15:18:19 +01:00
|
|
|
|
model->setData(index, d);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|