diff --git a/dstatInterface/dstatInterface.glade b/dstatInterface/dstatInterface.glade deleted file mode 100644 index 1f44d93079d37f868dcc67e996f6bf2707719c40..0000000000000000000000000000000000000000 --- a/dstatInterface/dstatInterface.glade +++ /dev/null @@ -1,409 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<interface> - <requires lib="gtk+" version="2.24"/> - <!-- interface-naming-policy project-wide --> - <object class="GtkListStore" id="ExpComboListStore"> - <columns> - <!-- column-name index --> - <column type="guint"/> - <!-- column-name name --> - <column type="gchararray"/> - </columns> - <data> - <row> - <col id="0">0</col> - <col id="1" translatable="yes">Chronoamperometry</col> - </row> - <row> - <col id="0">1</col> - <col id="1" translatable="yes">Linear Sweep Voltammetry</col> - </row> - <row> - <col id="0">2</col> - <col id="1" translatable="yes">Cyclic Voltammetry</col> - </row> - <row> - <col id="0">3</col> - <col id="1" translatable="yes">Square Wave Voltammetry</col> - </row> - <row> - <col id="0">4</col> - <col id="1" translatable="yes">AC Voltammetry</col> - </row> - <row> - <col id="0">5</col> - <col id="1" translatable="yes">Photodiode</col> - </row> - </data> - </object> - <object class="GtkAboutDialog" id="aboutdialog1"> - <property name="can_focus">False</property> - <property name="border_width">5</property> - <property name="type_hint">dialog</property> - <property name="program_name">Dstat Interface</property> - <property name="version">0.1</property> - <property name="copyright" translatable="yes">© Michael Dryden 2014</property> - <property name="license" translatable="yes">GNU</property> - <property name="authors">Michael Dryden</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">2</property> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="layout_style">end</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - </child> - </object> - <object class="GtkTextBuffer" id="databuffer1"/> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yalign">0.47999998927116394</property> - <property name="stock">gtk-missing-image</property> - </object> - <object class="GtkWindow" id="window1"> - <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="title" translatable="yes">Main</property> - <property name="default_width">800</property> - <property name="default_height">500</property> - <signal name="destroy" handler="on_window1_destroy" swapped="no"/> - <child> - <object class="GtkVBox" id="vbox1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkMenuBar" id="menubar1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkMenuItem" id="menuitem1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">_File</property> - <property name="use_underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="menu1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkImageMenuItem" id="gtk_new"> - <property name="label">gtk-new</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_gtk_new_activate" swapped="no"/> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="gtk-open"> - <property name="label">gtk-open</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="gtk-save"> - <property name="label">gtk-save</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="gtk-save-as"> - <property name="label">gtk-save-as</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="gtk_quit"> - <property name="label">gtk-quit</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_gtk_quit_activate" swapped="no"/> - </object> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkMenuItem" id="menuitem2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">_Edit</property> - <property name="use_underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="menu2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkImageMenuItem" id="imagemenuitem7"> - <property name="label">gtk-copy</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="imagemenuitem8"> - <property name="label">gtk-paste</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </object> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkMenuItem" id="gtk_view"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">_View</property> - <property name="use_underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="menu5"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkImageMenuItem" id="push_status"> - <property name="label">Push Status</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_stock">False</property> - <signal name="activate" handler="on_push_status_activate" swapped="no"/> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="pop_status"> - <property name="label">Pop Status</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_stock">False</property> - <signal name="activate" handler="on_pop_status_activate" swapped="no"/> - </object> - </child> - <child> - <object class="GtkImageMenuItem" id="clear_status"> - <property name="label">Clear Status</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_stock">False</property> - <signal name="activate" handler="on_clear_status_activate" swapped="no"/> - </object> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkMenuItem" id="menuitem4"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">_Help</property> - <property name="use_underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="menu3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkImageMenuItem" id="gtk_about"> - <property name="label">gtk-about</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_gtk_about_activate" swapped="no"/> - </object> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkHPaned" id="hpaned1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkVBox" id="vbox2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkVBox" id="vbox3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkLabel" id="label7"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Experiment</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="padding">10</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="expcombobox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="model">ExpComboListStore</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow2"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">automatic</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="resize">False</property> - <property name="shrink">True</property> - </packing> - </child> - <child> - <object class="GtkNotebook" id="notebook1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">label</property> - </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">page 1</property> - </object> - <packing> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <child> - <object class="GtkTextView" id="datatextview1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="buffer">databuffer1</property> - </object> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">page 2</property> - </object> - <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <placeholder/> - </child> - <child type="tab"> - <placeholder/> - </child> - </object> - <packing> - <property name="resize">True</property> - <property name="shrink">True</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkStatusbar" id="statusbar"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">2</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - </child> - </object> -</interface> diff --git a/dstatInterface/dstatInterface.xcodeproj/project.pbxproj b/dstatInterface/dstatInterface.xcodeproj/project.pbxproj index f49792526fce215d4d81a999ddd3bc504504aba8..cba776c1292b96a38e7d33486c815fa8a3711578 100644 --- a/dstatInterface/dstatInterface.xcodeproj/project.pbxproj +++ b/dstatInterface/dstatInterface.xcodeproj/project.pbxproj @@ -7,8 +7,10 @@ objects = { /* Begin PBXFileReference section */ - 5FAED9CD1900FBDA00A9DDD4 /* dstatInterface.glade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dstatInterface.glade; sourceTree = "<group>"; }; 5FAED9CE1900FE6B00A9DDD4 /* test2.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = test2.py; sourceTree = "<group>"; }; + 5FCB541B190591CD00CEB148 /* interface */ = {isa = PBXFileReference; lastKnownFileType = folder; path = interface; sourceTree = "<group>"; }; + 5FCB541D1905923800CEB148 /* interface_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = interface_test.py; sourceTree = "<group>"; }; + 5FCB54231905B6EE00CEB148 /* dstat_comm.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = dstat_comm.py; sourceTree = "<group>"; }; 5FDC0DFD18FDAD79003F857A /* main.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = main.py; sourceTree = "<group>"; }; 5FDC1E4218FF9572007AD04D /* glade1.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = glade1.py; sourceTree = "<group>"; }; 5FDC1E4318FF9A95007AD04D /* test1.glade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = test1.glade; sourceTree = "<group>"; }; @@ -18,8 +20,10 @@ 5FDC0DF218FDACDA003F857A = { isa = PBXGroup; children = ( + 5FCB541D1905923800CEB148 /* interface_test.py */, + 5FCB54231905B6EE00CEB148 /* dstat_comm.py */, + 5FCB541B190591CD00CEB148 /* interface */, 5FAED9CE1900FE6B00A9DDD4 /* test2.py */, - 5FAED9CD1900FBDA00A9DDD4 /* dstatInterface.glade */, 5FDC1E4318FF9A95007AD04D /* test1.glade */, 5FDC0DFD18FDAD79003F857A /* main.py */, 5FDC1E4218FF9572007AD04D /* glade1.py */, diff --git a/dstatInterface/dstatInterface.xcodeproj/project.xcworkspace/xcuserdata/mdryden.xcuserdatad/UserInterfaceState.xcuserstate b/dstatInterface/dstatInterface.xcodeproj/project.xcworkspace/xcuserdata/mdryden.xcuserdatad/UserInterfaceState.xcuserstate index fe0af0358b47f2512401f9914dc1138dfb5ba042..084b68d140c72301f4199b5c640ca7a0d35e2c56 100644 Binary files a/dstatInterface/dstatInterface.xcodeproj/project.xcworkspace/xcuserdata/mdryden.xcuserdatad/UserInterfaceState.xcuserstate and b/dstatInterface/dstatInterface.xcodeproj/project.xcworkspace/xcuserdata/mdryden.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/dstatInterface/dstat_comm.py b/dstatInterface/dstat_comm.py new file mode 100644 index 0000000000000000000000000000000000000000..e1163a3eb75eabaea84847c38d4e146ece62ce47 --- /dev/null +++ b/dstatInterface/dstat_comm.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +def lsv_exp(adc_buffer, adc_rate, adc_pga, gain, start, stop, slope): + s = "L " + s += (adc_buffer) + s += " " + s += (adc_rate) + s += " " + s += (adc_pga) + s += " " + s += (gain) + s += " " + s += str(start) + s += " " + s += str(stop) + s += " " + s += str(slope) + print s +# print ("L ", adc_buffer, adc_rate, adc_pga, gain, start, stop, slope) \ No newline at end of file diff --git a/dstatInterface/interface/__init__.py b/dstatInterface/interface/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/dstatInterface/interface/adc_pot.glade b/dstatInterface/interface/adc_pot.glade new file mode 100644 index 0000000000000000000000000000000000000000..18dbe2ebc7dda6a552065c26bf66d06201893aff --- /dev/null +++ b/dstatInterface/interface/adc_pot.glade @@ -0,0 +1,389 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <requires lib="gtk+" version="2.24"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkListStore" id="gain_liststore"> + <columns> + <!-- column-name index --> + <column type="guint"/> + <!-- column-name label --> + <column type="gchararray"/> + <!-- column-name command --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0">0</col> + <col id="1" translatable="yes">100 Ω (15 mA FS)</col> + <col id="2" translatable="yes">0</col> + </row> + <row> + <col id="0">1</col> + <col id="1" translatable="yes">300 Ω (5 mA FS)</col> + <col id="2" translatable="yes">1</col> + </row> + <row> + <col id="0">2</col> + <col id="1" translatable="yes">3 kΩ (500 µA FS)</col> + <col id="2" translatable="yes">2</col> + </row> + <row> + <col id="0">3</col> + <col id="1" translatable="yes">30 kΩ (50 µA FS)</col> + <col id="2" translatable="yes">3</col> + </row> + <row> + <col id="0">4</col> + <col id="1" translatable="yes">300 kΩ (5 µA FS)</col> + <col id="2" translatable="yes">4</col> + </row> + <row> + <col id="0">5</col> + <col id="1" translatable="yes">3 MΩ (500 nA FS)</col> + <col id="2" translatable="yes">5</col> + </row> + <row> + <col id="0">6</col> + <col id="1" translatable="yes">30 MΩ (50 nA FS)</col> + <col id="2" translatable="yes">6</col> + </row> + <row> + <col id="0">7</col> + <col id="1" translatable="yes">500 MΩ (3 nA FS)</col> + <col id="2" translatable="yes">7</col> + </row> + </data> + </object> + <object class="GtkListStore" id="pga_liststore"> + <columns> + <!-- column-name index --> + <column type="guint"/> + <!-- column-name label --> + <column type="gchararray"/> + <!-- column-name command --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0">0</col> + <col id="1" translatable="yes">1x</col> + <col id="2" translatable="yes">0x0</col> + </row> + <row> + <col id="0">1</col> + <col id="1" translatable="yes">2x</col> + <col id="2" translatable="yes">0x1</col> + </row> + <row> + <col id="0">2</col> + <col id="1" translatable="yes">4x</col> + <col id="2" translatable="yes">0x2</col> + </row> + <row> + <col id="0">3</col> + <col id="1" translatable="yes">8x</col> + <col id="2" translatable="yes">0x3</col> + </row> + <row> + <col id="0">4</col> + <col id="1" translatable="yes">16x</col> + <col id="2" translatable="yes">0x4</col> + </row> + <row> + <col id="0">5</col> + <col id="1" translatable="yes">32x</col> + <col id="2" translatable="yes">0x5</col> + </row> + <row> + <col id="0">6</col> + <col id="1" translatable="yes">64x</col> + <col id="2" translatable="yes">0x6</col> + </row> + </data> + </object> + <object class="GtkListStore" id="srate_liststore"> + <columns> + <!-- column-name index --> + <column type="guint"/> + <!-- column-name label --> + <column type="gchararray"/> + <!-- column-name command --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0">0</col> + <col id="1" translatable="yes">2.5 Hz</col> + <col id="2" translatable="yes">0x03</col> + </row> + <row> + <col id="0">1</col> + <col id="1" translatable="yes">5 Hz</col> + <col id="2" translatable="yes">0x13</col> + </row> + <row> + <col id="0">2</col> + <col id="1" translatable="yes">10 Hz</col> + <col id="2" translatable="yes">0x23</col> + </row> + <row> + <col id="0">3</col> + <col id="1" translatable="yes">15 Hz</col> + <col id="2" translatable="yes">0x33</col> + </row> + <row> + <col id="0">4</col> + <col id="1" translatable="yes">25 Hz</col> + <col id="2" translatable="yes">0x43</col> + </row> + <row> + <col id="0">5</col> + <col id="1" translatable="yes">30 Hz</col> + <col id="2" translatable="yes">0x53</col> + </row> + <row> + <col id="0">6</col> + <col id="1" translatable="yes">50 Hz</col> + <col id="2" translatable="yes">0x63</col> + </row> + <row> + <col id="0">7</col> + <col id="1" translatable="yes">60 Hz</col> + <col id="2" translatable="yes">0x72</col> + </row> + <row> + <col id="0">8</col> + <col id="1" translatable="yes">100 Hz</col> + <col id="2" translatable="yes">0x82</col> + </row> + <row> + <col id="0">9</col> + <col id="1" translatable="yes">500 Hz</col> + <col id="2" translatable="yes">0x92</col> + </row> + <row> + <col id="0">10</col> + <col id="1" translatable="yes">1 kHz</col> + <col id="2" translatable="yes">0xA1</col> + </row> + <row> + <col id="0">11</col> + <col id="1" translatable="yes">2 kHz</col> + <col id="2" translatable="yes">0xB0</col> + </row> + <row> + <col id="0">12</col> + <col id="1" translatable="yes">3.75 kHz</col> + <col id="2" translatable="yes">0xC0</col> + </row> + <row> + <col id="0">13</col> + <col id="1" translatable="yes">7.5 kHz</col> + <col id="2" translatable="yes">0xD0</col> + </row> + <row> + <col id="0">14</col> + <col id="1" translatable="yes">15 kHz</col> + <col id="2" translatable="yes">0xE0</col> + </row> + <row> + <col id="0">15</col> + <col id="1" translatable="yes">30 kHz</col> + <col id="2" translatable="yes">0xF0</col> + </row> + </data> + </object> + <object class="GtkWindow" id="window1"> + <property name="can_focus">False</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkFrame" id="adc_frame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">out</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="row_spacing">2</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">Gain of the ADC's programmable gain amplifier. Default is 2 - gives full scale input.</property> + <property name="label" translatable="yes">PGA Setting</property> + </object> + </child> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Sample Rate</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="buffer_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">The ADC's input buffer greatly increases input impedance. Should generally be enabled.</property> + <property name="label" translatable="yes">Input Buffer</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="pga_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">pga_liststore</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="srate_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">srate_liststore</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">ADC Settings</property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">2</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="pstat_frame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">out</property> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">Gain of the I-V converter. Increasing this improves S/N, unlike the ADC's PGA.</property> + <property name="label" translatable="yes">Gain</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="gain_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">gain_liststore</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Potentiostat Settings</property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">2</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/dstatInterface/interface/adc_pot.py b/dstatInterface/interface/adc_pot.py new file mode 100644 index 0000000000000000000000000000000000000000..c534badd30b31fb5db8e645e6efe071a9eaf1715 --- /dev/null +++ b/dstatInterface/interface/adc_pot.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import gtk + +class adc_pot: + def __init__(self): + self.builder = gtk.Builder() + self.builder.add_from_file('interface/adc_pot.glade') + self.builder.connect_signals(self) + self.cell = gtk.CellRendererText() + + self.buffer_toggle = self.builder.get_object('buffer_checkbutton') + + #initialize comboboxes + self.pga_combobox = self.builder.get_object('pga_combobox') + self.pga_combobox.pack_start(self.cell, True) + self.pga_combobox.add_attribute(self.cell, 'text', 1) + self.pga_combobox.set_active(1) + + self.srate_combobox = self.builder.get_object('srate_combobox') + self.srate_combobox.pack_start(self.cell, True) + self.srate_combobox.add_attribute(self.cell, 'text', 1) + self.srate_combobox.set_active(7) + + self.gain_combobox = self.builder.get_object('gain_combobox') + self.gain_combobox.pack_start(self.cell, True) + self.gain_combobox.add_attribute(self.cell, 'text', 1) + self.gain_combobox.set_active(1) \ No newline at end of file diff --git a/dstatInterface/interface/chronoamp.glade b/dstatInterface/interface/chronoamp.glade new file mode 100644 index 0000000000000000000000000000000000000000..3458127d3e0f85e7265a108f020437fa420c0ecd --- /dev/null +++ b/dstatInterface/interface/chronoamp.glade @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <requires lib="gtk+" version="2.24"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkListStore" id="ca list"> + <columns> + <!-- column-name index --> + <column type="guint"/> + <!-- column-name millivolts --> + <column type="gint"/> + <!-- column-name seconds --> + <column type="guint"/> + </columns> + </object> + <object class="GtkWindow" id="window1"> + <property name="can_focus">False</property> + <property name="default_width">300</property> + <property name="default_height">500</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkViewport" id="viewport1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Potential (mV)</property> + </object> + </child> + <child> + <object class="GtkEntry" id="potential_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">5</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="truncate_multiline">True</property> + <property name="invisible_char_set">True</property> + <property name="caps_lock_warning">False</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Time (s)</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="time_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">5</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="truncate_multiline">True</property> + <property name="invisible_char_set">True</property> + <property name="caps_lock_warning">False</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="add_button"> + <property name="label">gtk-add</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="remove_button"> + <property name="label">gtk-remove</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkTreeView" id="treeview1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">ca list</property> + <property name="search_column">0</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + </child> + </object> +</interface> diff --git a/dstatInterface/interface/chronoamp.py b/dstatInterface/interface/chronoamp.py new file mode 100644 index 0000000000000000000000000000000000000000..9bb398f6b2a56cd1cde75ceb0fb186281c9ac887 --- /dev/null +++ b/dstatInterface/interface/chronoamp.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +import gtk + +class chronoamp: + def __init__(self): + self.builder = gtk.Builder() + self.builder.add_from_file('interface/chronoamp.glade') + self.builder.connect_signals(self) + self.cell = gtk.CellRendererText() \ No newline at end of file diff --git a/dstatInterface/interface/cv.glade b/dstatInterface/interface/cv.glade new file mode 100644 index 0000000000000000000000000000000000000000..ab547acf2c4d4b62f0b55598d79a20f356a89e91 --- /dev/null +++ b/dstatInterface/interface/cv.glade @@ -0,0 +1,434 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <requires lib="gtk+" version="2.24"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window1"> + <property name="can_focus">False</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkViewport" id="viewport1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkFrame" id="frame1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">out</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Potential (mV)</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Time (s)</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Cleaning</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Deposition</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="clean_mV"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="dep_mV"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="dep_s"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="clean_s"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Preconditioning</property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">2</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">out</property> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="n_rows">5</property> + <property name="n_columns">2</property> + <property name="column_spacing">10</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="label8"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Start (mV)</property> + </object> + <packing> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Vertex 1 (mV)</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Vertex 2 (mV)</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="start_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="v1_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="v2_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Slope (mV/s)</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Scans</property> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="slope_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="scans_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Experiment</property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">2</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + </child> + </object> +</interface> diff --git a/dstatInterface/interface/cv.py b/dstatInterface/interface/cv.py new file mode 100644 index 0000000000000000000000000000000000000000..102352d37db10cbe743995929762b04343ec587a --- /dev/null +++ b/dstatInterface/interface/cv.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +import gtk + +class cv: + def __init__(self): + self.builder = gtk.Builder() + self.builder.add_from_file('interface/cv.glade') + self.builder.connect_signals(self) diff --git a/dstatInterface/interface/lsv.glade b/dstatInterface/interface/lsv.glade new file mode 100644 index 0000000000000000000000000000000000000000..63c4468a3060496c14a8b3e092be3285578222c6 --- /dev/null +++ b/dstatInterface/interface/lsv.glade @@ -0,0 +1,362 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <requires lib="gtk+" version="2.24"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window1"> + <property name="can_focus">False</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkViewport" id="viewport1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkFrame" id="frame1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">out</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Potential (mV)</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Time (s)</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Cleaning</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Deposition</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="clean_mV"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="dep_mV"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="dep_s"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="clean_s"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Preconditioning</property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">2</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">out</property> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="column_spacing">10</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="label8"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Start (mV)</property> + </object> + <packing> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Stop (mV)</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Slope (mV/s)</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="start_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="stop_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="slope_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">â—</property> + <property name="width_chars">8</property> + <property name="text" translatable="yes">0</property> + <property name="xalign">1</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"/> + <property name="y_options">GTK_FILL</property> + <property name="y_padding">3</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Experiment</property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">2</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + </child> + </object> +</interface> diff --git a/dstatInterface/interface/lsv.py b/dstatInterface/interface/lsv.py new file mode 100644 index 0000000000000000000000000000000000000000..e1941f393aaa65bec6c4a8a35f0b9cbd10a46b28 --- /dev/null +++ b/dstatInterface/interface/lsv.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import gtk + +class lsv: + def __init__(self): + self.builder = gtk.Builder() + self.builder.add_from_file('interface/lsv.glade') + self.builder.connect_signals(self) + + self.start_entry = self.builder.get_object('start_entry') + self.stop_entry = self.builder.get_object('stop_entry') + self.slope_entry = self.builder.get_object('slope_entry') \ No newline at end of file diff --git a/dstatInterface/interface_test.py b/dstatInterface/interface_test.py new file mode 100644 index 0000000000000000000000000000000000000000..f7e13faf574d9781f8d7f67f5596113a89bfcf98 --- /dev/null +++ b/dstatInterface/interface_test.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python + +import sys +try: + import pygtk + pygtk.require('2.0') +except: + pass +try: + import gtk +except: + print('GTK 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 dstat_comm as comm + +class Error(Exception): + pass + +class InputError(Error): + """Exception raised for errors in the input. + + Attributes: + expr -- input expression in which the error occurred + msg -- error message + """ + + def __init__(self, expr, msg): + self.expr = expr + self.msg = msg + + +class main: + def __init__(self): + self.builder = gtk.Builder() + self.builder.add_from_file('interface/dstatinterface.glade') + self.builder.connect_signals(self) + self.cell = gtk.CellRendererText() + + #create instance of interface components + self.statusbar = self.builder.get_object('statusbar') + self.window = self.builder.get_object('window1') + self.aboutdialog = self.builder.get_object('aboutdialog1') + self.adc_pot = adc_pot.adc_pot() + self.chronoamp = chronoamp.chronoamp() + self.lsv = lsv.lsv() + self.cv = cv.cv() + + self.error_context_id = self.statusbar.get_context_id("error") + + #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.cv_container = self.cv.builder.get_object('scrolledwindow1') + self.cv_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') + self.adc_pot_container.reparent(self.adc_pot_box) + + #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.set_active(0) + + self.mainwindow = self.builder.get_object('window1') + self.mainwindow.set_title("Dstat Interface 0.1") + self.mainwindow.show_all() +# self.chronoamp_container.hide() + self.lsv_container.hide() + self.cv_container.hide() + + def exp_param_show(self, selection): + self.chronoamp_container.hide() + self.lsv_container.hide() + self.cv_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.cv_container.show() + else: + self.statusbar.push(self.error_context_id, "Experiment not yet implemented") + + def on_window1_destroy(self, object, data=None): + print "quit with cancel" + gtk.main_quit() + + # This is the same as above but for our menu item. + def on_gtk_quit_activate(self, menuitem, data=None): + print "quit from menu" + gtk.main_quit() + + def on_gtk_about_activate(self, menuitem, data=None): + print "help about selected" + self.response = self.aboutdialog.run() #waits for user to click close - could test response with if + self.aboutdialog.hide() + + def on_expcombobox_changed(self, data=None): + self.exp_param_show(self.expcombobox.get_active()) + + def on_pot_start_clicked(self, data=None): + selection = self.expcombobox.get_active() + + if selection == 0: #CA + pass + elif selection == 1: #LSV + if self.adc_pot.buffer_toggle.get_active(): #True if box checked + adc_buffer = "0x2" + else: + adc_buffer = "0x0" + + self.srate_model = self.adc_pot.srate_combobox.get_model() + self.pga_model = self.adc_pot.pga_combobox.get_model() + self.gain_model = self.adc_pot.gain_combobox.get_model() + + adc_rate = self.srate_model.get_value(self.adc_pot.srate_combobox.get_active_iter(), 2) #third column + adc_pga = self.pga_model.get_value(self.adc_pot.pga_combobox.get_active_iter(), 2) + gain = self.gain_model.get_value(self.adc_pot.gain_combobox.get_active_iter(), 2) + + try: + self.statusbar.remove_all(self.error_context_id) + start = int(self.lsv.start_entry.get_text()) + stop = int(self.lsv.stop_entry.get_text()) + slope = int(self.lsv.slope_entry.get_text()) + + #check parameters are within hardware limits + if (start > 1499 or start < -1500): + raise InputError(start,"Start parameter exceeds hardware limits.") + if (stop > 1499 or stop < -1500): + raise InputError(stop,"Stop parameter exceeds hardware limits.") + if (slope > 2000 or slope < 1): + raise InputError(slope,"Slope parameter exceeds hardware limits.") + if start == stop: + raise InputError(start,"Start cannot equal Stop.") + + comm.lsv_exp(adc_buffer, adc_rate, adc_pga, gain, start, stop, slope) + + except ValueError: + self.statusbar.push(self.error_context_id, "Experiment parameters must be integers.") + except InputError as e: + self.statusbar.push(self.error_context_id, e.msg) + + elif selection == 2: #CV + pass + else: + pass + +if __name__ == "__main__": + main = main() + gtk.main() \ No newline at end of file