cascade and a bit of cleanup
This commit is contained in:
74
site_ansto/instrument/util/config_edit.py
Normal file → Executable file
74
site_ansto/instrument/util/config_edit.py
Normal file → Executable file
@@ -1,17 +1,19 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# vim: tabstop=8 softtabstop=2 shiftwidth=2 nocindent smartindent
|
# vim: tabstop=8 softtabstop=2 shiftwidth=2 nocin si et ft=python
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
def main(config_filename):
|
||||||
import urwid
|
import urwid
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
|
||||||
def main(config_filename):
|
|
||||||
config = ConfigParser.SafeConfigParser()
|
config = ConfigParser.SafeConfigParser()
|
||||||
config.read(config_filename)
|
config.read(config_filename)
|
||||||
#print config_filename
|
#print config_filename
|
||||||
#config.write(sys.stdout)
|
#config.write(sys.stdout)
|
||||||
text_header = (u"SICS Config Editor! w/W/F12 Saves & Exits\n"
|
text_header = (
|
||||||
|
u"SICS Config Editor! w/W/F12 Saves & Exits\n"
|
||||||
u"UP / DOWN / PAGE UP / PAGE DOWN scroll. q/Q/F8 Exits.")
|
u"UP / DOWN / PAGE UP / PAGE DOWN scroll. q/Q/F8 Exits.")
|
||||||
|
|
||||||
def checkbox_change(check_box, new_state, user_data):
|
def checkbox_change(check_box, new_state, user_data):
|
||||||
@@ -20,10 +22,16 @@ def main(config_filename):
|
|||||||
check_box.get_label(), str(new_state), str(user_data))
|
check_box.get_label(), str(new_state), str(user_data))
|
||||||
frame.footer = urwid.AttrWrap(urwid.Text(
|
frame.footer = urwid.AttrWrap(urwid.Text(
|
||||||
line), 'header')
|
line), 'header')
|
||||||
|
if 'cascade' in config.options(user_data):
|
||||||
|
cascade_list = config.get(user_data, 'cascade').split(",")
|
||||||
|
for cb in cb_list:
|
||||||
|
lbl = cb.get_label().split(":")[0]
|
||||||
|
if lbl in cascade_list:
|
||||||
|
cb.set_state(new_state)
|
||||||
|
|
||||||
text_cb_list = list(config.sections())
|
text_cb_list = list(config.sections())
|
||||||
cb_list = []
|
cb_list = []
|
||||||
for txt in text_cb_list:
|
for txt in sorted(text_cb_list):
|
||||||
state = False
|
state = False
|
||||||
if 'enabled' in config.options(txt):
|
if 'enabled' in config.options(txt):
|
||||||
if config.get(txt, 'enabled').lower() in ['1', 'yes', 'true']:
|
if config.get(txt, 'enabled').lower() in ['1', 'yes', 'true']:
|
||||||
@@ -31,28 +39,42 @@ def main(config_filename):
|
|||||||
config.set(txt, 'enabled', str(state))
|
config.set(txt, 'enabled', str(state))
|
||||||
cb_text = ""
|
cb_text = ""
|
||||||
cb_text += txt
|
cb_text += txt
|
||||||
if 'name' in config.options(txt):
|
if 'desc' in config.options(txt):
|
||||||
cb_text += ": (" + config.get(txt, 'name') + ")"
|
cb_text += ": (" + config.get(txt, 'desc').strip("\"") + ")"
|
||||||
cb = urwid.AttrWrap(
|
cb = urwid.CheckBox(cb_text,
|
||||||
urwid.CheckBox(cb_text,
|
|
||||||
state=state,
|
state=state,
|
||||||
on_state_change=checkbox_change,
|
on_state_change=checkbox_change,
|
||||||
user_data=txt),
|
user_data=txt)
|
||||||
'buttn', 'buttnf')
|
|
||||||
cb_list.append(cb)
|
cb_list.append(cb)
|
||||||
|
|
||||||
def fcc(focus):
|
def fcc(focus):
|
||||||
frame.footer = urwid.AttrWrap(urwid.Text(
|
frame.footer = urwid.AttrWrap(urwid.Text(
|
||||||
[u"Focus: " + str(focus)]), 'header')
|
[u"Focus: " + str(focus)]), 'header')
|
||||||
|
|
||||||
sflw = urwid.SimpleFocusListWalker(cb_list)
|
|
||||||
|
blank = urwid.Divider()
|
||||||
|
listbox_content = [
|
||||||
|
blank,
|
||||||
|
urwid.Padding(urwid.GridFlow(
|
||||||
|
[urwid.AttrWrap(cb, 'buttn', 'buttnf') for cb in cb_list],
|
||||||
|
60, 1, 0, 'left'),
|
||||||
|
left=4, right=3, min_width=60),
|
||||||
|
blank,
|
||||||
|
blank
|
||||||
|
]
|
||||||
|
|
||||||
|
if False:
|
||||||
|
listbox = urwid.Pile(cb_list)
|
||||||
|
else:
|
||||||
|
if "SimpleFocusListWalker" in dir(urwid):
|
||||||
|
sflw = urwid.SimpleFocusListWalker(listbox_content)
|
||||||
sflw.set_focus_changed_callback(fcc)
|
sflw.set_focus_changed_callback(fcc)
|
||||||
listbox = urwid.ListBox(sflw)
|
else:
|
||||||
|
sflw = urwid.SimpleListWalker(listbox_content)
|
||||||
|
|
||||||
header = urwid.AttrWrap(urwid.Text(text_header), 'header')
|
header = urwid.AttrWrap(urwid.Text(text_header), 'header')
|
||||||
frame = urwid.Frame(
|
listbox = urwid.ListBox(sflw)
|
||||||
urwid.AttrWrap(urwid.Padding(listbox, left=2, right=2), 'body'),
|
frame = urwid.Frame(urwid.AttrWrap(listbox, 'body'), header=header)
|
||||||
header=header)
|
|
||||||
|
|
||||||
palette = [
|
palette = [
|
||||||
('body', 'black', 'light gray', 'standout'),
|
('body', 'black', 'light gray', 'standout'),
|
||||||
@@ -78,15 +100,31 @@ def main(config_filename):
|
|||||||
with open(config_filename, "wb") as configfile:
|
with open(config_filename, "wb") as configfile:
|
||||||
config.write(configfile)
|
config.write(configfile)
|
||||||
raise urwid.ExitMainLoop()
|
raise urwid.ExitMainLoop()
|
||||||
|
elif key in ['e', 'E', 'f4']:
|
||||||
|
f = sflw.get_focus()
|
||||||
|
frame.footer = urwid.AttrWrap(urwid.Text([u"EditE: " + str(dir(f[0]))]), 'header')
|
||||||
elif key in ['q', 'Q', 'f8']:
|
elif key in ['q', 'Q', 'f8']:
|
||||||
raise urwid.ExitMainLoop()
|
raise urwid.ExitMainLoop()
|
||||||
|
# elif key in ['b', 'B']:
|
||||||
|
# l = sflw[1].base_widget
|
||||||
|
# f = l.focus_cell
|
||||||
|
# b = l.cells.index(f)
|
||||||
|
# l.cells.insert(b + 1, urwid.AttrWrap(urwid.Edit(edit_text=u"Hello"), 'header'))
|
||||||
|
# l.set_focus(b + 1)
|
||||||
|
# frame.footer = urwid.AttrWrap(urwid.Text([u"EditB: " + str(b)]), 'header')
|
||||||
else:
|
else:
|
||||||
frame.footer = urwid.AttrWrap(urwid.Text(
|
frame.footer = urwid.AttrWrap(urwid.Text([u"Press: " + str(key)]), 'header')
|
||||||
[u"Press: " + str(key)]), 'header')
|
|
||||||
|
|
||||||
urwid.MainLoop(frame, palette, unhandled_input=unhandled).run()
|
urwid.MainLoop(frame, palette, unhandled_input=unhandled).run()
|
||||||
|
|
||||||
|
|
||||||
if '__main__'==__name__:
|
if '__main__'==__name__:
|
||||||
main("my_config_parser.ini")
|
import argparse
|
||||||
|
|
||||||
|
default_ini = "my_config_parser.ini"
|
||||||
|
parser = argparse.ArgumentParser(description = "Edit a configuration (*.ini) file using python urwin")
|
||||||
|
parser.add_argument("path", nargs="?", default = default_ini, help="name of file to edit")
|
||||||
|
args = parser.parse_args()
|
||||||
|
default_ini = os.path.abspath(args.path)
|
||||||
|
main(default_ini)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user