mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	planner: remove global model instances
The only user of the DivePlannerPointsModel and the GasSelectionModel is the planner. Let's keep these models there. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									3dd09b31e3
								
							
						
					
					
						commit
						b5682369f8
					
				
					 6 changed files with 33 additions and 29 deletions
				
			
		| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
#include <QBuffer>
 | 
					#include <QBuffer>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DivePlannerWidget::DivePlannerWidget(QWidget *parent) : QWidget(parent, QFlag(0))
 | 
					DivePlannerWidget::DivePlannerWidget(PlannerWidgets *parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance();
 | 
						DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance();
 | 
				
			||||||
	CylindersModel *cylinders = DivePlannerPointsModel::instance()->cylindersModel();
 | 
						CylindersModel *cylinders = DivePlannerPointsModel::instance()->cylindersModel();
 | 
				
			||||||
| 
						 | 
					@ -32,8 +32,8 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent) : QWidget(parent, QFlag(0)
 | 
				
			||||||
	ui.tableWidget->setTitle(tr("Dive planner points"));
 | 
						ui.tableWidget->setTitle(tr("Dive planner points"));
 | 
				
			||||||
	ui.tableWidget->setModel(plannerModel);
 | 
						ui.tableWidget->setModel(plannerModel);
 | 
				
			||||||
	connect(ui.tableWidget, &TableView::itemClicked, plannerModel, &DivePlannerPointsModel::remove);
 | 
						connect(ui.tableWidget, &TableView::itemClicked, plannerModel, &DivePlannerPointsModel::remove);
 | 
				
			||||||
	ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::GAS, new AirTypesDelegate(this));
 | 
						ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::GAS, new AirTypesDelegate(parent->gasModel.get(), this));
 | 
				
			||||||
	ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DIVEMODE, new DiveTypesDelegate(this));
 | 
						ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DIVEMODE, new DiveTypesDelegate(parent->diveTypeModel.get(), this));
 | 
				
			||||||
	ui.cylinderTableWidget->setTitle(tr("Available gases"));
 | 
						ui.cylinderTableWidget->setTitle(tr("Available gases"));
 | 
				
			||||||
	ui.cylinderTableWidget->setBtnToolTip(tr("Add cylinder"));
 | 
						ui.cylinderTableWidget->setBtnToolTip(tr("Add cylinder"));
 | 
				
			||||||
	ui.cylinderTableWidget->setModel(cylinders);
 | 
						ui.cylinderTableWidget->setModel(cylinders);
 | 
				
			||||||
