BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ProjectionsEditorCanvas.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/JobWidgets/ProjectionsEditorCanvas.cpp
6 //! @brief Implements class ProjectionsEditorCanvas
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 
24 #include <QItemSelectionModel>
25 #include <QVBoxLayout>
26 
28  : QWidget(parent)
29  , m_scene(new MaskGraphicsScene(this))
30  , m_view(new MaskGraphicsView(m_scene))
31  , m_colorMap(nullptr)
32  , m_statusLabel(new PlotStatusLabel(nullptr, this))
33  , m_liveProjection(nullptr)
34  , m_model(nullptr)
35  , m_intensityDataItem(nullptr)
36  , m_currentActivity(MaskEditorFlags::HORIZONTAL_LINE_MODE)
37  , m_block_update(false)
38 {
39  setObjectName("MaskEditorCanvas");
40  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
41 
42  QVBoxLayout* mainLayout = new QVBoxLayout;
43  mainLayout->addWidget(m_view);
44  mainLayout->addWidget(m_statusLabel);
45  mainLayout->setMargin(0);
46  mainLayout->setSpacing(0);
47  setLayout(mainLayout);
48 
53 }
54 
56  const QModelIndex& shapeContainerIndex,
57  IntensityDataItem* intensityItem)
58 {
59  m_model = model;
60  m_scene->setMaskContext(model, shapeContainerIndex, intensityItem);
61  m_view->updateSize(m_view->size());
62 
63  m_containerIndex = shapeContainerIndex;
64  m_intensityDataItem = intensityItem;
65 
67 
69 }
70 
72 {
73  m_intensityDataItem = nullptr;
74  m_containerIndex = {};
75  setConnected(false);
76  m_colorMap = nullptr;
78 }
79 
80 void ProjectionsEditorCanvas::setSelectionModel(QItemSelectionModel* model)
81 {
82  getScene()->setSelectionModel(model);
83 }
84 
86 {
88  return;
89 
90  m_block_update = true;
91 
98 
99  if (m_liveProjection)
101 
102  m_block_update = false;
103 }
104 
106 {
107  if (m_block_update)
108  return;
109 
110  m_block_update = true;
111 
112  if (m_liveProjection) {
115  delete m_liveProjection;
116  m_liveProjection = nullptr;
117  }
118 
119  m_block_update = false;
120 }
121 
123 {
124  if (m_block_update)
125  return;
126 
127  m_block_update = true;
128 
129  if (m_liveProjection) {
134  }
135 
136  m_block_update = false;
137 }
138 
140 {
143 }
144 
145 void ProjectionsEditorCanvas::onActivityModeChanged(MaskEditorFlags::Activity value)
146 {
147  m_currentActivity = value;
150 }
151 
153 {
154  ASSERT(colorMap);
155  setConnected(false);
156 
157  m_colorMap = colorMap;
158  setConnected(true);
159 
160  m_statusLabel->reset();
161  m_statusLabel->addPlot(colorMap);
162 }
163 
165 {
166  if (!m_colorMap)
167  return;
168 
169  if (isConnected) {
171  &ProjectionsEditorCanvas::onEnteringColorMap, Qt::UniqueConnection);
173  &ProjectionsEditorCanvas::onLeavingColorMap, Qt::UniqueConnection);
175  &ProjectionsEditorCanvas::onPositionChanged, Qt::UniqueConnection);
176  connect(m_colorMap, &ColorMap::marginsChanged, this,
177  &ProjectionsEditorCanvas::marginsChanged, Qt::UniqueConnection);
178  }
179 
180  else {
187  disconnect(m_colorMap, &ColorMap::marginsChanged, this,
189  }
190 }
#define ASSERT(condition)
Definition: Assert.h:31
Defines class ColorMap.
Defines class IntensityDataItem.
Defines class MaskGraphicsScene.
Defines class MaskGraphicsView.
Defines MaskItems classes.
Defines class PlotStatusLabel.
Defines class ProjectionsEditorCanvas.
Defines class ScientificPlotEvent.
Defines class SessionModel.
The ColorMap class presents 2D intensity data from IntensityDataItem as color map.
Definition: ColorMap.h:36
void marginsChanged(double left, double right)
static const QString P_POSY
Definition: MaskItems.h:81
void resetView()
Set axes viewport to original data.
Help class to define various flags for MaskEditor operation.
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)
void onActivityModeChanged(MaskEditorFlags::Activity value)
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
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)
ProjectionsEditorCanvas(QWidget *parent=0)
void setSelectionModel(QItemSelectionModel *model)
MaskEditorFlags::Activity m_currentActivity
void onActivityModeChanged(MaskEditorFlags::Activity value)
void onPositionChanged(double x, double y)
void changeActivityRequest(MaskEditorFlags::Activity)
void setConnected(bool isConnected)
void setContext(SessionModel *model, const QModelIndex &shapeContainerIndex, IntensityDataItem *intensityItem)
void marginsChanged(double left, double right)
void setColorMap(ColorMap *colorMap)
SessionItem * m_liveProjection
temporary projection item matching mouse move
MaskGraphicsScene * getScene()
IntensityDataItem * m_intensityDataItem
void positionChanged(double x, double y)
ScientificPlotEvent * plotEvent()
int rowOfChild(SessionItem *child) const
Returns row index of given child.
SessionItem * parent() const
Returns parent of this item.
Definition: SessionItem.cpp:73
SessionItem * takeRow(int row)
Removes row from item and returns the item.
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
Definition: SessionModel.h:125
static const QString P_POSX
Definition: MaskItems.h:73