# HG changeset patch # User Dan Smith dsmith@danplanet.com # Date 1333739557 25200 # Node ID 8fc20ff7fa28b3e563185fb18396c6d15977cbec # Parent 0dd1b82210090092fd77336db3f65f406c4c5b0e Settings UI #00
diff -r 0dd1b8221009 -r 8fc20ff7fa28 chirpui/editorset.py --- a/chirpui/editorset.py Fri Apr 06 12:12:37 2012 -0700 +++ b/chirpui/editorset.py Fri Apr 06 12:12:37 2012 -0700 @@ -19,7 +19,7 @@
from chirp import chirp_common, directory, generic_csv, xml from chirpui import memedit, dstaredit, bankedit, common, importdialog -from chirpui import inputdialog, reporting +from chirpui import inputdialog, reporting, settingsedit
class EditorSet(gtk.VBox): __gsignals__ = { @@ -64,6 +64,7 @@ "dstar" : None, "bank_names" : None, "bank_members" : None, + "settings" : None, }
if isinstance(self.radio, chirp_common.IcomDstarSupport): @@ -106,6 +107,11 @@ self.editors["bank_members"].root.show() self.editors["bank_members"].connect("changed", self.banks_changed)
+ self.editors["settings"] = settingsedit.SettingsEditor(self.rthread) + lab = gtk.Label(_("Settings")) + self.tabs.append_page(self.editors["settings"].root, lab) + self.editors["settings"].root.show() + self.pack_start(self.tabs) self.tabs.show()
diff -r 0dd1b8221009 -r 8fc20ff7fa28 chirpui/settingsedit.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/chirpui/settingsedit.py Fri Apr 06 12:12:37 2012 -0700 @@ -0,0 +1,131 @@ +# Copyright 2012 Dan Smith dsmith@danplanet.com +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. + +import gtk +import gobject + +from chirp import chirp_common, settings +from chirpui import common, miscwidgets + +class RadioSettingProxy(settings.RadioSetting): + def __init__(self, setting, editor): + self._setting = setting + self._editor = editor + +class SettingsEditor(common.Editor): + def __init__(self, rthread): + common.Editor.__init__(self) + self._rthread = rthread + + self.root = gtk.Table(20, 3) + self.root.set_col_spacings(10) + self._index = 0 + + self._top_setting_group = None + + job = common.RadioJob(self._build_ui, "get_settings") + job.set_desc("Getting radio settings") + self._rthread.submit(job) + + def _save_settings(self): + if self._top_setting_group is None: + return + + job = common.RadioJob(None, "set_settings", self._top_setting_group) + job.set_desc("Setting radio settings") + self._rthread.submit(job) + + def _load_setting(self, element, widget): + value = element.get_value() + if isinstance(value, settings.RadioSettingValueInteger): + adj = widget.get_adjustment() + adj.configure(value.get_value(), + value.get_min(), value.get_max(), + value.get_step(), 1, 0) + elif isinstance(value, settings.RadioSettingValueBoolean): + widget.set_active(value.get_value()) + elif isinstance(value, settings.RadioSettingValueList): + model = widget.get_model() + model.clear() + for option in value.get_options(): + widget.append_text(option) + widget.set_active(value.get_options().index(value.get_value())) + elif isinstance(value, settings.RadioSettingValueString): + widget.set_text(value.get_value()) + else: + print "Unsupported widget type %s for %s" % (value.__class__, + element.get_name()) + + def _save_setting(self, widget, element): + value = element.get_value() + if isinstance(value, settings.RadioSettingValueInteger): + value.set_value(widget.get_adjustment().get_value()) + elif isinstance(value, settings.RadioSettingValueBoolean): + value.set_value(widget.get_active()) + elif isinstance(value, settings.RadioSettingValueList): + value.set_value(widget.get_active_text()) + elif isinstance(value, settings.RadioSettingValueString): + value.set_value(widget.get_text()) + else: + print "Unsupported widget type %s for %s" % (value.__class__, + element.get_name()) + + self._save_settings() + + def _build_ui_real(self, group): + if not isinstance(group, settings.RadioSettingGroup): + print "Toplevel is not a group" + return + + self._top_setting_group = group + + def pack(widget, pos): + self.root.attach(widget, pos, pos+1, self._index, self._index+1, + xoptions=gtk.FILL, yoptions=0) + + for element in group.get_elements(): + label = gtk.Label(element.get_shortname()) + label.set_alignment(1.0, 0.5) + label.show() + pack(label, 0) + + value = element.get_value() + if isinstance(value, settings.RadioSettingValueInteger): + widget = gtk.SpinButton() + widget.connect("value-changed", + self._save_setting, element) + elif isinstance(value, settings.RadioSettingValueBoolean): + widget = gtk.CheckButton(_("Enabled")) + widget.connect("toggled", + self._save_setting, element) + elif isinstance(value, settings.RadioSettingValueList): + widget = miscwidgets.make_choice([], editable=False) + widget.connect("changed", + self._save_setting, element) + elif isinstance(value, settings.RadioSettingValueString): + widget = gtk.Entry() + widget.connect("changed", + self._save_setting, element) + else: + print "Unsupported widget type: %s" % value.__class__ + + self._load_setting(element, widget) + + widget.show() + pack(widget, 1) + self._index += 1 + + def _build_ui(self, group): + gobject.idle_add(self._build_ui_real, group)