diff options
author | Andy Nichols <andy.nichols@qt.io> | 2017-11-20 17:11:07 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@qt.io> | 2017-11-21 14:23:32 +0000 |
commit | 1c8a205972ccaffd497d86fa2627f23f00018b7c (patch) | |
tree | 75bad2f443be1359b0af5374a79e0b6f20d4b50b /tools | |
parent | c3f6967201a31378fdaeebd7df86cc63a2967223 (diff) |
Fix Slide Explorer crash after sub-presentations update
Change-Id: I5ccd78bb5e443952a848e137a27e4dcf3efd69df
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qt3dsexplorer/q3dsexplorermainwindow.cpp | 10 | ||||
-rw-r--r-- | tools/qt3dsexplorer/slideexplorerwidget.cpp | 69 | ||||
-rw-r--r-- | tools/qt3dsexplorer/slideexplorerwidget.h | 8 |
3 files changed, 62 insertions, 25 deletions
diff --git a/tools/qt3dsexplorer/q3dsexplorermainwindow.cpp b/tools/qt3dsexplorer/q3dsexplorermainwindow.cpp index a600f3f..b79990f 100644 --- a/tools/qt3dsexplorer/q3dsexplorermainwindow.cpp +++ b/tools/qt3dsexplorer/q3dsexplorermainwindow.cpp @@ -59,7 +59,7 @@ Q3DSExplorerMainWindow::Q3DSExplorerMainWindow(Q3DStudioWindow *view, QWidget *p // Add Dock Widgets auto slideDockWidget = new QDockWidget("Presentation", this); - m_slideExplorer = new SlideExplorerWidget(m_view->sceneManager(), slideDockWidget); + m_slideExplorer = new SlideExplorerWidget(slideDockWidget); slideDockWidget->setWidget(m_slideExplorer); this->addDockWidget(Qt::LeftDockWidgetArea, slideDockWidget); @@ -69,7 +69,7 @@ Q3DSExplorerMainWindow::Q3DSExplorerMainWindow(Q3DStudioWindow *view, QWidget *p this->addDockWidget(Qt::RightDockWidgetArea, sceneExplorerDockWidget); auto componentSlideDockWidget = new QDockWidget("Component", this); - m_componentSlideExplorer = new SlideExplorerWidget(m_view->sceneManager(), componentSlideDockWidget); + m_componentSlideExplorer = new SlideExplorerWidget(componentSlideDockWidget); componentSlideDockWidget->setWidget(m_componentSlideExplorer); addDockWidget(Qt::LeftDockWidgetArea, componentSlideDockWidget); m_componentSlideExplorer->setEnabled(false); @@ -133,10 +133,13 @@ Q3DSExplorerMainWindow::~Q3DSExplorerMainWindow() void Q3DSExplorerMainWindow::updatePresentation() { auto pres = m_view->uipDocument()->presentation(); + m_slideExplorer->reset(); + handleComponentSelected(nullptr); if (pres) { m_sceneExplorer->setPresentation(pres); m_slideExplorer->setPresentation(pres); - handleComponentSelected(nullptr); + m_slideExplorer->setSceneManager(m_view->sceneManager(0)); + m_componentSlideExplorer->setSceneManager(m_view->sceneManager(0)); } } @@ -150,4 +153,5 @@ void Q3DSExplorerMainWindow::handleComponentSelected(Q3DSComponentNode *componen m_componentSlideExplorer->setEnabled(true); m_componentSlideExplorer->setComponent(component); + m_componentSlideExplorer->setSceneManager(m_view->sceneManager(0)); } diff --git a/tools/qt3dsexplorer/slideexplorerwidget.cpp b/tools/qt3dsexplorer/slideexplorerwidget.cpp index ea1942f..bbfa0db 100644 --- a/tools/qt3dsexplorer/slideexplorerwidget.cpp +++ b/tools/qt3dsexplorer/slideexplorerwidget.cpp @@ -136,9 +136,8 @@ private: Q3DSSlide *m_masterSlide = nullptr; }; -SlideExplorerWidget::SlideExplorerWidget(Q3DSSceneManager *sceneManager, QWidget *parent) +SlideExplorerWidget::SlideExplorerWidget(QWidget *parent) : QWidget(parent) - , m_sceneManager(sceneManager) { init(); } @@ -147,17 +146,13 @@ void SlideExplorerWidget::setPresentation(Q3DSPresentation *pres) { m_presentation = pres; m_component = nullptr; + if (!pres) { - m_masterSlide = nullptr; - m_currentSlide = nullptr; - m_slideModel->setMasterSlide(nullptr); + reset(); return; } - m_masterSlide = m_presentation->masterSlide(); - m_currentSlide = m_sceneManager->currentSlide(); - m_slideModel->setMasterSlide(m_masterSlide); - handleCurrentSlideChanged(m_currentSlide); + updateModel(); } void SlideExplorerWidget::setComponent(Q3DSComponentNode *component) @@ -165,16 +160,30 @@ void SlideExplorerWidget::setComponent(Q3DSComponentNode *component) m_presentation = nullptr; m_component = component; if (!component) { - m_masterSlide = nullptr; - m_currentSlide = nullptr; - m_slideModel->setMasterSlide(nullptr); + reset(); return; } - m_masterSlide = m_component->masterSlide(); - m_currentSlide = m_component->currentSlide(); - m_slideModel->setMasterSlide(m_masterSlide); - handleCurrentSlideChanged(m_currentSlide); + updateModel(); +} + +void SlideExplorerWidget::setSceneManager(Q3DSSceneManager *sceneManager) +{ + m_sceneManager = sceneManager; + if (!sceneManager) { + reset(); + return; + } + + updateModel(); +} + +void SlideExplorerWidget::reset() +{ + m_masterSlide = nullptr; + m_currentSlide = nullptr; + m_sceneManager = nullptr; + m_slideModel->setMasterSlide(nullptr); } void SlideExplorerWidget::handleSelectionChanged(const QModelIndex &index) @@ -191,8 +200,10 @@ void SlideExplorerWidget::handleCurrentSlideChanged(Q3DSSlide *slide) // Set the current slide selection m_slideListView->setCurrentIndex(m_slideModel->getSlideIndex(slide)); m_slideSeekSlider->setMinimum(0); - m_slideSeekSlider->setValue(slide->startTime()); - m_slideSeekSlider->setMaximum(slide->endTime()); + if (slide) { + m_slideSeekSlider->setValue(slide->startTime()); + m_slideSeekSlider->setMaximum(slide->endTime()); + } if (m_presentation) { m_sceneManager->setCurrentSlide(slide); } else if (m_component) { @@ -228,8 +239,10 @@ void SlideExplorerWidget::playCurrentSlide() m_playSlideButton->setText("stop"); } m_isSlidePlaying = !m_isSlidePlaying; - m_sceneManager->setAnimationsRunning(m_currentSlide, m_isSlidePlaying); - m_sceneManager->setAnimationsRunning(m_masterSlide, m_isSlidePlaying); + if (m_sceneManager) { + m_sceneManager->setAnimationsRunning(m_currentSlide, m_isSlidePlaying); + m_sceneManager->setAnimationsRunning(m_masterSlide, m_isSlidePlaying); + } } void SlideExplorerWidget::seekInCurrentSlide(int value) @@ -262,6 +275,22 @@ void SlideExplorerWidget::init() mainLayout->addWidget(m_slideSeekSlider); } +void SlideExplorerWidget::updateModel() +{ + if (m_sceneManager) { + if (m_presentation) { + m_masterSlide = m_presentation->masterSlide(); + m_currentSlide = m_sceneManager->currentSlide(); + + } else if (m_component) { + m_masterSlide = m_component->masterSlide(); + m_currentSlide = m_component->currentSlide(); + } + m_slideModel->setMasterSlide(m_masterSlide); + handleCurrentSlideChanged(m_currentSlide); + } +} + QT_END_NAMESPACE #include "moc_slideexplorerwidget.cpp" diff --git a/tools/qt3dsexplorer/slideexplorerwidget.h b/tools/qt3dsexplorer/slideexplorerwidget.h index 694f57c..7575b3a 100644 --- a/tools/qt3dsexplorer/slideexplorerwidget.h +++ b/tools/qt3dsexplorer/slideexplorerwidget.h @@ -46,10 +46,13 @@ class SlideExplorerWidget : public QWidget { Q_OBJECT public: - explicit SlideExplorerWidget(Q3DSSceneManager *sceneManager, QWidget *parent = nullptr); + explicit SlideExplorerWidget(QWidget *parent = nullptr); void setPresentation(Q3DSPresentation *pres); void setComponent(Q3DSComponentNode *component); + void setSceneManager(Q3DSSceneManager *sceneManager); + + void reset(); private slots: void handleSelectionChanged(const QModelIndex &index); @@ -60,9 +63,10 @@ private slots: void seekInCurrentSlide(int value); private: void init(); + void updateModel(); Q3DSComponentNode *m_component = nullptr; Q3DSPresentation *m_presentation = nullptr; - Q3DSSceneManager *m_sceneManager; + Q3DSSceneManager *m_sceneManager = nullptr; Q3DSSlide *m_masterSlide = nullptr; Q3DSSlide *m_currentSlide = nullptr; QListView *m_slideListView; |