Mercurial > libervia-backend
annotate src/tools/xml_tools.py @ 1054:a32ef03d4af0
installation: added python OTR dependency
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 07 Jun 2014 16:39:08 +0200 |
parents | 35048cafb18d |
children | f7f15d44fdfa |
rev | line source |
---|---|
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
4 # SAT: a jabber client |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
10 # (at your option) any later version. |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
15 # GNU Affero General Public License for more details. |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
590
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
771 | 20 from sat.core.i18n import _ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
21 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
22 log = getLogger(__name__) |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
23 from xml.dom import minidom, NotFoundErr |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
24 from wokkel import data_form |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
25 from twisted.words.xish import domish |
645 | 26 from sat.core import exceptions |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
28 |
102 | 29 """This library help manage XML used in SàT (parameters, registration, etc) """ |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
31 SAT_FORM_PREFIX = "SAT_FORM_" |
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
32 SAT_PARAM_SEPARATOR = "_XMLUI_PARAM_" # used to have unique elements names |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
33 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
34 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
35 # Helper functions |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
36 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
37 def _dataFormField2XMLUIData(field): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
38 """ Get data needed to create an XMLUI's Widget from Wokkel's data_form's Field |
863
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
39 field can be modified (if it's fixed and it has no value) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
40 @param field: data_form.Field (it uses field.value, field.fieldType, field.label and field.var) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
41 @return: widget_type, widget_args, widget_kwargs |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
42 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
43 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
44 widget_args = [field.value] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
45 widget_kwargs = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
46 if field.fieldType == 'fixed' or field.fieldType is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
47 widget_type = 'text' |
863
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
48 if field.value is None: |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
49 if field.label is None: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
50 log.warning(_("Fixed field has neither value nor label, ignoring it")) |
863
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
51 field.value = "" |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
52 else: |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
53 field.value = field.label |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
54 field.label = None |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
55 widget_args[0] = field.value |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
56 elif field.fieldType == 'text-single': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
57 widget_type = "string" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
58 elif field.fieldType == 'text-private': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
59 widget_type = "password" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
60 elif field.fieldType == 'boolean': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
61 widget_type = "bool" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
62 if widget_args[0] is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
63 widget_args[0] = 'false' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
64 elif field.fieldType == 'list-single': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
65 widget_type = "list" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
66 del widget_args[0] |
810
b11df74e49d2
core (XMLUI): fixed labels management for lists in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
805
diff
changeset
|
67 widget_kwargs["options"] = [(option.value, option.label or option.value) for option in field.options] |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
68 else: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
69 log.error(u"FIXME FIXME FIXME: Type [%s] is not managed yet by SàT" % field.fieldType) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
70 widget_type = "string" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
71 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
72 if field.var: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
73 widget_kwargs["name"] = field.var |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
74 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
75 return widget_type, widget_args, widget_kwargs |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
76 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
77 |
761
2f8d72226bc0
core (xml_tools): dataForm*2XML renamed to dataForm*2XMLUI and now return XMLUI instead of raw XML + submit_id is managed, and session_id is returned if present
Goffi <goffi@goffi.org>
parents:
760
diff
changeset
|
78 def dataForm2XMLUI(form, submit_id, session_id=None): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
79 """Take a data form (xep-0004, Wokkel's implementation) and convert it to a SàT XML |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
80 @param submit_id: callback id to call when submitting form |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
81 @param session_id: id to return with the data |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
82 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
83 """ |
761
2f8d72226bc0
core (xml_tools): dataForm*2XML renamed to dataForm*2XMLUI and now return XMLUI instead of raw XML + submit_id is managed, and session_id is returned if present
Goffi <goffi@goffi.org>
parents:
760
diff
changeset
|
84 form_ui = XMLUI("form", "vertical", submit_id=submit_id, session_id=session_id) |
104 | 85 |
102 | 86 if form.instructions: |
105 | 87 form_ui.addText('\n'.join(form.instructions), 'instructions') |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
88 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
89 form_ui.changeContainer("pairs") |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
90 |
102 | 91 for field in form.fieldList: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
92 widget_type, widget_args, widget_kwargs = _dataFormField2XMLUIData(field) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
93 label = field.label or field.var |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
94 if label: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
95 form_ui.addLabel(label) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
96 else: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
97 form_ui.addEmpty() |
103 | 98 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
99 form_ui.addWidget(widget_type, *widget_args, **widget_kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
100 |
761
2f8d72226bc0
core (xml_tools): dataForm*2XML renamed to dataForm*2XMLUI and now return XMLUI instead of raw XML + submit_id is managed, and session_id is returned if present
Goffi <goffi@goffi.org>
parents:
760
diff
changeset
|
101 return form_ui |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
102 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
103 def dataFormResult2AdvancedList(xmlui, form_xml): |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
104 """Take a raw data form (not parsed by XEP-0004) and convert it to an advanced list |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
105 raw data form is used because Wokkel doesn't manage result items parsing yet |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
106 @param xmlui: the XMLUI where the AdvancedList will be added |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
107 @param form_xml: domish.Element of the data form |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
108 @return: AdvancedList element |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
109 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
110 headers = {} |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
111 try: |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
112 reported_elt = form_xml.elements('jabber:x:data', 'reported').next() |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
113 except StopIteration: |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
114 raise exceptions.DataError("Couldn't find expected <reported> tag") |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
115 |
660
69a8bfd266a5
core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents:
655
diff
changeset
|
116 for elt in reported_elt.elements(): |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
117 if elt.name != "field": |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
118 raise exceptions.DataError("Unexpected tag") |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
119 name = elt["var"] |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
120 label = elt.attributes.get('label','') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
121 type_ = elt.attributes.get('type') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
122 headers[name] = (label, type_) |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
123 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
124 if not headers: |
684
969562c4761b
core (tools): small fix in using imported methods
souliane <souliane@mailoo.org>
parents:
660
diff
changeset
|
125 raise exceptions.DataError("No reported fields (see XEP-0004 §3.4)") |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
126 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
127 adv_list = AdvancedListContainer(xmlui, headers=headers, columns=len(headers), parent=xmlui.current_container) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
128 xmlui.changeContainer(adv_list) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
129 |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
130 item_elts = form_xml.elements('jabber:x:data', 'item') |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
131 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
132 for item_elt in item_elts: |
660
69a8bfd266a5
core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents:
655
diff
changeset
|
133 for elt in item_elt.elements(): |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
134 if elt.name != 'field': |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
135 log.warning("Unexpected tag (%s)" % elt.name) |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
136 continue |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
137 field = data_form.Field.fromElement(elt) |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
138 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
139 widget_type, widget_args, widget_kwargs = _dataFormField2XMLUIData(field) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
140 xmlui.addWidget(widget_type, *widget_args, **widget_kwargs) |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
141 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
142 return xmlui |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
143 |
761
2f8d72226bc0
core (xml_tools): dataForm*2XML renamed to dataForm*2XMLUI and now return XMLUI instead of raw XML + submit_id is managed, and session_id is returned if present
Goffi <goffi@goffi.org>
parents:
760
diff
changeset
|
144 def dataFormResult2XMLUI(form_xml, session_id=None): |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
145 """Take a raw data form (not parsed by XEP-0004) and convert it to a SàT XMLUI |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
146 raw data form is used because Wokkel doesn't manage result items parsing yet |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
147 @param form_xml: domish.Element of the data form |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
148 @return: XMLUI interface |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
149 """ |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
150 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
151 xmlui = XMLUI("window", "vertical", session_id=session_id) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
152 dataFormResult2AdvancedList(xmlui, form_xml) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
153 return xmlui |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
154 |
981
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
155 def _cleanValue(value): |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
156 """Workaround method to avoid DBus types with D-Bus bridge |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
157 |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
158 @param value: value to clean |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
159 @return: value in a non DBus type (only clean string yet) |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
160 """ |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
161 # XXX: must be removed when DBus types will no cause problems anymore |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
162 # FIXME: should be cleaned inside D-Bus bridge itself |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
163 if isinstance(value, basestring): |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
164 return unicode(value) |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
165 return value |
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
166 |
762
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
167 def XMLUIResult2DataFormResult(xmlui_data): |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
168 """ Extract form data from a XMLUI return |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
169 @xmlui_data: data returned by frontends for XMLUI form |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
170 @return: dict of data usable by Wokkel's dataform |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
171 """ |
981
58a57ce5932a
core (XMLUI): _cleanValue method to avoid issues with DBus types (must be deleted in the future)
Goffi <goffi@goffi.org>
parents:
977
diff
changeset
|
172 return {key[len(SAT_FORM_PREFIX):]: _cleanValue(value) for key, value in xmlui_data.iteritems() if key.startswith(SAT_FORM_PREFIX)} |
762
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
173 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
174 def formEscape(name): |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
175 """ Return escaped name for forms """ |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
176 return u"%s%s" % (SAT_FORM_PREFIX, name) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
177 |
762
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
178 def XMLUIResultToElt(xmlui_data): |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
179 """ Construct result domish.Element from XMLUI result |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
180 @xmlui_data: data returned by frontends for XMLUI form |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
181 """ |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
182 form = data_form.Form('submit') |
762
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
183 form.makeFields(XMLUIResult2DataFormResult(xmlui_data)) |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
184 return form.toElement() |
aed7d99276b8
core (xml_tools), frontends: added a prefix to XMLUI form names in result data, to avoid name conflicts (e.g.: if a form has name "submit", and this name is also used internally by SàT)
Goffi <goffi@goffi.org>
parents:
761
diff
changeset
|
185 |
102 | 186 def tupleList2dataForm(values): |
187 """convert a list of tuples (name,value) to a wokkel submit data form""" | |
188 form = data_form.Form('submit') | |
189 for value in values: | |
190 field = data_form.Field(var=value[0], value=value[1]) | |
191 form.addField(field) | |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
192 |
102 | 193 return form |
103 | 194 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
195 def paramsXML2XMLUI(xml): |
105 | 196 """Convert the xml for parameter to a SàT XML User Interface""" |
214 | 197 params_doc = minidom.parseString(xml.encode('utf-8')) |
105 | 198 top = params_doc.documentElement |
199 if top.nodeName != 'params': | |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
200 raise exceptions.DataError(_('INTERNAL ERROR: parameters xml not valid')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
201 |
105 | 202 param_ui = XMLUI("param", "tabs") |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
203 tabs_cont = param_ui.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
204 |
105 | 205 for category in top.getElementsByTagName("category"): |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
206 category_name = category.getAttribute('name') |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
160
diff
changeset
|
207 label = category.getAttribute('label') |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
208 if not category_name: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
209 raise exceptions.DataError(_('INTERNAL ERROR: params categories must have a name')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
210 tabs_cont.addTab(category_name, label=label, container=PairsContainer) |
105 | 211 for param in category.getElementsByTagName("param"): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
212 widget_kwargs = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
213 |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
214 param_name = param.getAttribute('name') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
215 param_label = param.getAttribute('label') |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
216 type_ = param.getAttribute('type') |
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
217 if not param_name and type_ != 'text': |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
218 raise exceptions.DataError(_('INTERNAL ERROR: params must have a name')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
219 |
105 | 220 value = param.getAttribute('value') or None |
106 | 221 callback_id = param.getAttribute('callback_id') or None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
222 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
223 if type_ == 'list': |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
224 options, selected = _getParamListOptions(param) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
225 widget_kwargs['options'] = options |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
226 widget_kwargs['selected'] = selected |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
227 |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
228 if type_ in ("button", "text"): |
106 | 229 param_ui.addEmpty() |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
230 value = param_label |
106 | 231 else: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
232 param_ui.addLabel(param_label or param_name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
233 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
234 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
235 widget_kwargs["value"] = value |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
236 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
237 if callback_id: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
238 widget_kwargs['callback_id'] = callback_id |
1036
35048cafb18d
tools (xmlui): to click a button in a "param" form will automatically submit the parameters of the same category
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
239 others = ["%s%s%s" % (category_name, SAT_PARAM_SEPARATOR, other.getAttribute('name')) |
35048cafb18d
tools (xmlui): to click a button in a "param" form will automatically submit the parameters of the same category
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
240 for other in category.getElementsByTagName('param') |
35048cafb18d
tools (xmlui): to click a button in a "param" form will automatically submit the parameters of the same category
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
241 if other.getAttribute('type') != 'button'] |
35048cafb18d
tools (xmlui): to click a button in a "param" form will automatically submit the parameters of the same category
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
242 widget_kwargs['fields_back'] = others |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
243 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
244 widget_kwargs['name'] = "%s%s%s" % (category_name, SAT_PARAM_SEPARATOR, param_name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
245 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
246 param_ui.addWidget(type_, **widget_kwargs) |
105 | 247 |
248 return param_ui.toXml() | |
249 | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
250 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
251 def _getParamListOptions(param): |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
252 """Retrieve the options for list element. The <option/> tags |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
253 must be direct children of <param/>.""" |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
254 if len(param.getElementsByTagName("options")) > 0: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
255 raise exceptions.DataError(_("The 'options' tag is not allowed in parameter of type 'list'!")) |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
256 elems = param.getElementsByTagName("option") |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
257 if len(elems) == 0: |
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
258 return [] |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
259 options = [elem.getAttribute("value") for elem in elems] |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
260 selected = [elem.getAttribute("value") for elem in elems if elem.getAttribute("selected") == 'true'] |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
261 return (options, selected) |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
262 |
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
263 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
264 ## XMLUI Elements |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
265 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
266 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
267 class Element(object): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
268 """ Base XMLUI element """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
269 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
270 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
271 def __init__(self, xmlui, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
272 """Create a container element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
273 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
274 @parent: parent element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
275 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
276 assert(self.type) is not None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
277 if not hasattr(self, 'elem'): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
278 self.elem = parent.xmlui.doc.createElement(self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
279 self.xmlui = xmlui |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
280 if parent is not None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
281 parent.append(self) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
282 self.parent = parent |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
283 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
284 def append(self, child): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
285 self.elem.appendChild(child.elem) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
286 child.parent = self |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
287 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
288 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
289 class TopElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
290 """ Main XML Element """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
291 type = 'top' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
292 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
293 def __init__(self, xmlui): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
294 self.elem = xmlui.doc.documentElement |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
295 super(TopElement, self).__init__(xmlui) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
296 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
297 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
298 class TabElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
299 """ Used by TabsContainer to give name and label to tabs """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
300 type = 'tab' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
301 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
302 def __init__(self, parent, name, label): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
303 if not isinstance(parent, TabsContainer): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
304 raise exceptions.DataError(_("TabElement must be a child of TabsContainer")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
305 super(TabElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
306 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
307 self.elem.setAttribute('label', label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
308 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
309 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
310 class FieldBackElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
311 """ Used by ButtonWidget to indicate which field have to be sent back """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
312 type = 'field_back' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
313 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
314 def __init__(self, parent, name): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
315 assert(isinstance(parent, ButtonWidget)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
316 super(FieldBackElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
317 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
318 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
319 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
320 class InternalFieldElement(Element): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
321 """ Used by internal callbacks to indicate which fields are manipulated """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
322 type = 'internal_field' |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
323 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
324 def __init__(self, parent, name): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
325 super(InternalFieldElement, self).__init__(parent.xmlui, parent) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
326 self.elem.setAttribute('name', name) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
327 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
328 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
329 class InternalDataElement(Element): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
330 """ Used by internal callbacks to retrieve extra data """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
331 type = 'internal_data' |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
332 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
333 def __init__(self, parent, children): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
334 super(InternalDataElement, self).__init__(parent.xmlui, parent) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
335 assert(isinstance(children, list)) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
336 for child in children: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
337 self.elem.childNodes.append(child) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
338 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
339 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
340 class OptionElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
341 """" Used by ListWidget to specify options """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
342 type = 'option' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
343 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
344 def __init__(self, parent, option, selected=False): |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
345 """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
346 |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
347 @param parent |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
348 @param option (string, tuple) |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
349 @param selected (boolean) |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
350 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
351 assert(isinstance(parent, ListWidget)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
352 super(OptionElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
353 if isinstance(option, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
354 value, label = option, option |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
355 elif isinstance(option, tuple): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
356 value, label = option |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
357 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
358 self.elem.setAttribute('label', label) |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
359 if selected: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
360 self.elem.setAttribute('selected', 'true') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
361 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
362 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
363 class RowElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
364 """" Used by AdvancedListContainer """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
365 type = 'row' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
366 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
367 def __init__(self, parent): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
368 assert(isinstance(parent, AdvancedListContainer)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
369 super(RowElement, self).__init__(parent.xmlui, parent) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
370 if parent.next_row_idx is not None: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
371 if parent.auto_index: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
372 raise exceptions.DataError(_("Can't set row index if auto_index is True")) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
373 self.elem.setAttribute('index', parent.next_row_idx) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
374 parent.next_row_idx = None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
375 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
376 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
377 class HeaderElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
378 """" Used by AdvancedListContainer """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
379 type = 'header' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
380 |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
381 def __init__(self, parent, name=None, label=None, description=None): |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
382 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
383 @param parent: AdvancedListContainer instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
384 @param name: name of the container |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
385 @param label: label to be displayed in columns |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
386 @param description: long descriptive text |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
387 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
388 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
389 assert(isinstance(parent, AdvancedListContainer)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
390 super(HeaderElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
391 if name: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
392 self.elem.setAttribute('name', name) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
393 if label: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
394 self.elem.setAttribute('label', label) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
395 if description: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
396 self.elem.setAttribute('description', description) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
397 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
398 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
399 class Container(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
400 """ And Element which contains other ones and has a layout """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
401 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
402 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
403 def __init__(self, xmlui, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
404 """Create a container element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
405 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
406 @parent: parent element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
407 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
408 self.elem = xmlui.doc.createElement('container') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
409 super(Container, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
410 self.elem.setAttribute('type', self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
411 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
412 def getParentContainer(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
413 """ Return first parent container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
414 @return: parent container or None |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
415 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
416 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
417 current = self.parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
418 while(not isinstance(current, (Container)) and |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
419 current is not None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
420 current = current.parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
421 return current |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
422 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
423 class VerticalContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
424 type = "vertical" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
425 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
426 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
427 class HorizontalContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
428 type = "horizontal" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
429 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
430 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
431 class PairsContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
432 type = "pairs" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
433 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
434 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
435 class TabsContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
436 type = "tabs" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
437 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
438 def addTab(self, name, label=None, container=VerticalContainer): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
439 """Add a tab""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
440 if not label: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
441 label = name |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
442 tab_elt = TabElement(self, name, label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
443 new_container = container(self.xmlui, tab_elt) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
444 self.xmlui.changeContainer(new_container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
445 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
446 def end(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
447 """ Called when we have finished tabs |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
448 change current container to first container parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
449 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
450 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
451 parent_container = self.getParentContainer() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
452 self.xmlui.changeContainer(parent_container) |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
453 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
454 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
455 class AdvancedListContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
456 type = "advanced_list" |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
457 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
458 def __init__(self, xmlui, callback_id=None, name=None, headers=None, items=None, columns=None, selectable = 'no', auto_index = False, parent=None): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
459 """Create an advanced list |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
460 @param headers: optional headers informations |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
461 @param callback_id: id of the method to call when selection is done |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
462 @param items: list of widgets to add (just the first row) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
463 @param columns: number of columns in this table, or None to autodetect |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
464 @param selectable: one of: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
465 'no': nothing is done |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
466 'single': one row can be selected |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
467 @param auto_index: if True, indexes will be generated by frontends, starting from 0 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
468 @return: created element |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
469 """ |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
470 assert selectable in ('no', 'single') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
471 if not items and columns is None: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
472 raise exceptions.DataError(_("either items or columns need do be filled")) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
473 if headers is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
474 headers = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
475 if items is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
476 items = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
477 super(AdvancedListContainer, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
478 if columns is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
479 columns = len(items[0]) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
480 self._columns = columns |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
481 self._item_idx = 0 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
482 self.current_row = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
483 if headers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
484 if len(headers) != self._columns: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
485 raise exceptions.DataError(_("Headers lenght doesn't correspond to columns")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
486 self.addHeaders(headers) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
487 if items: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
488 self.addItems(items) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
489 self.elem.setAttribute('columns', str(self._columns)) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
490 if callback_id is not None: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
491 self.elem.setAttribute('callback', callback_id) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
492 self.elem.setAttribute('selectable', selectable) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
493 self.auto_index = auto_index |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
494 if auto_index: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
495 self.elem.setAttribute('auto_index', 'true') |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
496 self.next_row_idx = None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
497 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
498 def addHeaders(self, headers): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
499 for header in headers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
500 self.addHeader(header) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
501 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
502 def addHeader(self, header): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
503 pass # TODO |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
504 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
505 def addItems(self, items): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
506 for item in items: |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
507 self.append(item) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
508 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
509 def setRowIndex(self, idx): |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
510 """ Set index for next row |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
511 index are returned when a row is selected, in data's "index" key |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
512 @param idx: string index to associate to the next row |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
513 |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
514 """ |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
515 self.next_row_idx = idx |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
516 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
517 def append(self, child): |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
518 if isinstance(child, RowElement): |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
519 return super(AdvancedListContainer, self).append(child) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
520 if self._item_idx % self._columns == 0: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
521 self.current_row = RowElement(self) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
522 self.current_row.append(child) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
523 self._item_idx += 1 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
524 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
525 def end(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
526 """ Called when we have finished list |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
527 change current container to first container parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
528 |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
529 """ |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
530 if self._item_idx % self._columns != 0: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
531 raise exceptions.DataError(_("Incorrect number of items in list")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
532 parent_container = self.getParentContainer() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
533 self.xmlui.changeContainer(parent_container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
534 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
535 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
536 class Widget(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
537 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
538 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
539 def __init__(self, xmlui, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
540 """Create an element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
541 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
542 @param name: name of the element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
543 @param parent: parent element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
544 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
545 self.elem = xmlui.doc.createElement('widget') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
546 super(Widget, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
547 if name: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
548 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
549 self.elem.setAttribute('type', self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
550 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
551 def setInternalCallback(self, callback, fields, data_elts=None): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
552 """Set an internal UI callback when the widget value is changed. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
553 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
554 The internal callbacks are NO callback ids, they are strings from |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
555 a predefined set of actions that are running in the scope of XMLUI. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
556 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
557 @param callback (string): a value from: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
558 - 'copy': process the widgets given in 'fields' two by two, by |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
559 copying the values of one widget to the other. Target widgets |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
560 of type List do not accept the empty value. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
561 - 'move': same than copy but moves the values if the source widget |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
562 is not a List. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
563 - 'groups_of_contact': process the widgets two by two, assume A is |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
564 is a list of JID and B a list of groups, select in B the groups |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
565 to which the JID selected in A belongs. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
566 - more operation to be added when necessary... |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
567 @param fields (list): a list of widget names (string) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
568 @param data_elts (list[Element]): extra data elements |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
569 """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
570 self.elem.setAttribute('internal_callback', callback) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
571 if fields: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
572 for field in fields: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
573 InternalFieldElement(self, field) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
574 if data_elts: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
575 InternalDataElement(self, data_elts) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
576 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
577 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
578 class InputWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
579 pass |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
580 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
581 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
582 class EmptyWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
583 type = 'empty' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
584 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
585 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
586 class TextWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
587 type = 'text' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
588 |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
589 def __init__(self, xmlui, value, name=None, parent=None): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
590 super(TextWidget, self).__init__(xmlui, name, parent) |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
591 text = self.xmlui.doc.createTextNode(value) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
592 self.elem.appendChild(text) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
593 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
594 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
595 class LabelWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
596 type='label' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
597 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
598 def __init__(self, xmlui, label, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
599 super(LabelWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
600 self.elem.setAttribute('value', label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
601 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
602 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
603 class JidWidget(Widget): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
604 type='jid' |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
605 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
606 def __init__(self, xmlui, jid, name=None, parent=None): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
607 super(JidWidget, self).__init__(xmlui, name, parent) |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
608 try: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
609 self.elem.setAttribute('value', jid.full()) |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
610 except AttributeError: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
611 self.elem.setAttribute('value', unicode(jid)) |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
612 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
613 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
614 class DividerWidget(Widget): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
615 type = 'divider' |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
616 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
617 def __init__(self, xmlui, style='line', name=None, parent=None): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
618 """ Create a divider |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
619 @param xmlui: XMLUI instance |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
620 @param style: one of: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
621 - line: a simple line |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
622 - dot: a line of dots |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
623 - dash: a line of dashes |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
624 - plain: a full thick line |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
625 - blank: a blank line/space |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
626 @param name: name of the widget |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
627 @param parent: parent container |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
628 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
629 """ |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
630 super(DividerWidget, self).__init__(xmlui, name, parent) |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
631 self.elem.setAttribute('style', style) |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
632 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
633 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
634 class StringWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
635 type = 'string' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
636 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
637 def __init__(self, xmlui, value=None, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
638 super(StringWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
639 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
640 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
641 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
642 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
643 class PasswordWidget(StringWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
644 type = 'password' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
645 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
646 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
647 class TextBoxWidget(StringWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
648 type = 'textbox' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
649 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
650 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
651 class BoolWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
652 type = 'bool' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
653 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
654 def __init__(self, xmlui, value='false', name=None, parent=None): |
910
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
655 if isinstance(value, bool): |
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
656 value = 'true' if value else 'false' |
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
657 elif value == '0': |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
658 value='false' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
659 elif value == '1': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
660 value='true' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
661 if not value in ('true', 'false'): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
662 raise exceptions.DataError(_("Value must be 0, 1, false or true")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
663 super(BoolWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
664 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
665 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
666 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
667 class ButtonWidget(Widget): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
668 type = 'button' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
669 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
670 def __init__(self, xmlui, callback_id, value=None, fields_back=None, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
671 """Add a button |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
672 @param callback_id: callback which will be called if button is pressed |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
673 @param value: label of the button |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
674 @fields_back: list of names of field to give back when pushing the button |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
675 @param name: name |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
676 @param parent: parent container |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
677 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
678 if fields_back is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
679 fields_back = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
680 super(ButtonWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
681 self.elem.setAttribute('callback', callback_id) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
682 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
683 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
684 for field in fields_back: |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
685 FieldBackElement(self, field) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
686 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
687 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
688 class ListWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
689 type = 'list' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
690 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
691 def __init__(self, xmlui, options, selected=None, style=None, name=None, parent=None): |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
692 """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
693 |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
694 @param xmlui |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
695 @param options (list[string, tuple]): each option can be given as: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
696 - a string if the label and the value are the same |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
697 - a couple if the label and the value differ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
698 @param selected (list[string]): list of the selected values |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
699 @param style (string) |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
700 @param name (string) |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
701 @param parent |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
702 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
703 if style is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
704 style = set() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
705 styles = set(style) |
820
462f2052af26
core(XMLUI): empty options in ListWidget now just show a warning message, no more assert
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
706 if not options: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
707 log.warning(_('empty "options" list')) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
708 if not styles.issubset(['multi']): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
709 raise exceptions.DataError(_("invalid styles")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
710 super(ListWidget, self).__init__(xmlui, name, parent) |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
711 self.addOptions(options, selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
712 for style in styles: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
713 self.elem.setAttribute(style, 'yes') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
714 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
715 def addOptions(self, options, selected=None): |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
716 """Add options to a multi-values element (e.g. list) """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
717 if selected: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
718 if isinstance(selected, basestring): |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
719 selected = [selected] |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
720 else: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
721 selected = [] |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
722 for option in options: |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
723 OptionElement(self, option, option in selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
724 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
725 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
726 ## XMLUI main class |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
727 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
728 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
729 class XMLUI(object): |
103 | 730 """This class is used to create a user interface (form/window/parameters/etc) using SàT XML""" |
731 | |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
732 def __init__(self, panel_type="window", container="vertical", title=None, submit_id=None, session_id=None): |
103 | 733 """Init SàT XML Panel |
734 @param panel_type: one of | |
735 - window (new window) | |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
736 - popup |
103 | 737 - form (formulaire, depend of the frontend, usually a panel with cancel/submit buttons) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
738 - param (parameters, presentation depend of the frontend) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
739 @param container: disposition of elements, one of: |
107 | 740 - vertical: elements are disposed up to bottom |
741 - horizontal: elements are disposed left to right | |
742 - pairs: elements come on two aligned columns | |
103 | 743 (usually one for a label, the next for the element) |
107 | 744 - tabs: elemens are in categories with tabs (notebook) |
745 @param title: title or default if None | |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
754
diff
changeset
|
746 @param submit_id: callback id to call for panel_type we can submit (form, param) |
103 | 747 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
748 self._introspect() |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
749 if panel_type not in ['window', 'form', 'param', 'popup']: |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
750 raise exceptions.DataError(_("Unknown panel type [%s]") % panel_type) |
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
751 if panel_type == 'form' and submit_id is None: |
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
752 raise exceptions.DataError(_("form XMLUI need a submit_id")) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
753 if not isinstance(container, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
754 raise exceptions.DataError(_("container argument must be a string")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
755 self.type = panel_type |
103 | 756 impl = minidom.getDOMImplementation() |
757 | |
758 self.doc = impl.createDocument(None, "sat_xmlui", None) | |
759 top_element = self.doc.documentElement | |
760 top_element.setAttribute("type", panel_type) | |
107 | 761 if title: |
762 top_element.setAttribute("title", title) | |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
763 self.submit_id = submit_id |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
764 self.session_id = session_id |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
765 self.main_container = self._createContainer(container, TopElement(self)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
766 self.current_container = self.main_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
767 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
768 def _introspect(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
769 """ Introspect module to find Widgets and Containers """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
770 self._containers = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
771 self._widgets = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
772 for obj in globals().values(): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
773 try: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
774 if issubclass(obj, Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
775 if obj.__name__ == 'Widget': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
776 continue |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
777 self._widgets[obj.type] = obj |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
778 elif issubclass(obj, Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
779 if obj.__name__ == 'Container': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
780 continue |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
781 self._containers[obj.type] = obj |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
782 except TypeError: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
783 pass |
103 | 784 |
785 def __del__(self): | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
786 self.doc.unlink() |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
787 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
788 def __getattr__(self, name): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
789 if name.startswith("add") and name not in ('addWidget',): # addWidgetName(...) create an instance of WidgetName |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
790 class_name = name[3:]+"Widget" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
791 if class_name in globals(): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
792 cls = globals()[class_name] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
793 if issubclass(cls, Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
794 def createWidget(*args, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
795 if "parent" not in kwargs: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
796 kwargs["parent"] = self.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
797 if "name" not in kwargs and issubclass(cls, InputWidget): # name can be given as first argument or in keyword arguments for InputWidgets |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
798 args = list(args) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
799 kwargs["name"] = args.pop(0) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
800 return cls(self, *args, **kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
801 return createWidget |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
802 return object.__getattribute__(self, name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
803 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
804 @property |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
805 def submit_id(self): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
806 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
807 value = top_element.getAttribute("submit") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
808 return value or None |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
809 |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
810 @submit_id.setter |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
811 def submit_id(self, value): |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
812 top_element = self.doc.documentElement |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
813 if value is None: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
814 try: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
815 top_element.removeAttribute("submit") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
816 except NotFoundErr: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
817 pass |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
818 elif value: # submit_id can be the empty string to bypass form restriction |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
819 top_element.setAttribute("submit", value) |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
820 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
821 @property |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
822 def session_id(self): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
823 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
824 value = top_element.getAttribute("session_id") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
825 return value or None |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
826 |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
827 @session_id.setter |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
828 def session_id(self, value): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
829 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
830 if value is None: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
831 try: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
832 top_element.removeAttribute("session_id") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
833 except NotFoundErr: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
834 pass |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
835 elif value: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
836 top_element.setAttribute("session_id", value) |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
837 else: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
838 raise exceptions.DataError("session_id can't be empty") |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
839 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
840 def _createContainer(self, container, parent=None, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
841 """Create a container element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
842 @param type: container type (cf init doc) |
103 | 843 @parent: parent element or None |
844 """ | |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
845 if container not in self._containers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
846 raise exceptions.DataError(_("Unknown container type [%s]") % container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
847 cls = self._containers[container] |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
848 new_container = cls(self, parent=parent, **kwargs) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
849 return new_container |
105 | 850 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
851 def changeContainer(self, container, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
852 """Change the current container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
853 @param container: either container type (container it then created), |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
854 or an Container instance""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
855 if isinstance(container, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
856 self.current_container = self._createContainer(container, self.current_container.getParentContainer() or self.main_container, **kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
857 else: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
858 self.current_container = self.main_container if container is None else container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
859 assert(isinstance(self.current_container, Container)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
860 return self.current_container |
103 | 861 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
862 def addWidget(self, type_, *args, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
863 """Convenience method to add an element""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
864 if type_ not in self._widgets: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
865 raise exceptions.DataError(_("Invalid type [%s]") % type_) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
866 if "parent" not in kwargs: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
867 kwargs["parent"] = self.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
868 cls = self._widgets[type_] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
869 return cls(self, *args, **kwargs) |
104 | 870 |
103 | 871 def toXml(self): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
872 """return the XML representation of the panel""" |
103 | 873 return self.doc.toxml() |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
874 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
875 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
876 # Misc other funtions |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
877 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
878 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
879 class ElementParser(object): |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
880 """callable class to parse XML string into Element |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
881 Found at http://stackoverflow.com/questions/2093400/how-to-create-twisted-words-xish-domish-element-entirely-from-raw-xml/2095942#2095942 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
882 (c) Karl Anderson""" |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
883 |
905
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
884 def __call__(self, string, force_spaces=False): |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
885 """ |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
886 @param string: the XML string |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
887 @param force_spaces: if True, replace occurrences of 'n' and '\t' with ' '. |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
888 """ |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
889 self.result = None |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
890 |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
891 def onStart(elem): |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
892 self.result = elem |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
893 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
894 def onEnd(): |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
895 pass |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
896 |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
897 def onElement(elem): |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
898 self.result.addChild(elem) |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
899 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
900 parser = domish.elementStream() |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
901 parser.DocumentStartEvent = onStart |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
902 parser.ElementEvent = onElement |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
903 parser.DocumentEndEvent = onEnd |
536
a31abb97310d
core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
904 tmp = domish.Element((None, "s")) |
905
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
905 if force_spaces: |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
906 string = string.replace('\n', ' ').replace('\t', ' ') |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
907 tmp.addRawXml(string) |
304 | 908 parser.parse(tmp.toXml().encode('utf-8')) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
909 return self.result.firstChildElement() |