From ab51fa7475c3d39eb5940ed92d4d1115cf672984 Mon Sep 17 00:00:00 2001
From: wendtalexander <wendtalexander@protonmail.com>
Date: Mon, 30 Sep 2024 09:48:47 +0200
Subject: [PATCH] [ui] removing duplicate toolbar, adding textfield

---
 pyrelacs/ui/mainwindow.py | 111 +++++++++++++++++++++-----------------
 1 file changed, 62 insertions(+), 49 deletions(-)

diff --git a/pyrelacs/ui/mainwindow.py b/pyrelacs/ui/mainwindow.py
index 435ffe9..153f1ef 100644
--- a/pyrelacs/ui/mainwindow.py
+++ b/pyrelacs/ui/mainwindow.py
@@ -32,7 +32,9 @@ from IPython import embed
 class PyRelacs(QMainWindow):
     def __init__(self):
         super().__init__()
-        # self.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)  # Ensure icons are displayed with text
+        self.setToolButtonStyle(
+            Qt.ToolButtonStyle.ToolButtonTextBesideIcon
+        )  # Ensure icons are displayed with text
         self.setWindowTitle("PyRelacs")
         self.beat_plot = pg.PlotWidget()
         self.power_plot = pg.PlotWidget()
@@ -50,47 +52,51 @@ class PyRelacs(QMainWindow):
         self.create_toolbars()
 
         layout = QGridLayout()
-        layout.addWidget(self.plot_calibration_button, 0, 0)
-        layout.addWidget(self.daq_disconnect_button, 0, 1)
-        layout.addWidget(self.beat_plot, 2, 0, 1, 2)
-        layout.addWidget(self.power_plot, 3, 0, 1, 2)
+        layout.addWidget(self.beat_plot, 0, 0, 1, 2)
+        layout.addWidget(self.power_plot, 1, 0, 1, 2)
+        layout.addWidget(self.text, 2, 0, 1, 2)
 
-        self.toolbar = QToolBar("Repros")
-        self.addToolBar(self.toolbar)
-        self.repros_to_toolbar()
-
-        # self.setFixedSize(QSize(400, 300))
         widget = QWidget()
         widget.setLayout(layout)
         self.setCentralWidget(widget)
 
-        filename = path.joinpath(path.cwd(), "data.nix")
-        self.nix_file = nix.File.open(
-            str(filename), nix.FileMode.Overwrite
-        )
+        filename = path.joinpath(path.cwd(), "data")
+        self.nix_file = nix.File.open(str(filename), nix.FileMode.Overwrite)
 
     def create_actions(self):
-        self._rlx_exitaction = QAction(QIcon(str(path.joinpath(_root, "icons/exit.png"))), "Exit", self)
+        self._rlx_exitaction = QAction(
+            QIcon(str(path.joinpath(_root, "icons/exit.png"))), "Exit", self
+        )
         self._rlx_exitaction.setStatusTip("Close relacs")
         self._rlx_exitaction.setShortcut(QKeySequence("Alt+q"))
         self._rlx_exitaction.triggered.connect(self.on_exit)
-        
+
         self._rlx_aboutaction = QAction("about")
         self._rlx_aboutaction.setStatusTip("Show about dialog")
         self._rlx_aboutaction.setEnabled(True)
         self._rlx_aboutaction.triggered.connect(self.on_about)
 
-        self._daq_connectaction = QAction(QIcon(str(path.joinpath(_root, "icons/connect.png"))), "Connect DAQ", self)
+        self._daq_connectaction = QAction(
+            QIcon(str(path.joinpath(_root, "icons/connect.png"))), "Connect DAQ", self
+        )
         self._daq_connectaction.setStatusTip("Connect to daq device")
         # self._daq_connectaction.setShortcut(QKeySequence("Alt+d"))
         self._daq_connectaction.triggered.connect(self.connect_dac)
 
-        self._daq_disconnectaction = QAction(QIcon(str(path.joinpath(_root, "icons/disconnect.png"))), "Disconnect DAQ", self)
+        self._daq_disconnectaction = QAction(
+            QIcon(str(path.joinpath(_root, "icons/disconnect.png"))),
+            "Disconnect DAQ",
+            self,
+        )
         self._daq_disconnectaction.setStatusTip("Disconnect the DAQ device")
         # self._daq_connectaction.setShortcut(QKeySequence("Alt+d"))
         self._daq_disconnectaction.triggered.connect(self.disconnect_dac)
 
