BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
importdataeditor.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file gui2/importdataview/importdataeditor.cpp
6 //! @brief Implements class CLASS?
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2020
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
25 #include "mvvm/model/modelutils.h"
27 #include <QSplitter>
28 #include <QVBoxLayout>
29 
30 using namespace ModelView;
31 
32 namespace gui2 {
33 
34 ImportDataEditor::ImportDataEditor(ExperimentalDataModel* model, QWidget* parent)
35  : QWidget(parent)
36  , m_dataModel(model)
37  , m_viewModel(new DataViewModel(model, this))
38  , m_editorActions(new ImportDataEditorActions(m_dataModel, this))
39  , m_editorToolBar(new ImportDataEditorToolBar(m_editorActions, this))
40  , m_dataSelectorWidget(new DataSelectorWidget(m_viewModel))
41  , m_graphCanvasWidget(new GraphCanvasWidget)
42 {
43  auto layout = new QVBoxLayout(this);
44  layout->setContentsMargins(0, 0, 0, 0);
45 
46  auto splitter = new QSplitter;
47  splitter->addWidget(m_dataSelectorWidget);
48  splitter->addWidget(m_graphCanvasWidget);
49  splitter->setSizes(QList<int>() << 150 << 300);
50 
51  layout->addWidget(m_editorToolBar);
52  layout->addWidget(splitter);
53 
56 
58 }
59 
61 {
62  // connect toolbar with this editor
64  [this]() { m_graphCanvasWidget->updateViewport(); });
65 
66  // connect selection model with this
67  auto on_selection_changed = [this]() {
69  };
70  connect(m_dataSelectorWidget, &DataSelectorWidget::selectionChanged, on_selection_changed);
71 
72  // connect actions
75 }
76 
77 //! Invoke the data load dialog and connect its state.
78 
80 {
81  DataLoaderDialog dialog(this);
82 
83  auto [names, index] = canvasInfo();
84  dialog.setTargetCanvas(names, index);
85  dialog.invokeFileSelectorDialog();
86  if (dialog.fileNames().empty())
87  return;
88 
89  if (dialog.exec() == QDialog::Accepted) {
90  auto canvases = Utils::FindItems<CanvasItem>(m_dataModel);
91  CanvasItem* target =
92  dialog.targetCanvasIndex() >= 0 ? canvases[dialog.targetCanvasIndex()] : nullptr;
93 
94  onImportDialogAccept(dialog.graphImportData(), target);
95  }
96 }
97 
98 //! Returns vector of canvas display name together with index of currently selected canvas.
99 
100 std::pair<std::vector<std::string>, int> ImportDataEditor::canvasInfo() const
101 {
102  std::vector<std::string> names;
103  auto canvases = Utils::FindItems<CanvasItem>(m_dataModel);
104  auto current_canvas = selectionModel()->activeCanvas();
105  std::transform(canvases.begin(), canvases.end(), std::back_inserter(names),
106  [](auto x) { return x->displayName(); });
107  return std::make_pair(names, ModelView::Utils::IndexOfItem(canvases, current_canvas));
108 }
109 
110 void ImportDataEditor::onImportDialogAccept(const std::vector<GraphImportData>& graph_data,
111  CanvasItem* canvas)
112 {
113  if (!canvas)
114  canvas = m_dataModel->addCanvas();
115  for (auto& data : graph_data)
116  m_dataModel->addGraph(data, *canvas);
117  selectionModel()->selectItem(canvas);
118 }
119 
121 {
123 }
124 
125 } // namespace gui2
void setRootSessionItem(SessionItem *item)
Definition: viewmodel.cpp:52
Holds a collection of GraphItem's for simultaneous plotting, as well as all information related to pl...
Main dialog for the data loader.
int targetCanvasIndex() const
Returns index of target canvas for graph import.
void setTargetCanvas(const std::vector< std::string > &canvas_names, int current_index)
Set list of target canvas to define entr where to import.
QStringList fileNames() const
std::vector< GraphImportData > graphImportData() const
Returns the result of whole parsing.
void invokeFileSelectorDialog()
Invokes file selector dialog.
Custom selection model for data view model (AbstractViewModel).
CanvasItem * activeCanvas() const
Returns active canvas.
void selectItem(ModelView::SessionItem *item)
Set the selection on a single item.
Widget to select graphs and look at their properties.
DataSelectionModel * selectionModel() const
View model for ExperimentalDataModel with drag-and-drop support.
Definition: dataviewmodel.h:31
The model to store imported reflectometry data.
CanvasContainerItem * canvasContainer() const
Returns the canvas container of the model.
ModelView::GraphItem * addGraph(const GraphImportData &graph_data, CanvasItem &target_canvas)
Adds graph to 'target_canvas' and returns the result.
Widget to show canvas with graph collection.
void setItem(CanvasItem *canvas_item)
Actions for ImportDataEditor.
void setSelectionModel(DataSelectionModel *selection_model)
Toolbar for ImportDataEditor.
void onImportDialogAccept(const std::vector< GraphImportData > &graph_data, CanvasItem *canvas)
DataSelectorWidget * m_dataSelectorWidget
ImportDataEditorActions * m_editorActions
GraphCanvasWidget * m_graphCanvasWidget
ExperimentalDataModel * m_dataModel
DataViewModel * m_viewModel
ImportDataEditorToolBar * m_editorToolBar
std::pair< std::vector< std::string >, int > canvasInfo() const
Returns vector of canvas display name together with index of currently selected canvas.
DataSelectionModel * selectionModel() const
void invokeImportDialog()
Invoke the data load dialog and connect its state.
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
int IndexOfItem(It begin, It end, const T &item)
Returns index corresponding to the first occurance of the item in the container.
materialitems.h Collection of materials to populate MaterialModel.
Based on Qt example "codeeditor" Copyright (C) 2016 The Qt Company Ltd.
Definition: app_constants.h:20