mirror-chatterino2/src/widgets/helper/ComboBoxItemDelegate.cpp

61 lines
1.9 KiB
C++
Raw Normal View History

2018-06-26 14:09:39 +02:00
#include "ComboBoxItemDelegate.hpp"
2018-04-27 01:11:09 +02:00
#include <QComboBox>
namespace chatterino {
ComboBoxItemDelegate::ComboBoxItemDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
ComboBoxItemDelegate::~ComboBoxItemDelegate()
{
}
2018-08-06 21:17:03 +02:00
QWidget *ComboBoxItemDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
2018-04-27 01:11:09 +02:00
const QModelIndex &index) const
{
QVariant data = index.data(Qt::UserRole + 1);
if (data.type() != QVariant::StringList) {
return QStyledItemDelegate::createEditor(parent, option, index);
}
QComboBox *combo = new QComboBox(parent);
combo->addItems(data.toStringList());
return combo;
}
2018-08-06 21:17:03 +02:00
void ComboBoxItemDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
2018-04-27 01:11:09 +02:00
{
if (QComboBox *cb = qobject_cast<QComboBox *>(editor)) {
2018-08-06 21:17:03 +02:00
// get the index of the text in the combobox that matches the current
// value of the itenm
2018-04-27 01:11:09 +02:00
QString currentText = index.data(Qt::EditRole).toString();
int cbIndex = cb->findText(currentText);
// if it is valid, adjust the combobox
if (cbIndex >= 0) {
cb->setCurrentIndex(cbIndex);
}
} else {
QStyledItemDelegate::setEditorData(editor, index);
}
}
2018-08-06 21:17:03 +02:00
void ComboBoxItemDelegate::setModelData(QWidget *editor,
QAbstractItemModel *model,
2018-04-27 01:11:09 +02:00
const QModelIndex &index) const
{
if (QComboBox *cb = qobject_cast<QComboBox *>(editor))
2018-08-06 21:17:03 +02:00
// save the current text of the combo box as the current value of the
// item
2018-04-27 01:11:09 +02:00
model->setData(index, cb->currentText(), Qt::EditRole);
else
QStyledItemDelegate::setModelData(editor, model, index);
}
} // namespace chatterino