mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Clear the data when the model resets.
This patch does a few things:
1 - reset the model when user closes the dive file
2 - connects the 'rowsAboutToBeRemoved' in a way that the graphics can
    remove their polygons too
3 - adds a 'clear' virtual method so items that don't follow the rules can
    clean themseves up.
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
			
			
This commit is contained in:
		
							parent
							
								
									2f2c9e371c
								
							
						
					
					
						commit
						cafc7e4b13
					
				
					 5 changed files with 23 additions and 0 deletions
				
			
		|  | @ -171,6 +171,7 @@ void MainWindow::on_actionClose_triggered() | ||||||
| 	if (unsaved_changes() && (askSaveChanges() == false)) | 	if (unsaved_changes() && (askSaveChanges() == false)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
|  | 	ui.graphicsView->setEmptyState(); | ||||||
| 	/* free the dives and trips */ | 	/* free the dives and trips */ | ||||||
| 	while (dive_table.nr) | 	while (dive_table.nr) | ||||||
| 		delete_single_dive(0); | 		delete_single_dive(0); | ||||||
|  |  | ||||||
|  | @ -99,6 +99,7 @@ void DivePlotDataModel::clear() | ||||||
| { | { | ||||||
| 	if (rowCount() != 0) { | 	if (rowCount() != 0) { | ||||||
| 		beginRemoveRows(QModelIndex(), 0, rowCount() - 1); | 		beginRemoveRows(QModelIndex(), 0, rowCount() - 1); | ||||||
|  | 		pInfo.nr = 0; | ||||||
| 		endRemoveRows(); | 		endRemoveRows(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -44,9 +44,17 @@ void AbstractProfilePolygonItem::setModel(DivePlotDataModel* model) | ||||||
| { | { | ||||||
| 	dataModel = model; | 	dataModel = model; | ||||||
| 	connect(dataModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(modelDataChanged(QModelIndex, QModelIndex))); | 	connect(dataModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(modelDataChanged(QModelIndex, QModelIndex))); | ||||||
|  | 	connect(dataModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, SLOT(modelDataRemoved(QModelIndex, int, int))); | ||||||
| 	modelDataChanged(); | 	modelDataChanged(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void AbstractProfilePolygonItem::modelDataRemoved(const QModelIndex& parent, int from, int to) | ||||||
|  | { | ||||||
|  | 	setPolygon(QPolygonF()); | ||||||
|  | 	qDeleteAll(texts); | ||||||
|  | 	texts.clear(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void AbstractProfilePolygonItem::setVerticalAxis(DiveCartesianAxis* vertical) | void AbstractProfilePolygonItem::setVerticalAxis(DiveCartesianAxis* vertical) | ||||||
| { | { | ||||||
| 	vAxis = vertical; | 	vAxis = vertical; | ||||||
|  | @ -107,6 +115,8 @@ DiveProfileItem::DiveProfileItem() : show_reported_ceiling(0), reported_ceiling_ | ||||||
| 
 | 
 | ||||||
| void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { | void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { | ||||||
| 	Q_UNUSED(widget); | 	Q_UNUSED(widget); | ||||||
|  | 	if(polygon().isEmpty()) | ||||||
|  | 		return; | ||||||
| 
 | 
 | ||||||
| 	// This paints the Polygon + Background. I'm setting the pen to QPen() so we don't get a black line here,
 | 	// This paints the Polygon + Background. I'm setting the pen to QPen() so we don't get a black line here,
 | ||||||
| 	// after all we need to plot the correct velocities colors later.
 | 	// after all we need to plot the correct velocities colors later.
 | ||||||
|  | @ -277,6 +287,8 @@ void DiveTemperatureItem::createTextItem(int sec, int mkelvin) | ||||||
| 
 | 
 | ||||||
| void DiveTemperatureItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | void DiveTemperatureItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | ||||||
| { | { | ||||||
|  | 	if(polygon().isEmpty()) | ||||||
|  | 		return; | ||||||
| 	painter->setPen(pen()); | 	painter->setPen(pen()); | ||||||
| 	painter->drawPolyline(polygon()); | 	painter->drawPolyline(polygon()); | ||||||
| } | } | ||||||
|  | @ -374,6 +386,8 @@ void DiveGasPressureItem::plot_gas_value(int mbar, int sec, QFlags<Qt::Alignment | ||||||
| 
 | 
 | ||||||
| void DiveGasPressureItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | void DiveGasPressureItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | ||||||
| { | { | ||||||
|  | 	if(polygon().isEmpty()) | ||||||
|  | 		return; | ||||||
| 	QPen pen; | 	QPen pen; | ||||||
| 	pen.setCosmetic(true); | 	pen.setCosmetic(true); | ||||||
| 	pen.setWidth(2); | 	pen.setWidth(2); | ||||||
|  | @ -427,6 +441,8 @@ void DiveCalculatedCeiling::modelDataChanged(const QModelIndex& topLeft, const Q | ||||||
| 
 | 
 | ||||||
| void DiveCalculatedCeiling::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | void DiveCalculatedCeiling::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | ||||||
| { | { | ||||||
|  | 	if(polygon().isEmpty()) | ||||||
|  | 		return; | ||||||
| 	QGraphicsPolygonItem::paint(painter, option, widget); | 	QGraphicsPolygonItem::paint(painter, option, widget); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -492,6 +508,8 @@ void DiveReportedCeiling::preferencesChanged() | ||||||
| 
 | 
 | ||||||
| void DiveReportedCeiling::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | void DiveReportedCeiling::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) | ||||||
| { | { | ||||||
|  | 	if(polygon().isEmpty()) | ||||||
|  | 		return; | ||||||
| 	QGraphicsPolygonItem::paint(painter, option, widget); | 	QGraphicsPolygonItem::paint(painter, option, widget); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -41,9 +41,11 @@ public: | ||||||
| 	void setHorizontalDataColumn(int column); | 	void setHorizontalDataColumn(int column); | ||||||
| 	void setVerticalDataColumn(int column); | 	void setVerticalDataColumn(int column); | ||||||
| 	virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) = 0; | 	virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) = 0; | ||||||
|  | 	virtual void clear(){}; | ||||||
| public slots: | public slots: | ||||||
| 	virtual void preferencesChanged(); | 	virtual void preferencesChanged(); | ||||||
| 	virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex()); | 	virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex()); | ||||||
|  | 	virtual void modelDataRemoved(const QModelIndex& parent, int from, int to); | ||||||
| protected: | protected: | ||||||
| 	/* when the model emits a 'datachanged' signal, this method below should be used to check if the
 | 	/* when the model emits a 'datachanged' signal, this method below should be used to check if the
 | ||||||
| 	 * modified data affects this particular item ( for example, when setting the '3m increment' | 	 * modified data affects this particular item ( for example, when setting the '3m increment' | ||||||
|  |  | ||||||
|  | @ -432,6 +432,7 @@ void ProfileWidget2::setEmptyState() | ||||||
| 	if (currentState == EMPTY) | 	if (currentState == EMPTY) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
|  | 	dataModel->clear(); | ||||||
| 	backgroundFile = QString(":poster%1").arg( rand()%3 +1); | 	backgroundFile = QString(":poster%1").arg( rand()%3 +1); | ||||||
| 	currentState = EMPTY; | 	currentState = EMPTY; | ||||||
| 	fixBackgroundPos(); | 	fixBackgroundPos(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue