diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.cpp index 8b39b8c31bdff6decbf6120a6482fa6708e21758..6ba33c9b489e235220e067d3794dab537fb6f233 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.cpp @@ -28,15 +28,13 @@ RealSpaceCanvas::RealSpaceCanvas(QWidget* parent) : QWidget(parent), m_sampleModel(nullptr), m_view(new RealSpaceView), m_view_locked(false), m_sceneGeometry(new SceneGeometry), m_warningSign(new WarningSign(this)) { + qDebug() << "RealSpaceCanvas::RealSpaceCanvas"; + QVBoxLayout* layout = new QVBoxLayout; layout->setMargin(0); layout->setSpacing(0); layout->addWidget(m_view); setLayout(layout); - - // listening whether Lock View box in RealSpaceToolBar has been unchecked or not - // in order to display the current selection as soon as the box is unchecked - connect(this, &RealSpaceCanvas::lockViewUnchecked, this, &RealSpaceCanvas::updateToSelection); } RealSpaceCanvas::~RealSpaceCanvas() @@ -45,6 +43,8 @@ RealSpaceCanvas::~RealSpaceCanvas() void RealSpaceCanvas::setModel(SampleModel* sampleModel, QItemSelectionModel* selectionModel) { + qDebug() << "RealSpaceCanvas::setModel"; + if (sampleModel != m_sampleModel) { if (m_sampleModel) @@ -52,33 +52,39 @@ void RealSpaceCanvas::setModel(SampleModel* sampleModel, QItemSelectionModel* se m_sampleModel = sampleModel; + if (m_sampleModel) + setConnected(m_sampleModel, true); + } + + if (selectionModel != m_selectionModel) { + if (m_selectionModel) + disconnect(m_selectionModel, &QItemSelectionModel::selectionChanged, + this, &RealSpaceCanvas::onSelectionChanged); + m_selectionModel = selectionModel; - if (m_sampleModel && !isHidden()) { - setConnected(m_sampleModel, true); - if (selectionModel != nullptr) { - QModelIndexList indices = m_selectionModel->selection().indexes(); - if (indices.size()) - m_currentSelection = FilterPropertyProxy::toSourceIndex(indices.back()); - } - - if (!m_view_locked) - updateScene(); - } + if (m_selectionModel) + connect(m_selectionModel, &QItemSelectionModel::selectionChanged, + this, &RealSpaceCanvas::onSelectionChanged); } + + updateToSelection(); } -void RealSpaceCanvas::onSelectionChanged(const QItemSelection& selection /* selection */, +void RealSpaceCanvas::onSelectionChanged(const QItemSelection& /* selection */, const QItemSelection& /* deselection */) { // propagate selection from selectionChanged() signal to updateToSelection() method - updateToSelection(selection); + updateToSelection(); } -void RealSpaceCanvas::updateToSelection(const QItemSelection& selection) +void RealSpaceCanvas::updateToSelection() { + if (!m_selectionModel) + return; + if (!m_view_locked) { - QModelIndexList indices = selection.indexes(); + QModelIndexList indices = m_selectionModel->selection().indexes(); if (indices.size()) m_currentSelection = FilterPropertyProxy::toSourceIndex(indices.back()); @@ -111,7 +117,7 @@ void RealSpaceCanvas::onLockViewAction(bool view_locked) // unchecked (false), then emit a signal to display the current selection on the canvas if (m_view_locked && !view_locked) { m_view_locked = view_locked; - emit lockViewUnchecked(m_selectionModel->selection()); + updateToSelection(); } else m_view_locked = view_locked; } @@ -195,17 +201,6 @@ void RealSpaceCanvas::topView() m_view->topView(); } -void RealSpaceCanvas::showEvent(QShowEvent*) -{ - setConnected(m_sampleModel, true); - updateScene(); -} - -void RealSpaceCanvas::hideEvent(QHideEvent*) -{ - setConnected(m_sampleModel, false); -} - void RealSpaceCanvas::setConnected(SampleModel* model, bool makeConnected) { if (!model) diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.h b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.h index 66fee97bcba77172b90046575c769c1fbf0a2b5e..16ed6aa0c308ea9829c0c84af47e27008721ee00 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.h +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceCanvas.h @@ -88,12 +88,9 @@ public: void setModel(SampleModel* sampleModel = nullptr, QItemSelectionModel* selectionModel = nullptr); -signals: - void lockViewUnchecked(const QItemSelection&); - public slots: - void onSelectionChanged(const QItemSelection& selection, const QItemSelection&); - void updateToSelection(const QItemSelection& selection); + void onSelectionChanged(const QItemSelection&, const QItemSelection&); + void updateToSelection(); void onDefaultViewAction(); void onSideViewAction(); @@ -110,10 +107,6 @@ private slots: void sideView(); void topView(); -protected: - virtual void showEvent(QShowEvent*); - virtual void hideEvent(QHideEvent*); - private: void setConnected(SampleModel* model, bool makeConnected); diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceDialog.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceDialog.cpp index f541b948d0c5945e57e49de3925e8faa83729398..92484f7afe31284cd419d6b16a21e1d751cf584c 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceDialog.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceDialog.cpp @@ -49,7 +49,6 @@ RealSpaceDialog::RealSpaceDialog(SampleModel *sampleModel, #ifdef BORNAGAIN_OPENGL RealSpaceWidget* widget = new RealSpaceWidget(m_sampleModel, m_selectionModel); - widget->setModel(m_sampleModel, m_selectionModel); layout->addWidget(widget); #endif diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp index 0f467a90c21034a9bdb4beac51135056519924d6..d7cc40ca354186f2f33533429adbecbfcd716f87 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp @@ -29,13 +29,14 @@ RealSpaceWidget::RealSpaceWidget(SampleModel *sampleModel, , m_sampleModel(sampleModel) , m_selectionModel(selectionModel) { - QHBoxLayout* hlayout = new QHBoxLayout; + qDebug() << "RealSpaceWidget::RealSpaceWidget"; + auto hlayout = new QHBoxLayout; hlayout->setMargin(0); hlayout->setSpacing(0); hlayout->setContentsMargins(0, 0, 0, 0); hlayout->addWidget(m_canvas); - QVBoxLayout *mainLayout = new QVBoxLayout; + auto *mainLayout = new QVBoxLayout; mainLayout->setMargin(0); mainLayout->setSpacing(0); mainLayout->setContentsMargins(0,0,0,0); @@ -44,9 +45,6 @@ RealSpaceWidget::RealSpaceWidget(SampleModel *sampleModel, setLayout(mainLayout); - connect(m_selectionModel, &QItemSelectionModel::selectionChanged, - m_canvas, &RealSpaceCanvas::onSelectionChanged); - connect(m_toolBar, &RealSpaceToolBar::defaultViewAction, m_canvas, &RealSpaceCanvas::onDefaultViewAction); @@ -62,12 +60,16 @@ RealSpaceWidget::RealSpaceWidget(SampleModel *sampleModel, connect(m_toolBar, &RealSpaceToolBar::changeLayerSizeAction, m_canvas, &RealSpaceCanvas::onChangeLayerSizeAction); - setModel(sampleModel, selectionModel); } -void RealSpaceWidget::setModel(SampleModel* sampleModel, QItemSelectionModel *selectionModel) +void RealSpaceWidget::showEvent(QShowEvent*) { - m_sampleModel = sampleModel; - m_selectionModel = selectionModel; + qDebug() << "RealSpaceWidget::showEvent"; m_canvas->setModel(m_sampleModel, m_selectionModel); } + +void RealSpaceWidget::hideEvent(QHideEvent*) +{ + qDebug() << "RealSpaceWidget::hideEvent"; + m_canvas->setModel(nullptr, nullptr); +} diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h index 87e0ab9564fe160a255c72941e02b10b35a716cd..d277cfb88b6d1f793b48c6243f817ea889bf543c 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h @@ -35,7 +35,9 @@ public: RealSpaceWidget(SampleModel* sampleModel = nullptr, QItemSelectionModel* selectionModel = nullptr, QWidget* parent = nullptr); - void setModel(SampleModel* model, QItemSelectionModel* selectionModel); +protected: + void showEvent(QShowEvent*); + void hideEvent(QHideEvent*); private: RealSpaceActions* m_actions; diff --git a/GUI/coregui/Views/TestView.cpp b/GUI/coregui/Views/TestView.cpp index 6e09826c6f4ea8b95a1254eee1066fd25ff4236c..8c1a1da0eeb24ae84fd0d892880696ee86ed784f 100644 --- a/GUI/coregui/Views/TestView.cpp +++ b/GUI/coregui/Views/TestView.cpp @@ -181,7 +181,6 @@ void TestView::test_ba3d() layout->setSpacing(0); #ifdef BORNAGAIN_OPENGL RealSpaceWidget* widget = new RealSpaceWidget(m_mainWindow->sampleModel()); - widget->setModel(m_mainWindow->sampleModel(), nullptr); layout->addWidget(widget); #endif setLayout(layout);