# HG changeset patch # User Dan Smith dsmith@danplanet.com # Date 1302106729 25200 # Node ID f51cc15cd52dfce7a958af5b1708178e7c73adcb # Parent 3d3a44d2309b969e24571e436eb5b7b706095500 Add basic UI elements for modifications
diff -r 3d3a44d2309b -r f51cc15cd52d chirpui/editorset.py --- a/chirpui/editorset.py Wed Apr 06 09:12:24 2011 -0700 +++ b/chirpui/editorset.py Wed Apr 06 09:18:49 2011 -0700 @@ -21,7 +21,7 @@
from chirp import chirp_common, directory, csv, xml from chirpui import memedit, dstaredit, bankedit, common, importdialog -from chirpui import inputdialog +from chirpui import inputdialog, modedit
class EditorSet(gtk.VBox): __gsignals__ = { @@ -69,6 +69,11 @@ else: self.banked = None
+ if self.radio.get_features().has_mods: + self.moded = modedit.ModEditor(self.rthread) + else: + self.moded = None + lab = gtk.Label("Memories") self.tabs.append_page(self.memedit.root, lab) self.memedit.root.show() @@ -85,6 +90,12 @@ self.banked.root.show() self.banked.connect("changed", self.banks_changed)
+ if self.moded: + lab = gtk.Label("Mods") + self.tabs.append_page(self.moded.root, lab) + self.moded.root.show() + #self.moded.connect("changed", self.mods_changed) + self.pack_start(self.tabs) self.tabs.show()
@@ -275,8 +286,9 @@
def tab_selected(self, notebook, foo, pagenum): # Quick hack for D-STAR editor - if pagenum == 1: - self.dstared.focus() + #if pagenum == 1: + # self.dstared.focus() + pass
def set_read_only(self, read_only=True): self.memedit.set_read_only(read_only) diff -r 3d3a44d2309b -r f51cc15cd52d chirpui/modedit.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/chirpui/modedit.py Wed Apr 06 09:18:49 2011 -0700 @@ -0,0 +1,115 @@ +#!/usr/bin/python +# +# Copyright 2010 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 3 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 +from chirpui import common, miscwidgets + +def enforce_format(entry, new, length, pos, format): + formats = { + "X" : "0123456789ABCDEF", + "i" : "0123456789", + } + + for i in new: + if i.upper() not in formats[format]: + entry.stop_emission("insert-text") + +class ModificationEditor: + def __init__(self, radio, mod): + self._radio = radio + self._mod = mod + + def build_ui(self): + pass + + def _build_label(self): + l = gtk.Label(self._mod.get_name()) + l.show() + return l + + def _set_mod(self, button): + self._mod.set_new_value(self._get_value()) + self._radio.set_mod(self._mod) + + def _build_set(self): + b = gtk.Button("Set") + b.connect("clicked", self._set_mod) + b.show() + return b + +class OptionModificationEditor(ModificationEditor): + def _get_value(self): + return self.__c.get_active_text() + + def build_ui(self): + self.__c = miscwidgets.make_choice(self._mod.get_options(), + False, self._mod.get_current_value()) + self.__c.show() + + return self._build_label(), self.__c, self._build_set() + +class IntegerModificationEditor(ModificationEditor): + def _get_value(self): + base = { + "X" : 16, + "i" : 10, + } + + return int(self.__n.get_text(), + base[self._mod.get_display_format()[-1]]) + + def build_ui(self): + self.__n = gtk.Entry() + self.__n.connect("insert-text", enforce_format, + self._mod.get_display_format()[-1]) + v = self._mod.get_display_format() % self._mod.get_current_value() + self.__n.set_text(v) + self.__n.show() + + return self._build_label(), self.__n, self._build_set() + +class ModEditor(common.Editor): + def __init__(self, rthread): + common.Editor.__init__(self) + self.rthread = rthread + + self.root = gtk.Table(5, 3) + + xopts = gtk.FILL + yopts = 0 + + row = 0 + for mod in rthread.radio.get_mods(): + if isinstance(mod, chirp_common.RadioModOpt): + e = OptionModificationEditor(self.rthread.radio, mod) + elif isinstance(mod, chirp_common.RadioModInt): + e = IntegerModificationEditor(self.rthread.radio, mod) + else: + continue + + col = 0 + for widget in e.build_ui(): + self.root.attach(widget, col, col+1, row, row+1, + xopts, yopts, 3, 1) + col += 1 + row += 1 + + def focus(self): + pass