// ************************************************************************************************ // // BornAgain: simulate and fit reflection and scattering // //! @file GUI/Views/SampleView.cpp //! @brief Implements class SampleView //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) //! @copyright Forschungszentrum Jülich GmbH 2018 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) // // ************************************************************************************************ #include "GUI/Views/SampleView.h" #include "Base/Utils/Assert.h" #include "GUI/Models/ApplicationModels.h" #include "GUI/Models/FilterPropertyProxy.h" #include "GUI/Views/CommonWidgets/DocksController.h" #include "GUI/Views/SampleDesigner/DesignerScene.h" #include "GUI/Views/SampleDesigner/DesignerView.h" #include "GUI/Views/SampleDesigner/RealSpacePanel.h" #include "GUI/Views/SampleDesigner/SamplePropertyWidget.h" #include "GUI/Views/SampleDesigner/SampleToolBar.h" #include "GUI/Views/SampleDesigner/SampleToolBox.h" #include "GUI/Views/SampleDesigner/SampleTreeWidget.h" #include "GUI/Views/SampleDesigner/ScriptPanel.h" #include "GUI/mainwindow/mainwindow.h" #include "GUI/mainwindow/projectdocument.h" #include "GUI/mainwindow/projectmanager.h" #include <QDockWidget> #include <QMenu> #include <memory> SampleView::SampleView(QWidget* parent, ProjectDocument* document) : QMainWindow(parent) , m_docks(new DocksController(this)) , m_designerScene(nullptr) , m_designerView(nullptr) , m_document(document) { setObjectName("SampleView"); createSubWindows(); connectSignals(); } void SampleView::toggleRealSpaceView() { m_docks->toggleDock(REALSPACEPANEL); } void SampleView::fillViewMenu(QMenu* menu) { m_docks->addDockActionsToMenu(menu); menu->addSeparator(); QAction* action = new QAction(menu); action->setText("Reset to default layout"); connect(action, &QAction::triggered, this, &SampleView::resetLayout); menu->addAction(action); } void SampleView::createSubWindows() { m_designerScene = new DesignerScene(this, m_document); m_designerView = new DesignerView(m_designerScene, this); m_toolBox = new SampleToolBox(this); m_treeWidget = new SampleTreeWidget(this, m_document->sampleModel()); m_propertyWidget = new SamplePropertyWidget(m_treeWidget->treeView()->selectionModel(), this); m_scriptPanel = new ScriptPanel(m_document->sampleModel(), this); m_realSpacePanel = new RealSpacePanel(m_document->sampleModel(), m_treeWidget->treeView()->selectionModel(), this); m_docks->addWidget(TOOLBOX, m_toolBox, Qt::LeftDockWidgetArea); m_docks->addWidget(SAMPLE_TREE, m_treeWidget, Qt::RightDockWidgetArea); m_docks->addWidget(PROPERTY_EDITOR, m_propertyWidget, Qt::RightDockWidgetArea); m_docks->addWidget(INFO, m_scriptPanel, Qt::BottomDockWidgetArea); m_docks->addWidget(REALSPACEPANEL, m_realSpacePanel, Qt::BottomDockWidgetArea); connect(m_scriptPanel, &ScriptPanel::widgetHeightRequest, m_docks, &DocksController::setDockHeightForWidget); m_designerScene->setSelectionModel( m_treeWidget->treeView()->selectionModel(), dynamic_cast<FilterPropertyProxy*>( const_cast<QAbstractItemModel*>(m_treeWidget->treeView()->model()))); setCentralWidget(m_designerView); resetLayout(); } void SampleView::connectSignals() { // toolBar should be initialized after MaterialBrowser m_toolBar = new SampleToolBar(this); connect(m_toolBar, &SampleToolBar::deleteItems, m_designerView, &DesignerView::deleteSelectedItems); connect(m_toolBar, &SampleToolBar::selectionMode, m_designerView, &DesignerView::onSelectionMode); connect(m_designerView, &DesignerView::selectionModeChanged, m_toolBar, &SampleToolBar::onViewSelectionMode); connect(m_toolBar, &SampleToolBar::centerView, m_designerView, &DesignerView::onCenterView); connect(m_toolBar, &SampleToolBar::changeScale, m_designerView, &DesignerView::onChangeScale); connect(m_designerScene, &DesignerScene::selectionModeChangeRequest, m_designerView, &DesignerView::onSelectionMode); addToolBar(m_toolBar); } void SampleView::resetLayout() { m_docks->resetLayout(); tabifyDockWidget(m_docks->findDock(REALSPACEPANEL), m_docks->findDock(INFO)); m_docks->findDock(REALSPACEPANEL)->raise(); // makes first tab active m_docks->findDock(REALSPACEPANEL)->hide(); m_docks->findDock(INFO)->hide(); }