forked from qt-creator/qt-creator
79 lines
2.7 KiB
C++
79 lines
2.7 KiB
C++
|
|
/****************************************************************************
|
||
|
|
**
|
||
|
|
** Copyright (C) 2016 Alexander Drozdov.
|
||
|
|
** Contact: adrozdoff@gmail.com
|
||
|
|
**
|
||
|
|
** This file is part of CMakeProjectManager2 plugin.
|
||
|
|
**
|
||
|
|
** GNU Lesser General Public License Usage
|
||
|
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||
|
|
** General Public License version 2.1 or version 3 as published by the Free
|
||
|
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||
|
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||
|
|
** following information to ensure the GNU Lesser General Public License
|
||
|
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||
|
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||
|
|
**
|
||
|
|
****************************************************************************/
|
||
|
|
|
||
|
|
#include "configmodelitemdelegate.h"
|
||
|
|
#include "configmodel.h"
|
||
|
|
|
||
|
|
#include <QComboBox>
|
||
|
|
|
||
|
|
namespace CMakeProjectManager {
|
||
|
|
|
||
|
|
ConfigModelItemDelegate::ConfigModelItemDelegate(QObject* parent)
|
||
|
|
: QStyledItemDelegate(parent)
|
||
|
|
{ }
|
||
|
|
|
||
|
|
ConfigModelItemDelegate::~ConfigModelItemDelegate()
|
||
|
|
{ }
|
||
|
|
|
||
|
|
QWidget* ConfigModelItemDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||
|
|
{
|
||
|
|
// ComboBox ony in column 2
|
||
|
|
if (index.column() != 1)
|
||
|
|
return QStyledItemDelegate::createEditor(parent, option, index);
|
||
|
|
|
||
|
|
auto model = index.model();
|
||
|
|
auto values = model->data(index, ConfigModel::ItemValuesRole).toStringList();
|
||
|
|
if (values.isEmpty())
|
||
|
|
return QStyledItemDelegate::createEditor(parent, option, index);
|
||
|
|
|
||
|
|
// Create the combobox and populate it
|
||
|
|
auto cb = new QComboBox(parent);
|
||
|
|
cb->addItems(values);
|
||
|
|
cb->setEditable(true);
|
||
|
|
|
||
|
|
return cb;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ConfigModelItemDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
||
|
|
{
|
||
|
|
if (QComboBox* cb = qobject_cast<QComboBox*>(editor)) {
|
||
|
|
// get the index of the text in the combobox that matches the current value of the itenm
|
||
|
|
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
|
||
|
|
cb->setEditText(currentText);
|
||
|
|
} else {
|
||
|
|
QStyledItemDelegate::setEditorData(editor, index);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void ConfigModelItemDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
|
||
|
|
{
|
||
|
|
if (QComboBox* cb = qobject_cast<QComboBox*>(editor))
|
||
|
|
// save the current text of the combo box as the current value of the item
|
||
|
|
model->setData(index, cb->currentText(), Qt::EditRole);
|
||
|
|
else
|
||
|
|
QStyledItemDelegate::setModelData(editor, model, index);
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace CMakeProjectManager
|
||
|
|
|