BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SavePlotAssistant Class Reference

Assistant class which contains all logic for saving IntensityData to various formats from IntensityDataPlotWidget. More...

Classes

class  Format
 

Public Member Functions

void savePlot (const QString &dirname, QCustomPlot *plot, OutputData< double > *output_data)
 

Private Member Functions

QString composeFileName (const QString &fileName, const QString &filterName) const
 Compose file name to save plot from information provided by QFileDialog. More...
 
QString getExtensionFromFilterName (const QString &filterName) const
 
QString getFilterString () const
 Returns string contraining all defined filters in the format suitable for QFileDialog. More...
 
bool isJpgFile (const QString &fileName) const
 
bool isPdfFile (const QString &fileName) const
 
bool isPngFile (const QString &fileName) const
 
bool isValidExtension (const QString &fileName) const
 
void saveToFile (const QString &dirname, QCustomPlot *plot, OutputData< double > *output_data)
 

Static Private Attributes

static QVector< Formatm_formats = initializeFormats()
 

Detailed Description

Assistant class which contains all logic for saving IntensityData to various formats from IntensityDataPlotWidget.

Definition at line 27 of file SavePlotAssistant.h.

Member Function Documentation

◆ composeFileName()

QString SavePlotAssistant::composeFileName ( const QString &  fileName,
const QString &  filterName 
) const
private

Compose file name to save plot from information provided by QFileDialog.

Definition at line 111 of file SavePlotAssistant.cpp.

112 {
113  QString result;
114  if (!fileName.isEmpty() && !filterName.isEmpty()) {
115  if (isValidExtension(fileName)) {
116  result = fileName;
117  } else {
118  result = fileName + getExtensionFromFilterName(filterName);
119  }
120  }
121  return result;
122 }
QString getExtensionFromFilterName(const QString &filterName) const
bool isValidExtension(const QString &fileName) const

References getExtensionFromFilterName(), and isValidExtension().

Referenced by savePlot().

Here is the call graph for this function:

◆ getExtensionFromFilterName()

QString SavePlotAssistant::getExtensionFromFilterName ( const QString &  filterName) const
private

Definition at line 134 of file SavePlotAssistant.cpp.

135 {
136  for (int i = 0; i < m_formats.size(); ++i) {
137  if (m_formats[i].m_filter == filterName) {
138  return m_formats[i].m_file_extention;
139  }
140  }
141  return "";
142 }
static QVector< Format > m_formats

References m_formats.

Referenced by composeFileName().

◆ getFilterString()

QString SavePlotAssistant::getFilterString ( ) const
private

Returns string contraining all defined filters in the format suitable for QFileDialog.

Definition at line 99 of file SavePlotAssistant.cpp.

100 {
101  QString result;
102  for (int i = 0; i < m_formats.size(); ++i) {
103  result.append(m_formats[i].m_filter);
104  if (i != m_formats.size() - 1)
105  result.append(";;");
106  }
107  return result;
108 }

References m_formats.

Referenced by savePlot().

◆ isJpgFile()

bool SavePlotAssistant::isJpgFile ( const QString &  fileName) const
private

Definition at line 149 of file SavePlotAssistant.cpp.

150 {
151  return fileName.endsWith(jpg_extension, Qt::CaseInsensitive);
152 }

Referenced by saveToFile().

◆ isPdfFile()

bool SavePlotAssistant::isPdfFile ( const QString &  fileName) const
private

Definition at line 154 of file SavePlotAssistant.cpp.

155 {
156  return fileName.endsWith(pdf_extension, Qt::CaseInsensitive);
157 }

Referenced by saveToFile().

◆ isPngFile()

bool SavePlotAssistant::isPngFile ( const QString &  fileName) const
private

Definition at line 144 of file SavePlotAssistant.cpp.

145 {
146  return fileName.endsWith(png_extension, Qt::CaseInsensitive);
147 }

Referenced by saveToFile().

◆ isValidExtension()

bool SavePlotAssistant::isValidExtension ( const QString &  fileName) const
private

Definition at line 124 of file SavePlotAssistant.cpp.

125 {
126  for (int i = 0; i < m_formats.size(); ++i) {
127  if (fileName.endsWith(m_formats[i].m_file_extention, Qt::CaseInsensitive)) {
128  return true;
129  }
130  }
131  return false;
132 }

References m_formats.

Referenced by composeFileName().

◆ savePlot()

void SavePlotAssistant::savePlot ( const QString &  dirname,
QCustomPlot *  plot,
OutputData< double > *  output_data 
)

Definition at line 53 of file SavePlotAssistant.cpp.

56 {
57  QString selectedFilter("*.png");
58  QString defaultName = dirname + "/untitled";
59  QString fileName = QFileDialog::getSaveFileName(0, "Save Plot", defaultName, getFilterString(),
60  &selectedFilter);
61 
62  QString nameToSave = composeFileName(fileName, selectedFilter);
63 
64  if (!nameToSave.isEmpty()) {
65  try {
66  saveToFile(nameToSave, plot, output_data);
67  } catch (const std::exception& ex) {
68  QString message = "Attempt to save file with the name '";
69  message.append(nameToSave);
70  message.append("' has failed with following error message\n\n");
71  message.append(QString::fromStdString(ex.what()));
72  QMessageBox::warning(0, "Houston, we have a problem.", message);
73  }
74  }
75 }
QString composeFileName(const QString &fileName, const QString &filterName) const
Compose file name to save plot from information provided by QFileDialog.
QString getFilterString() const
Returns string contraining all defined filters in the format suitable for QFileDialog.
void saveToFile(const QString &dirname, QCustomPlot *plot, OutputData< double > *output_data)
void warning(QWidget *parent, const QString &title, const QString &text, const QString &detailedText)
Definition: GUIHelpers.cpp:74

References composeFileName(), getFilterString(), saveToFile(), and GUIHelpers::warning().

Referenced by IntensityDataCanvas::onSavePlotAction(), SpecularDataCanvas::onSavePlotAction(), and MaskEditorCanvas::onSavePlotRequest().

Here is the call graph for this function:

◆ saveToFile()

void SavePlotAssistant::saveToFile ( const QString &  dirname,
QCustomPlot *  plot,
OutputData< double > *  output_data 
)
private

Definition at line 77 of file SavePlotAssistant.cpp.

79 {
80  if (isPngFile(fileName)) {
81  plot->savePng(fileName);
82  }
83 
84  else if (isJpgFile(fileName)) {
85  plot->saveJpg(fileName);
86  }
87 
88  else if (isPdfFile(fileName)) {
89  plot->savePdf(fileName, plot->width(), plot->height());
90  }
91 
92  else {
93  ASSERT(output_data);
94  IntensityDataIOFactory::writeOutputData(*output_data, fileName.toStdString());
95  }
96 }
#define ASSERT(condition)
Definition: Assert.h:31
static void writeOutputData(const OutputData< double > &data, const std::string &file_name)
Writes OutputData in file.
bool isPdfFile(const QString &fileName) const
bool isJpgFile(const QString &fileName) const
bool isPngFile(const QString &fileName) const

References ASSERT, isJpgFile(), isPdfFile(), isPngFile(), and IntensityDataIOFactory::writeOutputData().

Referenced by savePlot().

Here is the call graph for this function:

Member Data Documentation

◆ m_formats

QVector< SavePlotAssistant::Format > SavePlotAssistant::m_formats = initializeFormats()
staticprivate

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