From aa30ee609296dcad7d016412bb66d9192f0bdbe6 Mon Sep 17 00:00:00 2001
From: Phil Colebrooke <philipc99@hotmail.co.uk>
Date: Fri, 3 Apr 2020 09:12:21 +0100
Subject: [PATCH] Re #28464 fix problems with 2d and 3d plots on same figure

---
 .../axestabwidget/presenter.py                | 17 ++++++++-
 .../test/test_axestabwidgetpresenter.py       | 37 ++++++++++---------
 2 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/presenter.py b/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/presenter.py
index 6b09b8f7231..0721cf65740 100644
--- a/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/presenter.py
+++ b/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/presenter.py
@@ -101,10 +101,17 @@ class AxesTabWidgetPresenter:
 
     def update_view(self):
         """Update the properties in the view from the selected axes"""
+        self.current_view_props.clear()
         ax_props = self.get_selected_ax_properties()
 
+        plot_is_3d = "zlim" in ax_props
+
         # Enable the z-axis option if the plot is 3D.
-        self.view.z_radio_button.setEnabled("zlim" in ax_props)
+        self.view.z_radio_button.setEnabled(plot_is_3d)
+
+        # For tiled plots
+        if not plot_is_3d and self.view.z_radio_button.isChecked():
+            self.view.x_radio_button.click()
 
         # Changing the axis scale doesn't work with 3D plots, this is a known matplotlib issue,
         # so the scale option is disabled.
@@ -137,4 +144,10 @@ class AxesTabWidgetPresenter:
             self.view.set_label(self.current_view_props[f"{new_ax}label"])
             self.view.set_scale(self.current_view_props[f"{new_ax}scale"])
         else:
-            self.update_view()
+            ax_props = self.get_selected_ax_properties()
+            ax = self.view.get_axis()
+            lim = ax_props[f"{ax}lim"]
+            self.view.set_lower_limit(lim[0])
+            self.view.set_upper_limit(lim[1])
+            self.view.set_label(ax_props[f"{ax}label"])
+            self.view.set_scale(ax_props[f"{ax}scale"])
diff --git a/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/test/test_axestabwidgetpresenter.py b/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/test/test_axestabwidgetpresenter.py
index 918dd7c301b..cdc305fc6ea 100644
--- a/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/test/test_axestabwidgetpresenter.py
+++ b/qt/python/mantidqt/widgets/plotconfigdialog/axestabwidget/test/test_axestabwidgetpresenter.py
@@ -53,24 +53,25 @@ class AxesTabWidgetPresenterTest(unittest.TestCase):
         ax_mock = mock.MagicMock()
         presenter = self._generate_presenter()
         with mock.patch.object(presenter, 'get_selected_ax', lambda: ax_mock):
-            presenter.current_view_props = presenter.get_selected_ax_properties()
-            presenter.apply_properties()
-            # Mock properties object and view then test that the view's setters
-            # are called with the correct property values
-            ax_mock.set_title.assert_called_once_with(
-                presenter.current_view_props.title)
-            ax_mock.set_xlim.assert_called_once_with(
-                presenter.current_view_props.xlim)
-            ax_mock.set_xlabel.assert_called_once_with(
-                presenter.current_view_props.xlabel)
-            ax_mock.set_xscale.assert_called_once_with(
-                presenter.current_view_props.xscale)
-            ax_mock.set_ylim.assert_called_once_with(
-                presenter.current_view_props.ylim)
-            ax_mock.set_ylabel.assert_called_once_with(
-                presenter.current_view_props.ylabel)
-            ax_mock.set_yscale.assert_called_once_with(
-                presenter.current_view_props.yscale)
+            with mock.patch.object(presenter, 'update_view', lambda: None):
+                presenter.current_view_props = presenter.get_selected_ax_properties()
+                presenter.apply_properties()
+                # Mock properties object and view then test that the view's setters
+                # are called with the correct property values
+                ax_mock.set_title.assert_called_once_with(
+                    presenter.current_view_props.title)
+                ax_mock.set_xlim.assert_called_once_with(
+                    presenter.current_view_props.xlim)
+                ax_mock.set_xlabel.assert_called_once_with(
+                    presenter.current_view_props.xlabel)
+                ax_mock.set_xscale.assert_called_once_with(
+                    presenter.current_view_props.xscale)
+                ax_mock.set_ylim.assert_called_once_with(
+                    presenter.current_view_props.ylim)
+                ax_mock.set_ylabel.assert_called_once_with(
+                    presenter.current_view_props.ylabel)
+                ax_mock.set_yscale.assert_called_once_with(
+                    presenter.current_view_props.yscale)
 
     def test_get_axes_names_dict(self):
         actual_dict = get_axes_names_dict(self.fig)
-- 
GitLab