summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@qt.io>2017-11-20 17:11:07 +0100
committerAndy Nichols <andy.nichols@qt.io>2017-11-21 14:23:32 +0000
commit1c8a205972ccaffd497d86fa2627f23f00018b7c (patch)
tree75bad2f443be1359b0af5374a79e0b6f20d4b50b /tools
parentc3f6967201a31378fdaeebd7df86cc63a2967223 (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.cpp10
-rw-r--r--tools/qt3dsexplorer/slideexplorerwidget.cpp69
-rw-r--r--tools/qt3dsexplorer/slideexplorerwidget.h8
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;