Create a delegate for gas type columns

This creates a delegate for the type column to choose the type value for
gases that is less confusing then the raw value.

Signed-off-by: Anton Lundin <glance@acc.umu.se>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Anton Lundin 2014-10-27 22:12:45 +01:00 committed by Dirk Hohndel
parent 49401eec0b
commit 0e3a9328bc
2 changed files with 62 additions and 0 deletions

View file

@ -28,6 +28,42 @@ struct mydescriptor {
unsigned int model;
};
GasTypeComboBoxItemDelegate::GasTypeComboBoxItemDelegate(QObject *parent, computer_type type) : QStyledItemDelegate(parent), type(type) { }
GasTypeComboBoxItemDelegate::~GasTypeComboBoxItemDelegate() { }
QWidget* GasTypeComboBoxItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
// Create the combobox and populate it
QComboBox *cb = new QComboBox(parent);
cb->addItem(QString("Disabled"));
if (type == OSTC3) {
cb->addItem(QString("Fist"));
cb->addItem(QString("Travel"));
cb->addItem(QString("Deco"));
} else if (type == OSTC) {
cb->addItem(QString("Active"));
cb->addItem(QString("Fist"));
}
return cb;
}
void GasTypeComboBoxItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
if(QComboBox *cb = qobject_cast<QComboBox *>(editor))
cb->setCurrentIndex(index.data(Qt::EditRole).toInt());
else
QStyledItemDelegate::setEditorData(editor, index);
}
void GasTypeComboBoxItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
if(QComboBox *cb = qobject_cast<QComboBox *>(editor))
model->setData(index, cb->currentIndex(), Qt::EditRole);
else
QStyledItemDelegate::setModelData(editor, model, index);
}
ConfigureDiveComputerDialog::ConfigureDiveComputerDialog(QWidget *parent) :
QDialog(parent),
config(0),
@ -53,6 +89,11 @@ ConfigureDiveComputerDialog::ConfigureDiveComputerDialog(QWidget *parent) :
ui.DiveComputerList->setCurrentRow(0);
on_DiveComputerList_currentRowChanged(0);
ui.ostc3GasTable->setItemDelegateForColumn(3, new GasTypeComboBoxItemDelegate(this, GasTypeComboBoxItemDelegate::OSTC3));
ui.ostc3DilTable->setItemDelegateForColumn(3, new GasTypeComboBoxItemDelegate(this, GasTypeComboBoxItemDelegate::OSTC3));
ui.ostcGasTable->setItemDelegateForColumn(3, new GasTypeComboBoxItemDelegate(this, GasTypeComboBoxItemDelegate::OSTC));
ui.ostcDilTable->setItemDelegateForColumn(3, new GasTypeComboBoxItemDelegate(this, GasTypeComboBoxItemDelegate::OSTC));
QSettings settings;
settings.beginGroup("ConfigureDiveComputerDialog");
settings.beginGroup("ostc3GasTable");

View file

@ -6,6 +6,27 @@
#include "ui_configuredivecomputerdialog.h"
#include "../libdivecomputer.h"
#include "configuredivecomputer.h"
#include <QStyledItemDelegate>
class GasTypeComboBoxItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
enum computer_type {
OSTC3,
OSTC,
};
GasTypeComboBoxItemDelegate(QObject *parent = 0, computer_type type = OSTC3);
~GasTypeComboBoxItemDelegate();
virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const;
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
private:
computer_type type;
};
class ConfigureDiveComputerDialog : public QDialog
{