mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
63414fc823
When editing cylinders or weights directly in the table widgets, no warning was shown if multiple dives were affected. To solve this, emit signals from the respective models and catch them in dive equipment tab. Not very nice, but it works for now. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef CYLINDERMODEL_H
|
|
#define CYLINDERMODEL_H
|
|
|
|
#include <QSortFilterProxyModel>
|
|
|
|
#include "cleanertablemodel.h"
|
|
#include "core/dive.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();
|
|
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
|