mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
The WSInfoDelegate (weight-system-info delegate) is used to display a combo box of known weightsystem-types and auto-fills the weight if the weightsystem-type is changed. This would overwrite the weight data of the displayed dive when the user hovers over the different entries. Moreover, it saves the original weight in case the user cancels the editing action. This is not viable when implementing undo of weightsystem changes, because hovering over entries should not produce individual undo commands. Instead, implement a special "temporary" row in the weightsystem model. On canceling of the edit actions, simply reload the weightsystem from the unmodified dive. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef WEIGHTMODEL_H
|
|
#define WEIGHTMODEL_H
|
|
|
|
#include "cleanertablemodel.h"
|
|
#include "core/dive.h"
|
|
|
|
/* Encapsulation of the Weight Model, that represents
|
|
* the current weights on a dive. */
|
|
class WeightModel : public CleanerTableModel {
|
|
Q_OBJECT
|
|
public:
|
|
enum Column {
|
|
REMOVE,
|
|
TYPE,
|
|
WEIGHT
|
|
};
|
|
|
|
explicit WeightModel(QObject *parent = 0);
|
|
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 setTempWS(int row, weightsystem_t ws);
|
|
void clearTempWS();
|
|
void commitTempWS();
|
|
|
|
void clear();
|
|
void updateDive(dive *d);
|
|
weightsystem_t weightSystemAt(const QModelIndex &index) const;
|
|
bool changed;
|
|
|
|
public
|
|
slots:
|
|
void weightsystemsReset(const QVector<dive *> &dives);
|
|
void weightAdded(dive *d, int pos);
|
|
void weightRemoved(dive *d, int pos);
|
|
|
|
private:
|
|
dive *d;
|
|
// If we temporarily change a line because the user is selecting a weight type
|
|
int tempRow;
|
|
weightsystem_t tempWS;
|
|
};
|
|
|
|
#endif
|