BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SpecularDataCanvas.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/SpecularDataWidgets/SpecularDataCanvas.cpp
6 //! @brief Implements class SpecularDataCanvas
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 
22 #include <qcustomplot.h>
23 
25  : SessionItemWidget(parent)
26  , m_plot_canvas(new SpecularPlotCanvas)
27  , m_reset_view_action(nullptr)
28  , m_save_plot_action(nullptr)
29 
30 {
31  QVBoxLayout* vlayout = new QVBoxLayout(this);
32  vlayout->setSpacing(0);
33  vlayout->setContentsMargins(0, 0, 0, 0);
34  vlayout->addWidget(m_plot_canvas);
35  setLayout(vlayout);
36  setStyleSheet("background-color:white;");
37 
38  initActions();
39 
41 
42  enableDeprecatedOnMousePress(true); // true for legacy reasons
43 }
44 
46 {
47  SessionItemWidget::setItem(intensityItem);
48  m_plot_canvas->setItem(intensityItem);
49 }
50 
52 {
53  return QSize(500, 400);
54 }
55 
57 {
58  return QSize(128, 128);
59 }
60 
62 {
63  return QList<QAction*>() << m_reset_view_action << m_save_plot_action;
64 }
65 
67 {
68  return m_plot_canvas->customPlot();
69 }
70 
72 {
73  if (b)
74  connect(m_plot_canvas->customPlot(), &QCustomPlot::mousePress, this,
75  &SpecularDataCanvas::onMousePress, Qt::UniqueConnection);
76  else
77  disconnect(m_plot_canvas->customPlot(), &QCustomPlot::mousePress, this,
79 }
80 
82 {
84 }
85 
87 {
88  QString dirname = AppSvc::projectManager()->userExportDir();
89  SavePlotAssistant saveAssistant;
90  saveAssistant.savePlot(dirname, m_plot_canvas->customPlot(),
91  specularDataItem()->getOutputData());
92 }
93 
94 void SpecularDataCanvas::onMousePress(QMouseEvent* event)
95 {
96  if (event->button() == Qt::RightButton)
97  emit customContextMenuRequested(event->globalPos());
98 }
99 
101 {
102  SpecularDataItem* result = dynamic_cast<SpecularDataItem*>(currentItem());
103  ASSERT(result);
104  return result;
105 }
106 
107 // TODO: try to reuse IntensityDataCanvas::initActions somehow
109 {
110  m_reset_view_action = new QAction(this);
111  m_reset_view_action->setText("Center view");
112  m_reset_view_action->setIcon(QIcon(":/images/camera-metering-center.svg"));
113  m_reset_view_action->setToolTip("Center view\n"
114  "x,y axes range will be set to default");
115  connect(m_reset_view_action, &QAction::triggered, this, &SpecularDataCanvas::onResetViewAction);
116 
117  m_save_plot_action = new QAction(this);
118  m_save_plot_action->setText("Save");
119  m_save_plot_action->setIcon(QIcon(":/images/content-save-outline.svg"));
120  m_save_plot_action->setToolTip("Save plot");
121  connect(m_save_plot_action, &QAction::triggered, this, &SpecularDataCanvas::onSavePlotAction);
122 }
Defines class AppSvc.
#define ASSERT(condition)
Definition: Assert.h:31
Defines class ProjectManager.
Defines class SavePlotAssistant.
Defines class SpecularDataCanvas.
Defines class SpecularDataItem.
Defines class ColorMapCanvas.
static ProjectManager * projectManager()
Definition: AppSvc.cpp:18
QString userExportDir() const
Returns directory name suitable for saving plots.
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)
The SessionItemWidget class is a base for all widgets representing the content of SessionItem.
SessionItem * currentItem()
virtual void setItem(SessionItem *item)
void setItem(SessionItem *intensityItem) override
QList< QAction * > actionList() override
SpecularPlotCanvas * m_plot_canvas
void onMousePress(QMouseEvent *event)
QSize minimumSizeHint() const override
SpecularDataCanvas(QWidget *parent=nullptr)
QCustomPlot * customPlot()
SpecularDataItem * specularDataItem()
void enableDeprecatedOnMousePress(bool b)
Enable or disable the onMousePress() handler.
QSize sizeHint() const override
void resetView()
Set axes viewport to original data.
The SpecularPlotCanvas class contains SpecularPlot for specular data presentation,...
void setItem(SessionItem *specularDataItem) override
QCustomPlot * customPlot()
void setStatusLabelEnabled(bool flag)
Defines various constants for plotting.