diff --git a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp index be2e8602d9..cdb4005d61 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp @@ -23,6 +23,9 @@ ***************************************************************************/ #include "PreCompiled.h" +#ifndef _PreComp_ +# include +#endif #include "DlgSettingsFemElmerImp.h" #include "ui_DlgSettingsFemElmer.h" @@ -35,6 +38,11 @@ DlgSettingsFemElmerImp::DlgSettingsFemElmerImp(QWidget* parent) , ui(new Ui_DlgSettingsFemElmerImp) { ui->setupUi(this); + + connect(ui->fc_grid_binary_path, &Gui::PrefFileChooser::fileNameChanged, + this, &DlgSettingsFemElmerImp::onfileNameChanged); + connect(ui->fc_elmer_binary_path, &Gui::PrefFileChooser::fileNameChanged, + this, &DlgSettingsFemElmerImp::onfileNameChanged); } DlgSettingsFemElmerImp::~DlgSettingsFemElmerImp() @@ -73,4 +81,14 @@ void DlgSettingsFemElmerImp::changeEvent(QEvent* e) } } +void DlgSettingsFemElmerImp::onfileNameChanged(QString FileName) +{ + if (!QFileInfo::exists(FileName)) { + QMessageBox::critical(this, tr("File does not exist"), + tr("The specified executable \n'%1'\n does not exist!\n" + "Specify another file please.").arg(FileName)); + return; + } +} + #include "moc_DlgSettingsFemElmerImp.cpp" diff --git a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h index 746c37e9c0..88b93b6a82 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h +++ b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h @@ -39,6 +39,9 @@ public: DlgSettingsFemElmerImp( QWidget* parent = nullptr ); ~DlgSettingsFemElmerImp(); +protected Q_SLOTS: + void onfileNameChanged(QString FileName); + protected: void saveSettings(); void loadSettings(); diff --git a/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.cpp index beebeeea09..e86115f9a1 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.cpp @@ -23,6 +23,9 @@ ***************************************************************************/ #include "PreCompiled.h" +#ifndef _PreComp_ +# include +#endif #include @@ -37,6 +40,9 @@ DlgSettingsFemZ88Imp::DlgSettingsFemZ88Imp(QWidget* parent) , ui(new Ui_DlgSettingsFemZ88Imp) { ui->setupUi(this); + + connect(ui->fc_z88_binary_path, &Gui::PrefFileChooser::fileNameChanged, + this, &DlgSettingsFemZ88Imp::onfileNameChanged); } DlgSettingsFemZ88Imp::~DlgSettingsFemZ88Imp() @@ -92,4 +98,32 @@ void DlgSettingsFemZ88Imp::changeEvent(QEvent* e) } } +void DlgSettingsFemZ88Imp::onfileNameChanged(QString FileName) +{ + if (!QFileInfo::exists(FileName)) { + QMessageBox::critical(this, tr("File does not exist"), + tr("The specified z88r executable \n'%1'\n does not exist!\n" + "Specify another file please.") + .arg(FileName)); + return; + } + + // since the Z88 folder is full of files like "z88h", "z88o" etc. one can easily make a + // mistake and is then lost why the solver fails. Therefore check for the correct filename. + auto strName = FileName.toStdString(); +#if defined(FC_OS_WIN32) + if (strName.substr(strName.length() - 8) != "z88r.exe") { + QMessageBox::critical(this, tr("Wrong file"), + tr("You must specify the path to the z88r.exe!")); + return; + } +#elif defined(FC_OS_LINUX) || defined(FC_OS_CYGWIN) || defined(FC_OS_MACOSX) || defined(FC_OS_BSD) + if (strName.substr(strName.length() - 4) != "z88r") { + QMessageBox::critical(this, tr("Wrong file"), + tr("You must specify the path to the z88r!")); + return; + } +#endif +} + #include "moc_DlgSettingsFemZ88Imp.cpp" diff --git a/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.h b/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.h index 94861feb16..a520492bb8 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.h +++ b/src/Mod/Fem/Gui/DlgSettingsFemZ88Imp.h @@ -40,6 +40,9 @@ public: DlgSettingsFemZ88Imp( QWidget* parent = nullptr ); ~DlgSettingsFemZ88Imp(); +protected Q_SLOTS: + void onfileNameChanged(QString FileName); + protected: void saveSettings(); void loadSettings();