-        self._daq_calibaction = QAction(QIcon(str(path.joinpath(_root, "icons/calibration.png"))), "Plot calibration", self)
+        self._daq_calibaction = QAction(
+            QIcon(str(path.joinpath(_root, "icons/calibration.png"))),
+            "Plot calibration",
+            self,
+        )
         self._daq_calibaction.setStatusTip("Calibrate the attenuator device")
         # self._daq_calibaction.setShortcut(QKeySequence("Alt+d"))
         self._daq_calibaction.triggered.connect(self.plot_calibration)
@@ -98,19 +104,28 @@ class PyRelacs(QMainWindow):
 
     def create_menu(self):
         menu = self.menuBar()
-        file_menu = menu.addMenu("&File")
-        file_menu.addAction(self._rlx_exitaction)
-        file_menu.addAction(self._rlx_aboutaction)
-
-        device_menu = menu.addMenu("&DAQ")
-        device_menu.addAction(self._daq_connectaction)
-        device_menu.addAction(self._daq_disconnectaction)
-        device_menu.addSeparator()
-        device_menu.addAction(self._daq_calibaction)
-
-        help_menu = menu.addMenu("&Help")
-        help_menu.addSeparator()
-        # help_menu.addAction(self._help_action)
+        if menu is not None:
+            file_menu = menu.addMenu("&File")
+            device_menu = menu.addMenu("&DAQ")
+            help_menu = menu.addMenu("&Help")
+
+            if file_menu is not None:
+                file_menu.addAction(self._rlx_exitaction)
+                file_menu.addAction(self._rlx_aboutaction)
+
+            if device_menu is not None:
+                device_menu.addAction(self._daq_connectaction)
+                device_menu.addAction(self._daq_disconnectaction)
+                device_menu.addSeparator()
+                device_menu.addAction(self._daq_calibaction)
+
+            if help_menu is not None:
+                help_menu.addSeparator()
+                # help_menu.addAction(self._help_action)
+        else:
+            log.error("could not create file menu and device menu")
+            self.on_exit()
+
         self.setMenuBar(menu)
 
     def create_toolbars(self):
@@ -217,12 +232,20 @@ class PyRelacs(QMainWindow):
         try:
             self.daq_device = uldaq.DaqDevice(devices[0])
             log.debug(f"Found daq devices {len(devices)}, connecting to the first one")
-            self.daq_device.connect()
-            log.debug("Connected")
         except IndexError:
-            log.debug("DAQ is not connected, closing")
-            self.on_exit()
-        self.daq_connect_button.setDisabled(True)
+            log.error("DAQ is not connected")
+            log.error("Please connect a DAQ device to the system")
+
+        if hasattr(PyRelacs, "daq_device"):
+            try:
+                self.daq_device.connect()
+                log.debug("Connected")
+            except uldaq.ul_exception.ULException as e:
+                log.error(f"Could not Connect to DAQ: {e}")
+            self.daq_connect_button.setDisabled(True)
+        else:
+            log.debug("Already handeld the error")
+            pass
 
     def disconnect_dac(self):
         try:
@@ -235,16 +258,6 @@ class PyRelacs(QMainWindow):
         except AttributeError:
             log.debug("DAQ was not connected")
 
-    def repros_to_toolbar(self):
-        repro_names, file_names = self.repros.names_of_repros()
-        for rep, fn in zip(repro_names, file_names):
-            individual_repro_button = QAction(rep, self)
-            individual_repro_button.setStatusTip("Button")
-            individual_repro_button.triggered.connect(
-                lambda checked, n=rep, f=fn: self.run_repro(n, f)
-            )
-            self.toolbar.addAction(individual_repro_button)
-
     def run_repro(self, n, fn):
         self.text.appendPlainText(f"started Repro {n}, {fn}")
         worker = Worker(self.repros.run_repro, self.nix_file, n, fn)
@@ -257,7 +270,7 @@ class PyRelacs(QMainWindow):
     def on_exit(self):
         print("exit button!")
         self.close()
-    
+
     def on_about(self, e):
         about = AboutDialog(self)
         about.show()
@@ -269,4 +282,4 @@ class PyRelacs(QMainWindow):
         print("THREAD COMPLETE!")
 
     def progress_fn(self, n):
-        print("%d%% done" % n)
\ No newline at end of file
+        print("%d%% done" % n)