summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-04-15 15:04:35 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-04-15 17:34:44 -0700
commit115ee47bfc0aa8ca2b2bdaca047ccf595bbb7120 (patch)
treec729f128c39fcb71a751b0727ce5bf07a83d2db1
parentdb180bf46e28aea3cc7dad2a695b1e0fa1b20e1e (diff)
downloadsubsurface-115ee47bfc0aa8ca2b2bdaca047ccf595bbb7120.tar.gz
Added the code that will load and populate the Tank Info
Added the code that will load and populate the Tank Info ComboBox that`s used by the user to select the Cylinder description. Code curerntly implements more than the GTK version since the GTK version of it was a plain-list, this one is a table based model that can be used in ListViews ( like we use now in the ComboBox ) but also in TableViews ( if there`s a need in the future to see everything that`s catalogued in the Tank Info struct. ) Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--Makefile2
-rw-r--r--dive.h13
-rw-r--r--equipment.c5
-rw-r--r--qt-ui/addcylinderdialog.cpp4
-rw-r--r--qt-ui/addcylinderdialog.h3
-rw-r--r--qt-ui/models.cpp103
-rw-r--r--qt-ui/models.h20
7 files changed, 143 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index d64be2edf..5984d0123 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/dive.h b/dive.h
index 734aa2269..c276fe6de 100644
--- a/dive.h
+++ b/dive.h
@@ -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: