mirror of
https://github.com/kk7ds/chirp.git
synced 2024-09-21 10:37:15 +00:00
Correct most of the remaining pylint complaints about chirpui (that I'm
going to correct).
This commit is contained in:
parent
e50dd0fd9c
commit
7a1230974e
@ -21,24 +21,22 @@ import gtk
|
||||
import gobject
|
||||
|
||||
from chirp import platform
|
||||
|
||||
import miscwidgets
|
||||
import cloneprog
|
||||
from chirpui import miscwidgets, cloneprog
|
||||
|
||||
class CloneSettingsDialog(gtk.Dialog):
|
||||
def make_field(self, title, control):
|
||||
hbox = gtk.HBox(True, 2)
|
||||
l = gtk.Label(title)
|
||||
l.show()
|
||||
hbox.pack_start(l, 0,0,0)
|
||||
hbox.pack_start(control, 1,1,0)
|
||||
lab = gtk.Label(title)
|
||||
lab.show()
|
||||
hbox.pack_start(lab, 0, 0, 0)
|
||||
hbox.pack_start(control, 1, 1, 0)
|
||||
|
||||
hbox.show()
|
||||
|
||||
# pylint: disable-msg=E1101
|
||||
self.vbox.pack_start(hbox, 0,0,0)
|
||||
self.vbox.pack_start(hbox, 0, 0, 0)
|
||||
|
||||
def __init__(self, cloneIn=True, filename=None, rtype=None):
|
||||
def __init__(self, clone_in=True, filename=None, rtype=None):
|
||||
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
|
||||
gtk.STOCK_OK, gtk.RESPONSE_OK)
|
||||
gtk.Dialog.__init__(self, buttons=buttons, title="Clone")
|
||||
@ -58,7 +56,7 @@ class CloneSettingsDialog(gtk.Dialog):
|
||||
self.rtype.show()
|
||||
|
||||
self.filename = miscwidgets.FilenameBox()
|
||||
if not cloneIn:
|
||||
if not clone_in:
|
||||
self.filename.set_sensitive(False)
|
||||
if filename:
|
||||
self.filename.set_filename(filename)
|
||||
@ -74,8 +72,8 @@ class CloneSettingsDialog(gtk.Dialog):
|
||||
self.filename.get_filename()
|
||||
|
||||
class CloneThread(threading.Thread):
|
||||
def __status(self, s):
|
||||
gobject.idle_add(self.__progw.status, s)
|
||||
def __status(self, status):
|
||||
gobject.idle_add(self.__progw.status, status)
|
||||
|
||||
def __init__(self, radio, fname=None, cb=None, parent=None):
|
||||
threading.Thread.__init__(self)
|
||||
|
@ -41,22 +41,16 @@ class CloneProg(gtk.Window):
|
||||
|
||||
self.infolabel = gtk.Label("Cloning")
|
||||
self.infolabel.show()
|
||||
vbox.pack_start(self.infolabel, 1,1,1)
|
||||
vbox.pack_start(self.infolabel, 1, 1, 1)
|
||||
|
||||
self.progbar = gtk.ProgressBar()
|
||||
self.progbar.set_fraction(0.0)
|
||||
self.progbar.show()
|
||||
vbox.pack_start(self.progbar, 0,0,0)
|
||||
vbox.pack_start(self.progbar, 0, 0, 0)
|
||||
|
||||
def status(self, s):
|
||||
self.infolabel.set_text(s.msg)
|
||||
def status(self, _status):
|
||||
self.infolabel.set_text(_status.msg)
|
||||
|
||||
if s.cur > s.max:
|
||||
s.cur = s.max
|
||||
self.progbar.set_fraction(s.cur / float(s.max))
|
||||
|
||||
if __name__ == "__main__":
|
||||
w = CloneProg()
|
||||
w.show()
|
||||
|
||||
gtk.main()
|
||||
if _status.cur > _status.max:
|
||||
_status.cur = _status.max
|
||||
self.progbar.set_fraction(_status.cur / float(_status.max))
|
||||
|
@ -18,13 +18,14 @@
|
||||
import os
|
||||
import gtk
|
||||
|
||||
from chirp import ic9x, ic2820, ic2200, id800, chirp_common
|
||||
import memedit
|
||||
from chirp import ic2820, ic2200, id800, chirp_common
|
||||
from chirpui import memedit
|
||||
|
||||
def radio_class_from_file(filename):
|
||||
size = os.stat(filename).st_size
|
||||
|
||||
for cls in [ic2820.IC2820Radio, ic2200.IC2200Radio, id800.ID800v2Radio]:
|
||||
# pylint: disable-msg=W0212
|
||||
if cls._memsize == size:
|
||||
return cls
|
||||
|
||||
|
@ -20,7 +20,7 @@ import gtk
|
||||
from miscwidgets import make_choice
|
||||
|
||||
class TextInputDialog(gtk.Dialog):
|
||||
def respond_ok(self, entry, data=None):
|
||||
def respond_ok(self, _):
|
||||
self.response(gtk.RESPONSE_OK)
|
||||
|
||||
def __init__(self, **args):
|
||||
@ -29,7 +29,7 @@ class TextInputDialog(gtk.Dialog):
|
||||
gtk.Dialog.__init__(self, buttons=buttons, **args)
|
||||
|
||||
self.label = gtk.Label()
|
||||
self.label.set_size_request(300,100)
|
||||
self.label.set_size_request(300, 100)
|
||||
# pylint: disable-msg=E1101
|
||||
self.vbox.pack_start(self.label, 1, 1, 0)
|
||||
|
||||
@ -50,7 +50,7 @@ class ChoiceDialog(gtk.Dialog):
|
||||
gtk.Dialog.__init__(self, buttons=buttons, **args)
|
||||
|
||||
self.label = gtk.Label()
|
||||
self.label.set_size_request(300,100)
|
||||
self.label.set_size_request(300, 100)
|
||||
# pylint: disable-msg=E1101
|
||||
self.vbox.pack_start(self.label, 1, 1, 0)
|
||||
self.label.show()
|
||||
@ -91,25 +91,25 @@ class FieldDialog(gtk.Dialog):
|
||||
|
||||
gtk.Dialog.__init__(self, **kwargs)
|
||||
|
||||
def response(self, id):
|
||||
def response(self, _):
|
||||
print "Blocking response"
|
||||
return
|
||||
|
||||
def add_field(self, label, widget, validator=None):
|
||||
box = gtk.HBox(True, 2)
|
||||
|
||||
l = gtk.Label(label)
|
||||
l.show()
|
||||
lab = gtk.Label(label)
|
||||
lab.show()
|
||||
|
||||
widget.set_size_request(150, -1)
|
||||
widget.show()
|
||||
|
||||
box.pack_start(l, 0,0,0)
|
||||
box.pack_start(widget, 0,0,0)
|
||||
box.pack_start(lab, 0, 0, 0)
|
||||
box.pack_start(widget, 0, 0, 0)
|
||||
box.show()
|
||||
|
||||
# pylint: disable-msg=E1101
|
||||
self.vbox.pack_start(box, 0,0,0)
|
||||
self.vbox.pack_start(box, 0, 0, 0)
|
||||
|
||||
self.__fields[label] = widget
|
||||
|
||||
@ -117,6 +117,7 @@ class FieldDialog(gtk.Dialog):
|
||||
return self.__fields.get(label, None)
|
||||
|
||||
if __name__ == "__main__":
|
||||
# pylint: disable-msg=C0103
|
||||
d = FieldDialog(buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK))
|
||||
d.add_field("Foo", gtk.Entry())
|
||||
d.add_field("Bar", make_choice(["A", "B"]))
|
||||
|
@ -15,8 +15,6 @@
|
||||
# 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 os
|
||||
|
||||
import gtk
|
||||
import gobject
|
||||
gobject.threads_init()
|
||||
@ -27,9 +25,9 @@ if __name__ == "__main__":
|
||||
import sys
|
||||
sys.path.insert(0, "..")
|
||||
|
||||
from chirp import platform, chirp_common, id800, ic2820, ic2200, ic9x
|
||||
import editorset
|
||||
import clone
|
||||
from chirp import platform, id800, ic2820, ic2200, ic9x
|
||||
from chirpui import editorset
|
||||
from chirpui import clone
|
||||
|
||||
RADIOS = {
|
||||
"ic2820" : ic2820.IC2820Radio,
|
||||
@ -40,31 +38,32 @@ RADIOS = {
|
||||
}
|
||||
|
||||
RTYPES = {}
|
||||
for k,v in RADIOS.items():
|
||||
RTYPES[v] = k
|
||||
for __key, __val in RADIOS.items():
|
||||
RTYPES[__val] = __key
|
||||
|
||||
class ChirpMain(gtk.Window):
|
||||
def get_current_editorset(self):
|
||||
try:
|
||||
return self.tabs.get_nth_page(self.tabs.get_current_page())
|
||||
except Exception, e:
|
||||
page = self.tabs.get_current_page()
|
||||
if page is not None:
|
||||
return self.tabs.get_nth_page(page)
|
||||
else:
|
||||
return None
|
||||
|
||||
def ev_tab_switched(self):
|
||||
def set_action_sensitive(action, sensitive):
|
||||
self.menu_ag.get_action(action).set_sensitive(sensitive)
|
||||
|
||||
w = self.get_current_editorset()
|
||||
eset = self.get_current_editorset()
|
||||
|
||||
if not w or isinstance(w.radio, ic9x.IC9xRadio):
|
||||
s = False
|
||||
if not eset or isinstance(eset.radio, ic9x.IC9xRadio):
|
||||
sensitive = False
|
||||
else:
|
||||
s = True
|
||||
sensitive = True
|
||||
|
||||
for i in ["save", "saveas", "cloneout"]:
|
||||
set_action_sensitive(i, s)
|
||||
set_action_sensitive(i, sensitive)
|
||||
|
||||
set_action_sensitive("close", bool(w))
|
||||
set_action_sensitive("close", bool(eset))
|
||||
|
||||
def do_open(self, fname=None):
|
||||
if not fname:
|
||||
@ -83,37 +82,37 @@ class ChirpMain(gtk.Window):
|
||||
self.tabs.set_current_page(tab)
|
||||
|
||||
def do_open9x(self, rclass):
|
||||
d = clone.CloneSettingsDialog(cloneIn=False,
|
||||
filename="(live)",
|
||||
rtype="ic9x")
|
||||
r = d.run()
|
||||
port, _, _ = d.get_values()
|
||||
d.destroy()
|
||||
dlg = clone.CloneSettingsDialog(clone_in=False,
|
||||
filename="(live)",
|
||||
rtype="ic9x")
|
||||
res = dlg.run()
|
||||
port, _, _ = dlg.get_values()
|
||||
dlg.destroy()
|
||||
|
||||
if r != gtk.RESPONSE_OK:
|
||||
if res != gtk.RESPONSE_OK:
|
||||
return
|
||||
|
||||
s = serial.Serial(port=port,
|
||||
baudrate=38400,
|
||||
timeout=0.1)
|
||||
radio = rclass(s)
|
||||
ser = serial.Serial(port=port,
|
||||
baudrate=38400,
|
||||
timeout=0.1)
|
||||
radio = rclass(ser)
|
||||
|
||||
e = editorset.EditorSet(radio)
|
||||
e.show()
|
||||
tab = self.tabs.append_page(e, e.get_tab_label())
|
||||
eset = editorset.EditorSet(radio)
|
||||
eset.show()
|
||||
tab = self.tabs.append_page(eset, eset.get_tab_label())
|
||||
self.tabs.set_current_page(tab)
|
||||
|
||||
def do_save(self):
|
||||
w = self.get_current_editorset()
|
||||
w.save()
|
||||
eset = self.get_current_editorset()
|
||||
eset.save()
|
||||
|
||||
def do_saveas(self):
|
||||
fname = platform.get_platform().gui_save_file()
|
||||
if not fname:
|
||||
return
|
||||
|
||||
w = self.get_current_editorset()
|
||||
w.save(fname)
|
||||
eset = self.get_current_editorset()
|
||||
eset.save(fname)
|
||||
|
||||
def cb_clonein(self, radio, fn):
|
||||
radio.pipe.close()
|
||||
@ -123,47 +122,49 @@ class ChirpMain(gtk.Window):
|
||||
radio.pipe.close()
|
||||
|
||||
def do_clonein(self):
|
||||
d = clone.CloneSettingsDialog()
|
||||
r = d.run()
|
||||
port, rtype, fn = d.get_values()
|
||||
d.destroy()
|
||||
dlg = clone.CloneSettingsDialog()
|
||||
res = dlg.run()
|
||||
port, rtype, fn = dlg.get_values()
|
||||
dlg.destroy()
|
||||
|
||||
if r != gtk.RESPONSE_OK:
|
||||
if res != gtk.RESPONSE_OK:
|
||||
return
|
||||
|
||||
rc = RADIOS[rtype]
|
||||
s = serial.Serial(port=port, baudrate=rc.BAUD_RATE, timeout=0.25)
|
||||
radio = rc(s)
|
||||
ser = serial.Serial(port=port, baudrate=rc.BAUD_RATE, timeout=0.25)
|
||||
radio = rc(ser)
|
||||
|
||||
ct = clone.CloneThread(radio, fn, cb=self.cb_clonein, parent=self)
|
||||
ct.start()
|
||||
|
||||
def do_cloneout(self):
|
||||
w = self.get_current_editorset()
|
||||
radio = w.radio
|
||||
eset = self.get_current_editorset()
|
||||
radio = eset.radio
|
||||
|
||||
d = clone.CloneSettingsDialog(False,
|
||||
w.filename,
|
||||
RTYPES[radio.__class__])
|
||||
r = d.run()
|
||||
port, rtype, fn = d.get_values()
|
||||
d.destroy()
|
||||
dlg = clone.CloneSettingsDialog(False,
|
||||
eset.filename,
|
||||
RTYPES[radio.__class__])
|
||||
res = dlg.run()
|
||||
port, rtype, _ = dlg.get_values()
|
||||
dlg.destroy()
|
||||
|
||||
if r != gtk.RESPONSE_OK:
|
||||
if res != gtk.RESPONSE_OK:
|
||||
return
|
||||
|
||||
rc = RADIOS[rtype]
|
||||
s = serial.Serial(port=port, baudrate=rc.BAUD_RATE, timeout=0.25)
|
||||
radio.set_pipe(s)
|
||||
ser = serial.Serial(port=port, baudrate=rc.BAUD_RATE, timeout=0.25)
|
||||
radio.set_pipe(ser)
|
||||
|
||||
ct = clone.CloneThread(radio, cb=self.cb_cloneout, parent=self)
|
||||
ct.start()
|
||||
|
||||
def do_close(self):
|
||||
w = self.get_current_editorset()
|
||||
if w.radio.pipe:
|
||||
w.radio.pipe.close()
|
||||
self.tabs.remove_page(self.tabs.get_current_page())
|
||||
eset = self.get_current_editorset()
|
||||
if eset.radio.pipe:
|
||||
eset.radio.pipe.close()
|
||||
page = self.tabs.get_current_page()
|
||||
if page is not None:
|
||||
self.tabs.remove_page(page)
|
||||
|
||||
def mh(self, _action):
|
||||
action = _action.get_name()
|
||||
@ -246,16 +247,18 @@ class ChirpMain(gtk.Window):
|
||||
|
||||
vbox = gtk.VBox(False, 2)
|
||||
|
||||
self.menu_ag = None
|
||||
mbar = self.make_menubar()
|
||||
mbar.show()
|
||||
vbox.pack_start(mbar, 0,0,0)
|
||||
vbox.pack_start(mbar, 0, 0, 0)
|
||||
|
||||
self.tabs = None
|
||||
tabs = self.make_tabs()
|
||||
tabs.connect("switch-page", lambda n,_,p: self.ev_tab_switched())
|
||||
tabs.connect("switch-page", lambda n, _, p: self.ev_tab_switched())
|
||||
tabs.show()
|
||||
self.ev_tab_switched()
|
||||
|
||||
vbox.pack_start(tabs, 1,1,1)
|
||||
vbox.pack_start(tabs, 1, 1, 1)
|
||||
|
||||
vbox.show()
|
||||
|
||||
@ -264,11 +267,5 @@ class ChirpMain(gtk.Window):
|
||||
self.set_default_size(640, 480)
|
||||
self.set_title("CHIRP")
|
||||
|
||||
self.connect("delete_event", lambda w,e: gtk.main_quit())
|
||||
self.connect("delete_event", lambda w, e: gtk.main_quit())
|
||||
self.connect("destroy", lambda w: gtk.main_quit())
|
||||
|
||||
if __name__ == "__main__":
|
||||
w = ChirpMain()
|
||||
w.show()
|
||||
|
||||
gtk.main()
|
||||
|
@ -28,13 +28,13 @@ from gobject import TYPE_INT, \
|
||||
TYPE_BOOLEAN
|
||||
import gobject
|
||||
|
||||
import common
|
||||
from chirpui import common
|
||||
from chirp import chirp_common, errors
|
||||
|
||||
def handle_toggle(rend, path, store, col):
|
||||
def handle_toggle(_, path, store, col):
|
||||
store[path][col] = not store[path][col]
|
||||
|
||||
def handle_ed(rend, path, new, store, col):
|
||||
def handle_ed(_, path, new, store, col):
|
||||
iter = store.get_iter(path)
|
||||
old, = store.get(iter, col)
|
||||
if old != new:
|
||||
@ -96,10 +96,10 @@ class MemoryEditor(common.Editor):
|
||||
"Tone Mode" : ["", "Tone", "TSQL", "DTCS"],
|
||||
}
|
||||
|
||||
def ed_name(self, rend, path, new, col):
|
||||
def ed_name(self, _, __, new, ___):
|
||||
return new[:self.name_length]
|
||||
|
||||
def ed_freq(self, rend, path, new, col):
|
||||
def ed_freq(self, _, path, new, __):
|
||||
def set_offset(path, offset):
|
||||
if offset > 0:
|
||||
dup = "+"
|
||||
@ -118,7 +118,7 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
try:
|
||||
new = float(new)
|
||||
except Exception, e:
|
||||
except ValueError, e:
|
||||
print e
|
||||
new = None
|
||||
|
||||
@ -134,7 +134,7 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
return new
|
||||
|
||||
def ed_loc(self, rend, path, new, col):
|
||||
def ed_loc(self, _, path, new, __):
|
||||
iter = self.store.get_iter(path)
|
||||
curloc, = self.store.get(iter, self.col("Loc"))
|
||||
|
||||
@ -179,9 +179,9 @@ class MemoryEditor(common.Editor):
|
||||
mem = self._get_memory(iter)
|
||||
self.radio.set_memory(mem)
|
||||
except Exception, e:
|
||||
d = ValueErrorDialog(e)
|
||||
d.run()
|
||||
d.destroy()
|
||||
dlg = ValueErrorDialog(e)
|
||||
dlg.run()
|
||||
dlg.destroy()
|
||||
|
||||
if self.need_refresh:
|
||||
self.prefill()
|
||||
@ -205,12 +205,12 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
return val
|
||||
|
||||
def render(self, col, rend, model, iter, colnum):
|
||||
def render(self, _, rend, model, iter, colnum):
|
||||
vals = model.get(iter, *tuple(range(0, len(self.cols))))
|
||||
val = vals[colnum]
|
||||
|
||||
def _enabled(s):
|
||||
rend.set_property("sensitive", s)
|
||||
def _enabled(sensitive):
|
||||
rend.set_property("sensitive", sensitive)
|
||||
|
||||
def d_unless_tmode(tmode):
|
||||
_enabled(vals[self.col("Tone Mode")] == tmode)
|
||||
@ -245,10 +245,9 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
if action in ["insert_next", "insert_prev"]:
|
||||
line = []
|
||||
for k,v in self.defaults.items():
|
||||
line.append(self.col(k))
|
||||
line.append(v)
|
||||
|
||||
for key, val in self.defaults.items():
|
||||
line.append(self.col(key))
|
||||
line.append(val)
|
||||
|
||||
if action == "insert_next":
|
||||
newiter = store.insert_after(iter)
|
||||
@ -268,7 +267,7 @@ class MemoryEditor(common.Editor):
|
||||
store.remove(iter)
|
||||
self.radio.erase_memory(curpos)
|
||||
|
||||
def make_context_menu(self, loc, can_prev, can_next):
|
||||
def make_context_menu(self, can_prev, can_next):
|
||||
menu_xml = """
|
||||
<ui>
|
||||
<popup name="Menu">
|
||||
@ -309,7 +308,6 @@ class MemoryEditor(common.Editor):
|
||||
store, iter = self.view.get_selection().get_selected()
|
||||
|
||||
curpos, = store.get(iter, self.col("Loc"))
|
||||
next_loc = curpos + 1
|
||||
can_prev = True
|
||||
can_next = True
|
||||
|
||||
@ -327,7 +325,7 @@ class MemoryEditor(common.Editor):
|
||||
else:
|
||||
can_prev = False
|
||||
|
||||
menu = self.make_context_menu(curpos, can_prev, can_next)
|
||||
menu = self.make_context_menu(can_prev, can_next)
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
|
||||
def make_editor(self):
|
||||
@ -342,30 +340,30 @@ class MemoryEditor(common.Editor):
|
||||
sw.add(self.view)
|
||||
|
||||
i = 0
|
||||
for c, t, r in self.cols:
|
||||
rend = r()
|
||||
if t == TYPE_BOOLEAN:
|
||||
for _cap, _type, _rend in self.cols:
|
||||
rend = _rend()
|
||||
if _type == TYPE_BOOLEAN:
|
||||
rend.set_property("activatable", True)
|
||||
rend.connect("toggled", handle_toggle, self.store, i)
|
||||
col = gtk.TreeViewColumn(c, rend, active=i)
|
||||
elif r == gtk.CellRendererCombo:
|
||||
if isinstance(self.choices[c], gtk.ListStore):
|
||||
choices = self.choices[c]
|
||||
col = gtk.TreeViewColumn(_cap, rend, active=i)
|
||||
elif _rend == gtk.CellRendererCombo:
|
||||
if isinstance(self.choices[_cap], gtk.ListStore):
|
||||
choices = self.choices[_cap]
|
||||
else:
|
||||
choices = gtk.ListStore(TYPE_STRING, TYPE_STRING)
|
||||
for choice in self.choices[c]:
|
||||
for choice in self.choices[_cap]:
|
||||
choices.append([choice, self._render(i, choice)])
|
||||
rend.set_property("model", choices)
|
||||
rend.set_property("text-column", 1)
|
||||
rend.set_property("editable", True)
|
||||
rend.set_property("has-entry", False)
|
||||
rend.connect("edited", self.edited, c)
|
||||
col = gtk.TreeViewColumn(c, rend, text=i)
|
||||
rend.connect("edited", self.edited, _cap)
|
||||
col = gtk.TreeViewColumn(_cap, rend, text=i)
|
||||
col.set_cell_data_func(rend, self.render, i)
|
||||
else:
|
||||
rend.set_property("editable", True)
|
||||
rend.connect("edited", self.edited, c)
|
||||
col = gtk.TreeViewColumn(c, rend, text=i)
|
||||
rend.connect("edited", self.edited, _cap)
|
||||
col = gtk.TreeViewColumn(_cap, rend, text=i)
|
||||
col.set_cell_data_func(rend, self.render, i)
|
||||
|
||||
col.set_sort_column_id(i)
|
||||
@ -401,7 +399,7 @@ class MemoryEditor(common.Editor):
|
||||
hi = int(self.hi_limit_adj.get_value())
|
||||
|
||||
import time
|
||||
t = time.time()
|
||||
start = time.time()
|
||||
|
||||
for i in range(lo, hi+1):
|
||||
try:
|
||||
@ -414,7 +412,7 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
#mems = self.radio.get_memories(lo, hi)
|
||||
print "Loaded %i memories in %s sec" % (hi - lo,
|
||||
time.time() - t)
|
||||
time.time() - start)
|
||||
|
||||
self.fill_thread = None
|
||||
|
||||
@ -493,26 +491,26 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
lab = gtk.Label("Memory range:")
|
||||
lab.show()
|
||||
hbox.pack_start(lab, 0,0,0)
|
||||
hbox.pack_start(lab, 0, 0, 0)
|
||||
|
||||
self.lo_limit_adj = gtk.Adjustment(0, 0, 999, 1, 10)
|
||||
lo = gtk.SpinButton(self.lo_limit_adj)
|
||||
lo.show()
|
||||
hbox.pack_start(lo, 0,0,0)
|
||||
hbox.pack_start(lo, 0, 0, 0)
|
||||
|
||||
lab = gtk.Label(" - ")
|
||||
lab.show()
|
||||
hbox.pack_start(lab, 0,0,0)
|
||||
hbox.pack_start(lab, 0, 0, 0)
|
||||
|
||||
self.hi_limit_adj = gtk.Adjustment(25, 1, 999, 1, 10)
|
||||
hi = gtk.SpinButton(self.hi_limit_adj)
|
||||
hi.show()
|
||||
hbox.pack_start(hi, 0,0,0)
|
||||
hbox.pack_start(hi, 0, 0, 0)
|
||||
|
||||
refresh = gtk.Button("Go")
|
||||
refresh.show()
|
||||
refresh.connect("clicked", lambda x: self.prefill())
|
||||
hbox.pack_start(refresh, 0,0,0)
|
||||
hbox.pack_start(refresh, 0, 0, 0)
|
||||
|
||||
hbox.show()
|
||||
|
||||
@ -529,9 +527,12 @@ class MemoryEditor(common.Editor):
|
||||
|
||||
self.need_refresh = False
|
||||
|
||||
self.lo_limit_adj = self.hi_limit_adj = None
|
||||
self.store = self.view = None
|
||||
|
||||
vbox = gtk.VBox(False, 2)
|
||||
vbox.pack_start(self.make_controls(), 0,0,0)
|
||||
vbox.pack_start(self.make_editor(), 1,1,1)
|
||||
vbox.pack_start(self.make_controls(), 0, 0, 0)
|
||||
vbox.pack_start(self.make_editor(), 1, 1, 1)
|
||||
vbox.show()
|
||||
|
||||
self.root = vbox
|
||||
@ -563,7 +564,7 @@ class DstarMemoryEditor(MemoryEditor):
|
||||
self.choices["RPT1CALL"] = gtk.ListStore(TYPE_STRING, TYPE_STRING)
|
||||
self.choices["RPT2CALL"] = gtk.ListStore(TYPE_STRING, TYPE_STRING)
|
||||
|
||||
iter = self.choices["URCALL"].append(("CQCQCQ", "CQCQCQ"))
|
||||
self.choices["URCALL"].append(("CQCQCQ", "CQCQCQ"))
|
||||
self.choices["RPT1CALL"].append(("", ""))
|
||||
self.choices["RPT2CALL"].append(("", ""))
|
||||
|
||||
@ -611,23 +612,3 @@ class DstarMemoryEditor(MemoryEditor):
|
||||
|
||||
class ID800MemoryEditor(DstarMemoryEditor):
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
from chirp import id800, ic9x, ic2820, ic2200, generic
|
||||
import serial
|
||||
r = id800.ID800v2Radio("../id800.img")
|
||||
#s = serial.Serial(port="/dev/ttyUSB1", baudrate=38400, timeout=0.2)
|
||||
#r = ic9x.IC9xRadioB(s)
|
||||
|
||||
e = ID800MemoryEditor(r)
|
||||
w = gtk.Window()
|
||||
w.add(e.root)
|
||||
e.root.show()
|
||||
w.show()
|
||||
|
||||
try:
|
||||
gtk.main()
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
r.save_mmap("../id800.img")
|
||||
|
@ -20,6 +20,9 @@ import gobject
|
||||
from chirp import platform
|
||||
|
||||
class ListWidget(gtk.HBox):
|
||||
store_type = gtk.ListStore
|
||||
|
||||
# pylint: disable-msg=W0613
|
||||
def _toggle(self, render, path, column):
|
||||
self._store[path][column] = not self._store[path][column]
|
||||
iter = self._store.get_iter(path)
|
||||
@ -27,41 +30,40 @@ class ListWidget(gtk.HBox):
|
||||
for cb in self.toggle_cb:
|
||||
cb(*vals)
|
||||
|
||||
def make_store(self, col_types):
|
||||
return gtk.ListStore(*col_types)
|
||||
|
||||
def make_view(self, columns):
|
||||
self._view = gtk.TreeView(self._store)
|
||||
|
||||
for t,c in columns:
|
||||
index = columns.index((t,c))
|
||||
if t == gobject.TYPE_STRING or \
|
||||
t == gobject.TYPE_INT or \
|
||||
t == gobject.TYPE_FLOAT:
|
||||
r = gtk.CellRendererText()
|
||||
c = gtk.TreeViewColumn(c, r, text=index)
|
||||
elif t == gobject.TYPE_BOOLEAN:
|
||||
r = gtk.CellRendererToggle()
|
||||
r.connect("toggled", self._toggle, index)
|
||||
c = gtk.TreeViewColumn(c, r, active=index)
|
||||
for _type, _col in columns:
|
||||
index = columns.index((_type, _col))
|
||||
if _type == gobject.TYPE_STRING or \
|
||||
_type == gobject.TYPE_INT or \
|
||||
_type == gobject.TYPE_FLOAT:
|
||||
rend = gtk.CellRendererText()
|
||||
column = gtk.TreeViewColumn(_col, rend, text=index)
|
||||
elif _type == gobject.TYPE_BOOLEAN:
|
||||
rend = gtk.CellRendererToggle()
|
||||
rend.connect("toggled", self._toggle, index)
|
||||
column = gtk.TreeViewColumn(_col, rend, active=index)
|
||||
else:
|
||||
raise Exception("Unknown column type (%i)" % index)
|
||||
|
||||
c.set_sort_column_id(index)
|
||||
self._view.append_column(c)
|
||||
column.set_sort_column_id(index)
|
||||
self._view.append_column(column)
|
||||
|
||||
def __init__(self, columns, parent=True):
|
||||
gtk.HBox.__init__(self)
|
||||
|
||||
col_types = tuple([x for x,y in columns])
|
||||
# pylint: disable-msg=W0612
|
||||
col_types = tuple([x for x, y in columns])
|
||||
self._ncols = len(col_types)
|
||||
|
||||
self._store = self.make_store(col_types)
|
||||
|
||||
self._store = self.store_type(*col_types)
|
||||
self._view = None
|
||||
self.make_view(columns)
|
||||
|
||||
self._view.show()
|
||||
if parent:
|
||||
self.pack_start(self._view, 1,1,1)
|
||||
self.pack_start(self._view, 1, 1, 1)
|
||||
|
||||
self.toggle_cb = []
|
||||
|
||||
@ -74,9 +76,9 @@ class ListWidget(gtk.HBox):
|
||||
|
||||
args = []
|
||||
i = 0
|
||||
for v in vals:
|
||||
for val in vals:
|
||||
args.append(i)
|
||||
args.append(v)
|
||||
args.append(val)
|
||||
i += 1
|
||||
|
||||
args = tuple(args)
|
||||
@ -95,32 +97,35 @@ class ListWidget(gtk.HBox):
|
||||
|
||||
def remove_selected(self):
|
||||
try:
|
||||
(list, iter) = self._view.get_selection().get_selected()
|
||||
list.remove(iter)
|
||||
(lst, iter) = self._view.get_selection().get_selected()
|
||||
lst.remove(iter)
|
||||
except Exception, e:
|
||||
print "Unable to remove selected: %s" % e
|
||||
|
||||
def get_selected(self):
|
||||
(list, iter) = self._view.get_selection().get_selected()
|
||||
return list.get(iter, *tuple(range(self._ncols)))
|
||||
(lst, iter) = self._view.get_selection().get_selected()
|
||||
return lst.get(iter, *tuple(range(self._ncols)))
|
||||
|
||||
def _get_value(self, model, path, iter, list):
|
||||
list.append(model.get(iter, *tuple(range(0, self._ncols))))
|
||||
def _get_value(self, model, path, iter, lst):
|
||||
lst.append(model.get(iter, *tuple(range(0, self._ncols))))
|
||||
|
||||
def get_values(self):
|
||||
list = []
|
||||
lst = []
|
||||
|
||||
self._store.foreach(self._get_value, list)
|
||||
self._store.foreach(self._get_value, lst)
|
||||
|
||||
return list
|
||||
|
||||
def set_values(self, list):
|
||||
def set_values(self, lst):
|
||||
self._store.clear()
|
||||
|
||||
for i in list:
|
||||
for i in lst:
|
||||
self.add_item(*i)
|
||||
|
||||
class TreeWidget(ListWidget):
|
||||
store_type = gtk.TreeStore
|
||||
|
||||
# pylint: disable-msg=W0613
|
||||
def _toggle(self, render, path, column):
|
||||
self._store[path][column] = not self._store[path][column]
|
||||
iter = self._store.get_iter(path)
|
||||
@ -140,15 +145,12 @@ class TreeWidget(ListWidget):
|
||||
|
||||
self._key = key
|
||||
|
||||
def make_store(self, col_types):
|
||||
return gtk.TreeStore(*col_types)
|
||||
|
||||
def _add_item(self, piter, *vals):
|
||||
args = []
|
||||
i = 0
|
||||
for v in vals:
|
||||
for val in vals:
|
||||
args.append(i)
|
||||
args.append(v)
|
||||
args.append(val)
|
||||
i += 1
|
||||
|
||||
args = tuple(args)
|
||||
@ -161,8 +163,8 @@ class TreeWidget(ListWidget):
|
||||
iter = self._store.get_iter_first()
|
||||
|
||||
while iter is not None:
|
||||
id = self._store.get(iter, self._key)[0]
|
||||
if id == key:
|
||||
_id = self._store.get(iter, self._key)[0]
|
||||
if _id == key:
|
||||
return iter
|
||||
|
||||
iter = self._store.iter_next(iter)
|
||||
@ -184,10 +186,10 @@ class TreeWidget(ListWidget):
|
||||
|
||||
def _set_values(self, parent, vals):
|
||||
if isinstance(vals, dict):
|
||||
for k,v in vals.items():
|
||||
for key, val in vals.items():
|
||||
iter = self._store.append(parent)
|
||||
self._store.set(iter, self._key, k)
|
||||
self._set_values(iter, v)
|
||||
self._store.set(iter, self._key, key)
|
||||
self._set_values(iter, val)
|
||||
elif isinstance(vals, list):
|
||||
for i in vals:
|
||||
self._set_values(parent, i)
|
||||
@ -225,9 +227,9 @@ class TreeWidget(ListWidget):
|
||||
args = []
|
||||
i = 0
|
||||
|
||||
for v in vals:
|
||||
for val in vals:
|
||||
args.append(i)
|
||||
args.append(v)
|
||||
args.append(val)
|
||||
i += 1
|
||||
|
||||
self._store.set(iter, *(tuple(args)))
|
||||
@ -249,11 +251,11 @@ class ProgressDialog(gtk.Window):
|
||||
self.label.set_size_request(100, 50)
|
||||
self.label.show()
|
||||
|
||||
self.bar = gtk.ProgressBar()
|
||||
self.bar.show()
|
||||
self.pbar = gtk.ProgressBar()
|
||||
self.pbar.show()
|
||||
|
||||
vbox.pack_start(self.label, 0,0,0)
|
||||
vbox.pack_start(self.bar, 0,0,0)
|
||||
vbox.pack_start(self.label, 0, 0, 0)
|
||||
vbox.pack_start(self.pbar, 0, 0, 0)
|
||||
|
||||
vbox.show()
|
||||
|
||||
@ -267,7 +269,7 @@ class ProgressDialog(gtk.Window):
|
||||
gtk.main_iteration_do(False)
|
||||
|
||||
def set_fraction(self, frac):
|
||||
self.bar.set_fraction(frac)
|
||||
self.pbar.set_fraction(frac)
|
||||
self.queue_draw()
|
||||
|
||||
while gtk.events_pending():
|
||||
@ -279,24 +281,24 @@ class LatLonEntry(gtk.Entry):
|
||||
|
||||
self.connect("changed", self.format)
|
||||
|
||||
def format(self, editable):
|
||||
s = self.get_text()
|
||||
def format(self, _):
|
||||
string = self.get_text()
|
||||
|
||||
d = u"\u00b0"
|
||||
deg = u"\u00b0"
|
||||
|
||||
while " " in s:
|
||||
if "." in s:
|
||||
while " " in string:
|
||||
if "." in string:
|
||||
break
|
||||
elif d not in s:
|
||||
s = s.replace(" ", d)
|
||||
elif "'" not in s:
|
||||
s = s.replace(" ", "'")
|
||||
elif '"' not in s:
|
||||
s = s.replace(" ", '"')
|
||||
elif deg not in string:
|
||||
string = string.replace(" ", deg)
|
||||
elif "'" not in string:
|
||||
string = string.replace(" ", "'")
|
||||
elif '"' not in string:
|
||||
string = string.replace(" ", '"')
|
||||
else:
|
||||
s = s.replace(" ", "")
|
||||
string = string.replace(" ", "")
|
||||
|
||||
self.set_text(s)
|
||||
self.set_text(string)
|
||||
|
||||
def parse_dd(self, string):
|
||||
return float(string)
|
||||
@ -305,12 +307,12 @@ class LatLonEntry(gtk.Entry):
|
||||
string = string.strip()
|
||||
string = string.replace(' ', ' ')
|
||||
|
||||
(d, m) = string.split(' ', 2)
|
||||
(_degrees, _minutes) = string.split(' ', 2)
|
||||
|
||||
deg = int(d)
|
||||
min = float(m)
|
||||
degrees = int(_degrees)
|
||||
minutes = float(_minutes)
|
||||
|
||||
return deg + (min / 60.0)
|
||||
return degrees + (minutes / 60.0)
|
||||
|
||||
def parse_dms(self, string):
|
||||
string = string.replace(u"\u00b0", " ")
|
||||
@ -324,42 +326,41 @@ class LatLonEntry(gtk.Entry):
|
||||
if len(items) > 3:
|
||||
raise Exception("Invalid format")
|
||||
elif len(items) == 3:
|
||||
d = items[0]
|
||||
m = items[1]
|
||||
s = items[2]
|
||||
deg = items[0]
|
||||
mns = items[1]
|
||||
sec = items[2]
|
||||
elif len(items) == 2:
|
||||
d = items[0]
|
||||
m = items[1]
|
||||
s = 0
|
||||
deg = items[0]
|
||||
mns = items[1]
|
||||
sec = 0
|
||||
elif len(items) == 1:
|
||||
d = items[0]
|
||||
m = 0
|
||||
s = 0
|
||||
deg = items[0]
|
||||
mns = 0
|
||||
sec = 0
|
||||
else:
|
||||
d = 0
|
||||
m = 0
|
||||
s = 0
|
||||
deg = 0
|
||||
mns = 0
|
||||
sec = 0
|
||||
|
||||
deg = int(d)
|
||||
min = int(m)
|
||||
sec = float(s)
|
||||
degrees = int(deg)
|
||||
minutes = int(mns)
|
||||
seconds = float(sec)
|
||||
|
||||
return deg + (min / 60.0) + (sec / 3600.0)
|
||||
return degrees + (minutes / 60.0) + (seconds / 3600.0)
|
||||
|
||||
def value(self):
|
||||
s = self.get_text()
|
||||
string = self.get_text()
|
||||
|
||||
try:
|
||||
return self.parse_dd(s)
|
||||
return self.parse_dd(string)
|
||||
except:
|
||||
try:
|
||||
return self.parse_dm(s)
|
||||
return self.parse_dm(string)
|
||||
except:
|
||||
try:
|
||||
return self.parse_dms(s)
|
||||
return self.parse_dms(string)
|
||||
except Exception, e:
|
||||
print "DMS: %s" % e
|
||||
pass
|
||||
|
||||
raise Exception("Invalid format")
|
||||
|
||||
@ -378,7 +379,7 @@ class YesNoDialog(gtk.Dialog):
|
||||
self._label.show()
|
||||
|
||||
# pylint: disable-msg=E1101
|
||||
self.vbox.pack_start(self._label, 1,1,1)
|
||||
self.vbox.pack_start(self._label, 1, 1, 1)
|
||||
|
||||
def set_text(self, text):
|
||||
self._label.set_text(text)
|
||||
@ -389,8 +390,8 @@ def make_choice(options, editable=True, default=None):
|
||||
else:
|
||||
sel = gtk.combo_box_new_text()
|
||||
|
||||
for o in options:
|
||||
sel.append_text(o)
|
||||
for opt in options:
|
||||
sel.append_text(opt)
|
||||
|
||||
if default:
|
||||
try:
|
||||
@ -402,7 +403,7 @@ def make_choice(options, editable=True, default=None):
|
||||
return sel
|
||||
|
||||
class FilenameBox(gtk.HBox):
|
||||
def do_browse(self, widget):
|
||||
def do_browse(self, _):
|
||||
fn = platform.get_platform().gui_save_file()
|
||||
if fn:
|
||||
self.filename.set_text(fn)
|
||||
@ -412,11 +413,11 @@ class FilenameBox(gtk.HBox):
|
||||
|
||||
self.filename = gtk.Entry()
|
||||
self.filename.show()
|
||||
self.pack_start(self.filename, 1,1,1)
|
||||
self.pack_start(self.filename, 1, 1, 1)
|
||||
|
||||
browse = gtk.Button("...")
|
||||
browse.show()
|
||||
self.pack_start(browse, 0,0,0)
|
||||
self.pack_start(browse, 0, 0, 0)
|
||||
|
||||
browse.connect("clicked", self.do_browse)
|
||||
|
||||
@ -426,39 +427,39 @@ class FilenameBox(gtk.HBox):
|
||||
def get_filename(self):
|
||||
return self.filename.get_text()
|
||||
|
||||
if __name__=="__main__":
|
||||
w = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
l = ListWidget([(gobject.TYPE_STRING, "Foo"),
|
||||
def test():
|
||||
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
lst = ListWidget([(gobject.TYPE_STRING, "Foo"),
|
||||
(gobject.TYPE_BOOLEAN, "Bar")])
|
||||
|
||||
l.add_item("Test1", True)
|
||||
l.set_values([("Test2", True), ("Test3", False)])
|
||||
lst.add_item("Test1", True)
|
||||
lst.set_values([("Test2", True), ("Test3", False)])
|
||||
|
||||
l.show()
|
||||
w.add(l)
|
||||
w.show()
|
||||
lst.show()
|
||||
win.add(lst)
|
||||
win.show()
|
||||
|
||||
w1 = ProgressDialog("foo")
|
||||
w1.show()
|
||||
win1 = ProgressDialog("foo")
|
||||
win1.show()
|
||||
|
||||
w2 = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
win2 = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
lle = LatLonEntry()
|
||||
lle.show()
|
||||
w2.add(lle)
|
||||
w2.show()
|
||||
win2.add(lle)
|
||||
win2.show()
|
||||
|
||||
w3 = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
l = TreeWidget([(gobject.TYPE_STRING, "Id"),
|
||||
(gobject.TYPE_STRING, "Value")],
|
||||
1)
|
||||
win3 = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
lst = TreeWidget([(gobject.TYPE_STRING, "Id"),
|
||||
(gobject.TYPE_STRING, "Value")],
|
||||
1)
|
||||
#l.add_item(None, "Foo", "Bar")
|
||||
#l.add_item("Foo", "Bar", "Baz")
|
||||
l.set_values({"Fruit" : [("Apple", "Red"), ("Orange", "Orange")],
|
||||
"Pizza" : [("Cheese", "Simple"), ("Pepperoni", "Yummy")]})
|
||||
l.add_item("Fruit", "Bananna", "Yellow")
|
||||
l.show()
|
||||
w3.add(l)
|
||||
w3.show()
|
||||
lst.set_values({"Fruit" : [("Apple", "Red"), ("Orange", "Orange")],
|
||||
"Pizza" : [("Cheese", "Simple"), ("Pepperoni", "Yummy")]})
|
||||
lst.add_item("Fruit", "Bananna", "Yellow")
|
||||
lst.show()
|
||||
win3.add(lst)
|
||||
win3.show()
|
||||
|
||||
def print_val(entry):
|
||||
if entry.validate():
|
||||
@ -471,7 +472,10 @@ if __name__=="__main__":
|
||||
|
||||
try:
|
||||
gtk.main()
|
||||
except KeyboardInterrupt, e:
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
print l.get_values()
|
||||
print lst.get_values()
|
||||
|
||||
if __name__ == "__main__":
|
||||
test()
|
||||
|
Loading…
Reference in New Issue
Block a user