From a2b3fa8627982bf98132b50c4f785c41b45897f5 Mon Sep 17 00:00:00 2001
From: Petter <petter.kallstrom@liu.se>
Date: Thu, 4 May 2023 13:35:20 +0200
Subject: [PATCH] plot_window: Updated Oscars suggestions, and some more.

---
 b_asic/gui_utils/plot_window.py | 71 ++++++++++++++++++++-------------
 1 file changed, 43 insertions(+), 28 deletions(-)

diff --git a/b_asic/gui_utils/plot_window.py b/b_asic/gui_utils/plot_window.py
index ae1e5df6..0e5fd918 100644
--- a/b_asic/gui_utils/plot_window.py
+++ b/b_asic/gui_utils/plot_window.py
@@ -275,6 +275,16 @@ class PlotWindow(QWidget):
         markers = ".ov<^>s+*xd|_"
         ix = 0
         self._auto_redraw = False
+
+        def addline(key, vector, checked):
+            line = self._plot_axes.plot(np.real(res), fmt, label=key)
+            self._lines[key] = line[0]
+            list_item = QListWidgetItem(key)
+            list_item.setCheckState(Qt.CheckState.Unchecked)  # will add it if checked
+            self._checklist.addItem(list_item)
+            self._lines[key].remove()  # remove the line from plot. Keep it in _lines.
+            list_item.setCheckState(checked)  # will add it if checked
+
         for key, res in result.items():
             key2 = name + "." + key
             ischecked = Qt.CheckState.Unchecked
@@ -288,19 +298,6 @@ class PlotWindow(QWidget):
             else:
                 fmt = '-'
 
-            def addline(key, vector, checked):
-                line = self._plot_axes.plot(np.real(res), fmt, label=key)
-                self._lines[key] = line[0]
-                list_item = QListWidgetItem(key)
-                list_item.setCheckState(
-                    Qt.CheckState.Unchecked
-                )  # will add it if checked
-                self._checklist.addItem(list_item)
-                self._lines[
-                    key
-                ].remove()  # remove the line from plot. Keep it in _lines.
-                list_item.setCheckState(checked)  # will add it if checked
-
             if all(np.imag(np.real_if_close(res)) == 0):
                 # real: add one line with corresponding checkbox
                 addline(key2, np.real(res), ischecked)
@@ -368,13 +365,16 @@ class PlotWindow(QWidget):
 def start_simulation_dialog(
     sim_results: Dict[str, List[complex]], sfg_name: Optional[str] = None
 ):
-    """Deprecated. Use `show_simulation_result` instead."""
+    """
+    deprecated::
+        Use :func:`show_simulation_result` instead.
+    """
     show_simulation_result(sim_results, sfg_name)
 
 
 def show_simulation_result(
     sim_results: Dict[str, List[complex]], figure_name: Optional[str] = None
-):
+) -> PlotWindow:
     """
     Display the simulation results window.
 
@@ -385,6 +385,12 @@ def show_simulation_result(
         Alternative, sim_result can be a list, ['name1', sim_result1, 'name2', sim_result2, ...]
     figure_name : str, optional
         The name of the SFG.
+    Note: This starts the GUI event loop using `QApplication.instance().exec()`, and the function
+    will return when the window is closed.
+    If this is not desired, you can in ipython start the event loop using `%gui qt`, and define
+    a global variable `noqtexec = 1`.
+    Effect if no event loop is running: The windows turns black and do not reponse.
+    Effect if the event loop is started twice: The function will never return.
     """
     if not QApplication.instance():
         app = QApplication(sys.argv)
@@ -392,10 +398,19 @@ def show_simulation_result(
         app = QApplication.instance()
     win = PlotWindow(sim_result=sim_results, figure_name=figure_name)
     win.show()
-    app.exec_()
+
+    # I did not get "if 'noqtexec' in globals()" to work. Try this instead:
+    try:
+        if noqtexec != 1:
+            raise NameError()
+    except NameError:
+        app.exec()
+    return win
 
 
 # Simple test of the dialog
+from time import sleep
+
 if __name__ == "__main__":
     res1 = {
         '0': [1.5, 1.6, 1.5, 1],
@@ -422,18 +437,18 @@ if __name__ == "__main__":
         't3': [0, 0, 0, 1],
     }
     res3 = {
-        #'0': np.random.rand(50).tolist(),
         '0': np.random.rand(50),
         '1': np.random.rand(200).tolist(),
     }
-    res4 = {
-        '0': np.random.rand(60).tolist(),
-        '1': np.random.rand(220).tolist(),
-        't4': np.random.rand(50).tolist(),
-    }
-    # start_simulation_dialog(res3)
-    app = QApplication(sys.argv)
-    win2 = PlotWindow(['Real', res1, 'Cpx', res2, res3], "Test data")
-    win2.add_result('res4', res4)
-    win2.show()
-    app.exec_()
+    # res4 = {
+    #    '0': np.random.rand(60).tolist(),
+    #    '1': np.random.rand(220).tolist(),
+    #    't4': np.random.rand(50).tolist(),
+    # }
+    win = show_simulation_result(['r1', res1, res2])
+    try:
+        if noqtexec == 1:
+            sleep(5)
+            win.add_result('hej', res3)
+    except NameError:
+        pass
-- 
GitLab