Mercurial > libervia-backend
annotate src/tools/xml_tools.py @ 1069:8e1f30aa3975
core (XMLUI): data form result now manage generic data set
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 14 Jun 2014 17:24:16 +0200 |
parents | f7f15d44fdfa |
children | ad023e60da8c |
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" |
810
b11df74e49d2
core (XMLUI): fixed labels management for lists in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
805
diff
changeset
|
66 widget_kwargs["options"] = [(option.value, option.label or option.value) for option in field.options] |
1067
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
67 widget_kwargs["selected"] = widget_args |
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
68 widget_args = [] |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
69 else: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
70 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
|
71 widget_type = "string" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
72 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
73 if field.var: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
74 widget_kwargs["name"] = field.var |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
75 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
76 return widget_type, widget_args, widget_kwargs |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
77 |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
78 def dataForm2Widgets(form_ui, form): |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
79 """Complete an existing XMLUI with widget converted frot XEP-0004 data forms |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
80 |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
81 @param form_ui: XMLUI instance |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
82 @param form: Wokkel's implementation of data form |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
83 @return: completed xml_ui |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
84 """ |
102 | 85 if form.instructions: |
105 | 86 form_ui.addText('\n'.join(form.instructions), 'instructions') |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
87 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
88 form_ui.changeContainer("pairs") |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
89 |
102 | 90 for field in form.fieldList: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
91 widget_type, widget_args, widget_kwargs = _dataFormField2XMLUIData(field) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
92 label = field.label or field.var |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
93 if label: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
94 form_ui.addLabel(label) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
95 else: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
96 form_ui.addEmpty() |
103 | 97 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
98 form_ui.addWidget(widget_type, *widget_args, **widget_kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
99 |
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
|
100 return form_ui |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
101 |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
102 def dataForm2XMLUI(form, submit_id, session_id=None): |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
103 """Take a data form (xep-0004, Wokkel's implementation) and convert it to a SàT XML |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
104 |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
105 @param submit_id: callback id to call when submitting form |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
106 @param session_id: id to return with the data |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
107 """ |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
108 form_ui = XMLUI("form", "vertical", submit_id=submit_id, session_id=session_id) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
109 return dataForm2Widgets(form_ui, form) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
110 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
111 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
|
112 """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
|
113 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
|
114 @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
|
115 @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
|
116 @return: AdvancedList element |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
117 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
118 headers = {} |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
119 try: |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
120 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
|
121 except StopIteration: |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
122 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
|
123 |
660
69a8bfd266a5
core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents:
655
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 name = elt["var"] |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
128 label = elt.attributes.get('label','') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
129 type_ = elt.attributes.get('type') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
130 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
|
131 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
132 if not headers: |
684
969562c4761b
core (tools): small fix in using imported methods
souliane <souliane@mailoo.org>
parents:
660
diff
changeset
|
133 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
|
134 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
135 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
|
136 xmlui.changeContainer(adv_list) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
137 |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
138 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
|
139 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
140 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
|
141 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
|
142 if elt.name != 'field': |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
143 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
|
144 continue |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
145 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
|
146 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
147 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
|
148 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
|
149 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
150 return xmlui |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
151 |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
152 def dataFormResult2XMLUI(form_elt, 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
|
153 """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
|
154 raw data form is used because Wokkel doesn't manage result items parsing yet |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
155 @param form_elt: domish.Element of the data form |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
156 @return: XMLUI interface |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
157 """ |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
158 |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
159 xml_ui = XMLUI("window", "vertical", session_id=session_id) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
160 try: |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
161 dataFormResult2AdvancedList(xml_ui, form_elt) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
162 except exceptions.DataError: |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
163 parsed_form = data_form.Form.fromElement(form_elt) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
164 dataForm2Widgets(xml_ui, parsed_form) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
165 return xml_ui |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
166 |
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
|
167 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
|
168 """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
|
169 |
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
|
170 @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
|
171 @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
|
172 """ |
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
|
173 # 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
|
174 # 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
|
175 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
|
176 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
|
177 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
|
178 |
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
|
179 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
|
180 """ 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
|
181 @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
|
182 @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
|
183 """ |
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
|
184 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
|
185 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
186 def formEscape(name): |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
187 """ Return escaped name for forms """ |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
188 return u"%s%s" % (SAT_FORM_PREFIX, name) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
189 |
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
|
190 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
|
191 """ 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
|
192 @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
|
193 """ |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
194 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
|
195 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
|
196 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
|
197 |
102 | 198 def tupleList2dataForm(values): |
199 """convert a list of tuples (name,value) to a wokkel submit data form""" | |
200 form = data_form.Form('submit') | |
201 for value in values: | |
202 field = data_form.Field(var=value[0], value=value[1]) | |
203 form.addField(field) | |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
204 |
102 | 205 return form |
103 | 206 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
207 def paramsXML2XMLUI(xml): |
105 | 208 """Convert the xml for parameter to a SàT XML User Interface""" |
214 | 209 params_doc = minidom.parseString(xml.encode('utf-8')) |
105 | 210 top = params_doc.documentElement |
211 if top.nodeName != 'params': | |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
212 raise exceptions.DataError(_('INTERNAL ERROR: parameters xml not valid')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
213 |
105 | 214 param_ui = XMLUI("param", "tabs") |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
215 tabs_cont = param_ui.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
216 |
105 | 217 for category in top.getElementsByTagName("category"): |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
218 category_name = category.getAttribute('name') |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
160
diff
changeset
|
219 label = category.getAttribute('label') |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
220 if not category_name: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
221 raise exceptions.DataError(_('INTERNAL ERROR: params categories must have a name')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
222 tabs_cont.addTab(category_name, label=label, container=PairsContainer) |
105 | 223 for param in category.getElementsByTagName("param"): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
224 widget_kwargs = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
225 |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
226 param_name = param.getAttribute('name') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
227 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
|
228 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
|
229 if not param_name and type_ != 'text': |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
230 raise exceptions.DataError(_('INTERNAL ERROR: params must have a name')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
231 |
105 | 232 value = param.getAttribute('value') or None |
106 | 233 callback_id = param.getAttribute('callback_id') or None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
234 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
235 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
|
236 options, selected = _getParamListOptions(param) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
237 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
|
238 widget_kwargs['selected'] = selected |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
239 |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
240 if type_ in ("button", "text"): |
106 | 241 param_ui.addEmpty() |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
242 value = param_label |
106 | 243 else: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
244 param_ui.addLabel(param_label or 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 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
247 widget_kwargs["value"] = value |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
248 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
249 if callback_id: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
250 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
|
251 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
|
252 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
|
253 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
|
254 widget_kwargs['fields_back'] = others |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
255 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
256 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
|
257 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
258 param_ui.addWidget(type_, **widget_kwargs) |
105 | 259 |
260 return param_ui.toXml() | |
261 | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
262 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
263 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
|
264 """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
|
265 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
|
266 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
|
267 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
|
268 elems = param.getElementsByTagName("option") |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
269 if len(elems) == 0: |
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
270 return [] |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
271 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
|
272 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
|
273 return (options, selected) |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
274 |
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
275 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
276 ## XMLUI Elements |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
277 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
278 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
279 class Element(object): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
280 """ Base XMLUI element """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
281 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
282 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
283 def __init__(self, xmlui, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
284 """Create a container element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
285 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
286 @parent: parent element |
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 assert(self.type) is not None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
289 if not hasattr(self, 'elem'): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
290 self.elem = parent.xmlui.doc.createElement(self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
291 self.xmlui = xmlui |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
292 if parent is not None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
293 parent.append(self) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
294 self.parent = parent |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
295 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
296 def append(self, child): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
297 self.elem.appendChild(child.elem) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
298 child.parent = self |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
299 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
300 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
301 class TopElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
302 """ Main XML Element """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
303 type = 'top' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
304 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
305 def __init__(self, xmlui): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
306 self.elem = xmlui.doc.documentElement |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
307 super(TopElement, self).__init__(xmlui) |
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 TabElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
311 """ Used by TabsContainer to give name and label to tabs """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
312 type = 'tab' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
313 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
314 def __init__(self, parent, name, label): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
315 if not isinstance(parent, TabsContainer): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
316 raise exceptions.DataError(_("TabElement must be a child of TabsContainer")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
317 super(TabElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
318 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
319 self.elem.setAttribute('label', label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
320 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
321 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
322 class FieldBackElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
323 """ 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
|
324 type = 'field_back' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
325 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
326 def __init__(self, parent, name): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
327 assert(isinstance(parent, ButtonWidget)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
328 super(FieldBackElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
329 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
330 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
331 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
332 class InternalFieldElement(Element): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
333 """ 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
|
334 type = 'internal_field' |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
335 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
336 def __init__(self, parent, name): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
337 super(InternalFieldElement, self).__init__(parent.xmlui, parent) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
338 self.elem.setAttribute('name', name) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
339 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
340 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
341 class InternalDataElement(Element): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
342 """ Used by internal callbacks to retrieve extra data """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
343 type = 'internal_data' |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
344 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
345 def __init__(self, parent, children): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
346 super(InternalDataElement, self).__init__(parent.xmlui, parent) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
347 assert(isinstance(children, list)) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
348 for child in children: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
349 self.elem.childNodes.append(child) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
350 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
351 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
352 class OptionElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
353 """" Used by ListWidget to specify options """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
354 type = 'option' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
355 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
356 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
|
357 """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
358 |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
359 @param parent |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
360 @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
|
361 @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
|
362 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
363 assert(isinstance(parent, ListWidget)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
364 super(OptionElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
365 if isinstance(option, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
366 value, label = option, option |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
367 elif isinstance(option, tuple): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
368 value, label = option |
1067
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
369 else: |
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
370 raise NotImplementedError |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
371 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
372 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
|
373 if selected: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
374 self.elem.setAttribute('selected', 'true') |
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 RowElement(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 = 'row' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
380 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
381 def __init__(self, parent): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
382 assert(isinstance(parent, AdvancedListContainer)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
383 super(RowElement, self).__init__(parent.xmlui, parent) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
384 if parent.next_row_idx is not None: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
385 if parent.auto_index: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
386 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
|
387 self.elem.setAttribute('index', parent.next_row_idx) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
388 parent.next_row_idx = None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
389 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
390 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
391 class HeaderElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
392 """" Used by AdvancedListContainer """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
393 type = 'header' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
394 |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
395 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
|
396 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
397 @param parent: AdvancedListContainer instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
398 @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
|
399 @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
|
400 @param description: long descriptive text |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
401 |
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 assert(isinstance(parent, AdvancedListContainer)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
404 super(HeaderElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
405 if name: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
406 self.elem.setAttribute('name', name) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
407 if label: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
408 self.elem.setAttribute('label', label) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
409 if description: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
410 self.elem.setAttribute('description', description) |
802
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 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
413 class Container(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
414 """ And Element which contains other ones and has a layout """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
415 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
416 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
417 def __init__(self, xmlui, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
418 """Create a container element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
419 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
420 @parent: parent element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
421 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
422 self.elem = xmlui.doc.createElement('container') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
423 super(Container, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
424 self.elem.setAttribute('type', self.type) |
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 def getParentContainer(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
427 """ Return first parent container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
428 @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
|
429 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
430 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
431 current = self.parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
432 while(not isinstance(current, (Container)) and |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
433 current is not None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
434 current = current.parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
435 return current |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
436 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
437 class VerticalContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
438 type = "vertical" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
439 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
440 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
441 class HorizontalContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
442 type = "horizontal" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
443 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
444 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
445 class PairsContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
446 type = "pairs" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
447 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
448 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
449 class TabsContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
450 type = "tabs" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
451 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
452 def addTab(self, name, label=None, container=VerticalContainer): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
453 """Add a tab""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
454 if not label: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
455 label = name |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
456 tab_elt = TabElement(self, name, label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
457 new_container = container(self.xmlui, tab_elt) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
458 self.xmlui.changeContainer(new_container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
459 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
460 def end(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
461 """ Called when we have finished tabs |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
462 change current container to first container parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
463 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
464 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
465 parent_container = self.getParentContainer() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
466 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
|
467 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
468 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
469 class AdvancedListContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
470 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
|
471 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
472 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
|
473 """Create an advanced list |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
474 @param headers: optional headers informations |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
475 @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
|
476 @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
|
477 @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
|
478 @param selectable: one of: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
479 'no': nothing is done |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
480 'single': one row can be selected |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
481 @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
|
482 @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
|
483 """ |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
484 assert selectable in ('no', 'single') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
485 if not items and columns is None: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
486 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
|
487 if headers is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
488 headers = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
489 if items is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
490 items = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
491 super(AdvancedListContainer, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
492 if columns is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
493 columns = len(items[0]) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
494 self._columns = columns |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
495 self._item_idx = 0 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
496 self.current_row = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
497 if headers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
498 if len(headers) != self._columns: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
499 raise exceptions.DataError(_("Headers lenght doesn't correspond to columns")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
500 self.addHeaders(headers) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
501 if items: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
502 self.addItems(items) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
503 self.elem.setAttribute('columns', str(self._columns)) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
504 if callback_id is not None: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
505 self.elem.setAttribute('callback', callback_id) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
506 self.elem.setAttribute('selectable', selectable) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
507 self.auto_index = auto_index |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
508 if auto_index: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
509 self.elem.setAttribute('auto_index', 'true') |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
510 self.next_row_idx = None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
511 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
512 def addHeaders(self, headers): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
513 for header in headers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
514 self.addHeader(header) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
515 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
516 def addHeader(self, header): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
517 pass # TODO |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
518 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
519 def addItems(self, items): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
520 for item in items: |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
521 self.append(item) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
522 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
523 def setRowIndex(self, idx): |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
524 """ Set index for next row |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
525 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
|
526 @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
|
527 |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
528 """ |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
529 self.next_row_idx = idx |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
530 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
531 def append(self, child): |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
532 if isinstance(child, RowElement): |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
533 return super(AdvancedListContainer, self).append(child) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
534 if self._item_idx % self._columns == 0: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
535 self.current_row = RowElement(self) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
536 self.current_row.append(child) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
537 self._item_idx += 1 |
802
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 end(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
540 """ Called when we have finished list |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
541 change current container to first container parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
542 |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
543 """ |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
544 if self._item_idx % self._columns != 0: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
545 raise exceptions.DataError(_("Incorrect number of items in list")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
546 parent_container = self.getParentContainer() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
547 self.xmlui.changeContainer(parent_container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
548 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
549 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
550 class Widget(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
551 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
552 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
553 def __init__(self, xmlui, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
554 """Create an element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
555 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
556 @param name: name of the element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
557 @param parent: parent element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
558 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
559 self.elem = xmlui.doc.createElement('widget') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
560 super(Widget, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
561 if name: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
562 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
563 self.elem.setAttribute('type', self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
564 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
565 def setInternalCallback(self, callback, fields, data_elts=None): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
566 """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
|
567 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
568 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
|
569 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
|
570 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
571 @param callback (string): a value from: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
572 - '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
|
573 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
|
574 of type List do not accept the empty value. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
575 - '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
|
576 is not a List. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
577 - '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
|
578 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
|
579 to which the JID selected in A belongs. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
580 - more operation to be added when necessary... |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
581 @param fields (list): a list of widget names (string) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
582 @param data_elts (list[Element]): extra data elements |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
583 """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
584 self.elem.setAttribute('internal_callback', callback) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
585 if fields: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
586 for field in fields: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
587 InternalFieldElement(self, field) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
588 if data_elts: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
589 InternalDataElement(self, data_elts) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
590 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
591 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
592 class InputWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
593 pass |
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 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
596 class EmptyWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
597 type = 'empty' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
598 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
599 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
600 class TextWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
601 type = 'text' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
602 |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
603 def __init__(self, xmlui, value, name=None, parent=None): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
604 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
|
605 text = self.xmlui.doc.createTextNode(value) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
606 self.elem.appendChild(text) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
607 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
608 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
609 class LabelWidget(Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
610 type='label' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
611 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
612 def __init__(self, xmlui, label, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
613 super(LabelWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
614 self.elem.setAttribute('value', label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
615 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
616 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
617 class JidWidget(Widget): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
618 type='jid' |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
619 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
620 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
|
621 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
|
622 try: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
623 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
|
624 except AttributeError: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
625 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
|
626 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
627 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
628 class DividerWidget(Widget): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
629 type = 'divider' |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
630 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
631 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
|
632 """ Create a divider |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
633 @param xmlui: XMLUI instance |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
634 @param style: one of: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
635 - line: a simple line |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
636 - 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
|
637 - 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
|
638 - 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
|
639 - 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
|
640 @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
|
641 @param parent: parent container |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
642 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
643 """ |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
644 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
|
645 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
|
646 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
647 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
648 class StringWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
649 type = 'string' |
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 def __init__(self, xmlui, value=None, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
652 super(StringWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
653 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
654 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
655 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
656 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
657 class PasswordWidget(StringWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
658 type = 'password' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
659 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
660 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
661 class TextBoxWidget(StringWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
662 type = 'textbox' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
663 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
664 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
665 class BoolWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
666 type = 'bool' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
667 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
668 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
|
669 if isinstance(value, bool): |
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
670 value = 'true' if value else 'false' |
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
671 elif value == '0': |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
672 value='false' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
673 elif value == '1': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
674 value='true' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
675 if not value in ('true', 'false'): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
676 raise exceptions.DataError(_("Value must be 0, 1, false or true")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
677 super(BoolWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
678 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
679 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
680 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
681 class ButtonWidget(Widget): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
682 type = 'button' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
683 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
684 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
|
685 """Add a button |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
686 @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
|
687 @param value: label of the button |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
688 @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
|
689 @param name: name |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
690 @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
|
691 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
692 if fields_back is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
693 fields_back = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
694 super(ButtonWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
695 self.elem.setAttribute('callback', callback_id) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
696 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
697 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
698 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
|
699 FieldBackElement(self, field) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
700 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
701 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
702 class ListWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
703 type = 'list' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
704 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
705 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
|
706 """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
707 |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
708 @param xmlui |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
709 @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
|
710 - 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
|
711 - 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
|
712 @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
|
713 @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
|
714 @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
|
715 @param parent |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
716 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
717 if style is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
718 style = set() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
719 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
|
720 if not options: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
721 log.warning(_('empty "options" list')) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
722 if not styles.issubset(['multi']): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
723 raise exceptions.DataError(_("invalid styles")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
724 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
|
725 self.addOptions(options, selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
726 for style in styles: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
727 self.elem.setAttribute(style, 'yes') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
728 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
729 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
|
730 """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
|
731 if selected: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
732 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
|
733 selected = [selected] |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
734 else: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
735 selected = [] |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
736 for option in options: |
1067
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
737 assert(isinstance(option, basestring) or isinstance(option, tuple)) |
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
738 value = option if isinstance(option, basestring) else option[0] |
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
739 OptionElement(self, option, value in selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
740 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
741 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
742 ## 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
|
743 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
744 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
745 class XMLUI(object): |
103 | 746 """This class is used to create a user interface (form/window/parameters/etc) using SàT XML""" |
747 | |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
748 def __init__(self, panel_type="window", container="vertical", title=None, submit_id=None, session_id=None): |
103 | 749 """Init SàT XML Panel |
750 @param panel_type: one of | |
751 - window (new window) | |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
752 - popup |
103 | 753 - 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
|
754 - param (parameters, presentation depend of the frontend) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
755 @param container: disposition of elements, one of: |
107 | 756 - vertical: elements are disposed up to bottom |
757 - horizontal: elements are disposed left to right | |
758 - pairs: elements come on two aligned columns | |
103 | 759 (usually one for a label, the next for the element) |
107 | 760 - tabs: elemens are in categories with tabs (notebook) |
761 @param title: title or default if None | |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
754
diff
changeset
|
762 @param submit_id: callback id to call for panel_type we can submit (form, param) |
103 | 763 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
764 self._introspect() |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
765 if panel_type not in ['window', 'form', 'param', 'popup']: |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
766 raise exceptions.DataError(_("Unknown panel type [%s]") % panel_type) |
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
767 if panel_type == 'form' and submit_id is None: |
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
768 raise exceptions.DataError(_("form XMLUI need a submit_id")) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
769 if not isinstance(container, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
770 raise exceptions.DataError(_("container argument must be a string")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
771 self.type = panel_type |
103 | 772 impl = minidom.getDOMImplementation() |
773 | |
774 self.doc = impl.createDocument(None, "sat_xmlui", None) | |
775 top_element = self.doc.documentElement | |
776 top_element.setAttribute("type", panel_type) | |
107 | 777 if title: |
778 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
|
779 self.submit_id = submit_id |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
780 self.session_id = session_id |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
781 self.main_container = self._createContainer(container, TopElement(self)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
782 self.current_container = self.main_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
783 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
784 def _introspect(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
785 """ Introspect module to find Widgets and Containers """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
786 self._containers = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
787 self._widgets = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
788 for obj in globals().values(): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
789 try: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
790 if issubclass(obj, Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
791 if obj.__name__ == 'Widget': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
792 continue |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
793 self._widgets[obj.type] = obj |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
794 elif issubclass(obj, Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
795 if obj.__name__ == 'Container': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
796 continue |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
797 self._containers[obj.type] = obj |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
798 except TypeError: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
799 pass |
103 | 800 |
801 def __del__(self): | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
802 self.doc.unlink() |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
803 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
804 def __getattr__(self, name): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
805 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
|
806 class_name = name[3:]+"Widget" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
807 if class_name in globals(): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
808 cls = globals()[class_name] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
809 if issubclass(cls, Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
810 def createWidget(*args, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
811 if "parent" not in kwargs: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
812 kwargs["parent"] = self.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
813 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
|
814 args = list(args) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
815 kwargs["name"] = args.pop(0) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
816 return cls(self, *args, **kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
817 return createWidget |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
818 return object.__getattribute__(self, name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
819 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
820 @property |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
821 def submit_id(self): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
822 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
823 value = top_element.getAttribute("submit") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
824 return value or None |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
825 |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
826 @submit_id.setter |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
827 def submit_id(self, value): |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
828 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
|
829 if value is None: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
830 try: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
831 top_element.removeAttribute("submit") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
832 except NotFoundErr: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
833 pass |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
834 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
|
835 top_element.setAttribute("submit", value) |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
836 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
837 @property |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
838 def session_id(self): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
839 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
840 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
|
841 return value or None |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
842 |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
843 @session_id.setter |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
844 def session_id(self, value): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
845 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
846 if value is None: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
847 try: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
848 top_element.removeAttribute("session_id") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
849 except NotFoundErr: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
850 pass |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
851 elif value: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
852 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
|
853 else: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
854 raise exceptions.DataError("session_id can't be empty") |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
855 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
856 def _createContainer(self, container, parent=None, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
857 """Create a container element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
858 @param type: container type (cf init doc) |
103 | 859 @parent: parent element or None |
860 """ | |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
861 if container not in self._containers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
862 raise exceptions.DataError(_("Unknown container type [%s]") % container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
863 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
|
864 new_container = cls(self, parent=parent, **kwargs) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
865 return new_container |
105 | 866 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
867 def changeContainer(self, container, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
868 """Change the current container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
869 @param container: either container type (container it then created), |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
870 or an Container instance""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
871 if isinstance(container, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
872 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
|
873 else: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
874 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
|
875 assert(isinstance(self.current_container, Container)) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
876 return self.current_container |
103 | 877 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
878 def addWidget(self, type_, *args, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
879 """Convenience method to add an element""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
880 if type_ not in self._widgets: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
881 raise exceptions.DataError(_("Invalid type [%s]") % type_) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
882 if "parent" not in kwargs: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
883 kwargs["parent"] = self.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
884 cls = self._widgets[type_] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
885 return cls(self, *args, **kwargs) |
104 | 886 |
103 | 887 def toXml(self): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
888 """return the XML representation of the panel""" |
103 | 889 return self.doc.toxml() |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
890 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
891 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
892 # Misc other funtions |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
893 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
894 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
895 class ElementParser(object): |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
896 """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
|
897 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
|
898 (c) Karl Anderson""" |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
899 |
905
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
900 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
|
901 """ |
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
902 @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
|
903 @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
|
904 """ |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
905 self.result = None |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
906 |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
907 def onStart(elem): |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
908 self.result = elem |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
909 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
910 def onEnd(): |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
911 pass |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
912 |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
913 def onElement(elem): |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
914 self.result.addChild(elem) |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
915 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
916 parser = domish.elementStream() |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
917 parser.DocumentStartEvent = onStart |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
918 parser.ElementEvent = onElement |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
919 parser.DocumentEndEvent = onEnd |
536
a31abb97310d
core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
920 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
|
921 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
|
922 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
|
923 tmp.addRawXml(string) |
304 | 924 parser.parse(tmp.toXml().encode('utf-8')) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
925 return self.result.firstChildElement() |