]> Pileus Git - ~andy/csm213a-hw/commitdiff
Add settings
authorAndy Spencer <andy753421@gmail.com>
Sun, 2 Feb 2014 00:35:37 +0000 (00:35 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sun, 2 Feb 2014 00:35:37 +0000 (00:35 +0000)
vis/config.py
vis/main.py
vis/settings.cfg [new file with mode: 0644]
vis/visual.py
vis/visual.ui

index 652ad648c02a068a7959acbd2a19c6f4fe17c463..b40d09bef7256c9e923e082c5c2f00f00c2825bb 100644 (file)
@@ -1,3 +1,36 @@
+from ConfigParser import ConfigParser
+
 class Config:
+       # Attributes
+       filename = "settings.cfg"
+
+       defaults = {
+               'baudrate': '9600',
+               'stopbits': '1',
+               'databits': '8',
+               'username': '<username>',
+               'password': '<password>',
+               'apikey':   '<apikey>',
+       }
+
+       # Constructor
        def __init__(self):
-               pass
+               self.parser = ConfigParser(defaults=self.defaults)
+               self.parser.add_section('serial')
+               self.parser.add_section('xively')
+               self.load()
+
+       # Methods
+       def load(self):
+               self.parser.read(self.filename)
+
+               self.baudrate = self.parser.getint('serial', 'baudrate')
+               self.stopbits = self.parser.getint('serial', 'stopbits')
+               self.databits = self.parser.getint('serial', 'databits')
+
+               self.username = self.parser.get('xively', 'username')
+               self.password = self.parser.get('xively', 'password')
+               self.apikey   = self.parser.get('xively', 'apikey')
+
+       def save(self):
+               self.parser.write(self.filename)
index 605bc30cc06f15995eb792e7fe093bb4b00cbee4..897a4f7e340838c885a71789a31016f48693e765 100755 (executable)
@@ -10,7 +10,7 @@ class Main:
                self.config = Config();
                self.xively = Xively();
                self.serial = Serial();
-               self.visual = Visual();
+               self.visual = Visual(self.config);
 
        def main(self):
                self.visual.run()
diff --git a/vis/settings.cfg b/vis/settings.cfg
new file mode 100644 (file)
index 0000000..2ce5b07
--- /dev/null
@@ -0,0 +1,9 @@
+[serial]
+buadrate = 9600
+stopbits = 1
+databits = 8
+
+[xively]
+username = andy
+password = open sesame
+apikey   = magic
index 0d3550e9a79117bc9080a3ba2bc92c430e2f5c2b..aed73ae70aa7e6b0667bdd1ecc1b21830859b00c 100644 (file)
@@ -4,12 +4,13 @@ import pygtk
 import gtk
 
 class Visual:
-       def __init__(self):
+       def __init__(self, config):
                self.builder = gtk.Builder()
                self.builder.add_from_file('visual.ui')
                self.builder.connect_signals(self)
                self.window   = self.builder.get_object("window")
                self.settings = self.builder.get_object("settings")
+               self.config   = config
 
        # Signal handlers
        def on_hide(self, win, *args):
@@ -40,6 +41,26 @@ class Visual:
                gtk.main_quit()
 
         # Methods
+       def load_config(self):
+               # Serial settings
+               baud  = self.builder.get_object("baudrate")
+               stopb = self.builder.get_object("stopbits")
+               datab = self.builder.get_object("databits")
+               baud.set_value(self.config.baudrate)
+               stopb.set_value(self.config.stopbits)
+               datab.set_value(self.config.databits)
+
+               # Xively settings
+               user  = self.builder.get_object("username")
+               pwd   = self.builder.get_object("password")
+               api   = self.builder.get_object("apikey")
+               user.set_text(self.config.username)
+               pwd.set_text(self.config.password)
+               api.set_text(self.config.apikey)
+
+               # TODO - send changes back to config
+
        def run(self):
+               self.load_config()
                self.window.show()
                gtk.main()
index 0ac54bff4b3bdfa6a075011c480ed86465e4622c..6b6209f564e246ad812245a29920c56a564403ea 100644 (file)
@@ -2,6 +2,11 @@
 <interface>
   <requires lib="gtk+" version="2.24"/>
   <!-- interface-naming-policy project-wide -->
+  <object class="GtkAction" id="xively_con">
+    <property name="label" translatable="yes">Xively</property>
+    <property name="stock_id">gtk-connect</property>
+    <signal name="activate" handler="on_connect" swapped="no"/>
+  </object>
   <object class="GtkAdjustment" id="a2d_adj">
     <property name="upper">100</property>
     <property name="value">1</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="baud_adj">
+    <property name="upper">1.7976931348623157e+308</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="datab_adj">
+    <property name="lower">6</property>
+    <property name="upper">8</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkAdjustment" id="light_adj">
     <property name="upper">100</property>
     <property name="value">1</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkTextBuffer" id="serial_buf"/>
-  <object class="GtkAction" id="serial_con">
-    <property name="label" translatable="yes">Serial</property>
-    <property name="stock_id">gtk-connect</property>
-    <signal name="activate" handler="on_connect" swapped="no"/>
-  </object>
   <object class="GtkAction" id="setting_act">
     <property name="label" translatable="yes">Settings</property>
     <property name="stock_id">gtk-preferences</property>
     <signal name="activate" handler="on_show" swapped="no"/>
   </object>
-  <object class="GtkAction" id="xively_con">
-    <property name="label" translatable="yes">Xively</property>
+  <object class="GtkTextBuffer" id="serial_buf"/>
+  <object class="GtkAction" id="serial_con">
+    <property name="label" translatable="yes">Serial</property>
     <property name="stock_id">gtk-connect</property>
     <signal name="activate" handler="on_connect" swapped="no"/>
   </object>
+  <object class="GtkAdjustment" id="stopb_adj">
+    <property name="lower">1</property>
+    <property name="upper">2</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkDialog" id="settings">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
             <property name="position">0</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkFrame" id="serial_frame">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label_xalign">0</property>
+            <property name="shadow_type">none</property>
+            <child>
+              <object class="GtkAlignment" id="align1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="left_padding">12</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="column_spacing">20</property>
+                    <child>
+                      <object class="GtkLabel" id="baud_lbl">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Baud rate</property>
+                      </object>
+                      <packing>
+                        <property name="x_options">GTK_FILL</property>
+                        <property name="y_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="stopb_lbl">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Stop bits</property>
+                      </object>
+                      <packing>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_FILL</property>
+                        <property name="y_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="datab_lbl">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Data bits</property>
+                      </object>
+                      <packing>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
+                        <property name="x_options">GTK_FILL</property>
+                        <property name="y_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="baudrate">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">●</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>
+                        <property name="adjustment">baud_adj</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="GtkSpinButton" id="stopbits">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">●</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>
+                        <property name="adjustment">stopb_adj</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="y_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="databits">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">●</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>
+                        <property name="adjustment">datab_adj</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="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">Serial Settings</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkFrame" id="xively_frame">
             <property name="visible">True</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="invisible_char">●</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>
             </child>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="position">1</property>
+            <property name="position">2</property>
           </packing>
         </child>
       </object>