diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp index 7dde96226..2cfbad0e9 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp @@ -66,6 +66,7 @@ ToolWindowManager::ToolWindowManager(QWidget *parent) : m_dropSuggestionSwitchTimer.setInterval(1000); m_dropCurrentSuggestionIndex = 0; m_allowFloatingWindow = true; + m_createCallback = NULL; m_rectRubberBand = new QRubberBand(QRubberBand::Rectangle, this); m_lineRubberBand = new QRubberBand(QRubberBand::Line, this); @@ -271,6 +272,21 @@ void ToolWindowManager::removeToolWindow(QWidget *toolWindow) { m_toolWindowProperties.remove(toolWindow); } +QWidget* ToolWindowManager::createToolWindow(const QString& objectName) +{ + if (m_createCallback) { + QWidget *toolWindow = m_createCallback(objectName); + if(toolWindow) { + m_toolWindows << toolWindow; + m_toolWindowProperties[toolWindow] = ToolWindowProperty(0); + QObject::connect(toolWindow, &QWidget::windowTitleChanged, this, &ToolWindowManager::windowTitleChanged); + return toolWindow; + } + } + + return NULL; +} + void ToolWindowManager::setSuggestionSwitchInterval(int msec) { m_dropSuggestionSwitchTimer.setInterval(msec); } diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h index b83d9e079..36fe5da58 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h @@ -35,6 +35,8 @@ #include #include +#include + class ToolWindowManagerArea; class ToolWindowManagerWrapper; @@ -240,6 +242,12 @@ public: */ void restoreState(const QVariantMap& data); + typedef std::function CreateCallback; + + void setToolWindowCreateCallback(const CreateCallback &cb) { m_createCallback = cb; } + QWidget *createToolWindow(const QString& objectName); + + bool checkValidSplitter(QWidget *w); /*! \cond PRIVATE */ void setSuggestionSwitchInterval(int msec); @@ -289,6 +297,8 @@ private: // (e.g. always 0 if there is only one possible drop location) QTimer m_dropSuggestionSwitchTimer; // used for switching drop suggestions + CreateCallback m_createCallback; + // last widget used for adding tool windows, or 0 if there isn't one // (warning: may contain pointer to deleted object) ToolWindowManagerArea* m_lastUsedArea; diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp index 51bcc931c..f7e7ef0bb 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp @@ -186,6 +186,7 @@ void ToolWindowManagerArea::restoreState(const QVariantMap &data) { break; } } + if (t == NULL) t = m_manager->createToolWindow(objectName); if (t) { t->setProperty("persistData", objectData["data"]); addToolWindow(t);