16 #include "BAVersion.h"
20 #include <QApplication>
23 #include <QMessageBox>
24 #include <QPushButton>
25 #include <QTextStream>
29 QMap<QString, QString> initializeCharacterMap()
31 QMap<QString, QString> result;
32 result[
"\\"] =
"_backslash_";
33 result[
"/"] =
"_slash_";
34 result[
"\""] =
"_quote_";
35 result[
"<"] =
"_lessthan_";
36 result[
">"] =
"_greaterthan_";
37 result[
"|"] =
"_pipe_";
38 result[
"?"] =
"_questionmark_";
42 const QMap<QString, QString> invalidCharacterMap = initializeCharacterMap();
54 void information(QWidget* parent,
const QString& title,
const QString& text,
55 const QString& detailedText)
57 QScopedPointer<QMessageBox> messageBox(
new QMessageBox(parent));
59 messageBox->setWindowModality(Qt::WindowModal);
60 messageBox->setWindowTitle(QString(
"%1 - %2").arg(QApplication::applicationName()).arg(title));
61 messageBox->setText(text);
62 if (!detailedText.isEmpty())
63 messageBox->setInformativeText(detailedText);
64 messageBox->setIcon(QMessageBox::Information);
65 messageBox->addButton(QMessageBox::Ok);
69 void information(
const QString& title,
const QString& text,
const QString& detailedText)
74 void warning(QWidget* parent,
const QString& title,
const QString& text,
75 const QString& detailedText)
77 QScopedPointer<QMessageBox> messageBox(
new QMessageBox(parent));
79 messageBox->setWindowModality(Qt::WindowModal);
80 messageBox->setWindowTitle(QString(
"%1 - %2").arg(QApplication::applicationName()).arg(title));
81 messageBox->setText(text);
82 if (!detailedText.isEmpty())
83 messageBox->setInformativeText(detailedText);
84 messageBox->setIcon(QMessageBox::Warning);
85 messageBox->addButton(QMessageBox::Ok);
89 void warning(
const QString& title,
const QString& text,
const QString& detailedText)
94 bool question(QWidget* parent,
const QString& title,
const QString& text,
95 const QString& detailedText,
const QString& yesText,
const QString& noText)
97 QScopedPointer<QMessageBox> messageBox(
new QMessageBox(parent));
99 messageBox->setWindowModality(Qt::WindowModal);
100 messageBox->setWindowTitle(QString(
"%1 - %2").arg(QApplication::applicationName()).arg(title));
101 messageBox->setText(text);
102 if (!detailedText.isEmpty())
103 messageBox->setInformativeText(detailedText);
104 messageBox->setIcon(QMessageBox::Question);
105 QAbstractButton* yesButton = messageBox->addButton(yesText, QMessageBox::AcceptRole);
106 messageBox->addButton(noText, QMessageBox::RejectRole);
107 messageBox->setDefaultButton(qobject_cast<QPushButton*>(yesButton));
109 return messageBox->clickedButton() == yesButton;
112 bool okToDelete(QWidget* parent,
const QString& title,
const QString& text,
113 const QString& detailedText)
115 QScopedPointer<QMessageBox> messageBox(
new QMessageBox(parent));
117 messageBox->setWindowModality(Qt::WindowModal);
118 messageBox->setIcon(QMessageBox::Question);
119 messageBox->setWindowTitle(QString(
"%1 - %2").arg(QApplication::applicationName()).arg(title));
120 messageBox->setText(text);
121 if (!detailedText.isEmpty())
122 messageBox->setInformativeText(detailedText);
123 QAbstractButton* deleteButton = messageBox->addButton(
"&Delete", QMessageBox::AcceptRole);
124 messageBox->addButton(
"Do &Not Delete", QMessageBox::RejectRole);
125 messageBox->setDefaultButton(qobject_cast<QPushButton*>(deleteButton));
127 return messageBox->clickedButton() == deleteButton;
132 return QString::fromStdString(BornAgain::GetVersionNumber());
146 QString result = proposed_name;
147 for (
auto it = invalidCharacterMap.begin(); it != invalidCharacterMap.end(); ++it) {
148 result.replace(it.key(), it.value());
154 bool parseVersion(
const QString& version,
int& major_num,
int& minor_num,
int& patch_num)
156 major_num = minor_num = patch_num = 0;
158 QStringList nums = version.split(
".");
159 if (nums.size() != 3)
163 major_num = nums.at(0).toInt(&ok);
165 minor_num = nums.at(1).toInt(&ok);
167 patch_num = nums.at(2).toInt(&ok);
177 int ba_major(0), ba_minor(0), ba_patch(0);
178 if (!
parseVersion(version, ba_major, ba_minor, ba_patch))
181 result = ba_major * 10000 + ba_minor * 100 + ba_patch;
195 QFileInfo info(fileName);
197 return info.dir().path();
206 QFileInfo info(fileName);
207 return info.baseName();
227 QVector<double> result;
228 result.reserve(
int(data.size()));
229 std::copy(data.begin(), data.end(), std::back_inserter(result));
236 for (std::string str : container) {
237 result.append(QString::fromStdString(str));
249 QFile file(fileName);
250 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
251 throw GUIHelpers::Error(
"PyImportAssistant::readFile() -> Error. Can't read file '"
253 QTextStream in(&file);
Defines class GUIHelpers functions.
Defines class MainWindow.
Defines class RealDataItem.
QByteArray m_messageAsLatin1
virtual ~Error() noexcept
const char * what() const noexcept override
static MainWindow * instance()
Returns the one and only instance of this class.
QString getBornAgainVersionString()
QString currentDateTime()
void warning(QWidget *parent, const QString &title, const QString &text, const QString &detailedText)
QString baseName(const QString &fileName)
Returns base name of file.
bool parseVersion(const QString &version, int &major_num, int &minor_num, int &patch_num)
parses version string into 3 numbers, returns true in the case of success
void information(QWidget *parent, const QString &title, const QString &text, const QString &detailedText)
int versionCode(const QString &version)
QString getValidFileName(const QString &proposed_name)
Returns valid file name to be saved on disk.
bool okToDelete(QWidget *parent, const QString &title, const QString &text, const QString &detailedText)
QString fileDir(const QString &fileName)
Returns file directory from the full file path.
QVector< double > fromStdVector(const std::vector< double > &data)
QString readTextFile(const QString &fileName)
bool isVersionMatchMinimal(const QString &version, const QString &minimal_version)
returns true if current BornAgain version match minimal required version
bool question(QWidget *parent, const QString &title, const QString &text, const QString &detailedText, const QString &yesText, const QString &noText)
QStringList fromStdStrings(const std::vector< std::string > &container)