Skip to content
Snippets Groups Projects
SampleView.cpp 4.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • //  ************************************************************************************************
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    //
    
    //  BornAgain: simulate and fit reflection and scattering
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    //
    
    t.knopff's avatar
    t.knopff committed
    //! @file      GUI/Views/SampleView.cpp
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    //! @brief     Implements class SampleView
    //!
    
    //! @homepage  http://www.bornagainproject.org
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    //! @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)
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    //
    
    //  ************************************************************************************************
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    
    
    t.knopff's avatar
    t.knopff committed
    #include "GUI/Views/SampleView.h"
    
    #include "Base/Utils/Assert.h"
    
    t.knopff's avatar
    t.knopff committed
    #include "GUI/Models/ApplicationModels.h"
    #include "GUI/Models/FilterPropertyProxy.h"
    #include "GUI/Views/CommonWidgets/DocksController.h"
    
    Matthias Puchner's avatar
    Matthias Puchner committed
    #include "GUI/Views/SampleDesigner/DesignerScene.h"
    #include "GUI/Views/SampleDesigner/DesignerView.h"
    
    t.knopff's avatar
    t.knopff committed
    #include "GUI/Views/SampleDesigner/RealSpacePanel.h"
    #include "GUI/Views/SampleDesigner/SamplePropertyWidget.h"
    #include "GUI/Views/SampleDesigner/SampleToolBar.h"
    
    #include "GUI/Views/SampleDesigner/SampleToolBox.h"
    
    t.knopff's avatar
    t.knopff committed
    #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)
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        : 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);
    
    Pospelov, Gennady's avatar
    Pospelov, Gennady committed
    }
    
    void SampleView::createSubWindows()
    {
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        m_designerScene = new DesignerScene(this, m_document);
        m_designerView = new DesignerView(m_designerScene, this);
    
    
        m_toolBox = new SampleToolBox(this);
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        m_treeWidget = new SampleTreeWidget(this, m_document->sampleModel());
    
        m_propertyWidget = new SamplePropertyWidget(m_treeWidget->treeView()->selectionModel(), this);
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        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);
    
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        m_designerScene->setSelectionModel(
    
            m_treeWidget->treeView()->selectionModel(),
            dynamic_cast<FilterPropertyProxy*>(
                const_cast<QAbstractItemModel*>(m_treeWidget->treeView()->model())));
    
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        setCentralWidget(m_designerView);
    
        resetLayout();
    
    void SampleView::connectSignals()
    {
    
        // toolBar should be initialized after MaterialBrowser
    
        m_toolBar = new SampleToolBar(this);
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        connect(m_toolBar, &SampleToolBar::deleteItems, m_designerView,
    
                &DesignerView::deleteSelectedItems);
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        connect(m_toolBar, &SampleToolBar::selectionMode, m_designerView,
    
                &DesignerView::onSelectionMode);
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        connect(m_designerView, &DesignerView::selectionModeChanged, m_toolBar,
    
                &SampleToolBar::onViewSelectionMode);
    
    Matthias Puchner's avatar
    Matthias Puchner committed
        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);
    
        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();