From b6f09865f182f4a48773aca4e34732a3f132588c Mon Sep 17 00:00:00 2001
From: "Michael D. M. Dryden" <mdryden@chem.utoronto.ca>
Date: Mon, 25 Aug 2014 19:43:39 -0400
Subject: [PATCH] Move experiment window stuff out of main class into separate
 module.

---
 .../interface/dstatinterface.glade            | 25 ++++--
 .../dstat-interface/interface/exp_window.py   | 48 ++++++++++
 .../dstat-interface/interface_test.py         | 89 +++----------------
 3 files changed, 78 insertions(+), 84 deletions(-)
 create mode 100644 dstat-interface/dstat-interface/interface/exp_window.py

diff --git a/dstat-interface/dstat-interface/interface/dstatinterface.glade b/dstat-interface/dstat-interface/interface/dstatinterface.glade
index 6b1062a..511429a 100644
--- a/dstat-interface/dstat-interface/interface/dstatinterface.glade
+++ b/dstat-interface/dstat-interface/interface/dstatinterface.glade
@@ -6,37 +6,46 @@
     <columns>
       <!-- column-name index -->
       <column type="guint"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
       <!-- column-name name -->
       <column type="gchararray"/>
     </columns>
     <data>
       <row>
         <col id="0">0</col>
-        <col id="1" translatable="yes">Chronoamperometry</col>
+        <col id="1" translatable="yes">cae</col>
+        <col id="2" translatable="yes">Chronoamperometry</col>
       </row>
       <row>
         <col id="0">1</col>
-        <col id="1" translatable="yes">Linear Sweep Voltammetry</col>
+        <col id="1" translatable="yes">lsv</col>
+        <col id="2" translatable="yes">Linear Sweep Voltammetry</col>
       </row>
       <row>
         <col id="0">2</col>
-        <col id="1" translatable="yes">Cyclic Voltammetry</col>
+        <col id="1" translatable="yes">cve</col>
+        <col id="2" translatable="yes">Cyclic Voltammetry</col>
       </row>
       <row>
         <col id="0">3</col>
-        <col id="1" translatable="yes">Square Wave Voltammetry</col>
+        <col id="1" translatable="yes">swv</col>
+        <col id="2" translatable="yes">Square Wave Voltammetry</col>
       </row>
       <row>
         <col id="0">4</col>
-        <col id="1" translatable="yes">Differential Pulse Voltammetry</col>
+        <col id="1" translatable="yes">dpv</col>
+        <col id="2" translatable="yes">Differential Pulse Voltammetry</col>
       </row>
       <row>
         <col id="0">5</col>
-        <col id="1" translatable="yes">AC Voltammetry</col>
+        <col id="1" translatable="yes">acv</col>
+        <col id="2" translatable="yes">AC Voltammetry</col>
       </row>
       <row>
         <col id="0">6</col>
-        <col id="1" translatable="yes">Photodiode</col>
+        <col id="1" translatable="yes">pde</col>
+        <col id="2" translatable="yes">Photodiode</col>
       </row>
     </data>
   </object>
@@ -188,6 +197,7 @@
                         <property name="label">gtk-connect</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
+                        <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <signal name="activate" handler="on_menu_dropbot_connect_activate" swapped="no"/>
                       </object>
@@ -198,6 +208,7 @@
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
                         <property name="can_focus">False</property>
+                        <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <signal name="activate" handler="on_menu_dropbot_disconnect_activate" swapped="no"/>
                       </object>
diff --git a/dstat-interface/dstat-interface/interface/exp_window.py b/dstat-interface/dstat-interface/interface/exp_window.py
new file mode 100644
index 0000000..253a268
--- /dev/null
+++ b/dstat-interface/dstat-interface/interface/exp_window.py
@@ -0,0 +1,48 @@
+import chronoamp
+import lsv
+import cv
+import swv
+import dpv
+import acv
+import pd
+
+class Experiments:
+    def __init__(self, builder):
+        self.builder = builder
+        
+        self.chronoamp = chronoamp.chronoamp()
+        self.lsv = lsv.lsv()
+        self.cve = cv.cv()
+        self.swv = swv.swv()
+        self.dpv = dpv.dpv()
+        self.acv = acv.acv()
+        self.pde = pd.pd()
+ 
+        #fill exp_section
+        self.exp_section = self.builder.get_object('exp_section_box')
+        self.containers = {'cae': self.chronoamp.builder.get_object(
+                                                            'scrolledwindow1')}
+        self.containers['lsv'] = self.lsv.builder.get_object('scrolledwindow1')
+        self.containers['cve'] = self.cve.builder.get_object('scrolledwindow1')
+        self.containers['swv'] = self.swv.builder.get_object('scrolledwindow1')
+        self.containers['dpv'] = self.dpv.builder.get_object('scrolledwindow1')
+        self.containers['acv'] = self.acv.builder.get_object('scrolledwindow1')
+        self.containers['pde'] = self.pde.builder.get_object('scrolledwindow1')
+
+        for key in self.containers:
+            self.containers[key].reparent(self.exp_section)
+            self.containers[key].hide()
+        
+    def set_exp(self, selection):
+        """Changes parameter tab to selected experiment. Returns True if 
+        successful, False if invalid selection received.
+        
+        Arguments:
+        selection -- id string of experiment type
+        """
+        for key in self.containers:
+            self.containers[key].hide()
+
+        self.containers[selection].show()
+        
+        return True
\ No newline at end of file
diff --git a/dstat-interface/dstat-interface/interface_test.py b/dstat-interface/dstat-interface/interface_test.py
index b9c6f9c..b4a2e35 100644
--- a/dstat-interface/dstat-interface/interface_test.py
+++ b/dstat-interface/dstat-interface/interface_test.py
@@ -20,16 +20,10 @@ except ImportError:
     print('gobject not available')
     sys.exit(1)
 
