Mercurial > libervia-backend
annotate src/tools/xml_tools.py @ 1810:25c3569abb71
plugin XEP-0055, tmp_directory_subscription: move directory subscription to a new temporary plugin
author | souliane <souliane@mailoo.org> |
---|---|
date | Thu, 17 Sep 2015 11:04:17 +0200 |
parents | 17c0364607be |
children | 7ef0f5f90862 |
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 |
1766 | 5 # Copyright (C) 2009-2016 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 _ |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
21 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
22 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
23 log = getLogger(__name__) |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
24 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
25 from xml.dom import minidom, NotFoundErr |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
26 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
|
27 from twisted.words.xish import domish |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
28 from twisted.words.protocols.jabber import jid |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
29 from twisted.internet import defer |
645 | 30 from sat.core import exceptions |
1500
c7c872a40e56
tools (xml_tools): keeps data form result headers sorted
souliane <souliane@mailoo.org>
parents:
1499
diff
changeset
|
31 from collections import OrderedDict |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
32 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
33 """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
|
34 |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
35 SAT_FORM_PREFIX = "SAT_FORM_" |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
36 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
|
37 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
38 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
39 # Helper functions |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
40 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
41 def _dataFormField2XMLUIData(field, read_only=False): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
42 """Get data needed to create an XMLUI's Widget from Wokkel's data_form's Field. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
43 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
44 The attribute field can be modified (if it's fixed and it has no value). |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
45 @param field (data_form.Field): a field with attributes "value", "fieldType", "label" and "var" |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
46 @param read_only (bool): if True and it makes sense, create a read only input widget |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
47 @return: a tuple (widget_type, widget_args, widget_kwargs) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
48 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
49 widget_args = [field.value] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
50 widget_kwargs = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
51 if field.fieldType == 'fixed' or field.fieldType is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
52 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
|
53 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
|
54 if field.label is None: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
55 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
|
56 field.value = "" |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
57 else: |
97ee7594c788
core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
820
diff
changeset
|
58 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
|
59 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
|
60 widget_args[0] = field.value |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
61 elif field.fieldType == 'text-single': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
62 widget_type = "string" |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
63 widget_kwargs['read_only'] = read_only |
1473
675e0e9f1653
core , privmitivus (xmlui): add jidInput handling, with a simple String for now
Goffi <goffi@goffi.org>
parents:
1472
diff
changeset
|
64 elif field.fieldType == 'jid-single': |
675e0e9f1653
core , privmitivus (xmlui): add jidInput handling, with a simple String for now
Goffi <goffi@goffi.org>
parents:
1472
diff
changeset
|
65 widget_type = "jid_input" |
675e0e9f1653
core , privmitivus (xmlui): add jidInput handling, with a simple String for now
Goffi <goffi@goffi.org>
parents:
1472
diff
changeset
|
66 widget_kwargs['read_only'] = read_only |
1070
ad023e60da8c
core (XMLUI): management of text-multi in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
1069
diff
changeset
|
67 elif field.fieldType == 'text-multi': |
1078
bb4517e69957
tools (xmlui): data form 'text-multi' element must be converted to xmlui 'textbox' (not 'text')
souliane <souliane@mailoo.org>
parents:
1070
diff
changeset
|
68 widget_type = "textbox" |
1070
ad023e60da8c
core (XMLUI): management of text-multi in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
1069
diff
changeset
|
69 widget_args[0] = u'\n'.join(field.values) |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
70 widget_kwargs['read_only'] = read_only |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
71 elif field.fieldType == 'text-private': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
72 widget_type = "password" |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
73 widget_kwargs['read_only'] = read_only |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
74 elif field.fieldType == 'boolean': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
75 widget_type = "bool" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
76 if widget_args[0] is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
77 widget_args[0] = 'false' |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
78 widget_kwargs['read_only'] = read_only |
1220
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
79 elif field.fieldType == 'integer': |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
80 widget_type = "integer" |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
81 widget_kwargs['read_only'] = read_only |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
82 elif field.fieldType == 'list-single': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
83 widget_type = "list" |
810
b11df74e49d2
core (XMLUI): fixed labels management for lists in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents:
805
diff
changeset
|
84 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
|
85 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
|
86 widget_args = [] |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
87 else: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
88 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
|
89 widget_type = "string" |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
90 widget_kwargs['read_only'] = read_only |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
91 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
92 if field.var: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
93 widget_kwargs["name"] = field.var |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
94 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
95 return widget_type, widget_args, widget_kwargs |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
96 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
97 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
98 def dataForm2Widgets(form_ui, form, read_only=False): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
99 """Complete an existing XMLUI with widget converted from XEP-0004 data forms. |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
100 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
101 @param form_ui (XMLUI): XMLUI instance |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
102 @param form (data_form.Form): Wokkel's implementation of data form |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
103 @param read_only (bool): if True and it makes sense, create a read only input widget |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
104 @return: the completed XMLUI instance |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
105 """ |
102 | 106 if form.instructions: |
105 | 107 form_ui.addText('\n'.join(form.instructions), 'instructions') |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
108 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
109 form_ui.changeContainer("pairs") |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
110 |
102 | 111 for field in form.fieldList: |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
112 widget_type, widget_args, widget_kwargs = _dataFormField2XMLUIData(field, read_only) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
113 label = field.label or field.var |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
114 if label: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
115 form_ui.addLabel(label) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
116 else: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
117 form_ui.addEmpty() |
103 | 118 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
119 form_ui.addWidget(widget_type, *widget_args, **widget_kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
120 |
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
|
121 return form_ui |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
122 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
123 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
124 def dataForm2XMLUI(form, submit_id, session_id=None, read_only=False): |
1487
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
125 """Take a data form (Wokkel's XEP-0004 implementation) and convert it to a SàT XMLUI. |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
126 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
127 @param form (data_form.Form): a Form instance |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
128 @param submit_id (unicode): callback id to call when submitting form |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
129 @param session_id (unicode): session id to return with the data |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
130 @param read_only (bool): if True and it makes sense, create a read only input widget |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
131 @return: XMLUI instance |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
132 """ |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
133 form_ui = XMLUI("form", "vertical", submit_id=submit_id, session_id=session_id) |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
134 return dataForm2Widgets(form_ui, form, read_only=read_only) |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
135 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
136 |
1507
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
137 def dataFormResult2XMLUIData(form_xml): |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
138 """Parse a data form result (not parsed by Wokkel's XEP-0004 implementation). |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
139 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
140 The raw data form is used because Wokkel doesn't manage result items parsing yet. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
141 @param form_xml (domish.Element): element of the data form |
1507
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
142 @return: a couple (headers, result_list): |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
143 - headers (dict{unicode: unicode}): form headers (field labels and types) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
144 - xmlui_data (list[tuple]): list of (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
|
145 """ |
1500
c7c872a40e56
tools (xml_tools): keeps data form result headers sorted
souliane <souliane@mailoo.org>
parents:
1499
diff
changeset
|
146 headers = OrderedDict() |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
147 try: |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
148 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
|
149 except StopIteration: |
1487
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
150 raise exceptions.DataError("Couldn't find expected <reported> tag in %s" % form_xml.toXml()) |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
151 |
660
69a8bfd266a5
core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents:
655
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 name = elt["var"] |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
156 label = elt.attributes.get('label', '') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
157 type_ = elt.attributes.get('type') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
158 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
|
159 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
160 if not headers: |
684
969562c4761b
core (tools): small fix in using imported methods
souliane <souliane@mailoo.org>
parents:
660
diff
changeset
|
161 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
|
162 |
1507
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
163 xmlui_data = [] |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
164 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
|
165 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
166 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
|
167 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
|
168 if elt.name != 'field': |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
169 log.warning(u"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
|
170 continue |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
171 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
|
172 |
1507
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
173 xmlui_data.append(_dataFormField2XMLUIData(field)) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
174 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
175 return headers, xmlui_data |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
176 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
177 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
178 def XMLUIData2AdvancedList(xmlui, headers, xmlui_data): |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
179 """Take a raw data form result (not parsed by Wokkel's XEP-0004 implementation) and convert it to an advanced list. |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
180 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
181 The raw data form is used because Wokkel doesn't manage result items parsing yet. |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
182 @param xmlui (XMLUI): the XMLUI where the AdvancedList will be added |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
183 @param headers (dict{unicode: unicode}): form headers (field labels and types) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
184 @param xmlui_data (list[tuple]): list of (widget_type, widget_args, widget_kwargs) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
185 @return: the completed XMLUI instance |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
186 """ |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
187 adv_list = AdvancedListContainer(xmlui, headers=headers, columns=len(headers), parent=xmlui.current_container) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
188 xmlui.changeContainer(adv_list) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
189 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
190 for widget_type, widget_args, widget_kwargs in xmlui_data: |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
191 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
|
192 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
193 return xmlui |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
194 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
195 |
1507
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
196 def dataFormResult2AdvancedList(xmlui, form_xml): |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
197 """Take a raw data form result (not parsed by Wokkel's XEP-0004 implementation) and convert it to an advanced list. |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
198 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
199 The raw data form is used because Wokkel doesn't manage result items parsing yet. |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
200 @param xmlui (XMLUI): the XMLUI where the AdvancedList will be added |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
201 @param form_xml (domish.Element): element of the data form |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
202 @return: the completed XMLUI instance |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
203 """ |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
204 headers, xmlui_data = dataFormResult2XMLUIData(form_xml) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
205 XMLUIData2AdvancedList(xmlui, headers, xmlui_data) |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
206 |
84250128e425
tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents:
1504
diff
changeset
|
207 |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
208 def dataFormResult2XMLUI(form_elt, session_id=None): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
209 """Take a raw data form (not parsed by XEP-0004) and convert it to a SàT XMLUI. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
210 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
211 The raw data form is used because Wokkel doesn't manage result items parsing yet. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
212 @param form_elt (domish.Element): element of the data form |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
213 @param session_id (unicode): session id to return with the data |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
214 @return: XMLUI instance |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
215 """ |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
216 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
|
217 try: |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
218 dataFormResult2AdvancedList(xml_ui, form_elt) |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
219 except exceptions.DataError: |
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
220 parsed_form = data_form.Form.fromElement(form_elt) |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
221 dataForm2Widgets(xml_ui, parsed_form, read_only=True) |
1069
8e1f30aa3975
core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents:
1067
diff
changeset
|
222 return xml_ui |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
223 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
224 |
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
|
225 def _cleanValue(value): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
226 """Workaround method to avoid DBus types with D-Bus bridge. |
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
|
227 |
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
|
228 @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
|
229 @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
|
230 """ |
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
|
231 # 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
|
232 # 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
|
233 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
|
234 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
|
235 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
|
236 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
237 |
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
|
238 def XMLUIResult2DataFormResult(xmlui_data): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
239 """ Extract form data from a XMLUI return. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
240 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
241 @param xmlui_data (dict): data returned by frontends for XMLUI form |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
242 @return: dict of data usable by Wokkel's data form |
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
|
243 """ |
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
|
244 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
|
245 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
246 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
247 def formEscape(name): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
248 """Return escaped name for forms. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
249 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
250 @param name (unicode): form name |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
251 @return: unicode |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
252 """ |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
253 return u"%s%s" % (SAT_FORM_PREFIX, name) |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
254 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
255 |
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
|
256 def XMLUIResultToElt(xmlui_data): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
257 """Construct result domish.Element from XMLUI result. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
258 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
259 @param xmlui_data (dict): data returned by frontends for XMLUI form |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
260 @return: domish.Element |
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
|
261 """ |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
262 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
|
263 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
|
264 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
|
265 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
266 |
102 | 267 def tupleList2dataForm(values): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
268 """Convert a list of tuples (name, value) to a wokkel submit data form. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
269 |
1472 | 270 @param values (list): list of tuples |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
271 @return: data_form.Form |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
272 """ |
102 | 273 form = data_form.Form('submit') |
274 for value in values: | |
275 field = data_form.Field(var=value[0], value=value[1]) | |
276 form.addField(field) | |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
35
diff
changeset
|
277 |
102 | 278 return form |
103 | 279 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
280 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
281 def paramsXML2XMLUI(xml): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
282 """Convert the XML for parameter to a SàT XML User Interface. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
283 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
284 @param xml (unicode) |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
285 @return: XMLUI |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
286 """ |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
287 # TODO: refactor params and use Twisted directly to parse XML |
214 | 288 params_doc = minidom.parseString(xml.encode('utf-8')) |
105 | 289 top = params_doc.documentElement |
290 if top.nodeName != 'params': | |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
291 raise exceptions.DataError(_('INTERNAL ERROR: parameters xml not valid')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
292 |
105 | 293 param_ui = XMLUI("param", "tabs") |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
294 tabs_cont = param_ui.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
295 |
105 | 296 for category in top.getElementsByTagName("category"): |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
297 category_name = category.getAttribute('name') |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
160
diff
changeset
|
298 label = category.getAttribute('label') |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
299 if not category_name: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
300 raise exceptions.DataError(_('INTERNAL ERROR: params categories must have a name')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
301 tabs_cont.addTab(category_name, label=label, container=PairsContainer) |
105 | 302 for param in category.getElementsByTagName("param"): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
303 widget_kwargs = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
304 |
796
46aa5ada61bf
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
305 param_name = param.getAttribute('name') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
306 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
|
307 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
|
308 if not param_name and type_ != 'text': |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
309 raise exceptions.DataError(_('INTERNAL ERROR: params must have a name')) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
310 |
105 | 311 value = param.getAttribute('value') or None |
106 | 312 callback_id = param.getAttribute('callback_id') or None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
313 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
314 if type_ == 'list': |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
315 options, selected = _paramsGetListOptions(param) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
316 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
|
317 widget_kwargs['selected'] = selected |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
318 elif type_ == 'jids_list': |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
319 widget_kwargs['jids'] = _paramsGetListJids(param) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
320 |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
321 if type_ in ("button", "text"): |
106 | 322 param_ui.addEmpty() |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
323 value = param_label |
106 | 324 else: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
325 param_ui.addLabel(param_label or param_name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
326 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
327 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
328 widget_kwargs["value"] = value |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
329 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
330 if callback_id: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
331 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
|
332 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
|
333 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
|
334 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
|
335 widget_kwargs['fields_back'] = others |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
336 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
337 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
|
338 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
339 param_ui.addWidget(type_, **widget_kwargs) |
105 | 340 |
341 return param_ui.toXml() | |
342 | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
343 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
344 def _paramsGetListOptions(param): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
345 """Retrieve the options for list element. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
346 |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
347 The <option/> tags must be direct children of <param/>. |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
348 @param param (domish.Element): element |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
349 @return: a tuple (options, selected_value) |
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
350 """ |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
351 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
|
352 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
|
353 elems = param.getElementsByTagName("option") |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
354 if len(elems) == 0: |
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
355 return [] |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
356 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
|
357 selected = [elem.getAttribute("value") for elem in elems if elem.getAttribute("selected") == 'true'] |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
358 return (options, selected) |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
359 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
360 def _paramsGetListJids(param): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
361 """Retrive jids from a jids_list element. |
655
56f8a9c99194
core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents:
645
diff
changeset
|
362 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
363 the <jid/> tags must be direct children of <param/> |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
364 @param param (domish.Element): element |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
365 @return: a list of jids |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
366 """ |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
367 elems = param.getElementsByTagName("jid") |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
368 jids = [elem.firstChild.data for elem in elems |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
369 if elem.firstChild is not None |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
370 and elem.firstChild.nodeType == elem.TEXT_NODE] |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
371 return jids |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
372 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
373 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
374 ### XMLUI Elements ### |
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 Element(object): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
378 """ Base XMLUI element """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
379 type = None |
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, xmlui, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
382 """Create a container element |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
383 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
384 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
385 @parent: parent element |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
386 """ |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
387 assert self.type is not None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
388 if not hasattr(self, 'elem'): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
389 self.elem = parent.xmlui.doc.createElement(self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
390 self.xmlui = xmlui |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
391 if parent is not None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
392 parent.append(self) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
393 self.parent = parent |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
394 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
395 def append(self, child): |
1487
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
396 """Append a child to this element. |
1490
55cff13b1f10
core (xmlui): reverted change from 039d96e131be: we should be able to recreate the same container with changeContainer
Goffi <goffi@goffi.org>
parents:
1487
diff
changeset
|
397 |
1487
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
398 @param child (Element): child element |
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
399 @return: the added child Element |
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
400 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
401 self.elem.appendChild(child.elem) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
402 child.parent = self |
1487
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
403 return child |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
404 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
405 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
406 class TopElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
407 """ Main XML Element """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
408 type = 'top' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
409 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
410 def __init__(self, xmlui): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
411 self.elem = xmlui.doc.documentElement |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
412 super(TopElement, self).__init__(xmlui) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
413 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
414 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
415 class TabElement(Element): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
416 """ Used by TabsContainer to give name and label to tabs.""" |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
417 type = 'tab' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
418 |
1486
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
419 def __init__(self, parent, name, label, selected=False): |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
420 """ |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
421 |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
422 @param parent (TabsContainer): parent container |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
423 @param name (unicode): tab name |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
424 @param label (unicode): tab label |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
425 @param selected (bool): set to True to select this tab |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
426 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
427 if not isinstance(parent, TabsContainer): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
428 raise exceptions.DataError(_("TabElement must be a child of TabsContainer")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
429 super(TabElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
430 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
431 self.elem.setAttribute('label', label) |
1486
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
432 if selected: |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
433 self.setSelected(selected) |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
434 |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
435 def setSelected(self, selected=False): |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
436 """Set the tab selected. |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
437 |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
438 @param selected (bool): set to True to select this tab |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
439 """ |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
440 self.elem.setAttribute('selected', 'true' if selected else 'false') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
441 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
442 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
443 class FieldBackElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
444 """ 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
|
445 type = 'field_back' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
446 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
447 def __init__(self, parent, name): |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
448 assert isinstance(parent, ButtonWidget) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
449 super(FieldBackElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
450 self.elem.setAttribute('name', name) |
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 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
453 class InternalFieldElement(Element): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
454 """ 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
|
455 type = 'internal_field' |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
456 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
457 def __init__(self, parent, name): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
458 super(InternalFieldElement, self).__init__(parent.xmlui, parent) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
459 self.elem.setAttribute('name', name) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
460 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
461 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
462 class InternalDataElement(Element): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
463 """ Used by internal callbacks to retrieve extra data """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
464 type = 'internal_data' |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
465 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
466 def __init__(self, parent, children): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
467 super(InternalDataElement, self).__init__(parent.xmlui, parent) |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
468 assert isinstance(children, list) |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
469 for child in children: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
470 self.elem.childNodes.append(child) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
471 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
472 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
473 class OptionElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
474 """" Used by ListWidget to specify options """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
475 type = 'option' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
476 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
477 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
|
478 """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
479 |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
480 @param parent |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
481 @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
|
482 @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
|
483 """ |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
484 assert isinstance(parent, ListWidget) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
485 super(OptionElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
486 if isinstance(option, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
487 value, label = option, option |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
488 elif isinstance(option, tuple): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
489 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
|
490 else: |
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
491 raise NotImplementedError |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
492 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
493 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
|
494 if selected: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
495 self.elem.setAttribute('selected', 'true') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
496 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
497 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
498 class JidElement(Element): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
499 """" Used by JidsListWidget to specify jids""" |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
500 type = 'jid' |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
501 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
502 def __init__(self, parent, jid_): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
503 """ |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
504 @param jid_(jid.JID, unicode): jid to append |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
505 """ |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
506 assert isinstance(parent, JidsListWidget) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
507 super(JidElement, self).__init__(parent.xmlui, parent) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
508 if isinstance(jid_, jid.JID): |
1499
adc72c39f032
tools (xml_tools): fixes JidElement.__init__
souliane <souliane@mailoo.org>
parents:
1490
diff
changeset
|
509 value = jid_.full() |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
510 elif isinstance(jid_, basestring): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
511 value = unicode(jid_) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
512 else: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
513 raise NotImplementedError |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
514 jid_txt = self.xmlui.doc.createTextNode(value) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
515 self.elem.appendChild(jid_txt) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
516 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
517 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
518 class RowElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
519 """" Used by AdvancedListContainer """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
520 type = 'row' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
521 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
522 def __init__(self, parent): |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
523 assert isinstance(parent, AdvancedListContainer) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
524 super(RowElement, self).__init__(parent.xmlui, parent) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
525 if parent.next_row_idx is not None: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
526 if parent.auto_index: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
527 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
|
528 self.elem.setAttribute('index', parent.next_row_idx) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
529 parent.next_row_idx = None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
530 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
531 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
532 class HeaderElement(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
533 """" Used by AdvancedListContainer """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
534 type = 'header' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
535 |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
536 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
|
537 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
538 @param parent: AdvancedListContainer instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
539 @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
|
540 @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
|
541 @param description: long descriptive text |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
542 """ |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
543 assert isinstance(parent, AdvancedListContainer) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
544 super(HeaderElement, self).__init__(parent.xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
545 if name: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
546 self.elem.setAttribute('name', name) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
547 if label: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
548 self.elem.setAttribute('label', label) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
549 if description: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
550 self.elem.setAttribute('description', description) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
551 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
552 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
553 ## Containers ## |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
554 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
555 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
556 class Container(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
557 """ And Element which contains other ones and has a layout """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
558 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
559 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
560 def __init__(self, xmlui, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
561 """Create a container element |
1472 | 562 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
563 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
564 @parent: parent element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
565 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
566 self.elem = xmlui.doc.createElement('container') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
567 super(Container, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
568 self.elem.setAttribute('type', self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
569 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
570 def getParentContainer(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
571 """ Return first parent container |
1472 | 572 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
573 @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
|
574 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
575 current = self.parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
576 while(not isinstance(current, (Container)) and |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
577 current is not None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
578 current = current.parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
579 return current |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
580 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
581 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
582 class VerticalContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
583 type = "vertical" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
584 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
585 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
586 class HorizontalContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
587 type = "horizontal" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
588 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
589 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
590 class PairsContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
591 type = "pairs" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
592 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
593 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
594 class TabsContainer(Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
595 type = "tabs" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
596 |
1486
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
597 def addTab(self, name, label=None, selected=None, container=VerticalContainer): |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
598 """Add a tab. |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
599 |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
600 @param name (unicode): tab name |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
601 @param label (unicode): tab label |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
602 @param selected (bool): set to True to select this tab |
1490
55cff13b1f10
core (xmlui): reverted change from 039d96e131be: we should be able to recreate the same container with changeContainer
Goffi <goffi@goffi.org>
parents:
1487
diff
changeset
|
603 @param container (class): container class, inheriting from Container |
1486
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
604 @return: the container for the new tab |
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
605 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
606 if not label: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
607 label = name |
1486
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
608 tab_elt = TabElement(self, name, label, selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
609 new_container = container(self.xmlui, tab_elt) |
1486
a77217511afd
tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents:
1476
diff
changeset
|
610 return self.xmlui.changeContainer(new_container) |
802
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 end(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
613 """ Called when we have finished tabs |
1472 | 614 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
615 change current container to first container parent |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
616 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
617 parent_container = self.getParentContainer() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
618 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
|
619 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
620 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
621 class AdvancedListContainer(Container): |
1472 | 622 """A list which can contain other widgets, headers, etc""" |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
623 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
|
624 |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
625 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
|
626 """Create an advanced list |
1472 | 627 |
1199 | 628 @param headers: optional headers information |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
629 @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
|
630 @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
|
631 @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
|
632 @param selectable: one of: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
633 'no': nothing is done |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
634 'single': one row can be selected |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
635 @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
|
636 @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
|
637 """ |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
638 assert selectable in ('no', 'single') |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
639 if not items and columns is None: |
876
65bf1bc70f6b
tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents:
865
diff
changeset
|
640 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
|
641 if headers is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
642 headers = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
643 if items is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
644 items = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
645 super(AdvancedListContainer, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
646 if columns is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
647 columns = len(items[0]) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
648 self._columns = columns |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
649 self._item_idx = 0 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
650 self.current_row = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
651 if headers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
652 if len(headers) != self._columns: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
653 raise exceptions.DataError(_("Headers lenght doesn't correspond to columns")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
654 self.addHeaders(headers) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
655 if items: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
656 self.addItems(items) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
657 self.elem.setAttribute('columns', str(self._columns)) |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
658 if callback_id is not None: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
659 self.elem.setAttribute('callback', callback_id) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
660 self.elem.setAttribute('selectable', selectable) |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
661 self.auto_index = auto_index |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
662 if auto_index: |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
663 self.elem.setAttribute('auto_index', 'true') |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
664 self.next_row_idx = None |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
665 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
666 def addHeaders(self, headers): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
667 for header in headers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
668 self.addHeader(header) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
669 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
670 def addHeader(self, header): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
671 pass # TODO |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
672 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
673 def addItems(self, items): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
674 for item in items: |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
675 self.append(item) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
676 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
677 def setRowIndex(self, idx): |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
678 """ Set index for next row |
1472 | 679 |
805
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
680 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
|
681 @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
|
682 """ |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
683 self.next_row_idx = idx |
7c05c39156a2
core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
684 |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
685 def append(self, child): |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
686 if isinstance(child, RowElement): |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
687 return super(AdvancedListContainer, self).append(child) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
688 if self._item_idx % self._columns == 0: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
689 self.current_row = RowElement(self) |
803
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
690 self.current_row.append(child) |
f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents:
802
diff
changeset
|
691 self._item_idx += 1 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
692 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
693 def end(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
694 """ Called when we have finished list |
1472 | 695 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
696 change current container to first container parent |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
697 """ |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
698 if self._item_idx % self._columns != 0: |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
699 raise exceptions.DataError(_("Incorrect number of items in list")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
700 parent_container = self.getParentContainer() |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
701 self.xmlui.changeContainer(parent_container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
702 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
703 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
704 ## Widgets ## |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
705 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
706 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
707 class Widget(Element): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
708 type = None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
709 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
710 def __init__(self, xmlui, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
711 """Create an element |
1472 | 712 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
713 @param xmlui: XMLUI instance |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
714 @param name: name of the element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
715 @param parent: parent element or None |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
716 """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
717 self.elem = xmlui.doc.createElement('widget') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
718 super(Widget, self).__init__(xmlui, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
719 if name: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
720 self.elem.setAttribute('name', name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
721 self.elem.setAttribute('type', self.type) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
722 |
977
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
723 def setInternalCallback(self, callback, fields, data_elts=None): |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
724 """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
|
725 |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
726 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
|
727 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
|
728 @param callback (string): a value from: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
729 - '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
|
730 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
|
731 of type List do not accept the empty value. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
732 - '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
|
733 is not a List. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
734 - '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
|
735 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
|
736 to which the JID selected in A belongs. |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
737 - more operation to be added when necessary... |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
738 @param fields (list): a list of widget names (string) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
739 @param data_elts (list[Element]): extra data elements |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
740 """ |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
741 self.elem.setAttribute('internal_callback', callback) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
742 if fields: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
743 for field in fields: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
744 InternalFieldElement(self, field) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
745 if data_elts: |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
746 InternalDataElement(self, data_elts) |
d2e612a45e76
tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents:
975
diff
changeset
|
747 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
748 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
749 class EmptyWidget(Widget): |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
750 """Place holder widget""" |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
751 type = 'empty' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
752 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
753 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
754 class TextWidget(Widget): |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
755 """Used for blob of text""" |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
756 type = 'text' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
757 |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
758 def __init__(self, xmlui, value, name=None, parent=None): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
759 super(TextWidget, self).__init__(xmlui, name, parent) |
1086
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
760 value_elt = self.xmlui.doc.createElement('value') |
865
3ee2ec7ec010
core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents:
863
diff
changeset
|
761 text = self.xmlui.doc.createTextNode(value) |
1086
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
762 value_elt.appendChild(text) |
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
763 self.elem.appendChild(value_elt) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
764 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
765 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
766 class LabelWidget(Widget): |
1472 | 767 """One line blob of text |
768 | |
769 used most of time to display the desciption or name of the next widget | |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
770 """ |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
771 type = 'label' |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
772 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
773 def __init__(self, xmlui, label, name=None, parent=None): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
774 super(LabelWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
775 self.elem.setAttribute('value', label) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
776 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
777 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
778 class JidWidget(Widget): |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
779 """Used to display a Jabber ID, some specific methods can be added""" |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
780 type = 'jid' |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
781 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
782 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
|
783 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
|
784 try: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
785 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
|
786 except AttributeError: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
787 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
|
788 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
789 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
790 class DividerWidget(Widget): |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
791 type = 'divider' |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
792 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
793 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
|
794 """ Create a divider |
1472 | 795 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
796 @param xmlui: XMLUI instance |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
797 @param style: one of: |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
798 - line: a simple line |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
799 - 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
|
800 - 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
|
801 - 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
|
802 - 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
|
803 @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
|
804 @param parent: parent container |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
805 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
806 """ |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
807 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
|
808 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
|
809 |
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
810 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
811 ### Inputs ### |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
812 |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
813 |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
814 class InputWidget(Widget): |
1472 | 815 """Widget which can accept user inputs |
816 | |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
817 used mainly in forms |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
818 """ |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
819 def __init__(self, xmlui, name=None, parent=None, read_only=False): |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
820 super(InputWidget, self).__init__(xmlui, name, parent) |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
821 if read_only: |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
822 self.elem.setAttribute('read_only', 'true') |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
823 |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
824 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
825 class StringWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
826 type = 'string' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
827 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
828 def __init__(self, xmlui, value=None, name=None, parent=None, read_only=False): |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
829 super(StringWidget, self).__init__(xmlui, name, parent, read_only=read_only) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
830 if value: |
1086
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
831 value_elt = self.xmlui.doc.createElement('value') |
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
832 text = self.xmlui.doc.createTextNode(value) |
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
833 value_elt.appendChild(text) |
2cb30f46e560
core/frontends (XMLUI): value can now be inserted as a <value/> element, if not present value attribute is tested, else empty string is used.
Goffi <goffi@goffi.org>
parents:
1084
diff
changeset
|
834 self.elem.appendChild(value_elt) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
835 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
836 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
837 class PasswordWidget(StringWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
838 type = 'password' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
839 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
840 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
841 class TextBoxWidget(StringWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
842 type = 'textbox' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
843 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
844 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
845 class JidInputWidget(StringWidget): |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
846 type = 'jid_input' |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
847 |
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
848 |
1220
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
849 # TODO handle min and max values |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
850 class IntWidget(StringWidget): |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
851 type = 'int' |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
852 |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
853 def __init__(self, xmlui, value=0, name=None, parent=None, read_only=False): |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
854 try: |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
855 int(value) |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
856 except ValueError: |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
857 raise exceptions.DataError(_("Value must be an integer")) |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
858 super(IntWidget, self).__init__(xmlui, value, name, parent, read_only=read_only) |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
859 |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
860 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
861 class BoolWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
862 type = 'bool' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
863 |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
864 def __init__(self, xmlui, value='false', name=None, parent=None, read_only=False): |
910
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
865 if isinstance(value, bool): |
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
866 value = 'true' if value else 'false' |
9754c0ebadba
core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents:
905
diff
changeset
|
867 elif value == '0': |
1220
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
868 value = 'false' |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
869 elif value == '1': |
1220
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
870 value = 'true' |
f91e7028e2c3
memory (params), tools (xml_tools), plugins, frontends: add "int" parameter type with "min" and "max" attributes
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
871 if value not in ('true', 'false'): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
872 raise exceptions.DataError(_("Value must be 0, 1, false or true")) |
1084
03dcb6ca7e49
core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents:
1078
diff
changeset
|
873 super(BoolWidget, self).__init__(xmlui, name, parent, read_only=read_only) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
874 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
875 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
876 |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
803
diff
changeset
|
877 class ButtonWidget(Widget): |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
878 type = 'button' |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
879 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
880 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
|
881 """Add a button |
1472 | 882 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
883 @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
|
884 @param value: label of the button |
1487
0df627d0b4ca
tools (xmlui): changeContainer do not create a new one when the current one already fits
souliane <souliane@mailoo.org>
parents:
1486
diff
changeset
|
885 @param fields_back: list of names of field to give back when pushing the button |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
886 @param name: name |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
887 @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
|
888 """ |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
889 if fields_back is None: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
890 fields_back = [] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
891 super(ButtonWidget, self).__init__(xmlui, name, parent) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
892 self.elem.setAttribute('callback', callback_id) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
893 if value: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
894 self.elem.setAttribute('value', value) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
895 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
|
896 FieldBackElement(self, field) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
897 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
898 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
899 class ListWidget(InputWidget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
900 type = 'list' |
630
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
901 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
902 def __init__(self, xmlui, options, selected=None, styles=None, name=None, parent=None): |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
903 """ |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
904 |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
905 @param xmlui |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1105
diff
changeset
|
906 @param options (list[option]): each option can be given as: |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1105
diff
changeset
|
907 - a single string if the label and the value are the same |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1105
diff
changeset
|
908 - a tuple with a couple of string (value,label) if the label and the value differ |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
909 @param selected (list[string]): list of the selected values |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
910 @param styles (iterable[string]): flags to set the behaviour of the list |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
911 @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
|
912 @param parent |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
913 """ |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
914 styles = set() if styles is None else set(styles) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
915 if styles is None: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
916 styles = set() |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
917 else: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
918 styles = set(styles) |
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
|
919 if not options: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
981
diff
changeset
|
920 log.warning(_('empty "options" list')) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
921 if not styles.issubset(['multi']): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
922 raise exceptions.DataError(_("invalid styles")) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
923 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
|
924 self.addOptions(options, selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
925 for style in styles: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
926 self.elem.setAttribute(style, 'yes') |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
927 |
968
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
928 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
|
929 """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
|
930 if selected: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
931 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
|
932 selected = [selected] |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
933 else: |
75f3b3b430ff
tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents:
910
diff
changeset
|
934 selected = [] |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
935 for option in options: |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
936 assert isinstance(option, basestring) or isinstance(option, tuple) |
1067
f7f15d44fdfa
tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents:
1036
diff
changeset
|
937 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
|
938 OptionElement(self, option, value in selected) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
939 |
1476
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
940 class JidsListWidget(InputWidget): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
941 """A list of text or jids where elements can be added/removed or modified""" |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
942 type = 'jids_list' |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
943 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
944 def __init__(self, xmlui, jids, styles=None, name=None, parent=None): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
945 """ |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
946 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
947 @param xmlui |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
948 @param jids (list[jid.JID]): base jids |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
949 @param styles (iterable[string]): flags to set the behaviour of the list |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
950 @param name (string) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
951 @param parent |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
952 """ |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
953 super(JidsListWidget, self).__init__(xmlui, name, parent) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
954 styles = set() if styles is None else set(styles) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
955 if not styles.issubset([]): # TODO |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
956 raise exceptions.DataError(_("invalid styles")) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
957 for style in styles: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
958 self.elem.setAttribute(style, 'yes') |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
959 if not jids: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
960 log.debug('empty jids list') |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
961 else: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
962 self.addJids(jids) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
963 |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
964 def addJids(self, jids): |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
965 for jid_ in jids: |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
966 JidElement(self, jid_) |
48706f4ff19c
core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents:
1475
diff
changeset
|
967 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
968 |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
969 ## Dialog Elements ## |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
970 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
971 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
972 class DialogElement(Element): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
973 """Main dialog element """ |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
974 type = 'dialog' |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
975 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
976 def __init__(self, parent, type_, level=None): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
977 if not isinstance(parent, TopElement): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
978 raise exceptions.DataError(_("DialogElement must be a direct child of TopElement")) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
979 super(DialogElement, self).__init__(parent.xmlui, parent) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
980 self.elem.setAttribute(C.XMLUI_DATA_TYPE, type_) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
981 self.elem.setAttribute(C.XMLUI_DATA_LVL, level or C.XMLUI_DATA_LVL_DEFAULT) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
982 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
983 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
984 class MessageElement(Element): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
985 """Element with the instruction message""" |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
986 type = C.XMLUI_DATA_MESS |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
987 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
988 def __init__(self, parent, message): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
989 if not isinstance(parent, DialogElement): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
990 raise exceptions.DataError(_("MessageElement must be a direct child of DialogElement")) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
991 super(MessageElement, self).__init__(parent.xmlui, parent) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
992 message_txt = self.xmlui.doc.createTextNode(message) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
993 self.elem.appendChild(message_txt) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
994 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
995 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
996 class ButtonsElement(Element): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
997 """Buttons element which indicate which set to use""" |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
998 type = 'buttons' |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
999 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1000 def __init__(self, parent, set_): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1001 if not isinstance(parent, DialogElement): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1002 raise exceptions.DataError(_("ButtonsElement must be a direct child of DialogElement")) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1003 super(ButtonsElement, self).__init__(parent.xmlui, parent) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1004 self.elem.setAttribute('set', set_) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1005 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1006 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1007 class FileElement(Element): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1008 """File element used for FileDialog""" |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1009 type = 'file' |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1010 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1011 def __init__(self, parent, type_): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1012 if not isinstance(parent, DialogElement): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1013 raise exceptions.DataError(_("FileElement must be a direct child of DialogElement")) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1014 super(FileElement, self).__init__(parent.xmlui, parent) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1015 self.elem.setAttribute('type', type_) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1016 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1017 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1018 ## 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
|
1019 |
0b914394e74f
core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents:
615
diff
changeset
|
1020 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
1021 class XMLUI(object): |
103 | 1022 """This class is used to create a user interface (form/window/parameters/etc) using SàT XML""" |
1023 | |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1024 def __init__(self, panel_type="window", container="vertical", dialog_opt=None, title=None, submit_id=None, session_id=None): |
103 | 1025 """Init SàT XML Panel |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1026 |
103 | 1027 @param panel_type: one of |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1028 - C.XMLUI_WINDOW (new window) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1029 - C.XMLUI_POPUP |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1030 - C.XMLUI_FORM (formulaire, depend of the frontend, usually a panel with cancel/submit buttons) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1031 - C.XMLUI_PARAM (parameters, presentation depend of the frontend) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1032 - C.XMLUI_DIALOG (one common dialog, presentation depend of frontend) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1033 @param container: disposition of elements, one of: |
107 | 1034 - vertical: elements are disposed up to bottom |
1035 - horizontal: elements are disposed left to right | |
1036 - pairs: elements come on two aligned columns | |
103 | 1037 (usually one for a label, the next for the element) |
107 | 1038 - tabs: elemens are in categories with tabs (notebook) |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1039 @param dialog_opt: only used if panel_type == C.XMLUI_DIALOG. Dictionnary (string/string) where key can be: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1040 - C.XMLUI_DATA_TYPE: type of dialog, value can be: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1041 - C.XMLUI_DIALOG_MESSAGE (default): an information/error message. Action of user is necessary to close the dialog. Usually the frontend display a classic popup |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1042 - C.XMLUI_DIALOG_NOTE: like a C.XMLUI_DIALOG_MESSAGE, but action of user is not necessary to close, at frontend choice (it can be closed after a timeout). Usually the frontend display as a timed out notification |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1043 - C.XMLUI_DIALOG_CONFIRM: dialog with 2 choices (usualy "Ok"/"Cancel"). |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1044 returned data can contain: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1045 - "answer": "true" if answer is "ok", "yes" or equivalent, "false" else |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1046 - C.XLMUI_DIALOG_FILE: a file selection dialog |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1047 returned data can contain: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1048 - "cancelled": "true" if dialog has been cancelled, not present or "false" else |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1049 - "path": path of the choosed file/dir |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1050 - C.XMLUI_DATA_MESS: message shown in dialog |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1051 - C.XMLUI_DATA_LVL: one of: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1052 - C.XMLUI_DATA_LVL_INFO (default): normal message |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1053 - C.XMLUI_DATA_LVL_WARNING: attention of user is important |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1054 - C.XMLUI_DATA_LVL_ERROR: something went wrong |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1055 - C.XMLUI_DATA_BTNS_SET: one of: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1056 - C.XMLUI_DATA_BTNS_SET_OKCANCEL (default): classical "OK" and "Cancel" set |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1057 - C.XMLUI_DATA_BTNS_SET_YESNO: a translated "yes" for OK, and "no" for Cancel |
1521
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1058 - C.XMLUI_DATA_FILETYPE: only used for file dialogs, one of: |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1059 - C.XMLUI_DATA_FILETYPE_FILE: a file path is requested |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1060 - C.XMLUI_DATA_FILETYPE_DIR: a dir path is requested |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1061 - C.XMLUI_DATA_FILETYPE_DEFAULT: same as C.XMLUI_DATA_FILETYPE_FILE |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1062 |
107 | 1063 @param title: title or default if None |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1064 @param submit_id: callback id to call for panel_type we can submit (form, param, dialog) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1065 @param session_id: use to keep a session attached to the dialog, must be returned by frontends |
103 | 1066 """ |
1530 | 1067 self._introspect() # FIXME: why doing that on each XMLUI ? should be done once |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1068 if panel_type not in [C.XMLUI_WINDOW, C.XMLUI_FORM, C.XMLUI_PARAM, C.XMLUI_POPUP, C.XMLUI_DIALOG]: |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
1069 raise exceptions.DataError(_("Unknown panel type [%s]") % panel_type) |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1070 if panel_type == C.XMLUI_FORM and submit_id is None: |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
1071 raise exceptions.DataError(_("form XMLUI need a submit_id")) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1072 if not isinstance(container, basestring): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1073 raise exceptions.DataError(_("container argument must be a string")) |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1074 if dialog_opt is not None and panel_type != C.XMLUI_DIALOG: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1075 raise exceptions.DataError(_("dialog_opt can only be used with dialog panels")) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1076 self.type = panel_type |
103 | 1077 impl = minidom.getDOMImplementation() |
1078 | |
1079 self.doc = impl.createDocument(None, "sat_xmlui", None) | |
1080 top_element = self.doc.documentElement | |
1081 top_element.setAttribute("type", panel_type) | |
107 | 1082 if title: |
1083 top_element.setAttribute("title", title) | |
1530 | 1084 self.submit_id = submit_id |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1085 self.session_id = session_id |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1086 if panel_type == C.XMLUI_DIALOG: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1087 if dialog_opt is None: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1088 dialog_opt = {} |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1089 self._createDialog(dialog_opt) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1090 return |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
1091 self.main_container = self._createContainer(container, TopElement(self)) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1092 self.current_container = self.main_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1093 |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1094 def _introspect(self): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1095 """ Introspect module to find Widgets and Containers """ |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1096 self._containers = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1097 self._widgets = {} |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1098 for obj in globals().values(): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1099 try: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1100 if issubclass(obj, Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1101 if obj.__name__ == 'Widget': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1102 continue |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1103 self._widgets[obj.type] = obj |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1104 elif issubclass(obj, Container): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1105 if obj.__name__ == 'Container': |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1106 continue |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1107 self._containers[obj.type] = obj |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1108 except TypeError: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1109 pass |
103 | 1110 |
1111 def __del__(self): | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1112 self.doc.unlink() |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1113 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1114 def __getattr__(self, name): |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
1115 if name.startswith("add") and name not in ('addWidget',): # addWidgetName(...) create an instance of WidgetName |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1116 if self.type == C.XMLUI_DIALOG: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1117 raise exceptions.InternalError(_("addXXX can't be used with dialogs")) |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
1118 class_name = name[3:] + "Widget" |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1119 if class_name in globals(): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1120 cls = globals()[class_name] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1121 if issubclass(cls, Widget): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1122 def createWidget(*args, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1123 if "parent" not in kwargs: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1124 kwargs["parent"] = self.current_container |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
1125 if "name" not in kwargs and issubclass(cls, InputWidget): # name can be given as first argument or in keyword arguments for InputWidgets |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1126 args = list(args) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1127 kwargs["name"] = args.pop(0) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1128 return cls(self, *args, **kwargs) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1129 return createWidget |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1130 return object.__getattribute__(self, name) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1131 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1132 @property |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1133 def submit_id(self): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1134 top_element = self.doc.documentElement |
1530 | 1135 if not top_element.hasAttribute("submit"): |
1136 # getAttribute never return None (it return empty string it attribute doesn't exists) | |
1137 # so we have to manage None here | |
1138 return None | |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1139 value = top_element.getAttribute("submit") |
1530 | 1140 return value |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1141 |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1142 @submit_id.setter |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1143 def submit_id(self, value): |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
1144 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
|
1145 if value is None: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1146 try: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1147 top_element.removeAttribute("submit") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1148 except NotFoundErr: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1149 pass |
1531
51dec65ec62c
core (xmlui): fixed submit_id returning None when its value is ''
Goffi <goffi@goffi.org>
parents:
1530
diff
changeset
|
1150 else: # submit_id can be the empty string to bypass form restriction |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1151 top_element.setAttribute("submit", value) |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
1152 |
798
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1153 @property |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1154 def session_id(self): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1155 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1156 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
|
1157 return value or None |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1158 |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1159 @session_id.setter |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1160 def session_id(self, value): |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1161 top_element = self.doc.documentElement |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1162 if value is None: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1163 try: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1164 top_element.removeAttribute("session_id") |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1165 except NotFoundErr: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1166 pass |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1167 elif value: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1168 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
|
1169 else: |
8f5479f8709a
core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents:
796
diff
changeset
|
1170 raise exceptions.DataError("session_id can't be empty") |
760
73a0077f80cc
backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
759
diff
changeset
|
1171 |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1172 def _createDialog(self, dialog_opt): |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1173 dialog_type = dialog_opt.setdefault(C.XMLUI_DATA_TYPE, C.XMLUI_DIALOG_MESSAGE) |
1530 | 1174 if dialog_type in [C.XMLUI_DIALOG_CONFIRM, C.XMLUI_DIALOG_FILE] and self.submit_id is None: |
1105
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1175 raise exceptions.InternalError(_("Submit ID must be filled for this kind of dialog")) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1176 top_element = TopElement(self) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1177 level = dialog_opt.get(C.XMLUI_DATA_LVL) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1178 dialog_elt = DialogElement(top_element, dialog_type, level) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1179 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1180 try: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1181 MessageElement(dialog_elt, dialog_opt[C.XMLUI_DATA_MESS]) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1182 except KeyError: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1183 pass |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1184 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1185 try: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1186 ButtonsElement(dialog_elt, dialog_opt[C.XMLUI_DATA_BTNS_SET]) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1187 except KeyError: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1188 pass |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1189 |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1190 try: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1191 FileElement(dialog_elt, dialog_opt[C.XMLUI_DATA_FILETYPE]) |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1192 except KeyError: |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1193 pass |
018bdd687747
core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents:
1086
diff
changeset
|
1194 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1195 def _createContainer(self, container, parent=None, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1196 """Create a container element |
1472 | 1197 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1198 @param type: container type (cf init doc) |
103 | 1199 @parent: parent element or None |
1200 """ | |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1201 if container not in self._containers: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1202 raise exceptions.DataError(_("Unknown container type [%s]") % container) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1203 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
|
1204 new_container = cls(self, parent=parent, **kwargs) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1205 return new_container |
105 | 1206 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1207 def changeContainer(self, container, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1208 """Change the current container |
1472 | 1209 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1210 @param container: either container type (container it then created), |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1211 or an Container instance""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1212 if isinstance(container, basestring): |
1490
55cff13b1f10
core (xmlui): reverted change from 039d96e131be: we should be able to recreate the same container with changeContainer
Goffi <goffi@goffi.org>
parents:
1487
diff
changeset
|
1213 self.current_container = self._createContainer(container, self.current_container.getParentContainer() or self.main_container, **kwargs) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1214 else: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1215 self.current_container = self.main_container if container is None else container |
1475
7ac073d2e7e0
core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents:
1473
diff
changeset
|
1216 assert isinstance(self.current_container, Container) |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1217 return self.current_container |
103 | 1218 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1219 def addWidget(self, type_, *args, **kwargs): |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1220 """Convenience method to add an element""" |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1221 if type_ not in self._widgets: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1222 raise exceptions.DataError(_("Invalid type [%s]") % type_) |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1223 if "parent" not in kwargs: |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1224 kwargs["parent"] = self.current_container |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1225 cls = self._widgets[type_] |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1226 return cls(self, *args, **kwargs) |
104 | 1227 |
103 | 1228 def toXml(self): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1229 """return the XML representation of the panel""" |
103 | 1230 return self.doc.toxml() |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1231 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1232 |
1142
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1233 # Some sugar for XMLUI dialogs |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1234 |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1235 def note(message, title='', level=C.XMLUI_DATA_LVL_INFO): |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1236 """Sugar to easily create a Note Dialog |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1237 |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1238 @param message(unicode): body of the note |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1239 @param title(unicode): title of the note |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1240 @param level(unicode): one of C.XMLUI_DATA_LVL_* |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1241 @return(XMLUI): instance of XMLUI |
1142
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1242 """ |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
1243 note_xmlui = XMLUI(C.XMLUI_DIALOG, dialog_opt={ |
1142
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1244 C.XMLUI_DATA_TYPE: C.XMLUI_DIALOG_NOTE, |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1245 C.XMLUI_DATA_MESS: message, |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1246 C.XMLUI_DATA_LVL: level}, |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1247 title=title |
1444
8ce9924fa92c
tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
1248 ) |
1142
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1249 return note_xmlui |
2f9f735334da
core (XMLUI): sugar method "note" allow to easily create a XMLUI note dialog (more methods for other dialogs should follow)
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
1250 |
1692
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1251 |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1252 def deferredUI(host, xmlui, chained=False): |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1253 r"""Create a deferred linked to XMLUI |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1254 |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1255 @param xmlui(XMLUI): instance of the XMLUI |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1256 Must be an XMLUI that you can submit, with submit_id set to '' |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1257 @param chained(bool): True if the Deferred result must be returned to the frontend |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1258 useful when backend is in a series of dialogs with an ui |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1259 @return (D(data)): a deferred which fire the data |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1260 """ |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1261 assert xmlui.submit_id == '' |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1262 xmlui_d = defer.Deferred() |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1263 |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1264 def onSubmit(data, profile): |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1265 xmlui_d.callback(data) |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1266 return xmlui_d if chained else {} |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1267 |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1268 xmlui.submit_id = host.registerCallback(onSubmit, with_data=True, one_shot=True) |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1269 return xmlui_d |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1270 |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1271 def deferXMLUI(host, xmlui, action_extra=None, security_limit=C.NO_SECURITY_LIMIT, chained=False, profile=C.PROF_KEY_NONE): |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1272 """Create a deferred linked to XMLUI |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1273 |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1274 @param xmlui(XMLUI): instance of the XMLUI |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1275 Must be an XMLUI that you can submit, with submit_id set to '' |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1276 @param profile: %(doc_profile)s |
1601
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1277 @param action_extra(None, dict): extra action to merge with xmlui |
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1278 mainly used to add meta informations (see actionNew doc) |
1599
e2ed8009e66e
backend, bridge, frontends: actionNew has now a security_limit argument + added some docstring to explain data argument
Goffi <goffi@goffi.org>
parents:
1531
diff
changeset
|
1279 @param security_limit: %(doc_security_limit)s |
1692
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1280 @param chained(bool): True if the Deferred result must be returned to the frontend |
0fdd8fe34fbf
core (xmlui): new deferredUI method allows to manage XMLUI with a Deferred insteand of manual submit_id handling:
Goffi <goffi@goffi.org>
parents:
1645
diff
changeset
|
1281 useful when backend is in a series of dialogs with an ui |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1282 @return (data): a deferred which fire the data |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1283 """ |
1736
3739f7779f17
core (xmlui): fixed bad call of deferredUI in deferXMLUI
Goffi <goffi@goffi.org>
parents:
1735
diff
changeset
|
1284 xmlui_d = deferredUI(host, xmlui, chained) |
1601
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1285 action_data = {'xmlui': xmlui.toXml()} |
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1286 if action_extra is not None: |
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1287 action_data.update(action_extra) |
1645
f1da3a8d08ce
core (xmlui): fixed security_limit in deferXMLUI
Goffi <goffi@goffi.org>
parents:
1622
diff
changeset
|
1288 host.actionNew(action_data, security_limit=security_limit, keep_id=xmlui.submit_id, profile=profile) |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1289 return xmlui_d |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1290 |
1601
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1291 def deferDialog(host, message, title=u'Please confirm', type_=C.XMLUI_DIALOG_CONFIRM, options=None, |
1737 | 1292 action_extra=None, security_limit=C.NO_SECURITY_LIMIT, chained=False, profile=C.PROF_KEY_NONE): |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1293 """Create a submitable dialog and manage it with a deferred |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1294 |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1295 @param message(unicode): message to display |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1296 @param title(unicode): title of the dialog |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1297 @param type(unicode): dialog type (C.XMLUI_DIALOG_*) |
1521
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1298 @param options(None, dict): if not None, will be used to update (extend) dialog_opt arguments of XMLUI |
1601
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1299 @param action_extra(None, dict): extra action to merge with xmlui |
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1300 mainly used to add meta informations (see actionNew doc) |
e0a152f2cf6d
core (xmlui), plugin file: added action_extra param to deferXMLUI/deferDialog which is merged to the action data dict when actionNew is called
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1301 @param security_limit: %(doc_security_limit)s |
1737 | 1302 @param chained(bool): True if the Deferred result must be returned to the frontend |
1303 useful when backend is in a series of dialogs with an ui | |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1304 @param profile: %(doc_profile)s |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1305 @return (dict): Deferred dict |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1306 """ |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1307 assert profile is not None |
1521
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1308 dialog_opt = {'type': type_, 'message': message} |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1309 if options is not None: |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1310 dialog_opt.update(options) |
d2ab9c62ac3a
core (xmlui): deferDialog can now manage additional dialog options through the "options" argument
Goffi <goffi@goffi.org>
parents:
1507
diff
changeset
|
1311 dialog = XMLUI(C.XMLUI_DIALOG, title=title, dialog_opt=dialog_opt, submit_id='') |
1737 | 1312 return deferXMLUI(host, dialog, action_extra, security_limit, chained, profile) |
1504
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1313 |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1314 def deferConfirm(*args, **kwargs): |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1315 """call deferDialog and return a boolean instead of the whole data dict""" |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1316 d = deferDialog(*args, **kwargs) |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1317 d.addCallback(lambda data: C.bool(data['answer'])) |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1318 return d |
a2e4b976e707
core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents:
1500
diff
changeset
|
1319 |
802
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1320 # Misc other funtions |
9007bb133009
core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents:
800
diff
changeset
|
1321 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1322 class ElementParser(object): |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1323 """callable class to parse XML string into Element |
1472 | 1324 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1325 Found at http://stackoverflow.com/questions/2093400/how-to-create-twisted-words-xish-domish-element-entirely-from-raw-xml/2095942#2095942 |
1472 | 1326 (c) Karl Anderson |
1327 """ | |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1328 |
1456
a13be5c22334
xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents:
1444
diff
changeset
|
1329 def __call__(self, raw_xml, force_spaces=False): |
905
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
1330 """ |
1456
a13be5c22334
xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents:
1444
diff
changeset
|
1331 @param raw_xml(unicode): the raw XML |
a13be5c22334
xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents:
1444
diff
changeset
|
1332 @param force_spaces: if True, replace occurrences of '\n' and '\t' with ' '. |
905
cad8e52bb2e6
tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents:
876
diff
changeset
|
1333 """ |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1334 self.result = None |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1335 |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1336 def onStart(elem): |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1337 self.result = elem |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1338 |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1339 def onEnd(): |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1340 pass |
590
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1341 |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1342 def onElement(elem): |
56531f9e9ac7
Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1343 self.result.addChild(elem) |
289
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1344 |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1345 parser = domish.elementStream() |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1346 parser.DocumentStartEvent = onStart |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1347 parser.ElementEvent = onElement |
0e54b1b0a8c8
xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1348 parser.DocumentEndEvent = onEnd |
536
a31abb97310d
core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
1349 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
|
1350 if force_spaces: |
1456
a13be5c22334
xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents:
1444
diff
changeset
|
1351 raw_xml = raw_xml.replace('\n', ' ').replace('\t', ' ') |
a13be5c22334
xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents:
1444
diff
changeset
|
1352 tmp.addRawXml(raw_xml) |
304 | 1353 parser.parse(tmp.toXml().encode('utf-8')) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1354 return self.result.firstChildElement() |
1732
cf11cfc87ef9
xml_tools, plugin XEP-0071, XEP-0277: add method expandNewLinesToXHTML:
souliane <souliane@mailoo.org>
parents:
1692
diff
changeset
|
1355 |
cf11cfc87ef9
xml_tools, plugin XEP-0071, XEP-0277: add method expandNewLinesToXHTML:
souliane <souliane@mailoo.org>
parents:
1692
diff
changeset
|
1356 |
1740
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1357 # FIXME: this method is duplicated from frontends.tools.xmlui.getText |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1358 def getText(node): |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1359 """Get child text nodes of a domish.Element. |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1360 |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1361 @param node (domish.Element) |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1362 @return: joined unicode text of all nodes |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1363 """ |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1364 data = [] |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1365 for child in node.childNodes: |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1366 if child.nodeType == child.TEXT_NODE: |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1367 data.append(child.wholeText) |
681fe91abcc0
memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents:
1737
diff
changeset
|
1368 return u"".join(data) |