From 4b2f339ae8db809c206f0ec4dc6438f55b5656bb Mon Sep 17 00:00:00 2001 From: Stefan Siegl Date: Sun, 21 Oct 2012 01:41:04 +0200 Subject: [PATCH] Improve settings dialog, add menu item. --- saera.py | 55 +++++++---------------- settings_dialog.py | 109 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 40 deletions(-) create mode 100644 settings_dialog.py diff --git a/saera.py b/saera.py index c3cab32..9375c8d 100644 --- a/saera.py +++ b/saera.py @@ -15,6 +15,7 @@ import email import time import commands +from settings_dialog import SaeraSettingsDialog from subprocess import PIPE, Popen from threading import Thread from Queue import Queue, Empty @@ -155,13 +156,24 @@ def __init__(self): self.ims = [] self.lines = [['What can I help you with?',False]] try: + el = hildon.GtkButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) + el.set_label("Settings") + el.connect("clicked", self.open_settings) + el.show() + + menu = hildon.AppMenu() + menu.append(el) + program = hildon.Program.get_instance() self.win = hildon.StackableWindow() + self.win.set_app_menu(menu) + rotation_object = FremantleRotation(app_name, self.win, app_version, initial_mode) program.add_window(self.win) except: print "No hildon win" self.win = gtk.Window() + self.win.set_size_request(400, 550) self.win.set_title("Saera") self.vbox = gtk.VBox() @@ -467,46 +479,9 @@ def read_ims(self): return - def open_settings(self): - def set_lang(widget, langs): - sel = [None] - def selection_changed(selector, seltype): - global settings - __import__("sentences.sentences_"+selector.get_current_text()) - saera_processing.sent = sys.modules["sentences.sentences_"+selector.get_current_text()] - settings['language'] = selector.get_current_text() - open(os.getenv('HOME')+'/.saera', 'w').write(json.dumps(settings)) - stack = hildon.WindowStack.get_default() - stack.pop_1() - lwin = hildon.StackableWindow() - selector = hildon.TouchSelector(text = True) - selector.connect("changed", selection_changed) - for i in langs: - selector.append_text(i) - selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) - lwin.add(selector) - lwin.show_all() - try: - win = hildon.StackableWindow() - except NameError: - win = gtk.Window() - win.set_modal(True) - win.set_transient_for(self.win) - win.set_title("Settings") - vbox = gtk.VBox() - win.add(vbox) - langs = [i.split("_")[1].split(".")[0] for i in os.listdir('sentences') if (i.endswith('.py') and not 'init' in i)] - try: - langbut = hildon.GtkButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) - langbut.set_label("Language") - langbut.connect("clicked", set_lang, langs) - vbox.pack_start(langbut, True, False, 0) - except NameError: - cbox = gtk.combo_box_new_text() - for i in langs: - cbox.append_text(i) - vbox.pack_start(cbox, True, False, 0) - win.show_all() + def open_settings(self, widget = None): + dialog = SaeraSettingsDialog(settings) + dialog.show(self.win) def run_saera(self, widget=None, event=None, data=None): diff --git a/settings_dialog.py b/settings_dialog.py new file mode 100644 index 0000000..5b00cfd --- /dev/null +++ b/settings_dialog.py @@ -0,0 +1,109 @@ +#!/usr/bin/python + +import gtk +import os +import sys +import saera +import saera_processing + +try: + import hildon +except ImportError: + pass + +try: + import json +except ImportError: + import simplejson as json + +class SaeraSettingsDialog(): + def __init__(self, _settings): + self.settings = _settings + + def touch_selector_change(self, selector, seltype, data): + button, key = data + + self.settings[key] = selector.get_current_text() + label = button.get_label().split(":")[0] + button.set_label("%s: %s" % (label, self.settings[key])) + + stack = hildon.WindowStack.get_default() + stack.pop_1() + + def check_box_change(self, widget, key): + if widget.get_active(): + self.settings[key] = "yes" + else: + self.settings[key] = "no" + + def show_touch_selector(self, widget, data): + label, key, options = data + + lwin = hildon.StackableWindow() + lwin.set_title("Settings") + + selector = hildon.TouchSelector(text = True) + selector.connect("changed", self.touch_selector_change, (widget, key)) + for i in options: + selector.append_text(i) + selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + lwin.add(selector) + lwin.show_all() + + def get_available_languages(self): + return [i.split("_")[1].split(".")[0] for i in os.listdir('sentences') if (i.endswith('.py') and not 'init' in i)] + + def add_chooser(self, vbox, label, key, options): + try: + el = hildon.GtkButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) + el.set_label("%s: %s" % (label, self.settings[key])) + el.connect("clicked", self.show_touch_selector, (label, key, options)) + except NameError: + el = gtk.combo_box_new_text() + for i in options: + el.append_text(i) + + vbox.pack_start(el, True, False, 0) + + def add_check_button(self, vbox, label, key): + try: + el = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) + except NameError: + el = gtk.CheckButton() + + el.set_label(label) + el.set_active(self.settings[key] == "yes") + el.connect("toggled", self.check_box_change, key) + vbox.pack_start(el, True, False, 0) + + + def destroy_handler(self, win): + open(os.getenv('HOME') + '/.saera', 'w').write(json.dumps(self.settings)) + + modname = "sentences.sentences_" + self.settings["language"] + __import__(modname) + saera_processing.sent = sys.modules[modname] + + + def show(self, parent_window): + try: + win = hildon.StackableWindow() + except NameError: + win = gtk.Window() + win.set_modal(True) + win.set_transient_for(parent_window) + + vbox = gtk.VBox() + win.set_title("Settings") + win.add(vbox) + win.connect("destroy", self.destroy_handler) + + langs = self.get_available_languages() + self.add_chooser(vbox, "Language", "language", langs) + + opts = [ "always", "unrecognized", "never" ] + self.add_chooser(vbox, "Use Google Voice", "use_google_voice", opts) + + self.add_check_button(vbox, "Pass to answers.com", "use_answers_com") + + win.show_all()