| 
						 | 
					@ -56,9 +56,9 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent) : QWidget(parent, QFlag(0)
 | 
				
			||||||
	view->setItemDelegateForColumn(CylindersModel::USE, tankUseDelegate);
 | 
						view->setItemDelegateForColumn(CylindersModel::USE, tankUseDelegate);
 | 
				
			||||||
	connect(ui.cylinderTableWidget, &TableView::addButtonClicked, plannerModel, &DivePlannerPointsModel::addCylinder_clicked);
 | 
						connect(ui.cylinderTableWidget, &TableView::addButtonClicked, plannerModel, &DivePlannerPointsModel::addCylinder_clicked);
 | 
				
			||||||
	connect(ui.tableWidget, &TableView::addButtonClicked, plannerModel, &DivePlannerPointsModel::addDefaultStop);
 | 
						connect(ui.tableWidget, &TableView::addButtonClicked, plannerModel, &DivePlannerPointsModel::addDefaultStop);
 | 
				
			||||||
	connect(cylinders, &CylindersModel::dataChanged, GasSelectionModel::instance(), &GasSelectionModel::repopulate);
 | 
						connect(cylinders, &CylindersModel::dataChanged, parent->gasModel.get(), &GasSelectionModel::repopulate);
 | 
				
			||||||
	connect(cylinders, &CylindersModel::rowsInserted, GasSelectionModel::instance(), &GasSelectionModel::repopulate);
 | 
						connect(cylinders, &CylindersModel::rowsInserted, parent->gasModel.get(), &GasSelectionModel::repopulate);
 | 
				
			||||||
	connect(cylinders, &CylindersModel::rowsRemoved, GasSelectionModel::instance(), &GasSelectionModel::repopulate);
 | 
						connect(cylinders, &CylindersModel::rowsRemoved, parent->gasModel.get(), &GasSelectionModel::repopulate);
 | 
				
			||||||
	connect(cylinders, &CylindersModel::dataChanged, plannerModel, &DivePlannerPointsModel::emitDataChanged);
 | 
						connect(cylinders, &CylindersModel::dataChanged, plannerModel, &DivePlannerPointsModel::emitDataChanged);
 | 
				
			||||||
	connect(cylinders, &CylindersModel::dataChanged, plannerModel, &DivePlannerPointsModel::cylinderModelEdited);
 | 
						connect(cylinders, &CylindersModel::dataChanged, plannerModel, &DivePlannerPointsModel::cylinderModelEdited);
 | 
				
			||||||
	connect(cylinders, &CylindersModel::rowsInserted, plannerModel, &DivePlannerPointsModel::cylinderModelEdited);
 | 
						connect(cylinders, &CylindersModel::rowsInserted, plannerModel, &DivePlannerPointsModel::cylinderModelEdited);
 | 
				
			||||||
| 
						 | 
					@ -99,6 +99,10 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent) : QWidget(parent, QFlag(0)
 | 
				
			||||||
	setMinimumHeight(0);
 | 
						setMinimumHeight(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DivePlannerWidget::~DivePlannerWidget()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DivePlannerWidget::setReplanButton(bool replan)
 | 
					void DivePlannerWidget::setReplanButton(bool replan)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	replanButton->setVisible(replan);
 | 
						replanButton->setVisible(replan);
 | 
				
			||||||
| 
						 | 
					@ -537,13 +541,19 @@ void PlannerDetails::setPlanNotes(QString plan)
 | 
				
			||||||
	ui.divePlanOutput->setHtml(plan);
 | 
						ui.divePlanOutput->setHtml(plan);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PlannerWidgets::PlannerWidgets()
 | 
					PlannerWidgets::PlannerWidgets() : plannerWidget(this)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						gasModel = std::make_unique<GasSelectionModel>();
 | 
				
			||||||
 | 
						diveTypeModel = std::make_unique<DiveTypeSelectionModel>();
 | 
				
			||||||
	connect(plannerDetails.printPlan(), &QPushButton::pressed, this, &PlannerWidgets::printDecoPlan);
 | 
						connect(plannerDetails.printPlan(), &QPushButton::pressed, this, &PlannerWidgets::printDecoPlan);
 | 
				
			||||||
	connect(DivePlannerPointsModel::instance(), &DivePlannerPointsModel::calculatedPlanNotes,
 | 
						connect(DivePlannerPointsModel::instance(), &DivePlannerPointsModel::calculatedPlanNotes,
 | 
				
			||||||
		&plannerDetails, &PlannerDetails::setPlanNotes);
 | 
							&plannerDetails, &PlannerDetails::setPlanNotes);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PlannerWidgets::~PlannerWidgets()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PlannerWidgets::planDive(dive *currentDive)
 | 
					void PlannerWidgets::planDive(dive *currentDive)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 | 
						DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 | 
				
			||||||
| 
						 | 
					@ -560,8 +570,8 @@ void PlannerWidgets::planDive(dive *currentDive)
 | 
				
			||||||
		else	// No salinity means salt water
 | 
							else	// No salinity means salt water
 | 
				
			||||||
			plannerWidget.setSalinity(SEAWATER_SALINITY);
 | 
								plannerWidget.setSalinity(SEAWATER_SALINITY);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	GasSelectionModel::instance()->repopulate();
 | 
						gasModel->repopulate();
 | 
				
			||||||
	DiveTypeSelectionModel::instance()->repopulate();
 | 
						diveTypeModel->repopulate(); // TODO: this doesn't change anything!?
 | 
				
			||||||
	plannerWidget.setReplanButton(false);
 | 
						plannerWidget.setReplanButton(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	plannerWidget.setupStartTime(timestampToDateTime(displayed_dive.when));	// This will reload the profile!
 | 
						plannerWidget.setupStartTime(timestampToDateTime(displayed_dive.when));	// This will reload the profile!
 | 
				
			||||||
| 
						 | 
					@ -572,7 +582,7 @@ void PlannerWidgets::replanDive(int currentDC)
 | 
				
			||||||
	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 | 
						DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 | 
				
			||||||
	DivePlannerPointsModel::instance()->loadFromDive(&displayed_dive, currentDC);
 | 
						DivePlannerPointsModel::instance()->loadFromDive(&displayed_dive, currentDC);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DiveTypeSelectionModel::instance()->repopulate();
 | 
						diveTypeModel->repopulate(); // TODO: this doesn't change anything!?
 | 
				
			||||||
	plannerWidget.setReplanButton(true);
 | 
						plannerWidget.setReplanButton(true);
 | 
				
			||||||
	plannerWidget.setupStartTime(timestampToDateTime(displayed_dive.when));
 | 
						plannerWidget.setupStartTime(timestampToDateTime(displayed_dive.when));
 | 
				
			||||||
	if (displayed_dive.surface_pressure.mbar)
 | 
						if (displayed_dive.surface_pressure.mbar)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
#ifndef DIVEPLANNER_H
 | 
					#ifndef DIVEPLANNER_H
 | 
				
			||||||
#define DIVEPLANNER_H
 | 
					#define DIVEPLANNER_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
#include <QAbstractTableModel>
 | 
					#include <QAbstractTableModel>
 | 
				
			||||||
#include <QAbstractButton>
 | 
					#include <QAbstractButton>
 | 
				
			||||||
#include <QDateTime>
 | 
					#include <QDateTime>
 | 
				
			||||||
| 
						 | 
					@ -9,6 +10,9 @@
 | 
				
			||||||
class QListView;
 | 
					class QListView;
 | 
				
			||||||
class QModelIndex;
 | 
					class QModelIndex;
 | 
				
			||||||
class DivePlannerPointsModel;
 | 
					class DivePlannerPointsModel;
 | 
				
			||||||
 | 
					class GasSelectionModel;
 | 
				
			||||||
 | 
					class DiveTypeSelectionModel;
 | 
				
			||||||
 | 
					class PlannerWidgets;
 | 
				
			||||||
struct dive;
 | 
					struct dive;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "ui_diveplanner.h"
 | 
					#include "ui_diveplanner.h"
 | 
				
			||||||
| 
						 | 
					@ -16,7 +20,8 @@ struct dive;
 | 
				
			||||||
class DivePlannerWidget : public QWidget {
 | 
					class DivePlannerWidget : public QWidget {
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	explicit DivePlannerWidget(QWidget *parent = 0);
 | 
						explicit DivePlannerWidget(PlannerWidgets *parent);
 | 
				
			||||||
 | 
						~DivePlannerWidget();
 | 
				
			||||||
	void setReplanButton(bool replan);
 | 
						void setReplanButton(bool replan);
 | 
				
			||||||
public
 | 
					public
 | 
				
			||||||
slots:
 | 
					slots:
 | 
				
			||||||
| 
						 | 
					@ -76,6 +81,7 @@ class PlannerWidgets : public QObject {
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	PlannerWidgets();
 | 
						PlannerWidgets();
 | 
				
			||||||
 | 
						~PlannerWidgets();
 | 
				
			||||||
	void planDive(dive *currentDive);
 | 
						void planDive(dive *currentDive);
 | 
				
			||||||
	void replanDive(int currentDC);
 | 
						void replanDive(int currentDC);
 | 
				
			||||||
public
 | 
					public
 | 
				
			||||||
| 
						 | 
					@ -85,6 +91,8 @@ public:
 | 
				
			||||||
	DivePlannerWidget plannerWidget;
 | 
						DivePlannerWidget plannerWidget;
 | 
				
			||||||
	PlannerSettingsWidget plannerSettingsWidget;
 | 
						PlannerSettingsWidget plannerSettingsWidget;
 | 
				
			||||||
	PlannerDetails plannerDetails;
 | 
						PlannerDetails plannerDetails;
 | 
				
			||||||
 | 
						std::unique_ptr<GasSelectionModel> gasModel;
 | 
				
			||||||
 | 
						std::unique_ptr<DiveTypeSelectionModel> diveTypeModel;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // DIVEPLANNER_H
 | 
					#endif // DIVEPLANNER_H
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -369,7 +369,7 @@ void AirTypesDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
 | 
				
			||||||
	model->setData(index, QVariant(combo->currentIndex()));
 | 
						model->setData(index, QVariant(combo->currentIndex()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AirTypesDelegate::AirTypesDelegate(QObject *parent) : ComboBoxDelegate(GasSelectionModel::instance(), parent, false)
 | 
					AirTypesDelegate::AirTypesDelegate(QAbstractItemModel *model, QObject *parent) : ComboBoxDelegate(model, parent, false)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -385,7 +385,7 @@ void DiveTypesDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
 | 
				
			||||||
	model->setData(index, QVariant(combo->currentIndex()));
 | 
						model->setData(index, QVariant(combo->currentIndex()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DiveTypesDelegate::DiveTypesDelegate(QObject *parent) : ComboBoxDelegate(DiveTypeSelectionModel::instance(), parent, false)
 | 
					DiveTypesDelegate::DiveTypesDelegate(QAbstractItemModel *model, QObject *parent) : ComboBoxDelegate(model, parent, false)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -106,7 +106,7 @@ private:
 | 
				
			||||||
class AirTypesDelegate : public ComboBoxDelegate {
 | 
					class AirTypesDelegate : public ComboBoxDelegate {
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	explicit AirTypesDelegate(QObject *parent = 0);
 | 
						explicit AirTypesDelegate(QAbstractItemModel *model, QObject *parent = 0);
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
 | 
						void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
 | 
				
			||||||
	void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
 | 
						void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ private:
 | 
				
			||||||
class DiveTypesDelegate : public ComboBoxDelegate {
 | 
					class DiveTypesDelegate : public ComboBoxDelegate {
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	explicit DiveTypesDelegate(QObject *parent = 0);
 | 
						explicit DiveTypesDelegate(QAbstractItemModel *model, QObject *parent = 0);
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
 | 
						void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
 | 
				
			||||||
	void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
 | 
						void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) override;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,12 +18,6 @@ Qt::ItemFlags GasSelectionModel::flags(const QModelIndex&) const
 | 
				
			||||||
	return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
 | 
						return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GasSelectionModel *GasSelectionModel::instance()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	static GasSelectionModel self;
 | 
					 | 
				
			||||||
	return &self;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void GasSelectionModel::repopulate()
 | 
					void GasSelectionModel::repopulate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	setStringList(get_dive_gas_list(&displayed_dive));
 | 
						setStringList(get_dive_gas_list(&displayed_dive));
 | 
				
			||||||
| 
						 | 
					@ -43,12 +37,6 @@ Qt::ItemFlags DiveTypeSelectionModel::flags(const QModelIndex&) const
 | 
				
			||||||
	return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
 | 
						return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DiveTypeSelectionModel *DiveTypeSelectionModel::instance()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	static DiveTypeSelectionModel self;
 | 
					 | 
				
			||||||
	return &self;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void DiveTypeSelectionModel::repopulate()
 | 
					void DiveTypeSelectionModel::repopulate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	QStringList modes;
 | 
						QStringList modes;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,6 @@
 | 
				
			||||||
class GasSelectionModel : public QStringListModel {
 | 
					class GasSelectionModel : public QStringListModel {
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	static GasSelectionModel *instance();
 | 
					 | 
				
			||||||
	Qt::ItemFlags flags(const QModelIndex &index) const;
 | 
						Qt::ItemFlags flags(const QModelIndex &index) const;
 | 
				
			||||||
	QVariant data(const QModelIndex &index, int role) const override;
 | 
						QVariant data(const QModelIndex &index, int role) const override;
 | 
				
			||||||
public
 | 
					public
 | 
				
			||||||
| 
						 | 
					@ -33,7 +32,6 @@ slots:
 | 
				
			||||||
class DiveTypeSelectionModel : public QStringListModel {
 | 
					class DiveTypeSelectionModel : public QStringListModel {
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	static DiveTypeSelectionModel *instance();
 | 
					 | 
				
			||||||
	Qt::ItemFlags flags(const QModelIndex &index) const;
 | 
						Qt::ItemFlags flags(const QModelIndex &index) const;
 | 
				
			||||||
	QVariant data(const QModelIndex &index, int role) const override;
 | 
						QVariant data(const QModelIndex &index, int role) const override;
 | 
				
			||||||
public
 | 
					public
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue