24 #include <QFileDialog>
25 #include <QMessageBox>
26 #include <QPushButton>
27 #include <QStandardPaths>
30 #include <QTextStream>
32 #include <QVBoxLayout>
38 , m_textEdit(new QTextEdit)
41 setWindowTitle(
"Python Script View");
42 setMinimumSize(128, 128);
44 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
48 m_toolBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
49 const int size = style()->pixelMetric(QStyle::PM_SmallIconSize);
50 m_toolBar->setIconSize(QSize(size, size));
51 m_toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
53 QPushButton* exportToFileButton =
new QPushButton;
54 exportToFileButton->setText(
"Save to file");
55 exportToFileButton->setToolTip(
"Opens dialog to save given script into the file");
56 connect(exportToFileButton, &QPushButton::clicked,
this,
58 exportToFileButton->setAutoDefault(
false);
62 QFont textFont(
"Monospace");
65 m_textEdit->setLineWrapMode(QTextEdit::NoWrap);
67 Q_UNUSED(highlighter);
69 QVBoxLayout* mainLayout =
new QVBoxLayout;
70 mainLayout->setContentsMargins(0, 0, 0, 0);
71 mainLayout->setMargin(0);
72 mainLayout->setSpacing(0);
76 setLayout(mainLayout);
78 setAttribute(Qt::WA_DeleteOnClose,
true);
85 const QString& outputDir)
91 const auto simulation =
98 }
catch (
const std::exception& ex) {
101 "Generation of Python Script failed. Code is not complete.\n\n"
102 "It can happen if sample requires further assembling or some of sample parameters "
103 "are not valid. See details below.\n\n%1")
104 .arg(QString::fromStdString(ex.what()));
113 if (dirname.isEmpty())
114 dirname = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
116 QString filters(
"Python scripts (*.py)");
117 QString defaultFilter(
"Python scripts (*.py)");
118 QString defaultName = dirname +
"/untitled";
121 QFileDialog::getSaveFileName(
nullptr,
"Save file", defaultName, filters, &defaultFilter);
123 if (fileName.isEmpty())
126 if (!fileName.endsWith(
".py"))
129 QFile file(fileName);
130 if (!file.open(QIODevice::WriteOnly)) {
131 QMessageBox warning_dialog(
this);
132 warning_dialog.setIcon(QMessageBox::Warning);
133 warning_dialog.setText(
"File could not be opened for writing!");
134 warning_dialog.exec();
137 QTextStream out(&file);
Defines class DesignerHelper.
Defines class DomainSimulationBuilder.
Defines ExportToPython namespace.
Defines class GISASSimulation.
Defines InstrumentItems classes.
Defines class PythonSyntaxHighlighter.
DefinesStyleUtils namespace.
Defines class WarningSign.
static int getPythonEditorFontSize()
Implementation of highlighting for Python code.
The SimulationOptionsItem class holds simulation status (run policy, number of threads,...
The WarningSign controls appearance of WarningSignWidget on top of parent widget.
void clear()
Clears warning message;.
void setWarningMessage(const QString &warningMessage)
Shows warning sign on the screen.
std::unique_ptr< ISimulation > createSimulation(const MultiLayerItem *sampleItem, const InstrumentItem *instrumentItem, const SimulationOptionsItem *optionsItem=nullptr)
Creates domain simulation from sample and instrument items.
std::string simulationPlotCode(const ISimulation &simulation)
void setResizable(QDialog *dialog)
Make modal dialog resizable.