Newer
Older
// ************************************************************************************************
// BornAgain: simulate and fit reflection and scattering
//! @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/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"
Matthias Puchner
committed
#include "GUI/mainwindow/projectdocument.h"
#include "GUI/mainwindow/projectmanager.h"
Matthias Puchner
committed
SampleView::SampleView(QWidget* parent, ProjectDocument* document)
Matthias Puchner
committed
: QMainWindow(parent), m_docks(new DocksController(this)), m_document(document)
Matthias Puchner
committed
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
DesignerScene* designerScene = new DesignerScene(this, m_document);
DesignerView* designerView = new DesignerView(designerScene, this);
auto* toolBox = new SampleToolBox(this);
auto* treeWidget = new SampleTreeWidget(this, m_document->sampleModel());
auto* propertyWidget = new SamplePropertyWidget(treeWidget->treeView()->selectionModel(), this);
auto* scriptPanel = new ScriptPanel(m_document->sampleModel(), this);
auto* realSpacePanel = new RealSpacePanel(m_document->sampleModel(),
treeWidget->treeView()->selectionModel(), this);
m_docks->addWidget(TOOLBOX, toolBox, Qt::LeftDockWidgetArea);
m_docks->addWidget(SAMPLE_TREE, treeWidget, Qt::RightDockWidgetArea);
m_docks->addWidget(PROPERTY_EDITOR, propertyWidget, Qt::RightDockWidgetArea);
m_docks->addWidget(INFO, scriptPanel, Qt::BottomDockWidgetArea);
m_docks->addWidget(REALSPACEPANEL, realSpacePanel, Qt::BottomDockWidgetArea);
connect(scriptPanel, &ScriptPanel::widgetHeightRequest, m_docks,
&DocksController::setDockHeightForWidget);
designerScene->setSelectionModel(
treeWidget->treeView()->selectionModel(),
dynamic_cast<FilterPropertyProxy*>(
const_cast<QAbstractItemModel*>(treeWidget->treeView()->model())));
setCentralWidget(designerView);
resetLayout();
// toolBar should be initialized after MaterialBrowser
auto* toolBar = new SampleToolBar(this);
connect(toolBar, &SampleToolBar::deleteItems, designerView, &DesignerView::deleteSelectedItems);
connect(toolBar, &SampleToolBar::selectionMode, designerView, &DesignerView::onSelectionMode);
connect(designerView, &DesignerView::selectionModeChanged, toolBar,
&SampleToolBar::onViewSelectionMode);
connect(toolBar, &SampleToolBar::centerView, designerView, &DesignerView::onCenterView);
connect(toolBar, &SampleToolBar::changeScale, designerView, &DesignerView::onChangeScale);
connect(designerScene, &DesignerScene::selectionModeChangeRequest, designerView,
&DesignerView::onSelectionMode);
addToolBar(toolBar);
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::resetLayout()
{
Matthias
committed
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();