# HG changeset patch # User Teemu Piippo # Date 1549546998 -7200 # Node ID 36a4e5b156f70f42390e1ade43d5d5046d77136f # Parent 988b6563d47d265a9e5ca9a75bb7afe09ab5bd0c reworked selection model handling diff -r 988b6563d47d -r 36a4e5b156f7 src/mainwindow.cpp --- 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); } } diff -r 988b6563d47d -r 36a4e5b156f7 src/mainwindow.h --- a/src/mainwindow.h Thu Feb 07 13:45:07 2019 +0200 +++ b/src/mainwindow.h Thu Feb 07 15:43:18 2019 +0200 @@ -126,6 +126,8 @@ QMap m_subWindows; int previousDivisions = MediumResolution; + QItemSelectionModel* selectionModelForDocument(LDDocument* document); + private slots: void finishInitialization(); void recentFileClicked();