<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'># HG changeset patch<br># User K. Arvanitis &lt;<a href="mailto:kosta@alumni.uvic.ca">kosta@alumni.uvic.ca</a>&gt;<br># Date 1421911819 28800<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wed Jan 21 23:30:19 2015 -0800<br># Node ID a14b91de7d5390bad00ec450f0546531b6bb268d<br># Parent&nbsp; 9ca5e99e7552a667b362e6f6dac67212fbbc6a34<br>[FT-60] Adding Support for Settings to Yaesu FT-60<BR>Added support for most of the basic (but not all) settings avail. on<br>the FT-60.<BR>Note: some settings map to the memory bank and are therefore<br>not included in this list.<BR>Note: the list of settings and categories was taken from the<br>user manual for this radio.<BR>Tested against the specific revision model no. FT-60R.<BR>Feature #1759<BR>diff -r 9ca5e99e7552 -r a14b91de7d53 chirp/ft60.py<br>--- a/chirp/ft60.py&nbsp;Sat Jan 17 10:10:54 2015 -0600<br>+++ b/chirp/ft60.py&nbsp;Wed Jan 21 23:30:19 2015 -0800<br>@@ -13,9 +13,13 @@<br>&nbsp;# You should have received a copy of the GNU General Public License<br>&nbsp;# along with this program.&nbsp; If not, see &lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.<br>&nbsp;<br>-import time<br>+import time, os<br>&nbsp;from chirp import chirp_common, yaesu_clone, memmap, bitwise, directory<br>&nbsp;from chirp import errors<br>+from chirp.settings import RadioSetting, RadioSettingGroup, \<br>+&nbsp;&nbsp;&nbsp; RadioSettingValueInteger, RadioSettingValueList, \<br>+&nbsp;&nbsp;&nbsp; RadioSettingValueBoolean, RadioSettingValueString, \<br>+&nbsp;&nbsp;&nbsp; RadioSettingValueFloat<br>&nbsp;from textwrap import dedent<br>&nbsp;<br>&nbsp;ACK = "\x06"<br>@@ -128,6 +132,78 @@<br>&nbsp;<br>&nbsp;<br>&nbsp;MEM_FORMAT = """<br>+#seekto 0x0024;<br>+struct {<br>+&nbsp; u8 apo;<br>+&nbsp; u8 x25:3,<br>+&nbsp;&nbsp;&nbsp;&nbsp; tot:5;<br>+&nbsp; u8 x26;<br>+&nbsp; u8 x27;<br>+&nbsp; u8 x28:4,<br>+&nbsp;&nbsp;&nbsp;&nbsp; rf_sql:4;<br>+&nbsp; u8 x29:4,<br>+&nbsp;&nbsp;&nbsp;&nbsp; int_cd:4;<br>+&nbsp; u8 x2A:4,<br>+&nbsp;&nbsp;&nbsp;&nbsp; int_mr:4;<br>+&nbsp; u8 x2B:5,<br>+&nbsp;&nbsp;&nbsp;&nbsp; lock:3;<br>+&nbsp; u8 x2C:5,<br>+&nbsp;&nbsp;&nbsp;&nbsp; dt_dly:3;<br>+&nbsp; u8 x2D:7,<br>+&nbsp;&nbsp;&nbsp;&nbsp; dt_spd:1;<br>+&nbsp; u8 ar_bep;<br>+&nbsp; u8 x2F:6,<br>+&nbsp;&nbsp;&nbsp;&nbsp; lamp:2;<br>+&nbsp; u8 x30:5,<br>+&nbsp;&nbsp;&nbsp;&nbsp; bell:3;<br>+&nbsp; u8 x31:5,<br>+&nbsp;&nbsp;&nbsp;&nbsp; rxsave:3;<br>+&nbsp; u8 x32;<br>+&nbsp; u8 x33;<br>+&nbsp; u8 x34;<br>+&nbsp; u8 x35;<br>+&nbsp; u8 x36;<br>+&nbsp; u8 x37;<br>+&nbsp; u8 wx_alt:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x38_1:3,<br>+&nbsp;&nbsp;&nbsp;&nbsp; ar_int:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x38_5:3;<br>+&nbsp; u8 x39:3,<br>+&nbsp;&nbsp;&nbsp;&nbsp; ars:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; vfo_bnd:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; dcs_nr:2,<br>+&nbsp;&nbsp;&nbsp;&nbsp; ssrch:1;<br>+&nbsp; u8 pri_rvt:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3A_1:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; beep_sc:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; edg_bep:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; beep_key:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; inet:2,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3A_7:1;<br>+&nbsp; u8 x3B_0:5,<br>+&nbsp;&nbsp;&nbsp;&nbsp; scn_md:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3B_6:2;<br>+&nbsp; u8 x3C_0:2,<br>+&nbsp;&nbsp;&nbsp;&nbsp; rev_hm:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; mt_cl:1<br>+&nbsp;&nbsp;&nbsp;&nbsp; resume:2,<br>+&nbsp;&nbsp;&nbsp;&nbsp; txsave:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; pag_abk:1;<br>+&nbsp; u8 x3D_0:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; scn_lmp:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3D_2:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; bsy_led:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3D_4:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; tx_led:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3D_6:2;<br>+&nbsp; u8 x3E_0:2,<br>+&nbsp;&nbsp;&nbsp;&nbsp; bclo:1,<br>+&nbsp;&nbsp;&nbsp;&nbsp; x3E_3:5;<br>+} settings;<br>+ <br>+#seekto 0x09E;<br>+ul16 mbs;<br>+<br>&nbsp;#seekto 0x0248;<br>&nbsp;struct {<br>&nbsp;&nbsp; u8 used:1,<br>@@ -198,6 +274,10 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bank = chirp_common.Bank(self, "%i" % (i + 1), "Bank %i" % (i + 1))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bank.index = i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; banks.append(bank)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #mbs = (self._radio._memobj.mbs &gt;&gt; i) &amp; 1<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #print "Bank %i: mbs: %i " % (i, mbs) <br>+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return banks<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; def add_memory_to_mapping(self, memory, bank):<br>@@ -277,6 +357,7 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rf.can_odd_split = True<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rf.has_ctone = False<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rf.has_bank = True<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rf.has_settings = True<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rf.has_dtcs_polarity = False<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return rf<br>@@ -309,6 +390,229 @@<br>&nbsp;&nbsp;&nbsp;&nbsp; def process_mmap(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)<br>&nbsp;<br>+&nbsp;&nbsp;&nbsp; def get_settings(self):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _settings = self._memobj.settings<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeater = RadioSettingGroup("repeater", "Repeater Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctcss = RadioSettingGroup("ctcss", "CTCSS/DSC/DTMF Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arts = RadioSettingGroup("arts", "ARTS Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scan = RadioSettingGroup("scan", "Scan Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; power = RadioSettingGroup("power", "Power Saver Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wires = RadioSettingGroup("wires", "WiRES(tm) Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eai = RadioSettingGroup("eai", "EAI/EPCS Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch = RadioSettingGroup("switch", "Switch/Knob Settings")<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc = RadioSettingGroup("misc", "Miscellaneous Settings")<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setmode = RadioSettingGroup("top", "Set Mode",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeater, ctcss, arts, scan, power, wires, eai, switch, misc)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # APO<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "%0.1f" % (x * 0.5) for x in range(1, 24+1) ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("apo", "Automatic Power Off",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.apo])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # AR.BEP<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "INRANG" ] + [ "ALWAYS" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arts.append( RadioSetting("ar_bep", "ARTS Beep",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.ar_bep])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # AR.INT<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = ["25 SEC"] + [ "15 SEC" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arts.append( RadioSetting("ar_int", "ARTS Polling Interval",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.ar_int])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ARS<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeater.append( RadioSetting("ars", "Automatic Repeater Shift",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.ars])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # BCLO<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("bclo", "Bush Channel Lock-Out",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.bclo])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # BEEP<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "KEY" ] + [ "KEY+SC" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs = RadioSetting("beep_key", "Enable the Beeper",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.beep_key + _settings.beep_sc]))<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def apply_beep(s, obj):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setattr(obj, "beep_key", (int(s.value) &amp; 1) or ((int(s.value) &gt;&gt; 1) &amp; 1))<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setattr(obj, "beep_sc", (int(s.value) &gt;&gt; 1) &amp; 1)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.set_apply_callback(apply_beep, self._memobj.settings);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch.append(rs)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # BELL<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "1T" ] + [ "3T" ] + [ "5T" ] + [ "8T" ] + [ "CONT" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctcss.append( RadioSetting("bell", "Bell Repetitions",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.bell])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # BSY.LED<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "ON" ] + [ "OFF" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("bsy_led", "Busy LED",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.bsy_led])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # DCS.NR<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "TR/X N" ] + [ "RX R" ] + [ "TX R" ] + [ "T/RX R" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctcss.append( RadioSetting("dcs_nr", "\"Inverted\" DCS Code Decoding",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.dcs_nr])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # DT.DLY<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "50 MS" ] + [ "100 MS" ] + [ "250 MS" ] + [ "450 MS" ] + \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "750 MS" ]+ [ "1000 MS" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctcss.append( RadioSetting("dt_dly", "DTMF Autodialer Delay Time",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.dt_dly])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # DT.SPD<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "50 MS" ] + [ "100 MS" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctcss.append( RadioSetting("dt_spd", "DTMF Autodialer Sending Speed",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.dt_spd])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # EDG.BEP<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("edg_bep", "Band Edge Beeper",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.edg_bep])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # I.NET<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "COD" ]+ [ "MEM" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs = RadioSetting("inet", "Internet Link Connection",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.inet - 1]))<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def apply_inet(s, obj):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setattr(obj, s.get_name(), int(s.value) + 1)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.set_apply_callback(apply_inet, self._memobj.settings);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wires.append(rs)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # INT.CD<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "CODE 0" ] + [ "CODE 1" ] + [ "CODE 2" ] + [ "CODE 3" ] + [ "CODE 4" ] + \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "CODE 5" ] + [ "CODE 6" ] + [ "CODE 7" ] + [ "CODE 8" ] + [ "CODE 9" ] + \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "CODE A" ] + [ "CODE B" ] + [ "CODE C" ] + [ "CODE D" ] + [ "CODE E" ] + [ "CODE F" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wires.append( RadioSetting("int_cd", "Access Number for WiRES(TM)",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.int_cd])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # INT.MR<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "d1" ] + [ "d2" ] + [ "d3" ] + [ "d4" ] + [ "d5" ] + \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "d6" ] + [ "d7" ] + [ "d8" ] + [ "d9" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wires.append( RadioSetting("int_mr", "Access Number (DTMF) for Non-WiRES(TM)",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.int_mr])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # LAMP<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "KEY" ] + [ "5SEC" ] + [ "TOGGLE" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch.append( RadioSetting("lamp", "Lamp Mode",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.lamp])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # LOCK<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "LK KEY" ] + [ "LKDIAL" ] + [ "LK K+D" ] + [ "LK PTT" ] + [ "LP P+K" ] + \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "LK P+D" ] + [ "LK ALL" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs = RadioSetting("lock", "Control Locking",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.lock - 1]))<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def apply_lock(s, obj):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setattr(obj, s.get_name(), int(s.value) + 1)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.set_apply_callback(apply_lock, self._memobj.settings);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch.append(rs)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # M/T-CL<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "MONI" ] + [ "T-CALL" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch.append( RadioSetting("mt_cl", "MONI Switch Function",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.mt_cl])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # PAG.ABK<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eai.append( RadioSetting("pag_abk", "Paging Answer Back",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.pag_abk])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # RESUME<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "TIME" ] + [ "HOLD" ] + [ "BUSY" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scan.append( RadioSetting("resume", "Scan Resume Mode",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.resume])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # REV/HM<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "REV" ] + [ "HOME" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch.append( RadioSetting("rev_hm", "HM/RV Key Function",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.rev_hm])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # RF.SQL<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "S-1" ] + [ "S-2" ] + [ "S-3" ] + [ "S-4" ] + \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "S-5" ] + [ "S-6" ] + [ "S-8" ] + [ "S-FULL" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("rf_sql", "RF Squelch Threshold",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.rf_sql])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # PRI.RVT<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scan.append( RadioSetting("pri_rvt", "Priority Revert",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.pri_rvt])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # RXSAVE<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "200 MS" ] + [ "300 MS" ] + [ "500 MS" ] + [ "1 S" ] + [ "2 S" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; power.append( RadioSetting("rxsave", "Receive Mode Batery Savery Interval",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.rxsave])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # S.SRCH<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "SINGLE" ] + [ "CONT" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("ssrch", "Smart Search Sweep Mode",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.ssrch])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # SCN.MD<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "MEM" ] + [ "ONLY" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scan.append( RadioSetting("scn_md", "Memory Scan Channel Selection Mode",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.scn_md])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # SCN.LMP<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scan.append( RadioSetting("scn_lmp", "Scan Lamp",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.scn_lmp])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # TOT<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "%dMIN" % (x) for x in range(1, 30+1) ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("tot", "Timeout Timer",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.tot])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # TX.LED<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "ON" ] + [ "OFF" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("tx_led", "TX LED",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.tx_led])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # TXSAVE<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; power.append( RadioSetting("txsave", "Transmitter Battery Saver",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.txsave])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # VFO.BND<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "BAND" ] + [ "ALL" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc.append( RadioSetting("vfo_bnd", "VFO Band Edge Limiting",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.vfo_bnd])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # WX.ALT<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opts = [ "OFF" ] + [ "ON" ]<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scan.append( RadioSetting("wx_alt", "Weather Alert Scan",<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RadioSettingValueList(opts, opts[_settings.wx_alt])))<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return setmode<br>+<br>+&nbsp;&nbsp;&nbsp; def set_settings(self, uisettings):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _settings = self._memobj.settings<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for element in uisettings:<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not isinstance(element, RadioSetting):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.set_settings(element)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not element.changed():<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try:<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = element.get_name()<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value = element.value<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj = getattr(_settings, name)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if element.has_apply_callback():<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "Using apply callback"<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element.run_apply_callback()<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setattr(_settings, name, value)<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if os.getenv("CHIRP_DEBUG"):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "Setting %s: %s &lt;= %s" % (name, obj, element.value)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; except Exception, e:<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print element.get_name()<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise<br>+<br>&nbsp;&nbsp;&nbsp;&nbsp; def get_raw_memory(self, number):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return repr(self._memobj.memory[number - 1]) + \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repr(self._memobj.flags[(number - 1) / 4]) + \<br>diff -r 9ca5e99e7552 -r a14b91de7d53 chirpui/settingsedit.py<br>--- a/chirpui/settingsedit.py&nbsp;Sat Jan 17 10:10:54 2015 -0600<br>+++ b/chirpui/settingsedit.py&nbsp;Wed Jan 21 23:30:19 2015 -0800<br>@@ -45,6 +45,7 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self._table.show()<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw = gtk.ScrolledWindow()<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw.add_with_viewport(self._table)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw.show()<br>&nbsp;<br>@@ -144,9 +145,9 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if isinstance(element.value, list) and \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isinstance(element.value[0],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.RadioSettingValueInteger):<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arraybox = gtk.HBox(3, True)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arraybox = gtk.HBox(True, 3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arraybox = gtk.VBox(3, True)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arraybox = gtk.VBox(True, 3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pack(arraybox, 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arraybox.show()<br>&nbsp;<br><BR>                                               </div></body>
</html>