From db24ee830c3ec8c6ea40add2c610bc0aa9fca1eb Mon Sep 17 00:00:00 2001
From: Conor Finn <conor.finn@stfc.ac.uk>
Date: Tue, 17 Dec 2019 09:08:37 +0000
Subject: [PATCH] RE #27187 Load default if values from file invalid

---
 .../engineering_diffraction.py                   | 16 +++++++++++-----
 .../settings/settings_presenter.py               | 15 +++++++++++----
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py b/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py
index 5572427a2ab..ba311894e2f 100644
--- a/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py
+++ b/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py
@@ -44,13 +44,21 @@ class EngineeringDiffractionGui(QtWidgets.QMainWindow, Ui_main_window):
 
         self.set_on_settings_clicked(self.open_settings)
         self.btn_settings.setIcon(get_icon("mdi.settings", "black", 1.2))
-        # Setup Tabs
+
+        # Setup Elements
+        self.setup_settings()
         self.setup_calibration()
         self.setup_focus()
 
         # Setup notifiers
         self.setup_calibration_notifier()
 
+    def setup_settings(self):
+        model = SettingsModel()
+        view = SettingsView(self)
+        self.settings_presenter = SettingsPresenter(model, view)
+        self.settings_presenter.load_settings_from_file_or_default()
+
     def setup_calibration(self):
         cal_model = CalibrationModel()
         cal_view = CalibrationView(parent=self.tabs)
@@ -87,10 +95,8 @@ class EngineeringDiffractionGui(QtWidgets.QMainWindow, Ui_main_window):
         InterfaceManager().showCustomInterfaceHelp(self.doc)
 
     def open_settings(self):
-        settings_view = SettingsView(self)
-        settings_model = SettingsModel()
-        self.settings_presenter = SettingsPresenter(settings_model, settings_view)
-        settings_view.show()
+        self.settings_presenter.load_existing_settings()
+        self.settings_presenter.show()
 
     def get_rb_no(self):
         return self.lineEdit_RBNumber.text()
diff --git a/scripts/Engineering/gui/engineering_diffraction/settings/settings_presenter.py b/scripts/Engineering/gui/engineering_diffraction/settings/settings_presenter.py
index 59330c47aa6..380cfdef549 100644
--- a/scripts/Engineering/gui/engineering_diffraction/settings/settings_presenter.py
+++ b/scripts/Engineering/gui/engineering_diffraction/settings/settings_presenter.py
@@ -22,15 +22,18 @@ class SettingsPresenter(object):
     def __init__(self, model, view):
         self.model = model
         self.view = view
-        self.load_existing_settings()
+        self.settings = {}
 
         # Connect view signals
         self.view.set_on_apply_clicked(self.save_new_settings)
         self.view.set_on_ok_clicked(self.save_and_close_dialog)
         self.view.set_on_cancel_clicked(self.close_dialog)
 
+    def show(self):
+        self.view.show()
+
     def load_existing_settings(self):
-        self._load_settings_from_file()
+        self.load_settings_from_file_or_default()
         self._show_settings_in_view()
 
     def close_dialog(self):
@@ -59,7 +62,7 @@ class SettingsPresenter(object):
         if self._validate_settings(self.settings):
             self.model.set_settings_dict(self.settings)
 
-    def _load_settings_from_file(self):
+    def load_settings_from_file_or_default(self):
         self.settings = self.model.get_settings_dict(SETTINGS_LIST)
         if not self._validate_settings(self.settings):
             self.settings = DEFAULT_SETTINGS.copy()
@@ -67,4 +70,8 @@ class SettingsPresenter(object):
 
     @staticmethod
     def _validate_settings(settings):
-        return settings.keys() == SETTINGS_LIST
+        all_keys = settings.keys() == SETTINGS_LIST
+        save_location = str(settings["save_location"])
+        save_valid = save_location is not "" and save_location is not None
+        recalc_valid = settings["recalc_vanadium"] is not None
+        return all_keys and save_valid and recalc_valid
-- 
GitLab