diff --git a/src/Mod/Fem/Gui/AppFemGui.cpp b/src/Mod/Fem/Gui/AppFemGui.cpp
index 45518d1242f3..3417a5787aaa 100755
--- a/src/Mod/Fem/Gui/AppFemGui.cpp
+++ b/src/Mod/Fem/Gui/AppFemGui.cpp
@@ -30,7 +30,9 @@
#include
#include
#include
+#include
#include
+#include "DlgSettingsFemImp.h"
#include "ViewProviderFemMesh.h"
#include "ViewProviderFemMeshShape.h"
#include "ViewProviderFemMeshShapeNetgen.h"
@@ -103,6 +105,8 @@ void FemGuiExport initFemGui()
Base::Interpreter().loadModule("FemLib");
+ // register preferences pages
+ new Gui::PrefPageProducer ("FEM");
// add resources and reloads the translators
loadFemResource();
diff --git a/src/Mod/Fem/Gui/CMakeLists.txt b/src/Mod/Fem/Gui/CMakeLists.txt
index fefd63fd571a..3c2f0c0475ad 100755
--- a/src/Mod/Fem/Gui/CMakeLists.txt
+++ b/src/Mod/Fem/Gui/CMakeLists.txt
@@ -41,6 +41,7 @@ SOURCE_GROUP("Python" FILES ${Python_SRCS})
set(FemGui_MOC_HDRS
+ DlgSettingsFemImp.h
Hypothesis.h
TaskObjectName.h
TaskCreateNodeSet.h
@@ -61,6 +62,7 @@ fc_wrap_cpp(FemGui_MOC_SRCS ${FemGui_MOC_HDRS})
SOURCE_GROUP("Moc" FILES ${FemGui_MOC_SRCS})
set(FemGui_UIC_SRCS
+ DlgSettingsFem.ui
Hypothesis.ui
TaskCreateNodeSet.ui
TaskObjectName.ui
@@ -76,6 +78,9 @@ qt4_wrap_ui(FemGui_UIC_HDRS ${FemGui_UIC_SRCS})
SET(FemGui_DLG_SRCS
${FemGui_UIC_HDRS}
+ DlgSettingsFem.ui
+ DlgSettingsFemImp.cpp
+ DlgSettingsFemImp.h
Hypothesis.ui
Hypothesis.cpp
Hypothesis.h
diff --git a/src/Mod/Fem/Gui/DlgSettingsFem.ui b/src/Mod/Fem/Gui/DlgSettingsFem.ui
new file mode 100644
index 000000000000..5b02f22834c3
--- /dev/null
+++ b/src/Mod/Fem/Gui/DlgSettingsFem.ui
@@ -0,0 +1,200 @@
+
+
+ FemGui::DlgSettingsFemImp
+
+
+
+ 0
+ 0
+ 555
+ 429
+
+
+
+ FEM
+
+
+
+ 9
+
+
+ 6
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::LeftToRight
+
+
+ CalculiX
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+
+ QLayout::SetNoConstraint
+
+
-
+
+
-
+
+
-
+
+
+ Use internal editor for .inp files
+
+
+ true
+
+
+ UseInternalEditor
+
+
+ Mod/Fem
+
+
+
+ -
+
+
-
+
+
+ false
+
+
+ External editor:
+
+
+
+ -
+
+
+ false
+
+
+ ExternalEditorPath
+
+
+ Mod/Fem
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+ Gui::FileChooser
+ QWidget
+
+
+
+ Gui::PrefFileChooser
+ Gui::FileChooser
+
+
+
+ Gui::PrefCheckBox
+ QCheckBox
+
+
+
+
+
+
+
+
+ cb_int_editor
+ toggled(bool)
+ l_ext_editor
+ setEnabled(bool)
+
+
+ 100
+ 47
+
+
+ 99
+ 76
+
+
+
+
+ cb_int_editor
+ toggled(bool)
+ l_ext_editor
+ setDisabled(bool)
+
+
+ 125
+ 49
+
+
+ 120
+ 74
+
+
+
+
+ cb_int_editor
+ toggled(bool)
+ fc_ext_editor
+ setEnabled(bool)
+
+
+ 327
+ 54
+
+
+ 323
+ 79
+
+
+
+
+ cb_int_editor
+ toggled(bool)
+ fc_ext_editor
+ setDisabled(bool)
+
+
+ 409
+ 50
+
+
+ 406
+ 78
+
+
+
+
+
diff --git a/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp
new file mode 100644
index 000000000000..18bd799cad22
--- /dev/null
+++ b/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp
@@ -0,0 +1,69 @@
+/***************************************************************************
+ * Copyright (c) 2015 FreeCAD Developers *
+ * Author: Przemo Firszt *
+ * Based on src/Mod/Raytracing/Gui/DlgSettingsRayImp.cpp *
+ * *
+ * This file is part of the FreeCAD CAx development system. *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Library General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public *
+ * License along with this library; see the file COPYING.LIB. If not, *
+ * write to the Free Software Foundation, Inc., 59 Temple Place, *
+ * Suite 330, Boston, MA 02111-1307, USA *
+ * *
+ ***************************************************************************/
+
+
+#include "PreCompiled.h"
+
+#include "DlgSettingsFemImp.h"
+#include
+
+using namespace FemGui;
+
+DlgSettingsFemImp::DlgSettingsFemImp( QWidget* parent )
+ : PreferencePage( parent )
+{
+ this->setupUi(this);
+}
+
+DlgSettingsFemImp::~DlgSettingsFemImp()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+void DlgSettingsFemImp::saveSettings()
+{
+ cb_int_editor->onSave();
+ fc_ext_editor->onSave();
+}
+
+void DlgSettingsFemImp::loadSettings()
+{
+ cb_int_editor->onRestore();
+ fc_ext_editor->onRestore();
+}
+
+/**
+ * Sets the strings of the subwidgets using the current language.
+ */
+void DlgSettingsFemImp::changeEvent(QEvent *e)
+{
+ if (e->type() == QEvent::LanguageChange) {
+ retranslateUi(this);
+ }
+ else {
+ QWidget::changeEvent(e);
+ }
+}
+
+#include "moc_DlgSettingsFemImp.cpp"
diff --git a/src/Mod/Fem/Gui/DlgSettingsFemImp.h b/src/Mod/Fem/Gui/DlgSettingsFemImp.h
new file mode 100644
index 000000000000..1a57e338d0a3
--- /dev/null
+++ b/src/Mod/Fem/Gui/DlgSettingsFemImp.h
@@ -0,0 +1,50 @@
+ /**************************************************************************
+ * Copyright (c) 2015 FreeCAD Developers *
+ * Author: Przemo Firszt *
+ * Based on src/Mod/Raytracing/Gui/DlgSettingsRayImp.h *
+ * *
+ * This file is part of the FreeCAD CAx development system. *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Library General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public *
+ * License along with this library; see the file COPYING.LIB. If not, *
+ * write to the Free Software Foundation, Inc., 59 Temple Place, *
+ * Suite 330, Boston, MA 02111-1307, USA *
+ * *
+ ***************************************************************************/
+
+
+#ifndef FEMGUI_DLGSETTINGSFEMIMP_H
+#define FEMGUI_DLGSETTINGSFEMIMP_H
+
+#include "ui_DlgSettingsFem.h"
+#include
+
+namespace FemGui {
+
+class DlgSettingsFemImp : public Gui::Dialog::PreferencePage, public Ui_DlgSettingsFemImp
+{
+ Q_OBJECT
+
+public:
+ DlgSettingsFemImp( QWidget* parent = 0 );
+ ~DlgSettingsFemImp();
+
+protected:
+ void saveSettings();
+ void loadSettings();
+ void changeEvent(QEvent *e);
+};
+
+} // namespace FemGui
+
+#endif // FEMGUI_DLGSETTINGSFEMIMP_H
diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc
index c094fd3b37e7..3b3d193d6539 100755
--- a/src/Mod/Fem/Gui/Resources/Fem.qrc
+++ b/src/Mod/Fem/Gui/Resources/Fem.qrc
@@ -17,6 +17,7 @@
icons/Fem_Result.svg
icons/Fem_ResultDisplacement.svg
icons/Fem_ResultStress.svg
+ icons/preferences-fem.svg
translations/Fem_af.qm
translations/Fem_de.qm
translations/Fem_fi.qm
diff --git a/src/Mod/Fem/Gui/Resources/icons/preferences-fem.svg b/src/Mod/Fem/Gui/Resources/icons/preferences-fem.svg
new file mode 100755
index 000000000000..7b98dcaa7e54
--- /dev/null
+++ b/src/Mod/Fem/Gui/Resources/icons/preferences-fem.svg
@@ -0,0 +1,1692 @@
+
+
+
+
diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py
index 27c1e1afc286..498fc0f89417 100644
--- a/src/Mod/Fem/MechanicalAnalysis.py
+++ b/src/Mod/Fem/MechanicalAnalysis.py
@@ -226,6 +226,7 @@ def __init__(self,object):
self.obj = object
#self.params = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem")
+ self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem")
self.Calculix = QtCore.QProcess()
self.Timer = QtCore.QTimer()
self.Timer.start(300)
@@ -543,24 +544,22 @@ def writeCalculixInputFile(self):
QApplication.restoreOverrideCursor()
+ def start_ext_editor(self, ext_editor_path, filename):
+ self.ext_editor_process = QtCore.QProcess()
+ self.ext_editor_process.execute(ext_editor_path, [filename])
+
def editCalculixInputFile(self):
filename = self.Basename + '.inp'
print 'editCalculixInputFile {}'.format(filename)
-
- # FIXME: That code should be removed as soon as there is "Preferred editor" option
- # added to Preferences, to allow existing SciTE users override built-in editor
- #
- #import webbrowser
- # If inp-file extension is assigned the os will use the appropriate binary
- # (normally an Editor) to open the file. Works perfectly on Windows if SciTE is installed.
- # However using webbrower.open is not portable and not supported
- # https://docs.python.org/3.4/library/webbrowser.html
- #webbrowser.open(filename)
-
- # The Abaqus syntax highlighter works similarly to that one of SciTE so that our
- # own editor can be used now
- import FemGui
- FemGui.open(filename)
+ if self.fem_prefs.GetBool("UseInternalEditor",True):
+ FemGui.open(filename)
+ else:
+ ext_editor_path = self.fem_prefs.GetString("ExternalEditorPath","")
+ if ext_editor_path:
+ self.start_ext_editor(ext_editor_path, filename)
+ else:
+ print "External editor is not defined in FEM preferences. Falling back to internal editor"
+ FemGui.open(filename)
def runCalculix(self):
print 'runCalculix'