-import interface.adc_pot as adc_pot
-import interface.chronoamp as chronoamp
-import interface.lsv as lsv
-import interface.cv as cv
-import interface.swv as swv
-import interface.dpv as dpv
-import interface.acv as acv
-import interface.pd as pd
 import interface.save as save
 import dstat_comm as comm
+import interface.exp_window as exp_window
+import interface.adc_pot as adc_pot
 import mpltest
 import microdrop
 
@@ -70,19 +64,14 @@ class Main:
         self.stopbutton = self.builder.get_object('pot_stop')
         self.startbutton = self.builder.get_object('pot_start')
         self.adc_pot = adc_pot.adc_pot()
-        self.chronoamp = chronoamp.chronoamp()
-        self.lsv = lsv.lsv()
-        self.cve = cv.cv()
-        self.swv = swv.swv()
-        self.dpv = dpv.dpv()
-        self.acv = acv.acv()
-        self.pde = pd.pd()
         
         self.error_context_id = self.statusbar.get_context_id("error")
         self.message_context_id = self.statusbar.get_context_id("message")
         
         self.plotwindow = self.builder.get_object('plotbox')
         
+        self.exp_window = exp_window.Experiments(self.builder)
+        
         #setup autosave
         self.autosave_checkbox = self.builder.get_object('autosave_checkbutton')
         self.autosavedir_button = self.builder.get_object('autosavedir_button')
@@ -90,24 +79,6 @@ class Main:
         
         self.plot = mpltest.plotbox(self.plotwindow)
         
-        #fill exp_section
-        self.exp_section = self.builder.get_object('exp_section_box')
-        self.chronoamp_container = self.chronoamp.builder.get_object(
-                                                              'scrolledwindow1')
-        self.chronoamp_container.reparent(self.exp_section)
-        self.lsv_container = self.lsv.builder.get_object('scrolledwindow1')
-        self.lsv_container.reparent(self.exp_section)
-        self.cve_container = self.cve.builder.get_object('scrolledwindow1')
-        self.cve_container.reparent(self.exp_section)
-        self.swv_container = self.swv.builder.get_object('scrolledwindow1')
-        self.swv_container.reparent(self.exp_section)
-        self.dpv_container = self.dpv.builder.get_object('scrolledwindow1')
-        self.dpv_container.reparent(self.exp_section)
-        self.acv_container = self.acv.builder.get_object('scrolledwindow1')
-        self.acv_container.reparent(self.exp_section)
-        self.pde_container = self.pde.builder.get_object('scrolledwindow1')
-        self.pde_container.reparent(self.exp_section)
-        
         #fill adc_pot_box
         self.adc_pot_box = self.builder.get_object('gain_adc_box')
         self.adc_pot_container = self.adc_pot.builder.get_object('vbox1')
@@ -129,7 +100,7 @@ class Main:
         #initialize experiment selection combobox
         self.expcombobox = self.builder.get_object('expcombobox')
         self.expcombobox.pack_start(self.cell, True)
-        self.expcombobox.add_attribute(self.cell, 'text', 1)
+        self.expcombobox.add_attribute(self.cell, 'text', 2)
         self.expcombobox.set_active(0)
         
         self.spinner = self.builder.get_object('spinner')
@@ -138,14 +109,7 @@ class Main:
         self.mainwindow.set_title("Dstat Interface 0.1")
         self.mainwindow.show_all()
         
-        # hide unused experiment controls
-        #self.chronoamp_container.hide()
-        self.lsv_container.hide()
-        self.cve_container.hide()
-        self.swv_container.hide()
-        self.dpv_container.hide()
-        self.acv_container.hide()
-        self.pde_container.hide()
+        self.on_expcombobox_changed()
 
         self.expnumber = 0
         
@@ -156,40 +120,6 @@ class Main:
         self.dropbot_enabled = False
         self.dropbot_triggered = False
 
-    def exp_param_show(self, selection):
-        """Changes parameter tab to selected experiment.
-        
-        Arguments:
-        selection -- integer index of experiment type
-        """
-        self.chronoamp_container.hide()
-        self.lsv_container.hide()
-        self.cve_container.hide()
-        self.swv_container.hide()
-        self.dpv_container.hide()
-        self.acv_container.hide()
-        self.pde_container.hide()
-        
-        self.statusbar.remove_all(self.error_context_id)
-
-        if selection == 0:
-            self.chronoamp_container.show()
-        elif selection == 1:
-            self.lsv_container.show()
-        elif selection == 2:
-            self.cve_container.show()
-        elif selection == 3:
-            self.swv_container.show()
-        elif selection == 4:
-            self.dpv_container.show()
-        elif selection == 5:
-            self.acv_container.show()
-        elif selection == 6:
-            self.pde_container.show()
-        else:
-            self.statusbar.push(
-                self.error_context_id, "Experiment not yet implemented")
-
     def on_window1_destroy(self, object, data=None):
         """ Quit when main window closed."""
         print "quit with cancel"
@@ -208,7 +138,12 @@ class Main:
 
     def on_expcombobox_changed(self, data=None):
         """Change the experiment window when experiment box changed."""
-        self.exp_param_show(self.expcombobox.get_active)
+        model = self.expcombobox.get_model()
+        _, id, _ = model[self.expcombobox.get_active()]  # id is in 2nd col
+        self.statusbar.remove_all(self.error_context_id)
+        if not self.exp_window.set_exp(id):
+            self.statusbar.push(
+                self.error_context_id, "Experiment not yet implemented")
 
     def on_serial_refresh_clicked(self, data=None):
         """Refresh list of serial devices."""
-- 
GitLab