BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MaskEditorCanvas.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/MaskWidgets/MaskEditorCanvas.cpp
6 //! @brief Implements class MaskEditorCanvas
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
26 #include <QVBoxLayout>
27 
29  : QWidget(parent)
30  , m_scene(new MaskGraphicsScene(this))
31  , m_view(new MaskGraphicsView(m_scene))
32  , m_intensityDataItem(0)
33  , m_statusLabel(new PlotStatusLabel(0, this))
34  , m_resultsPresenter(new MaskResultsPresenter(this))
35 {
36  setObjectName("MaskEditorCanvas");
37  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
38 
39  QVBoxLayout* mainLayout = new QVBoxLayout;
40  mainLayout->addWidget(m_view);
41  mainLayout->addWidget(m_statusLabel);
42  mainLayout->setMargin(0);
43  mainLayout->setSpacing(0);
44  setLayout(mainLayout);
45 
50 }
51 
52 void MaskEditorCanvas::setMaskContext(SessionModel* model, const QModelIndex& maskContainerIndex,
53  IntensityDataItem* intensityItem)
54 {
55  m_intensityDataItem = intensityItem;
56 
57  m_scene->setMaskContext(model, maskContainerIndex, intensityItem);
58  m_resultsPresenter->setMaskContext(model, maskContainerIndex, intensityItem);
59  m_view->updateSize(m_view->size());
60 
62 }
63 
65 {
66  m_intensityDataItem = nullptr;
69 }
70 
71 void MaskEditorCanvas::setSelectionModel(QItemSelectionModel* model)
72 {
73  m_scene->setSelectionModel(model);
74 }
75 
77 {
78  return m_scene;
79 }
80 
81 void MaskEditorCanvas::onPresentationTypeRequest(MaskEditorFlags::PresentationType presentationType)
82 {
83  m_resultsPresenter->updatePresenter(presentationType);
84 
85  if (auto container = m_intensityDataItem->maskContainerItem()) {
86  bool isVisible = presentationType.testFlag(MaskEditorFlags::MASK_EDITOR);
87  for (auto mask : container->getItems())
88  mask->setItemValue(MaskItem::P_IS_VISIBLE, isVisible);
89  }
90 }
91 
92 //! Saves plot into project directory.
93 
95 {
96  QString dirname = AppSvc::projectManager()->userExportDir();
97 
98  SavePlotAssistant saveAssistant;
99  saveAssistant.savePlot(dirname, m_scene->colorMap()->customPlot(),
101 }
102 
104 {
106 
107  if (isAxisRangeMatchData()) {
108  setZoomToROI();
109  } else {
111  }
112 }
113 
114 //! Returns true if IntensityData is currently at 100% zoom level
115 
117 {
119 
121  return false;
123  return false;
125  return false;
127  return false;
128  return true;
129 }
130 
132 {
133  if (MaskContainerItem* maskContainer = m_intensityDataItem->maskContainerItem()) {
134  if (SessionItem* roiItem = maskContainer->getChildOfType("RegionOfInterest")) {
135  m_intensityDataItem->setLowerX(roiItem->getItemValue(RectangleItem::P_XLOW).toDouble());
136  m_intensityDataItem->setUpperX(roiItem->getItemValue(RectangleItem::P_XUP).toDouble());
137  m_intensityDataItem->setLowerY(roiItem->getItemValue(RectangleItem::P_YLOW).toDouble());
138  m_intensityDataItem->setUpperY(roiItem->getItemValue(RectangleItem::P_YUP).toDouble());
139  }
140  }
141 }
Defines class AppSvc.
#define ASSERT(condition)
Definition: Assert.h:31
Defines class ColorMap.
Defines class ProjectManager.
Defines class IntensityDataItem.
Defines class MaskEditorCanvas.
Defines class MaskGraphicsScene.
Defines class MaskGraphicsView.
Defines MaskItems classes.
Defines class MaskResultsPresenter.
Defines class PlotStatusLabel.
Defines class SavePlotAssistant.
static ProjectManager * projectManager()
Definition: AppSvc.cpp:18
QCustomPlot * customPlot() override
Definition: ColorMap.h:45
OutputData< double > * getOutputData()
Definition: DataItem.h:36
void setLowerX(double value)
double getYmax() const
MaskContainerItem * maskContainerItem()
double getYmin() const
returns min and max range of y-axis as given by IntensityData
void setLowerY(double value)
double getLowerY() const
returns lower and upper zoom ranges of y-axis
void resetView()
Set axes viewport to original data.
void setUpperX(double value)
double getXmin() const
returns min and max range of x-axis as given by IntensityData
double getUpperY() const
double getUpperX() const
void setUpperY(double value)
double getXmax() const
double getLowerX() const
returns lower and upper zoom ranges of x-axis
Container holding various masks as children.
Definition: MaskItems.h:24
void deleteSelectedRequest()
void onSavePlotRequest()
Saves plot into project directory.
MaskGraphicsView * m_view
bool isAxisRangeMatchData() const
Returns true if IntensityData is currently at 100% zoom level.
PlotStatusLabel * m_statusLabel
void changeActivityRequest(MaskEditorFlags::Activity)
MaskGraphicsScene * getScene()
void onPresentationTypeRequest(MaskEditorFlags::PresentationType presentationType)
MaskResultsPresenter * m_resultsPresenter
IntensityDataItem * m_intensityDataItem
void setSelectionModel(QItemSelectionModel *model)
MaskEditorCanvas(QWidget *parent=0)
MaskGraphicsScene * m_scene
void setMaskContext(SessionModel *model, const QModelIndex &maskContainerIndex, IntensityDataItem *intensityItem)
Graphics scene for MaskEditorCanvas to draw masks on top of intensity data widgets.
void setSelectionModel(QItemSelectionModel *model)
void setMaskContext(SessionModel *model, const QModelIndex &maskContainerIndex, IntensityDataItem *intensityItem)
Graphics view for MaskEditorCanvas.
void changeActivityRequest(MaskEditorFlags::Activity)
void updateSize(const QSize &newSize)
void deleteSelectedRequest()
void onResetViewRequest()
Reset given view to original zoom state. Also asks graphics scene to do the same with color map.
static const QString P_IS_VISIBLE
Definition: MaskItems.h:34
Updates bin values inside IntensityData to display current mask state.
void updatePresenter(MaskEditorFlags::PresentationType mode)
void setMaskContext(SessionModel *maskModel, const QModelIndex &maskContainerIndex, IntensityDataItem *intensityItem)
The PlotStatusLabel class shows status string as reported by DescriptedPlot in a frame.
void reset()
Disconnects all color maps from the label.
void addPlot(ScientificPlot *plot)
QString userExportDir() const
Returns directory name suitable for saving plots.
static const QString P_XUP
Definition: MaskItems.h:43
static const QString P_YLOW
Definition: MaskItems.h:42
static const QString P_YUP
Definition: MaskItems.h:44
static const QString P_XLOW
Definition: MaskItems.h:41
Assistant class which contains all logic for saving IntensityData to various formats from IntensityDa...
void savePlot(const QString &dirname, QCustomPlot *plot, OutputData< double > *output_data)
SessionItem * getChildOfType(const QString &type) const
Returns the first child of the given type.