mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
912e1faaf2
A while ago, we introduced a preference whether O2 should be considered narcotic. We used this when computing best mix or when entering the He content via MND. But we forgot to make the displayed MND depend on this preference. This patch add this. Fixes #2895 Signed-off-by: Robert C. Helling <helling@atdotde.de>
93 lines
2.5 KiB
C++
93 lines
2.5 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef CYLINDERMODEL_H
|
|
#define CYLINDERMODEL_H
|
|
|
|
#include <QSortFilterProxyModel>
|
|
|
|
#include "cleanertablemodel.h"
|
|
#include "core/equipment.h"
|
|
|
|
/* Encapsulation of the Cylinder Model, that presents the
|
|
* Current cylinders that are used on a dive. */
|
|
class CylindersModel : public CleanerTableModel {
|
|
Q_OBJECT
|
|
public:
|
|
enum Column {
|
|
REMOVE,
|
|
TYPE,
|
|
SIZE,
|
|
WORKINGPRESS,
|
|
START,
|
|
END,
|
|
O2,
|
|
HE,
|
|
DEPTH,
|
|
MOD,
|
|
MND,
|
|
USE,
|
|
WORKINGPRESS_INT,
|
|
SIZE_INT,
|
|
COLUMNS
|
|
};
|
|
|
|
enum Roles {
|
|
TEMP_ROLE = Qt::UserRole + 1, // Temporarily set data, but don't store in dive
|
|
COMMIT_ROLE, // Save the temporary data to the dive. Must be set with Column == TYPE.
|
|
REVERT_ROLE // Revert to original data from dive. Must be set with Column == TYPE.
|
|
};
|
|
explicit CylindersModel(bool planner, QObject *parent = 0); // First argument: true if this model is used for the planner
|
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
Qt::ItemFlags flags(const QModelIndex &index) const override;
|
|
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
|
|
|
void add();
|
|
void clear();
|
|
void updateDive(dive *d);
|
|
void updateDecoDepths(pressure_t olddecopo2);
|
|
void updateTrashIcon();
|
|
void moveAtFirst(int cylid);
|
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
|
bool updateBestMixes();
|
|
void emitDataChanged();
|
|
bool cylinderUsed(int i) const;
|
|
|
|
signals:
|
|
void divesEdited(int num);
|
|
|
|
public
|
|
slots:
|
|
void remove(QModelIndex index);
|
|
void cylindersReset(const QVector<dive *> &dives);
|
|
void cylinderAdded(dive *d, int pos);
|
|
void cylinderRemoved(dive *d, int pos);
|
|
void cylinderEdited(dive *d, int pos);
|
|
|
|
private:
|
|
dive *d;
|
|
bool inPlanner;
|
|
// Used if we temporarily change a line because the user is selecting a weight type
|
|
int tempRow;
|
|
cylinder_t tempCyl;
|
|
|
|
cylinder_t *cylinderAt(const QModelIndex &index);
|
|
void initTempCyl(int row);
|
|
void clearTempCyl();
|
|
void commitTempCyl(int row);
|
|
};
|
|
|
|
// Cylinder model that hides unused cylinders if the pref.show_unused_cylinders flag is not set
|
|
class CylindersModelFiltered : public QSortFilterProxyModel {
|
|
Q_OBJECT
|
|
public:
|
|
CylindersModelFiltered(QObject *parent = 0);
|
|
CylindersModel *model(); // Access to unfiltered base model
|
|
|
|
void clear();
|
|
void updateDive(dive *d);
|
|
private:
|
|
CylindersModel source;
|
|
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
|
|
};
|
|
|
|
#endif
|