diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | dive.h | 13 | ||||
-rw-r--r-- | equipment.c | 5 | ||||
-rw-r--r-- | qt-ui/addcylinderdialog.cpp | 4 | ||||
-rw-r--r-- | qt-ui/addcylinderdialog.h | 3 | ||||
-rw-r--r-- | qt-ui/models.cpp | 103 | ||||
-rw-r--r-- | qt-ui/models.h | 20 |
7 files changed, 143 insertions, 7 deletions
@@ -149,7 +149,7 @@ ifneq (,$(filter $(UNAME),linux kfreebsd gnu)) GCONF2CFLAGS = $(shell $(PKGCONFIG) --cflags gconf-2.0) OSSUPPORT = linux OSSUPPORT_CFLAGS = $(GTKCFLAGS) $(GCONF2CFLAGS) - ifneq ($(findstring reduce_relocations, $(shell $(PKGCONFIG) --variable qt_config $(QT_CORE))),) + ifneq ($(filter reduce_relocations, $(shell $(PKGCONFIG) --variable qt_config $(QT_CORE))), ) CXXFLAGS += -fPIE endif else ifeq ($(UNAME), darwin) @@ -697,6 +697,19 @@ void get_gas_string(int o2, int he, char *buf, int len); struct event *get_next_event(struct event *event, char *name); + +/* this struct holds the information that + * describes the cylinders of air. + * it is a global variable initialized in equipment.c + * used to fill the combobox in the add/edit cylinder + * dialog + */ + +struct tank_info { + const char *name; + int cuft, ml, psi, bar; +}; + #ifdef DEBUGFILE extern char *debugfilename; extern FILE *debugfile; diff --git a/equipment.c b/equipment.c index a1d156f94..d126b4327 100644 --- a/equipment.c +++ b/equipment.c @@ -790,10 +790,7 @@ static void record_weightsystem_changes(weightsystem_t *ws, struct ws_widget *we * we should pick up any other names from the dive * logs directly. */ -static struct tank_info { - const char *name; - int cuft, ml, psi, bar; -} tank_info[100] = { +struct tank_info tank_info[100] = { /* Need an empty entry for the no-cylinder case */ { "", }, diff --git a/qt-ui/addcylinderdialog.cpp b/qt-ui/addcylinderdialog.cpp index 043f29907..5b91617ed 100644 --- a/qt-ui/addcylinderdialog.cpp +++ b/qt-ui/addcylinderdialog.cpp @@ -9,11 +9,13 @@ #include <QComboBox> #include <QDoubleSpinBox> #include "../conversions.h" - +#include "models.h" AddCylinderDialog::AddCylinderDialog(QWidget *parent) : ui(new Ui::AddCylinderDialog()) +, tankInfoModel(new TankInfoModel()) { ui->setupUi(this); + ui->cylinderType->setModel(tankInfoModel); } void AddCylinderDialog::setCylinder(cylinder_t *cylinder) diff --git a/qt-ui/addcylinderdialog.h b/qt-ui/addcylinderdialog.h index 652f7b362..fc68faa72 100644 --- a/qt-ui/addcylinderdialog.h +++ b/qt-ui/addcylinderdialog.h @@ -14,6 +14,8 @@ namespace Ui{ class AddCylinderDialog; } +class TankInfoModel; + class AddCylinderDialog : public QDialog{ Q_OBJECT public: @@ -24,6 +26,7 @@ public: private: Ui::AddCylinderDialog *ui; cylinder_t *currentCylinder; + TankInfoModel *tankInfoModel; }; diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 64fa6bac3..d1b8dc0a0 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -7,6 +7,8 @@ #include "models.h" #include "../dive.h" +extern struct tank_info tank_info[100]; + CylindersModel::CylindersModel(QObject* parent): QAbstractTableModel(parent) { } @@ -161,7 +163,7 @@ QVariant WeightModel::headerData(int section, Qt::Orientation orientation, int r return ret; } - switch(section){ + switch(section) { case TYPE: ret = tr("Type"); break; @@ -179,3 +181,102 @@ void WeightModel::add(weight_t* weight) void WeightModel::update() { } + +void TankInfoModel::add(const QString& description) +{ + // When the user `creates` a new one on the combobox. + // for now, empty till dirk cleans the GTK code. +} + +void TankInfoModel::clear() +{ +} + +int TankInfoModel::columnCount(const QModelIndex& parent) const +{ + return 3; +} + +QVariant TankInfoModel::data(const QModelIndex& index, int role) const +{ + QVariant ret; + if (!index.isValid()) { + return ret; + } + struct tank_info *info = &tank_info[index.row()]; + + int ml = info->ml; + + int bar = ((info->psi) ? psi_to_bar(info->psi) : info->bar) * 1000 + 0.5; + + if (info->cuft) { + double airvolume = cuft_to_l(info->cuft) * 1000.0; + ml = airvolume / bar_to_atm(bar) + 0.5; + } + if (role == Qt::DisplayRole) { + switch(index.column()) { + case BAR: ret = bar; + break; + case ML: ret = ml; + break; + case DESCRIPTION: + ret = QString(info->name); + break; + } + } + return ret; +} + +QVariant TankInfoModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + QVariant ret; + + if (orientation != Qt::Horizontal) + return ret; + + if (role == Qt::DisplayRole) { + switch(section) { + case BAR: + ret = tr("Bar"); + break; + case ML: + ret = tr("Ml"); + break; + case DESCRIPTION: + ret = tr("Description"); + break; + } + } + return ret; +} + +int TankInfoModel::rowCount(const QModelIndex& parent) const +{ + return rows+1; +} + +TankInfoModel::TankInfoModel() : QAbstractTableModel(), rows(-1) +{ + struct tank_info *info = tank_info; + for (info = tank_info ; info->name; info++, rows++); + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} + +void TankInfoModel::update() +{ + if(rows > -1) { + beginRemoveRows(QModelIndex(), 0, rows); + endRemoveRows(); + } + struct tank_info *info = tank_info; + for (info = tank_info ; info->name; info++, rows++); + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} diff --git a/qt-ui/models.h b/qt-ui/models.h index 697096f92..8d86102cb 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -10,6 +10,26 @@ #include <QAbstractTableModel> #include "../dive.h" +/* Encapsulates the tank_info global variable + * to show on Qt`s Model View System.*/ +class TankInfoModel : public QAbstractTableModel { +Q_OBJECT +public: + enum { DESCRIPTION, ML, BAR}; + TankInfoModel(); + + /*reimp*/ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + /*reimp*/ int columnCount(const QModelIndex& parent = QModelIndex()) const; + /*reimp*/ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + /*reimp*/ int rowCount(const QModelIndex& parent = QModelIndex()) const; + + void add(const QString& description); + void clear(); + void update(); +private: + int rows; +}; + class CylindersModel : public QAbstractTableModel { Q_OBJECT public: |