src/mainwindow.cpp

changeset 1439
36a4e5b156f7
parent 1438
988b6563d47d
--- a/src/mainwindow.cpp	Thu Feb 07 13:45:07 2019 +0200
+++ b/src/mainwindow.cpp	Thu Feb 07 15:43:18 2019 +0200
@@ -473,6 +473,26 @@
 	}
 }
 
+/*
+ * Returns the selection model associated with the given document. If the model does not
+ * exist yet, it will be created.
+ */
+auto MainWindow::selectionModelForDocument
+(
+	LDDocument* document
+) -> QItemSelectionModel*
+{
+	QItemSelectionModel* selectionModel = m_selectionModels[document];
+
+	if (selectionModel == nullptr)
+	{
+		selectionModel = new QItemSelectionModel;
+		m_selectionModels[document] = selectionModel;
+	}
+
+	return selectionModel;
+}
+
 // ---------------------------------------------------------------------------------------------------------------------
 //
 void MainWindow::spawnContextMenu (const QPoint& position)
@@ -845,6 +865,7 @@
 	m_subWindows[canvas] = subWindow;
 	connect(canvas, &gl::Renderer::closed, this, &MainWindow::canvasClosed);
 	ui.viewport->setActiveSubWindow(subWindow);
+	canvas->setSelectionModel(selectionModelForDocument(document));
 	return canvas;
 }
 
@@ -894,10 +915,6 @@
 		Canvas* canvas = getRendererForDocument(document);
 		updateDocumentList();
 		connect(document, &LDDocument::windingChanged, canvas, &Canvas::fullUpdate);
-
-		QItemSelectionModel* selection = new QItemSelectionModel;
-		m_selectionModels[document] = selection;
-		canvas->setSelectionModel(selection);
 	}
 }
 
@@ -934,8 +951,7 @@
 		for (Canvas* canvas : m_renderers[document])
 			canvas->fullUpdate();
 
-		QItemSelectionModel* selection = m_selectionModels.value(document);
-		ui.objectList->setSelectionModel(selection);
+		ui.objectList->setSelectionModel(selectionModelForDocument(document));
 
 	}
 }
@@ -982,7 +998,7 @@
 
 	if (selectionModel != m_selectionModels.end())
 	{
-		delete *selectionModel;
+		(*selectionModel)->deleteLater();
 		m_selectionModels.erase(selectionModel);
 	}
 }

mercurial