From bcf7b11e8eab7e21904a79251b27923440c5888c Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Mon, 3 Feb 2014 06:38:04 +0000 Subject: [PATCH] Update settings --- .gitignore | 1 + vis/config.py | 59 +++++++++++++++-------- vis/settings.cfg | 11 ----- vis/visual.py | 21 ++++++--- vis/visual.ui | 120 ++++++++++++++++++++++++++++------------------- 5 files changed, 126 insertions(+), 86 deletions(-) delete mode 100644 vis/settings.cfg diff --git a/.gitignore b/.gitignore index 536d98d..eec85d6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ __pycache__ xively config.mk +settings.cfg diff --git a/vis/config.py b/vis/config.py index 71dd99e..50c5f77 100644 --- a/vis/config.py +++ b/vis/config.py @@ -5,36 +5,57 @@ class Config: filename = "settings.cfg" defaults = { - 'baudrate': '/dev/ttyACM0', - 'baudrate': '9600', - 'parity': 'N', - 'databits': '8', - 'stopbits': '1', - 'username': '', - 'password': '', - 'apikey': '', + 'serial': { + 'device': '/dev/ttyACM0', + 'baudrate': '9600', + 'parity': 'N', + 'databits': '8', + 'stopbits': '1', + }, + 'xively': { + 'feedid': '', + 'apikey': '', + 'maxrate': '6', + } } # Constructor def __init__(self): - self.parser = ConfigParser(defaults=self.defaults) + self.parser = ConfigParser() self.parser.add_section('serial') self.parser.add_section('xively') self.load() # Methods def load(self): - self.parser.read(self.filename) + def get(sect, name): + if self.parser.has_option(sect, name): + return self.parser.get(sect, name) + else: + return self.defaults[sect][name] - self.device = self.parser.get('serial', 'device') - self.baudrate = self.parser.getint('serial', 'baudrate') - self.parity = self.parser.get('serial', 'parity') - self.databits = self.parser.getint('serial', 'databits') - self.stopbits = self.parser.getint('serial', 'stopbits') + self.parser.read(self.filename) - self.username = self.parser.get('xively', 'username') - self.password = self.parser.get('xively', 'password') - self.apikey = self.parser.get('xively', 'apikey') + self.device = get('serial', 'device') + self.baudrate = int(get('serial', 'baudrate')) + self.parity = get('serial', 'parity') + self.databits = int(get('serial', 'databits')) + self.stopbits = int(get('serial', 'stopbits')) + + self.feedid = get('xively', 'feedid') + self.apikey = get('xively', 'apikey') + self.maxrate = int(get('xively', 'maxrate')) def save(self): - self.parser.write(self.filename) + self.parser.set('serial', 'device', self.device) + self.parser.set('serial', 'baudrate', str(int(self.baudrate))) + self.parser.set('serial', 'parity', self.parity) + self.parser.set('serial', 'databits', str(int(self.databits))) + self.parser.set('serial', 'stopbits', str(int(self.stopbits))) + + self.parser.set('xively', 'feedid', self.feedid) + self.parser.set('xively', 'apikey', self.apikey) + self.parser.set('xively', 'maxrate', str(int(self.maxrate))) + + with open(self.filename, 'w') as fd: + self.parser.write(fd) diff --git a/vis/settings.cfg b/vis/settings.cfg deleted file mode 100644 index 8757c24..0000000 --- a/vis/settings.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[serial] -device = /dev/ttyACM0 -buadrate = 9600 -parity = N -databits = 8 -stopbits = 1 - -[xively] -username = andy -password = open sesame -apikey = magic diff --git a/vis/visual.py b/vis/visual.py index 5d0ff39..6d06ba4 100644 --- a/vis/visual.py +++ b/vis/visual.py @@ -56,6 +56,16 @@ class Visual: print("Unimplemented: on_rate") return True + def on_config(self, obj): + name = Gtk.Buildable.get_name(obj) + if isinstance(obj, Gtk.SpinButton): + value = obj.get_value() + else: + value = obj.get_text() + if getattr(self.config, name) != value: + setattr(self.config, name, value) + self.config.save() + def on_key(self, win, ev): if ev.string == 'q': Gtk.main_quit(); @@ -78,14 +88,12 @@ class Visual: stopb.set_value(self.config.stopbits) # Xively settings - user = self.builder.get_object("username") - pwd = self.builder.get_object("password") + feed = self.builder.get_object("feedid") api = self.builder.get_object("apikey") - user.set_text(self.config.username) - pwd.set_text(self.config.password) + rate = self.builder.get_object("maxrate") + feed.set_text(self.config.feedid) api.set_text(self.config.apikey) - - # TODO - send changes back to config + rate.set_value(self.config.maxrate) def update(self, state): def setxyz(objs, vals): @@ -139,4 +147,3 @@ class Visual: return status = self.builder.get_object("status") status.push(text=('Error: ' + msg), context_id=0) - diff --git a/vis/visual.ui b/vis/visual.ui index bb98176..f4795b7 100644 --- a/vis/visual.ui +++ b/vis/visual.ui @@ -2,6 +2,16 @@ + + Serial + gtk-connect + + + + Settings + gtk-preferences + + 100 1 @@ -37,22 +47,12 @@ 1 10 - - - Serial - gtk-connect - - - - Settings - gtk-preferences - - - - Xively - gtk-connect - + + 100 + 1 + 10 + False 5 @@ -163,6 +163,7 @@ True True baud_adj + 1 @@ -182,6 +183,7 @@ True True stopb_adj + 1 @@ -201,6 +203,7 @@ True True datab_adj + 1 @@ -234,6 +237,7 @@ False True True + 1 @@ -265,6 +269,7 @@ False True True + 1 @@ -312,47 +317,20 @@ 2 20 - - True - False - 0 - Username - - - GTK_FILL - GTK_FILL - - - - - True - False - 0 - Password - - - 1 - 2 - GTK_FILL - GTK_FILL - - - - + True False 0 - API Key + 8 + Feed ID - 2 - 3 GTK_FILL GTK_FILL - + True True ● @@ -361,6 +339,7 @@ False True True + 1 @@ -369,7 +348,7 @@ - + True True ● @@ -378,6 +357,7 @@ False True True + 1 @@ -388,15 +368,44 @@ - + + True + False + 0 + API Key + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + False + 0 + Max Rate + + + 2 + 3 + GTK_FILL + GTK_FILL + + + + True True ● - True False False True True + rate_adj + 1 @@ -445,6 +454,11 @@ 1 10 + + Xively + gtk-connect + + False @@ -1194,4 +1208,12 @@ + + + + + + + + -- 2.43.2