summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-03-13 11:39:33 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-03-14 07:24:31 +0000
commit85bfaab5ec1f6d7661f7f8cc5619dda1ad6c1d0b (patch)
tree7dc23b146dd776fad85a146f3167afaef2aa7f5a
parentb874d10d0aa1a733dd571234846aa4ff73b2f491 (diff)
Refresh variants asynchronously
Synchronous refresh when deleting slides caused a crash. Asynchronous refresh is also much more efficient when deleting/undoing deep object trees. Task-number: QT3DS-3146 Change-Id: I9f63f0edb44e6f557a77132eeaaa9c76df868ce6 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.cpp12
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.h2
2 files changed, 11 insertions, 3 deletions
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
index f3a5e099..d54ec277 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
@@ -43,7 +43,6 @@
#include "Qt3DSDMSlides.h"
#include "Dialogs.h"
-#include <QtCore/qtimer.h>
#include "QtWidgets/qlabel.h"
#include <QtQml/qqmlcontext.h>
#include <QtQml/qqmlengine.h>
@@ -63,6 +62,13 @@ SlideView::SlideView(QWidget *parent) : QQuickWidget(parent)
g_StudioApp.GetCore()->GetDispatch()->AddPresentationChangeListener(this);
setResizeMode(QQuickWidget::SizeRootObjectToView);
QTimer::singleShot(0, this, &SlideView::initialize);
+
+ m_variantRefreshTimer.setSingleShot(true);
+ m_variantRefreshTimer.setInterval(0);
+ connect(&m_variantRefreshTimer, &QTimer::timeout, [this]() {
+ m_SlidesModel->refreshVariants();
+ m_MasterSlideModel->refreshVariants(m_SlidesModel->variantsModel());
+ });
}
SlideView::~SlideView()
@@ -568,8 +574,8 @@ bool SlideView::isMaster(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle)
void SlideView::refreshVariants()
{
- m_SlidesModel->refreshVariants();
- m_MasterSlideModel->refreshVariants(m_SlidesModel->variantsModel());
+ if (!m_variantRefreshTimer.isActive())
+ m_variantRefreshTimer.start();
}
void SlideView::OnBeginDataModelNotifications()
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.h b/src/Authoring/Studio/Palettes/Slide/SlideView.h
index eed79655..aa0a880f 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.h
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.h
@@ -30,6 +30,7 @@
#define SLIDEVIEW_H
#include <QtQuickWidgets/qquickwidget.h>
+#include <QtCore/qtimer.h>
#include "DispatchListeners.h"
#include "SlideModel.h"
@@ -151,6 +152,7 @@ private:
QString m_currentController;
QString m_toolTip;
Qt::DockWidgetArea m_dockArea;
+ QTimer m_variantRefreshTimer;
};
#endif // SLIDEVIEW_H