BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
gui2::ImportDataEditor Class Reference

Main editor to import user data. More...

Inheritance diagram for gui2::ImportDataEditor:
[legend]
Collaboration diagram for gui2::ImportDataEditor:
[legend]

Public Member Functions

 ImportDataEditor (ExperimentalDataModel *model, QWidget *parent=nullptr)
 

Private Member Functions

std::pair< std::vector< std::string >, int > canvasInfo () const
 Returns vector of canvas display name together with index of currently selected canvas. More...
 
void invokeImportDialog ()
 Invoke the data load dialog and connect its state. More...
 
void onImportDialogAccept (const std::vector< GraphImportData > &graph_data, CanvasItem *canvas)
 
DataSelectionModelselectionModel () const
 
void setupConnections ()
 

Private Attributes

ExperimentalDataModelm_dataModel {nullptr}
 
DataSelectorWidgetm_dataSelectorWidget {nullptr}
 
ImportDataEditorActionsm_editorActions {nullptr}
 
ImportDataEditorToolBarm_editorToolBar {nullptr}
 
GraphCanvasWidgetm_graphCanvasWidget {nullptr}
 
DataViewModelm_viewModel {nullptr}
 

Detailed Description

Main editor to import user data.

Definition at line 36 of file importdataeditor.h.

Constructor & Destructor Documentation

◆ ImportDataEditor()

gui2::ImportDataEditor::ImportDataEditor ( ExperimentalDataModel model,
QWidget *  parent = nullptr 
)

Definition at line 34 of file importdataeditor.cpp.

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 
55  m_viewModel->setRootSessionItem(model->canvasContainer());
56 
58 }
void setRootSessionItem(SessionItem *item)
Definition: viewmodel.cpp:52
DataSelectionModel * selectionModel() const
void setSelectionModel(DataSelectionModel *selection_model)
DataSelectorWidget * m_dataSelectorWidget
ImportDataEditorActions * m_editorActions
GraphCanvasWidget * m_graphCanvasWidget
ExperimentalDataModel * m_dataModel
DataViewModel * m_viewModel
ImportDataEditorToolBar * m_editorToolBar

References gui2::ExperimentalDataModel::canvasContainer(), m_dataSelectorWidget, m_editorActions, m_editorToolBar, m_graphCanvasWidget, m_viewModel, gui2::DataSelectorWidget::selectionModel(), ModelView::ViewModel::setRootSessionItem(), gui2::ImportDataEditorActions::setSelectionModel(), and setupConnections().

Here is the call graph for this function:

Member Function Documentation

◆ canvasInfo()

std::pair< std::vector< std::string >, int > gui2::ImportDataEditor::canvasInfo ( ) const
private

Returns vector of canvas display name together with index of currently selected canvas.

Definition at line 100 of file importdataeditor.cpp.

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 }
CanvasItem * activeCanvas() const
Returns active canvas.
DataSelectionModel * selectionModel() const
int IndexOfItem(It begin, It end, const T &item)
Returns index corresponding to the first occurance of the item in the container.

References gui2::DataSelectionModel::activeCanvas(), ModelView::Utils::IndexOfItem(), m_dataModel, and selectionModel().

Referenced by invokeImportDialog().

Here is the call graph for this function:

◆ invokeImportDialog()

void gui2::ImportDataEditor::invokeImportDialog ( )
private

Invoke the data load dialog and connect its state.

Definition at line 79 of file importdataeditor.cpp.

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 }
void onImportDialogAccept(const std::vector< GraphImportData > &graph_data, CanvasItem *canvas)
std::pair< std::vector< std::string >, int > canvasInfo() const
Returns vector of canvas display name together with index of currently selected canvas.

References canvasInfo(), gui2::DataLoaderDialog::fileNames(), gui2::DataLoaderDialog::graphImportData(), gui2::DataLoaderDialog::invokeFileSelectorDialog(), m_dataModel, onImportDialogAccept(), gui2::DataLoaderDialog::setTargetCanvas(), and gui2::DataLoaderDialog::targetCanvasIndex().

Referenced by setupConnections().

Here is the call graph for this function:

◆ onImportDialogAccept()

void gui2::ImportDataEditor::onImportDialogAccept ( const std::vector< GraphImportData > &  graph_data,
CanvasItem canvas 
)
private

Definition at line 110 of file importdataeditor.cpp.

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 }
void selectItem(ModelView::SessionItem *item)
Set the selection on a single item.
ModelView::GraphItem * addGraph(const GraphImportData &graph_data, CanvasItem &target_canvas)
Adds graph to 'target_canvas' and returns the result.

References gui2::ExperimentalDataModel::addCanvas(), gui2::ExperimentalDataModel::addGraph(), m_dataModel, selectionModel(), and gui2::DataSelectionModel::selectItem().

Referenced by invokeImportDialog().

Here is the call graph for this function:

◆ selectionModel()

DataSelectionModel * gui2::ImportDataEditor::selectionModel ( ) const
private

Definition at line 120 of file importdataeditor.cpp.

121 {
123 }

References m_dataSelectorWidget, and gui2::DataSelectorWidget::selectionModel().

Referenced by canvasInfo(), onImportDialogAccept(), and setupConnections().

Here is the call graph for this function:

◆ setupConnections()

void gui2::ImportDataEditor::setupConnections ( )
private

Definition at line 60 of file importdataeditor.cpp.

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 }
void setItem(CanvasItem *canvas_item)
void invokeImportDialog()
Invoke the data load dialog and connect its state.

References gui2::DataSelectionModel::activeCanvas(), invokeImportDialog(), gui2::ImportDataEditorActions::invokeImportDialogRequest(), m_dataSelectorWidget, m_editorActions, m_editorToolBar, m_graphCanvasWidget, gui2::DataSelectorWidget::selectionChanged(), selectionModel(), gui2::GraphCanvasWidget::setItem(), gui2::GraphCanvasWidget::updateViewport(), and gui2::ImportDataEditorToolBar::updateViewportRequest().

Referenced by ImportDataEditor().

Here is the call graph for this function:

Member Data Documentation

◆ m_dataModel

ExperimentalDataModel* gui2::ImportDataEditor::m_dataModel {nullptr}
private

Definition at line 50 of file importdataeditor.h.

Referenced by canvasInfo(), invokeImportDialog(), and onImportDialogAccept().

◆ m_dataSelectorWidget

DataSelectorWidget* gui2::ImportDataEditor::m_dataSelectorWidget {nullptr}
private

Definition at line 54 of file importdataeditor.h.

Referenced by ImportDataEditor(), selectionModel(), and setupConnections().

◆ m_editorActions

ImportDataEditorActions* gui2::ImportDataEditor::m_editorActions {nullptr}
private

Definition at line 52 of file importdataeditor.h.

Referenced by ImportDataEditor(), and setupConnections().

◆ m_editorToolBar

ImportDataEditorToolBar* gui2::ImportDataEditor::m_editorToolBar {nullptr}
private

Definition at line 53 of file importdataeditor.h.

Referenced by ImportDataEditor(), and setupConnections().

◆ m_graphCanvasWidget

GraphCanvasWidget* gui2::ImportDataEditor::m_graphCanvasWidget {nullptr}
private

Definition at line 55 of file importdataeditor.h.

Referenced by ImportDataEditor(), and setupConnections().

◆ m_viewModel

DataViewModel* gui2::ImportDataEditor::m_viewModel {nullptr}
private

Definition at line 51 of file importdataeditor.h.

Referenced by ImportDataEditor().


The documentation for this class was generated from the following files: