mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
2d8e343221
This has become a bit of a catch-all overhaul of a large portion of the planner - I started out wanting to improve the CCR mode, but then as I started pulling all the other threads that needed addressing started to come with it. Improve how the gas selection is handled when planning dives in CCR mode, by making the type (OC / CCR) of segments dependent on the gas use type that was set for the selected gas. Add a preference to allow the user to chose to use OC gases as diluent, in a similar fashion to the original implementation. Hide gases that cannot be used in the currently selected dive mode in all drop downs. Include usage type in gas names if this is needed. Hide columns and disable elements in the 'Dive planner points' table if they can they can not be edited in the curently selected dive mode. Visually identify gases and usage types that are not appropriate for the currently selected dive mode. Move the 'Dive mode' selection to the top of the planner view, to accommodate the fact that this is a property of the dive and not a planner setting. Show a warning instead of the dive plan if the plan contains gases that are not usable in the selected dive mode. Fix the data entry for the setpoint in the 'Dive planner points' table. Fix problems with enabling / disabling planner settings when switching between dive modes. Refactor some names to make them more appropriate for their current usage. One point that is still open is to hide gas usage graphs in the planner profile if the gas isn't used for OC, as there is no way to meaningfully interpolate such usage. Signed-off-by: Michael Keller <github@ike.ch>
158 lines
5.3 KiB
C++
158 lines
5.3 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef MODELDELEGATES_H
|
|
#define MODELDELEGATES_H
|
|
|
|
#include "core/units.h"
|
|
|
|
#include <QStyledItemDelegate>
|
|
#include <QComboBox>
|
|
#include <functional>
|
|
|
|
class QPainter;
|
|
struct dive;
|
|
struct divecomputer;
|
|
|
|
class DiveListDelegate : public QStyledItemDelegate {
|
|
public:
|
|
using QStyledItemDelegate::QStyledItemDelegate;
|
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
|
};
|
|
|
|
class StarWidgetsDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit StarWidgetsDelegate(QWidget *parent = 0);
|
|
const QSize &starSize() const;
|
|
|
|
private:
|
|
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
QWidget *parentWidget;
|
|
QSize minStarSize;
|
|
};
|
|
|
|
class ComboBoxDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
// First parameter: function that creates a model and makes it a child of the passed-in widget.
|
|
explicit ComboBoxDelegate(std::function<QAbstractItemModel *(QWidget *)> create_model_func, QObject *parent = 0, bool allowEdit = true);
|
|
private
|
|
slots:
|
|
void testActivationString(const QString &currString);
|
|
void testActivationIndex(const QModelIndex &currIndex);
|
|
//HACK: try to get rid of this in the future.
|
|
void fakeActivation();
|
|
protected
|
|
slots:
|
|
virtual void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) = 0;
|
|
private:
|
|
std::function<QAbstractItemModel *(QWidget *)> create_model_func;
|
|
bool editable;
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
|
|
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
bool eventFilter(QObject *object, QEvent *event) override;
|
|
protected:
|
|
mutable struct CurrSelected {
|
|
QComboBox *comboEditor;
|
|
int currRow;
|
|
QString activeText;
|
|
QAbstractItemModel *model;
|
|
bool ignoreSelection;
|
|
} currCombo;
|
|
};
|
|
|
|
class TankInfoDelegate : public ComboBoxDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit TankInfoDelegate(QObject *parent = 0);
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
|
private:
|
|
void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
|
|
};
|
|
|
|
class TankUseDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit TankUseDelegate(QObject *parent = 0);
|
|
void setDiveDc(const dive &d, int &dcNr);
|
|
private:
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
|
|
const dive *currentDive;
|
|
int *currentDcNr;
|
|
};
|
|
|
|
class SensorDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit SensorDelegate(QObject *parent = 0);
|
|
void setCurrentDC(divecomputer *dc);
|
|
private:
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
divecomputer *currentdc;
|
|
};
|
|
|
|
class WSInfoDelegate : public ComboBoxDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit WSInfoDelegate(QObject *parent = 0);
|
|
private:
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
|
void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
|
|
};
|
|
|
|
class GasTypesDelegate : public ComboBoxDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit GasTypesDelegate(const dive &d, int &dcNr, QObject *parent = 0);
|
|
private:
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
|
void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
|
|
};
|
|
|
|
class DiveTypesDelegate : public ComboBoxDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
explicit DiveTypesDelegate(const dive &d, int &dcNr, QObject *parent = 0);
|
|
private:
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
|
void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
|
|
};
|
|
|
|
class SpinBoxDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
SpinBoxDelegate(int min, int max, int step, QObject *parent = 0);
|
|
private:
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
int min;
|
|
int max;
|
|
int step;
|
|
};
|
|
|
|
class DoubleSpinBoxDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
DoubleSpinBoxDelegate(double min, double max, double step, QObject *parent = 0);
|
|
private:
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
double min;
|
|
double max;
|
|
double step;
|
|
};
|
|
|
|
class LocationFilterDelegate : public QStyledItemDelegate {
|
|
Q_OBJECT
|
|
public:
|
|
LocationFilterDelegate(QObject *parent = 0);
|
|
void setCurrentLocation(location_t loc);
|
|
private:
|
|
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
location_t currentLocation;
|
|
};
|
|
|
|
#endif // MODELDELEGATES_H
|