primitivus: really basic implementation of advanced list.
Advanced list are here to allow complex lists, with columns, ordering, customization à la amarok 2. This implementation is just a first draft which show the text version of items in a List.
This commit is contained in:
parent
923e755c49
commit
7f612cb9e1
1 changed files with 39 additions and 19 deletions
|
|
@ -22,6 +22,18 @@ from urwid_satext import sat_widgets
|
|||
from logging import debug, info, warning, error
|
||||
from xml.dom import minidom
|
||||
|
||||
def getText(node):
|
||||
"""Get child text nodes
|
||||
@param node: dom Node
|
||||
@return: joined unicode text of all nodes
|
||||
|
||||
"""
|
||||
data = []
|
||||
for child in node.childNodes:
|
||||
if child.nodeType == child.TEXT_NODE:
|
||||
data.append(child.wholeText)
|
||||
return u"".join(data)
|
||||
|
||||
class Pairs(urwid.WidgetWrap):
|
||||
|
||||
def __init__(self, weight_0='1', weight_1='1'):
|
||||
|
|
@ -64,42 +76,46 @@ class XMLUI(urwid.WidgetWrap):
|
|||
message=_("Unmanaged tag")
|
||||
error(message)
|
||||
raise Exception(message)
|
||||
id = elem.getAttribute("id")
|
||||
id_ = elem.getAttribute("id")
|
||||
name = elem.getAttribute("name")
|
||||
type = elem.getAttribute("type")
|
||||
type_ = elem.getAttribute("type")
|
||||
value = elem.getAttribute("value") if elem.hasAttribute('value') else u''
|
||||
if type=="empty":
|
||||
if type_=="empty":
|
||||
ctrl = urwid.Text('')
|
||||
elif type=="text":
|
||||
elif type_=="text":
|
||||
try:
|
||||
value = elem.childNodes[0].wholeText
|
||||
except IndexError:
|
||||
warning (_("text node has no child !"))
|
||||
ctrl = urwid.Text(value)
|
||||
elif type=="label":
|
||||
elif type_=="label":
|
||||
ctrl = urwid.Text(value+": ")
|
||||
elif type=="string":
|
||||
elif type_=="string":
|
||||
ctrl = sat_widgets.AdvancedEdit(edit_text = value)
|
||||
self.ctrl_list[name] = ({'type':type, 'control':ctrl})
|
||||
elif type=="password":
|
||||
self.ctrl_list[name] = ({'type':type_, 'control':ctrl})
|
||||
elif type_=="password":
|
||||
ctrl = sat_widgets.Password(edit_text = value)
|
||||
self.ctrl_list[name] = ({'type':type, 'control':ctrl})
|
||||
elif type=="textbox":
|
||||
self.ctrl_list[name] = ({'type':type_, 'control':ctrl})
|
||||
elif type_=="textbox":
|
||||
ctrl = sat_widgets.AdvancedEdit(edit_text = value, multiline=True)
|
||||
self.ctrl_list[name] = ({'type':type, 'control':ctrl})
|
||||
elif type=="bool":
|
||||
self.ctrl_list[name] = ({'type':type_, 'control':ctrl})
|
||||
elif type_=="bool":
|
||||
ctrl = urwid.CheckBox('', state = value=="true")
|
||||
self.ctrl_list[name] = ({'type':type, 'control':ctrl})
|
||||
elif type=="list":
|
||||
self.ctrl_list[name] = ({'type':type_, 'control':ctrl})
|
||||
elif type_=="list":
|
||||
style=[] if elem.getAttribute("multi")=='yes' else ['single']
|
||||
ctrl = sat_widgets.List(options=[option.getAttribute("value") for option in elem.getElementsByTagName("option")], style=style)
|
||||
self.ctrl_list[name] = ({'type':type, 'control':ctrl})
|
||||
elif type=="button":
|
||||
self.ctrl_list[name] = ({'type':type_, 'control':ctrl})
|
||||
elif type_=="button":
|
||||
callback_id = elem.getAttribute("callback_id")
|
||||
ctrl = sat_widgets.CustomButton(value, on_press=self.onButtonPress)
|
||||
ctrl.param_id = (callback_id,[field.getAttribute('name') for field in elem.getElementsByTagName("field_back")])
|
||||
elif type_=="advanced_list":
|
||||
ctrl = sat_widgets.List(options=[getText(txt_elt) for txt_elt in elem.getElementsByTagName("text")], style=['can_select_none'], max_height=20)
|
||||
|
||||
self.ctrl_list[name] = ({'type':type_, 'control':ctrl})
|
||||
else:
|
||||
error(_("FIXME FIXME FIXME: type [%s] is not implemented") % type) #FIXME !
|
||||
error(_("FIXME FIXME FIXME: type [%s] is not implemented") % type_) #FIXME !
|
||||
raise NotImplementedError
|
||||
if self.type == 'param':
|
||||
if isinstance(ctrl,urwid.Edit) or isinstance(ctrl,urwid.CheckBox):
|
||||
|
|
@ -236,8 +252,12 @@ class XMLUI(urwid.WidgetWrap):
|
|||
if self.misc.has_key('action_back'): #FIXME FIXME FIXME: WTF ! Must be cleaned
|
||||
raise NotImplementedError
|
||||
self.host.debug()
|
||||
elif self.misc.has_key('callback'):
|
||||
self.misc['callback'](data)
|
||||
elif 'callback' in self.misc:
|
||||
try:
|
||||
self.misc['callback'](data, *self.misc['callback_args'])
|
||||
except KeyError:
|
||||
self.misc['callback'](data)
|
||||
|
||||
else:
|
||||
warning (_("The form data is not sent back, the type is not managed properly"))
|
||||
self.host.removePopUp()
|
||||
|
|
|
|||
Loading…
Reference in a new issue