diff --git a/Modules/QtWidgets/files.cmake b/Modules/QtWidgets/files.cmake index dc2f4a6e64..db1772bbdd 100644 --- a/Modules/QtWidgets/files.cmake +++ b/Modules/QtWidgets/files.cmake @@ -1,126 +1,128 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES QmitkAbstractDataStorageModel.cpp QmitkAbstractMultiWidget.cpp QmitkApplicationCursor.cpp QmitkDataStorageComboBox.cpp QmitkDataStorageDefaultListModel.cpp QmitkDataStorageListModel.cpp QmitkDataStorageTableModel.cpp QmitkDataStorageSimpleTreeModel.cpp QmitkDataStorageTreeModel.cpp QmitkDataStorageTreeModelInternalItem.cpp QmitkDnDDataNodeWidget.cpp QmitkFileReaderOptionsDialog.cpp QmitkFileReaderWriterOptionsWidget.cpp QmitkFileWriterOptionsDialog.cpp QmitkInteractionSchemeToolBar.cpp QmitkIOUtil.cpp QmitkLevelWindowPresetDefinitionDialog.cpp QmitkLevelWindowRangeChangeDialog.cpp QmitkLevelWindowWidgetContextMenu.cpp QmitkLevelWindowWidget.cpp QmitkLineEditLevelWindowWidget.cpp QmitkMemoryUsageIndicatorView.cpp QmitkMouseModeSwitcher.cpp QmitkMimeTypes.cpp QmitkMultiWidgetConfigurationToolBar.cpp + QmitkMultiWidgetLayoutManager.cpp QmitkMultiWidgetLayoutSelectionWidget.cpp QmitkNodeDescriptor.cpp QmitkColoredNodeDescriptor.cpp QmitkNodeDescriptorManager.cpp QmitkProgressBar.cpp QmitkPropertiesTableEditor.cpp QmitkPropertiesTableModel.cpp QmitkPropertyDelegate.cpp QmitkRegisterClasses.cpp QmitkRenderingManager.cpp QmitkRenderingManagerFactory.cpp QmitkRenderWindow.cpp QmitkRenderWindowMenu.cpp QmitkRenderWindowWidget.cpp QmitkServiceListWidget.cpp QmitkSliderLevelWindowWidget.cpp QmitkStdMultiWidget.cpp QmitkMxNMultiWidget.cpp QmitkDataStorageComboBoxWithSelectNone.cpp QmitkDataStorageFilterProxyModel.cpp QmitkPropertyItem.cpp QmitkPropertyItemDelegate.cpp QmitkPropertyItemModel.cpp QmitkStyleManager.cpp QmitkAbstractDataStorageInspector.cpp QmitkDataStorageListInspector.cpp QmitkDataStorageTreeInspector.cpp QmitkModelViewSelectionConnector.cpp mitkIDataStorageInspectorProvider.cpp mitkQtWidgetsActivator.cpp mitkDataStorageInspectorGenerator.cpp QmitkOverlayWidget.cpp QmitkNodeDetailsDialog.cpp ) set(MOC_H_FILES include/QmitkAbstractDataStorageModel.h include/QmitkAbstractMultiWidget.h include/QmitkDataStorageComboBox.h include/QmitkDataStorageTableModel.h include/QmitkDataStorageTreeModel.h include/QmitkDataStorageSimpleTreeModel.h include/QmitkDataStorageDefaultListModel.h include/QmitkDnDDataNodeWidget.h include/QmitkFileReaderOptionsDialog.h include/QmitkFileReaderWriterOptionsWidget.h include/QmitkFileWriterOptionsDialog.h include/QmitkInteractionSchemeToolBar.h include/QmitkLevelWindowPresetDefinitionDialog.h include/QmitkLevelWindowRangeChangeDialog.h include/QmitkLevelWindowWidgetContextMenu.h include/QmitkLevelWindowWidget.h include/QmitkLineEditLevelWindowWidget.h include/QmitkMemoryUsageIndicatorView.h include/QmitkMouseModeSwitcher.h include/QmitkMultiWidgetConfigurationToolBar.h + include/QmitkMultiWidgetLayoutManager.h include/QmitkMultiWidgetLayoutSelectionWidget.h include/QmitkNodeDescriptor.h include/QmitkColoredNodeDescriptor.h include/QmitkNodeDescriptorManager.h include/QmitkProgressBar.h include/QmitkPropertiesTableEditor.h include/QmitkPropertyDelegate.h include/QmitkRenderingManager.h include/QmitkRenderWindow.h include/QmitkRenderWindowMenu.h include/QmitkRenderWindowWidget.h include/QmitkServiceListWidget.h include/QmitkSliderLevelWindowWidget.h include/QmitkStdMultiWidget.h include/QmitkMxNMultiWidget.h include/QmitkDataStorageComboBoxWithSelectNone.h include/QmitkPropertyItemDelegate.h include/QmitkPropertyItemModel.h include/QmitkDataStorageListInspector.h include/QmitkAbstractDataStorageInspector.h include/QmitkDataStorageTreeInspector.h include/QmitkModelViewSelectionConnector.h include/QmitkOverlayWidget.h include/QmitkNodeDetailsDialog.h ) set(UI_FILES src/QmitkFileReaderOptionsDialog.ui src/QmitkFileWriterOptionsDialog.ui src/QmitkLevelWindowPresetDefinition.ui src/QmitkLevelWindowWidget.ui src/QmitkLevelWindowRangeChange.ui src/QmitkMemoryUsageIndicator.ui src/QmitkMultiWidgetLayoutSelectionWidget.ui src/QmitkServiceListWidgetControls.ui src/QmitkDataStorageListInspector.ui src/QmitkDataStorageTreeInspector.ui ) set(QRC_FILES resource/Qmitk.qrc ) diff --git a/Modules/QtWidgets/include/QmitkMultiWidgetLayoutManager.h b/Modules/QtWidgets/include/QmitkMultiWidgetLayoutManager.h new file mode 100644 index 0000000000..bb47ff12af --- /dev/null +++ b/Modules/QtWidgets/include/QmitkMultiWidgetLayoutManager.h @@ -0,0 +1,78 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef QMITKMULTIWIDGETLAYOUTMANAGER_H +#define QMITKMULTIWIDGETLAYOUTMANAGER_H + +#include "MitkQtWidgetsExports.h" + +#include + +class QmitkAbstractMultiWidget; +class QmitkRenderWindowWidget; + +/** +* @brief +* +* +*/ +class MITKQTWIDGETS_EXPORT QmitkMultiWidgetLayoutManager : public QObject +{ + Q_OBJECT + +public: + + enum class LayoutDesign + { + DEFAULT = 0, + ALL_2D_TOP_3D_BOTTOM, + ALL_2D_LEFT_3D_RIGHT, + ONE_BIG, + ONLY_2D_HORIZONTAL, + ONLY_2D_VERTICAL, + ONE_TOP_3D_BOTTOM, + ONE_LEFT_3D_RIGHT, + ALL_HORIZONTAL, + ALL_VERTICAL + }; + + QmitkMultiWidgetLayoutManager(QmitkAbstractMultiWidget* multiwidget); + + void OnLayoutDesignChanged(LayoutDesign layoutDesign); + +private: + + void SetDefaultLayout(); + void SetAll2DTop3DBottomLayout(); + void SetAll2DLeft3DRightLayout(); + + void SetOneBigLayout(); + + void SetOnly2DLayoutHorizontal(); + void SetOnly2DLayoutVertical(); + + void SetOneTop3DBottomLayout(); + void SetOneLeft3DRightLayout(); + + void SetAllHorizontal(); + void SetAllVertical(); + + QmitkAbstractMultiWidget* m_MultiWidget; + QmitkRenderWindowWidget* m_CurrentRenderWindowWidget; + +}; + +#endif // QMITKMULTIWIDGETLAYOUTMANAGER_H diff --git a/Modules/QtWidgets/src/QmitkMultiWidgetLayoutManager.cpp b/Modules/QtWidgets/src/QmitkMultiWidgetLayoutManager.cpp new file mode 100644 index 0000000000..144ac41d66 --- /dev/null +++ b/Modules/QtWidgets/src/QmitkMultiWidgetLayoutManager.cpp @@ -0,0 +1,501 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "QmitkMultiWidgetLayoutManager.h" + +#include +#include +#include +#include + +// qt +#include +#include + +QmitkMultiWidgetLayoutManager::QmitkMultiWidgetLayoutManager(QmitkAbstractMultiWidget* multiwidget) + : QObject(multiwidget) + , m_MultiWidget(multiwidget) + , m_CurrentRenderWindowWidget(nullptr) +{ + // nothing here +} + +void QmitkMultiWidgetLayoutManager::OnLayoutDesignChanged(LayoutDesign layoutDesign) +{ + if (nullptr == m_MultiWidget) + { + return; + } + + // retrieve the render window name from the sending render window + auto renderWindow = dynamic_cast(QObject::sender()); + m_CurrentRenderWindowWidget = m_MultiWidget->GetRenderWindowWidget(renderWindow).get(); + + switch (layoutDesign) + { + case LayoutDesign::DEFAULT: + { + SetDefaultLayout(); + break; + } + case LayoutDesign::ALL_2D_TOP_3D_BOTTOM: + { + SetAll2DTop3DBottomLayout(); + break; + } + case LayoutDesign::ALL_2D_LEFT_3D_RIGHT: + { + SetAll2DLeft3DRightLayout(); + break; + } + case LayoutDesign::ONE_BIG: + { + SetOneBigLayout(); + break; + } + case LayoutDesign::ONLY_2D_HORIZONTAL: + { + SetOnly2DLayoutHorizontal(); + break; + } + case LayoutDesign::ONLY_2D_VERTICAL: + { + SetOnly2DLayoutVertical(); + break; + } + case LayoutDesign::ONE_TOP_3D_BOTTOM: + { + SetOneTop3DBottomLayout(); + break; + } + case LayoutDesign::ONE_LEFT_3D_RIGHT: + { + SetOneLeft3DRightLayout(); + break; + } + case LayoutDesign::ALL_HORIZONTAL: + { + SetAllHorizontal(); + break; + } + case LayoutDesign::ALL_VERTICAL: + { + SetAllVertical(); + break; + } + }; +} + +void QmitkMultiWidgetLayoutManager::SetDefaultLayout() +{ + MITK_INFO << "Set default layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(Qt::Vertical, m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + QList splitterSizeRow; + for (int row = 0; row < m_MultiWidget->GetRowCount(); ++row) + { + splitterSizeRow.push_back(1000); + + QList splitterSizeColumn; + auto splitter = new QSplitter(mainSplit); + for (int column = 0; column < m_MultiWidget->GetColumnCount(); ++column) + { + splitterSizeColumn.push_back(1000); + auto renderWindowWidget = m_MultiWidget->GetRenderWindowWidget(row, column); + splitter->addWidget(renderWindowWidget.get()); + } + splitter->setSizes(splitterSizeColumn); + } + + mainSplit->setSizes(splitterSizeRow); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::DEFAULT); + } +} + +void QmitkMultiWidgetLayoutManager::SetAll2DTop3DBottomLayout() +{ + MITK_INFO << "Set all 2D top and 3D bottom layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(Qt::Vertical, m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + auto subSplit2D = new QSplitter(mainSplit); + QList splitterSize; + auto all2DRenderWindowWidgets = m_MultiWidget->Get2DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all2DRenderWindowWidgets) + { + subSplit2D->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + subSplit2D->setSizes(splitterSize); + + auto subSplit3D = new QSplitter(mainSplit); + splitterSize.clear(); + auto all3DRenderWindowWidgets = m_MultiWidget->Get3DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all3DRenderWindowWidgets) + { + subSplit3D->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + subSplit3D->setSizes(splitterSize); + + // set size for main splitter + splitterSize.clear(); + splitterSize.push_back(600); + splitterSize.push_back(1000); + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ALL_2D_TOP_3D_BOTTOM); + } +} + +void QmitkMultiWidgetLayoutManager::SetAll2DLeft3DRightLayout() +{ + MITK_INFO << "Set all 2D left and 3D right layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + auto subSplit2D = new QSplitter(Qt::Vertical, mainSplit); + QList splitterSize; + auto all2DRenderWindowWidgets = m_MultiWidget->Get2DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all2DRenderWindowWidgets) + { + subSplit2D->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + subSplit2D->setSizes(splitterSize); + + auto subSplit3D = new QSplitter( mainSplit); + splitterSize.clear(); + auto all3DRenderWindowWidgets = m_MultiWidget->Get3DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all3DRenderWindowWidgets) + { + subSplit3D->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + subSplit3D->setSizes(splitterSize); + + // set size for main splitter + splitterSize.clear(); + splitterSize.push_back(600); + splitterSize.push_back(1000); + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ALL_2D_LEFT_3D_RIGHT); + } +} + +void QmitkMultiWidgetLayoutManager::SetOneBigLayout() +{ + MITK_INFO << "Set single 2D layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + mainSplit->addWidget(m_CurrentRenderWindowWidget); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ONE_BIG); + } +} + +void QmitkMultiWidgetLayoutManager::SetOnly2DLayoutHorizontal() +{ + MITK_INFO << "Set only 2D layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + QList splitterSize; + auto all2DRenderWindowWidgets = m_MultiWidget->Get2DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all2DRenderWindowWidgets) + { + mainSplit->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ONLY_2D_HORIZONTAL); + } +} + +void QmitkMultiWidgetLayoutManager::SetOnly2DLayoutVertical() +{ + MITK_INFO << "Set only 2D layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(Qt::Vertical, m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + QList splitterSize; + auto all2DRenderWindowWidgets = m_MultiWidget->Get2DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all2DRenderWindowWidgets) + { + mainSplit->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ONLY_2D_VERTICAL); + } +} + +void QmitkMultiWidgetLayoutManager::SetOneTop3DBottomLayout() +{ + MITK_INFO << "Set one 2D top and 3D bottom layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(Qt::Vertical, m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + mainSplit->addWidget(m_CurrentRenderWindowWidget); + + auto subSplit3D = new QSplitter(mainSplit); + QList splitterSize; + auto all3DRenderWindowWidgets = m_MultiWidget->Get3DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all3DRenderWindowWidgets) + { + subSplit3D->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + subSplit3D->setSizes(splitterSize); + + // set size for main splitter + splitterSize.clear(); + splitterSize.push_back(1000); + splitterSize.push_back(1000); + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ONE_TOP_3D_BOTTOM); + + } +} + +void QmitkMultiWidgetLayoutManager::SetOneLeft3DRightLayout() +{ + MITK_INFO << "Set one 2D left and 3D right layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + mainSplit->addWidget(m_CurrentRenderWindowWidget); + + auto subSplit3D = new QSplitter(Qt::Vertical, mainSplit); + QList splitterSize; + auto all3DRenderWindowWidgets = m_MultiWidget->Get3DRenderWindowWidgets(); + for (const auto& renderWindowWidget : all3DRenderWindowWidgets) + { + subSplit3D->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + subSplit3D->setSizes(splitterSize); + + // set size for main splitter + splitterSize.clear(); + splitterSize.push_back(1000); + splitterSize.push_back(1000); + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ONE_LEFT_3D_RIGHT); + } +} + +void QmitkMultiWidgetLayoutManager::SetAllHorizontal() +{ + MITK_INFO << "Set default layout" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + QList splitterSize; + auto allRenderWindowWidgets = m_MultiWidget->GetRenderWindowWidgets(); + for (const auto& renderWindowWidget : allRenderWindowWidgets) + { + if (nullptr != renderWindowWidget.second) + { + mainSplit->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + } + + // set size for splitter + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ALL_HORIZONTAL); + } +} + +void QmitkMultiWidgetLayoutManager::SetAllVertical() +{ + MITK_INFO << "Set all vertical" << std::endl; + + m_MultiWidget->ActivateMenuWidget(false); + + delete m_MultiWidget->layout(); + + auto hBoxLayout = new QHBoxLayout(m_MultiWidget); + hBoxLayout->setContentsMargins(0, 0, 0, 0); + m_MultiWidget->setLayout(hBoxLayout); + hBoxLayout->setMargin(0); + + auto mainSplit = new QSplitter(Qt::Vertical, m_MultiWidget); + hBoxLayout->addWidget(mainSplit); + + QList splitterSize; + auto allRenderWindowWidgets = m_MultiWidget->GetRenderWindowWidgets(); + for (const auto& renderWindowWidget : allRenderWindowWidgets) + { + mainSplit->addWidget(renderWindowWidget.second.get()); + splitterSize.push_back(1000); + } + + // set size for splitter + mainSplit->setSizes(splitterSize); + + m_MultiWidget->ActivateMenuWidget(true); + + auto allRenderWindows = m_MultiWidget->GetRenderWindows(); + for (auto& renderWindow : allRenderWindows) + { + renderWindow->LayoutDesignListChanged(LayoutDesign::ALL_VERTICAL); + } +}