mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Add weightsystem delegate to enable editing of weightsystem
This is very much analogous to the way cylinders are implemented. That means that just like with cylinders, if the user enters a new type and hits 'tab' before hitting 'enter', Subsurface will crash. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
ecbcd4db47
commit
01a3bd2cc6
5 changed files with 218 additions and 9 deletions
|
@ -92,3 +92,43 @@ void TankInfoDelegate::setModelData(QWidget* editor, QAbstractItemModel* model,
|
|||
TankInfoDelegate::TankInfoDelegate(QObject* parent): QStyledItemDelegate(parent)
|
||||
{
|
||||
}
|
||||
|
||||
QWidget* WSInfoDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||
{
|
||||
QComboBox *comboDelegate = new QComboBox(parent);
|
||||
WSInfoModel *model = WSInfoModel::instance();
|
||||
comboDelegate->setModel(model);
|
||||
comboDelegate->setEditable(true);
|
||||
comboDelegate->setAutoCompletion(true);
|
||||
comboDelegate->setAutoCompletionCaseSensitivity(Qt::CaseInsensitive);
|
||||
comboDelegate->completer()->setCompletionMode(QCompleter::PopupCompletion);
|
||||
return comboDelegate;
|
||||
}
|
||||
|
||||
void WSInfoDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
||||
{
|
||||
QComboBox *c = qobject_cast<QComboBox*>(editor);
|
||||
QString data = index.model()->data(index, Qt::DisplayRole).toString();
|
||||
int i = c->findText(data);
|
||||
if (i != -1)
|
||||
c->setCurrentIndex(i);
|
||||
else
|
||||
c->setEditText(data);
|
||||
}
|
||||
|
||||
void WSInfoDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
|
||||
{
|
||||
QComboBox *c = static_cast<QComboBox*>(editor);
|
||||
WeightModel *mymodel = qobject_cast<WeightModel *>(model);
|
||||
WSInfoModel *ws = WSInfoModel::instance();
|
||||
QModelIndex wsIndex = ws->match(ws->index(0,0), Qt::DisplayRole, c->currentText()).first();
|
||||
|
||||
int grams = ws->data(ws->index(wsIndex.row(), WSInfoModel::GR)).toInt();
|
||||
|
||||
mymodel->setData(index, c->currentText(), Qt::EditRole);
|
||||
mymodel->passInData(model->index(index.row(), WeightModel::WEIGHT), grams);
|
||||
}
|
||||
|
||||
WSInfoDelegate::WSInfoDelegate(QObject* parent): QStyledItemDelegate(parent)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue